commit 9e9a590bd8725a2da369e07a3cc7e7013763aca0 Author: Bartosz Kostrzewa Date: Sun Oct 24 19:04:06 2010 +0200 initial commit diff --git a/blib-1.1.7/AUTHORS b/blib-1.1.7/AUTHORS new file mode 100644 index 0000000..0a49afd --- /dev/null +++ b/blib-1.1.7/AUTHORS @@ -0,0 +1,20 @@ +Main Authors: + + Sven Neumann + Michael Natterer + Daniel Mack + + +Blinkenproxy code was originally done by Hannes Mehnert. The Win32 port +wouldn't have been possible without the help from Michael Schumacher. + + +Modules contributed by: + + 1stein <1stein@1stein.no-ip.com> (Pacman, Breakout, Retris, Snake, Xxo) + Simon Budig (Matrix) + + +Views contributed by: + + pix (BView-AA) diff --git a/blib-1.1.7/COPYING b/blib-1.1.7/COPYING new file mode 100644 index 0000000..d60c31a --- /dev/null +++ b/blib-1.1.7/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/blib-1.1.7/ChangeLog b/blib-1.1.7/ChangeLog new file mode 100644 index 0000000..ee85306 --- /dev/null +++ b/blib-1.1.7/ChangeLog @@ -0,0 +1,3429 @@ +2004-04-22 22:24 neo + + * ChangeLog: Made 1.1.7 release. + +2004-04-22 22:08 neo + + * NEWS, README: updated for 1.1.7 release + +2004-04-14 18:58 neo + + * blib/.cvsignore, blib/Makefile.am, blib/blib.h, + blib/bmarshal.list, blib/bpacket.c, blib/bpacket.h, + blib/bproxyserver.c, blib/bproxyserver.h, blib/btypes.h, + docs/reference/Makefile.am, docs/reference/blib-docs.sgml, + docs/reference/blib-sections.txt, + docs/reference/tmpl/bpacket.sgml, + docs/reference/tmpl/bproxyserver.sgml: Added BProxyServer. + Contains most of the code that used to live in blinkenproxy.c but + uses the same file descriptor for listening to the heartbeat and + for sending blinkenlights frames. + +2004-04-09 02:11 neo + + * blib/btheme.c, docs/reference/blib-sections.txt, + docs/reference/tmpl/btheme.sgml, + docs/reference/tmpl/bview-pixbuf.sgml, gfx/bview-pixbuf.c, + gfx/bview-pixbuf.h: documentation + +2004-04-09 01:45 neo + + * gfx/: bview-directfb.c, bview-directfb.h: Changed return value of + b_view_directfb_new() to match what the other views do. + +2004-04-09 00:55 neo + + * gfx/bview-pixbuf.c: fixed bugs in the new code + +2004-04-09 00:34 neo + + * gfx/: bview-aa.c, bview-aa.h, bview-gtk.c, bview-pixbuf.c, + bview-pixbuf.h: Added a theme-less mode for BViewPixbuf. Some + minor cleanups in other views. + +2004-04-08 23:53 neo + + * gfx/bview-pixbuf.c: actually skip image preloading if + b_view_pixbuf() is called with image_preload == FALSE + +2004-04-08 04:35 neo + + * blib/bmovie.c: minor cleanups + +2004-04-07 16:46 neo + + * gfx/bview-pixbuf.c: use a pixbuf w/o alpha channel + +2004-04-07 15:52 neo + + * blib/butils.c, gfx/bview-gtk.c, gfx/bview-gtk.h, + gfx/bview-pixbuf.c: numerous fixes + +2004-04-07 14:25 neo + + * blib-gtk.pc.in, blib/btheme-parser.c, blib/btheme.c, + blib/btheme.h, blib/butils.c, blib/butils.h, + data/blinkentheme.dtd, gfx/blib-gtk.h, gfx/bview-directfb.c, + gfx/bview-gtk.c, gfx/bview-gtk.h, gfx/bview-pixbuf.c, + gfx/bview-pixbuf.h: Added the possibility to specify an offset + for the background image in a blinkentheme. Added + b_theme_frame_diff_boundary(), used to live in bmovie-mng.c. + Added a clip rectangle to b_view_pixbuf_render(). Let BViewGtk + use BViewPixbuf for the unoptimized case. + +2004-04-07 01:28 neo + + * gfx/: bview-pixbuf.c, bview-pixbuf.h: added a GError parameter to + b_view_pixbuf_render() + +2004-04-07 00:16 neo + + * blib/butils.c: allow the dest rectangle to be NULL in + b_rectangle_intersect + +2004-04-07 00:02 neo + + * blib-pixbuf.pc.in: fixed typo + +2004-04-07 00:01 neo + + * Makefile.am: install the blib-pixbuf.pc file + +2004-04-06 23:35 neo + + * configure.in: bumped version number to 1.1.7, binary age 0, + interface age 0 + +2004-04-06 23:07 neo + + * .cvsignore, ChangeLog, blib-pixbuf.pc.in, configure.in, + blib/butils.c, blib/butils.h, docs/reference/Makefile.am, + docs/reference/blib-docs.sgml, docs/reference/blib-sections.txt, + docs/reference/blib.types.in, docs/reference/tmpl/butils.sgml, + docs/reference/tmpl/bview-pixbuf.sgml, gfx/.cvsignore, + gfx/Makefile.am, gfx/blib-pixbuf.h, gfx/bview-pixbuf.c, + gfx/bview-pixbuf.h: Added b_rectangle_union and + b_rectangle_intersect to butils.[ch]. Added BViewPixbuf, a new + view using gdk-pixbuf to render single frames. Duplicates quite + some code from BViewGtk but I will make the latter use the new + view later. + +2004-03-09 23:57 neo + + * ChangeLog, NEWS: Made 1.1.6 release. + +2004-03-09 20:14 neo + + * modules/: bretris.c, bsnake.c: applied modified versions of + patches from 1Stein to make snake and bretris multi-player aware. + +2004-02-24 22:15 neo + + * docs/reference/tmpl/bprotocol.sgml: documented defines that were + introduced for the blinkenproxy protocol + +2004-02-17 08:55 tim + + * .cvsignore: ignore mac stuff + +2004-02-16 15:50 neo + + * gfx/bview-gtk.c: oops, looks as if I accidentally committed some + broken code yesterday + +2004-02-16 15:47 neo + + * blib/bparser.c: Set the GIOChannel encoding to NULL before + attempting to locate the XML header. Fixes endless looping on + some binary files. + +2004-02-16 00:01 neo + + * gfx/bview-gtk.c: fixed color handling in gdk_pixbuf_fill_rect() + +2004-02-14 23:05 neo + + * NEWS, README, configure.in: Bumped version number to 1.1.6, + binary age 0, interface ago 0. + +2004-02-14 21:40 neo + + * blib/bsender.c, blib/bsender.h, docs/reference/blib-sections.txt, + docs/reference/tmpl/bsender.sgml: Suppress the error messages + when sending a packet fails. Added new function + b_sender_set_verbose() that allows to get the old behaviour back. + +2004-02-14 21:23 neo + + * gfx/: bview-directfb.c, bview-gtk.c, bview-gtk.h: Only do the + optimization if none of the loaded images has an alpha channel. + +2004-02-14 20:10 neo + + * blib/btheme-parser.c, blib/btheme.c, blib/btheme.h, + gfx/bview-directfb.c, gfx/bview-gtk.c, gfx/bview-gtk.h: Added a + boolean parameter "needs_blending" to the BTheme struct. Did + some improvements to the GTK+ view. Only minor speedup when the + theme needs blending but dramatically faster otherwise. + +2004-01-20 01:53 neo + + * AUTHORS, ChangeLog: Made 1.1.5 (development) release. + +2004-01-20 01:42 neo + + * ChangeLog, NEWS, README: Updates for the 1.1.5 release. + +2004-01-19 17:33 neo + + * blib/bmovieplayer.c: better error message when loading a movie + fails + +2004-01-07 20:27 neo + + * blib/bpacket.c: Removed overly picky assertions. + +2004-01-07 19:41 neo + + * configure.in: fixed check for win32 + +2004-01-07 00:39 neo + + * docs/reference/tmpl/bsocket.sgml: Added new template file. + +2004-01-07 00:29 neo + + * blib/bsocket.c, docs/reference/blib-docs.sgml, + docs/reference/blib-sections.txt: Documented the new functions. + +2004-01-07 00:07 neo + + * README, blib/bproxyclient.c, blib/bsender.c, blib/bsocket.c, + blib/bsocket.h: Added b_socket_init(), a function that + initializes the Winsock DLL on Win32 and does nothing on Unixes. + Call it before calling any network related functions like + gethostbyname(). + +2004-01-06 23:44 neo + + * blib/Makefile.am: fixed a typo + +2004-01-06 23:23 neo + + * blib.pc.in, configure.in, blib/Makefile.am, blib/breceiver.c, + gfx/Makefile.am, test/Makefile.am: Add -lwsock32 to the linker + flags on win32. Promote the win32 specific compiler and linker + flags to blib applications by putting them into the pkg-config + file. + +2004-01-06 22:58 neo + + * configure.in: check for win32 and modify CFLAGS to get struct + packing right + +2004-01-06 22:33 neo + + * blib/: bproxyclient.c, breceiver.c, bsender.c, bsocket.c: First + attempt at a win32 port using the winsock DLL. Thanks to Michael + Schumacher for his suggestions. + +2004-01-06 21:57 neo + + * blib/: Makefile.am, blib.h, bproxyclient.c, breceiver.c, + bsender.c, bsocket.c, bsocket.h: Factored out socket creation and + setup. + +2004-01-06 21:00 neo + + * blib/butils.h: cosmetics + +2004-01-04 22:24 neo + + * configure.in, docs/reference/tmpl/bview-aa.sgml: Fixed configure + output for the case aalib is not available. Updated docs. + +2004-01-04 13:30 neo + + * blib/bmovieplayer.c: Reverted the last change. The library should + never print any error messages (yes I know there are a few places + that still do). It's up to the caller to do that. + +2004-01-03 23:11 blccc + + * blib/bmovieplayer.c: print file name when unable to load movie + from playlist + +2004-01-03 21:38 tim + + * modules/digits.h: 3x5 digit font streamlined + +2003-12-31 18:55 daniel + + * modules/: bcountdown.c, bdebug.c: some smaller cosmetic changes + +2003-12-31 04:05 neo + + * ChangeLog: Made 1.1.4 (development) release. + +2003-12-31 04:04 neo + + * ChangeLog, NEWS: Updates for the 1.1.4 release. + +2003-12-31 02:32 neo + + * gfx/: bview-aa.c, bview-aa.h: Simplified the API of the aalib + view. + +2003-12-30 23:57 neo + + * blib/bmovie-gif-parser.c: Fixed combine mode that broke with my + latest GIF loading "fix". + +2003-12-30 23:22 neo + + * blib/bmovie.c: Fixed check for GIF header. Now reads GIF87a as + well. + +2003-12-30 22:12 neo + + * blib/bsender.c: fixed use of send() + +2003-12-30 22:11 neo + + * blib/: bproxyclient.c, bsender.c: Replaced write() with the more + portable send(). + +2003-12-30 21:46 neo + + * blib-aa.pc.in, configure.in, docs/reference/Makefile.am, + docs/reference/blib-docs.sgml, docs/reference/blib-sections.txt, + docs/reference/tmpl/bview-aa.sgml, gfx/Makefile.am: Added docs + for BViewAA. + +2003-12-30 21:40 daniel + + * modules/: bclock.c, bcountdown.c, bdebug.c, bpong.c, digits.h: - + changed the whole digits scheme to get rid of LARGE_DIGITS and to + make an application decide which font to use at runtime. Changed + all text-related modules accordingly. - Fixed a ":" spacing + issue in BClock - Improved the BCountdown-module a lot. It + scrolls down the old digits now and makes use of greyscales. It + also uses different fonts depending on the number of digits to + display. + +2003-12-30 21:37 neo + + * .cvsignore, AUTHORS, ChangeLog, Makefile.am, README, + blib-aa.pc.in, configure.in, docs/reference/blib.types.in, + gfx/.cvsignore, gfx/Makefile.am, gfx/blib-aa.h, gfx/bview-aa.c, + gfx/bview-aa.h: Added an aalib-based BView contributed by pix. + +2003-12-29 22:16 neo + + * configure.in: Bumped version number to 1.1.4. + +2003-12-29 21:58 neo + + * blib/: bprotocol.h, bproxyclient.c: Don't bind the local port + explicitely when b_proxy_client_new() is called with listen_port + < 0. + + For portability, use GLib types in bprotocol.h. + +2003-12-29 20:37 neo + + * modules/: bclock.c, bpong.c: increase the speedup when the + computer looses + +2003-12-29 05:03 neo + + * modules/bsnake.c: Updated version from 1stein. + +2003-12-28 18:09 neo + + * ChangeLog: Made 1.1.3 release. + +2003-12-28 18:07 neo + + * blib/bpacket.c: Always convert the magic between host and network + byteorder, not only for matching magics. + +2003-12-28 17:59 neo + + * ChangeLog, NEWS, README: Updates for the 1.1.3 release. + +2003-12-28 15:35 neo + + * configure.in, gfx/bview-directfb.c, gfx/bview-gtk.c: Bumped + version number to 1.1.3. Some minor optimizations in the GTK+ + widget. + +2003-12-28 15:34 neo + + * docs/reference/blib.types.in: Added BProxyClient. + +2003-12-28 05:31 neo + + * blib/bmovie-gif-parser.c: Made the GIF parser quiet again. + +2003-12-28 05:19 neo + + * blib/: bmovie-gif-parser.c, gif-load.c, gif-save.c: Made the GIF + parser more forgiving and fixed handling of local colormaps. + +2003-12-27 16:14 neo + + * gfx/bview-gtk.c: Removed trailing whitespace. + +2003-12-25 20:48 neo + + * ChangeLog: Made 1.1.2 (development) release. + +2003-12-25 20:47 neo + + * AUTHORS, ChangeLog, NEWS, README: Updates for the 1.1.2 release. + +2003-12-25 19:36 neo + + * blib/bproxyclient.c, blib/breceiver.c, blib/bsender.c, + blib/bsender.h, docs/reference/blib-docs.sgml, + docs/reference/blib-sections.txt, + docs/reference/tmpl/bproxyclient.sgml, + docs/reference/tmpl/breceiver.sgml: Updated API documentation. + +2003-12-25 19:10 neo + + * blib/bproxyclient.c: Fixed usage of bind() and connect(). + +2003-12-25 18:58 neo + + * blib/bproxyclient.c: Fixed BProxyClient implementation. + +2003-12-25 16:52 neo + + * configure.in, blib/Makefile.am, blib/blib.h, blib/bproxyclient.c, + blib/bproxyclient.h, blib/breceiver.c, blib/breceiver.h, + blib/btypes.h, docs/reference/tmpl/breceiver.sgml: Added + BProxyClient, derived from BReceiver. + +2003-12-24 22:11 tim + + * autogen.sh: check for glibtool alternatively for Mac OS X support + +2003-12-24 02:18 neo + + * ChangeLog: Made 1.1.1 (development) release. + +2003-12-24 02:16 neo + + * ChangeLog, Makefile.am, NEWS: Updates for the 1.1.1 release. + +2003-12-24 02:00 neo + + * blib/: breceiver.c, bsender.c: Set the SO_REUSEPORT socket option + where available. + +2003-12-24 01:22 neo + + * blib/: breceiver.c, bsender.c: Check if setsockopt() succeeds. + More verbose error reporting. + +2003-12-24 01:12 neo + + * blib/breceiver.c: Readded a line I accidentally deleted. + +2003-12-24 00:50 neo + + * blib/breceiver.c: Check the size of the received packets. + +2003-12-24 00:29 neo + + * configure.in, blib/bpacket.c, blib/bprotocol.h, blib/breceiver.c, + debian/rules: Bumped version to 1.1.1. Added a protocol version + number to the heartbeat packet header. Check the size of the + received packet before dispatching it. + +2003-12-23 05:01 neo + + * debian/: .cvsignore, libblib-dev.files, + libblib-directfb-dev.files, libblib-directfb.files, + libblib-gtk-dev.files, libblib-gtk.dirs, libblib-gtk.files, + libblib.files: A bunch of fixes for the debian files. + +2003-12-22 21:20 neo + + * debian/: .cvsignore, changelog, control, copyright, dirs, docs, + files, libblib-dev.dirs, libblib-dev.files, libblib-gtk.dirs, + libblib-gtk.files, libblib.dirs, libblib.files, rules: Debianized + the package. + +2003-12-21 21:29 neo + + * ChangeLog: Made 1.1.0 (development) release. + +2003-12-21 21:00 neo + + * blib/bsender.c: use memset to zero out the heartbeat packet + +2003-12-21 20:53 neo + + * ChangeLog, NEWS, README: Updated for development release. + +2003-12-21 18:00 neo + + * autogen.sh, blib/bsender.c: Nullify the hearbeat package. Added + a missing linefeed in autogen.sh. + +2003-12-21 17:23 neo + + * modules/: bbreakout.c, bclock.c, bpacman.c, bretris.c, bsnake.c, + bxxo.c: Fixed portability issues with the new modules: Use glib + for memory allocation; fixed include order; include config.h. + +2003-12-21 14:44 neo + + * blib/bsender.c, blib/bsender.h, docs/reference/blib-sections.txt, + docs/reference/tmpl/blib-unused.sgml, + docs/reference/tmpl/bprotocol.sgml, + docs/reference/tmpl/bsender.sgml: Removed the conceptually broken + function b_sender_check_recipients(). + +2003-12-21 13:41 neo + + * blib/: bprotocol.h, breceiver.c, breceiver.h: Removed port and + padding from heartbeat header. + + Removed host member from BReceiver struct. + + Added addr and port members to BReceiver. These are in network + byte order and are only valid while the BReceiverCallback runs. + Most users of BReceiver can safely ignore these values. + +2003-12-21 12:08 neo + + * blib/bsender.c, blib/bsender.h, test/test-module.c, + test/test-movie-player.c, test/test-sender.c: Added a source port + parameter to b_sender_add_recipients(). We will need this to + implement blinkenproxy so that it works thru (some) firewalls. + +2003-12-20 01:37 neo + + * blib/bsender.c: hardcode MCU_LISTENER_PORT as originating port + for hearbeat packets + +2003-12-20 01:16 neo + + * blib/bsender.c: explicitely bind the socket + +2003-12-20 00:30 neo + + * blib/: bpacket.c, breceiver.c, bsender.c, bsender.h: Don't send + the port number in the heartbeat packet. + +2003-12-19 23:47 neo + + * blib/bpacket.c, blib/bpacket.h, blib/breceiver.c, blib/bsender.c, + blib/bsender.h, docs/reference/tmpl/blib-unused.sgml, + docs/reference/tmpl/bpacket.sgml, + docs/reference/tmpl/bsender.sgml: Some cleanup to the heartbeat + code. Made b_packet_ntoh() and b_packet_hton() also work for + hearbeat packages. + +2003-12-19 03:25 neo + + * blib/bprotocol.h: Added back HEARTBEAT defines, this time + prefixed with B_. + +2003-12-19 03:19 neo + + * blib/bprotocol.h, blib/breceiver.c, blib/bsender.c, + docs/reference/blib-sections.txt, + docs/reference/tmpl/bpacket.sgml, + docs/reference/tmpl/bprotocol.sgml, + docs/reference/tmpl/bsender.sgml, test/test-module.c: Some code + cleanup, mainly related to the new hearbeat functionality. + +2003-12-19 02:27 neo + + * modules/: Makefile.am, bretris.c, bsnake.c, bxxo.c: Added three + new games for Blinkenlights Reloaded. These are contributed by + 1stein. + +2003-12-18 13:41 neo + + * configure.in, docs/reference/.cvsignore, + docs/reference/blib-docs.sgml, docs/reference/version.in, + docs/reference/version.xml.in: Use XInclude for the version + number instead of an entity. + +2003-12-05 12:07 neo + + * ChangeLog, NEWS, README, autogen.sh, blib/bparser.c: merged some + minor changes from HEAD, update ChangeLog, NEWS and README + +2003-09-15 19:50 neo + + * blib/bparser.c: set the buffer size to 8192 instead of 8196 + +2003-08-09 16:39 neo + + * blib/: breceiver.c, bsender.c: Some code cleanup, mainly moving + variable declarations to the start of the scope. + +2003-08-09 01:30 neo + + * blib/breceiver.c: Merged compat mode from HEAD. + +2003-08-09 00:54 neo + + * blib/breceiver.c: Enabled compatibility with the old-style + blinkenlights UDP packets. + +2003-06-25 00:17 hannes + + * autogen.sh: compile fix for FreeBSD + +2003-05-22 20:01 hannes + + * blib/: bpacket.c, bsender.c, bsender.h: cleanup + +2003-05-21 02:55 hannes + + * blib/breceiver.c: fix for compiling on bsd systems (thanks, tim + ;) + +2003-05-21 02:02 hannes + + * blib/bpacket.c, blib/bpacket.h, blib/bprotocol.h, + blib/breceiver.c, blib/breceiver.h, blib/bsender.c, + blib/bsender.h, modules/bproxy.c, test/test-receiver.c: + blinkenproxy changes + +2003-05-13 16:55 neo + + * README, blib/gif-load.c, blib/gif-load.h, blib/gif-save.c, + blib/gif-save.h: The copyright issues with the GIF code have + finally been sorted out. Changed the comments accordingly. + +2003-05-12 14:24 neo + + * gfx/Makefile.am: Merged fixes for automake-1.7 from stable + branch. + +2003-05-12 14:24 neo + + * NEWS, configure.in, gfx/Makefile.am: Bumped version to 1.0.2. + Fixed some Makefile issues to please automake-1.7. + +2003-05-11 21:29 neo + + * configure.in, modules/Makefile.am: Merged change from HEAD + branch: Allow to disable build of modules. + +2003-05-11 21:24 neo + + * configure.in, modules/Makefile.am: Allow to disable the build of + modules by passing --disable-modules to configure. + +2003-05-07 16:31 hannes + + * blib/bprotocol.h: heartbeat stuff + +2003-02-09 12:57 neo + + * ChangeLog: updated ChangeLog + +2003-02-07 15:40 neo + + * docs/reference/Makefile.am: merged fix from stable branch + +2003-02-07 15:29 neo + + * ChangeLog, docs/reference/Makefile.am: Fixed typo in dist-hook. + +2003-02-07 15:26 neo + + * NEWS, configure.in, docs/reference/tmpl/bpacket.sgml: Bumped + version number to 1.1.0. Merged changes to NEWS from blib-1-0 + branch. + +2003-02-07 15:21 neo + + * ChangeLog: Made 1.0.1 Release. + +2003-02-07 15:19 neo + + * ChangeLog, NEWS, configure.in: Bumped version number to 1.0.1 + (INTERFACE_AGE 0, BINARY_AGE 1). + +2003-02-07 15:14 neo + + * blib/bpacket.c, blib/bpacket.h, docs/reference/blib-sections.txt, + docs/reference/tmpl/bpacket.sgml: Merged fixes for the broken + inline functions from the HEAD branch. + +2003-02-06 16:58 neo + + * blib/bpacket.c, blib/bpacket.h, docs/reference/tmpl/bpacket.sgml: + Converted b_packet_hton() and b_packet_ntoh() to regular + functions. Trying to write portable inline functions obviously + didn't work and I doubt it will make any noticeable difference + anyway. + +2003-02-06 16:47 neo + + * docs/reference/blib-sections.txt: Updates for gtk-doc 1.0. + +2003-01-08 19:54 neo + + * blib/: blib.c, bpacket.h: Don't include external header blib.h + from blib itself. Fixed usage of G_INLINE_FUNC macro. + +2003-01-02 15:01 neo + + * modules/bclock.c: Fixed stupid typo in BClock. + +2002-12-31 19:32 neo + + * modules/bcountdown.c: Include for gettimeofday(). + +2002-12-31 19:29 neo + + * modules/bcountdown.c: Use gettimeofday() for more accurate + timing. + +2002-12-31 19:17 neo + + * modules/bcountdown.c: Don't request stop from + b_countdown_start(). Should work but not even test_module handles + it correctly :-( + +2002-12-31 19:08 neo + + * modules/: .cvsignore, Makefile.am, bcountdown.c, digits.h: Added + BCountdown module. + +2002-12-31 17:14 neo + + * modules/digits.h: Added a nice large (5x7) digits font. + +2002-12-29 00:29 neo + + * test/test-module-scanner.c: Use the local module directory if no + module dir is specified on the command-line. + +2002-12-28 23:47 neo + + * test/test-module-scanner.c: register the builtin BMoviePlayer + type explicitely + +2002-12-28 20:10 neo + + * modules/: bclock.c, bdebug.c, bpong.c, digits.h: Added defines + for the glyph metrics to digits.h. Use them from all modules + using digits.h. Improved how the digital clock adapts to the + screen size. + +2002-12-28 14:50 neo + + * ChangeLog: Made 1.0.0 release. + +2002-12-28 14:23 neo + + * README, modules/bclock.c: Updated the README for the 1.0.0 + release. + +2002-12-28 04:30 neo + + * modules/bclock.c: avoid bouncing digital clock + +2002-12-28 04:05 neo + + * docs/reference/tmpl/bmovie-effects.sgml, + docs/reference/tmpl/bmovie.sgml, modules/bclock.c, + modules/digits.h: Added a space character to the digits font. + Updated docs. Improved digital BClock for smaller displays. + +2002-12-28 03:22 neo + + * ChangeLog, NEWS: More news for the 1.0.0 release. + +2002-12-28 03:18 neo + + * blib/bmovie-effects.c, blib/bmovie-effects.h, + docs/reference/blib-sections.txt: Added new function + b_movie_apply_colormap(). + +2002-12-28 02:30 neo + + * ChangeLog, docs/reference/Makefile.am, modules/Makefile.am, + modules/bclock.c, modules/bdebug.c, modules/bpong.c, + modules/digits.h: Moved digits font into a separate file and + share it among modules. + +2002-12-28 01:44 neo + + * modules/bclock.c: grrr + +2002-12-28 01:40 neo + + * modules/bclock.c: oops + +2002-12-28 01:35 neo + + * modules/bclock.c: take the aspect ratio into account + +2002-12-28 01:22 neo + + * modules/bclock.c: Made the clock adapt better to the screen size. + +2002-12-27 22:36 neo + + * blib/btheme.c: Lazy-load scratch themes. + +2002-12-27 20:03 neo + + * blib/breceiver.c: If we need to drop frames in BReceiver, drop + all but the last frame instead of the first. + +2002-12-27 18:59 neo + + * ChangeLog: Updated ChangeLog for 1.0.0 release. + +2002-12-27 18:40 neo + + * docs/reference/: Makefile.am, blib-sections.txt, + tmpl/bmovie.sgml: documented the different BMovie implementations + +2002-12-27 18:12 neo + + * blib/bobject.c, docs/reference/blib.types.in, + docs/reference/tmpl/bmovie.sgml, + docs/reference/tmpl/bobject.sgml, + docs/reference/tmpl/bpacket.sgml, + docs/reference/tmpl/bprotocol.sgml, + docs/reference/tmpl/breceiver.sgml, + docs/reference/tmpl/bsender.sgml: Improved docs. + +2002-12-27 16:28 neo + + * modules/bpong.c: Fixed bug in Pong initialization. + +2002-12-27 16:13 neo + + * test/test-module.c: Ooops, didn't mean to commit that... + +2002-12-27 16:12 neo + + * modules/bpong.c, test/test-module.c: Fixed key bindings for Pong. + +2002-12-19 12:19 neo + + * blib/Makefile.am, gfx/Makefile.am, modules/Makefile.am: Removed + $(includedir) since it seems wrong. + +2002-12-18 23:42 neo + + * blib/bthemes.c: Include string.h for strcmp(). + +2002-12-18 20:06 neo + + * docs/reference/tmpl/: beffects.sgml, blib.sgml, + bmovie-effects.sgml: added missing short descriptions + +2002-12-18 19:17 neo + + * docs/reference/Makefile.am: added a dependency on blib.types + +2002-12-18 18:54 mitch + + * configure.in, docs/reference/.cvsignore, + docs/reference/Makefile.am, docs/reference/blib.types, + docs/reference/blib.types.in, gfx/bview-directfb.h, + gfx/bview-gtk.h: - generate the docs for conditionally built + sources conditionally. - declare object struct members of the + conditionally built object explicitely as /*< private >*/ so + they don't end up the the docs. + +2002-12-18 18:47 mitch + + * blib/bmovieplayer.c: better error reporting in + b_movie_player_prepare(). + +2002-12-17 15:23 neo + + * blib/btheme-parser.c, blib/btheme.c, blib/btheme.h, + blib/bthemes.c, docs/reference/blib-sections.txt, + docs/reference/tmpl/btheme.sgml: Added + b_theme_new_from_scratch(), a function that allows to create a + theme to quickly test a movie format w/o having to create a new + theme XML file. + +2002-12-17 11:18 neo + + * blib/bthemes.c, blib/bthemes.h, docs/reference/blib-sections.txt, + docs/reference/tmpl/btheme.sgml: Removed the short_name from the + new themes API and changed the wrappers for the old API so they + provide this functionality. + +2002-12-17 02:32 neo + + * blib/bthemes.h, blib/btypes.h, docs/reference/tmpl/btheme.sgml: + Changed structure declaration to more gtk-doc friendly format. + +2002-12-17 02:23 neo + + * blib/bthemes.c, data/blinkentheme.dtd: Fixed a possible crash in + b_themes_query(). + +2002-12-17 02:03 neo + + * data/blinkentheme.dtd: Added an optional type attribute to the + blinkenthemes DTD. + +2002-12-17 02:00 neo + + * blib/bthemes.h, docs/reference/Makefile.am: Guard the old themes + API with B_DISABLE_DEPRECATED. + +2002-12-17 01:54 neo + + * blib/btheme.h, blib/bthemes.c, blib/bthemes.h, + docs/reference/blib-sections.txt, + docs/reference/tmpl/bparser.sgml, + docs/reference/tmpl/breceiver.sgml, + docs/reference/tmpl/btheme.sgml: Polished the new themes API and + added compatibility wrappers for the old API. + +2002-12-16 23:17 tim + + * blib/: Makefile.am, blib.h, btheme-parser.c, btheme.c, btheme.h, + bthemes.c, bthemes.h: improved themes handling - changed by neo + +2002-12-16 01:09 neo + + * blib.pc.in: need to change the glib version here as well + +2002-12-16 00:55 neo + + * configure.in: Lower the required version of glib to 2.0.1 so that + blib can be build on Debian Woody (stable). + +2002-12-15 01:42 neo + + * modules/bdebug.c: removed a misleading comment + +2002-12-15 00:08 neo + + * modules/bdebug.c: Fixed copy'n'paste bug. Suppress display of + numbers if the screen is too small. + +2002-12-14 18:31 neo + + * modules/bpong.c: finetuned the digits + +2002-12-14 17:38 neo + + * configure.in: moved some lines around to please autoconf + +2002-12-14 16:51 neo + + * modules/btetris.c: Set bottom offset to 0. + +2002-12-10 20:54 neo + + * blib/bmodule.c, docs/reference/tmpl/bmodule.sgml, + docs/reference/tmpl/bmoduleinfo.sgml, + docs/reference/tmpl/bmovie.sgml, + docs/reference/tmpl/bmovieplayer.sgml, + docs/reference/tmpl/bpacket.sgml, + docs/reference/tmpl/bparser.sgml, + docs/reference/tmpl/breceiver.sgml, + docs/reference/tmpl/bsender.sgml, + docs/reference/tmpl/btheme.sgml, + docs/reference/tmpl/bwriter.sgml: More docs, almost there (98%). + +2002-12-10 19:15 neo + + * blib/bmodule.h, docs/reference/blib-docs.sgml, + docs/reference/tmpl/bmodule-internal.sgml, + docs/reference/tmpl/bmodule-utils.sgml, + docs/reference/tmpl/bmodule.sgml, + docs/reference/tmpl/bmoduleinfo.sgml, + docs/reference/tmpl/bobject.sgml, + docs/reference/tmpl/bprotocol.sgml, + docs/reference/tmpl/btheme.sgml, docs/reference/tmpl/butils.sgml, + docs/reference/tmpl/bview-directfb.sgml, + docs/reference/tmpl/bview-gtk.sgml: more documentation (85%) + +2002-12-10 16:56 neo + + * ChangeLog, blib/bmoduleinfo.c, blib/bmoduleinfo.h, + blib/bsender.c, docs/reference/blib-docs.sgml, + docs/reference/blib-sections.txt, + docs/reference/tmpl/bmoduleinfo.sgml, + docs/reference/tmpl/bmovie.sgml, + docs/reference/tmpl/bprotocol.sgml: Removed + b_module_info_scan_default_dir(). Pass NULL to + b_module_info_dir() to get this behaviour. Changed + b_sender_remove_recipient() so it only removes recipients with a + matching port number. Changed b_sender_list_recipients() to + include the port number. Added more docs (77%). + +2002-12-10 15:23 neo + + * blib/bpacket.c, blib/breceiver.c, blib/btheme.c, + docs/reference/blib-docs.sgml, docs/reference/tmpl/bpacket.sgml: + more docs (63%) + +2002-12-10 14:15 neo + + * blib/beffects.c, blib/bmovie-effects.c, + docs/reference/tmpl/bmovie.sgml, + docs/reference/tmpl/bparams.sgml, + docs/reference/tmpl/btheme.sgml, docs/reference/tmpl/btypes.sgml: + more docs (59%) + +2002-12-10 13:18 neo + + * blib/bmodule-utils.c, blib/bmodule.c, blib/bparser.c, + blib/breceiver.c, blib/breceiver.h, + docs/reference/tmpl/bmovie.sgml, + docs/reference/tmpl/breceiver.sgml: documented more functions + (50% symbol coverage) + +2002-12-10 11:47 neo + + * docs/reference/blib-docs.sgml: more updates to the toplevel + document, still not 100% valid + +2002-12-10 01:26 neo + + * docs/reference/: Makefile.am, blib-docs.sgml, blib-sections.txt, + tmpl/beffects.sgml, tmpl/blib.sgml, tmpl/bmodule-internal.sgml, + tmpl/bmodule-utils.sgml, tmpl/bmodule.sgml, + tmpl/bmoduleinfo.sgml, tmpl/bmovie-effects.sgml, + tmpl/bmovie.sgml, tmpl/bmovieplayer.sgml, tmpl/bobject.sgml, + tmpl/bpacket.sgml, tmpl/bparams.sgml, tmpl/bparser.sgml, + tmpl/bprotocol.sgml, tmpl/breceiver.sgml, tmpl/bsender.sgml, + tmpl/btheme.sgml, tmpl/btypes.sgml, tmpl/butils.sgml, + tmpl/bview-directfb.sgml, tmpl/bview-gtk.sgml, tmpl/bwriter.sgml, + tmpl/gif-load.sgml, tmpl/gif-save.sgml, tmpl/gif-types.sgml: + Decided that I don't want to document the GIF API. It's merely + for internal use and I don't want to encourage people to use this + format. Updated the template files. + +2002-12-09 18:58 neo + + * NEWS, docs/reference/blib-docs.sgml: Fixed a couple of docbook + errors and added more info. + +2002-12-09 18:26 neo + + * docs/reference/blib-docs.sgml: some introductory words + +2002-12-09 17:47 neo + + * configure.in: Added a micro number to the version so the next + release should become 1.0.0. + +2002-12-09 17:38 neo + + * configure.in, docs/reference/.cvsignore, + docs/reference/blib-docs.sgml, docs/reference/version.xml.in: + Added version information to the API reference. Started to write + a short introduction. + +2002-12-09 16:57 neo + + * blib/: bparser.c, bwriter.c: Documented BParser and BWriter (31% + docs coverage) + +2002-12-09 16:04 neo + + * blib/btheme.c, docs/reference/blib-sections.txt, + gfx/bview-directfb.c, gfx/bview-gtk.c: more documentation (22%) + +2002-12-09 15:30 neo + + * blib/: bmovie.c, bmovie.h, bparams.c, butils.c: up to 17% + documentation coverage + +2002-12-09 14:34 neo + + * blib/: blib.c, bobject.c, butils.c: Added documentation for a + couple of functions. + +2002-12-09 01:46 neo + + * docs/reference/: blib-docs.sgml, blib-sections.txt, + tmpl/beffects.sgml, tmpl/blib.sgml, tmpl/bmodule-internal.sgml, + tmpl/bmodule-utils.sgml, tmpl/bmodule.sgml, + tmpl/bmoduleinfo.sgml, tmpl/bmovie-effects.sgml, + tmpl/bmovie.sgml, tmpl/bmovieplayer.sgml, tmpl/bobject.sgml, + tmpl/bpacket.sgml, tmpl/bparams.sgml, tmpl/bparser.sgml, + tmpl/bprotocol.sgml, tmpl/breceiver.sgml, tmpl/bsender.sgml, + tmpl/btheme.sgml, tmpl/btypes.sgml, tmpl/butils.sgml, + tmpl/bview-directfb.sgml, tmpl/bview-gtk.sgml, tmpl/bwriter.sgml, + tmpl/gif-load.sgml, tmpl/gif-save.sgml, tmpl/gif-types.sgml: + unified titles + +2002-12-08 19:30 neo + + * Makefile.am, configure.in, docs/.cvsignore, docs/Makefile.am, + docs/reference/.cvsignore, docs/reference/Makefile.am, + docs/reference/blib-docs.sgml, docs/reference/blib-overrides.txt, + docs/reference/blib-sections.txt, docs/reference/blib.types, + docs/reference/tmpl/beffects.sgml, + docs/reference/tmpl/blib-unused.sgml, + docs/reference/tmpl/blib.sgml, + docs/reference/tmpl/bmodule-internal.sgml, + docs/reference/tmpl/bmodule-utils.sgml, + docs/reference/tmpl/bmodule.sgml, + docs/reference/tmpl/bmoduleinfo.sgml, + docs/reference/tmpl/bmovie-effects.sgml, + docs/reference/tmpl/bmovie.sgml, + docs/reference/tmpl/bmovieplayer.sgml, + docs/reference/tmpl/bobject.sgml, + docs/reference/tmpl/bpacket.sgml, + docs/reference/tmpl/bparams.sgml, + docs/reference/tmpl/bparser.sgml, + docs/reference/tmpl/bprotocol.sgml, + docs/reference/tmpl/breceiver.sgml, + docs/reference/tmpl/bsender.sgml, + docs/reference/tmpl/btheme.sgml, docs/reference/tmpl/btypes.sgml, + docs/reference/tmpl/butils.sgml, + docs/reference/tmpl/bview-directfb.sgml, + docs/reference/tmpl/bview-gtk.sgml, + docs/reference/tmpl/bwriter.sgml, + docs/reference/tmpl/gif-load.sgml, + docs/reference/tmpl/gif-save.sgml, + docs/reference/tmpl/gif-types.sgml: Added framework for a blib + API reference. This uses the very latest version of gtk-doc to + generate DocBook XML from the source files. Chances that are that + it doesn't work on your system. That's why it is disabled by + default. + +2002-12-08 18:11 neo + + * blib/: bobject.c, bpacket.h: Added blurbs for BObject properties. + Added prototype for packet byteorder functions. + +2002-12-08 16:23 neo + + * .cvsignore, autogen.sh: Call libtoolize explictly, since newer + automakes don't run it for us anymore. + +2002-10-21 18:10 neo + + * blib/btheme-parser.c, data/blinkentheme.dtd: Improved DTD, + teached the theme parser how to handle "all" value. + +2002-10-21 16:21 neo + + * gfx/bview-gtk.c: fixed safety checks + +2002-10-21 11:25 neo + + * NEWS, configure.in: Bumped version number to 1.0. + +2002-10-21 11:24 neo + + * blib/btheme-parser.c, blib/btheme.h, data/blinkentheme.dtd, + gfx/bview-directfb.c, gfx/bview-gtk.c: allow to specify overlay + images for the different intensity values + +2002-10-21 11:23 neo + + * modules/: bclock.c, bmatrix.c, bpushline.c: code cleanup, renamed + BPushLine to BPushline. + +2002-10-11 16:20 neo + + * modules/: Makefile.am, btetris.c: Some code and Makefile cleanup. + +2002-10-06 04:33 neo + + * modules/bclock.c: less debug output + +2002-10-04 23:08 daniel + + * modules/: bclock.c, bpong.c: sless speedup in pong + +2002-10-04 22:43 neo + + * modules/bbreakout.c: slightly faster breakout + +2002-10-04 21:03 mitch + + * modules/: .cvsignore, Makefile.am, bclock.c, btext.c: - added + BText module which prints arbitrary ASCII (!!) text in a + teletype style. - #include in bclock.c + +2002-10-04 18:05 daniel + + * modules/: Makefile.am, bclock.c, bmatrix.c: +BClock + +2002-10-03 02:59 daniel + + * modules/bpong.c: speed up if computer looses + +2002-10-03 02:51 daniel + + * modules/btetris.c: yet another rotate bug fixed. + +2002-10-01 16:10 neo + + * AUTHORS, README, modules/bmatrix.c: Changes from Simon that + vastly improve the BMatrix module. + +2002-10-01 01:58 neo + + * modules/bmatrix.c: Some fixes by Simon. + +2002-10-01 00:51 neo + + * modules/: .cvsignore, Makefile.am, bmatrix.c: Added BMatrix. + +2002-10-01 00:48 daniel + + * modules/btetris.c: foo + +2002-10-01 00:28 daniel + + * modules/: bpushline.c, btetris.c: random feature in pushline, + rotation bug in tetris + +2002-09-30 23:35 daniel + + * modules/bpushline.c: foo + +2002-09-30 19:50 neo + + * blib/blib.c, modules/bpushline.c: Make it work. + +2002-09-30 19:34 neo + + * modules/bpushline.c: Use an enum property for the direction. + +2002-09-30 19:21 neo + + * blib/blib.c: Added support for deserialzing enum values. + +2002-09-30 19:06 daniel + + * modules/: bpushline.c: fixes + +2002-09-30 18:59 daniel + + * modules/bpushline.c: removed hack + +2002-09-30 18:57 daniel + + * modules/bpushline.c: added property support to BPushLine + +2002-09-30 17:35 neo + + * blib/bmodule.c, modules/.cvsignore, modules/btetris.c: Keep an + additional refcount on the module during the tick callback so + that the module may stop itself w/o the module being destroyed + immidiately. + +2002-09-30 17:09 daniel + + * modules/: Makefile.am, bpushline.c, btetris.c: added pushline, a + generic screen cleanup tool + +2002-09-29 23:33 neo + + * blib/: bmodule.h, bmovieplayer.c, btheme.c: Added padding to + BModule and BModuleClass. Plugged a memleak in the BMoviePlayer. + +2002-09-29 22:56 neo + + * blib/bmodule.c, modules/bpong.c, modules/btetris.c: Quit Pong if + a player has ten or more points. Rewrote some code in bmodule.c + that looked suspicious. + +2002-09-29 22:29 daniel + + * modules/btetris.c: small fix + +2002-09-29 22:27 daniel + + * modules/btetris.c: reset speed + +2002-09-29 22:01 daniel + + * modules/btetris.c: foo + +2002-09-29 21:54 daniel + + * modules/btetris.c: added foo padding + +2002-09-29 19:43 neo + + * blib/bmovieplayer.c: cleanup + +2002-09-29 19:39 neo + + * blib/bmovieplayer.c, test/test-module.c: Allow to "Dump Frame" in + test-module. Small fix in BMoviePlayer. + +2002-09-28 22:25 neo + + * modules/bpong.c: Fixed the code that stops the game when a player + has 3 points and if 0'ed it then. + +2002-09-28 22:13 neo + + * modules/: bdebug.c, bpong.c: Display scores in Pong. + +2002-09-28 20:55 neo + + * modules/btetris.c: removed debug output, seems to work now + +2002-09-28 00:44 daniel + + * modules/bdropout.c: clear last ixel + +2002-09-28 00:17 daniel + + * modules/btetris.c, test/test-module.c: fixes. + +2002-09-28 00:01 daniel + + * test/test-module.c: made test-module usable again + +2002-09-27 23:52 daniel + + * modules/btetris.c: tetris service pack + +2002-09-27 23:47 neo + + * modules/: bbreakout.c, bpong.c: A fix for Pong and autostart mode + for Breakout. + +2002-09-27 22:35 neo + + * modules/bpong.c: adapt paddle size to module->height + +2002-09-27 21:35 daniel + + * modules/bdropout.c: foo + +2002-09-27 21:17 neo + + * modules/.cvsignore: shut up CVS + +2002-09-27 21:16 daniel + + * modules/bdropout.c: foo + +2002-09-27 21:02 daniel + + * modules/bdropout.c: foo + +2002-09-27 20:46 daniel + + * modules/bdropout.c: foo + +2002-09-27 20:24 daniel + + * modules/: Makefile.am, bdropout.c: added bdropout, yet another + effect + +2002-09-27 20:19 neo + + * modules/bpong.c: oops + +2002-09-27 19:41 neo + + * modules/bfire.c: fire fine tuning + +2002-09-27 19:21 neo + + * modules/: bdebug.c, bqix.c: Fine tuning. + +2002-09-27 17:54 neo + + * modules/bpong.c: Added scores and continue the game until one of + the players hits 5. + +2002-09-26 22:53 neo + + * AUTHORS, blib/bmovieplayer.c: Removed a wrong assertion. + +2002-09-26 19:48 neo + + * ChangeLog, NEWS: Made 0.9 release. + +2002-09-26 19:35 neo + + * blib/bmovieplayer.c: Always return a title. + +2002-09-26 19:32 neo + + * blib/: bmovieplayer.c, bmovieplayer.h: Load the movie in + prepare() and unref() it in relax. + +2002-09-26 19:10 neo + + * modules/bfire.c: increased default tick timeout + +2002-09-26 17:44 daniel + + * modules/bdebug.c: no comment + +2002-09-25 22:54 neo + + * blib/: bmovie-bml-parser.c, bmovie-gif-parser.c, bmovie.h: Use a + default delay of 100ms if the duration is below the minimum of + 20ms. + +2002-09-25 21:15 daniel + + * modules/bdebug.c: ARGH! belveder is 18th floor, not 3rd!! + +2002-09-25 19:41 mitch + + * modules/: bbreakout.c, bpacman.c: - ported BBreakout to the new + PLAYER_ENTERD/LEFT events. - tiny cleanup in BPacman. + +2002-09-25 18:16 mitch + + * blib/bmodule.c, blib/bmodule.h, blib/btypes.h, modules/bpacman.c, + modules/bpong.c, modules/btetris.c: - added + B_EVENT_TYPE_PLAYER_ENTERED and B_EVENT_TYPE_PLAYER_LEFT. - + added BModuleClass::max_players and BModule::num_players (they + must be set by the module in class_init and when it handled + the above two events). - ported all playable modules to the new + event types and remember the players' device_ids. + +2002-09-25 17:14 neo + + * modules/bdebug.c: Made BDebug less verbose. + +2002-09-25 16:57 daniel + + * modules/btetris.c: speed fix + +2002-09-25 16:52 daniel + + * modules/btetris.c: speed fix + +2002-09-25 16:34 daniel + + * modules/btetris.c: tetris rotate bug fixed. + +2002-09-25 11:04 mitch + + * blib/bmodule.c: Let the module connect to it's own "stop" signal + and set module->running to FALSE in the callback. This way stop() + implementations are called with running == TRUE, whereas for 3rd + party signal handlers it's FALSE. + +2002-09-25 07:58 neo + + * blib/bmoduleinfo.c: made b_module_infos_scan_dir() less verbose + +2002-09-25 06:37 neo + + * modules/bdebug.c: minor cleanup + +2002-09-25 05:42 daniel + + * modules/btetris.c: do not block while dropping tiles. + +2002-09-25 05:30 daniel + + * modules/: bdebug.c: better digits + +2002-09-25 05:15 daniel + + * modules/bdebug.c: nicer placement of digits + +2002-09-25 05:05 daniel + + * test/: test-module.c, modules/test.c: fixed hask->asterisk + swapping in test module + +2002-09-25 05:05 daniel + + * modules/bdebug.c: display big letters + +2002-09-25 03:26 neo + + * NEWS, blib/blib.c, blib/butils.c, blib/butils.h: added + b_parse_boolean() + +2002-09-25 03:18 daniel + + * modules/: .cvsignore, Makefile.am, bdebug.c: added BDebug, our + swissknife for tonight ;-) + +2002-09-25 02:54 daniel + + * blib/bsender.c: ARGH! don't stop sending when one host is + unreachable + +2002-09-25 01:21 daniel + + * modules/bbreakout.c: use g_malloc() and g_free() to make it + compile on MacOSX + +2002-09-25 00:37 neo + + * blib/bmodule.c, modules/.cvsignore, modules/Makefile.am, + modules/bbreakout.c: Added another module hacked by 1stein: + Breakout! + +2002-09-24 22:24 neo + + * blib/: bmovieplayer.c, bmovieplayer.h: Introduced + b_module_player_request_stop(), a dirty hack that allows derived + classes to implement a looping movie player. + +2002-09-24 13:30 neo + + * modules/bpacman.c: A patch from 1stein to make pacman less + verbose. + +2002-09-24 02:15 neo + + * blib/breceiver.c, modules/bpacman.c: Applied changes from 1stein: + BPacman stops after 3 kills. + +2002-09-23 21:09 neo + + * NEWS: oops, how could I forget BPong ? + +2002-09-23 20:59 neo + + * ChangeLog, NEWS: Updated NEWS. + +2002-09-23 17:38 neo + + * AUTHORS, modules/.cvsignore, modules/Makefile.am, + modules/bpacman.c, modules/bqix.c: Added BPacman contributed by + 1stein <1stein@1stein.no-ip.com>. + +2002-09-23 15:57 neo + + * test/test-module.c: Set the BNF aspect ration here. + +2002-09-23 15:56 neo + + * blib/bmodule-internal.h, blib/bmodule.c, blib/bmodule.h, + modules/bfire.c, modules/bqix.c: Added pixel aspect ratio + information to BModule. Use it from BQix and fixed a minor bug in + BFire. + +2002-09-23 15:20 mitch + + * modules/: .cvsignore, Makefile.am, bpong.c: Ported BLPong to + BModule. + +2002-09-23 15:17 mitch + + * blib/beffects.c: fixed effect scope bug (will have to change this + anyway...) + +2002-09-23 14:02 neo + + * modules/bfire.c: Let the fire module stop itself if it is called + with flames=no and the screen content is blown away completely. + +2002-09-23 00:40 neo + + * blib/breceiver.c, blib/breceiver.h, modules/bproxy.c: Added an + API to stop a BReceiver. Finished BProxy. + +2002-09-22 23:38 neo + + * ChangeLog, NEWS: updated NEWS + +2002-09-22 21:43 neo + + * modules/bfire.c: don't ignore the last pixel + +2002-09-22 21:26 neo + + * test/test-module-scanner.c: Let test-module-scanner spit out some + info about the module. + +2002-09-22 20:49 neo + + * blib/butils.c, blib/butils.h, test/test-module.c: Export the + functionality we need to set int, double and boolean object + properties from strings. Added that functionality to test-module. + +2002-09-22 20:26 neo + + * modules/: bfire.c, bqix.c: Allow to have fire w/o flames, allows + for a nice smoke effect. + +2002-09-22 20:06 enno + + * test/test-module.c: -add command line option to pass (string) + properties to BModule Example: test-module + /usr/local/lib/blib-1.0/modules Blinkenjava localhost + --property:class=de.blinkenlights.examples.BlinkenLife - make + sure type BMoviePlayer is registered, so we can use test-module + also with BMoviePlayer and property "movie" + +2002-09-22 19:47 neo + + * blib/bmodule.c, blib/bmovieplayer.c, blib/bmovieplayer.h, + modules/bqix.c: Started to document module parameters. Teached + the movie player to play movies that are not the size of the + module. + +2002-09-22 18:20 neo + + * blib/: beffects.c, beffects.h, bmovie-effects.c, bmovie.h: + Unified order of channels and maxval in our API. + +2002-09-22 17:23 neo + + * blib/bmodule-internal.h, blib/bmodule-utils.c, blib/bmodule.c, + blib/bmodule.h, blib/bmovieplayer.c, blib/bpacket.c, + blib/bpacket.h, modules/bfire.c, modules/bproxy.c, + modules/bqix.c, modules/btetris.c, test/test-module.c, + test/test-movie-player.c, test/modules/test.c: Changed the + modules once again. The packet member of the module object has + been replaced by a simple buffer which is width * height bytes. + A module always has channels == 1 and maxval == 255 (for now). + +2002-09-22 15:38 neo + + * blib/: Makefile.am, blib.h, bmodule-utils.c, bmodule.c, + bmovieplayer.c, bpacket.c, bpacket.h, breceiver.c, bsender.c, + btypes.h, butils.c: Factored out BPacket code and added + b_packet_new(), b_packet_hton() and b_packet_ntoh(). + +2002-09-21 22:00 neo + + * blib/butils.c: mini change + +2002-09-21 20:25 neo + + * blib/blib.c, blib/butils.c, blib/butils.h, modules/.cvsignore, + modules/Makefile.am: Let's call it libbbproxy.so. Added + b_parse_double(), a small wrapper around g_strtod(). + +2002-09-21 20:07 daniel + + * modules/bproxy.c: error handling + +2002-09-21 19:59 daniel + + * modules/bproxy.c: foo + +2002-09-21 19:40 neo + + * blib/: bparams.h, butils.c, butils.h: Added more parser utility + functions: b_filename_from_utf8() and b_parse_param(). + +2002-09-21 19:19 daniel + + * blib/bmodule.c, blib/bmodule.h, blib/bmovieplayer.c, + modules/bfire.c, modules/bproxy.c: added b_module_set_maxval() + use it# + +2002-09-21 18:52 daniel + + * modules/bproxy.c: only copy data, not the whole packet. + +2002-09-21 18:43 daniel + + * modules/: Makefile.am, bproxy.c: added bproxy module + +2002-09-21 17:58 neo + + * blib/Makefile.am, blib/blib.h, blib/bmovieplayer.c, + blib/bparams.c, blib/bparams.h, blib/bparser.c, blib/btypes.c, + blib/btypes.h, blib/butils.c, blib/bwriter.c, modules/bfire.c: + Added B_TYPE_FILENAME derived from G_TYPE_STRING and + B_TYPE_PARAM_FILENAME, a ParamSpec derived from + G_TYPE_PARAM_STRING. Changed the type of the movie property of + the movie player to B_TYPE_FILENAME. + +2002-09-21 17:41 daniel + + * modules/btetris.c: tetris stuck bug + +2002-09-21 15:45 neo + + * configure.in, blib/bmodule-internal.h, blib/bmodule.c, + blib/bmodule.h, blib/bmovieplayer.c, modules/bqix.c, + modules/btetris.c, test/modules/test.c: Added a relax method to + the module API. + +2002-09-21 15:15 daniel + + * modules/btetris.c: ich <- idiot. + +2002-09-21 14:48 daniel + + * modules/btetris.c: minor cleanups + +2002-09-21 14:26 neo + + * blib/bmodule.c: Actually use the return value of g_timeout_add(). + +2002-09-21 13:47 neo + + * blib/Makefile.am, blib/blib.c, blib/blib.h, blib/bmodule.c, + test/test-module-scanner.c, test/test-module.c, + test/test-movie-parser.c, test/test-movie-player.c, + test/test-movie-writer.c, test/test-receiver.c, + test/test-sender.c, test/test-theme-parser.c: Added b_init() + which calls g_type_init() and registers some handy value + transform functions. + +2002-09-21 11:56 neo + + * blib/: bmodule.c, bmodule.h: Implemented module lifetime: the + module is automatically stopped when it's lifetime expires. Well, + lifetime is not the correct term actually ... + +2002-09-20 22:01 neo + + * blib/: bmodule.c, bmodule.h: Added a (yet unused) lifetime + property to BModule. + +2002-09-20 20:51 mitch + + * blib/bmodule.c: s/g_value_get_float/g_value_get_double/ + +2002-09-20 20:34 neo + + * blib/bmodule.c: Added a warning and a fallback if a module didn't + return a title in the describe method. + +2002-09-20 20:28 neo + + * blib/bmovie-bml-parser.c: indentation + +2002-09-20 19:08 neo + + * blib/: bmodule.c, bmodule.h, bmovieplayer.c, bmovieplayer.h: + Moved the speed parameter from the movie player to BModule and + made it an object property. + +2002-09-20 18:43 neo + + * ChangeLog, blib/bmodule.c, blib/bmovieplayer.c: Reverted Mitch's + change and allow modules that don't implement describe since + there's a default implementation that takes care that title is + filled in. Made sure that the BMoviePlayer always sets a title. + +2002-09-20 18:11 mitch + + * blib/: bmovieplayer.c, bmovieplayer.h: - added "gboolean reverse" + and "gdouble speed". - do stuff accordingly in + b_movie_player_next_frame(). + +2002-09-20 18:04 mitch + + * blib/bmodule.c: made the describe() implementaion mandatory. + +2002-09-20 15:36 mitch + + * blib/bsender.h: indentation + +2002-09-20 15:36 mitch + + * blib/bmovieplayer.c: set module->maxval in prepare() + +2002-09-20 14:52 daniel + + * blib/bsender.c: set braodcast socket option + +2002-09-20 14:46 neo + + * test/test-module.c: One About dialog should be sufficient ... + +2002-09-20 13:08 neo + + * blib/bmodule-internal.h, blib/bmodule.c, blib/bmovieplayer.c, + modules/bfire.c, modules/bqix.c, modules/btetris.c, + test/test-module.c, test/modules/test.c: Implemented + BModule::describe in all modules. Added code to test the new + feature to test-module.c. + +2002-09-19 22:53 neo + + * blib/bmodule.c, blib/bmodule.h, modules/bqix.c, + test/modules/test.c: Added a new BModule method describe() that + modules can implement to describe themselves. We'll use this for + logging etc. + +2002-09-19 20:58 neo + + * test/test-module.c: Added a call to srand(). + +2002-09-18 19:36 neo + + * ChangeLog: Made 0.8 release. + +2002-09-18 14:46 neo + + * README, blib/bmodule-internal.h, blib/bmodule.c, blib/bmodule.h, + blib/bmovieplayer.c, modules/bfire.c, modules/bqix.c, + modules/btetris.c, test/test-module.c, test/test-movie-player.c, + test/modules/test.c: One more module API change: Added a GError + parameter to the prepare() method and to b_module_new() so that + we have a chance to know why a module failed. + +2002-09-18 12:14 neo + + * NEWS, blib/blib.h, blib/bmodule-utils.c, blib/bmodule.c, + blib/bmovieplayer.c, blib/breceiver.c, blib/bsender.h, + blib/btypes.h: Moved BPacket declaration into btypes.h so that we + don't need to include bsender.h from all over the place. + +2002-09-18 12:03 neo + + * blib/bmodule-internal.h, blib/bmodule.c, test/test-module.c, + test/test-movie-player.c: Removed the var_args from + b_module_new(). It's overly complex and construct_only properties + don't make much sense here anyway. Made BModule::start() a + signal just like BModule::stop(). + +2002-09-18 10:37 neo + + * blib/bmovieplayer.c, test/.cvsignore, test/Makefile.am, + test/test-movie-parser.c, test/test-movie-player.c: Added a test + for the BMoviePlayer. + +2002-09-18 09:43 neo + + * modules/bfire.c, test/modules/test.c: Made BFire work again and + improved the test module. + +2002-09-18 09:15 neo + + * blib/bmovieplayer.c, modules/bqix.c, modules/btetris.c, + test/test-module.c: Actually call b_module_prepare() in + test_module.c. Added a lines property to BQix. Ported + BMoviePlayer to the new API. + +2002-09-17 20:28 daniel + + * modules/: bfire.c, bqix.c: more adaptions + +2002-09-17 20:14 daniel + + * blib/bmodule-utils.c, modules/btetris.c, test/test-module.c: - + adaptions to new module api - #include fixes + +2002-09-17 18:29 neo + + * blib/: bmovie.c, bmovieplayer.c: Added a movie property to the + movie player. Not yet ported to the new module API. + +2002-09-17 18:27 neo + + * test/modules/test.c: Ported the test module to the new module + API. + +2002-09-17 18:21 neo + + * test/test-module.c: Ported the module test app to the new API. + +2002-09-17 18:18 neo + + * blib/: Makefile.am, blib.h, bmodule-internal.h, bmodule.c, + bmodule.h: New module API. Completely untested and no modules are + ported yet. Breaks the build... + +2002-09-16 17:40 neo + + * gfx/bview-gtk.c: Unrolled the inner loop even more. + +2002-09-16 15:06 neo + + * blib/breceiver.c: Use g_printerr() instead of g_warning() for + run-time errors that are not caused by wrong usage of the + library. + +2002-09-16 15:02 neo + + * gfx/: Makefile.am, bview-gtk.c: Replaced deprecated GDK function. + +2002-09-16 14:54 neo + + * gfx/bview-gtk.c: Added optimized blending functions for the GTK + view. Speeds up blinkensim-gtk with the BNF theme quite nicely. + +2002-09-13 16:44 neo + + * modules/bqix.c: Added more lines to the BQix module. + +2002-09-13 15:20 neo + + * blib/bmodule-utils.c, modules/bfire.c, modules/bqix.c: Removed + debug output in b_module_draw_line(). Some finetuning in BQix. + +2002-09-13 15:12 neo + + * test/modules/test.c: Improved test module. Don't paint in start + and stop. + +2002-09-13 14:46 daniel + + * modules/btetris.c: moved some code to tick() function to make + this module a bit more asyncronous. + +2002-09-13 14:45 daniel + + * modules/bfire.c: #include + +2002-09-12 20:36 neo + + * blib/Makefile.am, blib/blib.h, blib/bmodule-utils.c, + blib/bmodule-utils.h, modules/.cvsignore, modules/Makefile.am, + modules/bfire.c, modules/bqix.c: Added some simple graphics + funtions to ease module development. Started to port the Qix + screensaver. + +2002-09-12 14:56 neo + + * modules/bfire.c, test/test-module.c: Tweaked fire parameters. + Made test-module less verbose. + +2002-09-12 13:56 neo + + * modules/bfire.c: Removed calculations w/o any effect (didn't have + any effect in aafire neither). + +2002-09-12 13:37 neo + + * blib/bmodule.c, modules/.cvsignore, modules/bfire.c, + modules/btetris.c: Modules now only need to implement query() and + tick(). Code cleanup in tetris and fire module. + +2002-09-12 01:12 neo + + * modules/: Makefile.am, bfire.c: Added BFire, a port of aafire. + Needs some further tweaking... + +2002-09-11 20:16 mitch + + * blib/: beffects.c, beffects.h: Made a bitmask out of + BEffectScope. + +2002-09-11 04:29 neo + + * configure.in, blib/bmovie-bml-parser.c: Fixed parsing of movies + with maxval > 15 that I broke this afternoon. Bumped version to + 0.8. + +2002-09-10 23:15 mitch + + * blib/bprotocol.h: - removed c++ style comments and indented + everything. - typedef stuff separately from struct definition. + +2002-09-10 15:49 neo + + * blib/bsender.c: Include name of failing recipient in error + message. + +2002-09-10 15:04 neo + + * blib/bmovie-bml-parser.c, gfx/bview-gtk.c: Added more sanity + checks to gdk_pixbuf_fill_rect(). Made the BML parser complain + if the row data exceeds the movies' maxval. + +2002-09-10 13:57 neo + + * configure.in: oops, forgot to remove the themes directories here + +2002-09-10 04:18 neo + + * ChangeLog, NEWS: Made 0.7 release. + +2002-09-10 03:09 neo + + * README, blib.pc.in, data/Makefile.am, test/run-tests.sh: Finished + themes move. + +2002-09-10 01:45 neo + + * gfx/: bview-directfb.h, bview-gtk.h: document the fact that the + view expect data with maxval = 255 + +2002-09-10 01:36 mitch + + * blib/bmovie-gif-parser.c: Don't refuse to load non-animated GIFs, + just warn and use default values. + +2002-09-10 00:58 neo + + * blib/btheme-parser.c: made it less verbose + +2002-09-09 23:01 neo + + * blib/btheme-parser.c: Really made the parser imply 0 for + unspecified values. Added a 800x600 BNF theme. + +2002-09-09 22:51 daniel + + * blib/bmovieplayer.c, modules/btetris.c: stuff + +2002-09-09 22:33 daniel + + * modules/btetris.c: smoother tetris down blending + +2002-09-09 22:18 mitch + + * blib/btypes.h, test/test-module.c: + s/B_KEY_ASKERISK/B_KEY_ASTERISK/ + +2002-09-09 22:14 mitch + + * blib/: bmodule.h, btypes.h: moved BModule enums to btypes.h + +2002-09-09 21:59 mitch + + * blib/blib.h, blib/bmodule.h, blib/bmovieplayer.h, blib/btypes.h, + modules/btetris.c, test/test-module-scanner.c, + test/test-module.c, test/modules/test.c: moved all BModule + includes and types to global places and removed includes which + are no longer needed. + +2002-09-09 21:37 daniel + + * blib/bsender.c: foo + +2002-09-09 21:13 daniel + + * blib/: bsender.c, bsender.h: GError for _remove_recipient + +2002-09-09 21:08 neo + + * data/blinkentheme.dtd: Don't specify values if the implied value + of 0 is fine. Document the fact that 0 is the implied default + value. + +2002-09-09 20:55 neo + + * README, blib/bmoduleinfo.c, blib/btheme.c: plugged a minor + memleak, reindented some code and updated the README + +2002-09-09 20:52 daniel + + * blib/bsender.c: foo + +2002-09-09 20:52 daniel + + * blib/bsender.c, blib/bsender.h, modules/Makefile.am, + test/modules/Makefile.am: - added b_sender_list_recipients () - + Makefile.am cleanups for MacOSX + +2002-09-09 19:09 neo + + * data/blinkentheme.dtd, test/run-tests.sh: Fixed a minor bug in + the hdl-144x108 theme. Minor cleanups in the blinkentheme.dtd. + Validate the theme files when on 'make check'. + +2002-09-09 19:02 daniel + + * modules/: Makefile.am, btetris.c: blend down on 'game over' + +2002-09-09 18:30 neo + + * modules/btetris.c: Fixed start position. + +2002-09-09 18:20 neo + + * blib/: btheme.c, btheme.h: Added a function to iterate over all + themes in the theme path and renamed b_theme_lookup() for + consistency. + +2002-09-09 17:26 neo + + * Makefile.am, NEWS, configure.in, modules/.cvsignore, + modules/Makefile.am, modules/btetris.c, test/modules/.cvsignore, + test/modules/Makefile.am, test/modules/test.c, + test/modules/test.h, test/modules/tetris.c, + test/modules/tetris.h: Moved tetris into the modules directory. + Removed module headers since you can't derive from dynamic + modules anyway. + +2002-09-09 16:28 neo + + * test/movies/: Makefile.am, alfred-26x20.bml, rain-26x20.bml: + Replaced the master of suspense with a more interesting test + movie. + +2002-09-09 16:21 neo + + * gfx/bview-gtk.c: Respect background color. Seems to work fine + again :-) + +2002-09-09 16:11 daniel + + * test/modules/tetris.c: collision check on rotate + +2002-09-09 15:37 mitch + + * blib/Makefile.am, blib/bmovieplayer.c, blib/bmovieplayer.h, + test/modules/test.c, test/modules/test.h: Added BMoviePlayer, a + built-in BModule subclass which is always available. + +2002-09-09 14:57 neo + + * gfx/: bview-directfb.c, bview-gtk.c, bview-gtk.h: Resurrected the + GTK+ view and made it a lot faster. + +2002-09-09 13:47 mitch + + * configure.in, blib/Makefile.am: Pass MODULEPATH via -D, not via + config.h + +2002-09-09 12:25 mitch + + * configure.in, blib/bmoduleinfo.c, blib/bmoduleinfo.h, + test/modules/Makefile.am: - install the modules to + /lib/blib-1.0/modules - added + b_modules_scan_default_dir() to get the built-in modules + +2002-09-08 15:36 neo + + * configure.in, blib/btheme-parser.c, blib/btheme.c, blib/btheme.h, + blib/btypes.h, blib/butils.c, data/blinkentheme.dtd, + gfx/bview-directfb.c, gfx/bview-directfb.h, gfx/bview-gtk.c, + gfx/bview-gtk.h: Improved themes a lot. Thanks to the grid and + span elements, standard themes are very small and simple now. The + GTK view has not yet been completely ported to the new themes + API; the DirectFB view already works again. Added a simple + blinkenleds theme. + +2002-09-08 14:18 neo + + * configure.in: Allow to disable support for DirectFB and GTK+-2.0. + +2002-09-07 21:38 tim + + * blib/bprotocol.h: removed mcud specific defines + +2002-09-07 21:14 daniel + + * test/modules/tetris.c: tetris everywhere + +2002-09-07 21:01 tim + + * blib/bprotocol.h: remove BLFRAME_MAX_* defines because it does + not belong here + +2002-09-07 18:37 daniel + + * test/modules/tetris.c: much more tetris implementation + +2002-09-06 21:14 daniel + + * blib/bmodule.c, test/test-module.c, test/modules/tetris.c: stop + the module if return value of tick() was 0 + +2002-09-06 21:05 daniel + + * test/modules/: tetris.c, tetris.h: game over + +2002-09-06 20:57 daniel + + * test/modules/tetris.c: rotate counter clockwise + +2002-09-06 20:53 daniel + + * test/modules/tetris.c: lots of work in tetris code. "almost + perfect" ;-) + +2002-09-06 19:07 neo + + * test/test-module.c: Use S as the shortcut for Start as well as + for Stop. + +2002-09-06 19:03 daniel + + * test/modules/tetris.c: more tetris + +2002-09-06 18:52 daniel + + * test/modules/tetris.c: more tetris + +2002-09-06 15:40 neo + + * test/test-module.c: GUI cleanup. + +2002-09-06 14:58 neo + + * test/modules/tetris.c: Rewrote some parts so that the code is + easier to understand. + +2002-09-06 13:48 neo + + * blib/breceiver.c, gfx/bview-gtk.c: Read all pending packets from + the socket and drop all but the first valid packet. This way we + drop packets instead of piling them up in the queue when the + application is too busy to handle them all. + + Turn off double-buffering for the GTK BView. Our implementation + already does that. + +2002-09-06 12:13 neo + + * blib/bmovie-bml-parser.c, test/modules/tetris.c: Correctly fix + the loop handling this time. Removed some spurious characters + from the the tetris module to make it compile. + +2002-09-06 04:16 daniel + + * test/modules/.cvsignore: ignore + +2002-09-06 04:14 daniel + + * test/modules/: Makefile.am, tetris.c, tetris.h: first try to + implement tetris[tm] + +2002-09-06 03:51 neo + + * configure.in, blib/bmovie-bml-parser.c: Bumped version number to + 0.7. Fixed wrong handling of loop element in BML parser. + +2002-09-06 02:58 neo + + * ChangeLog, NEWS, README: Made 0.6 Release. + +2002-09-06 02:28 neo + + * gfx/bview-gtk.c: Ughh, gdk-pixbuf seems to have some bad bugs in + the composition code :-( The routines seem to be OK for bilinear + sampling, so use those. Use gdk_pixbuf_copy_area() whenever + possible. + +2002-09-06 01:55 neo + + * gfx/bview-directfb.c: Blit overlay with alpha channel blending. + +2002-09-06 01:27 neo + + * gfx/bview-gtk.c: Fixed a couple of bugs in the GTK+ view. + +2002-09-06 00:02 neo + + * gfx/: bview-directfb.c, bview-directfb.h, bview-gtk.c, + bview-gtk.h: misc minor changes + +2002-09-05 23:21 neo + + * gfx/: Makefile.am, blib-directfb.h, blib-gtk.h: Added headers for + the blib gfx libraries. + +2002-09-05 22:40 neo + + * .cvsignore, Makefile.am, blib-directfb.pc.in, blib-gtk.pc.in, + configure.in, data/blinkentheme.dtd, gfx/.cvsignore, + gfx/Makefile.am, gfx/bview-directfb.c, gfx/bview-directfb.h, + gfx/bview-gtk.c, gfx/bview-gtk.h: Added graphical views that make + use of the BTheme infrastructure. Both views are compiled + conditionally if DirectFB and/or GTK+-2.0 are available. + +2002-09-05 17:56 neo + + * blib/Makefile.am, blib/btheme-parser.c, blib/btheme.c, + blib/btheme.h, blib/butils.c, data/blinkentheme.dtd: Reworked + BTheme, added a simple Bushfire theme. Commented the + blinkentheme DTD. Not sure if this is yet the final version but + it's definitely closer. + +2002-09-05 15:59 neo + + * data/bml.dtd: Added comments to the BML DTD. + +2002-09-05 15:37 mitch + + * blib/bmodule.c: b_module_class_init: ser klass->query to NULL. + +2002-09-05 14:41 mitch + + * test/test-module.c: GSource ids are guint, so "no source" is 0, + not -1. + +2002-09-05 14:28 neo + + * blib/butils.c: fixed b_parse_int() + +2002-09-05 14:20 neo + + * blib/: Makefile.am, bmovie-bml-parser.c, bparser.c, bparser.h, + btheme-parser.c, butils.c, butils.h: Moved parsing utilities into + butils.c and made them check for errors. + +2002-09-05 14:11 mitch + + * blib/bmodule.c, blib/bmodule.h, test/test-module.c, + test/modules/Makefile.am, test/modules/test.c, + test/modules/test.h: - fixed the test module's type registration. + - do lots of checking in b_module_new(). All BModules *must* be + created b_module_new() now because it sets the paint callback + and allocates the BFrame. - added BModule->query() which gets + passed the theme parameters and returns TRUE if it can handle + it. - stuff... + +2002-09-05 00:33 neo + + * blib/bparser.c, blib/bparser.h, blib/btheme-parser.c, + blib/btheme.c, blib/btheme.h, blib/btypes.h, + data/blinkentheme.dtd: Moved some general parsing code from + BTheme to the BParser. Added an optional color attribute to the + background and overlay elements. Removed + b_theme_assure_windows() again, instead complete the theme when + it is loaded. + +2002-09-04 23:38 neo + + * blib/: Makefile.am, beffects.c, beffects.h, blib.h, bmodule.c, + bmodule.h, bmoduleinfo.c, bmoduleinfo.h, bmovie-blm.c, + bmovie-bml-parser.c, bmovie-bml.c, bmovie-effects.c, + bmovie-gif-parser.c, bmovie-gif.c, bmovie.c, bmovie.h, bobject.c, + bobject.h, bparser.c, bparser.h, breceiver.c, breceiver.h, + bsender.c, bsender.h, btheme-parser.c, btheme.c, btheme.h, + btypes.h, bwriter.c, bwriter.h: Added a header file for typedefs + that is included from all C files before all other blib headers. + This removes dependencies between the headers that forced a + certain order of inclusion. + +2002-09-04 07:17 neo + + * blib/bmovie-bml-parser.c: Be more informative about the errors + that make the parser fail. + +2002-09-04 06:04 daniel + + * test/modules/test.c: stuff + +2002-09-04 05:58 daniel + + * test/modules/test.c: off by one + +2002-09-04 05:45 daniel + + * test/modules/test.c: some more comments + +2002-09-04 05:31 daniel + + * configure.in: bumped version number to 0.6.0 + +2002-09-04 05:21 neo + + * ChangeLog, NEWS: Made 0.5 release. + +2002-09-04 04:52 daniel + + * test/: test-module.c, modules/test.c: make use of device_id in + test module + +2002-09-04 04:48 neo + + * blib/: btheme.c, btheme.h: Added b_theme_assure_windows() which + generates a grid of windows if none are present. Added a BNF + theme template. + +2002-09-04 04:38 daniel + + * blib/bmodule.h: added device_id to BEvent + +2002-09-04 04:28 daniel + + * blib/bmodule.h: s/B_MODULE_KEY/B_KEY/ + +2002-09-04 04:27 daniel + + * test/: test-module.c, modules/test.c, modules/test.h: made the + test module a 'game' ;-) + +2002-09-04 03:59 neo + + * blib/: breceiver.c, bsender.c, btheme.c, btheme.h: Set the + BReceivers' io_channel encoding to NULL. Improved + b_theme_lookup(). + +2002-09-04 03:57 daniel + + * blib/breceiver.c, test/test-module.c, test/modules/test.c, + test/modules/test.h: made the gtk program fully functional and + improved the test module a lot. + +2002-09-04 02:16 neo + + * blib/: breceiver.c, bsender.c: Use htons() / ntohs() where + appropriate. + +2002-09-04 01:50 neo + + * blib/bsender.c: Allow to call b_sender_send_frame() with NULL + data. + +2002-09-04 01:47 daniel + + * blib/breceiver.c: take care of network and host byte orders + +2002-09-04 01:45 neo + + * blib/bsender.c: Do host-to-network byteorder conversion in + BSender. + +2002-09-04 01:36 neo + + * test/Makefile.am: this should work with automake-1.4 as well + +2002-09-04 01:34 daniel + + * test/: Makefile.am, test-module.c: gtk, gtk, gtk... + +2002-09-04 01:24 neo + + * blib/bsender.c, blib/bsender.h, test/test-module.c, + test/test-sender.c: Reworked BSender API. + +2002-09-04 00:48 daniel + + * configure.in, test/Makefile.am, test/test-module.c: more gtk+ + stuff + +2002-09-04 00:26 neo + + * configure.in, blib/Makefile.am, blib/btheme.c: Added support for + the B_THEME_PATH environment variable. + +2002-09-03 23:17 daniel + + * test/test-module.c: GIOChannel stuff + +2002-09-03 23:16 neo + + * blib/btheme-parser.c, blib/btheme.c, blib/btheme.h, + data/blinkentheme.dtd, test/.cvsignore: Changed depth to channels + in BTheme. + +2002-09-03 22:58 daniel + + * test/test-module.c: eeek + +2002-09-03 22:40 daniel + + * configure.in, test/Makefile.am, test/test-module.c: added are + more complex test program to test the BModule environment. + +2002-09-03 22:39 neo + + * blib/btheme.c, blib/btheme.h, test/test-theme-parser.c: Replaced + b_themes_lookup() with the simpler b_theme_lookup(). + +2002-09-03 21:38 neo + + * Makefile.am, blib/breceiver.c, blib/breceiver.h, + test/test-receiver.c: Added callback_data to BReceiver. Made the + file descriptor private. + +2002-09-03 21:12 neo + + * blib/: bmovie-blm.c, bmovie-bml-parser.c, bmovie-gif-parser.c, + bmovie.h: Assure a minimum frame duration of 20ms. + +2002-09-03 19:26 neo + + * blib.pc.in, configure.in, blib/btheme.c, blib/btheme.h, + test/test-theme-parser.c: b_themes_lookup() now returns a list of + suitable themes. + +2002-09-03 19:04 daniel + + * blib/bmoduleinfo.c, test/modules/Makefile.am: lib cruft for + MacOSX + +2002-09-03 18:18 neo + + * blib.pc.in, configure.in, blib/bmodule.c, blib/bmodule.h, + blib/bmoduleinfo.c, blib/bmoduleinfo.h, blib/breceiver.c, + blib/breceiver.h, blib/bsender.c, blib/bsender.h, + blib/btheme-parser.c, blib/btheme.c, blib/btheme.h: Indentation + and header cleanup. Added a name to the BTheme struct. Added a + prototype for b_theme_lookup(). + +2002-09-03 17:25 neo + + * blib/btheme-parser.c: Warn if window coordinates are out of + range. + +2002-09-03 17:01 daniel + + * test/modules/: Makefile.am, symbols.txt: lib stuff + +2002-09-03 16:52 neo + + * ChangeLog, configure.in, blib/btheme-parser.c, blib/btheme.c, + blib/btheme.h, data/blinkentheme.dtd: Changed themes file format + and moved images to a seperate subdirectory. + +2002-09-03 16:41 daniel + + * blib/bmoduleinfo.c: - outcommented filename check for now to test + on MacOSX - one more check for failures on module loading + +2002-09-03 16:15 daniel + + * test/modules/Makefile.am: try this + +2002-09-03 16:12 daniel + + * test/modules/Makefile.am: try to make it compile on macosX + +2002-09-03 15:26 mitch + + * blib/bmoduleinfo.c: Moved g_module_supported() assertion to + b_module_info_new() and b_module_infos_scan_dir() because + checking this in the load() and unload() methods is a bit too + late :-) + +2002-09-03 14:39 neo + + * blib/bmovie-bml.c: Write encoding all lower-case. + +2002-09-03 14:11 neo + + * configure.in: Bumped version number to 0.5. + +2002-09-03 13:30 mitch + + * blib/: bmodule.c, bmodule.h, bmoduleinfo.c: more module stuff... + +2002-09-03 13:22 mitch + + * blib/bmodule.c: added g_return_if_fail() to all public BModule + functions. + +2002-09-03 13:19 mitch + + * blib/: bmodule.c, bmodule.h: added b_module_new() which creates + BModule subclass instances. + +2002-09-03 13:07 mitch + + * test/modules/: Makefile.am, test.c: Register the test module's + virtual functions. + +2002-09-03 12:57 mitch + + * blib/bmodule.c, blib/bmodule.h, blib/bmoduleinfo.c, + blib/bmoduleinfo.h, test/test-module-scanner.c, + test/modules/Makefile.am, test/modules/test.c, + test/modules/test.h: - implemented GTypeModule subclass + BModuleInfo which proxied the modules - install the test module + in prefix/lib/blib/test-modules so they actually become .so + files. - register the test module with it's GTypeModule. - load + "lib*.so" files only in the module loader. + +2002-09-03 03:44 neo + + * ChangeLog, NEWS: Made 0.4 release. + +2002-09-03 03:26 daniel + + * test/modules/test.c: more work on test programm + +2002-09-03 02:58 daniel + + * blib/bmodule.c, blib/bmodule.h, test/modules/test.c, + test/modules/test.h: filled the test program with code. + +2002-09-03 02:31 neo + + * test/modules/Makefile.am: fixed Makefile.am + +2002-09-03 02:26 neo + + * blib/bmovie.h: Removed effects from this header, they are + declared in bmovie-effects.h. + +2002-09-03 02:26 daniel + + * test/modules/Makefile.am: ... + +2002-09-03 02:22 daniel + + * test/modules/Makefile.am: argh. + +2002-09-03 02:20 daniel + + * configure.in, blib/bmodule.c, blib/bmodule.h, blib/bmoduleinfo.c, + test/Makefile.am, test/modules/.cvsignore, + test/modules/Makefile.am, test/modules/test.c, + test/modules/test.h: foo + +2002-09-03 02:07 neo + + * blib/bmovie-bml.c, data/bml.dtd, test/run-tests.sh: Changed the + the BML DTD once more. Adapted the implementation accordingly. + Validate the generated files when running 'make check'. + +2002-09-03 01:26 daniel + + * blib/bmodule.c: copyright + +2002-09-03 01:24 daniel + + * blib/: bmodule.c, bmodule.h, bmoduleinfo.c: first try to + implement our BModule API + +2002-09-03 00:42 neo + + * blib/bmovie-bml-parser.c: For backward compat with arcade-paint, + ignore loop flag if it has a value of "no". + +2002-09-03 00:36 neo + + * blib/bmovie-bml.c: Write loop and duration elements. + +2002-09-02 23:52 neo + + * blib/: bmovie-blm.c, bmovie-gif-parser.c, bmovie.c: Do the + reversal after loading in the BMovieClass. + +2002-09-02 23:20 daniel + + * test/test-module-scanner.c: coding style. + +2002-09-02 22:57 mitch + + * blib/Makefile.am, blib/blib.h, blib/bmodule.c, blib/bmodule.h, + blib/bmoduleinfo.c, blib/bmoduleinfo.h, blib/bsender.h, + test/test-module-scanner.c: - moved bmodule.* code to + bmoduleinfo.* - added the parent class of all games, BModule. + +2002-09-02 22:52 daniel + + * test/test-receiver.c: output data as %02x + +2002-09-02 20:32 neo + + * blib/bmovie-gif-parser.c: Report non-fatal errors to stderr. + +2002-09-02 16:49 neo + + * blib/bmovie-gif-parser.c: Set an error if no frames have been + found in the GIF. + +2002-08-31 22:51 daniel + + * test/test-receiver.c: use the function itsself as callback, not a + pointer to it. + +2002-08-31 22:42 daniel + + * test/test-receiver.c: again + +2002-08-31 22:40 daniel + + * test/test-receiver.c: typo + +2002-08-31 22:37 daniel + + * test/test-receiver.c: let test-receiver output the data received. + seems to work fine. + +2002-08-31 20:30 daniel + + * test/.cvsignore: ignore + +2002-08-31 20:29 daniel + + * test/test-receiver.c: "oops". + +2002-08-31 20:28 daniel + + * blib/: breceiver.c, breceiver.h: made receiver work. + +2002-08-31 17:21 daniel + + * blib/breceiver.c: more work on receiver code, but still not fully + functional. + +2002-08-31 16:51 daniel + + * blib/Makefile.am, blib/blib.h, blib/bmodule.c, blib/breceiver.c, + blib/breceiver.h, test/Makefile.am: + started to implement a generic BReceiver object + +2002-08-30 18:21 neo + + * configure.in, blib/btheme-parser.c, blib/btheme-parser.h, + blib/btheme.c, blib/btheme.h, test/test-theme-parser.c: Bumped + version number to 0.4. Changed BTheme API so it's more similar + to the BMovie API. + +2002-08-30 16:33 neo + + * ChangeLog, blib/beffects.c: Fixed vertical flip (did only work + for height == 3) and cleaned up effects code. + +2002-08-30 15:47 neo + + * blib/bmovie-bml-parser.c: Fixed a bug in the BML parser (and + sneaked the fix into the 0.3 tarball). + +2002-08-30 15:06 neo + + * ChangeLog: Made 0.3 release. + +2002-08-30 15:05 neo + + * NEWS, blib/Makefile.am, blib/beffects.c, blib/beffects.h, + blib/blib.h, blib/bmovie-effects.c, blib/bmovie-effects.h: + Improved effects ported from blccc. + +2002-08-30 13:52 neo + + * configure.in, blib/bmovie-effects.c: Bumped version number to 0.3 + and added bmovie-effects.c to CVS. + +2002-08-30 01:24 neo + + * blib/: Makefile.am, bmovie-blm.c, bmovie-bml-parser.c, + bmovie-gif-parser.c, bmovie.c, bmovie.h: Added b_movie_invert(). + +2002-08-30 00:56 neo + + * configure.in, blib/Makefile.am, blib/bmovie.c, blib/bmovie.h: + Added G_DISABLE_DEPRECATED to CFLAGS. Added b_movie_normalize(). + +2002-08-29 21:50 daniel + + * blib/bmodule.c, blib/bmodule.h, test/test-module-scanner.c: keep + track of opened modules with a static GSList. This is + intentionally not an GObjects since there must be only one list + of Modules anyway. + +2002-08-29 21:08 daniel + + * configure.in, blib/Makefile.am, blib/blib.h, blib/bmodule.c, + blib/bmodule.h, blib/bsender.c, test/.cvsignore, + test/Makefile.am, test/test-module-scanner.c: started framework + for BModules. + +2002-08-29 17:10 neo + + * README: fixed some typos + +2002-08-29 16:37 neo + + * ChangeLog: Made 0.2 release. + +2002-08-29 16:36 neo + + * NEWS, README: more words + +2002-08-29 16:23 neo + + * AUTHORS, README: words + +2002-08-29 15:49 daniel + + * test/: test-movie-parser.c, test-movie-writer.c: gcc doesn't like + instructions like 'x ?: y' + +2002-08-29 15:46 daniel + + * blib/bparser.c, test/test-movie-parser.c: 2 more #include + to shut up gcc + +2002-08-29 15:29 neo + + * blib/bmovie-bml-parser.c, blib/bmovie-bml.c, + blib/bmovie-gif-parser.c, blib/btheme-parser.c, blib/bwriter.c, + test/test-movie-writer.c: Added missing includes (to please + gcc-3.x) + +2002-08-29 15:11 neo + + * blib/bmovie-blm.c, blib/bmovie-bml.c, blib/bmovie-gif.c, + test/movies/alfred-26x20.bml: show your blib with pride + +2002-08-29 14:59 neo + + * test/test-movie-writer.c: foo + +2002-08-29 14:58 neo + + * blib/bmovie-blm.c, blib/bmovie-gif-parser.c, blib/bmovie-gif.c, + blib/bmovie.c, blib/bmovie.h, blib/gif-load.c, blib/gif-save.c, + test/run-tests.sh, test/test-movie-parser.c, + test/test-movie-writer.c: Fixed GIF frame delay (the external API + is milliseconds now). Added test code for b_movie_save_as(). + +2002-08-29 14:15 neo + + * blib/Makefile.am, blib/blib.h, blib/bmovie-blm.h, + blib/bmovie-bml.h, blib/bmovie-gif.h, test/run-tests.sh, + test/test-movie-parser.c, test/test-movie-writer.c: Added the + movie subclasses to the public header files. Added + test-movie-writer to the test suite. + +2002-08-29 13:58 neo + + * blib/: gif-load.c, gif-save.c: GIF routines use glib for memory + allocation. + +2002-08-29 13:54 neo + + * blib/bmovie-blm.c, blib/bmovie-bml-parser.c, + blib/bmovie-bml-parser.h, blib/bmovie-bml.c, + blib/bmovie-gif-parser.c, blib/bmovie-gif.c, blib/bmovie.c, + blib/bmovie.h, blib/gif-load.c, test/test-movie-parser.c, + test/test-movie-writer.c: Added loop to movie struct. Added a + lazy_load parameter to b_movie_new_from_file(). Misc fixes. + +2002-08-29 02:39 neo + + * blib/: Makefile.am, bmovie-blm.c, butils.c, butils.h: Removed + b_fgets(). + +2002-08-29 02:31 neo + + * blib/bmovie-gif.c, test/test-movie-writer.c: first draft of + b_movie_gif_save() + +2002-08-29 02:03 neo + + * configure.in: Removed micro version number and bumped version to + 0.2. We can always readd the micro version for the 1.0.0 + release. + +2002-08-29 01:53 neo + + * blib/bmovie-blm.c, blib/bmovie-bml-parser.c, blib/bmovie-bml.c, + blib/bwriter.c, blib/bwriter.h, test/.cvsignore, + test/Makefile.am, test/test-movie-writer.c: Added simple test for + saving movies. Finished implementations of b_movie_blm_save() + and b_movie_bml_save(). + +2002-08-29 01:15 neo + + * blib/: Makefile.am, bmovie-blm.c, bmovie-bml-parser.c, + bmovie-bml-parser.h, bmovie-bml.c, bmovie-gif-parser.c, + bmovie-gif-parser.h, bmovie-gif.c, bmovie.c, bmovie.h: Split some + files that started to grow to large. Implemented large parts of + b_movie_bml_save(). + +2002-08-29 00:10 neo + + * blib/: blib.h, bmovie-blm.c, bmovie-bml.c, bmovie-gif.c, + bwriter.c: misc fixes + +2002-08-28 21:37 neo + + * blib/Makefile.am, blib/bwriter.c, blib/bwriter.h, + test/test-movie-parser.c, test/test-theme-parser.c: Some utility + functions to write XML files. Yet unused. + +2002-08-28 20:42 neo + + * blib/: bmovie-bml.c, bmovie-gif.c: Only allow channels == 1 so + far. + +2002-08-28 20:37 neo + + * blib/: bmovie-blm.c, bmovie.c, bmovie.h: Also store frame + duration (not only start time). Implemented b_movie_blm_save(). + +2002-08-28 19:56 neo + + * blib/: bmovie-blm.c, bmovie-bml.c, bmovie-gif.c, bmovie.c, + bmovie.h: Set movie->maxval and movie->channels. + +2002-08-28 19:38 neo + + * blib/: bmovie-blm.c, bmovie-bml.c, bmovie-gif.c, bmovie.c, + bmovie.h: Added framework for b_movie_save() and + b_movie_save_as(). + +2002-08-28 19:14 neo + + * blib/bmovie-blm.c, blib/bmovie-gif.c, blib/bmovie.c, + test/test-movie-parser.c: Improved header parsing for BLM files. + Assure that a title is set for all movies. + +2002-08-28 18:34 neo + + * test/: run-tests.sh, test-movie-parser.c, test-theme-parser.c: + nicer tests + +2002-08-28 18:27 neo + + * blib/: bmovie-blm.c, bmovie-gif.c: Got rid of g_print(), use + GError instead. + +2002-08-28 18:14 neo + + * blib/bmovie-blm.c, blib/bmovie-bml.c, blib/bmovie.c, + blib/bparser.c, blib/bparser.h, blib/btheme-parser.c, + test/Makefile.am, test/run-tests.sh: Added encoding conversion to + b_parser_parse_io_channel() and use it for the BThemeParser. + Added a simple test suite. Some cleanup. + +2002-08-28 18:12 daniel + + * blib/bsender.c: removed debug output + +2002-08-28 17:12 neo + + * blib/: bmovie-bml.c, bparser.c, bparser.h: Added a convenience + function to parse a GIOChannel. Improved output on parse errors. + +2002-08-28 06:01 mitch + + * test/test-sender.c: send 5 packets. + +2002-08-28 05:57 daniel + + * blib/bsender.c: plugged a memleak + +2002-08-28 05:56 daniel + + * blib/: bsender.c, bsender.h: allocate the packet in set_size() + +2002-08-28 04:57 daniel + + * blib/bsender.c: fixed memory corruption + +2002-08-28 04:42 daniel + + * test/test-sender.c: keep test suite in sync + +2002-08-28 04:40 neo + + * blib/btheme-parser.c, test/test-theme-parser.c: Encoding + conversion for the theme-parser. + +2002-08-28 04:37 daniel + + * blib/: bsender.c, bsender.h: const! + +2002-08-28 04:33 daniel + + * blib/: bprotocol.h, bsender.c, bsender.h: bsender takes guchar* + now, not a BMovieFrame* + +2002-08-28 04:25 neo + + * data/bml.dtd: Added an optional version parameter with a fixed + value of "1.0". + +2002-08-28 04:18 neo + + * blib/bmovie-blm.c: Allocate frame data later so that load_all() + works even if load_info() wasn't called before. + +2002-08-28 03:58 neo + + * blib/bmovie-blm.c, blib/bmovie-bml.c, blib/bmovie-gif.c, + blib/bmovie.c, blib/bmovie.h, blib/gif-load.c, blib/gif-load.h, + test/test-movie-parser.c: Ported everything to GIOChannels. + +2002-08-28 02:59 mitch + + * blib/bprotocol.h: - #include - copyright header - + changed include guards according to filename change + +2002-08-28 02:56 daniel + + * blib/bsender.c: keep in sync with new bprotocol.h + +2002-08-28 01:50 daniel + + * blib/bsender.c, test/test-sender.c: use MAGIC_MCU_FRAME as magic + +2002-08-28 01:43 daniel + + * blib/blib.h, blib/bsender.c, blib/bsender.h, test/test-sender.c: + more work on sending code + +2002-08-28 01:02 daniel + + * blib/: Makefile.am, bsender.c: copied mcuprotocol.h from mcud and + renamed it to bprotocol.h + +2002-08-27 23:07 daniel + + * blib/bsender.c, blib/bsender.h, test/test-sender.c: added code + for sending packages added b_sender_set_size() + +2002-08-27 22:27 daniel + + * test/.cvsignore: argh. + +2002-08-27 22:25 daniel + + * blib/bsender.c: b_sender_remove_recipient + +2002-08-27 22:00 daniel + + * test/.cvsignore: ignore. + +2002-08-27 21:59 daniel + + * blib/blib.h, blib/bsender.c, blib/bsender.h, test/Makefile.am, + test/test-sender.c: + starting to fill BSender with life. added a small test programm. + +2002-08-27 21:30 neo + + * blib/bmovie.c: Refactoring. + +2002-08-27 21:13 neo + + * blib/: bmovie-blm.c, bmovie-bml.c, bmovie-gif.c, bmovie.c, + bmovie.h: Open the file in the BMovie base class. + +2002-08-27 21:09 daniel + + * blib/: Makefile.am, bsender.c, bsender.h: added skeleton for + BSender + +2002-08-27 20:45 mitch + + * blib/Makefile.am: bobject.h needs to be installed. + +2002-08-27 20:40 neo + + * blib/Makefile.am, blib/blib.h, blib/bmovie-blm.c, + blib/bmovie-bml.c, blib/bmovie-gif.c, blib/bmovie.c, + blib/bmovie.h, blib/bobject.c, blib/bobject.h, + blib/btheme-parser.c, blib/btheme.c, blib/btheme.h, + test/test-movie-parser.c, test/test-theme-parser.c: Added BObject + which adds filename and name to GObject. Derive BMovie and + BTheme from BObject. + +2002-08-27 13:32 neo + + * data/bml.dtd: Be less strict about the contents of the header + element. + +2002-08-27 01:56 tim + + * blib/bprotocol.h: renamed depth to channels + +2002-08-27 01:45 neo + + * blib/bmovie-blm.c, blib/bmovie-bml.c, blib/bmovie-gif.c, + blib/bmovie.c, blib/bmovie.h, test/test-movie-parser.c: Changed + BMovie API: b_movie_new() takes one filename and generates a name + from it. movie->name is the printable version and may be altered + using b_movie_set_name(). movie->filename is the filename used to + open the file (and should never be output). + +2002-08-27 00:51 neo + + * data/bml.dtd: Fixed a couple of issues with the DTD. Added + optional loop and duration elements to the header element. + +2002-08-27 00:25 neo + + * autogen.sh: Call 'libtoolize --version' instead of libtool. + +2002-08-26 21:34 neo + + * blib/: bmovie-blm.c, bmovie-bml.c, bmovie-gif.c, bmovie.c, + bmovie.h: Pass GError to the load functions. + +2002-08-26 17:37 neo + + * configure.in: Bumped version number to 0.1.0. Install into + $prefix/share/blib-1.0 and $prefix/include/blib-1.0. + +2002-08-21 18:18 neo + + * data/: Makefile.am, blinkentheme.dtd: Added a DTD for + blinkenthemes; subject to changes. + +2002-08-21 18:02 neo + + * data/bml.dtd: Specify default values for the "bits" and + "channels" attributes. + +2002-08-21 16:26 neo + + * blib/bmovie-blm.c, blib/bmovie-bml.c, blib/bmovie-gif.c, + blib/bmovie.c, blib/bmovie.h, blib/btheme.h, + test/test-movie-parser.c: Changed BMovie API to load all movies + and to behave similar to BTheme. + +2002-08-21 16:11 neo + + * blib/bparser.c: oops + +2002-08-21 15:40 neo + + * blib/bmovie.c, blib/btheme-parser.c, blib/btheme.c, + blib/btheme.h, test/test-theme-parser.c: Made BTheme a GObject. + +2002-08-21 14:32 neo + + * blib/blib.h, blib/bmovie-blm.c, blib/bmovie-blm.h, + blib/bmovie-bml.c, blib/bmovie-bml.h, blib/bmovie-gif.c, + blib/bmovie-gif.h, blib/bmovie.c, blib/bmovie.h, blib/bparser.c, + blib/bparser.h, blib/btheme-parser.c, blib/btheme-parser.h, + blib/btheme.c, blib/btheme.h, blib/butils.c, blib/butils.h, + blib/gif-load.c, blib/gif-load.h, blib/gif-save.c, + blib/gif-save.h, blib/gif-types.h, test/test-movie-parser.c, + test/test-theme-parser.c: Put everything under a GPL header. + Plugged one or two memleaks. + +2002-08-20 23:37 neo + + * blib/: bmovie-bml.c, btheme-parser.c: Ported the BML parser to + BParser. + +2002-08-20 23:34 mitch + + * blib/bmovie.c: A forgotten "else" in movie magic detection made + BLM unavailable. + +2002-08-20 23:25 neo + + * test/test-movie-parser.c: take width, height and maxval from the + command-line + +2002-08-20 23:18 mitch + + * test/Makefile.am: Added movies to SUBDIRS + +2002-08-20 23:17 mitch + + * configure.in, test/movies/.cvsignore, test/movies/Makefile.am, + test/movies/alfred-26x20.bml, test/movies/bushfire-test-16x3.gif, + test/movies/camel-18x8.blm: Added a test/movies/ subdirectory + containing a movie of each format we support. + +2002-08-20 23:09 neo + + * test/test-movie-parser.c: Call g_type_init(). + +2002-08-20 23:07 neo + + * test/: .cvsignore, Makefile.am, test-movie-parser.c: Added a very + simple movie test. Needs more work. + +2002-08-20 22:10 mitch + + * blib/: Makefile.am, blib.h, bmovie-blm.c, bmovie-blm.h, + bmovie-bml.c, bmovie-bml.h, bmovie-gif.c, bmovie-gif.h, bmovie.c, + bmovie.h: Added movie stuff from blccc with s/bl/b/g + +2002-08-20 22:06 neo + + * blib/: Makefile.am, blib.h, blutils.c, blutils.h, bml-parser.c, + bml-parser.h, bparser.c, bparser.h, btheme-parser.c, butils.c, + butils.h: blutils -> butils bml-parser -> bparser + +2002-08-20 21:27 neo + + * blib/: btheme-parser.c, btheme.h: Allow to specify offset and + size for images. + +2002-08-20 13:47 neo + + * blib/: bml-parser.c, bparser.c, btheme-parser.c, btheme.c: + improved error handling + +2002-08-20 13:14 neo + + * blib/blutils.c, blib/blutils.h, blib/bml-parser.c, + blib/bml-parser.h, blib/bparser.c, blib/bparser.h, blib/butils.c, + blib/butils.h, blib/btheme-parser.c, blib/btheme-parser.h, + blib/btheme.c, blib/btheme.h, test/test-theme-parser.c: copyleft + updates + +2002-08-20 12:49 neo + + * blib/btheme-parser.c, blib/btheme-parser.h, blib/btheme.c, + blib/btheme.h, test/test-theme-parser.c: Allow only one theme per + file. Added functionality to parse only the theme header. + Changed the test so it parses in two passes. + +2002-08-20 11:56 neo + + * blib/: bml-parser.c, bparser.c: strip trailing spaces from cdata + +2002-08-20 11:22 neo + + * blib/bml-parser.c, blib/bparser.c, blib/btheme-parser.c, + blib/btheme.h, test/test-theme-parser.c: Renamed width and height + to columns and rows. Added width and height attributes that + specify the screen size. Create absolute filenames. Strip + spaces from cdata (not yet perfect). + +2002-08-20 01:05 neo + + * blib/btheme-parser.c: first working version + +2002-08-20 00:56 neo + + * blib/btheme-parser.c, test/test-theme-parser.c: Better error + handling. + +2002-08-20 00:39 neo + + * Makefile.am, configure.in, blib/blib.h, blib/bml-parser.c, + blib/bparser.c, blib/btheme-parser.c, test/.cvsignore, + test/Makefile.am, test/test-theme-parser.c: Added a test app for + the theme-parser. + +2002-08-19 23:47 neo + + * blib/: btheme-parser.c, btheme.h: Added code to parse windows. + +2002-08-19 23:16 neo + + * configure.in, blib/btheme-parser.c, blib/btheme.c, blib/btheme.h, + data/Makefile.am: More work on the theme parser. + +2002-08-15 13:19 neo + + * configure.in, blib/Makefile.am, blib/bml-parser.c, + blib/bml-parser.h, blib/bparser.c, blib/bparser.h, + blib/btheme-parser.c, blib/btheme-parser.h, blib/btheme.c, + blib/btheme.h: Some unfinished code that might be useful one + day... + +2002-08-13 03:54 mitch + + * blib/bmovie-bml.c: Some minor fixes after testing it the first + time. + +2002-08-13 03:28 mitch + + * blib/bmovie-bml.c: Row parsing. ugly, untested, too stoned to + hack loops... + +2002-08-13 02:16 mitch + + * blib/bmovie-bml.c: Theoretically, it should now parse correct BML + files into a movie with empty frames of the correct size... + +2002-08-13 01:52 neo + + * Makefile.am, configure.in, data/.cvsignore, data/Makefile.am, + data/bml.dtd: Added a first draft of a DTD for BLM files. + +2002-08-13 01:49 mitch + + * blib/bmovie-bml.c: Require valid bits="foo" and channels="bar" + attributes to be passed and reject s with wrong lengths + (still untested). + +2002-08-13 01:15 mitch + + * blib/bmovie-bml.c: Accept only movies with correct attibute + values. + +2002-08-13 00:51 mitch + + * blib/: bmovie-blm.c, bmovie-bml.c, bmovie-bml.h, bmovie-gif.c, + bmovie.c, bmovie.h: Initial BML support: + + - added all metadata attributes from the BML
to BlMovie. + - initial blmovie-bml implementation which is totally untested + but should currectly parse the XML structure and metadata. - + changed BLM and GIF loaders to use movie->title instead of + movie->name. + +2002-08-13 00:50 neo + + * README, autogen.sh, blib.pc.in, configure.in, blib/Makefile.am: + Depend on gobject-2.0. + +2002-08-12 21:37 mitch + + * blib/: bmovie-blm.c, bmovie-gif.c, bmovie.c: Removed blutils.[ch] + and use the stuff from blib instead. + +2002-08-12 21:37 mitch + + * blib/: Makefile.am, blib.h, blutils.h, butils.h, gif-load.h, + gif-save.h, gif-types.h: - fixed header file installation - + include everything from blib/blib.h - added gif-types.h for the + GIF enums + +2002-08-12 21:05 mitch + + * blib/bmovie-gif.c: - depend on blib - removed gif-load.[ch] - use + GIF stuff from blib + +2002-08-12 21:04 mitch + + * configure.in: Removed trailing "/blib" from INCLUDEDIR + +2002-08-11 19:40 neo + + * blib/: .cvsignore, Makefile.am, blutils.c, blutils.h, butils.c, + butils.h, gif-load.c, gif-load.h, gif-save.c, gif-save.h: Added + GIF loading and saving code. Added bl_fgets(). + +2002-08-11 19:38 neo + + * .cvsignore, AUTHORS, ChangeLog, Makefile.am, NEWS, README, + autogen.sh, blib.pc.in, configure.in, blib/.cvsignore, + blib/Makefile.am, blib/blib.h: Added build framework. + +2002-07-26 19:12 tim + + * blib/bprotocol.h: moved protocol stuff to mcuprotocol.h + +2002-07-12 13:33 mitch + + * blib/: bmovie.c, bmovie.h: - added speed="factor" XML attribute + (0.1 <= value <= 10.0) - set TIME_CORRECTION magic in bltheater.c + to 0 + +2002-07-12 13:11 mitch + + * blib/bmovie-gif.c: Workaround for Björn's broken GIF writer: Set + frame duration to 100ms if specified as 0ms. + +2002-07-11 16:52 mitch + + * blib/bmovie.c: - added BlEffectScope enum which restricts effects + to either ALL, LEFT or RIGHT (works for all effects except + reverst and mirror). - changed example playlist accordingly. + +2002-07-09 14:50 neo + + * blib/: bmovie-blm.c, bmovie-gif.c, bmovie.c, bmovie.h: Added a + full filename to BlMovie. This is an absolute path build from the + basedir of the playlist and is in the filesystem encoding. + +2002-07-08 22:22 mitch + + * blib/: bmovie-blm.c, bmovie.c, bmovie.h: - added "maxval" + parameters / fields all over the place where needed. - multiply + BLM pixels with maxval on loading. - take maxval into account + when applying effects. - added a per BlPlaylistItem effect + object. - added effect parsing to the XML parser. - added + "reverse§" effect. - changed playlist.gondwana.xml to document + the effects' usage. + + (left the telnet-controllable effects object there because it's + still useful for live performance). + +2002-07-03 17:50 mitch + + * blib/bmovie-gif.c: Conditionalized debugging output with #ifdef + DEBUG_GIF + +2002-07-03 17:41 mitch + + * blib/: bmovie-blm.c, bmovie-blm.h, bmovie-gif.c, bmovie-gif.h, + bmovie.c, bmovie.h: Added support for loading GIF animations and + extended the protocol. + + - the default behaviour (without command line options) is exactly + as before. - added --protocol command line option, where '1' is + the original HDL 18x8 monochrome protocol, '2' is graysale with + arbitrary width and height (--width and --height options). - + added new magic 0xFEEDBEEF for protocol version 2. - create the + pong and isdn objects only for 18x8 matrices. - added + G_CONST_RETURN to all bl_*_get_type() functions. - made BlMovie + an abstract base class. - moved BLM code to blmovie-blm.[ch]. - + added blmovie-gif.[ch]. - added automatic file format detection + using magic header values. - added gif-load.[ch] from + blinkentools. + +2002-07-02 22:52 mitch + + * blib/bmovie.c: Chain up unconditionally in all finalize() + implementations. Removed G_FILE_TEST_EXISTS from all calls to + g_file_test() because G_FILE_TEST_IS_REGULAR already checks for + existance. + +2002-04-14 15:39 neo + + * blib/: bmovie.c, bmovie.h: eeek, blinkenlights was spelled wrong + all over the place + +2002-04-14 15:17 neo + + * blib/: bmovie.c, bmovie.h: Updated README, updated copyright, + unified spelling of Blinkenlights... + +2001-12-30 16:30 neo + + * blib/bmovie.c: Bumped version number to 0.9. Require latest + GLib. Cleaned up marshallers. Simplified Makefile. + +2001-11-05 02:03 neo + + * blib/bmovie.c: Bumped version number to 0.8. Require + glib-1.3.10. Added loop feature (indicated in the playlist by a + TAB followed by a number). Added Freudinnen feature (press *nnn# + while playing Pong to load movie on_demand/nnn.blm). Unload + movies after emitting "movie_finished", so movies aren't reloaded + when they are set again in the signal handler. + +2001-09-30 19:55 neo + + * blib/bmovie.c: Hopefully fixed the bug that caused the screen to + sometimes stay blank after Pong finished. Bumped version number + to 0.7. + +2001-09-28 20:35 neo + + * blib/bmovie.c: Implemented a bunch of commands, connect via + tcp/2323 and try: + + bye - closes the connection + help - shows a list of supported commands + list - list current playlist + reload - reload current playlist + status - show status info + + The default playlist is still 'default_pl'. This will change ... + +2001-09-26 16:50 neo + + * blib/bmovie.c: various misc fixes and changes + +2001-09-26 14:28 neo + + * blib/bmovie.c: it works :-) + + The old functionality is restored by using a default playlist. + I'll add more controls now. + +2001-09-26 00:18 neo + + * blib/bmovie.c: Moved fgets_line() to blutils.c and renamed it to + bl_fgets(). Added implementation for BlPlayList. + +2001-09-25 23:39 neo + + * blib/bmovie.c: Added framework of BlPlaylist object. + +2001-09-25 23:12 neo + + * blib/: bmovie.c, bmovie.h: changed movie load semantics in + preparaion of the upcoming new BlPlayList. + +2001-09-22 22:53 neo + + * blib/bmovie.c: Removed old usage of blccc.h and added framework + for BlCcc object. + +2001-09-21 18:47 neo + + * blib/: bmovie.c, bmovie.h: Added blccc2, the beginning of rewrite + of blccc the to the repository. + diff --git a/blib-1.1.7/INSTALL b/blib-1.1.7/INSTALL new file mode 100644 index 0000000..54caf7c --- /dev/null +++ b/blib-1.1.7/INSTALL @@ -0,0 +1,229 @@ +Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software +Foundation, Inc. + + This file is free documentation; the Free Software Foundation gives +unlimited permission to copy, distribute and modify it. + +Basic Installation +================== + + These are generic installation instructions. + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, and a +file `config.log' containing compiler output (useful mainly for +debugging `configure'). + + It can also use an optional file (typically called `config.cache' +and enabled with `--cache-file=config.cache' or simply `-C') that saves +the results of its tests to speed up reconfiguring. (Caching is +disabled by default to prevent problems with accidental use of stale +cache files.) + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If you are using the cache, and at +some point `config.cache' contains results you don't want to keep, you +may remove or edit it. + + The file `configure.ac' (or `configure.in') is used to create +`configure' by a program called `autoconf'. You only need +`configure.ac' if you want to change it or regenerate `configure' using +a newer version of `autoconf'. + +The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. If you're + using `csh' on an old version of System V, you might need to type + `sh ./configure' instead to prevent `csh' from trying to execute + `configure' itself. + + Running `configure' takes awhile. While running, it prints some + messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Optionally, type `make check' to run any self-tests that come with + the package. + + 4. Type `make install' to install the programs and any data files and + documentation. + + 5. You can remove the program binaries and object files from the + source code directory by typing `make clean'. To also remove the + files that `configure' created (so you can compile the package for + a different kind of computer), type `make distclean'. There is + also a `make maintainer-clean' target, but that is intended mainly + for the package's developers. If you use it, you may have to get + all sorts of other programs in order to regenerate files that came + with the distribution. + +Compilers and Options +===================== + + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. Run `./configure --help' +for details on some of the pertinent environment variables. + + You can give `configure' initial values for configuration parameters +by setting variables in the command line or in the environment. Here +is an example: + + ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix + + *Note Defining Variables::, for more details. + +Compiling For Multiple Architectures +==================================== + + You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you must use a version of `make' that +supports the `VPATH' variable, such as GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. + + If you have to use a `make' that does not support the `VPATH' +variable, you have to compile the package for one architecture at a +time in the source code directory. After you have installed the +package for one architecture, use `make distclean' before reconfiguring +for another architecture. + +Installation Names +================== + + By default, `make install' will install the package's files in +`/usr/local/bin', `/usr/local/man', etc. You can specify an +installation prefix other than `/usr/local' by giving `configure' the +option `--prefix=PATH'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +give `configure' the option `--exec-prefix=PATH', the package will use +PATH as the prefix for installing programs and libraries. +Documentation and other data files will still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like `--bindir=PATH' to specify different values for particular +kinds of files. Run `configure --help' for a list of the directories +you can set and what kinds of files go in them. + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + +Optional Features +================= + + Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + +Specifying the System Type +========================== + + There may be some features `configure' cannot figure out +automatically, but needs to determine by the type of machine the package +will run on. Usually, assuming the package is built to be run on the +_same_ architectures, `configure' can figure that out, but if it prints +a message saying it cannot guess the machine type, give it the +`--build=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name which has the form: + + CPU-COMPANY-SYSTEM + +where SYSTEM can have one of these forms: + + OS KERNEL-OS + + See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the machine type. + + If you are _building_ compiler tools for cross-compiling, you should +use the `--target=TYPE' option to select the type of system they will +produce code for. + + If you want to _use_ a cross compiler, that generates code for a +platform different from the build platform, you should specify the +"host" platform (i.e., that on which the generated programs will +eventually be run) with `--host=TYPE'. + +Sharing Defaults +================ + + If you want to set default values for `configure' scripts to share, +you can create a site shell script called `config.site' that gives +default values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Defining Variables +================== + + Variables not defined in a site shell script can be set in the +environment passed to `configure'. However, some packages may run +configure again during the build, and the customized values of these +variables may be lost. In order to avoid this problem, you should set +them in the `configure' command line, using `VAR=value'. For example: + + ./configure CC=/usr/local2/bin/gcc + +will cause the specified gcc to be used as the C compiler (unless it is +overridden in the site shell script). + +`configure' Invocation +====================== + + `configure' recognizes the following options to control how it +operates. + +`--help' +`-h' + Print a summary of the options to `configure', and exit. + +`--version' +`-V' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`--cache-file=FILE' + Enable the cache: use and save the results of the tests in FILE, + traditionally `config.cache'. FILE defaults to `/dev/null' to + disable caching. + +`--config-cache' +`-C' + Alias for `--cache-file=config.cache'. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. To + suppress all normal output, redirect it to `/dev/null' (any error + messages will still be shown). + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`configure' also accepts some other, not widely useful, options. Run +`configure --help' for more details. + diff --git a/blib-1.1.7/Makefile.am b/blib-1.1.7/Makefile.am new file mode 100644 index 0000000..a804555 --- /dev/null +++ b/blib-1.1.7/Makefile.am @@ -0,0 +1,44 @@ +## Makefile.am for blib +## Process this file with automake to produce Makefile.in + +SUBDIRS = blib gfx modules test data docs + +if HAVE_AA +AA_PC = blib-aa.pc +endif + +if HAVE_DIRECTFB +DIRECTFB_PC = blib-directfb.pc +endif + +if HAVE_GTK +GTK_PC = blib-gtk.pc +endif + +if HAVE_PIXBUF +PIXBUF_PC = blib-pixbuf.pc +endif + +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = \ + blib.pc \ + $(AA_PC) \ + $(DIRECTFB_PC) \ + $(GTK_PC) \ + $(PIXBUF_PC) + +EXTRA_DIST = \ + autogen.sh \ + debian/changelog \ + debian/control \ + debian/copyright \ + debian/dirs \ + debian/docs \ + debian/files \ + debian/libblib-dev.files \ + debian/libblib-directfb-dev.files\ + debian/libblib-directfb.files \ + debian/libblib-gtk-dev.files \ + debian/libblib-gtk.files \ + debian/libblib.files \ + debian/rules diff --git a/blib-1.1.7/Makefile.in b/blib-1.1.7/Makefile.in new file mode 100644 index 0000000..4508bd1 --- /dev/null +++ b/blib-1.1.7/Makefile.in @@ -0,0 +1,676 @@ +# Makefile.in generated by automake 1.7.9 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = . + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +AA_LIBS = @AA_LIBS@ +AA_VIEW_TYPE = @AA_VIEW_TYPE@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BLIB_BINARY_AGE = @BLIB_BINARY_AGE@ +BLIB_INTERFACE_AGE = @BLIB_INTERFACE_AGE@ +BLIB_MAJOR_VERSION = @BLIB_MAJOR_VERSION@ +BLIB_MICRO_VERSION = @BLIB_MICRO_VERSION@ +BLIB_MINOR_VERSION = @BLIB_MINOR_VERSION@ +BLIB_VERSION = @BLIB_VERSION@ +BUILD_MODULES_FALSE = @BUILD_MODULES_FALSE@ +BUILD_MODULES_TRUE = @BUILD_MODULES_TRUE@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIR = @DATADIR@ +DB2HTML = @DB2HTML@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DIRECTFB_CFLAGS = @DIRECTFB_CFLAGS@ +DIRECTFB_LIBS = @DIRECTFB_LIBS@ +DIRECTFB_VIEW_TYPE = @DIRECTFB_VIEW_TYPE@ +ECHO = @ECHO@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ENABLE_GTK_DOC_FALSE = @ENABLE_GTK_DOC_FALSE@ +ENABLE_GTK_DOC_TRUE = @ENABLE_GTK_DOC_TRUE@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ +GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ +GLIB_LIBS = @GLIB_LIBS@ +GLIB_MKENUMS = @GLIB_MKENUMS@ +GOBJECT_QUERY = @GOBJECT_QUERY@ +GTKDOC = @GTKDOC@ +GTK_CFLAGS = @GTK_CFLAGS@ +GTK_LIBS = @GTK_LIBS@ +GTK_VIEW_TYPE = @GTK_VIEW_TYPE@ +HAVE_AA_FALSE = @HAVE_AA_FALSE@ +HAVE_AA_TRUE = @HAVE_AA_TRUE@ +HAVE_DIRECTFB_FALSE = @HAVE_DIRECTFB_FALSE@ +HAVE_DIRECTFB_TRUE = @HAVE_DIRECTFB_TRUE@ +HAVE_DOCBOOK_FALSE = @HAVE_DOCBOOK_FALSE@ +HAVE_DOCBOOK_TRUE = @HAVE_DOCBOOK_TRUE@ +HAVE_GTK_DOC = @HAVE_GTK_DOC@ +HAVE_GTK_DOC_FALSE = @HAVE_GTK_DOC_FALSE@ +HAVE_GTK_DOC_TRUE = @HAVE_GTK_DOC_TRUE@ +HAVE_GTK_FALSE = @HAVE_GTK_FALSE@ +HAVE_GTK_TRUE = @HAVE_GTK_TRUE@ +HAVE_PIXBUF_FALSE = @HAVE_PIXBUF_FALSE@ +HAVE_PIXBUF_TRUE = @HAVE_PIXBUF_TRUE@ +HTML_DIR = @HTML_DIR@ +INCLUDEDIR = @INCLUDEDIR@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_AGE = @LT_AGE@ +LT_CURRENT = @LT_CURRENT@ +LT_RELEASE = @LT_RELEASE@ +LT_REVISION = @LT_REVISION@ +MAINT = @MAINT@ +MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ +MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ +MAKEINFO = @MAKEINFO@ +MODULEPATH = @MODULEPATH@ +OBJEXT = @OBJEXT@ +OS_WIN32_FALSE = @OS_WIN32_FALSE@ +OS_WIN32_TRUE = @OS_WIN32_TRUE@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PIXBUF_VIEW_TYPE = @PIXBUF_VIEW_TYPE@ +PKG_CONFIG = @PKG_CONFIG@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +THEMEPATH = @THEMEPATH@ +VERSION = @VERSION@ +WIN32_CFLAGS = @WIN32_CFLAGS@ +WIN32_LIBS = @WIN32_LIBS@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_F77 = @ac_ct_F77@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +SUBDIRS = blib gfx modules test data docs + +@HAVE_AA_TRUE@AA_PC = blib-aa.pc + +@HAVE_DIRECTFB_TRUE@DIRECTFB_PC = blib-directfb.pc + +@HAVE_GTK_TRUE@GTK_PC = blib-gtk.pc + +@HAVE_PIXBUF_TRUE@PIXBUF_PC = blib-pixbuf.pc + +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = \ + blib.pc \ + $(AA_PC) \ + $(DIRECTFB_PC) \ + $(GTK_PC) \ + $(PIXBUF_PC) + + +EXTRA_DIST = \ + autogen.sh \ + debian/changelog \ + debian/control \ + debian/copyright \ + debian/dirs \ + debian/docs \ + debian/files \ + debian/libblib-dev.files \ + debian/libblib-directfb-dev.files\ + debian/libblib-directfb.files \ + debian/libblib-gtk-dev.files \ + debian/libblib-gtk.files \ + debian/libblib.files \ + debian/rules + +subdir = . +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = config.h +CONFIG_CLEAN_FILES = blib.pc blib-aa.pc blib-directfb.pc blib-gtk.pc \ + blib-pixbuf.pc +DIST_SOURCES = +DATA = $(pkgconfig_DATA) + + +RECURSIVE_TARGETS = info-recursive dvi-recursive pdf-recursive \ + ps-recursive install-info-recursive uninstall-info-recursive \ + all-recursive install-data-recursive install-exec-recursive \ + installdirs-recursive install-recursive uninstall-recursive \ + check-recursive installcheck-recursive +DIST_COMMON = README $(srcdir)/Makefile.in $(srcdir)/configure AUTHORS \ + COPYING ChangeLog INSTALL Makefile.am NEWS aclocal.m4 \ + blib-aa.pc.in blib-directfb.pc.in blib-gtk.pc.in \ + blib-pixbuf.pc.in blib.pc.in config.guess config.h.in \ + config.sub configure configure.in depcomp install-sh ltmain.sh \ + missing mkinstalldirs +DIST_SUBDIRS = $(SUBDIRS) +all: config.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: + +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu Makefile +Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe) + +$(top_builddir)/config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck +$(srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES) + cd $(srcdir) && $(AUTOCONF) + +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ configure.in + cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) + +config.h: stamp-h1 + @if test ! -f $@; then \ + rm -f stamp-h1; \ + $(MAKE) stamp-h1; \ + else :; fi + +stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status config.h + +$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOHEADER) + touch $(srcdir)/config.h.in + +distclean-hdr: + -rm -f config.h stamp-h1 +blib.pc: $(top_builddir)/config.status blib.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +blib-aa.pc: $(top_builddir)/config.status blib-aa.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +blib-directfb.pc: $(top_builddir)/config.status blib-directfb.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +blib-gtk.pc: $(top_builddir)/config.status blib-gtk.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +blib-pixbuf.pc: $(top_builddir)/config.status blib-pixbuf.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $@ + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool +uninstall-info-am: +pkgconfigDATA_INSTALL = $(INSTALL_DATA) +install-pkgconfigDATA: $(pkgconfig_DATA) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(pkgconfigdir) + @list='$(pkgconfig_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f="`echo $$p | sed -e 's|^.*/||'`"; \ + echo " $(pkgconfigDATA_INSTALL) $$d$$p $(DESTDIR)$(pkgconfigdir)/$$f"; \ + $(pkgconfigDATA_INSTALL) $$d$$p $(DESTDIR)$(pkgconfigdir)/$$f; \ + done + +uninstall-pkgconfigDATA: + @$(NORMAL_UNINSTALL) + @list='$(pkgconfig_DATA)'; for p in $$list; do \ + f="`echo $$p | sed -e 's|^.*/||'`"; \ + echo " rm -f $(DESTDIR)$(pkgconfigdir)/$$f"; \ + rm -f $(DESTDIR)$(pkgconfigdir)/$$f; \ + done + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @set fnord $$MAKEFLAGS; amf=$$2; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +mostlyclean-recursive clean-recursive distclean-recursive \ +maintainer-clean-recursive: + @set fnord $$MAKEFLAGS; amf=$$2; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ETAGS = etags +ETAGSFLAGS = + +CTAGS = ctags +CTAGSFLAGS = + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique + +TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if (etags --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + else \ + include_option=--include; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -f $$subdir/TAGS && \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)$$tags$$unique" \ + || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique + +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = . +distdir = $(PACKAGE)-$(VERSION) + +am__remove_distdir = \ + { test ! -d $(distdir) \ + || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -fr $(distdir); }; } + +GZIP_ENV = --best +distuninstallcheck_listfiles = find . -type f -print +distcleancheck_listfiles = find . -type f -print + +distdir: $(DISTFILES) + $(am__remove_distdir) + mkdir $(distdir) + $(mkinstalldirs) $(distdir)/. $(distdir)/debian $(distdir)/docs/reference + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d $(distdir)/$$subdir \ + || mkdir $(distdir)/$$subdir \ + || exit 1; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" \ + distdir=../$(distdir)/$$subdir \ + distdir) \ + || exit 1; \ + fi; \ + done + -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r $(distdir) +dist-gzip: distdir + $(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) + +dist dist-all: distdir + $(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + $(am__remove_distdir) + GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(AMTAR) xf - + chmod -R a-w $(distdir); chmod a+w $(distdir) + mkdir $(distdir)/_build + mkdir $(distdir)/_inst + chmod a-w $(distdir) + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && cd $(distdir)/_build \ + && ../configure --srcdir=.. --prefix="$$dc_install_base" \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && $(mkinstalldirs) "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist-gzip \ + && rm -f $(distdir).tar.gz \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck + $(am__remove_distdir) + @echo "$(distdir).tar.gz is ready for distribution" | \ + sed 'h;s/./=/g;p;x;p;x' +distuninstallcheck: + @cd $(distuninstallcheck_dir) \ + && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: check-recursive +all-am: Makefile $(DATA) config.h +installdirs: installdirs-recursive +installdirs-am: + $(mkinstalldirs) $(DESTDIR)$(pkgconfigdir) + +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-hdr distclean-libtool \ + distclean-tags + +dvi: dvi-recursive + +dvi-am: + +info: info-recursive + +info-am: + +install-data-am: install-pkgconfigDATA + +install-exec-am: + +install-info: install-info-recursive + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-info-am uninstall-pkgconfigDATA + +uninstall-info: uninstall-info-recursive + +.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am clean \ + clean-generic clean-libtool clean-recursive ctags \ + ctags-recursive dist dist-all dist-gzip distcheck distclean \ + distclean-generic distclean-hdr distclean-libtool \ + distclean-recursive distclean-tags distcleancheck distdir \ + distuninstallcheck dvi dvi-am dvi-recursive info info-am \ + info-recursive install install-am install-data install-data-am \ + install-data-recursive install-exec install-exec-am \ + install-exec-recursive install-info install-info-am \ + install-info-recursive install-man install-pkgconfigDATA \ + install-recursive install-strip installcheck installcheck-am \ + installdirs installdirs-am installdirs-recursive \ + maintainer-clean maintainer-clean-generic \ + maintainer-clean-recursive mostlyclean mostlyclean-generic \ + mostlyclean-libtool mostlyclean-recursive pdf pdf-am \ + pdf-recursive ps ps-am ps-recursive tags tags-recursive \ + uninstall uninstall-am uninstall-info-am \ + uninstall-info-recursive uninstall-pkgconfigDATA \ + uninstall-recursive + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/blib-1.1.7/NEWS b/blib-1.1.7/NEWS new file mode 100644 index 0000000..88bcc8b --- /dev/null +++ b/blib-1.1.7/NEWS @@ -0,0 +1,120 @@ +blib 1.1.7 (development release) +---------- +- added BViewPixbuf, renders still frames +- let BViewGtk use BViewPixbuf +- added BProxyServer, implementing the server side of the + blinkenproxy protocol + +blib 1.1.6 (development release) +---------- +- optimizations to BViewGtk; makes blinkensim-gtk perform a lot better +- bug-fixes in the XML loader +- module fixes for multi-player + +blib 1.1.5 (development release) +---------- +- added Win32 port + +blib 1.1.4 (development release) +---------- +- added an aalib based BView +- improved some modules, most namely BCountdown +- bug-fixes in the GIF loader + +blib 1.1.3 (development release) +---------- +- bug-fixes in the GIF loader +- minor optimizations in the GTK+ view + +blib 1.1.2 (development release) +---------- +- added BProxyClient to be used from blinkensim + +blib 1.1.1 (development release) +---------- +- fixed use of network sockets on FreeBSD +- added files to build debian packages +- some minor bugfixes + +blib 1.1.0 (development release) +---------- + - added new modules BRetris, BSnake, Bxxo + - added hooks to allow implementation of blinkenproxy (in blinkentools) + - added compatibility with the old-style blinken network protocol + +blib 1.0.1 +---------- + - added new module BCountdown + - added a new large digits font + - fixed some bugs + +blib 1.0.0 +---------- + - added new modules BClock, BDropout, BMatrix, BPushLine and BText + - extended themes framework to allow to specify overlay images for + the different intensity values + - added b_movie_apply_colormap() + - documented the API + - fixed some bugs + +blib 0.9 +-------- + - more changes to BModule, added describe and relax methods + - added module properties to allow customization of modules + - added value transform functions so we can deserialize property values + - allow to register filename properties + - added lots of new modules: BPacman, BPong, BBreakout, BProxy and BDebug + - improved the existing module implementations + - added a first draft of the multiplayer API (still subject to changes) + +blib 0.8 +-------- + - improved BModule API + - teached the BModule base class how to run a module + - added new modules BQix and BFire + - improved BMoviePlayer + - added simple graphics functions to be used by modules + - added optimized blending functions to the GTK+ view + +blib 0.7 +-------- + - added BTetris, the tetris game as a BModule + - added BMoviePlayer, a builtin BModule that plays movies + - cleaned up bprotocol header file + - improved BThemes, the file format is more flexible but still simpler + - optimized the GTK+ view so that it is actually useable + - moved themes into their own package: blinkenthemes + - misc bug fixes and enhancements + +blib 0.6 +-------- + - BModule improvements, the API looks reasonably well now + - reworked BTheme once again + - added a preliminary BNF and Gondwana themes + - added BViewGtk and BViewDirectFB that implement views using BTheme + - improved documentation of the file formats + +blib 0.5 +-------- + - added BSender + - fixed various bugs + - more BTheme improvements, started to add more themes + - improved BModule a lot, added a simple game for testing + - fixed various bugs + +blib 0.4 +-------- + - added BReceiver + - added BModule, the parent class of all game modules + - cleaned up the BML DTD + - cleaned up BTheme API + - fixed various bugs + +blib 0.3 +-------- + - added simple frame and movie effects + - added BModule framework that we'll need for the games API + +blib 0.2 +-------- + - initial public release diff --git a/blib-1.1.7/README b/blib-1.1.7/README new file mode 100644 index 0000000..97ce4ba --- /dev/null +++ b/blib-1.1.7/README @@ -0,0 +1,102 @@ +BLib - Library of useful things to hack the Blinkenlights +--------------------------------------------------------- + +This version (1.1.7) is a development release that adds a number of +new features that haven't seen much testing yet. Future 1.1.x releases +might change the newly added API. When the new API has settled and all +new features are tested, we will do a stable blib-1.2 release. + +This library contains some code that you will find useful if +you want to create any kind of software related to Blinkenlights. +If you have never heard about Blinkenlights, you want to check +http://www.blinkenlights.de/ first. + +There is code to read and write the old-style BLM movie format +as well as code to handle GIF files and the new Blinkenlights +Markup Language. Actually you don't have to care much since this +is all hidden in the BMovie object. + +Both sides of the Blinkenlights network protocol are implemented +so that you don't have to care about the details. + +The BModule object defines an API for games and the like. The +modules directory contains some BModule implementations. + +Last but not least there is code that reads Blinkenthemes. Based on +these themes, there are views for DirectFB, GTK+-2.0, GdkPixbuf and +aalib that you can use to implement graphical viewers and editors. +You will want to download the blinkenthemes package. + +We suggest you also download blinkentools and blinkensim. Both +packages make heavy use of BLib. + + +Requirements: +------------- + +BLib requires glib-2.0. You'll also need pkg-config to build BLib. +The configure script should detect whether you have DirectFB, GTK+-2.0 +and/or aalib installed and will skip building some parts of BLib if +you don't have these libraries. + +This software is known to compile and work on Linux, FreeBSD, MacOS X +and Win32 (using the MinGW environment; see http://www.mingw.org/). + + +Installation: +------------- + +BLib is configured, built and installed the usual way. Read the file +INSTALL or simply try to run + + ./configure; make; make install + +BLib will install a couple of pkg-config files into the prefix. These +are used by application to detect your blib installation. If BLib is +installed into a different prefix than the pkg-config utility, you +will want to adapt your PKG_CONFIG_PATH accordingly. See the man-page +for pkg-config(1). + + +Legal Disclaimer: +----------------- + + (c) Copyright 2002-2004 The Blinkenlights Crew All rights reversed. + +This library is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +The complete text of the license is found in the file COPYING. + +A list of authors is included with this package in the file AUTHORS. + + +The BFire module contains code taken from aafire which is distributed +with aalib. AAlib rules, nuff respect to the AA crew! + + +BQix was inspired by the qix hack from the xscreensaver distribution. +I haven't copied from the code but since I had a look at the +implementation, let's credit Jamie Zawinski as well. + + +BMatrix is based on the Matrix hack from the xscreensaver package which +comes with the following copyright notice: + + Permission to use, copy, modify, distribute, and sell this software and + its documentation for any purpose is hereby granted without fee, provided + that the above copyright notice appear in all copies and that both that + copyright notice and this permission notice appear in supporting + documentation. No representations are made about the suitability of this + software for any purpose. It is provided "as is" without express or + implied warranty. + + +The code to load and save GIF images contained in this package is +loosely based on the GIF plug-in for The GIMP which appears to have +had this copyright notices at one point in time: + + GIMP plug-in written by Adam D. Moss + Based around original GIF code by David Koblas. diff --git a/blib-1.1.7/aclocal.m4 b/blib-1.1.7/aclocal.m4 new file mode 100644 index 0000000..c3cda3c --- /dev/null +++ b/blib-1.1.7/aclocal.m4 @@ -0,0 +1,7210 @@ +# generated automatically by aclocal 1.7.9 -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002 +# Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +# Do all the work for Automake. -*- Autoconf -*- + +# This macro actually does too much some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 +# Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# serial 10 + +AC_PREREQ([2.54]) + +# Autoconf 2.50 wants to disallow AM_ names. We explicitly allow +# the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl + AC_REQUIRE([AC_PROG_INSTALL])dnl +# test to see if srcdir already configured +if test "`cd $srcdir && pwd`" != "`pwd`" && + test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) +AM_MISSING_PROG(AUTOCONF, autoconf) +AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) +AM_MISSING_PROG(AUTOHEADER, autoheader) +AM_MISSING_PROG(MAKEINFO, makeinfo) +AM_MISSING_PROG(AMTAR, tar) +AM_PROG_INSTALL_SH +AM_PROG_INSTALL_STRIP +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl + +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +]) +]) + + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $1 | $1:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) + +# Copyright 2002 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +AC_DEFUN([AM_AUTOMAKE_VERSION],[am__api_version="1.7"]) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION so it can be traced. +# This function is AC_REQUIREd by AC_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], + [AM_AUTOMAKE_VERSION([1.7.9])]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright 2001, 2002 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# serial 2 + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# ------------------------------ +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) + +# _AM_SET_OPTIONS(OPTIONS) +# ---------------------------------- +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# +# Check to make sure that the build environment is sane. +# + +# Copyright 1996, 1997, 2000, 2001 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# serial 3 + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftest.file +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftest.file` + fi + rm -f conftest.file + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT(yes)]) + +# -*- Autoconf -*- + + +# Copyright 1997, 1999, 2000, 2001 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# serial 3 + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it supports --run. +# If it does, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + AC_MSG_WARN([`missing' script is too old or missing]) +fi +]) + +# AM_AUX_DIR_EXPAND + +# Copyright 2001 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to +# `$srcdir', `$srcdir/..', or `$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is `.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +# Rely on autoconf to set up CDPATH properly. +AC_PREREQ([2.50]) + +AC_DEFUN([AM_AUX_DIR_EXPAND], [ +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` +]) + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. + +# Copyright 2001 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +install_sh=${install_sh-"$am_aux_dir/install-sh"} +AC_SUBST(install_sh)]) + +# AM_PROG_INSTALL_STRIP + +# Copyright 2001 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# One issue with vendor `install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in `make install-strip', and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be `maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# -*- Autoconf -*- +# Copyright (C) 2003 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# serial 1 + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# serial 5 -*- Autoconf -*- + +# Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + + +# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "GCJ", or "OBJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +ifelse([$1], CC, [depcc="$CC" am_compiler_list=], + [$1], CXX, [depcc="$CXX" am_compiler_list=], + [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + : > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + case $depmode in + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + none) break ;; + esac + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. + if depmode=$depmode \ + source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # (even with -Werror). So we grep stderr for any message + # that says an option was ignored. + if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE(dependency-tracking, +[ --disable-dependency-tracking Speeds up one-time builds + --enable-dependency-tracking Do not reject slow dependency extractors]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH]) +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +#serial 2 + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[for mf in $CONFIG_FILES; do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # So let's grep whole file. + if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + grep '^DEP_FILES *= *[[^ @%:@]]' < "$mf" > /dev/null || continue + # Extract the definition of DEP_FILES from the Makefile without + # running `make'. + DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"` + test -z "$DEPDIR" && continue + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n -e '/^U = / s///p' < "$mf"` + test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR" + # We invoke sed twice because it is the simplest approach to + # changing $(DEPDIR) to its actual value in the expansion. + for file in `sed -n -e ' + /^DEP_FILES = .*\\\\$/ { + s/^DEP_FILES = // + :loop + s/\\\\$// + p + n + /\\\\$/ b loop + p + } + /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done +done +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each `.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# serial 2 + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo done +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# We grep out `Entering directory' and `Leaving directory' +# messages which can occur if `w' ends up in MAKEFLAGS. +# In particular we don't look at `^make:' because GNU make might +# be invoked under some other name (usually "gmake"), in which +# case it prints its new name instead of `make'. +if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then + am__include=include + am__quote= + _am_result=GNU +fi +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then + am__include=.include + am__quote="\"" + _am_result=BSD + fi +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright 1997, 2000, 2001 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# serial 5 + +AC_PREREQ(2.52) + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE]) +AC_SUBST([$1_FALSE]) +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]) +fi])]) + +# Like AC_CONFIG_HEADER, but automatically create stamp file. -*- Autoconf -*- + +# Copyright 1996, 1997, 2000, 2001 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +AC_PREREQ([2.52]) + +# serial 6 + +# AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS. +AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) + +# Add --enable-maintainer-mode option to configure. +# From Jim Meyering + +# Copyright 1996, 1998, 2000, 2001, 2002 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# serial 2 + +AC_DEFUN([AM_MAINTAINER_MODE], +[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) + dnl maintainer-mode is disabled by default + AC_ARG_ENABLE(maintainer-mode, +[ --enable-maintainer-mode enable make rules and dependencies not useful + (and sometimes confusing) to the casual installer], + USE_MAINTAINER_MODE=$enableval, + USE_MAINTAINER_MODE=no) + AC_MSG_RESULT([$USE_MAINTAINER_MODE]) + AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes]) + MAINT=$MAINTAINER_MODE_TRUE + AC_SUBST(MAINT)dnl +] +) + +AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) + +# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- + +# serial 47 AC_PROG_LIBTOOL +# Debian $Rev: 203 $ + + +# AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED) +# ----------------------------------------------------------- +# If this macro is not defined by Autoconf, define it here. +m4_ifdef([AC_PROVIDE_IFELSE], + [], + [m4_define([AC_PROVIDE_IFELSE], + [m4_ifdef([AC_PROVIDE_$1], + [$2], [$3])])]) + + +# AC_PROG_LIBTOOL +# --------------- +AC_DEFUN([AC_PROG_LIBTOOL], +[AC_REQUIRE([_AC_PROG_LIBTOOL])dnl +dnl If AC_PROG_CXX has already been expanded, run AC_LIBTOOL_CXX +dnl immediately, otherwise, hook it in at the end of AC_PROG_CXX. + AC_PROVIDE_IFELSE([AC_PROG_CXX], + [AC_LIBTOOL_CXX], + [define([AC_PROG_CXX], defn([AC_PROG_CXX])[AC_LIBTOOL_CXX + ])]) +dnl And a similar setup for Fortran 77 support + AC_PROVIDE_IFELSE([AC_PROG_F77], + [AC_LIBTOOL_F77], + [define([AC_PROG_F77], defn([AC_PROG_F77])[AC_LIBTOOL_F77 +])]) + +dnl Quote A][M_PROG_GCJ so that aclocal doesn't bring it in needlessly. +dnl If either AC_PROG_GCJ or A][M_PROG_GCJ have already been expanded, run +dnl AC_LIBTOOL_GCJ immediately, otherwise, hook it in at the end of both. + AC_PROVIDE_IFELSE([AC_PROG_GCJ], + [AC_LIBTOOL_GCJ], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], + [AC_LIBTOOL_GCJ], + [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ], + [AC_LIBTOOL_GCJ], + [ifdef([AC_PROG_GCJ], + [define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[AC_LIBTOOL_GCJ])]) + ifdef([A][M_PROG_GCJ], + [define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[AC_LIBTOOL_GCJ])]) + ifdef([LT_AC_PROG_GCJ], + [define([LT_AC_PROG_GCJ], + defn([LT_AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])])]) +])])# AC_PROG_LIBTOOL + + +# _AC_PROG_LIBTOOL +# ---------------- +AC_DEFUN([_AC_PROG_LIBTOOL], +[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl +AC_BEFORE([$0],[AC_LIBTOOL_CXX])dnl +AC_BEFORE([$0],[AC_LIBTOOL_F77])dnl +AC_BEFORE([$0],[AC_LIBTOOL_GCJ])dnl + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +AC_SUBST(LIBTOOL)dnl + +# Prevent multiple expansion +define([AC_PROG_LIBTOOL], []) +])# _AC_PROG_LIBTOOL + + +# AC_LIBTOOL_SETUP +# ---------------- +AC_DEFUN([AC_LIBTOOL_SETUP], +[AC_PREREQ(2.50)dnl +AC_REQUIRE([AC_ENABLE_SHARED])dnl +AC_REQUIRE([AC_ENABLE_STATIC])dnl +AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_PROG_LD])dnl +AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl +AC_REQUIRE([AC_PROG_NM])dnl + +AC_REQUIRE([AC_PROG_LN_S])dnl +AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl +# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! +AC_REQUIRE([AC_OBJEXT])dnl +AC_REQUIRE([AC_EXEEXT])dnl +dnl + +AC_LIBTOOL_SYS_MAX_CMD_LEN +AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE +AC_LIBTOOL_OBJDIR + +AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl +_LT_AC_PROG_ECHO_BACKSLASH + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='sed -e s/^X//' +[sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g'] + +# Same as above, but do not quote variable references. +[double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g'] + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +# Constants: +rm="rm -f" + +# Global variables: +default_ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except M$VC, +# which needs '.lib'). +libext=a +ltmain="$ac_aux_dir/ltmain.sh" +ofile="$default_ofile" +with_gnu_ld="$lt_cv_prog_gnu_ld" + +AC_CHECK_TOOL(AR, ar, false) +AC_CHECK_TOOL(RANLIB, ranlib, :) +AC_CHECK_TOOL(STRIP, strip, :) + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$AR" && AR=ar +test -z "$AR_FLAGS" && AR_FLAGS=cru +test -z "$AS" && AS=as +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$DLLTOOL" && DLLTOOL=dlltool +test -z "$LD" && LD=ld +test -z "$LN_S" && LN_S="ln -s" +test -z "$MAGIC_CMD" && MAGIC_CMD=file +test -z "$NM" && NM=nm +test -z "$SED" && SED=sed +test -z "$OBJDUMP" && OBJDUMP=objdump +test -z "$RANLIB" && RANLIB=: +test -z "$STRIP" && STRIP=: +test -z "$ac_objext" && ac_objext=o + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds" + ;; + *) + old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi + +# Only perform the check for file, if the check method requires it +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + AC_PATH_MAGIC + fi + ;; +esac + +AC_PROVIDE_IFELSE([AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no) +AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL], +enable_win32_dll=yes, enable_win32_dll=no) + +AC_ARG_ENABLE([libtool-lock], + [AC_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +AC_ARG_WITH([pic], + [AC_HELP_STRING([--with-pic], + [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], + [pic_mode="$withval"], + [pic_mode=default]) +test -z "$pic_mode" && pic_mode=default + +# Use C for the default configuration in the libtool script +tagname= +AC_LIBTOOL_LANG_C_CONFIG +_LT_AC_TAGCONFIG +])# AC_LIBTOOL_SETUP + + +# _LT_AC_SYS_COMPILER +# ------------------- +AC_DEFUN([_LT_AC_SYS_COMPILER], +[AC_REQUIRE([AC_PROG_CC])dnl + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# Allow CC to be a program name with arguments. +compiler=$CC +])# _LT_AC_SYS_COMPILER + + +# _LT_AC_SYS_LIBPATH_AIX +# ---------------------- +# Links a minimal program and checks the executable +# for the system default hardcoded library path. In most cases, +# this is /usr/lib:/lib, but when the MPI compilers are used +# the location of the communication and MPI libs are included too. +# If we don't find anything, use the default library path according +# to the aix ld manual. +AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX], +[AC_LINK_IFELSE(AC_LANG_PROGRAM,[ +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi],[]) +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi +])# _LT_AC_SYS_LIBPATH_AIX + + +# _LT_AC_SHELL_INIT(ARG) +# ---------------------- +AC_DEFUN([_LT_AC_SHELL_INIT], +[ifdef([AC_DIVERSION_NOTICE], + [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)], + [AC_DIVERT_PUSH(NOTICE)]) +$1 +AC_DIVERT_POP +])# _LT_AC_SHELL_INIT + + +# _LT_AC_PROG_ECHO_BACKSLASH +# -------------------------- +# Add some code to the start of the generated configure script which +# will find an echo command which doesn't interpret backslashes. +AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH], +[_LT_AC_SHELL_INIT([ +# Check that we are running under the correct shell. +SHELL=${CONFIG_SHELL-/bin/sh} + +case X$ECHO in +X*--fallback-echo) + # Remove one level of quotation (which was required for Make). + ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','` + ;; +esac + +echo=${ECHO-echo} +if test "X[$]1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X[$]1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then + # Yippee, $echo works! + : +else + # Restart under the correct shell. + exec $SHELL "[$]0" --no-reexec ${1+"[$]@"} +fi + +if test "X[$]1" = X--fallback-echo; then + # used as fallback echo + shift + cat </dev/null && + echo_test_string="`eval $cmd`" && + (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null + then + break + fi + done +fi + +if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + : +else + # The Solaris, AIX, and Digital Unix default echo programs unquote + # backslashes. This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # + # So, first we look for a working echo in the user's PATH. + + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for dir in $PATH /usr/ucb; do + IFS="$lt_save_ifs" + if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && + test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + echo="$dir/echo" + break + fi + done + IFS="$lt_save_ifs" + + if test "X$echo" = Xecho; then + # We didn't find a better echo, so look for alternatives. + if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # This shell has a builtin print -r that does the trick. + echo='print -r' + elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && + test "X$CONFIG_SHELL" != X/bin/ksh; then + # If we have ksh, try running configure again with it. + ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} + export ORIGINAL_CONFIG_SHELL + CONFIG_SHELL=/bin/ksh + export CONFIG_SHELL + exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"} + else + # Try using printf. + echo='printf %s\n' + if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # Cool, printf works + : + elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL + export CONFIG_SHELL + SHELL="$CONFIG_SHELL" + export SHELL + echo="$CONFIG_SHELL [$]0 --fallback-echo" + elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + echo="$CONFIG_SHELL [$]0 --fallback-echo" + else + # maybe with a smaller string... + prev=: + + for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do + if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null + then + break + fi + prev="$cmd" + done + + if test "$prev" != 'sed 50q "[$]0"'; then + echo_test_string=`eval $prev` + export echo_test_string + exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"} + else + # Oops. We lost completely, so just stick with echo. + echo=echo + fi + fi + fi + fi +fi +fi + +# Copy echo and quote the copy suitably for passing to libtool from +# the Makefile, instead of quoting the original, which is used later. +ECHO=$echo +if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then + ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo" +fi + +AC_SUBST(ECHO) +])])# _LT_AC_PROG_ECHO_BACKSLASH + + +# _LT_AC_LOCK +# ----------- +AC_DEFUN([_LT_AC_LOCK], +[AC_ARG_ENABLE([libtool-lock], + [AC_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '[#]line __oline__ "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case "`/usr/bin/file conftest.o`" in + *32-bit*) + case $host in + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, + [AC_LANG_PUSH(C) + AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) + AC_LANG_POP]) + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL], +[*-*-cygwin* | *-*-mingw* | *-*-pw32*) + AC_CHECK_TOOL(DLLTOOL, dlltool, false) + AC_CHECK_TOOL(AS, as, false) + AC_CHECK_TOOL(OBJDUMP, objdump, false) + ;; + ]) +esac + +need_locks="$enable_libtool_lock" + +])# _LT_AC_LOCK + + +# AC_LIBTOOL_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------------------- +# Check whether the given compiler option works +AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], +[AC_REQUIRE([LT_AC_PROG_SED]) +AC_CACHE_CHECK([$1], [$2], + [$2=no + ifelse([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$3" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test ! -s conftest.err; then + $2=yes + fi + fi + $rm conftest* +]) + +if test x"[$]$2" = xyes; then + ifelse([$5], , :, [$5]) +else + ifelse([$6], , :, [$6]) +fi +])# AC_LIBTOOL_COMPILER_OPTION + + +# AC_LIBTOOL_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [ACTION-SUCCESS], [ACTION-FAILURE]) +# ------------------------------------------------------------ +# Check whether the given compiler option works +AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], +[AC_CACHE_CHECK([$1], [$2], + [$2=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $3" + printf "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&AS_MESSAGE_LOG_FD + else + $2=yes + fi + fi + $rm conftest* + LDFLAGS="$save_LDFLAGS" +]) + +if test x"[$]$2" = xyes; then + ifelse([$4], , :, [$4]) +else + ifelse([$5], , :, [$5]) +fi +])# AC_LIBTOOL_LINKER_OPTION + + +# AC_LIBTOOL_SYS_MAX_CMD_LEN +# -------------------------- +AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], +[# find the maximum length of command line arguments +AC_MSG_CHECKING([the maximum length of command line arguments]) +AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + *) + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while (test "X"`$CONFIG_SHELL [$]0 --fallback-echo "X$teststring" 2>/dev/null` \ + = "XX$teststring") >/dev/null 2>&1 && + new_result=`expr "X$teststring" : ".*" 2>&1` && + lt_cv_sys_max_cmd_len=$new_result && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + teststring= + # Add a significant safety factor because C++ compilers can tack on massive + # amounts of additional arguments before passing them to the linker. + # It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + ;; + esac +]) +if test -n $lt_cv_sys_max_cmd_len ; then + AC_MSG_RESULT($lt_cv_sys_max_cmd_len) +else + AC_MSG_RESULT(none) +fi +])# AC_LIBTOOL_SYS_MAX_CMD_LEN + + +# _LT_AC_CHECK_DLFCN +# -------------------- +AC_DEFUN([_LT_AC_CHECK_DLFCN], +[AC_CHECK_HEADERS(dlfcn.h)dnl +])# _LT_AC_CHECK_DLFCN + + +# _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, +# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) +# ------------------------------------------------------------------ +AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF], +[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl +if test "$cross_compiling" = yes; then : + [$4] +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext < +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +#ifdef __cplusplus +extern "C" void exit (int); +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + + exit (status); +}] +EOF + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) $1 ;; + x$lt_dlneed_uscore) $2 ;; + x$lt_unknown|x*) $3 ;; + esac + else : + # compilation failed + $3 + fi +fi +rm -fr conftest* +])# _LT_AC_TRY_DLOPEN_SELF + + +# AC_LIBTOOL_DLOPEN_SELF +# ------------------- +AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], +[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ]) + ;; + + *) + AC_CHECK_FUNC([shl_load], + [lt_cv_dlopen="shl_load"], + [AC_CHECK_LIB([dld], [shl_load], + [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"], + [AC_CHECK_FUNC([dlopen], + [lt_cv_dlopen="dlopen"], + [AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], + [AC_CHECK_LIB([svld], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], + [AC_CHECK_LIB([dld], [dld_link], + [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"]) + ]) + ]) + ]) + ]) + ]) + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + AC_CACHE_CHECK([whether a program can dlopen itself], + lt_cv_dlopen_self, [dnl + _LT_AC_TRY_DLOPEN_SELF( + lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, + lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) + ]) + + if test "x$lt_cv_dlopen_self" = xyes; then + LDFLAGS="$LDFLAGS $link_static_flag" + AC_CACHE_CHECK([whether a statically linked program can dlopen itself], + lt_cv_dlopen_self_static, [dnl + _LT_AC_TRY_DLOPEN_SELF( + lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, + lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) + ]) + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi +])# AC_LIBTOOL_DLOPEN_SELF + + +# AC_LIBTOOL_PROG_CC_C_O([TAGNAME]) +# --------------------------------- +# Check to see if options -c and -o are simultaneously supported by compiler +AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O], +[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl +AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], + [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)], + [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no + $rm -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test ! -s out/conftest.err; then + _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + fi + fi + chmod u+w . + $rm conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files + $rm out/* && rmdir out + cd .. + rmdir conftest + $rm conftest* +]) +])# AC_LIBTOOL_PROG_CC_C_O + + +# AC_LIBTOOL_SYS_HARD_LINK_LOCKS([TAGNAME]) +# ----------------------------------------- +# Check to see if we can do hard links to lock some files if needed +AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], +[AC_REQUIRE([_LT_AC_LOCK])dnl + +hard_links="nottested" +if test "$_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + AC_MSG_CHECKING([if we can lock with hard links]) + hard_links=yes + $rm conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + AC_MSG_RESULT([$hard_links]) + if test "$hard_links" = no; then + AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) + need_locks=warn + fi +else + need_locks=no +fi +])# AC_LIBTOOL_SYS_HARD_LINK_LOCKS + + +# AC_LIBTOOL_OBJDIR +# ----------------- +AC_DEFUN([AC_LIBTOOL_OBJDIR], +[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], +[rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null]) +objdir=$lt_cv_objdir +])# AC_LIBTOOL_OBJDIR + + +# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([TAGNAME]) +# ---------------------------------------------- +# Check hardcoding attributes. +AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], +[AC_MSG_CHECKING([how to hardcode library paths into programs]) +_LT_AC_TAGVAR(hardcode_action, $1)= +if test -n "$_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)" || \ + test -n "$_LT_AC_TAGVAR(runpath_var $1)" || \ + test "X$_LT_AC_TAGVAR(hardcode_automatic, $1)"="Xyes" ; then + + # We can hardcode non-existant directories. + if test "$_LT_AC_TAGVAR(hardcode_direct, $1)" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)" != no && + test "$_LT_AC_TAGVAR(hardcode_minus_L, $1)" != no; then + # Linking always hardcodes the temporary library directory. + _LT_AC_TAGVAR(hardcode_action, $1)=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + _LT_AC_TAGVAR(hardcode_action, $1)=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + _LT_AC_TAGVAR(hardcode_action, $1)=unsupported +fi +AC_MSG_RESULT([$_LT_AC_TAGVAR(hardcode_action, $1)]) + +if test "$_LT_AC_TAGVAR(hardcode_action, $1)" = relink; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi +])# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH + + +# AC_LIBTOOL_SYS_LIB_STRIP +# ------------------------ +AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP], +[striplib= +old_striplib= +AC_MSG_CHECKING([whether stripping libraries is possible]) +if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + AC_MSG_RESULT([yes]) +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) +fi + ;; + *) + AC_MSG_RESULT([no]) + ;; + esac +fi +])# AC_LIBTOOL_SYS_LIB_STRIP + + +# AC_LIBTOOL_SYS_DYNAMIC_LINKER +# ----------------------------- +# PORTME Fill in your ld.so characteristics +AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER], +[AC_MSG_CHECKING([dynamic linker characteristics]) +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix4* | aix5*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[[01]] | aix4.[[01]].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi4*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $rm \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | [grep ';[c-zC-Z]:/' >/dev/null]; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)' + # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. + if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` + else + sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' + fi + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +kfreebsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='GNU ld.so' + ;; + +freebsd*) + objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + *) # from 3.2 on + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case "$host_cpu" in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`$SED -e 's/[:,\t]/ /g;s/=[^=]*$//;s/=[^= ]* / /g' /etc/ld.so.conf | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +knetbsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='GNU ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +nto-qnx*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +openbsd*) + version_type=sunos + need_lib_prefix=no + need_version=yes + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[[89]] | openbsd2.[[89]].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +sco3.2v5*) + version_type=osf + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + export_dynamic_flag_spec='${wl}-Blargedynsym' + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +AC_MSG_RESULT([$dynamic_linker]) +test "$dynamic_linker" = no && can_build_shared=no +])# AC_LIBTOOL_SYS_DYNAMIC_LINKER + + +# _LT_AC_TAGCONFIG +# ---------------- +AC_DEFUN([_LT_AC_TAGCONFIG], +[AC_ARG_WITH([tags], + [AC_HELP_STRING([--with-tags@<:@=TAGS@:>@], + [include additional configurations @<:@automatic@:>@])], + [tagnames="$withval"]) + +if test -f "$ltmain" && test -n "$tagnames"; then + if test ! -f "${ofile}"; then + AC_MSG_WARN([output file `$ofile' does not exist]) + fi + + if test -z "$LTCC"; then + eval "`$SHELL ${ofile} --config | grep '^LTCC='`" + if test -z "$LTCC"; then + AC_MSG_WARN([output file `$ofile' does not look like a libtool script]) + else + AC_MSG_WARN([using `LTCC=$LTCC', extracted from `$ofile']) + fi + fi + + # Extract list of available tagged configurations in $ofile. + # Note that this assumes the entire list is on one line. + available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'` + + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for tagname in $tagnames; do + IFS="$lt_save_ifs" + # Check whether tagname contains only valid characters + case `$echo "X$tagname" | $Xsed -e 's:[[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]]::g'` in + "") ;; + *) AC_MSG_ERROR([invalid tag name: $tagname]) + ;; + esac + + if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null + then + AC_MSG_ERROR([tag name \"$tagname\" already exists]) + fi + + # Update the list of available tags. + if test -n "$tagname"; then + echo appending configuration tag \"$tagname\" to $ofile + + case $tagname in + CXX) + if test -n "$CXX" && test "X$CXX" != "Xno"; then + AC_LIBTOOL_LANG_CXX_CONFIG + else + tagname="" + fi + ;; + + F77) + if test -n "$F77" && test "X$F77" != "Xno"; then + AC_LIBTOOL_LANG_F77_CONFIG + else + tagname="" + fi + ;; + + GCJ) + if test -n "$GCJ" && test "X$GCJ" != "Xno"; then + AC_LIBTOOL_LANG_GCJ_CONFIG + else + tagname="" + fi + ;; + + RC) + AC_LIBTOOL_LANG_RC_CONFIG + ;; + + *) + AC_MSG_ERROR([Unsupported tag name: $tagname]) + ;; + esac + + # Append the new tag name to the list of available tags. + if test -n "$tagname" ; then + available_tags="$available_tags $tagname" + fi + fi + done + IFS="$lt_save_ifs" + + # Now substitute the updated list of available tags. + if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then + mv "${ofile}T" "$ofile" + chmod +x "$ofile" + else + rm -f "${ofile}T" + AC_MSG_ERROR([unable to update list of available tagged configurations.]) + fi +fi +])# _LT_AC_TAGCONFIG + + +# AC_LIBTOOL_DLOPEN +# ----------------- +# enable checks for dlopen support +AC_DEFUN([AC_LIBTOOL_DLOPEN], + [AC_BEFORE([$0],[AC_LIBTOOL_SETUP]) +])# AC_LIBTOOL_DLOPEN + + +# AC_LIBTOOL_WIN32_DLL +# -------------------- +# declare package support for building win32 dll's +AC_DEFUN([AC_LIBTOOL_WIN32_DLL], +[AC_BEFORE([$0], [AC_LIBTOOL_SETUP]) +])# AC_LIBTOOL_WIN32_DLL + + +# AC_ENABLE_SHARED([DEFAULT]) +# --------------------------- +# implement the --enable-shared flag +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +AC_DEFUN([AC_ENABLE_SHARED], +[define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl +AC_ARG_ENABLE([shared], + [AC_HELP_STRING([--enable-shared@<:@=PKGS@:>@], + [build shared libraries @<:@default=]AC_ENABLE_SHARED_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_shared=]AC_ENABLE_SHARED_DEFAULT) +])# AC_ENABLE_SHARED + + +# AC_DISABLE_SHARED +# ----------------- +#- set the default shared flag to --disable-shared +AC_DEFUN([AC_DISABLE_SHARED], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +AC_ENABLE_SHARED(no) +])# AC_DISABLE_SHARED + + +# AC_ENABLE_STATIC([DEFAULT]) +# --------------------------- +# implement the --enable-static flag +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +AC_DEFUN([AC_ENABLE_STATIC], +[define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl +AC_ARG_ENABLE([static], + [AC_HELP_STRING([--enable-static@<:@=PKGS@:>@], + [build static libraries @<:@default=]AC_ENABLE_STATIC_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_static=]AC_ENABLE_STATIC_DEFAULT) +])# AC_ENABLE_STATIC + + +# AC_DISABLE_STATIC +# ----------------- +# set the default static flag to --disable-static +AC_DEFUN([AC_DISABLE_STATIC], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +AC_ENABLE_STATIC(no) +])# AC_DISABLE_STATIC + + +# AC_ENABLE_FAST_INSTALL([DEFAULT]) +# --------------------------------- +# implement the --enable-fast-install flag +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +AC_DEFUN([AC_ENABLE_FAST_INSTALL], +[define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl +AC_ARG_ENABLE([fast-install], + [AC_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], + [optimize for fast installation @<:@default=]AC_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_fast_install=]AC_ENABLE_FAST_INSTALL_DEFAULT) +])# AC_ENABLE_FAST_INSTALL + + +# AC_DISABLE_FAST_INSTALL +# ----------------------- +# set the default to --disable-fast-install +AC_DEFUN([AC_DISABLE_FAST_INSTALL], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +AC_ENABLE_FAST_INSTALL(no) +])# AC_DISABLE_FAST_INSTALL + + +# AC_LIBTOOL_PICMODE([MODE]) +# -------------------------- +# implement the --with-pic flag +# MODE is either `yes' or `no'. If omitted, it defaults to `both'. +AC_DEFUN([AC_LIBTOOL_PICMODE], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +pic_mode=ifelse($#,1,$1,default) +])# AC_LIBTOOL_PICMODE + + +# AC_PROG_EGREP +# ------------- +# This is predefined starting with Autoconf 2.54, so this conditional +# definition can be removed once we require Autoconf 2.54 or later. +m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP], +[AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep], + [if echo a | (grep -E '(a|b)') >/dev/null 2>&1 + then ac_cv_prog_egrep='grep -E' + else ac_cv_prog_egrep='egrep' + fi]) + EGREP=$ac_cv_prog_egrep + AC_SUBST([EGREP]) +])]) + + +# AC_PATH_TOOL_PREFIX +# ------------------- +# find a file program which can recognise shared library +AC_DEFUN([AC_PATH_TOOL_PREFIX], +[AC_REQUIRE([AC_PROG_EGREP])dnl +AC_MSG_CHECKING([for $1]) +AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, +[case $MAGIC_CMD in +[[\\/*] | ?:[\\/]*]) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR +dnl $ac_dummy forces splitting on constant user-supplied paths. +dnl POSIX.2 word splitting is done only on the output of word expansions, +dnl not every word. This closes a longstanding sh security hole. + ac_dummy="ifelse([$2], , $PATH, [$2])" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$1; then + lt_cv_path_MAGIC_CMD="$ac_dir/$1" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac]) +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + AC_MSG_RESULT($MAGIC_CMD) +else + AC_MSG_RESULT(no) +fi +])# AC_PATH_TOOL_PREFIX + + +# AC_PATH_MAGIC +# ------------- +# find a file program which can recognise a shared library +AC_DEFUN([AC_PATH_MAGIC], +[AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + AC_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) + else + MAGIC_CMD=: + fi +fi +])# AC_PATH_MAGIC + + +# AC_PROG_LD +# ---------- +# find the pathname to the GNU or non-GNU linker +AC_DEFUN([AC_PROG_LD], +[AC_ARG_WITH([gnu-ld], + [AC_HELP_STRING([--with-gnu-ld], + [assume the C compiler uses GNU ld @<:@default=no@:>@])], + [test "$withval" = no || with_gnu_ld=yes], + [with_gnu_ld=no]) +AC_REQUIRE([LT_AC_PROG_SED])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by $CC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]]* | ?:[[\\/]]*) + re_direlt='/[[^/]][[^/]]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` + while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(lt_cv_path_LD, +[if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[[3-9]]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case "$host_cpu" in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'] + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux*) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd* | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +nto-qnx*) + lt_cv_deplibs_check_method=unknown + ;; + +openbsd*) + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB shared object' + else + lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +sco3.2v5*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; +esac +]) +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown +])# AC_DEPLIBS_CHECK_METHOD + + +# AC_PROG_NM +# ---------- +# find the pathname to a BSD-compatible name lister +AC_DEFUN([AC_PROG_NM], +[AC_CACHE_CHECK([for BSD-compatible nm], lt_cv_path_NM, +[if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/${ac_tool_prefix}nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + esac + fi + done + IFS="$lt_save_ifs" + test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm +fi]) +NM="$lt_cv_path_NM" +])# AC_PROG_NM + + +# AC_CHECK_LIBM +# ------------- +# check for math library +AC_DEFUN([AC_CHECK_LIBM], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +LIBM= +case $host in +*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*) + # These system don't have libm, or don't need it + ;; +*-ncr-sysv4.3*) + AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") + AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") + ;; +*) + AC_CHECK_LIB(m, cos, LIBM="-lm") + ;; +esac +])# AC_CHECK_LIBM + + +# AC_LIBLTDL_CONVENIENCE([DIRECTORY]) +# ----------------------------------- +# sets LIBLTDL to the link flags for the libltdl convenience library and +# LTDLINCL to the include flags for the libltdl header and adds +# --enable-ltdl-convenience to the configure arguments. Note that LIBLTDL +# and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If +# DIRECTORY is not provided, it is assumed to be `libltdl'. LIBLTDL will +# be prefixed with '${top_builddir}/' and LTDLINCL will be prefixed with +# '${top_srcdir}/' (note the single quotes!). If your package is not +# flat and you're not using automake, define top_builddir and +# top_srcdir appropriately in the Makefiles. +AC_DEFUN([AC_LIBLTDL_CONVENIENCE], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl + case $enable_ltdl_convenience in + no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;; + "") enable_ltdl_convenience=yes + ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;; + esac + LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la + LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) + # For backwards non-gettext consistent compatibility... + INCLTDL="$LTDLINCL" +])# AC_LIBLTDL_CONVENIENCE + + +# AC_LIBLTDL_INSTALLABLE([DIRECTORY]) +# ----------------------------------- +# sets LIBLTDL to the link flags for the libltdl installable library and +# LTDLINCL to the include flags for the libltdl header and adds +# --enable-ltdl-install to the configure arguments. Note that LIBLTDL +# and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If +# DIRECTORY is not provided and an installed libltdl is not found, it is +# assumed to be `libltdl'. LIBLTDL will be prefixed with '${top_builddir}/' +# and LTDLINCL will be prefixed with '${top_srcdir}/' (note the single +# quotes!). If your package is not flat and you're not using automake, +# define top_builddir and top_srcdir appropriately in the Makefiles. +# In the future, this macro may have to be called after AC_PROG_LIBTOOL. +AC_DEFUN([AC_LIBLTDL_INSTALLABLE], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl + AC_CHECK_LIB(ltdl, lt_dlinit, + [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no], + [if test x"$enable_ltdl_install" = xno; then + AC_MSG_WARN([libltdl not installed, but installation disabled]) + else + enable_ltdl_install=yes + fi + ]) + if test x"$enable_ltdl_install" = x"yes"; then + ac_configure_args="$ac_configure_args --enable-ltdl-install" + LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la + LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) + else + ac_configure_args="$ac_configure_args --enable-ltdl-install=no" + LIBLTDL="-lltdl" + LTDLINCL= + fi + # For backwards non-gettext consistent compatibility... + INCLTDL="$LTDLINCL" +])# AC_LIBLTDL_INSTALLABLE + + +# AC_LIBTOOL_CXX +# -------------- +# enable support for C++ libraries +AC_DEFUN([AC_LIBTOOL_CXX], +[AC_REQUIRE([_LT_AC_LANG_CXX]) +])# AC_LIBTOOL_CXX + + +# _LT_AC_LANG_CXX +# --------------- +AC_DEFUN([_LT_AC_LANG_CXX], +[AC_REQUIRE([AC_PROG_CXX]) +AC_REQUIRE([AC_PROG_CXXCPP]) +_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}CXX]) +])# _LT_AC_LANG_CXX + + +# AC_LIBTOOL_F77 +# -------------- +# enable support for Fortran 77 libraries +AC_DEFUN([AC_LIBTOOL_F77], +[AC_REQUIRE([_LT_AC_LANG_F77]) +])# AC_LIBTOOL_F77 + + +# _LT_AC_LANG_F77 +# --------------- +AC_DEFUN([_LT_AC_LANG_F77], +[AC_REQUIRE([AC_PROG_F77]) +_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}F77]) +])# _LT_AC_LANG_F77 + + +# AC_LIBTOOL_GCJ +# -------------- +# enable support for GCJ libraries +AC_DEFUN([AC_LIBTOOL_GCJ], +[AC_REQUIRE([_LT_AC_LANG_GCJ]) +])# AC_LIBTOOL_GCJ + + +# _LT_AC_LANG_GCJ +# --------------- +AC_DEFUN([_LT_AC_LANG_GCJ], +[AC_PROVIDE_IFELSE([AC_PROG_GCJ],[], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],[], + [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],[], + [ifdef([AC_PROG_GCJ],[AC_REQUIRE([AC_PROG_GCJ])], + [ifdef([A][M_PROG_GCJ],[AC_REQUIRE([A][M_PROG_GCJ])], + [AC_REQUIRE([A][C_PROG_GCJ_OR_A][M_PROG_GCJ])])])])])]) +_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}GCJ]) +])# _LT_AC_LANG_GCJ + + +# AC_LIBTOOL_RC +# -------------- +# enable support for Windows resource files +AC_DEFUN([AC_LIBTOOL_RC], +[AC_REQUIRE([LT_AC_PROG_RC]) +_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}RC]) +])# AC_LIBTOOL_RC + + +# AC_LIBTOOL_LANG_C_CONFIG +# ------------------------ +# Ensure that the configuration vars for the C compiler are +# suitably defined. Those variables are subsequently used by +# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. +AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG], [_LT_AC_LANG_C_CONFIG]) +AC_DEFUN([_LT_AC_LANG_C_CONFIG], +[lt_save_CC="$CC" +AC_LANG_PUSH(C) + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +_LT_AC_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;\n" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}\n' + +_LT_AC_SYS_COMPILER + +# +# Check for any special shared library compilation flags. +# +_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)= +if test "$GCC" = no; then + case $host_os in + sco3.2v5*) + _LT_AC_TAGVAR(lt_prog_cc_shlib, $1)='-belf' + ;; + esac +fi +if test -n "$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)"; then + AC_MSG_WARN([`$CC' requires `$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to build shared libraries]) + if echo "$old_CC $old_CFLAGS " | grep "[[ ]]$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)[[ ]]" >/dev/null; then : + else + AC_MSG_WARN([add `$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to the CC or CFLAGS env variable and reconfigure]) + _LT_AC_TAGVAR(lt_cv_prog_cc_can_build_shared, $1)=no + fi +fi + + +# +# Check to make sure the static flag actually works. +# +AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $_LT_AC_TAGVAR(lt_prog_compiler_static, $1) works], + _LT_AC_TAGVAR(lt_prog_compiler_static_works, $1), + $_LT_AC_TAGVAR(lt_prog_compiler_static, $1), + [], + [_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=]) + + +AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1) +AC_LIBTOOL_PROG_COMPILER_PIC($1) +AC_LIBTOOL_PROG_CC_C_O($1) +AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) +AC_LIBTOOL_PROG_LD_SHLIBS($1) +AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) +AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) +AC_LIBTOOL_SYS_LIB_STRIP +AC_LIBTOOL_DLOPEN_SELF($1) + +# Report which librarie types wil actually be built +AC_MSG_CHECKING([if libtool supports shared libraries]) +AC_MSG_RESULT([$can_build_shared]) + +AC_MSG_CHECKING([whether to build shared libraries]) +test "$can_build_shared" = "no" && enable_shared=no + +# On AIX, shared libraries and static libraries use the same namespace, and +# are all built from PIC. +case "$host_os" in +aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + +aix4* | aix5*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + darwin* | rhapsody*) + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + case "$host_os" in + rhapsody* | darwin1.[[012]]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[[012]]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress' + ;; + 10.*) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined dynamic_lookup' + ;; + esac + fi + ;; + esac + output_verbose_link_cmd='echo' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring' + _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_automatic, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; +esac +AC_MSG_RESULT([$enable_shared]) + +AC_MSG_CHECKING([whether to build static libraries]) +# Make sure either enable_shared or enable_static is yes. +test "$enable_shared" = yes || enable_static=yes +AC_MSG_RESULT([$enable_static]) + +AC_LIBTOOL_CONFIG($1) + +AC_LANG_POP +CC="$lt_save_CC" +])# AC_LIBTOOL_LANG_C_CONFIG + + +# AC_LIBTOOL_LANG_CXX_CONFIG +# -------------------------- +# Ensure that the configuration vars for the C compiler are +# suitably defined. Those variables are subsequently used by +# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. +AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG], [_LT_AC_LANG_CXX_CONFIG(CXX)]) +AC_DEFUN([_LT_AC_LANG_CXX_CONFIG], +[AC_LANG_PUSH(C++) +AC_REQUIRE([AC_PROG_CXX]) +AC_REQUIRE([AC_PROG_CXXCPP]) + +_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_AC_TAGVAR(allow_undefined_flag, $1)= +_LT_AC_TAGVAR(always_export_symbols, $1)=no +_LT_AC_TAGVAR(archive_expsym_cmds, $1)= +_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_AC_TAGVAR(hardcode_direct, $1)=no +_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_AC_TAGVAR(hardcode_libdir_separator, $1)= +_LT_AC_TAGVAR(hardcode_minus_L, $1)=no +_LT_AC_TAGVAR(hardcode_automatic, $1)=no +_LT_AC_TAGVAR(module_cmds, $1)= +_LT_AC_TAGVAR(module_expsym_cmds, $1)= +_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown +_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_AC_TAGVAR(no_undefined_flag, $1)= +_LT_AC_TAGVAR(whole_archive_flag_spec, $1)= +_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Dependencies to place before and after the object being linked: +_LT_AC_TAGVAR(predep_objects, $1)= +_LT_AC_TAGVAR(postdep_objects, $1)= +_LT_AC_TAGVAR(predeps, $1)= +_LT_AC_TAGVAR(postdeps, $1)= +_LT_AC_TAGVAR(compiler_lib_search_path, $1)= + +# Source file extension for C++ test sources. +ac_ext=cc + +# Object file extension for compiled C++ test sources. +objext=o +_LT_AC_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;\n" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(int, char *[]) { return(0); }\n' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_AC_SYS_COMPILER + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_LD=$LD +lt_save_GCC=$GCC +GCC=$GXX +lt_save_with_gnu_ld=$with_gnu_ld +lt_save_path_LD=$lt_cv_path_LD +if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx +else + unset lt_cv_prog_gnu_ld +fi +if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX +else + unset lt_cv_path_LD +fi +test -z "${LDCXX+set}" || LD=$LDCXX +CC=${CXX-"c++"} +compiler=$CC +_LT_AC_TAGVAR(compiler, $1)=$CC +cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'` + +# We don't want -fno-exception wen compiling C++ code, so set the +# no_builtin_flag separately +if test "$GXX" = yes; then + _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' +else + _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= +fi + +if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + AC_PROG_LD + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='${wl}' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | \ + grep 'no-whole-archive' > /dev/null; then + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' + +else + GXX=no + with_gnu_ld=no + wlarc= +fi + +# PORTME: fill in a description of your system's C++ link characteristics +AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +_LT_AC_TAGVAR(ld_shlibs, $1)=yes +case $host_os in + aix3*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_AC_TAGVAR(archive_cmds, $1)='' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + + if test "$GXX" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + else + # We have old collect2 + _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= + fi + esac + shared_flag='-shared' + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_AC_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an empty executable. + _LT_AC_SYS_LIBPATH_AIX + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an empty executable. + _LT_AC_SYS_LIBPATH_AIX + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + # -bexpall does not export symbols beginning with underscore (_) + _LT_AC_TAGVAR(always_export_symbols, $1)=yes + # Exported symbols can be pulled into shared objects from archives + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' ' + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds it's shared libraries. + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_AC_TAGVAR(always_export_symbols, $1)=no + _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + darwin* | rhapsody*) + if test "$GXX" = yes; then + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + case "$host_os" in + rhapsody* | darwin1.[[012]]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[[012]]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress' + ;; + 10.*) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined dynamic_lookup' + ;; + esac + fi + ;; + esac + lt_int_apple_cc_single_mod=no + output_verbose_link_cmd='echo' + if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then + lt_int_apple_cc_single_mod=yes + fi + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + fi + _LT_AC_TAGVAR(module_cmds, $1)='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_automatic, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + dgux*) + case $cc_basename in + ec++) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + ghcx) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + freebsd[12]*) + # C++ shared libraries reported to be fairly broken before switch to ELF + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + freebsd-elf*) + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + ;; + freebsd* | kfreebsd*-gnu) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + _LT_AC_TAGVAR(ld_shlibs, $1)=yes + ;; + gnu*) + ;; + hpux9*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + aCC) + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "[-]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + case "$host_cpu" in + hppa*64*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + ia64*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + ;; + *) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + esac + fi + case "$host_cpu" in + hppa*64*) + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + ia64*) + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + *) + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + aCC) + case "$host_cpu" in + hppa*64*|ia64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case "$host_cpu" in + ia64*|hppa*64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + irix5* | irix6*) + case $cc_basename in + CC) + # SGI C++ + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib' + fi + fi + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + ;; + esac + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + linux*) + case $cc_basename in + KCC) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath,$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc) + # Intel C++ + with_gnu_ld=yes + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + cxx) + # Compaq C++ + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + esac + ;; + lynxos*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + m88k*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + mvs*) + case $cc_basename in + cxx) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + netbsd* | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + osf3*) + case $cc_basename in + KCC) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + + ;; + RCC) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + cxx) + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + osf4* | osf5*) + case $cc_basename in + KCC) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' + ;; + RCC) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + cxx) + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry $objdir/so_locations -o $lib~ + $rm $lib.exp' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + psos*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + sco*) + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + case $cc_basename in + CC) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + lcc) + # Lucid + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + solaris*) + case $cc_basename in + CC) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -nolib -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -nolib ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The C++ compiler is used as linker so we must use $wl + # flag to pass the commands to the underlying system + # linker. + # Supported since Solaris 2.6 (maybe 2.5.1?) + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + ;; + esac + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep "\-[[LR]]"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + gcx) + # Green Hills C++ Compiler + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' + if $CC --version | grep -v '^2\.7' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" + fi + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' + fi + ;; + esac + ;; + sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7*) + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + ;; + tandem*) + case $cc_basename in + NCC) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + vxworks*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; +esac +AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)]) +test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + +_LT_AC_TAGVAR(GCC, $1)="$GXX" +_LT_AC_TAGVAR(LD, $1)="$LD" + +AC_LIBTOOL_POSTDEP_PREDEP($1) +AC_LIBTOOL_PROG_COMPILER_PIC($1) +AC_LIBTOOL_PROG_CC_C_O($1) +AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) +AC_LIBTOOL_PROG_LD_SHLIBS($1) +AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) +AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) +AC_LIBTOOL_SYS_LIB_STRIP +AC_LIBTOOL_DLOPEN_SELF($1) + +AC_LIBTOOL_CONFIG($1) + +AC_LANG_POP +CC=$lt_save_CC +LDCXX=$LD +LD=$lt_save_LD +GCC=$lt_save_GCC +with_gnu_ldcxx=$with_gnu_ld +with_gnu_ld=$lt_save_with_gnu_ld +lt_cv_path_LDCXX=$lt_cv_path_LD +lt_cv_path_LD=$lt_save_path_LD +lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld +lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +])# AC_LIBTOOL_LANG_CXX_CONFIG + +# AC_LIBTOOL_POSTDEP_PREDEP([TAGNAME]) +# ------------------------ +# Figure out "hidden" library dependencies from verbose +# compiler output when linking a shared library. +# Parse the compiler output and extract the necessary +# objects, libraries and library flags. +AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP],[ +dnl we can't use the lt_simple_compile_test_code here, +dnl because it contains code intended for an executable, +dnl not a library. It's possible we should let each +dnl tag define a new lt_????_link_test_code variable, +dnl but it's only used here... +ifelse([$1],[],[cat > conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext <> "$cfgfile" +ifelse([$1], [], +[#! $SHELL + +# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 +# Free Software Foundation, Inc. +# +# This file is part of GNU Libtool: +# Originally by Gordon Matzigkeit , 1996 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="$SED -e s/^X//" + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi + +# The names of the tagged configurations supported by this script. +available_tags= + +# ### BEGIN LIBTOOL CONFIG], +[# ### BEGIN LIBTOOL TAG CONFIG: $tagname]) + +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$_LT_AC_TAGVAR(archive_cmds_need_lc, $1) + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=$_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A C compiler. +LTCC=$lt_LTCC + +# A language-specific compiler. +CC=$lt_[]_LT_AC_TAGVAR(compiler, $1) + +# Is the compiler the GNU C compiler? +with_gcc=$_LT_AC_TAGVAR(GCC, $1) + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_[]_LT_AC_TAGVAR(LD, $1) + +# Whether we need hard or soft links. +LN_S=$lt_LN_S + +# A BSD-compatible nm program. +NM=$lt_NM + +# A symbol stripping program +STRIP=$lt_STRIP + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=$MAGIC_CMD + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# How to pass a linker flag through the compiler. +wl=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Shared library suffix (normally ".so"). +shrext_cmds='$shrext_cmds' + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) +pic_mode=$pic_mode + +# What is the maximum length of a command? +max_cmd_len=$lt_cv_sys_max_cmd_len + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_[]_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) + +# Must we lock files when doing compilation ? +need_locks=$lt_need_locks + +# Do we need the lib prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_static, $1) + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_[]_LT_AC_TAGVAR(export_dynamic_flag_spec, $1) + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_[]_LT_AC_TAGVAR(whole_archive_flag_spec, $1) + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_[]_LT_AC_TAGVAR(thread_safe_flag_spec, $1) + +# Library versioning type. +version_type=$version_type + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Commands used to build and install an old-style archive. +RANLIB=$lt_RANLIB +old_archive_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_cmds, $1) +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_new_cmds, $1) + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) + +# Commands used to build and install a shared archive. +archive_cmds=$lt_[]_LT_AC_TAGVAR(archive_cmds, $1) +archive_expsym_cmds=$lt_[]_LT_AC_TAGVAR(archive_expsym_cmds, $1) +postinstall_cmds=$lt_postinstall_cmds +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to build a loadable module (assumed same as above if empty) +module_cmds=$lt_[]_LT_AC_TAGVAR(module_cmds, $1) +module_expsym_cmds=$lt_[]_LT_AC_TAGVAR(module_expsym_cmds, $1) + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# Dependencies to place before the objects being linked to create a +# shared library. +predep_objects=$lt_[]_LT_AC_TAGVAR(predep_objects, $1) + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_[]_LT_AC_TAGVAR(postdep_objects, $1) + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_[]_LT_AC_TAGVAR(predeps, $1) + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps=$lt_[]_LT_AC_TAGVAR(postdeps, $1) + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1) + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == file_magic. +file_magic_cmd=$lt_file_magic_cmd + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_[]_LT_AC_TAGVAR(allow_undefined_flag, $1) + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_[]_LT_AC_TAGVAR(no_undefined_flag, $1) + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$lt_finish_eval + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$_LT_AC_TAGVAR(hardcode_action, $1) + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) + +# If ld is used when linking, flag to hardcode \$libdir into +# a binary during linking. This must work even if \$libdir does +# not exist. +hardcode_libdir_flag_spec_ld=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_separator, $1) + +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$_LT_AC_TAGVAR(hardcode_direct, $1) + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$_LT_AC_TAGVAR(hardcode_minus_L, $1) + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1) + +# Set to yes if building a shared library automatically hardcodes DIR into the library +# and all subsequent libraries and executables linked against it. +hardcode_automatic=$_LT_AC_TAGVAR(hardcode_automatic, $1) + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="$variables_saved_for_relink" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$_LT_AC_TAGVAR(link_all_deplibs, $1) + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$_LT_AC_TAGVAR(fix_srcfile_path, $1)" + +# Set to yes if exported symbols are required. +always_export_symbols=$_LT_AC_TAGVAR(always_export_symbols, $1) + +# The commands to list exported symbols. +export_symbols_cmds=$lt_[]_LT_AC_TAGVAR(export_symbols_cmds, $1) + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_[]_LT_AC_TAGVAR(exclude_expsyms, $1) + +# Symbols that must always be exported. +include_expsyms=$lt_[]_LT_AC_TAGVAR(include_expsyms, $1) + +ifelse([$1],[], +[# ### END LIBTOOL CONFIG], +[# ### END LIBTOOL TAG CONFIG: $tagname]) + +__EOF__ + +ifelse([$1],[], [ + case $host_os in + aix3*) + cat <<\EOF >> "$cfgfile" + +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +EOF + ;; + esac + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || \ + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" +]) +else + # If there is no Makefile yet, we rely on a make rule to execute + # `config.status --recheck' to rerun these tests and create the + # libtool script then. + ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` + if test -f "$ltmain_in"; then + test -f Makefile && make "$ltmain" + fi +fi +])# AC_LIBTOOL_CONFIG + + +# AC_LIBTOOL_PROG_COMPILER_NO_RTTI([TAGNAME]) +# ------------------------------------------- +AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], +[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl + +_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + +if test "$GCC" = yes; then + _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + + AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], + lt_cv_prog_compiler_rtti_exceptions, + [-fno-rtti -fno-exceptions], [], + [_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) +fi +])# AC_LIBTOOL_PROG_COMPILER_NO_RTTI + + +# AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE +# --------------------------------- +AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], +[AC_REQUIRE([AC_CANONICAL_HOST]) +AC_REQUIRE([AC_PROG_NM]) +AC_REQUIRE([AC_OBJEXT]) +# Check for command to grab the raw symbol name followed by C symbol from nm. +AC_MSG_CHECKING([command to parse $NM output from $compiler object]) +AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], +[ +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[[BCDEGRST]]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' + +# Transform the above into a raw symbol and a C symbol. +symxfrm='\1 \2\3 \3' + +# Transform an extracted symbol line into a proper C declaration +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[[BCDT]]' + ;; +cygwin* | mingw* | pw32*) + symcode='[[ABCDGISTW]]' + ;; +hpux*) # Its linker distinguishes data from code symbols + if test "$host_cpu" = ia64; then + symcode='[[ABCDEGRST]]' + fi + lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + ;; +irix* | nonstopux*) + symcode='[[BCDEGRST]]' + ;; +osf*) + symcode='[[BCDEGQRST]]' + ;; +solaris* | sysv5*) + symcode='[[BDRT]]' + ;; +sysv4) + symcode='[[DFNSTU]]' + ;; +esac + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[[ABCDGIRSTW]]' ;; +esac + +# Try without a prefix undercore, then with it. +for ac_symprfx in "" "_"; do + + # Write the raw and C identifiers. + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext < $nlist) && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if grep ' nm_test_var$' "$nlist" >/dev/null; then + if grep ' nm_test_func$' "$nlist" >/dev/null; then + cat < conftest.$ac_ext +#ifdef __cplusplus +extern "C" { +#endif + +EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext' + + cat <> conftest.$ac_ext +#if defined (__STDC__) && __STDC__ +# define lt_ptr_t void * +#else +# define lt_ptr_t char * +# define const +#endif + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + lt_ptr_t address; +} +lt_preloaded_symbols[[]] = +{ +EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext + cat <<\EOF >> conftest.$ac_ext + {0, (lt_ptr_t) 0} +}; + +#ifdef __cplusplus +} +#endif +EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_save_LIBS="$LIBS" + lt_save_CFLAGS="$CFLAGS" + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS="$lt_save_LIBS" + CFLAGS="$lt_save_CFLAGS" + else + echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD + fi + else + echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD + cat conftest.$ac_ext >&5 + fi + rm -f conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done +]) +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + AC_MSG_RESULT(failed) +else + AC_MSG_RESULT(ok) +fi +]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE + + +# AC_LIBTOOL_PROG_COMPILER_PIC([TAGNAME]) +# --------------------------------------- +AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC], +[_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)= +_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= +_LT_AC_TAGVAR(lt_prog_compiler_static, $1)= + +AC_MSG_CHECKING([for $compiler option to produce PIC]) + ifelse([$1],[CXX],[ + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + amigaos*) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | os2* | pw32*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + sysv4*MP*) + if test -d /usr/nec; then + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case "$host_cpu" in + hppa*64*|ia64*) + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + case $host_os in + aix4* | aix5*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68) + # Green Hills C++ Compiler + # _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + dgux*) + case $cc_basename in + ec++) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + ghcx) + # Green Hills C++ Compiler + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | kfreebsd*-gnu) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" + if test "$host_cpu" != ia64; then + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + fi + ;; + aCC) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" + case "$host_cpu" in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux*) + case $cc_basename in + KCC) + # KAI C++ Compiler + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + icpc) + # Intel C++ + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + cxx) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd* | knetbsd*-gnu) + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + ;; + RCC) + # Rational C++ 2.4.1 + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + cxx) + # Digital/Compaq C++ + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + sco*) + case $cc_basename in + CC) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + *) + ;; + esac + ;; + solaris*) + case $cc_basename in + CC) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + gcx) + # Green Hills C++ Compiler + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC) + # Sun C++ 4.x + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + lcc) + # Lucid + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC) + # NonStop-UX NCC 3.20 + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + *) + ;; + esac + ;; + unixware*) + ;; + vxworks*) + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +], +[ + if test "$GCC" = yes; then + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + amigaos*) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + enable_shared=no + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + + hpux*) + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case "$host_cpu" in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case "$host_cpu" in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC (with -KPIC) is the default. + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + newsos6) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + linux*) + case $CC in + icc* | ecc*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + ccc*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All Alpha code is PIC. + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + esac + ;; + + osf3* | osf4* | osf5*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All OSF/1 code is PIC. + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + sco3.2v5*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kpic' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-dn' + ;; + + solaris*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sunos4*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + uts4*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *) + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +]) +AC_MSG_RESULT([$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)]) + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)"; then + AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) works], + _LT_AC_TAGVAR(lt_prog_compiler_pic_works, $1), + [$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])], [], + [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) in + "" | " "*) ;; + *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)" ;; + esac], + [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) +fi +case "$host_os" in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])" + ;; +esac +]) + + +# AC_LIBTOOL_PROG_LD_SHLIBS([TAGNAME]) +# ------------------------------------ +# See if the linker supports building shared libraries. +AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS], +[AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +ifelse([$1],[CXX],[ + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + case $host_os in + aix4* | aix5*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | grep 'GNU' > /dev/null; then + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' + else + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + _LT_AC_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" + ;; + cygwin* | mingw*) + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols' + ;; + linux*) + _LT_AC_TAGVAR(link_all_deplibs, $1)=no + ;; + *) + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac +],[ + runpath_var= + _LT_AC_TAGVAR(allow_undefined_flag, $1)= + _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no + _LT_AC_TAGVAR(archive_cmds, $1)= + _LT_AC_TAGVAR(archive_expsym_cmds, $1)= + _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)= + _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)= + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= + _LT_AC_TAGVAR(thread_safe_flag_spec, $1)= + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_minus_L, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown + _LT_AC_TAGVAR(hardcode_automatic, $1)=no + _LT_AC_TAGVAR(module_cmds, $1)= + _LT_AC_TAGVAR(module_expsym_cmds, $1)= + _LT_AC_TAGVAR(always_export_symbols, $1)=no + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + _LT_AC_TAGVAR(include_expsyms, $1)= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + _LT_AC_TAGVAR(exclude_expsyms, $1)="_GLOBAL_OFFSET_TABLE_" + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + _LT_AC_TAGVAR(ld_shlibs, $1)=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # See if GNU ld supports shared libraries. + case $host_os in + aix3* | aix4* | aix5*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + _LT_AC_TAGVAR(ld_shlibs, $1)=no + cat <&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +EOF + fi + ;; + + amigaos*) + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + + # Samuel A. Falvo II reports + # that the semantics of dynamic libraries on AmigaOS, at least up + # to version 4, is to share data among multiple programs linked + # with the same dynamic library. Since this doesn't match the + # behavior of shared libraries on other platforms, we can't use + # them. + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_AC_TAGVAR(always_export_symbols, $1)=no + _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + else + ld_shlibs=no + fi + ;; + + netbsd* | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris* | sysv5*) + if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then + _LT_AC_TAGVAR(ld_shlibs, $1)=no + cat <&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +EOF + elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + sunos4*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + linux*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_cmds, $1)="$tmp_archive_cmds" + supports_anon_versioning=no + case `$LD -v 2>/dev/null` in + *\ [01].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + if test $supports_anon_versioning = yes; then + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $output_objdir/$libname.ver~ +cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ +$echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + else + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="$tmp_archive_cmds" + fi + _LT_AC_TAGVAR(link_all_deplibs, $1)=no + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + + if test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = yes; then + runpath_var=LD_RUN_PATH + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= + fi + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_AC_TAGVAR(always_export_symbols, $1)=yes + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + if test "$GCC" = yes && test -z "$link_static_flag"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported + fi + ;; + + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | grep 'GNU' > /dev/null; then + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' + else + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_AC_TAGVAR(archive_cmds, $1)='' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + else + # We have old collect2 + _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= + fi + esac + shared_flag='-shared' + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_AC_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an empty executable. + _LT_AC_SYS_LIBPATH_AIX + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an empty executable. + _LT_AC_SYS_LIBPATH_AIX + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + # -bexpall does not export symbols beginning with underscore (_) + _LT_AC_TAGVAR(always_export_symbols, $1)=yes + # Exported symbols can be pulled into shared objects from archives + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' ' + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds it's shared libraries. + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + # see comment about different semantics on the GNU ld section + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + + bsdi4*) + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic + ;; + + cygwin* | mingw* | pw32*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='true' + # FIXME: Should let the user specify the lib program. + _LT_AC_TAGVAR(old_archive_cmds, $1)='lib /OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path='`cygpath -w "$srcfile"`' + _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + darwin* | rhapsody*) + if test "$GXX" = yes ; then + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + case "$host_os" in + rhapsody* | darwin1.[[012]]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[[012]]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress' + ;; + 10.*) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined dynamic_lookup' + ;; + esac + fi + ;; + esac + lt_int_apple_cc_single_mod=no + output_verbose_link_cmd='echo' + if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then + lt_int_apple_cc_single_mod=yes + fi + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + fi + _LT_AC_TAGVAR(module_cmds, $1)='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_automatic, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + dgux*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + freebsd1*) + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | kfreebsd*-gnu) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + hpux9*) + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + + hpux10* | hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case "$host_cpu" in + hppa*64*|ia64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case "$host_cpu" in + hppa*64*|ia64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + case "$host_cpu" in + hppa*64*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + ia64*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + ;; + *) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + ;; + + netbsd* | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + newsos6) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + openbsd*) + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + else + case $host_os in + openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + ;; + esac + fi + ;; + + os2*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_AC_TAGVAR(archive_cmds, $1)='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + else + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ + $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp' + + # Both c and cxx compiler support -rpath directly + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + fi + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + sco3.2v5*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ;; + + solaris*) + _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text' + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) # Supported since Solaris 2.6 (maybe 2.5.1?) + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; + esac + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4) + case $host_vendor in + sni) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' + _LT_AC_TAGVAR(hardcode_direct, $1)=no + ;; + motorola) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4.3*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + _LT_AC_TAGVAR(ld_shlibs, $1)=yes + fi + ;; + + sysv4.2uw2*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_minus_L, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + hardcode_runpath_var=yes + runpath_var=LD_RUN_PATH + ;; + + sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7*) + _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z ${wl}text' + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + runpath_var='LD_RUN_PATH' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv5*) + _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text' + # $CC -shared without GNU ld will not create a library from C++ + # object files and a static libstdc++, better avoid it by now + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + ;; + + uts4*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + fi +]) +AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)]) +test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +# +# Do we need to explicitly link libc? +# +case "x$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)" in +x|xyes) + # Assume -lc should be added + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $_LT_AC_TAGVAR(archive_cmds, $1) in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + AC_MSG_CHECKING([whether -lc should be explicitly linked in]) + $rm conftest* + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + if AC_TRY_EVAL(ac_compile) 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$_LT_AC_TAGVAR(allow_undefined_flag, $1) + _LT_AC_TAGVAR(allow_undefined_flag, $1)= + if AC_TRY_EVAL(_LT_AC_TAGVAR(archive_cmds, $1) 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) + then + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + else + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes + fi + _LT_AC_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $rm conftest* + AC_MSG_RESULT([$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)]) + ;; + esac + fi + ;; +esac +])# AC_LIBTOOL_PROG_LD_SHLIBS + + +# _LT_AC_FILE_LTDLL_C +# ------------------- +# Be careful that the start marker always follows a newline. +AC_DEFUN([_LT_AC_FILE_LTDLL_C], [ +# /* ltdll.c starts here */ +# #define WIN32_LEAN_AND_MEAN +# #include +# #undef WIN32_LEAN_AND_MEAN +# #include +# +# #ifndef __CYGWIN__ +# # ifdef __CYGWIN32__ +# # define __CYGWIN__ __CYGWIN32__ +# # endif +# #endif +# +# #ifdef __cplusplus +# extern "C" { +# #endif +# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved); +# #ifdef __cplusplus +# } +# #endif +# +# #ifdef __CYGWIN__ +# #include +# DECLARE_CYGWIN_DLL( DllMain ); +# #endif +# HINSTANCE __hDllInstance_base; +# +# BOOL APIENTRY +# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved) +# { +# __hDllInstance_base = hInst; +# return TRUE; +# } +# /* ltdll.c ends here */ +])# _LT_AC_FILE_LTDLL_C + + +# _LT_AC_TAGVAR(VARNAME, [TAGNAME]) +# --------------------------------- +AC_DEFUN([_LT_AC_TAGVAR], [ifelse([$2], [], [$1], [$1_$2])]) + + +# old names +AC_DEFUN([AM_PROG_LIBTOOL], [AC_PROG_LIBTOOL]) +AC_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) +AC_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) +AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) +AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) +AC_DEFUN([AM_PROG_LD], [AC_PROG_LD]) +AC_DEFUN([AM_PROG_NM], [AC_PROG_NM]) + +# This is just to silence aclocal about the macro not being used +ifelse([AC_DISABLE_FAST_INSTALL]) + +AC_DEFUN([LT_AC_PROG_GCJ], +[AC_CHECK_TOOL(GCJ, gcj, no) + test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" + AC_SUBST(GCJFLAGS) +]) + +AC_DEFUN([LT_AC_PROG_RC], +[AC_CHECK_TOOL(RC, windres, no) +]) + +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_SED. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # +# LT_AC_PROG_SED +# -------------- +# Check for a fully-functional sed program, that truncates +# as few characters as possible. Prefer GNU sed if found. +AC_DEFUN([LT_AC_PROG_SED], +[AC_MSG_CHECKING([for a sed that does not truncate output]) +AC_CACHE_VAL(lt_cv_path_SED, +[# Loop through the user's path and test for sed and gsed. +# Then use that list of sed's as ones to test for truncation. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for lt_ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then + lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" + fi + done + done +done +lt_ac_max=0 +lt_ac_count=0 +# Add /usr/xpg4/bin/sed as it is typically found on Solaris +# along with /bin/sed that truncates output. +for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do + test ! -f $lt_ac_sed && break + cat /dev/null > conftest.in + lt_ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >conftest.in + # Check for GNU sed and select it if it is found. + if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then + lt_cv_path_SED=$lt_ac_sed + break + fi + while true; do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo >>conftest.nl + $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break + cmp -s conftest.out conftest.nl || break + # 10000 chars as input seems more than enough + test $lt_ac_count -gt 10 && break + lt_ac_count=`expr $lt_ac_count + 1` + if test $lt_ac_count -gt $lt_ac_max; then + lt_ac_max=$lt_ac_count + lt_cv_path_SED=$lt_ac_sed + fi + done +done +SED=$lt_cv_path_SED +]) +AC_MSG_RESULT([$SED]) +]) + +# isc-posix.m4 serial 2 (gettext-0.11.2) +dnl Copyright (C) 1995-2002 Free Software Foundation, Inc. +dnl This file is free software, distributed under the terms of the GNU +dnl General Public License. As a special exception to the GNU General +dnl Public License, this file may be distributed as part of a program +dnl that contains a configuration script generated by Autoconf, under +dnl the same distribution terms as the rest of that program. + +# This file is not needed with autoconf-2.53 and newer. Remove it in 2005. + +# This test replaces the one in autoconf. +# Currently this macro should have the same name as the autoconf macro +# because gettext's gettext.m4 (distributed in the automake package) +# still uses it. Otherwise, the use in gettext.m4 makes autoheader +# give these diagnostics: +# configure.in:556: AC_TRY_COMPILE was called before AC_ISC_POSIX +# configure.in:556: AC_TRY_RUN was called before AC_ISC_POSIX + +undefine([AC_ISC_POSIX]) + +AC_DEFUN([AC_ISC_POSIX], + [ + dnl This test replaces the obsolescent AC_ISC_POSIX kludge. + AC_CHECK_LIB(cposix, strerror, [LIBS="$LIBS -lcposix"]) + ] +) + + +# Copyright 1996, 1997, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# serial 2 + +# @defmac AC_PROG_CC_STDC +# @maindex PROG_CC_STDC +# @ovindex CC +# If the C compiler in not in ANSI C mode by default, try to add an option +# to output variable @code{CC} to make it so. This macro tries various +# options that select ANSI C on some system or another. It considers the +# compiler to be in ANSI C mode if it handles function prototypes correctly. +# +# If you use this macro, you should check after calling it whether the C +# compiler has been set to accept ANSI C; if not, the shell variable +# @code{am_cv_prog_cc_stdc} is set to @samp{no}. If you wrote your source +# code in ANSI C, you can make an un-ANSIfied copy of it by using the +# program @code{ansi2knr}, which comes with Ghostscript. +# @end defmac + +AC_DEFUN([AM_PROG_CC_STDC], +[AC_REQUIRE([AC_PROG_CC]) +AC_BEFORE([$0], [AC_C_INLINE]) +AC_BEFORE([$0], [AC_C_CONST]) +dnl Force this before AC_PROG_CPP. Some cpp's, eg on HPUX, require +dnl a magic option to avoid problems with ANSI preprocessor commands +dnl like #elif. +dnl FIXME: can't do this because then AC_AIX won't work due to a +dnl circular dependency. +dnl AC_BEFORE([$0], [AC_PROG_CPP]) +AC_MSG_CHECKING([for ${CC-cc} option to accept ANSI C]) +AC_CACHE_VAL(am_cv_prog_cc_stdc, +[am_cv_prog_cc_stdc=no +ac_save_CC="$CC" +# Don't try gcc -ansi; that turns off useful extensions and +# breaks some systems' header files. +# AIX -qlanglvl=ansi +# Ultrix and OSF/1 -std1 +# HP-UX 10.20 and later -Ae +# HP-UX older versions -Aa -D_HPUX_SOURCE +# SVR4 -Xc -D__EXTENSIONS__ +for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + AC_TRY_COMPILE( +[#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +], [ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; +], +[am_cv_prog_cc_stdc="$ac_arg"; break]) +done +CC="$ac_save_CC" +]) +if test -z "$am_cv_prog_cc_stdc"; then + AC_MSG_RESULT([none needed]) +else + AC_MSG_RESULT([$am_cv_prog_cc_stdc]) +fi +case "x$am_cv_prog_cc_stdc" in + x|xno) ;; + *) CC="$CC $am_cv_prog_cc_stdc" ;; +esac +]) + +AU_DEFUN([fp_PROG_CC_STDC], [AM_PROG_CC_STDC]) + +# Configure paths for GLIB +# Owen Taylor 1997-2001 + +dnl AM_PATH_GLIB_2_0([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, MODULES]]]]) +dnl Test for GLIB, and define GLIB_CFLAGS and GLIB_LIBS, if gmodule, gobject or +dnl gthread is specified in MODULES, pass to pkg-config +dnl +AC_DEFUN(AM_PATH_GLIB_2_0, +[dnl +dnl Get the cflags and libraries from pkg-config +dnl +AC_ARG_ENABLE(glibtest, [ --disable-glibtest do not try to compile and run a test GLIB program], + , enable_glibtest=yes) + + pkg_config_args=glib-2.0 + for module in . $4 + do + case "$module" in + gmodule) + pkg_config_args="$pkg_config_args gmodule-2.0" + ;; + gobject) + pkg_config_args="$pkg_config_args gobject-2.0" + ;; + gthread) + pkg_config_args="$pkg_config_args gthread-2.0" + ;; + esac + done + + AC_PATH_PROG(PKG_CONFIG, pkg-config, no) + + no_glib="" + + if test x$PKG_CONFIG != xno ; then + if $PKG_CONFIG --atleast-pkgconfig-version 0.7 ; then + : + else + echo *** pkg-config too old; version 0.7 or better required. + no_glib=yes + PKG_CONFIG=no + fi + else + no_glib=yes + fi + + min_glib_version=ifelse([$1], ,2.0.0,$1) + AC_MSG_CHECKING(for GLIB - version >= $min_glib_version) + + if test x$PKG_CONFIG != xno ; then + ## don't try to run the test against uninstalled libtool libs + if $PKG_CONFIG --uninstalled $pkg_config_args; then + echo "Will use uninstalled version of GLib found in PKG_CONFIG_PATH" + enable_glibtest=no + fi + + if $PKG_CONFIG --atleast-version $min_glib_version $pkg_config_args; then + : + else + no_glib=yes + fi + fi + + if test x"$no_glib" = x ; then + GLIB_GENMARSHAL=`$PKG_CONFIG --variable=glib_genmarshal glib-2.0` + GOBJECT_QUERY=`$PKG_CONFIG --variable=gobject_query glib-2.0` + GLIB_MKENUMS=`$PKG_CONFIG --variable=glib_mkenums glib-2.0` + + GLIB_CFLAGS=`$PKG_CONFIG --cflags $pkg_config_args` + GLIB_LIBS=`$PKG_CONFIG --libs $pkg_config_args` + glib_config_major_version=`$PKG_CONFIG --modversion glib-2.0 | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` + glib_config_minor_version=`$PKG_CONFIG --modversion glib-2.0 | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` + glib_config_micro_version=`$PKG_CONFIG --modversion glib-2.0 | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` + if test "x$enable_glibtest" = "xyes" ; then + ac_save_CFLAGS="$CFLAGS" + ac_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $GLIB_CFLAGS" + LIBS="$GLIB_LIBS $LIBS" +dnl +dnl Now check if the installed GLIB is sufficiently new. (Also sanity +dnl checks the results of pkg-config to some extent) +dnl + rm -f conf.glibtest + AC_TRY_RUN([ +#include +#include +#include + +int +main () +{ + int major, minor, micro; + char *tmp_version; + + system ("touch conf.glibtest"); + + /* HP/UX 9 (%@#!) writes to sscanf strings */ + tmp_version = g_strdup("$min_glib_version"); + if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { + printf("%s, bad version string\n", "$min_glib_version"); + exit(1); + } + + if ((glib_major_version != $glib_config_major_version) || + (glib_minor_version != $glib_config_minor_version) || + (glib_micro_version != $glib_config_micro_version)) + { + printf("\n*** 'pkg-config --modversion glib-2.0' returned %d.%d.%d, but GLIB (%d.%d.%d)\n", + $glib_config_major_version, $glib_config_minor_version, $glib_config_micro_version, + glib_major_version, glib_minor_version, glib_micro_version); + printf ("*** was found! If pkg-config was correct, then it is best\n"); + printf ("*** to remove the old version of GLib. You may also be able to fix the error\n"); + printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n"); + printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n"); + printf("*** required on your system.\n"); + printf("*** If pkg-config was wrong, set the environment variable PKG_CONFIG_PATH\n"); + printf("*** to point to the correct configuration files\n"); + } + else if ((glib_major_version != GLIB_MAJOR_VERSION) || + (glib_minor_version != GLIB_MINOR_VERSION) || + (glib_micro_version != GLIB_MICRO_VERSION)) + { + printf("*** GLIB header files (version %d.%d.%d) do not match\n", + GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION); + printf("*** library (version %d.%d.%d)\n", + glib_major_version, glib_minor_version, glib_micro_version); + } + else + { + if ((glib_major_version > major) || + ((glib_major_version == major) && (glib_minor_version > minor)) || + ((glib_major_version == major) && (glib_minor_version == minor) && (glib_micro_version >= micro))) + { + return 0; + } + else + { + printf("\n*** An old version of GLIB (%d.%d.%d) was found.\n", + glib_major_version, glib_minor_version, glib_micro_version); + printf("*** You need a version of GLIB newer than %d.%d.%d. The latest version of\n", + major, minor, micro); + printf("*** GLIB is always available from ftp://ftp.gtk.org.\n"); + printf("***\n"); + printf("*** If you have already installed a sufficiently new version, this error\n"); + printf("*** probably means that the wrong copy of the pkg-config shell script is\n"); + printf("*** being found. The easiest way to fix this is to remove the old version\n"); + printf("*** of GLIB, but you can also set the PKG_CONFIG environment to point to the\n"); + printf("*** correct copy of pkg-config. (In this case, you will have to\n"); + printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n"); + printf("*** so that the correct libraries are found at run-time))\n"); + } + } + return 1; +} +],, no_glib=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + if test "x$no_glib" = x ; then + AC_MSG_RESULT(yes (version $glib_config_major_version.$glib_config_minor_version.$glib_config_micro_version)) + ifelse([$2], , :, [$2]) + else + AC_MSG_RESULT(no) + if test "$PKG_CONFIG" = "no" ; then + echo "*** A new enough version of pkg-config was not found." + echo "*** See http://www.freedesktop.org/software/pkgconfig/" + else + if test -f conf.glibtest ; then + : + else + echo "*** Could not run GLIB test program, checking why..." + ac_save_CFLAGS="$CFLAGS" + ac_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $GLIB_CFLAGS" + LIBS="$LIBS $GLIB_LIBS" + AC_TRY_LINK([ +#include +#include +], [ return ((glib_major_version) || (glib_minor_version) || (glib_micro_version)); ], + [ echo "*** The test program compiled, but did not run. This usually means" + echo "*** that the run-time linker is not finding GLIB or finding the wrong" + echo "*** version of GLIB. If it is not finding GLIB, you'll need to set your" + echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" + echo "*** to the installed location Also, make sure you have run ldconfig if that" + echo "*** is required on your system" + echo "***" + echo "*** If you have an old version installed, it is best to remove it, although" + echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" ], + [ echo "*** The test program failed to compile or link. See the file config.log for the" + echo "*** exact error that occured. This usually means GLIB is incorrectly installed."]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + GLIB_CFLAGS="" + GLIB_LIBS="" + GLIB_GENMARSHAL="" + GOBJECT_QUERY="" + GLIB_MKENUMS="" + ifelse([$3], , :, [$3]) + fi + AC_SUBST(GLIB_CFLAGS) + AC_SUBST(GLIB_LIBS) + AC_SUBST(GLIB_GENMARSHAL) + AC_SUBST(GOBJECT_QUERY) + AC_SUBST(GLIB_MKENUMS) + rm -f conf.glibtest +]) + + +dnl PKG_CHECK_MODULES(GSTUFF, gtk+-2.0 >= 1.3 glib = 1.3.4, action-if, action-not) +dnl defines GSTUFF_LIBS, GSTUFF_CFLAGS, see pkg-config man page +dnl also defines GSTUFF_PKG_ERRORS on error +AC_DEFUN(PKG_CHECK_MODULES, [ + succeeded=no + + if test -z "$PKG_CONFIG"; then + AC_PATH_PROG(PKG_CONFIG, pkg-config, no) + fi + + if test "$PKG_CONFIG" = "no" ; then + echo "*** The pkg-config script could not be found. Make sure it is" + echo "*** in your path, or set the PKG_CONFIG environment variable" + echo "*** to the full path to pkg-config." + echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config." + else + PKG_CONFIG_MIN_VERSION=0.9.0 + if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then + AC_MSG_CHECKING(for $2) + + if $PKG_CONFIG --exists "$2" ; then + AC_MSG_RESULT(yes) + succeeded=yes + + AC_MSG_CHECKING($1_CFLAGS) + $1_CFLAGS=`$PKG_CONFIG --cflags "$2"` + AC_MSG_RESULT($$1_CFLAGS) + + AC_MSG_CHECKING($1_LIBS) + $1_LIBS=`$PKG_CONFIG --libs "$2"` + AC_MSG_RESULT($$1_LIBS) + else + $1_CFLAGS="" + $1_LIBS="" + ## If we have a custom action on failure, don't print errors, but + ## do set a variable so people can do so. + $1_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"` + ifelse([$4], ,echo $$1_PKG_ERRORS,) + fi + + AC_SUBST($1_CFLAGS) + AC_SUBST($1_LIBS) + else + echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer." + echo "*** See http://www.freedesktop.org/software/pkgconfig" + fi + fi + + if test $succeeded = yes; then + ifelse([$3], , :, [$3]) + else + ifelse([$4], , AC_MSG_ERROR([Library requirements ($2) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them.]), [$4]) + fi +]) + + + diff --git a/blib-1.1.7/autogen.sh b/blib-1.1.7/autogen.sh new file mode 100755 index 0000000..df06734 --- /dev/null +++ b/blib-1.1.7/autogen.sh @@ -0,0 +1,159 @@ +#!/bin/sh + +# This script does all the magic calls to automake/autoconf and +# friends that are needed to configure a cvs checkout. You need a +# couple of extra development tools to run this script successfully. +# +# If you are compiling from a released tarball you don't need these +# tools and you shouldn't use this script. Just call ./configure +# directly. + + +PROJECT="blib" +TEST_TYPE=-f +FILE=blib/blib.h + +LIBTOOL_REQUIRED_VERSION=1.3.4 +AUTOCONF_REQUIRED_VERSION=2.13 +AUTOMAKE_REQUIRED_VERSION=1.4 + + +srcdir=`dirname $0` +test -z "$srcdir" && srcdir=. +ORIGDIR=`pwd` +cd $srcdir + + +check_version () +{ + if expr $1 \>= $2 > /dev/null; then + echo "yes (version $1)" + else + echo "Too old (found version $1)!" + DIE=1 + fi +} + +echo +echo "I am testing that you have the required versions of libtool, autoconf," +echo "and automake." +echo + +DIE=0 + + +# check if libtool is called libtool or glibtool for Mac OS X compatibility + +if (libtoolize --version) < /dev/null > /dev/null 2>&1; then + LIBTOOLIZE=libtoolize +else + if (glibtoolize --version) < /dev/null > /dev/null 2>&1; then + LIBTOOLIZE=glibtoolize + fi +fi + +echo -n "checking for libtool >= $LIBTOOL_REQUIRED_VERSION ... " +if ($LIBTOOLIZE --version) < /dev/null > /dev/null 2>&1; then + VER=`$LIBTOOLIZE --version \ + | grep libtool | sed "s/.* \([0-9.]*\)[-a-z0-9]*$/\1/"` + check_version $VER $LIBTOOL_REQUIRED_VERSION +else + echo + echo " You must have libtool installed to compile $PROJECT." + echo " Install the appropriate package for your distribution," + echo " or get the source tarball at ftp://ftp.gnu.org/pub/gnu/" + DIE=1; +fi + +echo -n "checking for autoconf >= $AUTOCONF_REQUIRED_VERSION ... " +if (autoconf --version) < /dev/null > /dev/null 2>&1; then + VER=`autoconf --version \ + | grep -iw autoconf | sed "s/.* \([0-9.]*\)[-a-z0-9]*$/\1/"` + check_version $VER $AUTOCONF_REQUIRED_VERSION +else + echo + echo " You must have autoconf installed to compile $PROJECT." + echo " Download the appropriate package for your distribution," + echo " or get the source tarball at ftp://ftp.gnu.org/pub/gnu/" + DIE=1; +fi + +echo -n "checking for automake >= $AUTOMAKE_REQUIRED_VERSION ... " +if (automake --version) < /dev/null > /dev/null 2>&1; then + VER=`automake --version \ + | grep automake | sed "s/.* \([0-9.]*\)[-a-z0-9]*$/\1/"` + check_version $VER $AUTOMAKE_REQUIRED_VERSION +else + echo + echo " You must have automake installed to compile $PROJECT." + echo " Get ftp://ftp.cygnus.com/pub/home/tromey/automake-1.4p1.tar.gz" + echo " (or a newer version if it is available)" + DIE=1 +fi + +if test "$DIE" -eq 1; then + echo + echo "Please install/upgrade the missing tools and call me again." + echo + exit 1 +fi + + +test $TEST_TYPE $FILE || { + echo + echo "You must run this script in the top-level $PROJECT directory." + echo + exit 1 +} + + +if test -z "$*"; then + echo + echo "I am going to run ./configure with no arguments - if you wish " + echo "to pass any to it, please specify them on the $0 command line." + echo +fi + + +case $CC in + *xlc | *xlc\ * | *lcc | *lcc\ *) + am_opt=--include-deps + ;; +esac + +if test -z "$ACLOCAL_FLAGS"; then + + acdir=`aclocal --print-ac-dir` + m4list="glib-2.0.m4" + + for file in $m4list + do + if [ ! -f "$acdir/$file" ]; then + echo + echo "WARNING: aclocal's directory is $acdir, but..." + echo " no file $acdir/$file" + echo " You may see fatal macro warnings below." + echo " If these files are installed in /some/dir, set the ACLOCAL_FLAGS " + echo " environment variable to \"-I /some/dir\", or install" + echo " $acdir/$file." + echo + fi + done +fi + +aclocal $ACLOCAL_FLAGS + +# optionally feature autoheader +(autoheader --version) < /dev/null > /dev/null 2>&1 && autoheader + +automake --add-missing $am_opt +autoconf + +$LIBTOOLIZE --copy --force + +cd $ORIGDIR + +$srcdir/configure --enable-maintainer-mode "$@" + +echo +echo "Now type 'make' to compile $PROJECT." diff --git a/blib-1.1.7/blib-aa.pc.in b/blib-1.1.7/blib-aa.pc.in new file mode 100644 index 0000000..1409e6b --- /dev/null +++ b/blib-1.1.7/blib-aa.pc.in @@ -0,0 +1,11 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: blib-aa +Description: Library to display the Blinkenlights using AA-lib +Version: @VERSION@ +Requires: blib = @VERSION@ +Libs: -L${libdir} -lb-aa @AA_LIBS@ +Cflags: -I@INCLUDEDIR@ diff --git a/blib-1.1.7/blib-directfb.pc.in b/blib-1.1.7/blib-directfb.pc.in new file mode 100644 index 0000000..0921735 --- /dev/null +++ b/blib-1.1.7/blib-directfb.pc.in @@ -0,0 +1,11 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: blib-directfb +Description: Library to display the Blinkenlights on DirectFB +Version: @VERSION@ +Requires: blib = @VERSION@, directfb >= 0.9.11 +Libs: -L${libdir} -lb-directfb +Cflags: -I@INCLUDEDIR@ diff --git a/blib-1.1.7/blib-gtk.pc.in b/blib-1.1.7/blib-gtk.pc.in new file mode 100644 index 0000000..691b1b2 --- /dev/null +++ b/blib-1.1.7/blib-gtk.pc.in @@ -0,0 +1,11 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: blib-gtk +Description: Library to display the Blinkenlights on GTK+ +Version: @VERSION@ +Requires: blib-pixbuf = @VERSION@, gtk+-2.0 >= 2.0.3 +Libs: -L${libdir} -lb-gtk +Cflags: -I@INCLUDEDIR@ diff --git a/blib-1.1.7/blib-pixbuf.pc.in b/blib-1.1.7/blib-pixbuf.pc.in new file mode 100644 index 0000000..21648fe --- /dev/null +++ b/blib-1.1.7/blib-pixbuf.pc.in @@ -0,0 +1,11 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: blib-pixbuf +Description: Library to render the Blinkenlights on a GdkPixbuf +Version: @VERSION@ +Requires: blib = @VERSION@, gdk-pixbuf-2.0 >= 2.0.0 +Libs: -L${libdir} -lb-pixbuf +Cflags: -I@INCLUDEDIR@ diff --git a/blib-1.1.7/blib.pc.in b/blib-1.1.7/blib.pc.in new file mode 100644 index 0000000..f509b49 --- /dev/null +++ b/blib-1.1.7/blib.pc.in @@ -0,0 +1,14 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ +datadir=@DATADIR@ +modulepath=@MODULEPATH@ +themepath=@THEMEPATH@ + +Name: blib +Description: Library of useful things to hack the Blinkenlights +Version: @VERSION@ +Requires: gobject-2.0 >= 2.0.1 +Libs: -L${libdir} -lb @WIN32_LIBS@ +Cflags: -I@INCLUDEDIR@ @WIN32_CFLAGS@ diff --git a/blib-1.1.7/blib/Makefile.am b/blib-1.1.7/blib/Makefile.am new file mode 100644 index 0000000..8bacfa2 --- /dev/null +++ b/blib-1.1.7/blib/Makefile.am @@ -0,0 +1,127 @@ +## Makefile.am for blib/blib +## Process this file with automake to produce Makefile.in + +AM_CPPFLAGS = \ + $(CFLAGS) \ + -DG_DISABLE_DEPRECATED \ + -DTHEMEPATH=\"$(THEMEPATH)\" \ + -DMODULEPATH=\"$(MODULEPATH)\" + +INCLUDES = \ + -I$(top_srcdir) \ + @GLIB_CFLAGS@ + +lib_LTLIBRARIES = libb.la + +libb_la_includedir = $(INCLUDEDIR)/blib + +libb_gif_public_headers = \ + gif-load.h \ + gif-save.h \ + gif-types.h + +libb_gif_sources = \ + gif-load.c \ + gif-save.c + +libb_la_include_HEADERS = \ + blib.h \ + btypes.h \ + beffects.h \ + bmovie.h \ + bmovie-blm.h \ + bmovie-bml.h \ + bmovie-gif.h \ + bmovie-effects.h \ + bobject.h \ + bparams.h \ + bpacket.h \ + bparser.h \ + btheme.h \ + bthemes.h \ + bproxyclient.h \ + bproxyserver.h \ + breceiver.h \ + bsender.h \ + bsocket.h \ + butils.h \ + bwriter.h \ + bprotocol.h \ + bmodule.h \ + bmodule-internal.h \ + bmodule-utils.h \ + bmoduleinfo.h \ + bmovieplayer.h \ + $(libb_gif_public_headers) + +libb_la_sources = \ + blib.c \ + beffects.c \ + bmodule.c \ + bmodule-utils.c \ + bmoduleinfo.c \ + bmovieplayer.c \ + bmovie.c \ + bmovie-blm.c \ + bmovie-bml.c \ + bmovie-bml-parser.c \ + bmovie-bml-parser.h \ + bmovie-gif.c \ + bmovie-gif-parser.c \ + bmovie-gif-parser.h \ + bmovie-effects.c \ + bobject.c \ + bpacket.c \ + bparams.c \ + bparser.c \ + bproxyclient.c \ + bproxyserver.c \ + breceiver.c \ + bsender.c \ + bsocket.c \ + btheme.c \ + bthemes.c \ + btheme-parser.c \ + btheme-parser.h \ + btypes.c \ + butils.c \ + bwriter.c \ + $(libb_gif_sources) + +libb_la_built_sources = \ + bmarshal.c \ + bmarshal.h + +libb_la_extra_sources = \ + bmarshal.list + +libb_la_SOURCES = $(libb_la_built_sources) $(libb_la_sources) + + +libb_la_LDFLAGS = \ + -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \ + -release $(LT_RELEASE) -export-dynamic + +libb_la_LIBADD = @GLIB_LIBS@ @WIN32_LIBS@ + + +EXTRA_DIST = $(libb_la_extra_sources) + + +# +# rules to generate built sources +# +# setup autogeneration dependencies +gen_sources = xgen-bmh xgen-bmc +CLEANFILES = $(gen_sources) + +$(srcdir)/bmarshal.h: $(srcdir)/bmarshal.list + $(GLIB_GENMARSHAL) --prefix=b_marshal $(srcdir)/bmarshal.list --header >> xgen-bmh \ + && (cmp -s xgen-bmh $(@F) || cp xgen-bmh $(@F)) \ + && rm -f xgen-bmh xgen-bmh~ + +$(srcdir)/bmarshal.c: $(srcdir)/bmarshal.h + echo "#include \"bmarshal.h\"" >> xgen-bmc \ + && $(GLIB_GENMARSHAL) --prefix=b_marshal $(srcdir)/bmarshal.list --body >> xgen-bmc \ + && cp xgen-bmc $(@F) \ + && rm -f xgen-bmc xgen-bmc~ diff --git a/blib-1.1.7/blib/Makefile.in b/blib-1.1.7/blib/Makefile.in new file mode 100644 index 0000000..e2e9fc9 --- /dev/null +++ b/blib-1.1.7/blib/Makefile.in @@ -0,0 +1,702 @@ +# Makefile.in generated by automake 1.7.9 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = .. + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +AA_LIBS = @AA_LIBS@ +AA_VIEW_TYPE = @AA_VIEW_TYPE@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BLIB_BINARY_AGE = @BLIB_BINARY_AGE@ +BLIB_INTERFACE_AGE = @BLIB_INTERFACE_AGE@ +BLIB_MAJOR_VERSION = @BLIB_MAJOR_VERSION@ +BLIB_MICRO_VERSION = @BLIB_MICRO_VERSION@ +BLIB_MINOR_VERSION = @BLIB_MINOR_VERSION@ +BLIB_VERSION = @BLIB_VERSION@ +BUILD_MODULES_FALSE = @BUILD_MODULES_FALSE@ +BUILD_MODULES_TRUE = @BUILD_MODULES_TRUE@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIR = @DATADIR@ +DB2HTML = @DB2HTML@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DIRECTFB_CFLAGS = @DIRECTFB_CFLAGS@ +DIRECTFB_LIBS = @DIRECTFB_LIBS@ +DIRECTFB_VIEW_TYPE = @DIRECTFB_VIEW_TYPE@ +ECHO = @ECHO@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ENABLE_GTK_DOC_FALSE = @ENABLE_GTK_DOC_FALSE@ +ENABLE_GTK_DOC_TRUE = @ENABLE_GTK_DOC_TRUE@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ +GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ +GLIB_LIBS = @GLIB_LIBS@ +GLIB_MKENUMS = @GLIB_MKENUMS@ +GOBJECT_QUERY = @GOBJECT_QUERY@ +GTKDOC = @GTKDOC@ +GTK_CFLAGS = @GTK_CFLAGS@ +GTK_LIBS = @GTK_LIBS@ +GTK_VIEW_TYPE = @GTK_VIEW_TYPE@ +HAVE_AA_FALSE = @HAVE_AA_FALSE@ +HAVE_AA_TRUE = @HAVE_AA_TRUE@ +HAVE_DIRECTFB_FALSE = @HAVE_DIRECTFB_FALSE@ +HAVE_DIRECTFB_TRUE = @HAVE_DIRECTFB_TRUE@ +HAVE_DOCBOOK_FALSE = @HAVE_DOCBOOK_FALSE@ +HAVE_DOCBOOK_TRUE = @HAVE_DOCBOOK_TRUE@ +HAVE_GTK_DOC = @HAVE_GTK_DOC@ +HAVE_GTK_DOC_FALSE = @HAVE_GTK_DOC_FALSE@ +HAVE_GTK_DOC_TRUE = @HAVE_GTK_DOC_TRUE@ +HAVE_GTK_FALSE = @HAVE_GTK_FALSE@ +HAVE_GTK_TRUE = @HAVE_GTK_TRUE@ +HAVE_PIXBUF_FALSE = @HAVE_PIXBUF_FALSE@ +HAVE_PIXBUF_TRUE = @HAVE_PIXBUF_TRUE@ +HTML_DIR = @HTML_DIR@ +INCLUDEDIR = @INCLUDEDIR@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_AGE = @LT_AGE@ +LT_CURRENT = @LT_CURRENT@ +LT_RELEASE = @LT_RELEASE@ +LT_REVISION = @LT_REVISION@ +MAINT = @MAINT@ +MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ +MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ +MAKEINFO = @MAKEINFO@ +MODULEPATH = @MODULEPATH@ +OBJEXT = @OBJEXT@ +OS_WIN32_FALSE = @OS_WIN32_FALSE@ +OS_WIN32_TRUE = @OS_WIN32_TRUE@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PIXBUF_VIEW_TYPE = @PIXBUF_VIEW_TYPE@ +PKG_CONFIG = @PKG_CONFIG@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +THEMEPATH = @THEMEPATH@ +VERSION = @VERSION@ +WIN32_CFLAGS = @WIN32_CFLAGS@ +WIN32_LIBS = @WIN32_LIBS@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_F77 = @ac_ct_F77@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +AM_CPPFLAGS = \ + $(CFLAGS) \ + -DG_DISABLE_DEPRECATED \ + -DTHEMEPATH=\"$(THEMEPATH)\" \ + -DMODULEPATH=\"$(MODULEPATH)\" + + +INCLUDES = \ + -I$(top_srcdir) \ + @GLIB_CFLAGS@ + + +lib_LTLIBRARIES = libb.la + +libb_la_includedir = $(INCLUDEDIR)/blib + +libb_gif_public_headers = \ + gif-load.h \ + gif-save.h \ + gif-types.h + + +libb_gif_sources = \ + gif-load.c \ + gif-save.c + + +libb_la_include_HEADERS = \ + blib.h \ + btypes.h \ + beffects.h \ + bmovie.h \ + bmovie-blm.h \ + bmovie-bml.h \ + bmovie-gif.h \ + bmovie-effects.h \ + bobject.h \ + bparams.h \ + bpacket.h \ + bparser.h \ + btheme.h \ + bthemes.h \ + bproxyclient.h \ + bproxyserver.h \ + breceiver.h \ + bsender.h \ + bsocket.h \ + butils.h \ + bwriter.h \ + bprotocol.h \ + bmodule.h \ + bmodule-internal.h \ + bmodule-utils.h \ + bmoduleinfo.h \ + bmovieplayer.h \ + $(libb_gif_public_headers) + + +libb_la_sources = \ + blib.c \ + beffects.c \ + bmodule.c \ + bmodule-utils.c \ + bmoduleinfo.c \ + bmovieplayer.c \ + bmovie.c \ + bmovie-blm.c \ + bmovie-bml.c \ + bmovie-bml-parser.c \ + bmovie-bml-parser.h \ + bmovie-gif.c \ + bmovie-gif-parser.c \ + bmovie-gif-parser.h \ + bmovie-effects.c \ + bobject.c \ + bpacket.c \ + bparams.c \ + bparser.c \ + bproxyclient.c \ + bproxyserver.c \ + breceiver.c \ + bsender.c \ + bsocket.c \ + btheme.c \ + bthemes.c \ + btheme-parser.c \ + btheme-parser.h \ + btypes.c \ + butils.c \ + bwriter.c \ + $(libb_gif_sources) + + +libb_la_built_sources = \ + bmarshal.c \ + bmarshal.h + + +libb_la_extra_sources = \ + bmarshal.list + + +libb_la_SOURCES = $(libb_la_built_sources) $(libb_la_sources) + +libb_la_LDFLAGS = \ + -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \ + -release $(LT_RELEASE) -export-dynamic + + +libb_la_LIBADD = @GLIB_LIBS@ @WIN32_LIBS@ + +EXTRA_DIST = $(libb_la_extra_sources) + +# +# rules to generate built sources +# +# setup autogeneration dependencies +gen_sources = xgen-bmh xgen-bmc +CLEANFILES = $(gen_sources) +subdir = blib +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +LTLIBRARIES = $(lib_LTLIBRARIES) + +libb_la_DEPENDENCIES = +am__objects_1 = bmarshal.lo +am__objects_2 = gif-load.lo gif-save.lo +am__objects_3 = blib.lo beffects.lo bmodule.lo bmodule-utils.lo \ + bmoduleinfo.lo bmovieplayer.lo bmovie.lo bmovie-blm.lo \ + bmovie-bml.lo bmovie-bml-parser.lo bmovie-gif.lo \ + bmovie-gif-parser.lo bmovie-effects.lo bobject.lo bpacket.lo \ + bparams.lo bparser.lo bproxyclient.lo bproxyserver.lo \ + breceiver.lo bsender.lo bsocket.lo btheme.lo bthemes.lo \ + btheme-parser.lo btypes.lo butils.lo bwriter.lo \ + $(am__objects_2) +am_libb_la_OBJECTS = $(am__objects_1) $(am__objects_3) +libb_la_OBJECTS = $(am_libb_la_OBJECTS) + +DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/beffects.Plo ./$(DEPDIR)/blib.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/bmarshal.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/bmodule-utils.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/bmodule.Plo ./$(DEPDIR)/bmoduleinfo.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/bmovie-blm.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/bmovie-bml-parser.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/bmovie-bml.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/bmovie-effects.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/bmovie-gif-parser.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/bmovie-gif.Plo ./$(DEPDIR)/bmovie.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/bmovieplayer.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/bobject.Plo ./$(DEPDIR)/bpacket.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/bparams.Plo ./$(DEPDIR)/bparser.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/bproxyclient.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/bproxyserver.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/breceiver.Plo ./$(DEPDIR)/bsender.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/bsocket.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/btheme-parser.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/btheme.Plo ./$(DEPDIR)/bthemes.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/btypes.Plo ./$(DEPDIR)/butils.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/bwriter.Plo ./$(DEPDIR)/gif-load.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/gif-save.Plo +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) \ + $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +DIST_SOURCES = $(libb_la_SOURCES) +HEADERS = $(libb_la_include_HEADERS) + +DIST_COMMON = $(libb_la_include_HEADERS) $(srcdir)/Makefile.in \ + Makefile.am +SOURCES = $(libb_la_SOURCES) + +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu blib/Makefile +Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) +libLTLIBRARIES_INSTALL = $(INSTALL) +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(libdir) + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + f="`echo $$p | sed -e 's|^.*/||'`"; \ + echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(libdir)/$$f"; \ + $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(libdir)/$$f; \ + else :; fi; \ + done + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + p="`echo $$p | sed -e 's|^.*/||'`"; \ + echo " $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/$$p"; \ + $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/$$p; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" = "$$p" && dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +libb.la: $(libb_la_OBJECTS) $(libb_la_DEPENDENCIES) + $(LINK) -rpath $(libdir) $(libb_la_LDFLAGS) $(libb_la_OBJECTS) $(libb_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) core *.core + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/beffects.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/blib.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bmarshal.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bmodule-utils.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bmodule.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bmoduleinfo.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bmovie-blm.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bmovie-bml-parser.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bmovie-bml.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bmovie-effects.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bmovie-gif-parser.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bmovie-gif.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bmovie.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bmovieplayer.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bobject.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bpacket.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bparams.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bparser.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bproxyclient.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bproxyserver.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/breceiver.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bsender.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bsocket.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/btheme-parser.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/btheme.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bthemes.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/btypes.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/butils.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bwriter.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gif-load.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gif-save.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \ +@am__fastdepCC_TRUE@ -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \ +@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ +@am__fastdepCC_TRUE@ fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$< + +.c.obj: +@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \ +@am__fastdepCC_TRUE@ -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \ +@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ +@am__fastdepCC_TRUE@ fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi` + +.c.lo: +@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \ +@am__fastdepCC_TRUE@ -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; \ +@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ +@am__fastdepCC_TRUE@ fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool +uninstall-info-am: +libb_la_includeHEADERS_INSTALL = $(INSTALL_HEADER) +install-libb_la_includeHEADERS: $(libb_la_include_HEADERS) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(libb_la_includedir) + @list='$(libb_la_include_HEADERS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f="`echo $$p | sed -e 's|^.*/||'`"; \ + echo " $(libb_la_includeHEADERS_INSTALL) $$d$$p $(DESTDIR)$(libb_la_includedir)/$$f"; \ + $(libb_la_includeHEADERS_INSTALL) $$d$$p $(DESTDIR)$(libb_la_includedir)/$$f; \ + done + +uninstall-libb_la_includeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(libb_la_include_HEADERS)'; for p in $$list; do \ + f="`echo $$p | sed -e 's|^.*/||'`"; \ + echo " rm -f $(DESTDIR)$(libb_la_includedir)/$$f"; \ + rm -f $(DESTDIR)$(libb_la_includedir)/$$f; \ + done + +ETAGS = etags +ETAGSFLAGS = + +CTAGS = ctags +CTAGSFLAGS = + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)$$tags$$unique" \ + || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique + +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = .. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) $(HEADERS) + +installdirs: + $(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(libb_la_includedir) +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-libtool distclean-tags + +dvi: dvi-am + +dvi-am: + +info: info-am + +info-am: + +install-data-am: install-libb_la_includeHEADERS + +install-exec-am: install-libLTLIBRARIES + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am uninstall-libLTLIBRARIES \ + uninstall-libb_la_includeHEADERS + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libLTLIBRARIES clean-libtool ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am info info-am install \ + install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am \ + install-libLTLIBRARIES install-libb_la_includeHEADERS \ + install-man install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ + uninstall-am uninstall-info-am uninstall-libLTLIBRARIES \ + uninstall-libb_la_includeHEADERS + + +$(srcdir)/bmarshal.h: $(srcdir)/bmarshal.list + $(GLIB_GENMARSHAL) --prefix=b_marshal $(srcdir)/bmarshal.list --header >> xgen-bmh \ + && (cmp -s xgen-bmh $(@F) || cp xgen-bmh $(@F)) \ + && rm -f xgen-bmh xgen-bmh~ + +$(srcdir)/bmarshal.c: $(srcdir)/bmarshal.h + echo "#include \"bmarshal.h\"" >> xgen-bmc \ + && $(GLIB_GENMARSHAL) --prefix=b_marshal $(srcdir)/bmarshal.list --body >> xgen-bmc \ + && cp xgen-bmc $(@F) \ + && rm -f xgen-bmc xgen-bmc~ +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/blib-1.1.7/blib/beffects.c b/blib-1.1.7/blib/beffects.c new file mode 100644 index 0000000..2df18eb --- /dev/null +++ b/blib-1.1.7/blib/beffects.c @@ -0,0 +1,214 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2001-2002 The Blinkenlights Crew + * Sven Neumann + * Michael Natterer + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include +#include + +#include + +#include "btypes.h" +#include "beffects.h" + + +static void b_effects_init (BEffects *effects); + + +GType +b_effects_get_type (void) +{ + static GType effects_type = 0; + + if (!effects_type) + { + static const GTypeInfo effects_info = + { + sizeof (BEffectsClass), + (GBaseInitFunc) NULL, + (GBaseFinalizeFunc) NULL, + NULL, /* class_init */ + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (BEffects), + 0, /* n_preallocs */ + (GInstanceInitFunc) b_effects_init, + }; + + effects_type = g_type_register_static (G_TYPE_OBJECT, + "BEffects", &effects_info, 0); + } + + return effects_type; +} + +static void +b_effects_init (BEffects *effects) +{ + effects->invert = B_EFFECT_SCOPE_NONE; + effects->vflip = B_EFFECT_SCOPE_NONE; + effects->hflip = B_EFFECT_SCOPE_NONE; + effects->lmirror = B_EFFECT_SCOPE_NONE; + effects->rmirror = B_EFFECT_SCOPE_NONE; +} + +/** + * b_effects_new: + * + * Creates a new #BEffects object with default values. + * + * Return value: the newly allocate #BEffects object. + **/ +BEffects * +b_effects_new (void) +{ + return g_object_new (B_TYPE_EFFECTS, NULL); +} + +/** + * b_effects_apply: + * @effects: a #BEffects object + * @frame_data: data to apply the effects on + * @width: width of the @frame_data buffer + * @height: height of the @frame_data buffer + * @channels: number of channels in the @frame_data buffer + * @maxval: the maximum value for the @frame_data buffer + * + * This function applies the effects described in the @effects object + * to a single frame. + **/ +void +b_effects_apply (BEffects *effects, + guchar *frame_data, + gint width, + gint height, + gint channels, + gint maxval) +{ + BEffectScope scope; + gint start_x; + gint end_x; + gint rowstride; + + g_return_if_fail (B_IS_EFFECTS (effects)); + g_return_if_fail (frame_data != NULL); + g_return_if_fail (channels == 1); + + start_x = 0; + end_x = width; + rowstride = width; + + for (scope = B_EFFECT_SCOPE_ALL; scope >= B_EFFECT_SCOPE_LEFT; scope--) + { + if (scope == B_EFFECT_SCOPE_RIGHT) + { + width /= 2; + start_x = width; + } + else if (scope == B_EFFECT_SCOPE_LEFT) + { + start_x = 0; + end_x = width; + } + + if (effects->invert == scope) + { + gint x, y; + guchar *buf; + + buf = (guchar *) frame_data; + + for (y = 0; y < height; y++) + { + for (x = start_x; x < end_x; x++) + { + buf[x] = maxval - buf[x]; + } + + buf += rowstride; + } + } + + if (effects->vflip == scope) + { + gint y; + guchar temp[width]; + guchar *upper; + guchar *lower; + + for (y = 0; y < height / 2; y++) + { + upper = frame_data + rowstride * y; + lower = frame_data + rowstride * (height - y - 1); + + memcpy (temp, upper + start_x, width); + memcpy (upper + start_x, lower + start_x, width); + memcpy (lower + start_x, temp, width); + } + } + + if (effects->hflip == scope) + { + gint x, y; + guchar temp; + guchar *buf; + + buf = frame_data; + + for (y = 0; y < height; y++) + { + for (x = start_x; x < (start_x + width / 2); x++) + { + gint swap_x; + + swap_x = start_x + width - 1 - (x - start_x); + + temp = buf[x]; + buf[x] = buf[swap_x]; + buf[swap_x] = temp; + } + + buf += rowstride; + } + } + + if (effects->lmirror == scope || effects->rmirror == scope) + { + gint x, y; + guchar *buf; + + buf = frame_data; + + for (y = 0; y < height; y++) + { + for (x = start_x; x < (start_x + width / 2); x++) + { + if (effects->lmirror == scope) + buf[width - 1 - x] = buf[x]; + else if (effects->rmirror == scope) + buf[x] = buf[width - 1 - x]; + } + + buf += rowstride; + } + } + } +} diff --git a/blib-1.1.7/blib/beffects.h b/blib-1.1.7/blib/beffects.h new file mode 100644 index 0000000..ff4a7c6 --- /dev/null +++ b/blib-1.1.7/blib/beffects.h @@ -0,0 +1,70 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2001-2002 The Blinkenlights Crew + * Sven Neumann + * Michael Natterer + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __B_EFFECTS_H__ +#define __B_EFFECTS_H__ + +G_BEGIN_DECLS + +typedef enum +{ + B_EFFECT_SCOPE_NONE = 0, + B_EFFECT_SCOPE_LEFT = 1 << 0, + B_EFFECT_SCOPE_RIGHT = 1 << 1, + B_EFFECT_SCOPE_ALL = B_EFFECT_SCOPE_LEFT | B_EFFECT_SCOPE_RIGHT +} BEffectScope; + +#define B_TYPE_EFFECTS (b_effects_get_type ()) +#define B_EFFECTS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), B_TYPE_EFFECTS, BEffects)) +#define B_EFFECTS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), B_TYPE_EFFECTS, BEffectsClass)) +#define B_IS_EFFECTS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), B_TYPE_EFFECTS)) +#define B_IS_EFFECTS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), B_TYPE_EFFECTS)) + +typedef struct _BEffectsClass BEffectsClass; + +struct _BEffectsClass +{ + GObjectClass parent_class; +}; + +struct _BEffects +{ + GObject parent_instance; + + BEffectScope invert; + BEffectScope vflip; + BEffectScope hflip; + BEffectScope lmirror; + BEffectScope rmirror; +}; + +GType b_effects_get_type (void) G_GNUC_CONST; +BEffects * b_effects_new (void); +void b_effects_apply (BEffects *effects, + guchar *frame_data, + gint width, + gint height, + gint channels, + gint maxval); + +G_END_DECLS + +#endif /* __B_EFFECTS_H__ */ diff --git a/blib-1.1.7/blib/blib.c b/blib-1.1.7/blib/blib.c new file mode 100644 index 0000000..ac73a35 --- /dev/null +++ b/blib-1.1.7/blib/blib.c @@ -0,0 +1,134 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (C) 2002 The Blinkenlights Crew + * Sven Neumann + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include +#include + +#include + +#include "btypes.h" +#include "butils.h" + +static void b_register_transform_funcs (void); + +static gboolean initialized = FALSE; + + +/** + * b_init: + * + * This function initializes the BLib library. It calls g_type_init() + * for you, initializes the random number generator and registers some + * transform functions needed for the deserialization routines. + * + * It is safe to call this function multiple times but you should at + * least call it once before you use any other BLib functions. + **/ +void +b_init (void) +{ + if (initialized) + return; + + srand (time (NULL)); + + g_type_init (); + + b_register_transform_funcs (); + + initialized = TRUE; +} + +static void +b_value_transform_string_int (const GValue *src_value, + GValue *dest_value) +{ + const gchar *str = g_value_get_string (src_value); + gint i; + + if (b_parse_int (str, &i)) + g_value_set_int (dest_value, i); + else + g_warning ("can not convert '%s' to an integer value", str); +} + +static void +b_value_transform_string_double (const GValue *src_value, + GValue *dest_value) +{ + const gchar *str = g_value_get_string (src_value); + gdouble d; + + if (b_parse_double (str, &d)) + g_value_set_double (dest_value, d); + else + g_warning ("can not convert '%s' to a double value", str); +} + +static void +b_value_transform_string_boolean (const GValue *src_value, + GValue *dest_value) +{ + const gchar *str = g_value_get_string (src_value); + gboolean b; + + if (b_parse_boolean (str, &b)) + g_value_set_boolean (dest_value, b); + else + g_warning ("can not convert '%s' to a boolean value", str); +} + +static void +b_value_transform_string_enum (const GValue *src_value, + GValue *dest_value) +{ + GEnumClass *enum_class; + GEnumValue *enum_value; + + g_return_if_fail (G_VALUE_HOLDS_ENUM (dest_value)); + + enum_class = g_type_class_peek (G_VALUE_TYPE (dest_value)); + enum_value = g_enum_get_value_by_name (G_ENUM_CLASS (enum_class), + g_value_get_string (src_value)); + if (!enum_value) + enum_value = g_enum_get_value_by_nick (G_ENUM_CLASS (enum_class), + g_value_get_string (src_value)); + + if (enum_value) + g_value_set_enum (dest_value, enum_value->value); + else + g_warning ("can not convert '%s' to an enum value", + g_value_get_string (src_value)); +} + +static void +b_register_transform_funcs (void) +{ + g_value_register_transform_func (G_TYPE_STRING, G_TYPE_INT, + b_value_transform_string_int); + g_value_register_transform_func (G_TYPE_STRING, G_TYPE_DOUBLE, + b_value_transform_string_double); + g_value_register_transform_func (G_TYPE_STRING, G_TYPE_BOOLEAN, + b_value_transform_string_boolean); + g_value_register_transform_func (G_TYPE_STRING, G_TYPE_ENUM, + b_value_transform_string_enum); +} diff --git a/blib-1.1.7/blib/blib.h b/blib-1.1.7/blib/blib.h new file mode 100644 index 0000000..8f6a8aa --- /dev/null +++ b/blib-1.1.7/blib/blib.h @@ -0,0 +1,57 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (C) 2002-2003 The Blinkenlights Crew + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __BLIB_H__ +#define __BLIB_H__ + +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +void b_init (void); + +#endif /* __BLIB_H__ */ diff --git a/blib-1.1.7/blib/bmarshal.c b/blib-1.1.7/blib/bmarshal.c new file mode 100644 index 0000000..2ec0ed9 --- /dev/null +++ b/blib-1.1.7/blib/bmarshal.c @@ -0,0 +1,87 @@ +#include "bmarshal.h" + +#include + + +#ifdef G_ENABLE_DEBUG +#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v) +#define g_marshal_value_peek_char(v) g_value_get_char (v) +#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v) +#define g_marshal_value_peek_int(v) g_value_get_int (v) +#define g_marshal_value_peek_uint(v) g_value_get_uint (v) +#define g_marshal_value_peek_long(v) g_value_get_long (v) +#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v) +#define g_marshal_value_peek_int64(v) g_value_get_int64 (v) +#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v) +#define g_marshal_value_peek_enum(v) g_value_get_enum (v) +#define g_marshal_value_peek_flags(v) g_value_get_flags (v) +#define g_marshal_value_peek_float(v) g_value_get_float (v) +#define g_marshal_value_peek_double(v) g_value_get_double (v) +#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v) +#define g_marshal_value_peek_param(v) g_value_get_param (v) +#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v) +#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v) +#define g_marshal_value_peek_object(v) g_value_get_object (v) +#else /* !G_ENABLE_DEBUG */ +/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API. + * Do not access GValues directly in your code. Instead, use the + * g_value_get_*() functions + */ +#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int +#define g_marshal_value_peek_char(v) (v)->data[0].v_int +#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint +#define g_marshal_value_peek_int(v) (v)->data[0].v_int +#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint +#define g_marshal_value_peek_long(v) (v)->data[0].v_long +#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong +#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64 +#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64 +#define g_marshal_value_peek_enum(v) (v)->data[0].v_int +#define g_marshal_value_peek_flags(v) (v)->data[0].v_uint +#define g_marshal_value_peek_float(v) (v)->data[0].v_float +#define g_marshal_value_peek_double(v) (v)->data[0].v_double +#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer +#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer +#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer +#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer +#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer +#endif /* !G_ENABLE_DEBUG */ + + +/* VOID:STRING,INT (./bmarshal.list:3) */ +void +b_marshal_VOID__STRING_INT (GClosure *closure, + GValue *return_value, + guint n_param_values, + const GValue *param_values, + gpointer invocation_hint, + gpointer marshal_data) +{ + typedef void (*GMarshalFunc_VOID__STRING_INT) (gpointer data1, + gpointer arg_1, + gint arg_2, + gpointer data2); + register GMarshalFunc_VOID__STRING_INT callback; + register GCClosure *cc = (GCClosure*) closure; + register gpointer data1, data2; + + g_return_if_fail (n_param_values == 3); + + if (G_CCLOSURE_SWAP_DATA (closure)) + { + data1 = closure->data; + data2 = g_value_peek_pointer (param_values + 0); + } + else + { + data1 = g_value_peek_pointer (param_values + 0); + data2 = closure->data; + } + callback = (GMarshalFunc_VOID__STRING_INT) (marshal_data ? marshal_data : cc->callback); + + callback (data1, + g_marshal_value_peek_string (param_values + 1), + g_marshal_value_peek_int (param_values + 2), + data2); +} + diff --git a/blib-1.1.7/blib/bmarshal.h b/blib-1.1.7/blib/bmarshal.h new file mode 100644 index 0000000..30ff11e --- /dev/null +++ b/blib-1.1.7/blib/bmarshal.h @@ -0,0 +1,20 @@ + +#ifndef __b_marshal_MARSHAL_H__ +#define __b_marshal_MARSHAL_H__ + +#include + +G_BEGIN_DECLS + +/* VOID:STRING,INT (./bmarshal.list:3) */ +extern void b_marshal_VOID__STRING_INT (GClosure *closure, + GValue *return_value, + guint n_param_values, + const GValue *param_values, + gpointer invocation_hint, + gpointer marshal_data); + +G_END_DECLS + +#endif /* __b_marshal_MARSHAL_H__ */ + diff --git a/blib-1.1.7/blib/bmarshal.list b/blib-1.1.7/blib/bmarshal.list new file mode 100644 index 0000000..b86da6f --- /dev/null +++ b/blib-1.1.7/blib/bmarshal.list @@ -0,0 +1,3 @@ +# see glib-genmarshal(1) for a detailed description of the file format, + +VOID:STRING,INT diff --git a/blib-1.1.7/blib/bmodule-internal.h b/blib-1.1.7/blib/bmodule-internal.h new file mode 100644 index 0000000..2bf5866 --- /dev/null +++ b/blib-1.1.7/blib/bmodule-internal.h @@ -0,0 +1,52 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2001-2002 The Blinkenlights Crew + * Daniel Mack + * Sven Neumann + * Michael Natterer + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __B_MODULE_INTERNAL_H__ +#define __B_MODULE_INTERNAL_H__ + +G_BEGIN_DECLS + +BModule * b_module_new (GType module_type, + gint width, + gint height, + guchar *buffer, + BModulePaintCallback paint_callback, + gpointer paint_data, + GError **error); +void b_module_set_aspect (BModule *module, + gdouble aspect_ratio); +gboolean b_module_prepare (BModule *module, + GError **error); +void b_module_relax (BModule *module); +void b_module_start (BModule *module); +void b_module_stop (BModule *module); +void b_module_event (BModule *module, + BModuleEvent *event); +gint b_module_tick (BModule *module); +void b_module_describe (BModule *module, + gchar **title, + gchar **description, + gchar **author); + +G_END_DECLS + +#endif /* __B_MODULE_INTERNAL_H__ */ diff --git a/blib-1.1.7/blib/bmodule-utils.c b/blib-1.1.7/blib/bmodule-utils.c new file mode 100644 index 0000000..569aa0a --- /dev/null +++ b/blib-1.1.7/blib/bmodule-utils.c @@ -0,0 +1,266 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2001-2002 The Blinkenlights Crew + * Sven Neumann + * + * Clipping functions and bresenham implementation based on code taken + * from DirectFB (http://www.directfb.org/). + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include +#include +#include + +#include "btypes.h" +#include "bmodule.h" +#include "bmodule-utils.h" + +typedef struct _BRegion BRegion; + +struct _BRegion +{ + gint x1; + gint y1; + gint x2; + gint y2; +}; + +#define SIGN(x) ((x<0) ? -1 : ((x>0) ? 1 : 0)) + + +static gboolean +clip_line (const BRegion *clip, + BRegion *line) +{ +#define REGION_CODE(x,y,cx1,cx2,cy1,cy2) ( ( (y) > (cy2) ? 8 : 0) | \ + ( (y) < (cy1) ? 4 : 0) | \ + ( (x) > (cx2) ? 2 : 0) | \ + ( (x) < (cx1) ? 1 : 0) ) + + guchar region_code1 = REGION_CODE (line->x1, line->y1, + clip->x1, clip->x2, clip->y1, clip->y2); + guchar region_code2 = REGION_CODE (line->x2, line->y2, + clip->x1, clip->x2, clip->y1, clip->y2); + + while (region_code1 | region_code2) + { + if (region_code1 & region_code2) + return FALSE; /* line completely outside the clipping rectangle */ + + if (region_code1) + { + if (region_code1 & 8) + { /* divide line at bottom*/ + line->x1 = (line->x1 + (line->x2-line->x1) * + (clip->y2 - line->y1) / (line->y2-line->y1)); + line->y1 = clip->y2; + } + else if (region_code1 & 4) + { /* divide line at top*/ + line->x1 = (line->x1 + (line->x2-line->x1) * + (clip->y1 - line->y1) / (line->y2-line->y1)); + line->y1 = clip->y1; + } + else if (region_code1 & 2) + { /* divide line at right*/ + line->y1 = (line->y1 +(line->y2-line->y1) * + (clip->x2 - line->x1) / (line->x2-line->x1)); + line->x1 = clip->x2; + } + else if (region_code1 & 1) + { /* divide line at right*/ + line->y1 = (line->y1 +(line->y2-line->y1) * + (clip->x1 - line->x1) / (line->x2-line->x1)); + line->x1 = clip->x1; + } + + region_code1 = REGION_CODE (line->x1, line->y1, + clip->x1, clip->x2, clip->y1, clip->y2); + } + else + { + if (region_code2 & 8) + { /* divide line at bottom*/ + line->x2 = (line->x1 + (line->x2-line->x1) * + (clip->y2 - line->y1) / (line->y2-line->y1)); + line->y2 = clip->y2; + } + else if (region_code2 & 4) + { /* divide line at top*/ + line->x2 = (line->x1 +(line->x2-line->x1) * + (clip->y1 - line->y1) / (line->y2-line->y1)); + line->y2 = clip->y1; + } + else if (region_code2 & 2) + { /* divide line at right*/ + line->y2 = (line->y1 +(line->y2-line->y1) * + (clip->x2 - line->x1) / (line->x2-line->x1)); + line->x2 = clip->x2; + } + else if (region_code2 & 1) + { /* divide line at right*/ + line->y2 = (line->y1 +(line->y2-line->y1) * + (clip->x1 - line->x1) / (line->x2-line->x1)); + line->x2 = clip->x1; + } + + region_code2 = REGION_CODE (line->x2, line->y2, + clip->x1, clip->x2, clip->y1, clip->y2); + } + } + + return TRUE; +} + +/** + * b_module_draw_point: + * @module: a #BModule object + * @x: x coordinate + * @y: y coordinate + * @value: the color to draw with + * + * Draws a point to the @module's frame buffer. It is safe to specify + * coordinates outside the buffer. + **/ +void +b_module_draw_point (BModule *module, + gint x, + gint y, + guchar value) +{ + g_return_if_fail (B_IS_MODULE (module)); + + if (x < 0 || x >= module->width) + return; + if (y < 0 || y >= module->height) + return; + + module->buffer[module->width * y + x] = value; +} + +/** + * b_module_draw_line: + * @module: a #BModule object + * @x1: x coordinate of the start point + * @y1: y coordinate of the start point + * @x2: x coordinate of the end point + * @y2: y coordinate of the end point + * @value: the color to draw with + * + * Draws a one-pixel wide line between two points to the module's + * frame buffer. The endpoints are included in the line. If the line + * exceeds the buffer, it is properly clipped. + **/ +void +b_module_draw_line (BModule *module, + gint x1, + gint y1, + gint x2, + gint y2, + guchar value) +{ + BRegion clip; + BRegion line; + gint x, y, i; + gint dx, dy, sdy; + gint dxabs, dyabs; + guchar *d; + + g_return_if_fail (B_IS_MODULE (module)); + + clip.x1 = 0; + clip.y1 = 0; + clip.x2 = module->width - 1; + clip.y2 = module->height - 1; + + line.x1 = x1; + line.y1 = y1; + line.x2 = x2; + line.y2 = y2; + + if (!clip_line (&clip, &line)) + return; + + /* the horizontal distance of the line */ + dx = line.x2 - line.x1; + dxabs = abs (dx); + + /* the vertical distance of the line */ + dy = line.y2 - line.y1; + dyabs = abs (dy); + + sdy = dx ? SIGN(dy) * SIGN(dx) : SIGN(dy); + + d = module->buffer; + + if (dx >= 0) + d += line.y1 * module->width + line.x1; + else + d += line.y2 * module->width + line.x2; + + x = dyabs >> 1; + y = dxabs >> 1; + + if (dxabs >= dyabs) + { /* the line is more horizontal than vertical */ + for (i = 0; i <= dxabs; i++) + { + *d = value; + + d++; + y += dyabs; + if (y >= dxabs) + { + y -= dxabs; + d += sdy * module->width; + } + } + } + else /* the line is more vertical than horizontal */ + { + for (i = 0; i <= dyabs; i++) + { + *d = value; + d += sdy * module->width; + + x += dxabs; + if (x >= dyabs) + { + x -= dyabs; + d++; + } + } + } +} + +/** + * b_module_fill: + * @module: a #BModule object + * @value: the color to draw with + * + * Fills the module's framebuffer with @value. + **/ +void +b_module_fill (BModule *module, + guchar value) +{ + g_return_if_fail (B_IS_MODULE (module)); + + memset (module->buffer, value, module->width * module->height); +} diff --git a/blib-1.1.7/blib/bmodule-utils.h b/blib-1.1.7/blib/bmodule-utils.h new file mode 100644 index 0000000..24b3f92 --- /dev/null +++ b/blib-1.1.7/blib/bmodule-utils.h @@ -0,0 +1,44 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2001-2002 The Blinkenlights Crew + * Daniel Mack + * Sven Neumann + * Michael Natterer + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __B_MODULE_UTILS_H__ +#define __B_MODULE_UTILS_H__ + +G_BEGIN_DECLS + +void b_module_draw_point (BModule *module, + gint x, + gint y, + guchar value); +void b_module_draw_line (BModule *module, + gint x1, + gint y1, + gint x2, + gint y2, + guchar value); +void b_module_fill (BModule *module, + guchar value); + + +G_END_DECLS + +#endif /* __B_MODULE_H__ */ diff --git a/blib-1.1.7/blib/bmodule.c b/blib-1.1.7/blib/bmodule.c new file mode 100644 index 0000000..b506907 --- /dev/null +++ b/blib-1.1.7/blib/bmodule.c @@ -0,0 +1,674 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2001-2002 The Blinkenlights Crew + * Daniel Mack + * Sven Neumann + * Michael Natterer + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include + +#include "btypes.h" +#include "bmodule.h" +#include "bmodule-internal.h" + +enum +{ + START, + STOP, + LAST_SIGNAL +}; + +enum +{ + PROP_0, + PROP_SPEED, + PROP_LIFETIME +}; + +static void b_module_class_init (BModuleClass *klass); +static void b_module_init (BModule *module); +static void b_module_finalize (GObject *object); +static void b_module_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec); + +static gint tick (BModule *module); +static void describe (BModule *module, + const gchar **title, + const gchar **description, + const gchar **author); +static void stop_callback (BModule *module); + + +static guint module_signals[LAST_SIGNAL] = { 0 }; +static GObjectClass *parent_class = NULL; + + +GType +b_module_get_type (void) +{ + static GType module_type = 0; + + if (!module_type) + { + static const GTypeInfo module_info = + { + sizeof (BModuleClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc) b_module_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (BModule), + 0, /* n_preallocs */ + (GInstanceInitFunc) b_module_init, + }; + + module_type = g_type_register_static (G_TYPE_OBJECT, + "BModule", &module_info, 0); + } + + return module_type; +} + +static void +b_module_class_init (BModuleClass *klass) +{ + GObjectClass *object_class; + GParamSpec *param_spec; + + object_class = G_OBJECT_CLASS (klass); + + parent_class = g_type_class_peek_parent (klass); + + object_class->finalize = b_module_finalize; + object_class->set_property = b_module_set_property; + + module_signals[START] = g_signal_new ("start", + G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET (BModuleClass, start), + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); + module_signals[STOP] = g_signal_new ("stop", + G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET (BModuleClass, stop), + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); + + param_spec = g_param_spec_double ("speed", NULL, + "Allows to tune the playback speed.", + 0.01, 100.0, 1.0, + G_PARAM_CONSTRUCT | G_PARAM_WRITABLE); + g_object_class_install_property (object_class, PROP_SPEED, param_spec); + + param_spec = g_param_spec_int ("lifetime", NULL, + "Maximum time a module is allowed to run " + "(in milliseconds).", + 0, G_MAXINT, 0, + G_PARAM_CONSTRUCT | G_PARAM_WRITABLE); + g_object_class_install_property (object_class, PROP_LIFETIME, param_spec); + + klass->max_players = 0; + + klass->query = NULL; + klass->prepare = NULL; + klass->start = NULL; + klass->stop = NULL; + klass->event = NULL; + klass->tick = NULL; + klass->describe = describe; +} + +static void +b_module_init (BModule *module) +{ + module->aspect = 1.0; + + module->speed = 1.0; + module->lifetime = 0; + + module->num_players = 0; + + module->ready = FALSE; + module->running = FALSE; + module->tick_source_id = 0; + module->life_source_id = 0; + + g_signal_connect (G_OBJECT (module), "stop", + G_CALLBACK (stop_callback), + NULL); +} + +static void +b_module_finalize (GObject *object) +{ + BModule *module = B_MODULE (object); + + if (module->ready) + b_module_relax (module); + + if (module->tick_source_id) + { + g_source_remove (module->tick_source_id); + module->tick_source_id = 0; + } + if (module->life_source_id) + { + g_source_remove (module->life_source_id); + module->life_source_id = 0; + } + if (module->owns_buffer && module->buffer) + { + g_free (module->buffer); + module->buffer = NULL; + } + + G_OBJECT_CLASS (parent_class)->finalize (object); +} + +static void +b_module_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec) +{ + BModule *module = B_MODULE (object); + + switch (property_id) + { + case PROP_SPEED: + g_return_if_fail (g_value_get_double (value) > 0.0); + module->speed = g_value_get_double (value); + break; + + case PROP_LIFETIME: + module->lifetime = g_value_get_int (value); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static gboolean +tick (BModule *module) +{ + gint timeout; + + g_object_ref (module); + + timeout = (gdouble) b_module_tick (module) / module->speed; + + if (timeout > 0) + module->tick_source_id = g_timeout_add (timeout, + (GSourceFunc) tick, module); + else + module->tick_source_id = 0; + + g_object_unref (module); + + return FALSE; +} + +static gboolean +lifetime_expired (BModule *module) +{ + module->life_source_id = 0; + + b_module_stop (module); + + return FALSE; +} + +static void +describe (BModule *module, + const gchar **title, + const gchar **description, + const gchar **author) +{ + *title = g_type_name_from_instance ((GTypeInstance *) module); + *description = NULL; + *author = NULL; +} + +static void +stop_callback (BModule *module) +{ + /* this is a real signal callback, no virtual function implementation */ + + module->running = FALSE; +} + + +/***************************** + * internal module functions * + *****************************/ + +/** + * b_module_new: + * @module_type: the type of module to create + * @width: width of the frame buffer + * @height: height of the frame buffer + * @buffer: pointer to a preallocated buffer or %NULL + * @paint_callback: the function to call in b_module_paint() + * @paint_data: data to pass to the @paint_callback + * @error: location to store the error occuring, or %NULL to ignore errors + * + * This function tries to create the class for the @module_type and + * queries it with the given width and height. Only if the class can + * handle the requested size, a #BModule instance is created and + * initialized with the given values. + * + * Return value: the newly allocate #BModule object + **/ +BModule * +b_module_new (GType module_type, + gint width, + gint height, + guchar *buffer, + BModulePaintCallback paint_callback, + gpointer paint_data, + GError **error) +{ + BModuleClass *klass; + BModule *module = NULL; + + g_return_val_if_fail (module_type != B_TYPE_MODULE, NULL); + g_return_val_if_fail (g_type_is_a (module_type, B_TYPE_MODULE), NULL); + g_return_val_if_fail (width > 0, NULL); + g_return_val_if_fail (height > 0, NULL); + g_return_val_if_fail (paint_callback != NULL, NULL); + g_return_val_if_fail (error == NULL || *error == NULL, NULL); + + klass = g_type_class_ref (module_type); + + if (!B_IS_MODULE_CLASS (klass)) + { + g_set_error (error, 0, 0, + "Class '%s' is not a BModuleClass.", + g_type_name (module_type)); + } + else if (!klass->query || !klass->prepare) + { + g_set_error (error, 0, 0, + "Module '%s' does not implement the BModule vtable.", + g_type_name (module_type)); + } + else if (klass->query (width, height, 1, 255)) + { + module = (BModule *) g_object_new (module_type, NULL); + } + else + { + g_set_error (error, 0, 0, + "Module '%s' cannot handle the requested configuration.", + g_type_name (module_type)); + } + + g_type_class_unref (klass); + + if (!module) + return NULL; + + if (buffer) + { + module->owns_buffer = FALSE; + } + else + { + buffer = g_new0 (guchar, width * height); + module->owns_buffer = TRUE; + } + + module->width = width; + module->height = height; + module->channels = 1; + module->maxval = 255; + module->buffer = buffer; + module->paint_callback = paint_callback; + module->paint_data = paint_data; + + return module; +} + +/** + * b_module_set_aspect: + * @module: a #BModule object + * @aspect_ratio: the new pixel aspect ratio (x / y) + * + * Sets the pixel (or window) aspect ratio for the @module. Most + * modules ignore this value but some may adapt their output to take + * the shape of pixels into account. + **/ +void +b_module_set_aspect (BModule *module, + gdouble aspect_ratio) +{ + g_return_if_fail (B_IS_MODULE (module)); + g_return_if_fail (aspect_ratio >= 0.01 && aspect_ratio <= 100.0); + + module->aspect = aspect_ratio; +} + +/** + * b_module_prepare: + * @module: a #BModule object + * @error: location to store the error occuring, or %NULL to ignore errors + * + * This function first queries the module once more to check that it + * can handle the current settings. If the query succeeds, the prepare() + * method of the module is called. The module should then prepare + * itself and will be able to start as soon as b_module_start() is called. + * + * Return value: %TRUE is the module has successfully prepared itself, + * %FALSE otherwise + **/ +gboolean +b_module_prepare (BModule *module, + GError **error) +{ + g_return_val_if_fail (B_IS_MODULE (module), FALSE); + g_return_val_if_fail (error == NULL || *error == NULL, FALSE); + g_return_val_if_fail (module->ready == FALSE, FALSE); + + /* first query the module again with the current values */ + module->ready = B_MODULE_GET_CLASS (module)->query (module->width, + module->height, + module->channels, + module->maxval); + + if (!module->ready) + { + g_set_error (error, 0, 0, "Module can not handle this configuration."); + return FALSE; + } + + module->ready = B_MODULE_GET_CLASS (module)->prepare (module, error); + + if (!module->ready && error && *error == NULL) + g_set_error (error, 0, 0, "Module gave no reason."); + + return module->ready; +} + +/** + * b_module_relax: + * @module: a #BModule object + * + * Calls the relax() method of the @module causing it to release + * resources allocated in b_module_prepare(). + **/ +void +b_module_relax (BModule *module) +{ + g_return_if_fail (B_IS_MODULE (module)); + g_return_if_fail (module->ready == TRUE); + + if (B_MODULE_GET_CLASS (module)->relax) + B_MODULE_GET_CLASS (module)->relax (module); + + module->ready = FALSE; +} + +/** + * b_module_start: + * @module: a #BModule object + * + * Emits the start signal for @module. If @module has a lifetime set, + * a timer is installed that stops the module when the lifetime expires. + * + * You need to prepare @module by calling b_module_prepare() before it + * can be started. + **/ +void +b_module_start (BModule *module) +{ + g_return_if_fail (B_IS_MODULE (module)); + g_return_if_fail (module->ready == TRUE); + g_return_if_fail (module->running == FALSE); + + module->running = TRUE; + + g_signal_emit (G_OBJECT (module), module_signals[START], 0); + + if (module->lifetime > 0) + module->life_source_id = g_timeout_add (module->lifetime, + (GSourceFunc) lifetime_expired, + module); +} + +/** + * b_module_stop: + * @module: a #BModule object + * + * Emits the stop signal for @module. You may only call this function + * for a #BModule that is currently running. + **/ +void +b_module_stop (BModule *module) +{ + g_return_if_fail (B_IS_MODULE (module)); + g_return_if_fail (module->running == TRUE); + + if (module->life_source_id) + { + g_source_remove (module->life_source_id); + module->life_source_id = 0; + } + + b_module_ticker_stop (module); + + g_signal_emit (G_OBJECT (module), module_signals[STOP], 0); +} + +/** + * b_module_event: + * @module: a #BModule object + * @event: pointer to a #BModuleEvent + * + * Dispatches an event to @module by calling its event() method with + * @event. This function has no effect if the module is not currently + * running. + **/ +void +b_module_event (BModule *module, + BModuleEvent *event) +{ + g_return_if_fail (B_IS_MODULE (module)); + g_return_if_fail (event != NULL); + + if (!module->running) + return; + + if (B_MODULE_GET_CLASS (module)->event) + B_MODULE_GET_CLASS (module)->event (module, event); +} + +/** + * b_module_tick: + * @module: a #BModule object + * + * Calls the tick() method of @module. You may only call this function + * for a #BModule that is currently running. + * + * Return value: the number of milliseconds until tick() should be + * called again or -1 to indicate that no further ticks are requested + **/ +gint +b_module_tick (BModule *module) +{ + g_return_val_if_fail (B_IS_MODULE (module), -1); + g_return_val_if_fail (module->running == TRUE, -1); + + if (!B_MODULE_GET_CLASS (module)->tick) + return -1; + + return B_MODULE_GET_CLASS (module)->tick (module); +} + +/** + * b_module_describe: + * @module: a #BModule object + * @title: return location for the module title or %NULL + * @description: return location for the module description or %NULL + * @author: return location for the name of the module author or %NULL + * + * This function queries @module for a title, description and the name + * of the author. It does so by calling the modules describe() method. + * You may pass %NULL as return location if you are not interested in + * a particular information. The @title is guaranteed to be available, + * @description and @author may be %NULL if the module doesn't provide + * this information. + * + * You must free all returned strings using g_free() if you don't need + * them any longer. + **/ +void +b_module_describe (BModule *module, + gchar **title, + gchar **description, + gchar **author) +{ + const gchar *t, *d, *a; + + g_return_if_fail (B_IS_MODULE (module)); + + B_MODULE_GET_CLASS (module)->describe (module, &t, &d, &a); + + if (!t) + { + g_warning ("Module %s didn't return a title in b_module_describe()!", + g_type_name_from_instance ((GTypeInstance *) module)); + t = g_type_name_from_instance ((GTypeInstance *) module); + } + + if (title) + *title = g_strdup (t); + + if (description) + *description = g_strdup (d); + + if (author) + *author = g_strdup (a); +} + + +/*************************** + * public module functions * + ***************************/ + +/** + * b_module_ticker_start: + * @module: a #BModule object + * @timeout: the timeout interval in milliseconds + * + * Starts a timeout for @module that will call cause its tick() method + * to be called in @timeout milliseconds. The return value of the + * tick() method is then used to install a new timeout for @module. + * This proceeds until the tick() method returns -1, + * b_module_ticker_stop() is called or the module is stopped. + * + * You may only call this function for a #BModule that is currently + * running. + **/ +void +b_module_ticker_start (BModule *module, + gint timeout) +{ + g_return_if_fail (B_IS_MODULE (module)); + g_return_if_fail (B_MODULE_GET_CLASS (module)->tick); + g_return_if_fail (module->running == TRUE); + g_return_if_fail (timeout > 0); + + b_module_ticker_stop (module); + + timeout = (gdouble) timeout / module->speed; + + if (timeout > 0) + module->tick_source_id = g_timeout_add (timeout, + (GSourceFunc) tick, module); +} + +/** + * b_module_ticker_stop: + * @module: a #BModule object + * + * Stops the ticker for @module. If there is a pending timeout for + * @module, it is removed. + * + * You may only call this function for a #BModule that is currently + * running. + **/ +void +b_module_ticker_stop (BModule *module) +{ + g_return_if_fail (B_IS_MODULE (module)); + g_return_if_fail (module->running == TRUE); + + if (module->tick_source_id) + { + g_source_remove (module->tick_source_id); + module->tick_source_id = 0; + } +} + +/** + * b_module_request_stop: + * @module: a #BModule object + * + * This function causes the module to be stopped. This is for example + * used when a game module decides that the game is over. + * + * You may only call this function for a #BModule that is currently + * running. + **/ +void +b_module_request_stop (BModule *module) +{ + g_return_if_fail (B_IS_MODULE (module)); + g_return_if_fail (module->running == TRUE); + + b_module_stop (module); +} + +/** + * b_module_paint: + * @module: a #BModule object + * + * This function causes a repaint of the screen. + **/ +void +b_module_paint (BModule *module) +{ + g_return_if_fail (B_IS_MODULE (module)); + g_return_if_fail (module->running == TRUE); + g_return_if_fail (module->paint_callback != NULL); + + if (!module->running) + return; + + module->paint_callback (module, module->buffer, module->paint_data); +} diff --git a/blib-1.1.7/blib/bmodule.h b/blib-1.1.7/blib/bmodule.h new file mode 100644 index 0000000..758d6a7 --- /dev/null +++ b/blib-1.1.7/blib/bmodule.h @@ -0,0 +1,152 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2001-2002 The Blinkenlights Crew + * Daniel Mack + * Sven Neumann + * Michael Natterer + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __B_MODULE_H__ +#define __B_MODULE_H__ + +G_BEGIN_DECLS + +struct _BModuleEvent +{ + gint device_id; + BModuleEventType type; + BModuleKey key; +}; + +typedef gboolean (* BModulePaintCallback) (BModule *bmodule, + guchar *buffer, + gpointer data); + + +#define B_TYPE_MODULE (b_module_get_type ()) +#define B_MODULE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), B_TYPE_MODULE, BModule)) +#define B_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), B_TYPE_MODULE, BModuleClass)) +#define B_IS_MODULE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), B_TYPE_MODULE)) +#define B_IS_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), B_TYPE_MODULE)) +#define B_MODULE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), B_TYPE_MODULE, BModuleClass)) + +typedef struct _BModuleClass BModuleClass; + +struct _BModule +{ + GObject parent_instance; + + gint width; + gint height; + gint channels; + gint maxval; + gdouble aspect; + + gdouble speed; + gint lifetime; + + gint num_players; + + guchar *buffer; + + /*< private >*/ + gboolean owns_buffer; + + BModulePaintCallback paint_callback; + gpointer paint_data; + + gboolean ready; /* TRUE between prepare() and relax() */ + gboolean running; /* TRUE between start() and stop() */ + guint tick_source_id; + guint life_source_id; + + gpointer pad1; + gpointer pad2; + gpointer pad3; + gpointer pad4; +}; + +struct _BModuleClass +{ + GObjectClass parent_class; + + /* max_players defaults to 0. It needs to be set to a value between + 1 and 4 to indicate that the module can handle events from this + number of different devices. */ + gint max_players; + + /* query() can be called w/o a module instance, it returns TRUE if + the module class can handle the given parameters, FALSE otherwise. */ + gboolean (* query) (gint width, + gint height, + gint channels, + gint maxval); + + /* In prepare() the module prepares itself for being started but it + doesn't perform any visible action yet, i.e. it may not call + b_module_paint(). */ + gboolean (* prepare) (BModule *module, + GError **error); + /* In relax() the module releases any resources it has allocated in + the prepare() method. */ + void (* relax) (BModule *module); + + /* start() signals that the module should start to run. It may call + b_module_paint() to clear the screen or show an intro and it + should call b_module_start_ticker() if it needs ticks. */ + void (* start) (BModule *module); + + /* stop() signals that the module is stopped. It may call + b_module_paint() once more (but it shouldn't). */ + void (* stop) (BModule *module); + + /* An event occured and the module may do anything in response. */ + void (* event) (BModule *bmodule, + BModuleEvent *event); + + /* A previously set timeout expired. The module should do whatever it + likes and return a new timeout (in milliseconds). If the return + value is <= 0, no new timeout is installed. */ + gint (* tick) (BModule *module); + + void (* describe) (BModule *module, + const gchar **title, + const gchar **description, + const gchar **author); + + /* padding for future use */ + gpointer pad1; + gpointer pad2; + gpointer pad3; + gpointer pad4; +}; + + +GType b_module_get_type (void) G_GNUC_CONST; + + +/* functions the module implementations may call */ + +void b_module_ticker_start (BModule *module, + gint timeout); +void b_module_ticker_stop (BModule *module); +void b_module_request_stop (BModule *module); +void b_module_paint (BModule *module); + +G_END_DECLS + +#endif /* __B_MODULE_H__ */ diff --git a/blib-1.1.7/blib/bmoduleinfo.c b/blib-1.1.7/blib/bmoduleinfo.c new file mode 100644 index 0000000..1e1f594 --- /dev/null +++ b/blib-1.1.7/blib/bmoduleinfo.c @@ -0,0 +1,250 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2001-2002 The Blinkenlights Crew + * Daniel Mack + * Michael Natterer + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include +#include + +#include +#include + +#include "btypes.h" +#include "bmoduleinfo.h" + + +static void b_module_info_class_init (BModuleInfoClass *klass); +static void b_module_info_init (BModuleInfo *module_info); +static void b_module_info_finalize (GObject *object); +static gboolean b_module_info_load (GTypeModule *gmodule); +static void b_module_info_unload (GTypeModule *gmodule); + + +static GSList *module_infos = NULL; +static GTypeModuleClass *parent_class = NULL; + + +GType +b_module_info_get_type (void) +{ + static GType module_info_type = 0; + + if (! module_info_type) + { + static const GTypeInfo module_info_info = + { + sizeof (BModuleInfoClass), + (GBaseInitFunc) NULL, + (GBaseFinalizeFunc) NULL, + (GClassInitFunc) b_module_info_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (BModuleInfo), + 0, /* n_preallocs */ + (GInstanceInitFunc) b_module_info_init, + }; + + module_info_type = g_type_register_static (G_TYPE_TYPE_MODULE, + "BModuleInfo", + &module_info_info, 0); + } + + return module_info_type; +} + +static void +b_module_info_class_init (BModuleInfoClass *klass) +{ + GObjectClass *object_class; + GTypeModuleClass *module_class; + + object_class = G_OBJECT_CLASS (klass); + module_class = G_TYPE_MODULE_CLASS (klass); + + parent_class = g_type_class_peek_parent (klass); + + object_class->finalize = b_module_info_finalize; + + module_class->load = b_module_info_load; + module_class->unload = b_module_info_unload; +} + +static void +b_module_info_init (BModuleInfo *module) +{ + module->module = NULL; + module->filename = NULL; +} + +static void +b_module_info_finalize (GObject *object) +{ + BModuleInfo *module_info; + + module_info = B_MODULE_INFO (object); + + if (module_info->filename) + { + g_free (module_info->filename); + module_info->filename = NULL; + } + + G_OBJECT_CLASS (parent_class)->finalize (object); +} + +static gboolean +b_module_info_load (GTypeModule *gmodule) +{ + BModuleInfo *module_info; + + module_info = B_MODULE_INFO (gmodule); + + g_return_val_if_fail (module_info->filename != NULL, FALSE); + + module_info->module = g_module_open (module_info->filename, + G_MODULE_BIND_LAZY); + + if (! module_info->module) + { + g_warning (g_module_error ()); + return FALSE; + } + + if (! g_module_symbol (module_info->module, "b_module_register", + (gpointer *) &module_info->register_module)) + { + g_warning (g_module_error ()); + g_module_close (module_info->module); + module_info->module = NULL; + + return FALSE; + } + + return module_info->register_module (gmodule); +} + +static void +b_module_info_unload (GTypeModule *gmodule) +{ + BModuleInfo *module_info; + + module_info = B_MODULE_INFO (gmodule); + + g_return_if_fail (module_info->module != NULL); + + g_module_close (module_info->module); /* FIXME: error handling */ + module_info->module = NULL; +} + +/** + * b_module_info_new: + * @filename: the filename of the loadable module + * + * Creates a new #BModuleInfo object a loadable module. + * + * Return value: a newly allocated #BModuleInfo object + **/ +BModuleInfo * +b_module_info_new (const gchar *filename) +{ + BModuleInfo *module_info; + + g_return_val_if_fail (filename != NULL, NULL); + g_return_val_if_fail (g_module_supported (), NULL); + + module_info = B_MODULE_INFO (g_object_new (B_TYPE_MODULE_INFO, NULL)); + + module_info->filename = g_strdup (filename); + + if (! b_module_info_load (G_TYPE_MODULE (module_info))) + { + g_object_unref (G_OBJECT (module_info)); + return NULL; + } + + b_module_info_unload (G_TYPE_MODULE (module_info)); + + return module_info; +} + +/** + * b_module_infos_scan_dir: + * @dirname: the name of the directory to scan or %NULL to use the + * default directory + * + * Scans the given directory for loadable modules and registers the + * types implemented by the found modules. + * + * Return value: the number of successfully registered modules + **/ +gint +b_module_infos_scan_dir (const gchar *dirname) +{ + gint count = 0; + GDir *dir; + const gchar *name; + char *full_name; + BModuleInfo *module_info; + + if (!dirname) + dirname = MODULEPATH; + + dir = g_dir_open (dirname, 0, NULL); + if (dir == NULL) + { + g_warning ("Unable to open dir '%s': %s", dirname, g_strerror (errno)); + return 0; + } + + while ((name = g_dir_read_name (dir))) + { + if ((strlen (name) < 7) || + strncmp (name, "lib", 3) || + strcmp (name + strlen (name) - 3, ".la")) + continue; + + full_name = g_build_filename (dirname, name, NULL); + +#ifdef VERBOSE + g_print ("Testing file '%s'\n", full_name); +#endif + + if (g_file_test (full_name, G_FILE_TEST_IS_REGULAR)) + { + module_info = b_module_info_new (full_name); + + if (module_info) + { +#ifdef VERBOSE + g_print ("Successfully loaded module '%s'\n", full_name); +#endif + module_infos = g_slist_append (module_infos, module_info); + count++; + } + } + + g_free (full_name); + } + + g_dir_close (dir); + + return count; +} diff --git a/blib-1.1.7/blib/bmoduleinfo.h b/blib-1.1.7/blib/bmoduleinfo.h new file mode 100644 index 0000000..0a6f32c --- /dev/null +++ b/blib-1.1.7/blib/bmoduleinfo.h @@ -0,0 +1,58 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2001-2002 The Blinkenlights Crew + * Daniel Mack + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __B_MODULE_INFO_H__ +#define __B_MODULE_INFO_H__ + +#include + +#define B_TYPE_MODULE_INFO (b_module_info_get_type ()) +#define B_MODULE_INFO(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), B_TYPE_MODULE_INFO, BModuleInfo)) +#define B_MODULE_INFO_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), B_TYPE_MODULE_INFO, BModuleInfoClass)) +#define B_IS_MODULE_INFO(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), B_TYPE_MODULE_INFO)) +#define B_IS_MODULE_INFO_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), B_TYPE_MODULE_INFO)) +#define B_MODULE_INFO_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), B_TYPE_MODULE_INFO, BModuleInfoClass)) + + +typedef struct _BModuleInfoClass BModuleInfoClass; + +struct _BModuleInfo +{ + GTypeModule parent_instance; + + GModule *module; + gchar *filename; + + gboolean (* register_module) (GTypeModule *module); +}; + +struct _BModuleInfoClass +{ + GTypeModuleClass parent_class; +}; + + +GType b_module_info_get_type (void) G_GNUC_CONST; +BModuleInfo * b_module_info_new (const gchar *filename); + +gint b_module_infos_scan_dir (const gchar *dirname); + + +#endif /* __B_MODULE_INFO_H__ */ diff --git a/blib-1.1.7/blib/bmovie-blm.c b/blib-1.1.7/blib/bmovie-blm.c new file mode 100644 index 0000000..5547114 --- /dev/null +++ b/blib-1.1.7/blib/bmovie-blm.c @@ -0,0 +1,365 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2001-2002 The Blinkenlights Crew + * Sven Neumann + * Michael Natterer + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include + +#include + +#include "btypes.h" +#include "bmovie-blm.h" + + +static void b_movie_blm_class_init (BMovieBLMClass *class); +static void b_movie_blm_init (BMovie *movie); + +static gboolean b_movie_blm_load_info (BMovie *movie, + GIOChannel *io, + GError **error); +static gboolean b_movie_blm_load_all (BMovie *movie, + GIOChannel *io, + GError **error); +static gboolean b_movie_blm_save (BMovie *movie, + FILE *stream, + GError **error); + +static gboolean b_movie_blm_parse_header_line (BMovie *movie, + const gchar *buf, + gsize len, + gboolean *magic); + +static void b_movie_blm_save_header (FILE *stream, + const gchar *name, + const gchar *value); + +static BMovieClass *parent_class = NULL; + + +GType +b_movie_blm_get_type (void) +{ + static GType movie_type = 0; + + if (!movie_type) + { + static const GTypeInfo movie_info = + { + sizeof (BMovieBLMClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc) b_movie_blm_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (BMovieBLM), + 0, /* n_preallocs */ + (GInstanceInitFunc) b_movie_blm_init + }; + + movie_type = g_type_register_static (B_TYPE_MOVIE, + "BMovieBLM", + &movie_info, 0); + } + + return movie_type; +} + +static void +b_movie_blm_class_init (BMovieBLMClass *class) +{ + BMovieClass *movie_class; + + parent_class = g_type_class_peek_parent (class); + + movie_class = B_MOVIE_CLASS (class); + + movie_class->load_info = b_movie_blm_load_info; + movie_class->load_all = b_movie_blm_load_all; + movie_class->save = b_movie_blm_save; +} + +static void +b_movie_blm_init (BMovie *movie) +{ + movie->maxval = 1; +} + +static gboolean +b_movie_blm_load_info (BMovie *movie, + GIOChannel *io, + GError **error) +{ + GString *str = g_string_new_len (NULL, 128); + gboolean magic = FALSE; + + while (g_io_channel_read_line_string (io, str, NULL, + error) == G_IO_STATUS_NORMAL) + { + if (! b_movie_blm_parse_header_line (movie, str->str, str->len, &magic)) + { + if (!magic) + g_set_error (error, 0, 0, "Error parsing movie header."); + break; + } + } + + g_string_free (str, TRUE); + + return magic; +} + +static gboolean +b_movie_blm_load_all (BMovie *movie, + GIOChannel *io, + GError **error) +{ + GString *str = g_string_new_len (NULL, 128); + guchar *data = NULL; + gboolean header_parsed = FALSE; + gboolean magic = FALSE; + gint line = -1; + gint duration; + + while (g_io_channel_read_line_string (io, str, NULL, + error) == G_IO_STATUS_NORMAL) + { + if (!header_parsed) + { + if (! b_movie_blm_parse_header_line (movie, + str->str, str->len, &magic)) + { + if (magic) + header_parsed = TRUE; + else + break; + + movie->duration = 0; + } + } + + if (header_parsed) + { + const gchar *buf = str->str; + gint len = str->len; + + if (!data) + data = g_malloc (movie->width * movie->height); + + /* skip empty lines and bufs */ + if (len == 0 || buf[0] == '#' || g_ascii_isspace (buf[0])) + continue; + + if (line == -1) + { + if (buf[0] == '@') + { + if (sscanf (buf+1, "%d", &duration) == 1 && duration > 0) + line = 0; + + if (duration < B_MOVIE_MIN_DELAY) + { + g_printerr ("Frame with %d ms duration, " + "using %d ms instead\n", + duration, B_MOVIE_MIN_DELAY); + duration = B_MOVIE_MIN_DELAY; + } + } + } + else + { + if (buf[0] == '@' || len - 1 < movie->width) + { + g_printerr ("Invalid frame, skipping.\n"); + line = -1; + } + else + { + gint i; + + for (i = 0; i < movie->width; i++) + { + gint d = (buf[i] == '1' ? 1 : 0); + data[movie->width * line + i] = d * movie->maxval; + } + + if (++line == movie->height) + { + b_movie_prepend_frame (movie, duration, data); + line = -1; + } + } + } + } + } + + g_free (data); + g_string_free (str, TRUE); + + /* caller checks movie->n_frames and sets an error if no frames were found */ + + return TRUE; +} + +static gboolean +b_movie_blm_save (BMovie *movie, + FILE *stream, + GError **error) +{ + GList *list; + + if (movie->channels != 1) + { + g_set_error (error, 0, 0, + "Cannot save movie with more than one channel as BLM"); + return FALSE; + } + + fprintf (stream, + "# Blinkenlights Movie %dx%d\n", movie->width, movie->height); + + b_movie_blm_save_header (stream, "name", movie->title); + b_movie_blm_save_header (stream, "description", movie->description); + b_movie_blm_save_header (stream, "creator", movie->creator); + b_movie_blm_save_header (stream, "creator", "blib " VERSION); + b_movie_blm_save_header (stream, "author", movie->author); + b_movie_blm_save_header (stream, "email", movie->email); + b_movie_blm_save_header (stream, "url", movie->url); + + fprintf (stream, "# duration = %d\n", movie->duration); + + for (list = movie->frames; list; list = list->next) + { + BMovieFrame *frame = list->data; + const guchar *data = frame->data; + gint x, y; + + fprintf (stream, "\n@%d\n", frame->duration); + + for (y = 0; y < movie->height; y++) + { + for (x = 0; x < movie->width; x++, data++) + fputc ((*data > movie->maxval / 2) ? '1' : '0', stream); + + fputc ('\n', stream); + } + } + + return TRUE; +} + +static gboolean +b_movie_blm_parse_header_line (BMovie *movie, + const gchar *buf, + gsize len, + gboolean *magic) +{ + const gchar *comment; + + if (!len) + return FALSE; + + if (! *magic) + { + gint width; + gint height; + + if (sscanf (buf, " %dx%d", &width, &height) != 2 || + width < 1 || height < 1) + { + return FALSE; + } + + movie->width = width; + movie->height = height; + + *magic = TRUE; + return TRUE; + } + + if (buf[0] != '#') + return FALSE; + + comment = buf + 1; + len--; + while (len && g_ascii_isspace (*comment)) + { + comment++; + len--; + } + + if (!g_utf8_validate (comment, -1, NULL)) + return TRUE; /* ignore silently */ + + if (!movie->title) + { + if (g_ascii_strncasecmp (comment, "name=", 5) == 0) + movie->title = g_strstrip (g_strndup (comment + 5, len - 6)); + else if (g_ascii_strncasecmp (comment, "name =", 6) == 0) + movie->title = g_strstrip (g_strndup (comment + 6, len - 7)); + } + if (!movie->description) + { + if (g_ascii_strncasecmp (comment, "description=", 12) == 0) + movie->description = g_strstrip (g_strndup (comment + 12, len - 13)); + else if (g_ascii_strncasecmp (comment, "description =", 13) == 0) + movie->description = g_strstrip (g_strndup (comment + 13, len - 14)); + } + if (!movie->duration) + { + if (g_ascii_strncasecmp (comment, "duration=", 9) == 0 || + g_ascii_strncasecmp (comment, "duration =", 10) == 0) + { + sscanf (comment + 9, "%d", &movie->duration); + } + } + + return TRUE; +} + +static void +b_movie_blm_save_header (FILE *stream, + const gchar *name, + const gchar *value) +{ + const gchar *end; + + if (!value || !*value) + return; + + fprintf (stream, "# %s = ", name); + + end = strchr (value, '\n'); + if (!end) + end = value + MIN (strlen (value), 70 - strlen (name)); + + if (*end) + { + gchar *dup = g_strndup (value, end - value); + fprintf (stream, dup); + g_free (dup); + } + else + { + fprintf (stream, value); + } + + fputc ('\n', stream); +} diff --git a/blib-1.1.7/blib/bmovie-blm.h b/blib-1.1.7/blib/bmovie-blm.h new file mode 100644 index 0000000..b485c87 --- /dev/null +++ b/blib-1.1.7/blib/bmovie-blm.h @@ -0,0 +1,42 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2001-2002 The Blinkenlights Crew + * Sven Neumann + * Michael Natterer + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __B_MOVIE_BLM_H__ +#define __B_MOVIE_BLM_H__ + +#include "bmovie.h" + +G_BEGIN_DECLS + +#define B_TYPE_MOVIE_BLM (b_movie_blm_get_type ()) +#define B_MOVIE_BLM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), B_TYPE_MOVIE_BLM, BMovieBLM)) +#define B_MOVIE_BLM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), B_TYPE_MOVIE_BLM, BMovieBLMClass)) +#define B_IS_MOVIE_BLM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), B_TYPE_MOVIE_BLM)) +#define B_IS_MOVIE_BLM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), B_TYPE_MOVIE_BLM)) + +typedef struct _BMovieClass BMovieBLMClass; +typedef struct _BMovie BMovieBLM; + +GType b_movie_blm_get_type (void) G_GNUC_CONST; + +G_END_DECLS + +#endif /* __B_MOVIE_BLM_H__ */ diff --git a/blib-1.1.7/blib/bmovie-bml-parser.c b/blib-1.1.7/blib/bmovie-bml-parser.c new file mode 100644 index 0000000..168ca31 --- /dev/null +++ b/blib-1.1.7/blib/bmovie-bml-parser.c @@ -0,0 +1,468 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2001-2002 The Blinkenlights Crew + * Sven Neumann + * Michael Natterer + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include +#include + +#include + +#include "btypes.h" +#include "bmovie.h" +#include "bmovie-bml-parser.h" +#include "bparser.h" +#include "butils.h" + +enum +{ + PARSER_IN_BLM = B_PARSER_STATE_USER, + PARSER_IN_HEADER, + PARSER_IN_TITLE, + PARSER_IN_DESCRIPTION, + PARSER_IN_CREATOR, + PARSER_IN_AUTHOR, + PARSER_IN_EMAIL, + PARSER_IN_URL, + PARSER_IN_DURATION, + PARSER_IN_LOOP, + PARSER_IN_FRAME, + PARSER_IN_ROW, + PARSER_FINISH, +}; + +typedef struct _ParserData ParserData; + +struct _ParserData +{ + gint bits; + gint channels; + + gint frame_duration; + guchar *frame_data; + gint frame_next_row; + + BMovie *movie; + gboolean lazy; +}; + +static BParserState parser_start_element (BParserState state, + const gchar *element_name, + const gchar **attribute_names, + const gchar **attribute_values, + gpointer user_data, + GError **error); +static BParserState parser_end_element (BParserState state, + const gchar *element_name, + const gchar *cdata, + gsize cdata_len, + gpointer user_data, + GError **error); + +static gboolean parse_blm_attributes (ParserData *data, + const gchar **names, + const gchar **values); +static gboolean parse_frame_attributes (ParserData *data, + const gchar **names, + const gchar **values); + + +gboolean +b_movie_bml_parse_bml (BMovie *movie, + GIOChannel *io, + gboolean lazy, + GError **error) +{ + BParser *parser; + ParserData data; + gboolean retval; + + data.movie = movie; + data.lazy = lazy; + data.frame_data = NULL; + + parser = b_parser_new (parser_start_element, parser_end_element, &data); + + retval = b_parser_parse_io_channel (parser, io, FALSE, error); + + if (retval && b_parser_get_state (parser) != PARSER_FINISH) + { + g_set_error (error, G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT, + "This doesn't look like Blinkenlights Markup Language"); + retval = FALSE; + } + + b_parser_free (parser); + + g_free (data.frame_data); + + return retval; +} + + +/* parser functions */ + +static BParserState +parser_start_element (BParserState state, + const gchar *element_name, + const gchar **attribute_names, + const gchar **attribute_values, + gpointer user_data, + GError **error) +{ + ParserData *data = (ParserData *) user_data; + + switch (state) + { + case B_PARSER_STATE_TOPLEVEL: + if (! strcmp (element_name, "blm")) + { + if (! parse_blm_attributes (data, attribute_names, attribute_values)) + { + g_set_error (error, + G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT, + "Invalid attributes for blm element"); + break; + } + + return PARSER_IN_BLM; + } + break; + + case PARSER_IN_BLM: + if (! strcmp (element_name, "header")) + return PARSER_IN_HEADER; + + if (data->lazy) + return B_PARSER_STATE_UNKNOWN; + + if (! strcmp (element_name, "frame")) + { + if (! parse_frame_attributes (data, + attribute_names, attribute_values)) + { + g_set_error (error, G_MARKUP_ERROR, + G_MARKUP_ERROR_INVALID_CONTENT, + "Invalid attributes for frame element number %d", + data->movie->n_frames); + break; + } + + if (data->frame_data) + memset (data->frame_data, 0, + data->movie->width * data->movie->height); + else + data->frame_data = g_new0 (guchar, (data->movie->width * + data->movie->height)); + + data->frame_next_row = 0; + + return PARSER_IN_FRAME; + } + break; + + case PARSER_IN_HEADER: + if (! strcmp (element_name, "title")) + return PARSER_IN_TITLE; + + if (! strcmp (element_name, "description")) + return PARSER_IN_DESCRIPTION; + + if (! strcmp (element_name, "creator")) + return PARSER_IN_CREATOR; + + if (! strcmp (element_name, "author")) + return PARSER_IN_AUTHOR; + + if (! strcmp (element_name, "email")) + return PARSER_IN_EMAIL; + + if (! strcmp (element_name, "url")) + return PARSER_IN_URL; + + /* only parse duration if we are lazy-loading ! */ + if (! strcmp (element_name, "duration") && data->lazy) + return PARSER_IN_DURATION; + + if (! strcmp (element_name, "loop")) + return PARSER_IN_LOOP; + + break; + + case PARSER_IN_FRAME: + if (! strcmp (element_name, "row")) + { + if (data->frame_next_row == data->movie->height) + { + g_set_error (error, G_MARKUP_ERROR, + G_MARKUP_ERROR_INVALID_CONTENT, + "Too many rows in frame number %d", + data->movie->n_frames); + break; + } + + return PARSER_IN_ROW; + } + break; + + default: + break; + } + + return B_PARSER_STATE_UNKNOWN; +} + +static BParserState +parser_end_element (BParserState state, + const gchar *element_name, + const gchar *cdata, + gsize cdata_len, + gpointer user_data, + GError **error) +{ + ParserData *data = (ParserData *) user_data; + + switch (state) + { + case PARSER_IN_BLM: + return PARSER_FINISH; + + case PARSER_IN_HEADER: + return PARSER_IN_BLM; + + case PARSER_IN_TITLE: + if (!data->movie->title) + data->movie->title = g_strdup (cdata); + return PARSER_IN_HEADER; + + case PARSER_IN_DESCRIPTION: + if (!data->movie->description) + data->movie->description = g_strdup (cdata); + return PARSER_IN_HEADER; + + case PARSER_IN_CREATOR: + if (!data->movie->creator) + data->movie->creator = g_strdup (cdata); + return PARSER_IN_HEADER; + + case PARSER_IN_AUTHOR: + if (!data->movie->author) + data->movie->author = g_strdup (cdata); + return PARSER_IN_HEADER; + + case PARSER_IN_EMAIL: + if (!data->movie->email) + data->movie->email = g_strdup (cdata); + return PARSER_IN_HEADER; + + case PARSER_IN_URL: + if (!data->movie->url) + data->movie->url = g_strdup (cdata); + return PARSER_IN_HEADER; + + case PARSER_IN_DURATION: + b_parse_int (cdata, & data->movie->duration); + return PARSER_IN_HEADER; + + case PARSER_IN_LOOP: + /* for backward compat, ignore loop if it has a value of "no" */ + if (!cdata_len || g_ascii_tolower (*cdata) != 'n') + data->movie->loop = TRUE; + return PARSER_IN_HEADER; + + case PARSER_IN_FRAME: + if (data->frame_next_row != data->movie->height) + { + g_set_error (error, + G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT, + "Too few rows in frame number %d", + data->movie->n_frames); + break; + } + else + { + b_movie_prepend_frame (data->movie, + data->frame_duration, data->frame_data); + } + return PARSER_IN_BLM; + + case PARSER_IN_ROW: + { + gchar *row; + gchar *src; + guchar *dest; + gint bpp_src; + gint i, x = 0; + + row = g_strdup (cdata); + + if ((data->bits <= 4 && + cdata_len != data->movie->width * data->channels) || + (data->bits > 4 && + cdata_len != data->movie->width * data->channels * 2)) + { + g_set_error (error, + G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT, + "Invalid row length in frame number %d", + data->movie->n_frames); + goto row_done; + } + + bpp_src = data->bits <= 4 ? 1 : 2; + + src = row; + dest = data->frame_data + (data->movie->width * data->frame_next_row); + + for (; x < data->movie->width; x++, src += bpp_src, dest += 1) + { + *dest = 0; + + for (i = 0; i < bpp_src; i++) + { + *dest <<= 4; + + src[i] = g_ascii_tolower (src[i]); + + switch (src[i]) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + *dest += src[i] - '0'; + break; + + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + *dest += 10 + src[i] - 'a'; + break; + + default: + g_set_error (error, + G_MARKUP_ERROR, + G_MARKUP_ERROR_INVALID_CONTENT, + "Invalid row data in frame number %d", + data->movie->n_frames); + goto row_done; + } + } + + if (*dest > data->movie->maxval) + { + g_set_error (error, + G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT, + "Row data exceeds maxval (%d) in frame number %d", + data->movie->maxval, data->movie->n_frames); + goto row_done; + } + } + + row_done: + g_free (row); + data->frame_next_row++; + + if (x != data->movie->width) + return B_PARSER_STATE_UNKNOWN; + } + return PARSER_IN_FRAME; + + default: + break; + } + + return B_PARSER_STATE_UNKNOWN; +} + +static gboolean +parse_blm_attributes (ParserData *data, + const gchar **names, + const gchar **values) +{ + gint i; + gint width = 0; + gint height = 0; + gint bits = 1; + gint channels = 1; + + for (i = 0; names[i] && values[i]; i++) + { + if (strcmp (names[i], "width") == 0) + b_parse_int (values[i], &width); + else if (strcmp (names[i], "height") == 0) + b_parse_int (values[i], &height); + else if (strcmp (names[i], "bits") == 0) + b_parse_int (values[i], &bits); + else if (strcmp (names[i], "channels") == 0) + b_parse_int (values[i], &channels); + } + + if (width > 0 && height > 0 && + (bits >= 1 && bits <= 8) && (channels == 1)) /* channels == 3 */ + { + data->movie->width = width; + data->movie->height = height; + data->movie->maxval = (1 << bits) - 1; + data->movie->channels = channels; + + data->bits = bits; + data->channels = channels; + + return TRUE; + } + + return FALSE; +} + +static gboolean +parse_frame_attributes (ParserData *data, + const gchar **names, + const gchar **values) +{ + gint i; + gint duration = 0; + + for (i = 0; names[i] && values[i]; i++) + { + if (strcmp (names[i], "duration") == 0) + b_parse_int (values[i], &duration); + } + + if (duration < B_MOVIE_MIN_DELAY) + { + g_printerr ("Frame with %d ms duration, using %d ms instead\n", + duration, B_MOVIE_DEFAULT_DELAY); + duration = B_MOVIE_DEFAULT_DELAY; + } + + data->frame_duration = duration; + + return TRUE; +} diff --git a/blib-1.1.7/blib/bmovie-bml-parser.h b/blib-1.1.7/blib/bmovie-bml-parser.h new file mode 100644 index 0000000..3af65e3 --- /dev/null +++ b/blib-1.1.7/blib/bmovie-bml-parser.h @@ -0,0 +1,34 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2001-2002 The Blinkenlights Crew + * Sven Neumann + * Michael Natterer + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __B_MOVIE_BML_PARSER_H__ +#define __B_MOVIE_BML_PARSER_H__ + +G_BEGIN_DECLS + +gboolean b_movie_bml_parse_bml (BMovie *movie, + GIOChannel *io, + gboolean lazy, + GError **error); + +G_END_DECLS + +#endif /* __B_MOVIE_BML_PARSER_H__ */ diff --git a/blib-1.1.7/blib/bmovie-bml.c b/blib-1.1.7/blib/bmovie-bml.c new file mode 100644 index 0000000..c0a29a9 --- /dev/null +++ b/blib-1.1.7/blib/bmovie-bml.c @@ -0,0 +1,211 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2001-2002 The Blinkenlights Crew + * Sven Neumann + * Michael Natterer + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include + +#include + +#include "btypes.h" +#include "bobject.h" +#include "bmovie-bml.h" +#include "bmovie-bml-parser.h" +#include "bwriter.h" + + +static void b_movie_bml_class_init (BMovieBMLClass *class); + +static gboolean b_movie_bml_load_info (BMovie *movie, + GIOChannel *io, + GError **error); +static gboolean b_movie_bml_load_all (BMovie *movie, + GIOChannel *io, + GError **error); +static gboolean b_movie_bml_save (BMovie *movie, + FILE *stream, + GError **error); + + +static BMovieClass *parent_class = NULL; + + +GType +b_movie_bml_get_type (void) +{ + static GType movie_type = 0; + + if (!movie_type) + { + static const GTypeInfo movie_info = + { + sizeof (BMovieBMLClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc) b_movie_bml_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (BMovieBML), + 0, /* n_preallocs */ + NULL /* instance_init */ + }; + + movie_type = g_type_register_static (B_TYPE_MOVIE, + "BMovieBML", + &movie_info, 0); + } + + return movie_type; +} + +static void +b_movie_bml_class_init (BMovieBMLClass *class) +{ + BMovieClass *movie_class; + + parent_class = g_type_class_peek_parent (class); + + movie_class = B_MOVIE_CLASS (class); + + movie_class->load_info = b_movie_bml_load_info; + movie_class->load_all = b_movie_bml_load_all; + movie_class->save = b_movie_bml_save; +} + +static gboolean +b_movie_bml_load_info (BMovie *movie, + GIOChannel *io, + GError **error) +{ + return b_movie_bml_parse_bml (movie, io, TRUE, error); +} + +static gboolean +b_movie_bml_load_all (BMovie *movie, + GIOChannel *io, + GError **error) +{ + return b_movie_bml_parse_bml (movie, io, FALSE, error); +} + + +static gboolean +b_movie_bml_save (BMovie *movie, + FILE *stream, + GError **error) +{ + BWriter *writer; + GList *list; + gchar width[16]; + gchar height[16]; + gchar buf[16]; + gchar *row; + guint len, bits; + + if (movie->channels != 1) + { + g_set_error (error, 0, 0, + "Cannot yet save movie with more than one channel as BML"); + return FALSE; + } + + /* calculate bits from movie->maxval */ + for (len = movie->maxval, bits = 0; len; len >>= 1, bits++) + ; + + g_snprintf (width, sizeof (width), "%d", movie->width); + g_snprintf (height, sizeof (height), "%d", movie->height); + g_snprintf (buf, sizeof (buf), "%u", bits); + + writer = b_writer_new (stream, 4); + + b_write_header (writer, "utf-8"); + + b_write_open_tag (writer, "blm", + "width", width, "height", height, "bits", buf, NULL); + + if (movie->title) + { + b_write_open_tag (writer, "header", NULL); + +#define BML_WRITE_META(tag) \ + if (movie->tag) b_write_element (writer, #tag, movie->tag, NULL); + + BML_WRITE_META (title); + BML_WRITE_META (description); + + if (movie->creator) + b_write_element (writer, "creator", movie->creator, NULL); + else + b_write_element (writer, "creator", "blib " VERSION, NULL); + + BML_WRITE_META (author); + BML_WRITE_META (email); + BML_WRITE_META (url); + + g_snprintf (buf, sizeof (buf), "%d", movie->duration); + b_write_element (writer, "duration", buf, NULL); + + if (movie->loop) + b_write_element (writer, "loop", NULL, NULL); + +#undef BML_WRITE_META + + b_write_close_tag (writer, "header"); + } + + /* calculate length of row data */ + len = movie->width * (bits > 4 ? 2 : 1); + row = g_new (gchar, len + 1); + row[len] = '\0'; + + for (list = movie->frames; list; list = list->next) + { + BMovieFrame *frame = list->data; + guchar *data = frame->data; + gint x, y; + + g_snprintf (buf, sizeof (buf), "%d", frame->duration); + b_write_open_tag (writer, "frame", "duration", buf, NULL); + + for (y = 0; y < movie->height; y++) + { + if (bits > 4) + for (x = 0; x < movie->width; x++, data++) + g_snprintf (row + x * 2, 3, "%02x", *data); + else + for (x = 0; x < movie->width; x++, data++) + g_snprintf (row + x, 2, "%1x", *data); + + b_write_element (writer, "row", row, NULL); + } + + b_write_close_tag (writer, "frame"); + } + + g_free (row); + + b_write_close_tag (writer, "blm"); + + b_writer_free (writer); + + return TRUE; +} diff --git a/blib-1.1.7/blib/bmovie-bml.h b/blib-1.1.7/blib/bmovie-bml.h new file mode 100644 index 0000000..86e05bf --- /dev/null +++ b/blib-1.1.7/blib/bmovie-bml.h @@ -0,0 +1,42 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2001-2002 The Blinkenlights Crew + * Sven Neumann + * Michael Natterer + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __B_MOVIE_BML_H__ +#define __B_MOVIE_BML_H__ + +#include "bmovie.h" + +G_BEGIN_DECLS + +#define B_TYPE_MOVIE_BML (b_movie_bml_get_type ()) +#define B_MOVIE_BML(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), B_TYPE_MOVIE_BML, BMovieBML)) +#define B_MOVIE_BML_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), B_TYPE_MOVIE_BML, BMovieBMLClass)) +#define B_IS_MOVIE_BML(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), B_TYPE_MOVIE_BML)) +#define B_IS_MOVIE_BML_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), B_TYPE_MOVIE_BML)) + +typedef struct _BMovieClass BMovieBMLClass; +typedef struct _BMovie BMovieBML; + +GType b_movie_bml_get_type (void) G_GNUC_CONST; + +G_END_DECLS + +#endif /* __B_MOVIE_BML_H__ */ diff --git a/blib-1.1.7/blib/bmovie-effects.c b/blib-1.1.7/blib/bmovie-effects.c new file mode 100644 index 0000000..a0c8d6b --- /dev/null +++ b/blib-1.1.7/blib/bmovie-effects.c @@ -0,0 +1,158 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2001-2002 The Blinkenlights Crew + * Sven Neumann + * Michael Natterer + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include + +#include "btypes.h" +#include "beffects.h" +#include "bmovie.h" +#include "bmovie-effects.h" + + +/** + * b_movie_normalize: + * @movie: a #BMovie object + * @maxval: the new maximum value to apply to @movie + * + * Changes the maximum value for @movie, that is the value that will + * cause the lamp to glow with full intensity. This function iterates + * over all frames of the movie and changes the frame data accordingly. + **/ +void +b_movie_normalize (BMovie *movie, + gint maxval) +{ + GList *list; + + g_return_if_fail (B_IS_MOVIE (movie)); + g_return_if_fail (maxval > 0 && maxval < 256); + + if (movie->maxval == maxval) + return; + + for (list = movie->frames; list; list = list->next) + { + BMovieFrame *frame = list->data; + guchar *data = frame->data; + gint x, y; + + for (y = 0; y < movie->height; y++) + for (x = 0; x < movie->width; x++, data++) + *data = ((gint) *data * maxval) / movie->maxval; + } + + movie->maxval = maxval; +} + +/** + * b_movie_apply_colormap: + * @movie: a #BMovie object + * @map: a LUT that remaps each color value + * + * Applies a mapping defined by @map to all frames of the @movie. The + * mapping must not exceed the movie's maxval. + **/ +void +b_movie_apply_colormap (BMovie *movie, + guchar *map) +{ + GList *list; + + g_return_if_fail (B_IS_MOVIE (movie)); + g_return_if_fail (map != NULL); + + for (list = movie->frames; list; list = list->next) + { + BMovieFrame *frame = list->data; + guchar *data = frame->data; + gint x, y; + + for (y = 0; y < movie->height; y++) + for (x = 0; x < movie->width; x++, data++) + *data = map[*data]; + } +} + +/** + * b_movie_apply_effects: + * @movie: a #BMovie object + * @effects: a #BEffects object or %NULL + * @reverse: whether to reverse the order of frames in @movie + * @speed: an adjustment factor to be applied on the frame timing + * + * If @effects is non-%NULL, the effects described by it are applied + * to @movie. If @reverse is %TRUE, the order of frames is reversed. + * If @speed is different from 1.0, the frame timing is adjusted; for + * example a value of 2.0 makes the movie play with double speed. + **/ +void +b_movie_apply_effects (BMovie *movie, + BEffects *effects, + gboolean reverse, + gdouble speed) +{ + GList *list; + + g_return_if_fail (B_IS_MOVIE (movie)); + g_return_if_fail (effects == NULL || B_IS_EFFECTS (effects)); + g_return_if_fail (speed > 0.0); + + for (list = movie->frames; list; list = list->next) + { + BMovieFrame *frame = list->data; + + if (effects) + { + b_effects_apply (effects, + frame->data, + movie->width, movie->height, + movie->channels, movie->maxval); + } + + if (speed != 1.0) + { + frame->start /= speed; + frame->duration /= speed; + } + } + + if (speed != 1.0) + { + movie->duration /= speed; + } + + if (reverse) + { + gint start = 0; + + movie->frames = g_list_reverse (movie->frames); + + for (list = movie->frames; list; list = list->next) + { + BMovieFrame *frame = list->data; + + frame->start = start; + start += frame->duration; + } + } +} diff --git a/blib-1.1.7/blib/bmovie-effects.h b/blib-1.1.7/blib/bmovie-effects.h new file mode 100644 index 0000000..f7708fd --- /dev/null +++ b/blib-1.1.7/blib/bmovie-effects.h @@ -0,0 +1,38 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2001-2002 The Blinkenlights Crew + * Sven Neumann + * Michael Natterer + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __B_MOVIE_EFFECTS_H__ +#define __B_MOVIE_EFFECTS_H__ + +G_BEGIN_DECLS + +void b_movie_normalize (BMovie *movie, + gint maxval); +void b_movie_apply_colormap (BMovie *movie, + guchar *map); +void b_movie_apply_effects (BMovie *movie, + BEffects *effects, + gboolean reverse, + gdouble speed); + +G_END_DECLS + +#endif /* __B_MOVIE_EFFECTS_H__ */ diff --git a/blib-1.1.7/blib/bmovie-gif-parser.c b/blib-1.1.7/blib/bmovie-gif-parser.c new file mode 100644 index 0000000..5578510 --- /dev/null +++ b/blib-1.1.7/blib/bmovie-gif-parser.c @@ -0,0 +1,282 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2001-2002 The Blinkenlights Crew + * Sven Neumann + * Michael Natterer + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include + +#include + +#include "btypes.h" +#include "bmovie.h" +#include "bmovie-gif-parser.h" + +#include "gif-load.h" + +/* #define DEBUG_GIF 1 */ + + +static void +b_movie_gif_compose_frame (BMovie *movie, + guchar *gray_buf, + guchar *image_buf, + gint image_colors, + guchar *image_cmap, + guchar *frame_buf, + GIFDisposeType frame_disposal, + gint frame_duration, + gint frame_transparent, + gint frame_width, + gint frame_height, + gint frame_off_x, + gint frame_off_y, + gint frame_colors, + guchar *frame_cmap) +{ + guchar *src; + guchar *dest; + guchar *d; + guchar *cmap; + gint colors; + gint x, y; + +#if DEBUG_GIF + g_printerr ("GIF frame: " + "%dx%d @ %d,%d disposal: %d duration: %d transp: %d cmap: %s\n", + frame_width, frame_height, + frame_off_x, frame_off_y, + frame_disposal, + frame_duration, + frame_transparent, + frame_cmap ? "yes" : "no"); +#endif + + cmap = frame_cmap ? frame_cmap : image_cmap; + colors = frame_cmap ? frame_colors : image_colors; + + src = frame_buf; + dest = image_buf + frame_off_y * movie->width + frame_off_x; + + for (y = 0; y < frame_height; y++) + { + d = dest; + + for (x = 0; x < frame_width; x++) + { + if (frame_transparent > -1 && + *src == frame_transparent && + frame_disposal != DISPOSE_REPLACE) + { + d++; + src++; + } + else + { + *d++ = *src++; + } + } + + dest += movie->width; + } + + src = image_buf; + dest = gray_buf; + + for (y = 0; y < movie->height; y++) + { + d = dest; + + for (x = 0; x < movie->width; x++) + { + if (*src < colors) + { + guchar *cmap_entry = cmap + *src * 3; + +#define INTENSITY_RED 0.30 +#define INTENSITY_GREEN 0.59 +#define INTENSITY_BLUE 0.11 +#define INTENSITY(r,g,b) ((r) * INTENSITY_RED + \ + (g) * INTENSITY_GREEN + \ + (b) * INTENSITY_BLUE + \ + (1) * (1.0 / 256.0)) + + *d = INTENSITY (cmap_entry[0], cmap_entry[1], cmap_entry[2]); + +#undef INTENSITY_RED +#undef INTENSITS_GREEN +#undef INTENSITY_BLUE +#undef INTENSITY + } + else + { + *d = 0; + } + + d++; + src++; + } + + dest += movie->width; + } + + b_movie_prepend_frame (movie, frame_duration, gray_buf); +} + +gboolean +b_movie_gif_parse_gif (BMovie *movie, + GIOChannel *io, + gboolean lazy, + GError **error) +{ + gint width; + gint height; + gint background; + gint colors; + guchar *cmap = NULL; + GIFRecordType record_type; + gint duration = 0; + gchar *comment = NULL; + guchar *buffer = NULL; + guchar *frame_buffer = NULL; + guchar *gray_buffer = NULL; + gboolean success = FALSE; + GIFDisposeType frame_disposal = DISPOSE_REPLACE; + gint frame_delay = 100; + gint frame_transparent = -1; + + if (! GIFDecodeHeader (io, + TRUE, &width, &height, &background, &colors, &cmap)) + goto cleanup; + + movie->width = width; + movie->height = height; + +#if DEBUG_GIF + g_printerr ("GIF background: %d colors: %d\n", background, colors); +#endif + + buffer = g_new0 (guchar, width * height); + frame_buffer = g_new0 (guchar, width * height); + gray_buffer = g_new0 (guchar, width * height); + + if (background > -1) + memset (buffer, background, width * height); + + while (GIFDecodeRecordType (io, &record_type)) + { + switch (record_type) + { + case IMAGE: + { + gint frame_width; + gint frame_height; + gint frame_off_x; + gint frame_off_y; + gint frame_colors; + guchar *frame_cmap; + + if (! GIFDecodeImage (io, + &frame_width, &frame_height, + &frame_off_x, &frame_off_y, + &frame_colors, &frame_cmap, + frame_buffer)) + { + g_set_error (error, 0, 0, + "Broken or missing image frame"); + goto cleanup; + } + + if (frame_delay < B_MOVIE_MIN_DELAY) + { + g_printerr ("Frame with %d ms duration, using %d ms instead\n", + frame_delay, B_MOVIE_DEFAULT_DELAY); + frame_delay = B_MOVIE_DEFAULT_DELAY; + } + + duration += frame_delay; + + if (! lazy) + { + b_movie_gif_compose_frame (movie, + gray_buffer, + buffer, + colors, + cmap, + frame_buffer, + frame_disposal, + frame_delay, + frame_transparent, + frame_width, + frame_height, + frame_off_x, + frame_off_y, + frame_colors, + frame_cmap); + } + + g_free (frame_cmap); + } + break; + + case GRAPHIC_CONTROL_EXTENSION: + if (! GIFDecodeGraphicControlExt (io, + &frame_disposal, + &frame_delay, + &frame_transparent)) + { + g_set_error (error, 0, 0, + "Broken or missing graphic control extension"); + goto cleanup; + } + break; + + case COMMENT_EXTENSION: + if (! GIFDecodeCommentExt (io, &comment)) + { + g_set_error (error, 0, 0, + "Broken or missing comment extension"); + goto cleanup; + } + break; + + case UNKNOWN_EXTENSION: + GIFDecodeUnknownExt (io); + break; + + case TERMINATOR: + success = TRUE; + goto cleanup; + } + } + + cleanup: + + if (success && lazy) + movie->duration = duration; + + g_free (cmap); + g_free (buffer); + g_free (frame_buffer); + g_free (gray_buffer); + g_free (comment); + + return success; +} diff --git a/blib-1.1.7/blib/bmovie-gif-parser.h b/blib-1.1.7/blib/bmovie-gif-parser.h new file mode 100644 index 0000000..7ca3f0a --- /dev/null +++ b/blib-1.1.7/blib/bmovie-gif-parser.h @@ -0,0 +1,34 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2001-2002 The Blinkenlights Crew + * Sven Neumann + * Michael Natterer + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __B_MOVIE_GIF_PARSER_H__ +#define __B_MOVIE_GIF_PARSER_H__ + +G_BEGIN_DECLS + +gboolean b_movie_gif_parse_gif (BMovie *movie, + GIOChannel *io, + gboolean all, + GError **error); + +G_END_DECLS + +#endif /* __B_MOVIE_GIF_PARSER_H__ */ diff --git a/blib-1.1.7/blib/bmovie-gif.c b/blib-1.1.7/blib/bmovie-gif.c new file mode 100644 index 0000000..7945360 --- /dev/null +++ b/blib-1.1.7/blib/bmovie-gif.c @@ -0,0 +1,165 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2001-2002 The Blinkenlights Crew + * Sven Neumann + * Michael Natterer + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include + +#include "btypes.h" +#include "bmovie-gif.h" +#include "bmovie-gif-parser.h" + +#include "gif-save.h" + + +static void b_movie_gif_class_init (BMovieGIFClass *class); +static void b_movie_gif_init (BMovie *movie); + +static gboolean b_movie_gif_load_info (BMovie *movie, + GIOChannel *io, + GError **error); +static gboolean b_movie_gif_load_all (BMovie *movie, + GIOChannel *io, + GError **error); +static gboolean b_movie_gif_save (BMovie *movie, + FILE *stream, + GError **error); + + +static BMovieClass *parent_class = NULL; + + +GType +b_movie_gif_get_type (void) +{ + static GType movie_type = 0; + + if (!movie_type) + { + static const GTypeInfo movie_info = + { + sizeof (BMovieGIFClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc) b_movie_gif_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (BMovieGIF), + 0, /* n_preallocs */ + (GInstanceInitFunc) b_movie_gif_init + }; + + movie_type = g_type_register_static (B_TYPE_MOVIE, + "BMovieGIF", + &movie_info, 0); + } + + return movie_type; +} + +static void +b_movie_gif_class_init (BMovieGIFClass *class) +{ + BMovieClass *movie_class; + + parent_class = g_type_class_peek_parent (class); + + movie_class = B_MOVIE_CLASS (class); + + movie_class->load_info = b_movie_gif_load_info; + movie_class->load_all = b_movie_gif_load_all; + movie_class->save = b_movie_gif_save; +} + +static void +b_movie_gif_init (BMovie *movie) +{ + movie->maxval = 255; +} + +static gboolean +b_movie_gif_load_info (BMovie *movie, + GIOChannel *io, + GError **error) +{ + return b_movie_gif_parse_gif (movie, io, TRUE, error); +} + +static gboolean +b_movie_gif_load_all (BMovie *movie, + GIOChannel *io, + GError **error) +{ + return b_movie_gif_parse_gif (movie, io, FALSE, error); +} + +static gboolean +b_movie_gif_save (BMovie *movie, + FILE *stream, + GError **error) +{ + GList *list; + guchar *cmap; + guint i, len; + guint bits; + + g_return_val_if_fail (movie->maxval > 0, FALSE); + + /* calculate bits from movie->maxval */ + for (len = movie->maxval, bits = 0; len; len >>= 1, bits++) + ; + + len = 1 << bits; + cmap = g_new0 (guchar, 3 * len); + + for (i = 0; i <= movie->maxval; i++) + { + guint value = (i * 255) / movie->maxval; + + cmap[i*3 + 0] = value; + cmap[i*3 + 1] = value; + cmap[i*3 + 2] = value; + } + + GIFEncodeHeader (stream, TRUE, movie->width, movie->height, 0, bits, cmap); + + if (movie->loop) + GIFEncodeLoopExt (stream, 0); + + GIFEncodeCommentExt (stream, "Blinkenlights Movie written by blib " VERSION); + + for (list = movie->frames; list; list = list->next) + { + BMovieFrame *frame = list->data; + guchar *data = frame->data; + + GIFEncodeGraphicControlExt (stream, + DISPOSE_REPLACE, frame->duration, TRUE, -1); + GIFEncodeImageData (stream, + movie->width, movie->height, bits, 0, 0, data); + } + + GIFEncodeClose (stream); + + g_free (cmap); + + return TRUE; +} diff --git a/blib-1.1.7/blib/bmovie-gif.h b/blib-1.1.7/blib/bmovie-gif.h new file mode 100644 index 0000000..9cbcd77 --- /dev/null +++ b/blib-1.1.7/blib/bmovie-gif.h @@ -0,0 +1,42 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2001-2002 The Blinkenlights Crew + * Sven Neumann + * Michael Natterer + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __B_MOVIE_GIF_H__ +#define __B_MOVIE_GIF_H__ + +#include "bmovie.h" + +G_BEGIN_DECLS + +#define B_TYPE_MOVIE_GIF (b_movie_gif_get_type ()) +#define B_MOVIE_GIF(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), B_TYPE_MOVIE_GIF, BMovieGIF)) +#define B_MOVIE_GIF_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), B_TYPE_MOVIE_GIF, BMovieGIFClass)) +#define B_IS_MOVIE_GIF(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), B_TYPE_MOVIE_GIF)) +#define B_IS_MOVIE_GIF_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), B_TYPE_MOVIE_GIF)) + +typedef struct _BMovieClass BMovieGIFClass; +typedef struct _BMovie BMovieGIF; + +GType b_movie_gif_get_type (void) G_GNUC_CONST; + +G_END_DECLS + +#endif /* __B_MOVIE_GIF_H__ */ diff --git a/blib-1.1.7/blib/bmovie.c b/blib-1.1.7/blib/bmovie.c new file mode 100644 index 0000000..a37eb04 --- /dev/null +++ b/blib-1.1.7/blib/bmovie.c @@ -0,0 +1,657 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2001-2002 The Blinkenlights Crew + * Sven Neumann + * Michael Natterer + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include + +#include + +#include "btypes.h" +#include "bmovie.h" +#include "bobject.h" +#include "bparser.h" + +/* it's bad style to include our own subclasses, but... */ +#include "bmovie-blm.h" +#include "bmovie-bml.h" +#include "bmovie-gif.h" + + +static void b_movie_class_init (BMovieClass *class); +static void b_movie_init (BMovie *movie); +static void b_movie_finalize (GObject *object); +static void b_movie_finalize_data (BMovie *movie, + gboolean all); +static void b_movie_nullify_data (BMovie *movie, + gboolean all); +static gboolean b_movie_load_info (BMovie *movie, + GIOChannel *io, + GError **error); +static gboolean b_movie_load_all (BMovie *movie, + GIOChannel *io, + GError **error); +static BMovie * b_movie_new_from_io_channel (GIOChannel *io, + const gchar *filename, + const gchar *name, + gboolean lazy, + GError **error); +static GType b_movie_type_from_io_channel(GIOChannel *io, + GError **error); + + +static BObjectClass *parent_class = NULL; + + +GType +b_movie_get_type (void) +{ + static GType movie_type = 0; + + if (!movie_type) + { + static const GTypeInfo movie_info = + { + sizeof (BMovieClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc) b_movie_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (BMovie), + 0, /* n_preallocs */ + (GInstanceInitFunc) b_movie_init, + }; + + movie_type = g_type_register_static (B_TYPE_OBJECT, + "BMovie", &movie_info, 0); + } + + return movie_type; +} + +static void +b_movie_class_init (BMovieClass *class) +{ + GObjectClass *object_class; + + parent_class = g_type_class_peek_parent (class); + object_class = G_OBJECT_CLASS (class); + + object_class->finalize = b_movie_finalize; + + class->load_info = NULL; + class->load_all = NULL; +} + +static void +b_movie_init (BMovie *movie) +{ + movie->width = 0; + movie->height = 0; + movie->maxval = 0; + movie->channels = 1; + + movie->load_count = 0; + + b_movie_nullify_data (movie, TRUE); +} + +static void +b_movie_finalize (GObject *object) +{ + BMovie *movie = B_MOVIE (object); + + b_movie_finalize_data (movie, TRUE); + + G_OBJECT_CLASS (parent_class)->finalize (object); +} + +static void +b_movie_finalize_data (BMovie *movie, + gboolean all) +{ + BMovieFrame *frame; + GList *list; + + g_return_if_fail (B_IS_MOVIE (movie)); + + if (all) + { + g_free (movie->title); + g_free (movie->description); + g_free (movie->creator); + g_free (movie->author); + g_free (movie->email); + g_free (movie->url); + } + + for (list = movie->frames; list; list = g_list_next (list)) + { + frame = (BMovieFrame *) list->data; + + g_free (frame->data); + g_free (frame); + } + g_list_free (movie->frames); + + b_movie_nullify_data (movie, all); +} + +static void +b_movie_nullify_data (BMovie *movie, + gboolean all) +{ + movie->duration = 0; + movie->n_frames = 0; + movie->frames = NULL; + + if (all) + { + movie->title = NULL; + movie->description = NULL; + movie->creator = NULL; + movie->author = NULL; + movie->email = NULL; + movie->url = NULL; + movie->loop = FALSE; + } +} + +static gboolean +b_movie_load_info (BMovie *movie, + GIOChannel *io, + GError **error) +{ + if (B_MOVIE_GET_CLASS (movie)->load_info) + return B_MOVIE_GET_CLASS (movie)->load_info (movie, io, error); + + g_warning ("b_movie_load_info() unimplemented"); + return FALSE; +} + +static gboolean +b_movie_load_all (BMovie *movie, + GIOChannel *io, + GError **error) +{ + gboolean success = FALSE; + + b_movie_finalize_data (movie, TRUE); + + if (B_MOVIE_GET_CLASS (movie)->load_all) + success = B_MOVIE_GET_CLASS (movie)->load_all (movie, io, error); + else + g_warning ("b_movie_load_all() unimplemented"); + + if (success) + { + if (movie->n_frames > 0) + { + movie->frames = g_list_reverse (movie->frames); + } + else + { + g_set_error (error, 0, 0, + "Couldn't find any valid frames in the input."); + success = FALSE; + } + } + + return success; +} + +/** + * b_movie_new_from_file: + * @filename: the name of the file to load + * @lazy_load: whether to do lazy-loading, i.e. only load the header + * @error: location to store the error occuring, or %NULL to ignore errors + * + * Tries to load a #BMovie from the file pointed to by @filename. If + * @lazy_load is %TRUE, only the header is loaded and no frames are stored. + * + * Return value: a newly allocated #BMovie object or %NULL if the load + * failed + **/ +BMovie * +b_movie_new_from_file (const gchar *filename, + gboolean lazy_load, + GError **error) +{ + BMovie *movie = NULL; + GIOChannel *io; + gchar *name; + + g_return_val_if_fail (filename != NULL, NULL); + g_return_val_if_fail (error == NULL || *error == NULL, NULL); + + name = g_filename_to_utf8 (filename, -1, NULL, NULL, NULL); + + io = g_io_channel_new_file (filename, "r", error); + if (! io) + return NULL; + + g_io_channel_set_encoding (io, NULL, NULL); + + movie = b_movie_new_from_io_channel (io, filename, name, lazy_load, error); + + g_io_channel_unref (io); + + g_free (name); + + return movie; +} + +/** + * b_movie_new_from_fd: + * @fd: a UNIX file descriptor + * @error: location to store the error occuring, or %NULL to ignore errors + * + * Tries to load a #BMovie from the UNIX file descriptor @fd. Lazy + * loading from file descriptors is not implemented since it doesn't + * seem to make much sense. + * + * Return value: a newly allocated #BMovie object or %NULL if the load + * failed + **/ +BMovie * +b_movie_new_from_fd (gint fd, + GError **error) +{ + BMovie *movie = NULL; + GIOChannel *io; + const gchar *name; + + g_return_val_if_fail (error == NULL || *error == NULL, NULL); + + if (fd == 0) + name = ""; + else + name = ""; + + io = g_io_channel_unix_new (fd); + + g_io_channel_set_encoding (io, NULL, NULL); + + movie = b_movie_new_from_io_channel (io, NULL, name, FALSE, error); + + g_io_channel_unref (io); + + return movie; +} + +/** + * b_movie_load: + * @movie: a #BMovie object + * @error: location to store the error occuring, or %NULL to ignore errors + * + * Assures that the frames of the @movie are loaded. + * + * Return value: %TRUE if the movie was loaded successfully. + **/ +gboolean +b_movie_load (BMovie *movie, + GError **error) +{ + g_return_val_if_fail (B_IS_MOVIE (movie), FALSE); + g_return_val_if_fail (error == NULL || *error == NULL, FALSE); + + if (movie->load_count == 0) + { + const gchar *filename; + GIOChannel *io; + gboolean success; + + g_return_val_if_fail (movie->frames == NULL && movie->n_frames == 0, + FALSE); + + filename = b_object_get_filename (B_OBJECT (movie)); + if (!filename) + { + g_set_error (error, 0, 0, + "Cannot load a movie that has no filename"); + return FALSE; + } + + + io = g_io_channel_new_file (filename, "r", error); + if (! io) + return FALSE; + + g_io_channel_set_encoding (io, NULL, NULL); + + success = ((b_movie_type_from_io_channel (io, error) == + G_TYPE_FROM_INSTANCE (movie)) && + b_movie_load_all (movie, io, error)); + + g_io_channel_unref (io); + + if (!success) + return FALSE; + } + + movie->load_count++; + + return TRUE; +} + +/** + * b_movie_unload: + * @movie: a #BMovie object + * + * Unloads the frames of a movie. + * + * The movie object counts how many times you call b_movie_load() and + * b_movie_unload() and only really unloads the frames if + * b_movie_unload() was called as often as b_movie_load(). Note that + * b_movie_new_from_file() and b_movie_new_from_fd() call + * b_movie_load() unless lazy-loading was requested. + **/ +void +b_movie_unload (BMovie *movie) +{ + g_return_if_fail (B_IS_MOVIE (movie)); + g_return_if_fail (movie->load_count > 0); + + movie->load_count--; + + if (movie->load_count == 0) + b_movie_finalize_data (movie, FALSE); +} + +/** + * b_movie_save: + * @movie: a #BMovie object + * @stream: a FILE stream ready for writing + * @error: location to store the error occuring, or %NULL to ignore errors + * + * Saves a #BMovie object to a @stream. + * + * Return value: %TRUE on success or %FALSE otherwise + **/ +gboolean +b_movie_save (BMovie *movie, + FILE *stream, + GError **error) +{ + g_return_val_if_fail (B_IS_MOVIE (movie), FALSE); + g_return_val_if_fail (stream != NULL, FALSE); + g_return_val_if_fail (error == NULL || *error == NULL, FALSE); + + return b_movie_save_as (movie, G_TYPE_FROM_INSTANCE (movie), stream, error); +} + +/** + * b_movie_save_as: + * @movie: a #BMovie object + * @movie_type: the movie type to use for saving + * @stream: a FILE stream ready for writing + * @error: location to store the error occuring, or %NULL to ignore errors + * + * Saves a #BMovie object to a @stream and allows to specify the file + * format to use. + * + * The format is specified by passing a type derived from + * #B_TYPE_MOVIE as @movie_type. At the moment B_TYPE_MOVIE_BML, + * B_TYPE_MOVIE_BLM and B_TYPE_MOVIE_GIF are supported types. + * + * Return value: %TRUE on success or %FALSE otherwise + **/ +gboolean +b_movie_save_as (BMovie *movie, + GType movie_type, + FILE *stream, + GError **error) +{ + BMovieClass *movie_class; + gboolean retval; + + g_return_val_if_fail (B_IS_MOVIE (movie), FALSE); + g_return_val_if_fail (g_type_is_a (movie_type, B_TYPE_MOVIE), FALSE); + g_return_val_if_fail (stream != NULL, FALSE); + g_return_val_if_fail (error == NULL || *error == NULL, FALSE); + + if (! b_movie_load (movie, error)) + return FALSE; + + movie_class = g_type_class_ref (movie_type); + + retval = B_MOVIE_CLASS (movie_class)->save (movie, stream, error); + + g_type_class_unref (movie_class); + + b_movie_unload (movie); + + return retval; +} + +/** + * b_movie_get_frame_at_time: + * @movie: a loaded #BMovie object + * @seed: an optional GList pointer that can speed up the search + * @time: the time in milliseconds + * + * Looks for the frame active after @time milliseconds. + * + * If you are calling this function subsequentially with increasing + * time values, you can speed up the search by passing the last return + * value as the @seed parameter. + * + * Return value: a GList pointer that has the frame as data or %NULL + * if the time was out of the @movie's range. + **/ +GList * +b_movie_get_frame_at_time (BMovie *movie, + GList *seed, + gint time) +{ + BMovieFrame *frame; + GList *list; + + g_return_val_if_fail (B_IS_MOVIE (movie), FALSE); + + if (!movie->frames) + return NULL; + + list = seed ? seed : movie->frames; + + frame = (BMovieFrame *) list->data; + + while (time > frame->start && list->next) + { + list = list->next; + frame = (BMovieFrame *) list->data; + } + + while (list->prev && time <= frame->start) + { + list = list->prev; + frame = (BMovieFrame *) list->data; + } + + return list; +} + +/** + * b_movie_prepend_frame: + * @movie: + * @duration: + * @data: + * + * This is an internal function used by the movie loaders. It should + * never be called from anywhere else. + **/ +void +b_movie_prepend_frame (BMovie *movie, + gint duration, + const guchar *data) +{ + BMovieFrame *frame; + + g_return_if_fail (B_IS_MOVIE (movie)); + g_return_if_fail (data != NULL); + + frame = g_new (BMovieFrame, 1); + + frame->start = movie->duration; + frame->duration = duration; + frame->data = g_memdup (data, + movie->width * movie->height * movie->channels); + + movie->frames = g_list_prepend (movie->frames, frame); + movie->n_frames++; + movie->duration += duration; +} + +static BMovie * +b_movie_new_from_io_channel (GIOChannel *io, + const gchar *filename, + const gchar *name, + gboolean lazy, + GError **error) +{ + BMovie *movie; + GType movie_type; + gboolean success; + + movie_type = b_movie_type_from_io_channel (io, error); + + if (movie_type == G_TYPE_NONE) + { + if (error && !*error) + g_set_error (error, 0, 0, "Unknown file type"); + return NULL; + } + + movie = B_MOVIE (g_object_new (movie_type, + "filename", filename, + "name", name, + NULL)); + + if (lazy) + { + success = b_movie_load_info (movie, io, error); + } + else + { + success = b_movie_load_all (movie, io, error); + movie->load_count++; + } + + if (!success) + { + g_object_unref (movie); + movie = NULL; + } + + if (movie && !movie->title) + movie->title = g_strdup (b_object_get_name (B_OBJECT (movie))); + + return movie; +} + +static GType +b_movie_type_from_io_channel (GIOChannel *io, + GError **error) +{ + GType movie_type = G_TYPE_NONE; + const gchar *magic = NULL; + gsize magic_len = 1; + gsize len = 0; + gchar buf[1024]; + + for (len = 0; len < sizeof (buf); len++) + { + GIOStatus status; + + status = g_io_channel_read_chars (io, buf + len, 1, NULL, error); + + if (status == G_IO_STATUS_ERROR || status == G_IO_STATUS_EOF) + return G_TYPE_NONE; + + if (movie_type == G_TYPE_NONE) + { + switch (buf[len]) + { + case '#': + movie_type = B_TYPE_MOVIE_BLM; + magic = buf + len + 1; + break; + case '<': + movie_type = B_TYPE_MOVIE_BML; + magic = buf + len; + break; + case 'G': + if (len == 0) + movie_type = B_TYPE_MOVIE_GIF; + break; + } + } + else if (movie_type == B_TYPE_MOVIE_BLM) + { + if (magic_len == 1 && buf[len] == ' ') + magic++; + else + magic_len++; + + if (magic_len == 20) + { + if (g_ascii_strncasecmp (magic, "BlinkenLights Movie", 19)) + return G_TYPE_NONE; + else + return B_TYPE_MOVIE_BLM; + } + } + else if (movie_type == B_TYPE_MOVIE_GIF) + { + if (len < 5) + continue; + + if (len == 5 && + (strncmp (buf, "GIF87a", 6) == 0 || + strncmp (buf, "GIF89a", 6) == 0)) + return B_TYPE_MOVIE_GIF; + + return G_TYPE_NONE; + } + else if (movie_type == B_TYPE_MOVIE_BML) + { + magic_len++; + if (magic_len == 5) + { + if (strncmp (magic, " 6 && buf[len-1] == '?' && buf[len] == '>') + { + gboolean ret; + gchar *encoding = b_parse_encoding (magic, magic_len); + + ret = g_io_channel_set_encoding (io, encoding, error); + g_free (encoding); + + return (ret ? B_TYPE_MOVIE_BML : G_TYPE_NONE); + } + } + } + + return G_TYPE_NONE; +} diff --git a/blib-1.1.7/blib/bmovie.h b/blib-1.1.7/blib/bmovie.h new file mode 100644 index 0000000..2813076 --- /dev/null +++ b/blib-1.1.7/blib/bmovie.h @@ -0,0 +1,126 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2001-2002 The Blinkenlights Crew + * Sven Neumann + * Michael Natterer + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __B_MOVIE_H__ +#define __B_MOVIE_H__ + +#include + +#include + +G_BEGIN_DECLS + +#define B_MOVIE_MIN_DELAY 20 +#define B_MOVIE_DEFAULT_DELAY 100 + +#define B_TYPE_MOVIE (b_movie_get_type ()) +#define B_MOVIE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), B_TYPE_MOVIE, BMovie)) +#define B_MOVIE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), B_TYPE_MOVIE, BMovieClass)) +#define B_IS_MOVIE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), B_TYPE_MOVIE)) +#define B_IS_MOVIE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), B_TYPE_MOVIE)) +#define B_MOVIE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), B_TYPE_MOVIE, BMovieClass)) + + +typedef struct _BMovieClass BMovieClass; + +struct _BMovieClass +{ + BObjectClass parent_class; + + gboolean (* load_info) (BMovie *movie, + GIOChannel *io, + GError **error); + gboolean (* load_all) (BMovie *movie, + GIOChannel *io, + GError **error); + gboolean (* save) (BMovie *movie, + FILE *stream, + GError **error); +}; + +struct _BMovie +{ + BObject parent_instance; + + gint width; + gint height; + gint channels; + gint maxval; + + /* movie data */ + gint duration; + gint load_count; + gint n_frames; + GList *frames; + + /* meta data */ + gchar *title; + gchar *description; + gchar *creator; + gchar *author; + gchar *email; + gchar *url; + gboolean loop; +}; + + +typedef struct _BMovieFrame BMovieFrame; + +struct _BMovieFrame +{ + gint start; + gint duration; + guchar *data; +}; + + +GType b_movie_get_type (void) G_GNUC_CONST; +BMovie * b_movie_new_from_file (const gchar *filename, + gboolean lazy_load, + GError **error); +BMovie * b_movie_new_from_fd (gint fd, + GError **error); + +gboolean b_movie_load (BMovie *movie, + GError **error); +void b_movie_unload (BMovie *movie); + +gboolean b_movie_save (BMovie *movie, + FILE *stream, + GError **error); +gboolean b_movie_save_as (BMovie *movie, + GType movie_type, + FILE *stream, + GError **error); + +GList * b_movie_get_frame_at_time (BMovie *movie, + GList *seed, + gint time); + +/* private, should only be used by movie loaders */ +void b_movie_prepend_frame (BMovie *movie, + gint duration, + const guchar *data); + + +G_END_DECLS + +#endif /* __B_MOVIE_H__ */ diff --git a/blib-1.1.7/blib/bmovieplayer.c b/blib-1.1.7/blib/bmovieplayer.c new file mode 100644 index 0000000..a48bed8 --- /dev/null +++ b/blib-1.1.7/blib/bmovieplayer.c @@ -0,0 +1,423 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2002 The Blinkenlights Crew + + Michael Natterer + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include +#include + +#include "btypes.h" +#include "bmodule.h" +#include "bmodule-utils.h" +#include "bmovie.h" +#include "bmovieplayer.h" +#include "bparams.h" + + +enum +{ + PROP_0, + PROP_MOVIE, + PROP_REVERSE, + PROP_CLEAR, + PROP_HALIGN, + PROP_VALIGN +}; + +static void b_movie_player_class_init (BMoviePlayerClass *klass); +static void b_movie_player_init (BMoviePlayer *player); +static void b_movie_player_finalize (GObject *object); +static void b_movie_player_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec); +static gboolean b_movie_player_query (gint width, + gint height, + gint channels, + gint maxval); +static gboolean b_movie_player_prepare (BModule *module, + GError **error); +static void b_movie_player_relax (BModule *module); +static void b_movie_player_start (BModule *module); +static gint b_movie_player_tick (BModule *module); +static void b_movie_player_describe (BModule *module, + const gchar **title, + const gchar **description, + const gchar **author); +static gint b_movie_player_next_frame (BMoviePlayer *player); +static void b_movie_player_request_stop (BModule *module); +static void + b_movie_player_real_request_stop (BModule *module); + + +static BModuleClass *parent_class = NULL; + + +GType +b_movie_player_get_type (void) +{ + static GType player_type = 0; + + if (! player_type) + { + static const GTypeInfo player_info = + { + sizeof (BMoviePlayerClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc) b_movie_player_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (BMoviePlayer), + 0, /* n_preallocs */ + (GInstanceInitFunc) b_movie_player_init, + }; + + player_type = g_type_register_static (B_TYPE_MODULE, + "BMoviePlayer", + &player_info, 0); + } + + return player_type; +} + +static void +b_movie_player_class_init (BMoviePlayerClass *klass) +{ + GObjectClass *object_class; + GParamSpec *param_spec; + BModuleClass *module_class; + + object_class = G_OBJECT_CLASS (klass); + module_class = B_MODULE_CLASS (klass); + + parent_class = g_type_class_peek_parent (klass); + + object_class->set_property = b_movie_player_set_property; + object_class->finalize = b_movie_player_finalize; + + param_spec = b_param_spec_filename ("movie", NULL, + "The filename of the movie to play.", + NULL, + G_PARAM_CONSTRUCT | G_PARAM_WRITABLE); + g_object_class_install_property (object_class, PROP_MOVIE, param_spec); + + param_spec = g_param_spec_boolean ("reverse", NULL, + "Allows to play the movie backwards.", + FALSE, + G_PARAM_CONSTRUCT | G_PARAM_WRITABLE); + g_object_class_install_property (object_class, PROP_REVERSE, param_spec); + + param_spec = g_param_spec_boolean ("clear", NULL, + "Clear the screen before starting.", + TRUE, + G_PARAM_CONSTRUCT | G_PARAM_WRITABLE); + g_object_class_install_property (object_class, PROP_CLEAR, param_spec); + + param_spec = g_param_spec_double ("h-align", NULL, + "Horizontal alignment on the screen.", + 0.0, 1.0, 0.5, + G_PARAM_CONSTRUCT | G_PARAM_WRITABLE); + g_object_class_install_property (object_class, PROP_HALIGN, param_spec); + + param_spec = g_param_spec_double ("v-align", NULL, + "Vertical alignment on the screen.", + 0.0, 1.0, 0.5, + G_PARAM_CONSTRUCT | G_PARAM_WRITABLE); + g_object_class_install_property (object_class, PROP_VALIGN, param_spec); + + module_class->query = b_movie_player_query; + module_class->prepare = b_movie_player_prepare; + module_class->relax = b_movie_player_relax; + module_class->start = b_movie_player_start; + module_class->tick = b_movie_player_tick; + module_class->describe = b_movie_player_describe; + + klass->request_stop = b_movie_player_real_request_stop; +} + +static void +b_movie_player_init (BMoviePlayer *player) +{ + player->current = NULL; +} + +static void +b_movie_player_finalize (GObject *object) +{ + BMoviePlayer *player; + + player = B_MOVIE_PLAYER (object); + + if (player->movie) + { + g_object_unref (G_OBJECT (player->movie)); + player->movie = NULL; + } + if (player->filename) + { + g_free (player->filename); + player->filename = NULL; + } + + G_OBJECT_CLASS (parent_class)->finalize (object); +} + +static void +b_movie_player_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec) +{ + BMoviePlayer *player = B_MOVIE_PLAYER (object); + + switch (property_id) + { + case PROP_MOVIE: + if (player->movie) + { + g_object_unref (player->movie); + player->movie = NULL; + player->current = NULL; + } + + if (player->filename) + g_free (player->filename); + + player->filename = g_value_dup_string (value); + break; + + case PROP_REVERSE: + player->reverse = g_value_get_boolean (value); + break; + + case PROP_CLEAR: + player->clear = g_value_get_boolean (value); + break; + + case PROP_HALIGN: + player->halign = g_value_get_double (value); + break; + + case PROP_VALIGN: + player->valign = g_value_get_double (value); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static gboolean +b_movie_player_query (gint width, + gint height, + gint channels, + gint maxval) +{ + return (width > 0 && height > 0 && channels == 1 && maxval == 255); +} + +static gboolean +b_movie_player_prepare (BModule *module, + GError **error) +{ + BMoviePlayer *player = B_MOVIE_PLAYER (module); + + if (!player->filename) + { + g_set_error (error, 0, 0, "No movie configured."); + return FALSE; + } + + player->current = NULL; + + if (player->movie) + g_object_unref (player->movie); + + player->movie = b_movie_new_from_file (player->filename, FALSE, error); + if (!player->movie) + { + if (error && *error) + { + gchar *tmp = g_strdup_printf ("movie '%s': %s", + player->filename, (*error)->message); + + g_free ((*error)->message); + (*error)->message = tmp; + } + + return FALSE; + } + + if (module->channels != player->movie->channels) + { + g_object_unref (player->movie); + player->movie = NULL; + + g_set_error (error, 0, 0, + "Can't handle movie '%s' with more than one channel.", + player->filename); + return FALSE; + } + + player->xoffset = + (gdouble)(module->width - player->movie->width) * player->halign; + player->yoffset = + (gdouble)(module->height - player->movie->height) * player->valign; + + return TRUE; +} + +static void +b_movie_player_relax (BModule *module) +{ + BMoviePlayer *player = B_MOVIE_PLAYER (module); + + if (player->movie) + { + g_object_unref (player->movie); + player->movie = NULL; + } + + player->current = NULL; +} + +static void +b_movie_player_start (BModule *module) +{ + BMoviePlayer *player = B_MOVIE_PLAYER (module); + gint timeout; + + if (player->clear) + b_module_fill (module, 0); + + timeout = b_movie_player_next_frame (player); + + if (timeout > 0) + b_module_ticker_start (module, timeout); +} + +static gint +b_movie_player_tick (BModule *module) +{ + return b_movie_player_next_frame (B_MOVIE_PLAYER (module)); +} + +static void +b_movie_player_describe (BModule *module, + const gchar **title, + const gchar **description, + const gchar **author) +{ + BMoviePlayer *player = B_MOVIE_PLAYER (module); + BMovie *movie = player->movie; + + if (movie) + { + *title = (movie->title ? + movie->title : b_object_get_name (B_OBJECT (movie))); + *description = movie->description; + *author = movie->author; + } + else + { + B_MODULE_CLASS (parent_class)->describe (module, + title, description, author); + } +} + +static gint +b_movie_player_next_frame (BMoviePlayer *player) +{ + BMovieFrame *frame; + BModule *module; + + do + { + if (player->current) + { + if (player->reverse) + player->current = g_list_previous (player->current); + else + player->current = g_list_next (player->current); + } + else if (player->movie) + { + if (player->reverse) + player->current = g_list_last (player->movie->frames); + else + player->current = g_list_first (player->movie->frames); + } + + if (! player->current) /* movie finished */ + { + b_movie_player_request_stop (B_MODULE (player)); + return 0; + } + + frame = (BMovieFrame *) player->current->data; + } + while (frame->duration <= 0); + + module = B_MODULE (player); + + { + BMovie *movie = B_MOVIE (player->movie); + guchar *s, *d = module->buffer; + gint max = movie->maxval; + gint x, y; + + for (y = 0; y < module->height; y++, d += module->width) + { + if (y - player->yoffset < 0 || y - player->yoffset >= movie->height) + continue; + + s = frame->data + (y - player->yoffset) * movie->width; + + for (x = 0; x < module->width; x++) + { + if (x - player->xoffset < 0 || x - player->xoffset >= movie->width) + continue; + + if (max == 255) + d[x] = s[x - player->xoffset]; + else + d[x] = ((gint) (s[x - player->xoffset]) * 255) / max; + } + } + } + + b_module_paint (module); + + return frame->duration; +} + +static void +b_movie_player_request_stop (BModule *module) +{ + B_MOVIE_PLAYER_GET_CLASS (module)->request_stop (module); +} + +static void +b_movie_player_real_request_stop (BModule *module) +{ + b_module_request_stop (module); +} diff --git a/blib-1.1.7/blib/bmovieplayer.h b/blib-1.1.7/blib/bmovieplayer.h new file mode 100644 index 0000000..a81ba16 --- /dev/null +++ b/blib-1.1.7/blib/bmovieplayer.h @@ -0,0 +1,64 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2002 The Blinkenlights Crew + * Michael Natterer + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __B_MOVIE_PLAYER_H__ +#define __B_MOVIE_PLAYER_H__ + +G_BEGIN_DECLS + + +#define B_TYPE_MOVIE_PLAYER (b_movie_player_get_type ()) +#define B_MOVIE_PLAYER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), B_TYPE_MOVIE_PLAYER, BMoviePlayer)) +#define B_MOVIE_PLAYER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), B_TYPE_MOVIE_PLAYER, BMoviePlayerClass)) +#define B_IS_MOVIE_PLAYER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), B_TYPE_MOVIE_PLAYER)) +#define B_IS_MOVIE_PLAYER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), B_TYPE_MOVIE_PLAYER)) +#define B_MOVIE_PLAYER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), B_TYPE_MOVIE_PLAYER, BMoviePlayerClass)) + +typedef struct _BMoviePlayerClass BMoviePlayerClass; + +struct _BMoviePlayer +{ + BModule parent_instance; + + BMovie *movie; + GList *current; + + gchar *filename; + gboolean reverse; + + gboolean clear; + gdouble halign; + gdouble valign; + gint xoffset; + gint yoffset; +}; + +struct _BMoviePlayerClass +{ + BModuleClass parent_class; + + void (* request_stop) (BModule *module); +}; + +GType b_movie_player_get_type (void) G_GNUC_CONST; + +G_END_DECLS + +#endif /* __B_MOVIE_PLAYER_H__ */ diff --git a/blib-1.1.7/blib/bobject.c b/blib-1.1.7/blib/bobject.c new file mode 100644 index 0000000..cbbdd6c --- /dev/null +++ b/blib-1.1.7/blib/bobject.c @@ -0,0 +1,246 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2001-2002 The Blinkenlights Crew + * Sven Neumann + * Michael Natterer + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include + +#include "btypes.h" +#include "bobject.h" + +enum +{ + PROP_0, + PROP_FILENAME, + PROP_NAME +}; + + +static void b_object_class_init (BObjectClass *class); +static void b_object_init (BObject *object); +static void b_object_finalize (GObject *object); +static void b_object_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec); +static void b_object_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec); + + +static GObjectClass *parent_class = NULL; + + +GType +b_object_get_type (void) +{ + static GType object_type = 0; + + if (!object_type) + { + static const GTypeInfo object_info = + { + sizeof (BObjectClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc) b_object_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (BObject), + 0, /* n_preallocs */ + (GInstanceInitFunc) b_object_init, + }; + + object_type = g_type_register_static (G_TYPE_OBJECT, + "BObject", &object_info, 0); + } + + return object_type; +} + +static void +b_object_class_init (BObjectClass *class) +{ + GObjectClass *object_class; + GParamSpec *param_spec; + + parent_class = g_type_class_peek_parent (class); + object_class = G_OBJECT_CLASS (class); + + object_class->set_property = b_object_set_property; + object_class->get_property = b_object_get_property; + object_class->finalize = b_object_finalize; + + param_spec = g_param_spec_string ("filename", NULL, + "The filename associated with the object. " + "This is a string in the filesystems's " + "encoding.", + NULL, + G_PARAM_READWRITE); + g_object_class_install_property (object_class, PROP_FILENAME, param_spec); + + param_spec = g_param_spec_string ("name", NULL, + "The name associated with the object. " + "This is a string in UTF-8 encoding.", + NULL, + G_PARAM_READWRITE); + g_object_class_install_property (object_class, PROP_NAME, param_spec); +} + +static void +b_object_init (BObject *object) +{ + object->filename = NULL; + object->name = NULL; +} + +static void +b_object_finalize (GObject *object) +{ + BObject *bobject; + + bobject = B_OBJECT (object); + + g_free (bobject->filename); + g_free (bobject->name); + + G_OBJECT_CLASS (parent_class)->finalize (object); +} + +static void +b_object_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec) +{ + switch (property_id) + { + case PROP_FILENAME: + b_object_set_filename (B_OBJECT (object), g_value_get_string (value)); + break; + case PROP_NAME: + b_object_set_name (B_OBJECT (object), g_value_get_string (value)); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static void +b_object_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec) +{ + switch (property_id) + { + case PROP_FILENAME: + g_value_set_string (value, B_OBJECT (object)->filename); + break; + case PROP_NAME: + g_value_set_string (value, B_OBJECT (object)->name); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +/** + * b_object_set_filename: + * @object: a #BObject. + * @filename: the new filename, a nul-terminated string in the filesystem's + * encoding. + * + * Sets the filename associated with @object. + **/ +void +b_object_set_filename (BObject *object, + const gchar *filename) +{ + g_return_if_fail (B_IS_OBJECT (object)); + + g_free (object->filename); + object->filename = g_strdup (filename); + + g_object_notify (G_OBJECT (object), "filename"); +} + +/** + * b_object_set_name: + * @object: a #BObject. + * @name: the new name, a nul-terminated string in UTF-8 encoding. + * + * Sets the name associated with @object. + **/ +void +b_object_set_name (BObject *object, + const gchar *name) +{ + g_return_if_fail (B_IS_OBJECT (object)); + g_return_if_fail (g_utf8_validate (name, -1, NULL)); + + g_free (object->name); + object->name = g_strdup (name); + + g_object_notify (G_OBJECT (object), "name"); +} + +/** + * b_object_get_filename: + * @object: a #BObject. + * + * This functions retrieves the filename associated with @object. The + * returned value must not be freed. + * + * Return value: the fileanme or %NULL if no filename was set for @object. + **/ +const gchar * +b_object_get_filename (BObject *object) +{ + g_return_val_if_fail (B_IS_OBJECT (object), NULL); + + return object->filename; +} + +/** + * b_object_get_name: + * @object: a #BObject. + * + * This functions retrieves the name associated with @object. If no + * name has been set for @object, the name is generated from the + * @object's filename. The returned value must not be freed. + * + * Return value: the name or %NULL if no name and no filename was set + * for @object. + **/ +const gchar * +b_object_get_name (BObject *object) +{ + g_return_val_if_fail (B_IS_OBJECT (object), NULL); + + if (!object->name && object->filename) + object->name = g_filename_to_utf8 (object->filename, -1, NULL, NULL, NULL); + + return object->name; +} diff --git a/blib-1.1.7/blib/bobject.h b/blib-1.1.7/blib/bobject.h new file mode 100644 index 0000000..8cdeed5 --- /dev/null +++ b/blib-1.1.7/blib/bobject.h @@ -0,0 +1,63 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2001-2002 The Blinkenlights Crew + * Sven Neumann + * Michael Natterer + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __B_OBJECT_H__ +#define __B_OBJECT_H__ + +G_BEGIN_DECLS + +#define B_TYPE_OBJECT (b_object_get_type ()) +#define B_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), B_TYPE_OBJECT, BObject)) +#define B_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), B_TYPE_OBJECT, BObjectClass)) +#define B_IS_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), B_TYPE_OBJECT)) +#define B_IS_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), B_TYPE_OBJECT)) +#define B_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), B_TYPE_OBJECT, BObjectClass)) + + +typedef struct _BObjectClass BObjectClass; + +struct _BObjectClass +{ + GObjectClass parent_class; +}; + +struct _BObject +{ + GObject parent_instance; + + gchar *filename; /* in filesystem encoding */ + gchar *name; /* UTF-8 encoded, defaults to converted filename */ +}; + + +GType b_object_get_type (void) G_GNUC_CONST; + +void b_object_set_filename (BObject *object, + const gchar *filename); +void b_object_set_name (BObject *object, + const gchar *name); + +const gchar * b_object_get_filename (BObject *object); +const gchar * b_object_get_name (BObject *object); + +G_END_DECLS + +#endif /* __B_OBJECT_H__ */ diff --git a/blib-1.1.7/blib/bpacket.c b/blib-1.1.7/blib/bpacket.c new file mode 100644 index 0000000..7e7211f --- /dev/null +++ b/blib-1.1.7/blib/bpacket.c @@ -0,0 +1,181 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (C) 2002 The Blinkenlights Crew + * Sven Neumann + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include + +#include "btypes.h" +#include "bpacket.h" + + +/** + * b_packet_new: + * @width: the number of pixels per row + * @height: the number of pixels per column + * @channels: the number of channels per pixels + * @maxval: the maximum value + * @data_size: returns the size of the packet data + * + * Allocates a new #BPacket structure and initializes it with the + * given values. If @data_size is non-NULL the size of the data area + * (in bytes) is returned via this variable. + * + * The packet should be freed with g_free() when it is not needed any + * longer. + * + * Return value: a newly allocated #BPacket. + **/ +BPacket * +b_packet_new (gint width, + gint height, + gint channels, + gint maxval, + gint *data_size) +{ + BPacket *packet; + gint size; + + g_return_val_if_fail (width > 0, NULL); + g_return_val_if_fail (height > 0, NULL); + g_return_val_if_fail (channels > 0, NULL); + g_return_val_if_fail (maxval > 0 && maxval <= 255, NULL); + + size = width * height * channels; + + packet = (BPacket *) g_new0 (guchar, sizeof (BPacket) + size); + + packet->header.mcu_frame_h.magic = MAGIC_MCU_FRAME; + packet->header.mcu_frame_h.width = width; + packet->header.mcu_frame_h.height = height; + packet->header.mcu_frame_h.channels = channels; + packet->header.mcu_frame_h.maxval = maxval; + + if (data_size) + *data_size = size; + + return packet; +} + +gsize +b_packet_size (BPacket *packet) +{ + guint32 *magic; + + g_return_val_if_fail (packet != NULL, 0); + + magic = (guint32 *) packet; + + switch (*magic) + { + case MAGIC_MCU_FRAME: + { + mcu_frame_header_t *header = &packet->header.mcu_frame_h; + + return (sizeof (BPacket) + + header->width * header->height * header->channels); + } + + default: + return (sizeof (BPacket)); + } +} + + +/* byte order conversions */ + +/** + * b_packet_hton: + * @packet: pointer to a #BPacket + * + * Converts all members of @packet from host to network byteorder. + **/ +void +b_packet_hton (BPacket *packet) +{ + guint32 *magic = (guint32 *) packet; + + switch (*magic) + { + case MAGIC_MCU_FRAME: + { + mcu_frame_header_t *header = &packet->header.mcu_frame_h; + + header->magic = g_htonl (header->magic); + header->width = g_htons (header->width); + header->height = g_htons (header->height); + header->channels = g_htons (header->channels); + header->maxval = g_htons (header->maxval); + } + break; + + case MAGIC_HEARTBEAT: + { + heartbeat_header_t *header = &packet->header.heartbeat_h; + + header->magic = g_htonl (header->magic); + header->version = g_htons (header->version); + } + break; + + default: + *magic = g_htonl (magic); + break; + } +} + +/** + * b_packet_ntoh: + * @packet: pointer to a #BPacket + * + * Converts all members of @packet from network to host byteorder. + **/ +void +b_packet_ntoh (BPacket *packet) +{ + guint32 *magic = (guint32 *) packet; + + *magic = g_ntohl (*magic); + + switch (*magic) + { + case MAGIC_MCU_FRAME: + { + mcu_frame_header_t *header = &packet->header.mcu_frame_h; + + header->width = g_ntohs (header->width); + header->height = g_ntohs (header->height); + header->channels = g_ntohs (header->channels); + header->maxval = g_ntohs (header->maxval); + } + break; + + case MAGIC_HEARTBEAT: + { + heartbeat_header_t *header = &packet->header.heartbeat_h; + + header->version = g_ntohs (header->version); + } + break; + + default: + break; + } +} diff --git a/blib-1.1.7/blib/bpacket.h b/blib-1.1.7/blib/bpacket.h new file mode 100644 index 0000000..f837c3b --- /dev/null +++ b/blib-1.1.7/blib/bpacket.h @@ -0,0 +1,52 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (C) 2002 The Blinkenlights Crew + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __B_PACKET_H__ +#define __B_PACKET_H__ + +#include "blib/bprotocol.h" + +G_BEGIN_DECLS + +typedef union _BPacketHeader BPacketHeader; + +union _BPacketHeader +{ + mcu_frame_header_t mcu_frame_h; + heartbeat_header_t heartbeat_h; +}; + +struct _BPacket +{ + BPacketHeader header; + guchar data[0]; +}; + +BPacket * b_packet_new (gint width, + gint height, + gint channels, + gint maxval, + gint *data_size); +gsize b_packet_size (BPacket *packet); +void b_packet_hton (BPacket *packet); +void b_packet_ntoh (BPacket *packet); + +G_END_DECLS + +#endif /* __B_PACKET_H__ */ diff --git a/blib-1.1.7/blib/bparams.c b/blib-1.1.7/blib/bparams.c new file mode 100644 index 0000000..b153638 --- /dev/null +++ b/blib-1.1.7/blib/bparams.c @@ -0,0 +1,87 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (C) 2002 The Blinkenlights Crew + * Sven Neumann + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include + +#include "btypes.h" +#include "bparams.h" + +static void b_param_filename_class_init (GParamSpecClass *class); + +GType +b_param_filename_get_type (void) +{ + static GType spec_type = 0; + + if (!spec_type) + { + static const GTypeInfo type_info = + { + sizeof (GParamSpecClass), + NULL, NULL, + (GClassInitFunc) b_param_filename_class_init, + NULL, NULL, + sizeof (GParamSpecString), + 0, NULL, NULL + }; + + spec_type = g_type_register_static (G_TYPE_PARAM_STRING, + "BParamFilename", &type_info, 0); + } + + return spec_type; +} + +static void +b_param_filename_class_init (GParamSpecClass *class) +{ + class->value_type = B_TYPE_FILENAME; +} + +/** + * b_param_spec_filename: + * @name: the property name + * @nick: an optional short version of the name + * @blurb: an optional description + * @default_value: the default value (may be %NULL) + * @flags: the #GParamFlags for this param_spec + * + * Creates a new #GParamSpec for a #B_TYPE_FILENAME property. + * + * Return value: the newly allocate #GParamSpec. + **/ +GParamSpec * +b_param_spec_filename (const gchar *name, + const gchar *nick, + const gchar *blurb, + gchar *default_value, + GParamFlags flags) +{ + GParamSpecString *pspec; + + pspec = g_param_spec_internal (B_TYPE_PARAM_FILENAME, + name, nick, blurb, flags); + + pspec->default_value = default_value; + + return G_PARAM_SPEC (pspec); +} diff --git a/blib-1.1.7/blib/bparams.h b/blib-1.1.7/blib/bparams.h new file mode 100644 index 0000000..cacf4d6 --- /dev/null +++ b/blib-1.1.7/blib/bparams.h @@ -0,0 +1,33 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (C) 2002 The Blinkenlights Crew + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __B_PARAMS_H__ +#define __B_PARAMS_H__ + +#define B_TYPE_PARAM_FILENAME (b_param_filename_get_type ()) +#define B_IS_PARAM_SPEC_FILENAME(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), B_TYPE_PARAM_FILENAME)) + +GType b_param_filename_get_type (void) G_GNUC_CONST; +GParamSpec * b_param_spec_filename (const gchar *name, + const gchar *nick, + const gchar *blurb, + gchar *default_value, + GParamFlags flags); + +#endif /* __B_PARAMS_H__ */ diff --git a/blib-1.1.7/blib/bparser.c b/blib-1.1.7/blib/bparser.c new file mode 100644 index 0000000..f2ca07f --- /dev/null +++ b/blib-1.1.7/blib/bparser.c @@ -0,0 +1,466 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (C) 2002 The Blinkenlights Crew + * Sven Neumann + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include +#include + +#include + +#include "btypes.h" +#include "bparser.h" + + +struct _BParser +{ + GMarkupParseContext *context; + BParserState state; + BParserState last_state; + gint unknown_depth; + GString *cdata; + gpointer user_data; + BParserStartFunc start_element; + BParserEndFunc end_element; +}; + + +static void parser_start_element (GMarkupParseContext *context, + const gchar *element_name, + const gchar **attribute_names, + const gchar **attribute_values, + gpointer user_data, + GError **error); +static void parser_end_element (GMarkupParseContext *context, + const gchar *element_name, + gpointer user_data, + GError **error); +static void parser_text (GMarkupParseContext *context, + const gchar *text, + gsize text_len, + gpointer user_data, + GError **error); +static void parser_start_unknown (BParser *parser); +static void parser_end_unknown (BParser *parser); + + +static const GMarkupParser markup_parser = +{ + parser_start_element, + parser_end_element, + parser_text, + NULL, /* passthrough */ + NULL, /* error */ +}; + + +/** + * b_parser_new: + * @start_element: the function to call when an element is started + * @end_element: the function to call when an element is closed + * @user_data: data to pass to the functions above + * + * Creates a new #BParser suited to parse XML files. The #BParser + * should later be freed using b_parser_free(). + * + * Return value: a newly allocated #BParser + **/ +BParser * +b_parser_new (BParserStartFunc start_element, + BParserEndFunc end_element, + gpointer user_data) +{ + BParser *parser; + + parser = g_new0 (BParser, 1); + + parser->context = g_markup_parse_context_new (&markup_parser, + 0, parser, NULL); + + parser->state = B_PARSER_STATE_TOPLEVEL; + parser->cdata = g_string_new (NULL); + parser->user_data = user_data; + + parser->start_element = start_element; + parser->end_element = end_element; + + return parser; +} + +/** + * b_parser_parse: + * @parser: a #BParser + * @text: pointer to a text buffer to parse + * @text_len: the number of bytes to parse from @text + * @error: location to store the error occuring, or %NULL to ignore errors + * + * Let the @parser process a chunk of @text. You need to call + * b_parser_end_parse() after you passed the last chunk to the @parser. + * + * Return value: %TRUE if parsing was successful, %FALSE if an error occured + **/ +gboolean +b_parser_parse (BParser *parser, + const gchar *text, + gssize text_len, + GError **error) +{ + g_return_val_if_fail (parser != NULL, FALSE); + g_return_val_if_fail (error == NULL || *error == NULL, FALSE); + + return g_markup_parse_context_parse (parser->context, text, text_len, error); +} + +/** + * b_parser_end_parse: + * @parser: a #BParser + * @error: location to store the error occuring, or %NULL to ignore errors + * + * Finishes the @parser. After calling this function, you must not + * call b_parser_parse() on the parser again. + * + * Return value: %TRUE if @parser was successfully finished, %FALSE + * otherwise + **/ +gboolean +b_parser_end_parse (BParser *parser, + GError **error) +{ + g_return_val_if_fail (parser != NULL, FALSE); + g_return_val_if_fail (error == NULL || *error == NULL, FALSE); + + return g_markup_parse_context_end_parse (parser->context, error); +} + +/** + * b_parser_parse_io_channel: + * @parser: a #BParser + * @io: a #GIOChannel to read the text to parse from + * @recode: %TRUE if you want the parser to do automatic encoding conversion + * @error: location to store the error occuring, or %NULL to ignore errors + * + * Reads data from the #GIOChannel @io and passes it to @parser. If + * @recode is TRUE, the data should start with an XML header so this + * function can determine the encoding of the XML data and convert it + * to UTF-8 for you. + * + * Return value: %TRUE if parsing was successful, %FALSE otherwise + **/ +gboolean +b_parser_parse_io_channel (BParser *parser, + GIOChannel *io, + gboolean recode, + GError **error) +{ + GIOStatus status; + guchar buffer[8192]; + gsize len = 0; + gsize bytes; + + g_return_val_if_fail (parser != NULL, FALSE); + g_return_val_if_fail (io != NULL, FALSE); + g_return_val_if_fail (error == NULL || *error == NULL, FALSE); + + if (recode) + { + const gchar *io_encoding = g_io_channel_get_encoding (io); + gchar *encoding = NULL; + + if (io_encoding && strcmp (io_encoding, "UTF-8")) + { + g_warning ("b_parser_parse_io_channel(): " + "The encoding has already been set on this IOChannel!"); + return FALSE; + } + + /* try to determine the encoding */ + + g_io_channel_set_encoding (io, NULL, NULL); + + while (len < sizeof (buffer) && !encoding) + { + status = g_io_channel_read_chars (io, + buffer + len, 1, &bytes, error); + len += bytes; + + if (status == G_IO_STATUS_ERROR) + return FALSE; + if (status == G_IO_STATUS_EOF) + break; + + encoding = b_parse_encoding (buffer, len); + } + + if (encoding) + { + if (!g_io_channel_set_encoding (io, encoding, error)) + return FALSE; + + g_free (encoding); + } + else + { + g_io_channel_set_encoding (io, "UTF-8", NULL); + } + } + + while (TRUE) + { + if (!b_parser_parse (parser, buffer, len, error)) + return FALSE; + + status = g_io_channel_read_chars (io, + buffer, sizeof(buffer), &len, error); + + switch (status) + { + case G_IO_STATUS_ERROR: + return FALSE; + case G_IO_STATUS_EOF: + return b_parser_end_parse (parser, error); + case G_IO_STATUS_NORMAL: + case G_IO_STATUS_AGAIN: + break; + } + } +} + +/** + * b_parser_free: + * @parser: a #BParser + * + * Frees the resources allocated for @parser. You must not access + * @parser after calling this function. + **/ +void +b_parser_free (BParser *parser) +{ + g_return_if_fail (parser != NULL); + + g_markup_parse_context_free (parser->context); + + g_string_free (parser->cdata, TRUE); + g_free (parser); +} + +/** + * b_parser_get_state: + * @parser: a #BParser + * + * Retrieves the current state of @parser. + * + * Return value: the state of @parser + **/ +BParserState +b_parser_get_state (BParser *parser) +{ + g_return_val_if_fail (parser != NULL, B_PARSER_STATE_UNKNOWN); + + return parser->state; +} + +static void +parser_start_element (GMarkupParseContext *context, + const gchar *element_name, + const gchar **attribute_names, + const gchar **attribute_values, + gpointer user_data, + GError **error) +{ + BParserState new_state; + BParser *parser = (BParser *) user_data; + + switch (parser->state) + { + case B_PARSER_STATE_TOPLEVEL: + default: + if (parser->start_element && + (new_state = parser->start_element (parser->state, + element_name, + attribute_names, + attribute_values, + parser->user_data, + error))) + { + parser->last_state = parser->state; + parser->state = new_state; + break; + } + /* else fallthru */ + case B_PARSER_STATE_UNKNOWN: + parser_start_unknown (parser); + break; + } + + g_string_truncate (parser->cdata, 0); +} + +static void +parser_end_element (GMarkupParseContext *context, + const gchar *element_name, + gpointer user_data, + GError **error) +{ + BParser *parser = (BParser *) user_data; + + switch (parser->state) + { + case B_PARSER_STATE_TOPLEVEL: + g_assert_not_reached (); + break; + + default: + if (parser->end_element) + { + gint len; + + /* strip trailing spaces */ + for (len = parser->cdata->len; + len > 0 && g_ascii_isspace (parser->cdata->str[len-1]); + len--) + ; /* do nothing */ + + g_string_truncate (parser->cdata, len); + + parser->state = parser->end_element (parser->state, + element_name, + parser->cdata->str, + parser->cdata->len, + parser->user_data, + error); + break; + } + /* else fallthru */ + case B_PARSER_STATE_UNKNOWN: + parser_end_unknown (parser); + break; + } + + g_string_truncate (parser->cdata, 0); +} + +static void +parser_text (GMarkupParseContext *context, + const gchar *text, + gsize text_len, + gpointer user_data, + GError **error) +{ + BParser *parser = (BParser *) user_data; + gboolean space; + gint i; + + space = (parser->cdata->len == 0 || + g_ascii_isspace (parser->cdata->str[parser->cdata->len])); + + for (i = 0; i < text_len; i++) + { + if (g_ascii_isspace (text[i])) + { + if (space) + continue; + space = TRUE; + } + else + { + space = FALSE; + } + + g_string_append_c (parser->cdata, text[i]); + } +} + +static void +parser_start_unknown (BParser *parser) +{ + if (parser->unknown_depth == 0) + { + parser->last_state = parser->state; + parser->state = B_PARSER_STATE_UNKNOWN; + } + + parser->unknown_depth++; +} + +static void +parser_end_unknown (BParser *parser) +{ + parser->unknown_depth--; + + if (parser->unknown_depth == 0) + parser->state = parser->last_state; +} + +/** + * b_parse_encoding: + * @text: a string to parse, must be at least 20 bytes + * @text_len: the maximum number of bytes to parse from @text + * + * Scans the @text for an XML header with encoding specification. + * + * Return value: a copy of the encoding string or %NULL if none was + * found + **/ +gchar * +b_parse_encoding (const gchar *text, + gint text_len) +{ + const gchar *start; + const gchar *end; + gint i; + + g_return_val_if_fail (text, NULL); + + if (text_len < 20) + return NULL; + + start = g_strstr_len (text, text_len, ""); + if (!end) + return NULL; + + text_len = end - start; + if (text_len < 12) + return NULL; + + start = g_strstr_len (start + 1, text_len - 1, "encoding="); + if (!start) + return NULL; + + start += 9; + if (*start != '\"' && *start != '\'') + return NULL; + + text_len = end - start; + if (text_len < 1) + return NULL; + + for (i = 1; i < text_len; i++) + if (start[i] == start[0]) + break; + + if (i == text_len || i < 3) + return NULL; + + return g_strndup (start + 1, i - 1); +} diff --git a/blib-1.1.7/blib/bparser.h b/blib-1.1.7/blib/bparser.h new file mode 100644 index 0000000..6afc35b --- /dev/null +++ b/blib-1.1.7/blib/bparser.h @@ -0,0 +1,79 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (C) 2002 The Blinkenlights Crew + * Sven Neumann + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __B_PARSER_H__ +#define __B_PARSER_H__ + +G_BEGIN_DECLS + +typedef enum +{ + B_PARSER_STATE_UNKNOWN, + B_PARSER_STATE_TOPLEVEL, + B_PARSER_STATE_USER = 0x10 /* first user state, use as many as you need */ +} BParserState; + + +/* Called for open tags , returns the new state or + B_PARSER_STATE_UNKNOWN if it couldn't handle the tag. */ +typedef BParserState (* BParserStartFunc) (BParserState state, + const gchar *element_name, + const gchar **attribute_names, + const gchar **attribute_values, + gpointer user_data, + GError **error); + /* Called for close tags , returns the new state. */ +typedef BParserState (* BParserEndFunc) (BParserState state, + const gchar *element_name, + const gchar *cdata, + gsize cdata_len, + gpointer user_data, + GError **error); + + + +BParser *b_parser_new (BParserStartFunc start_element, + BParserEndFunc end_element, + gpointer user_data); +void b_parser_free (BParser *parser); + +/* chunk parsing API */ +gboolean b_parser_parse (BParser *parser, + const gchar *text, + gssize text_len, + GError **error); +gboolean b_parser_end_parse (BParser *parser, + GError **error); + +/* convenience function for IO channels */ +gboolean b_parser_parse_io_channel (BParser *parser, + GIOChannel *io, + gboolean recode, + GError **error); + +BParserState b_parser_get_state (BParser *parser); + +/* parses an XML header */ +gchar * b_parse_encoding (const gchar *text, + gint text_len); + +G_END_DECLS + +#endif /* __B_PARSER_H__ */ diff --git a/blib-1.1.7/blib/bprotocol.h b/blib-1.1.7/blib/bprotocol.h new file mode 100644 index 0000000..b6d45b3 --- /dev/null +++ b/blib-1.1.7/blib/bprotocol.h @@ -0,0 +1,151 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2001-2003 The Blinkenlights Crew + * Tim Pritlove + * Sven Neumann + * Michael Natterer + * Daniel Mack + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __B_PROTOCOL_H__ +#define __B_PROTOCOL_H__ + +#define MAGIC_MCU_SETUP 0x2342FEED /* MCU Configuration packet */ +#define MAGIC_MCU_FRAME 0x23542666 /* MCU Frame packet */ +#define MAGIC_MCU_DEVCTRL 0x23542667 /* MCU Device Control packet */ + +#define MAGIC_BLFRAME 0xDEADBEEF /* Original BL Frame Packet */ +#define MAGIC_BLFRAME_256 0xFEEDBEEF /* Extendend BL Frame Packet (Greyscale) */ + +#define MAGIC_HEARTBEAT 0x42424242 /* Heartbeat packet */ + +#define MCU_LISTENER_PORT 2323 +#define MCU_ID_ANY -1 + +#define B_HEARTBEAT_PORT 4242 +#define B_HEARTBEAT_INTERVAL 5000 /* Heartbeat interval in ms */ + +/***********************************************************/ + +/* + * Legacy Blinkenlights bl_frame format + */ + +typedef struct bl_frame_header bl_frame_header_t; + +struct bl_frame_header +{ + guint32 frame_magic; /* == MAGIC_BLFRAME */ + guint32 frame_count; + guint16 frame_width; + guint16 frame_height; + /* + * followed by + * unsigned char data[rows][columns]; + */ +}; + +/***********************************************************/ + +/* + * MCU Frame packet + */ + +typedef struct mcu_frame_header mcu_frame_header_t; + +struct mcu_frame_header +{ + guint32 magic; /* == MAGIC_MCU_FRAME */ + guint16 height; /* rows */ + guint16 width; /* columns */ + guint16 channels; /* Number of channels (mono/grey: 1, rgb: 3) */ + guint16 maxval; /* maximum pixel value (only 8 bits used) */ + /* + * followed by + * unsigned char data[rows][columns][channels]; + */ +}; + + +/* + * MCU Setup packet + */ + +typedef struct mcu_setup_pixel mcu_setup_pixel_t; + +struct mcu_setup_pixel +{ + unsigned char row; + unsigned char column; +}; + + +typedef struct mcu_setup_header mcu_setup_header_t; + +struct mcu_setup_header +{ + guint32 magic; /* == MAGIC_MCU_SETUP */ + + char mcu_id; /* target MCU id ( -1 = any) */ + unsigned char _reserved[3]; /* padding */ + + guint16 height; + guint16 width; + guint16 channels; + + guint16 pixels; /* number of ports used (starting from 0) */ + /* + * followed by + * mcu_setup_pixel_t pixel[pixels]; + */ +}; + + +/* + * MCU Device Control packet + */ + +#define MCU_DEVCTRL_OFF 0 /* switch device off */ +#define MCU_DEVCTRL_ON 1 /* switch device on */ + +typedef struct mcu_devctrl_header mcu_devctrl_header_t; + +struct mcu_devctrl_header +{ + guint32 magic; /* == MAGIC_MCU_DEVCTRL */ + guint16 pixels; /* number of pixels used (starting from 0) */ + guint16 _reserved; /* 32 bit padding */ + /* + * followed by + * unsigned char control[pixels]; + */ +}; + +/* + * Heartbeat Packet + */ + +typedef struct heartbeat_header heartbeat_header_t; + +struct heartbeat_header +{ + guint32 magic; /* == MAGIC_HEARTBEAT */ + guint16 version; /* hearbeat protocol version number (0) */ +}; + + +#endif /* __B_PROTOCOL_H__ */ diff --git a/blib-1.1.7/blib/bproxyclient.c b/blib-1.1.7/blib/bproxyclient.c new file mode 100644 index 0000000..cd3348f --- /dev/null +++ b/blib-1.1.7/blib/bproxyclient.c @@ -0,0 +1,233 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2001-2003 The Blinkenlights Crew + * Sven Neumann + * Michael Natterer + * Daniel Mack + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include +#include +#include +#include + +#ifdef HAVE_UNISTD_H +#include +#endif + +#include + +#ifdef G_OS_WIN32 +#include +#else +#include +#include +#include +#include +#endif + +#include "btypes.h" +#include "bpacket.h" +#include "bproxyclient.h" +#include "breceiver.h" +#include "bsocket.h" + + +static void b_proxy_client_class_init (BProxyClientClass *class); +static void b_proxy_client_init (BProxyClient *client); +static void b_proxy_client_finalize (GObject *object); + + +static GObjectClass *parent_class = NULL; + + +GType +b_proxy_client_get_type (void) +{ + static GType client_type = 0; + + if (!client_type) + { + static const GTypeInfo client_info = + { + sizeof (BProxyClientClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc) b_proxy_client_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (BProxyClient), + 0, /* n_preallocs */ + (GInstanceInitFunc) b_proxy_client_init, + }; + + client_type = g_type_register_static (B_TYPE_RECEIVER, + "BProxyClient", &client_info, 0); + } + + return client_type; +} + +static void +b_proxy_client_class_init (BProxyClientClass *class) +{ + GObjectClass *object_class; + + parent_class = g_type_class_peek_parent (class); + object_class = G_OBJECT_CLASS (class); + + object_class->finalize = b_proxy_client_finalize; +} + +static void +b_proxy_client_init (BProxyClient *client) +{ + client->fd = -1; +} + +static void +b_proxy_client_finalize (GObject *object) +{ + BProxyClient *client = B_PROXY_CLIENT (object); + + if (client->fd != -1) + { + close (client->fd); + client->fd = -1; + } + + G_OBJECT_CLASS (parent_class)->finalize (object); +} + +/** + * b_proxy_client_new: + * @proxy_host: the blinkenproxy host + * @proxy_port: the blinkenproxy port + * @listen_port: the local port to listen to for Blinkenlights packages + * or -1 to bind to an arbitrary free local port + * @callback: the function to call when a new frame arrives + * @callback_data: data to pass to the @callback + * @error: return location for a possible error + * + * Creates a new #BProxyClient object, ready to use. + * + * Return value: a newly allocate #BProxyClient object + **/ +BProxyClient * +b_proxy_client_new (const gchar *proxy_host, + gint proxy_port, + gint listen_port, + BReceiverCallback callback, + gpointer callback_data, + GError **error) +{ + BProxyClient *client; + struct hostent *dest; + struct sockaddr_in sock; + gint fd; + + g_return_val_if_fail (proxy_host != NULL && proxy_host != '\0', NULL); + g_return_val_if_fail (proxy_port > 0, NULL); + g_return_val_if_fail (error == NULL || *error == NULL, FALSE); + + if (! b_socket_init (error)) + return NULL; + + dest = gethostbyname (proxy_host); + if (dest == NULL) + { + g_set_error (error, 0, 0, "Unable to resolve host '%s'", proxy_host); + return NULL; + } + + fd = b_socket_udp_new (B_SO_REUSEADDR, error); + if (fd < 0) + return NULL; + + if (listen_port > 0) + { + sock.sin_addr.s_addr = INADDR_ANY; + sock.sin_family = AF_INET; + sock.sin_port = g_htons (listen_port); + + if (bind (fd, (struct sockaddr *) &sock, sizeof (sock)) < 0) + { + g_set_error (error, 0, 0, + "Can't bind socket for %s to local port %d: %s\n", + proxy_host, listen_port, g_strerror (errno)); + close (fd); + return NULL; + } + } + + sock.sin_family = AF_INET; + sock.sin_port = g_htons (proxy_port); + memcpy (&sock.sin_addr.s_addr, dest->h_addr_list[0], dest->h_length); + + if (connect (fd, (struct sockaddr *) &sock, sizeof (sock)) < 0) + { + g_set_error (error, 0, 0, "Can't connect socket to %s:%d: %s\n", + proxy_host, proxy_port, g_strerror (errno)); + close (fd); + return NULL; + } + + client = g_object_new (B_TYPE_PROXY_CLIENT, + "callback", callback, + "callback_data", callback_data, + NULL); + + client->fd = fd; + + b_receiver_listen_fd (B_RECEIVER (client), fd); + + return client; +} + +/** + * b_proxy_client_send_heartbeat: + * @client: a #BProxyClient + * + * Make the @client send a heartbeat packet. This function should + * be called periodically with the suggested interval of + * %B_HEARTBEAT_INTERVAL. To achieve, use this function with + * g_timeout_add(). + * + * Return value: always %TRUE + **/ +gboolean +b_proxy_client_send_heartbeat (BProxyClient *client) +{ + BPacket packet; + + g_return_val_if_fail (B_IS_PROXY_CLIENT (client), FALSE); + + if (client->fd == -1) + return TRUE; + + memset (&packet, 0, sizeof (BPacket)); + + packet.header.heartbeat_h.magic = MAGIC_HEARTBEAT; + + b_packet_hton (&packet); + + send (client->fd, &packet, sizeof (BPacket), 0); + + return TRUE; +} diff --git a/blib-1.1.7/blib/bproxyclient.h b/blib-1.1.7/blib/bproxyclient.h new file mode 100644 index 0000000..ee00a42 --- /dev/null +++ b/blib-1.1.7/blib/bproxyclient.h @@ -0,0 +1,64 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2001-2003 The Blinkenlights Crew + * Sven Neumann + * Michael Natterer + * Daniel Mack + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + + +#ifndef __B_PROXY_CLIENT_H__ +#define __B_PROXY_CLIENT_H__ + +G_BEGIN_DECLS + +#include + +#define B_TYPE_PROXY_CLIENT (b_proxy_client_get_type ()) +#define B_PROXY_CLIENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), B_TYPE_PROXY_CLIENT, BProxyClient)) +#define B_PROXY_CLIENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), B_TYPE_PROXY_CLIENT, BProxyClientClass)) +#define B_IS_PROXY_CLIENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), B_TYPE_PROXY_CLIENT)) +#define B_IS_PROXY_CLIENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), B_TYPE_PROXY_CLIENT)) +#define B_PROXY_CLIENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), B_TYPE_PROXY_CLIENT, BProxyClientClass)) + + +typedef struct _BProxyClientClass BProxyClientClass; + +struct _BProxyClientClass +{ + BReceiverClass parent_class; +}; + +struct _BProxyClient +{ + BReceiver parent_instance; + + gint fd; +}; + +GType b_proxy_client_get_type (void) G_GNUC_CONST; +BProxyClient * b_proxy_client_new (const gchar *proxy_host, + gint proxy_port, + gint listen_port, + BReceiverCallback callback, + gpointer callback_data, + GError **error); +gboolean b_proxy_client_send_heartbeat (BProxyClient *client); + +G_END_DECLS + +#endif /* __B_PROXY_CLIENT_H__ */ diff --git a/blib-1.1.7/blib/bproxyserver.c b/blib-1.1.7/blib/bproxyserver.c new file mode 100644 index 0000000..cbda688 --- /dev/null +++ b/blib-1.1.7/blib/bproxyserver.c @@ -0,0 +1,370 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2001-2004 The Blinkenlights Crew + * Sven Neumann + * Michael Natterer + * Daniel Mack + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include +#include +#include +#include + +#ifdef HAVE_UNISTD_H +#include +#endif + +#include + +#ifdef G_OS_WIN32 +#include +#else +#include +#include +#include +#include +#endif + +#include "btypes.h" +#include "bmarshal.h" +#include "bpacket.h" +#include "bproxyserver.h" +#include "breceiver.h" +#include "bsocket.h" + + +#define HEARTBEAT_TIMEOUT (B_HEARTBEAT_INTERVAL * 12) + +enum +{ + CLIENT_ADDED, + CLIENT_REMOVED, + LAST_SIGNAL +}; + +typedef struct +{ + BProxyServer *server; + gulong addr; + gushort port; + GSource *timeout; +} BClient; + + +static void b_proxy_server_class_init (BProxyServerClass *klass); +static void b_proxy_server_init (BProxyServer *server); +static void b_proxy_server_finalize (GObject *object); + +static gboolean b_proxy_server_heartbeat_callback (BProxyServer *server, + BPacket *packet, + gpointer data); + +static guint b_client_hash (const BClient *client); +static gboolean b_client_equal (const BClient *a, + const BClient *b); +static void b_client_add (const BClient *template); +static gboolean b_client_remove (BClient *client); + +static void b_client_send_packet (gpointer key, + BClient *client, + BPacket *packet); + + +static guint server_signals[LAST_SIGNAL] = { 0 }; +static GObjectClass *parent_class = NULL; + + +GType +b_proxy_server_get_type (void) +{ + static GType server_type = 0; + + if (!server_type) + { + static const GTypeInfo server_info = + { + sizeof (BProxyServerClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc) b_proxy_server_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (BProxyServer), + 0, /* n_preallocs */ + (GInstanceInitFunc) b_proxy_server_init, + }; + + server_type = g_type_register_static (B_TYPE_RECEIVER, + "BProxyServer", &server_info, 0); + } + + return server_type; +} + +static void +b_proxy_server_class_init (BProxyServerClass *klass) +{ + GObjectClass *object_class; + + parent_class = g_type_class_peek_parent (klass); + object_class = G_OBJECT_CLASS (klass); + + object_class->finalize = b_proxy_server_finalize; + + server_signals[CLIENT_ADDED] = + g_signal_new ("client_added", + G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET (BProxyServerClass, client_added), + NULL, NULL, + b_marshal_VOID__STRING_INT, + G_TYPE_NONE, + 2, G_TYPE_STRING, G_TYPE_INT); + server_signals[CLIENT_REMOVED] = + g_signal_new ("client_removed", + G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET (BProxyServerClass, client_removed), + NULL, NULL, + b_marshal_VOID__STRING_INT, + G_TYPE_NONE, + 2, G_TYPE_STRING, G_TYPE_INT); +} + +static void +b_proxy_server_init (BProxyServer *server) +{ + server->fd = -1; +} + +static void +b_proxy_server_finalize (GObject *object) +{ + BProxyServer *server = B_PROXY_SERVER (object); + + if (server->fd != -1) + { + close (server->fd); + server->fd = -1; + } + + if (server->clients) + { + g_hash_table_destroy (server->clients); + server->clients = NULL; + } + + G_OBJECT_CLASS (parent_class)->finalize (object); +} + +/** + * b_proxy_server_new: + * @port: the local port to listen to for heartbeat packages + * @error: return location for a possible error + * + * Creates a new #BProxyServer object, ready to use. + * + * Return value: a newly allocate #BProxyServer object + **/ +BProxyServer * +b_proxy_server_new (gint port, + GError **error) +{ + BProxyServer *server; + struct sockaddr_in sock; + gint fd; + + g_return_val_if_fail (port > 0, NULL); + g_return_val_if_fail (error == NULL || *error == NULL, FALSE); + + if (! b_socket_init (error)) + return NULL; + + fd = b_socket_udp_new (B_SO_REUSEADDR, error); + if (fd < 0) + return NULL; + + sock.sin_addr.s_addr = INADDR_ANY; + sock.sin_family = AF_INET; + sock.sin_port = g_htons (port); + + if (bind (fd, (struct sockaddr *) &sock, sizeof (sock)) < 0) + { + g_set_error (error, 0, 0, + "Can't bind socket to local port %d: %s\n", + port, g_strerror (errno)); + close (fd); + return NULL; + } + + server = g_object_new (B_TYPE_PROXY_SERVER, + "callback", b_proxy_server_heartbeat_callback, + NULL); + + server->fd = fd; + + server->clients = g_hash_table_new_full ((GHashFunc) b_client_hash, + (GEqualFunc) b_client_equal, + (GDestroyNotify) NULL, + (GDestroyNotify) g_free); + + b_receiver_listen_fd (B_RECEIVER (server), fd); + + return server; +} + +gboolean +b_proxy_server_send_packet (BProxyServer *server, + BPacket *packet) +{ + g_return_val_if_fail (B_IS_PROXY_SERVER (server), FALSE); + g_return_val_if_fail (packet != NULL, FALSE); + + if (server->clients) + g_hash_table_foreach (server->clients, + (GHFunc) b_client_send_packet, packet); + + return TRUE; +} + +gint +b_proxy_server_num_clients (BProxyServer *server) +{ + g_return_val_if_fail (B_IS_PROXY_SERVER (server), 0); + + return (server->clients ? g_hash_table_size (server->clients) : 0); +} + +static gboolean +b_proxy_server_heartbeat_callback (BProxyServer *server, + BPacket *packet, + gpointer data) +{ + BClient lookup; + BClient *client; + + if (packet->header.heartbeat_h.magic != MAGIC_HEARTBEAT || + packet->header.heartbeat_h.version != 0) + return TRUE; + + lookup.server = server; + lookup.addr = B_RECEIVER (server)->addr; + lookup.port = B_RECEIVER (server)->port; + + client = g_hash_table_lookup (server->clients, &lookup); + + if (client) + { + g_source_destroy (client->timeout); + + client->timeout = g_timeout_source_new (HEARTBEAT_TIMEOUT); + g_source_set_callback (client->timeout, + (GSourceFunc) b_client_remove, client, NULL); + g_source_attach (client->timeout, NULL); + } + else + { + b_client_add (&lookup); + } + + return TRUE; +} + +static guint +b_client_hash (const BClient *client) +{ + return (guint) client->addr; +} + +static gboolean +b_client_equal (const BClient *a, + const BClient *b) +{ + return (a->addr == b->addr && a->port == b->port); +} + +static void +b_client_add (const BClient *template) +{ + BClient *client = g_memdup (template, sizeof (BClient)); + struct in_addr addr; + const gchar *host; + gint port; + + client->timeout = g_timeout_source_new (HEARTBEAT_TIMEOUT); + g_source_set_callback (client->timeout, + (GSourceFunc) b_client_remove, client, NULL); + g_source_attach (client->timeout, NULL); + + g_hash_table_insert (client->server->clients, client, client); + + addr.s_addr = client->addr; + + host = inet_ntoa (addr); + port = g_ntohs (client->port); + + g_signal_emit (client->server, + server_signals[CLIENT_ADDED], 0, + host, port); +} + +static gboolean +b_client_remove (BClient *client) +{ + BProxyServer *server = client->server; + struct in_addr addr; + const gchar *host; + gint port; + + addr.s_addr = client->addr; + + host = inet_ntoa (addr); + port = g_ntohs (client->port); + + g_hash_table_remove (server->clients, client); + + g_signal_emit (server, + server_signals[CLIENT_REMOVED], 0, + host, port); + + return FALSE; +} + +static void +b_client_send_packet (gpointer key, + BClient *client, + BPacket *packet) +{ + struct sockaddr_in addr; + gsize size = b_packet_size (packet); + BPacket *copy = g_memdup (packet, size); + + b_packet_hton (copy); + + addr.sin_family = AF_INET; + addr.sin_port = client->port; + addr.sin_addr.s_addr = client->addr; + + sendto (client->server->fd, copy, size, 0, + (struct sockaddr *) &addr, sizeof (addr)); + + g_free (copy); +} + diff --git a/blib-1.1.7/blib/bproxyserver.h b/blib-1.1.7/blib/bproxyserver.h new file mode 100644 index 0000000..a240fcc --- /dev/null +++ b/blib-1.1.7/blib/bproxyserver.h @@ -0,0 +1,72 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2001-2004 The Blinkenlights Crew + * Sven Neumann + * Michael Natterer + * Daniel Mack + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + + +#ifndef __B_PROXY_SERVER_H__ +#define __B_PROXY_SERVER_H__ + +G_BEGIN_DECLS + +#include + +#define B_TYPE_PROXY_SERVER (b_proxy_server_get_type ()) +#define B_PROXY_SERVER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), B_TYPE_PROXY_SERVER, BProxyServer)) +#define B_PROXY_SERVER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), B_TYPE_PROXY_SERVER, BProxyServerClass)) +#define B_IS_PROXY_SERVER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), B_TYPE_PROXY_SERVER)) +#define B_IS_PROXY_SERVER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), B_TYPE_PROXY_SERVER)) +#define B_PROXY_SERVER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), B_TYPE_PROXY_SERVER, BProxyServerClass)) + + +typedef struct _BProxyServerClass BProxyServerClass; + +struct _BProxyServerClass +{ + BReceiverClass parent_class; + + void (* client_added) (BProxyServer *server, + const gchar *host, + gint port); + void (* client_removed) (BProxyServer *server, + const gchar *host, + gint port); +}; + +struct _BProxyServer +{ + BReceiver parent_instance; + + gint fd; + GHashTable *clients; +}; + + +GType b_proxy_server_get_type (void) G_GNUC_CONST; +BProxyServer * b_proxy_server_new (gint port, + GError **error); + +gboolean b_proxy_server_send_packet (BProxyServer *server, + BPacket *packet); +gint b_proxy_server_num_clients (BProxyServer *server); + +G_END_DECLS + +#endif /* __B_PROXY_SERVER_H__ */ diff --git a/blib-1.1.7/blib/breceiver.c b/blib-1.1.7/blib/breceiver.c new file mode 100644 index 0000000..b887a37 --- /dev/null +++ b/blib-1.1.7/blib/breceiver.c @@ -0,0 +1,385 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2001-2003 The Blinkenlights Crew + * Sven Neumann + * Michael Natterer + * Daniel Mack + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include +#include +#include +#include +#include + +#ifdef HAVE_UNISTD_H +#include +#endif + +#include + +#ifdef G_OS_WIN32 +#include +#ifndef socklen_t +#define socklen_t unsigned int +#endif +#else +#include +#include +#include +#include +#endif + +#include "btypes.h" +#include "bpacket.h" +#include "breceiver.h" +#include "bsocket.h" + + +enum +{ + PROP_0, + PROP_CALLBACK, + PROP_CALLBACK_DATA +}; + + +static void b_receiver_class_init (BReceiverClass *class); +static void b_receiver_init (BReceiver *receiver); +static void b_receiver_finalize (GObject *object); +static void b_receiver_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec); +static gboolean b_receiver_io_func (GIOChannel *io, + GIOCondition cond, + gpointer data); + + +static GObjectClass *parent_class = NULL; + + +GType +b_receiver_get_type (void) +{ + static GType receiver_type = 0; + + if (!receiver_type) + { + static const GTypeInfo receiver_info = + { + sizeof (BReceiverClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc) b_receiver_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (BReceiver), + 0, /* n_preallocs */ + (GInstanceInitFunc) b_receiver_init, + }; + + receiver_type = g_type_register_static (G_TYPE_OBJECT, + "BReceiver", &receiver_info, 0); + } + + return receiver_type; +} + +static void +b_receiver_class_init (BReceiverClass *class) +{ + GObjectClass *object_class; + + parent_class = g_type_class_peek_parent (class); + object_class = G_OBJECT_CLASS (class); + + object_class->finalize = b_receiver_finalize; + object_class->set_property = b_receiver_set_property; + + g_object_class_install_property (object_class, PROP_CALLBACK, + g_param_spec_pointer ("callback", + NULL, NULL, + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_WRITABLE)); + g_object_class_install_property (object_class, PROP_CALLBACK_DATA, + g_param_spec_pointer ("callback_data", + NULL, NULL, + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_WRITABLE)); +} + +static void +b_receiver_init (BReceiver *receiver) +{ + receiver->io_channel = NULL; + receiver->watch_source = 0; + receiver->callback = NULL; + receiver->callback_data = NULL; +} + +static void +b_receiver_finalize (GObject *object) +{ + BReceiver *receiver = B_RECEIVER (object); + + if (receiver->io_channel) + g_io_channel_unref (receiver->io_channel); + + receiver->callback = NULL; + + G_OBJECT_CLASS (parent_class)->finalize (object); +} + +static void +b_receiver_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec) +{ + BReceiver *receiver = B_RECEIVER (object); + + switch (property_id) + { + case PROP_CALLBACK: + receiver->callback = g_value_get_pointer (value); + break; + case PROP_CALLBACK_DATA: + receiver->callback_data = g_value_get_pointer (value); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + + +/** + * b_receiver_new: + * @callback: the function to call when a new frame arrives + * @callback_data: data to pass to the @callback + * + * Creates a new #BReceiver object. + * + * Return value: a newly allocate #BReceiver object + **/ +BReceiver * +b_receiver_new (BReceiverCallback callback, + gpointer callback_data) +{ + return B_RECEIVER (g_object_new (B_TYPE_RECEIVER, + "callback", callback, + "callback_data", callback_data, + NULL)); +} + +/** + * b_receiver_listen: + * @receiver: a #BReceiver object + * @port: the UDP port to listen to + * + * Causes the @receiver to start to listen to the specified UDP + * port. For each successfully received Blinkenlights packet, the + * packet will be converted to host byteorder and the callback that + * was specified on b_receiver_new() will be called. + * + * Return value: %TRUE if the receiver listens to @port, %FALSE otherwise + **/ +gboolean +b_receiver_listen (BReceiver *receiver, + gint port) +{ + struct sockaddr_in local_address; + gint status; + gint listen_fd; + GError *error = NULL; + + g_return_val_if_fail (B_IS_RECEIVER (receiver), FALSE); + g_return_val_if_fail (receiver->io_channel == NULL, FALSE); + + listen_fd = b_socket_udp_new (B_SO_REUSEADDR, &error); + if (listen_fd == -1) + { + g_printerr ("%s\n", error->message); + g_error_free (error); + return FALSE; + } + + local_address.sin_family = PF_INET; + local_address.sin_port = g_htons (port); + local_address.sin_addr.s_addr = INADDR_ANY; + + status = bind (listen_fd, + (struct sockaddr *) &local_address, sizeof (local_address)); + if (status == -1) + { + g_printerr ("BReceiver: Can't bind local address"); + close (listen_fd); + return FALSE; + } + +#ifndef G_OS_WIN32 + status = fcntl (listen_fd, F_SETFL, O_NONBLOCK); + if (status == -1) + { + g_printerr ("BReceiver: Can't set non-blocking mode on socket"); + close (listen_fd); + return FALSE; + } +#endif + + b_receiver_listen_fd (receiver, listen_fd); + + g_io_channel_set_close_on_unref (receiver->io_channel, TRUE); + + return TRUE; +} + +/** + * b_receiver_listen_fd: + * @receiver: a #BReceiver object + * @fd: a file descriptor + * + * Causes the @receiver to start to listen to the given file descriptor. + * This function is rarely useful, it is used internally by #BProxyClient. + * + * Return value: %TRUE on success + **/ +gboolean +b_receiver_listen_fd (BReceiver *receiver, + gint fd) +{ + g_return_val_if_fail (B_IS_RECEIVER (receiver), FALSE); + g_return_val_if_fail (receiver->io_channel == NULL, FALSE); + + receiver->io_channel = g_io_channel_unix_new (fd); + + g_io_channel_set_encoding (receiver->io_channel, NULL, NULL); + + receiver->watch_source = g_io_add_watch (receiver->io_channel, + G_IO_IN | G_IO_PRI, + b_receiver_io_func, receiver); + + return TRUE; +} + +/** + * b_receiver_stop: + * @receiver: a #BReceiver object + * + * Makes the @receiver stop listening. + **/ +void +b_receiver_stop (BReceiver *receiver) +{ + g_return_if_fail (B_IS_RECEIVER (receiver)); + + if (!receiver->io_channel) + return; + + if (receiver->watch_source) + { + g_source_remove (receiver->watch_source); + receiver->watch_source = 0; + } + + g_io_channel_unref (receiver->io_channel); + receiver->io_channel = NULL; +} + +static gboolean +b_receiver_io_func (GIOChannel *io, + GIOCondition cond, + gpointer data) +{ + BReceiver *receiver; + mcu_frame_header_t *header; + guchar buf[0xfff]; + BPacket *packet = NULL; + BPacket *fake = NULL; + BPacket *new = NULL; + gssize buf_read; + gboolean success = TRUE; + + gint req_fd; + struct sockaddr_in req_addr; + socklen_t req_addr_length = sizeof (req_addr); + + receiver = B_RECEIVER (data); + + if (! receiver->callback) + return TRUE; + + req_fd = g_io_channel_unix_get_fd (io); + + buf_read = recvfrom (req_fd, buf, sizeof (buf), 0, + (struct sockaddr *) &req_addr, &req_addr_length); + + if (buf_read < sizeof (BPacket)) + return TRUE; + + new = (BPacket *) buf; + + b_packet_ntoh (new); + + header = &new->header.mcu_frame_h; + + switch (header->magic) + { + case MAGIC_MCU_FRAME: + if (buf_read < (sizeof (BPacket) + + header->width * header->height * header->channels)) + return TRUE; + /* else fallthru */ + + case MAGIC_HEARTBEAT: + packet = new; + break; + + case MAGIC_BLFRAME: + { + gint size; + + fake = b_packet_new (18, 8, 1, 1, &size); + + memcpy (fake->data, (guchar *) new + sizeof (BPacket), size); + + packet = fake; + } + break; + + default: + g_printerr ("BReceiver: Unknown magic: %08x, dropping packet!", + new->header.mcu_frame_h.magic); + return TRUE; + } + + receiver->addr = req_addr.sin_addr.s_addr; + receiver->port = req_addr.sin_port; + + success = receiver->callback (receiver, packet, receiver->callback_data); + + receiver->addr = 0; + receiver->port = 0; + + if (fake) + g_free (fake); + + return success; +} diff --git a/blib-1.1.7/blib/breceiver.h b/blib-1.1.7/blib/breceiver.h new file mode 100644 index 0000000..14d6250 --- /dev/null +++ b/blib-1.1.7/blib/breceiver.h @@ -0,0 +1,73 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2001-2002 The Blinkenlights Crew + * Sven Neumann + * Michael Natterer + * Daniel Mack + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + + +#ifndef __B_RECEIVER_H__ +#define __B_RECEIVER_H__ + +G_BEGIN_DECLS + +#define B_TYPE_RECEIVER (b_receiver_get_type ()) +#define B_RECEIVER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), B_TYPE_RECEIVER, BReceiver)) +#define B_RECEIVER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), B_TYPE_RECEIVER, BReceiverClass)) +#define B_IS_RECEIVER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), B_TYPE_RECEIVER)) +#define B_IS_RECEIVER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), B_TYPE_RECEIVER)) +#define B_RECEIVER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), B_TYPE_RECEIVER, BReceiverClass)) + + +typedef struct _BReceiverClass BReceiverClass; + +typedef gboolean (* BReceiverCallback) (BReceiver *receiver, + BPacket *packet, + gpointer callback_data); + +struct _BReceiverClass +{ + GObjectClass parent_class; +}; + +struct _BReceiver +{ + GObject parent_instance; + + GIOChannel *io_channel; + guint watch_source; + + BReceiverCallback callback; + gpointer callback_data; + + gulong addr; /* in network byte order */ + gushort port; /* in network byte order */ +}; + +GType b_receiver_get_type (void) G_GNUC_CONST; +BReceiver * b_receiver_new (BReceiverCallback callback, + gpointer callback_data); +gboolean b_receiver_listen (BReceiver *receiver, + gint port); +gboolean b_receiver_listen_fd (BReceiver *receiver, + gint fd); +void b_receiver_stop (BReceiver *receiver); + +G_END_DECLS + +#endif /* __B_RECEIVER_H__ */ diff --git a/blib-1.1.7/blib/bsender.c b/blib-1.1.7/blib/bsender.c new file mode 100644 index 0000000..aa3bfd1 --- /dev/null +++ b/blib-1.1.7/blib/bsender.c @@ -0,0 +1,479 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2001-2003 The Blinkenlights Crew + * Sven Neumann + * Michael Natterer + * Daniel Mack + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include +#include +#include +#include + +#ifdef HAVE_UNISTD_H +#include +#endif + +#include + +#ifdef G_OS_WIN32 +#include +#else +#include +#include +#include +#include +#endif + +#include "btypes.h" +#include "bobject.h" +#include "bpacket.h" +#include "bsender.h" +#include "bsocket.h" + + +typedef struct _BRecipient +{ + gint fd; + struct sockaddr_in addr; + gchar *hostname; + gint port; +} BRecipient; + + +static void b_sender_class_init (BSenderClass *class); +static void b_sender_init (BSender *sender); +static void b_sender_finalize (GObject *object); + +static BObjectClass *parent_class = NULL; + + +GType +b_sender_get_type (void) +{ + static GType sender_type = 0; + + if (!sender_type) + { + static const GTypeInfo sender_info = + { + sizeof (BSenderClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc) b_sender_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (BSender), + 0, /* n_preallocs */ + (GInstanceInitFunc) b_sender_init, + }; + + sender_type = g_type_register_static (G_TYPE_OBJECT, + "BSender", &sender_info, 0); + } + + return sender_type; +} + +static void +b_sender_class_init (BSenderClass *class) +{ + GObjectClass *object_class; + + parent_class = g_type_class_peek_parent (class); + object_class = G_OBJECT_CLASS (class); + + object_class->finalize = b_sender_finalize; +} + +static void +b_sender_init (BSender *sender) +{ + sender->recipients = NULL; + sender->packet = NULL; + sender->size = 0; + sender->verbose = FALSE; +} + +static void +b_sender_finalize (GObject *object) +{ + BSender *sender; + GList *item; + + sender = B_SENDER (object); + + for (item = sender->recipients; item; item = item->next) + { + BRecipient *rec = item->data; + + if (!rec) + continue; + + if (rec->fd > -1) + close (rec->fd); + + g_free (rec); + } + + g_list_free (sender->recipients); + + if (sender->packet) + g_free (sender->packet); + + G_OBJECT_CLASS (parent_class)->finalize (object); +} + +/** + * b_sender_new: + * + * Creates a new #BSender object. + * + * Return value: a newly allocated #BSender object + **/ +BSender * +b_sender_new (void) +{ + return B_SENDER (g_object_new (B_TYPE_SENDER, NULL)); +} + +/** + * b_sender_configure: + * @sender: a #BSender object + * @width: number of pixels per row + * @height: number of pixels per column + * @channels: number of channels per pixel + * @maxval: the maximum value + * + * Prepares @sender to send Blinkenlights UDP packets with the given + * parameters. + * + * Return value: %TRUE if @sender was successfully reconfigured, + * %FALSE otherwise + **/ +gboolean +b_sender_configure (BSender *sender, + gint width, + gint height, + gint channels, + gint maxval) +{ + g_return_val_if_fail (B_IS_SENDER (sender), FALSE); + g_return_val_if_fail (width > 0 && height > 0, FALSE); + + /* prepare packet */ + if (sender->packet) + g_free (sender->packet); + + sender->packet = b_packet_new (width, height, channels, maxval, + &sender->size); + + b_packet_hton (sender->packet); + + return TRUE; +} + +/** + * b_sender_add_recipient: + * @sender: a #BSender object + * @src_port: originating UDP port (-1 to leave unspecified) + * @dest_host: destination hostname or IP address + * @dest_port: destination UDP port + * @error: location to store the error occuring, or %NULL to ignore errors + * + * Tries to resolve @host and adds it to the @sender's list of recipients. + * + * Return value: %TRUE if the recipient was successfully added, %FALSE + * otherwise + **/ +gboolean +b_sender_add_recipient (BSender *sender, + gint src_port, + const gchar *dest_host, + gint dest_port, + GError **error) +{ + BRecipient *rec; + struct hostent *dest; + struct sockaddr_in sock; + + g_return_val_if_fail (B_IS_SENDER (sender), FALSE); + g_return_val_if_fail (dest_host != NULL && *dest_host != '\0', FALSE); + g_return_val_if_fail (dest_port > 0, FALSE); + g_return_val_if_fail (error == NULL || *error == NULL, FALSE); + + if (! b_socket_init (error)) + return FALSE; + + dest = gethostbyname (dest_host); + if (dest == NULL) + { + g_set_error (error, 0, 0, "Unable to resolve host '%s'", dest_host); + return FALSE; + } + + rec = g_new0 (BRecipient, 1); + rec->fd = -1; + + rec->addr.sin_family = AF_INET; + rec->addr.sin_port = g_htons (dest_port); + + memcpy (&rec->addr.sin_addr.s_addr, dest->h_addr_list[0], dest->h_length); + + rec->fd = b_socket_udp_new (B_SO_BROADCAST | B_SO_REUSEADDR, error); + if (rec->fd < 0) + return FALSE; + + if (src_port > 0) + { + sock.sin_addr.s_addr = INADDR_ANY; + sock.sin_family = AF_INET; + sock.sin_port = g_htons (src_port); + + if (bind (rec->fd, (struct sockaddr *) &sock, sizeof (sock)) < 0) + { + g_set_error (error, 0, 0, + "Couldn't bind socket for %s to local port %d: %s\n", + dest_host, src_port, g_strerror (errno)); + close (rec->fd); + g_free (rec); + return FALSE; + } + } + + if (connect (rec->fd, + (struct sockaddr *) &rec->addr, sizeof (rec->addr)) < 0) + { + g_set_error (error, 0, 0, + "Couldn't connect socket for %s: %s\n", + dest_host, g_strerror (errno)); + close (rec->fd); + g_free (rec); + return FALSE; + } + + rec->hostname = g_strdup (dest_host); + rec->port = dest_port; + + /* To avoid duplicate entries, first remove all recipients with + same hostname and same port. */ + b_sender_remove_recipient (sender, rec->hostname, rec->port, NULL); + + sender->recipients = g_list_append (sender->recipients, rec); + + return TRUE; +} + +/** + * b_sender_remove_recipient: + * @sender: a #BSender object + * @dest_host: destination hostname or IP address + * @dest_port: destination UDP port + * @error: location to store the error occuring, or %NULL to ignore errors + * + * Removes all recipients with matching host and port from the + * @sender's list of recipients. + * + * Return value: %TRUE if at least one matching recipient was found + * and removed, %FALSE otherwise + **/ +gboolean +b_sender_remove_recipient (BSender *sender, + const gchar *dest_host, + gint dest_port, + GError **error) +{ + GList *item; + gboolean done = FALSE; + + g_return_val_if_fail (B_IS_SENDER (sender), FALSE); + g_return_val_if_fail (dest_host != NULL && *dest_host != '\0', FALSE); + g_return_val_if_fail (dest_port > 0, FALSE); + g_return_val_if_fail (error == NULL || *error == NULL, FALSE); + + for (item = sender->recipients; item; item = item->next) + { + BRecipient *rec = item->data; + + if (!rec) + continue; + + if (rec->port == dest_port && + g_ascii_strcasecmp (rec->hostname, dest_host) == 0) + { + if (rec->fd > -1) + close (rec->fd); + + g_free (rec->hostname); + g_free (rec); + + item->data = NULL; + done = TRUE; + } + } + + if (done) + sender->recipients = g_list_remove_all (sender->recipients, NULL); + else + g_set_error (error, 0, 0, + "No such host in recipient list: %s, port %d\n", + dest_host, dest_port); + + return done; +} + +/** + * b_sender_list_recipients: + * @sender: a #BSender object + * + * Creates a list of strings that describe the @senders + * recipients. You should free the strings as well as the list when + * it is no longer needed. + * + * Return value: a newly allocated #GList of newly allocated strings + **/ +GList * +b_sender_list_recipients (BSender *sender) +{ + GList *item, *list = NULL; + + for (item = sender->recipients; item; item = item->next) + { + BRecipient *rec = item->data; + + if (!rec) + continue; + + list = g_list_append (list, + g_strdup_printf ("%s:%d", + rec->hostname, rec->port)); + } + + return list; +} + +/** + * b_sender_send_frame: + * @sender: a #Bsender object + * @data: the frame data to send + * + * Sends Blinkenlights packets to all recipients registered with + * @sender. The @data should match the values of the last call to + * b_sender_configure() for @sender. + * + * Return value: %FALSE in case of a fatal error, %TRUE otherwise + **/ +gboolean +b_sender_send_frame (BSender *sender, + const guchar *data) +{ + GList *item; + gssize packet_size = sender->size + sizeof (BPacket); + + g_return_val_if_fail (B_IS_SENDER (sender), FALSE); + + if (sender->packet == NULL) + { + g_warning ("Call b_sender_configure() before sending packages!"); + return FALSE; + } + + if (data) + memcpy (sender->packet->data, data, sender->size); + else + memset (sender->packet->data, 0, sender->size); + + /* ...send it. */ + for (item = sender->recipients; item; item = item->next) + { + BRecipient *rec = (BRecipient *) item->data; + + if (rec == NULL) + continue; + + if (send (rec->fd, sender->packet, packet_size, 0) != packet_size) + { + if (sender->verbose) + g_printerr ("Unable to send to %s: %s\n", + rec->hostname, g_strerror (errno)); + } + } + + return TRUE; +} + +/** + * b_sender_send_heartbeat: + * @sender: a #Bsender object + * + * This function is deprecated and might be removed in the future. + * If you need the heartbeat functionality, use #BProxyClient instead. + * + * Return value: %TRUE always + **/ +gboolean +b_sender_send_heartbeat (BSender *sender) +{ + GList *item; + BPacket packet; + + g_return_val_if_fail (B_IS_SENDER (sender), FALSE); + + memset (&packet, 0, sizeof (BPacket)); + + packet.header.heartbeat_h.magic = MAGIC_HEARTBEAT; + + b_packet_hton (&packet); + + for (item = sender->recipients; item; item = item->next) + { + BRecipient *rec = (BRecipient *) item->data; + + if (rec == NULL) + continue; + + if (send (rec->fd, &packet, sizeof (BPacket), 0) != sizeof (BPacket)) + { + if (sender->verbose) + g_printerr ("Unable to send heartbeat to %s: %s\n", + rec->hostname, g_strerror (errno)); + } + } + + return TRUE; +} + +/** + * b_sender_set_verbose: + * @sender: a #Bsender object + * @verbose: whether the @sender should do verbose error reporting or not + * + * In earlier BLib versions #BSender used to print a message to stderr + * when send() failed. This message is now suppressed by default, but + * you can get the old behaviour back using this function. + **/ +void +b_sender_set_verbose (BSender *sender, + gboolean verbose) +{ + g_return_if_fail (B_IS_SENDER (sender)); + + sender->verbose = (verbose != FALSE); +} diff --git a/blib-1.1.7/blib/bsender.h b/blib-1.1.7/blib/bsender.h new file mode 100644 index 0000000..5714782 --- /dev/null +++ b/blib-1.1.7/blib/bsender.h @@ -0,0 +1,87 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2001-2002 The Blinkenlights Crew + * Sven Neumann + * Michael Natterer + * Daniel Mack + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __B_SENDER_H__ +#define __B_SENDER_H__ + +#include + +G_BEGIN_DECLS + +#define B_TYPE_SENDER (b_sender_get_type ()) +#define B_SENDER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), B_TYPE_SENDER, BSender)) +#define B_SENDER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), B_TYPE_SENDER, BSenderClass)) +#define B_IS_SENDER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), B_TYPE_SENDER)) +#define B_IS_SENDER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), B_TYPE_SENDER)) +#define B_SENDER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), B_TYPE_SENDER, BSenderClass)) + + +typedef struct _BSenderClass BSenderClass; + +struct _BSenderClass +{ + GObjectClass parent_class; +}; + +struct _BSender +{ + GObject parent_instance; + + GList *recipients; + + BPacket *packet; + gsize size; + + gboolean verbose; +}; + +GType b_sender_get_type (void) G_GNUC_CONST; +BSender * b_sender_new (void); + +gboolean b_sender_add_recipient (BSender *sender, + gint src_port, + const gchar *dest_host, + gint dest_port, + GError **error); +gboolean b_sender_remove_recipient (BSender *sender, + const gchar *dest_host, + gint dest_port, + GError **error); +GList * b_sender_list_recipients (BSender *sender); + +gboolean b_sender_configure (BSender *sender, + gint width, + gint height, + gint channels, + gint maxval); +gboolean b_sender_send_frame (BSender *sender, + const guchar *data); +void b_sender_set_verbose (BSender *sender, + gboolean verbose); + +#ifndef B_DISABLE_DEPRECATED +gboolean b_sender_send_heartbeat (BSender *sender); +#endif + +G_END_DECLS + +#endif /* __B_SENDER_H__ */ diff --git a/blib-1.1.7/blib/bsocket.c b/blib-1.1.7/blib/bsocket.c new file mode 100644 index 0000000..ca52bd0 --- /dev/null +++ b/blib-1.1.7/blib/bsocket.c @@ -0,0 +1,156 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2001-2004 The Blinkenlights Crew + * Sven Neumann + * Daniel Mack + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include +#include +#include +#include + +#ifdef HAVE_UNISTD_H +#include +#endif + +#include + +#ifdef G_OS_WIN32 +#include +#else +#include +#include +#include +#include +#endif + +#include "bsocket.h" + + +/** + * b_socket_init: + * @error: return location for possible errors. + * + * Initialize network sockets. This function does nothing on + * UNIXes. On Win32 it initializes the Winsock DLL. You may call this + * function any number of times, the initialization is only done once. + * + * Return value: %TRUE on success, %FALSE in case of an error + **/ +gboolean +b_socket_init (GError **error) +{ +#ifdef G_OS_WIN32 + static gboolean winsock_initialized = FALSE; + + if (! winsock_initialized) + { + WORD wVersionRequested; + WSADATA wsaData; + + wVersionRequested = MAKEWORD (2, 2); + + if (WSAStartup (wVersionRequested, &wsaData) == 0) + { + winsock_initialized = TRUE; + } + else + { + g_set_error (error, 0, 0, "Can't initialize the Winsock DLL"); + return FALSE; + } + } + +#endif + return TRUE; +} + +/** + * b_socket_udp_new: + * @options: #BSocketOptions to set on the socket. + * @error: return location for possible errors. + * + * Creates an UDP socket and configures it according to @options. + * + * Return value: a socket descriptor or -1 in case of an error + **/ +gint +b_socket_udp_new (BSocketOptions options, + GError **error) +{ + gint fd; + gint value; + + g_return_val_if_fail (error == NULL || *error == NULL, -1); + + if (! b_socket_init (error)) + return FALSE; + + fd = socket (PF_INET, SOCK_DGRAM, IPPROTO_UDP); + if (fd == -1) + { + g_set_error (error, 0, 0, + "Can't create socket: %s", g_strerror (errno)); + return -1; + } + + if (options & B_SO_BROADCAST) + { + value = 1; + if (setsockopt (fd, + SOL_SOCKET, SO_BROADCAST, &value, sizeof (value)) < 0) + { + g_set_error (error, 0, 0, + "Can't set socket option (SO_BROADCAST): %s", + g_strerror (errno)); + close (fd); + return -1; + } + } + + if (options & B_SO_REUSEADDR) + { + value = 1; + if (setsockopt (fd, + SOL_SOCKET, SO_REUSEADDR, &value, sizeof (value)) < 0) + { + g_set_error (error, 0, 0, + "Can't set socket option (SO_REUSEADDR): %s", + g_strerror (errno)); + close (fd); + return -1; + } + +#ifdef SO_REUSEPORT + value = 1; + if (setsockopt (fd, + SOL_SOCKET, SO_REUSEPORT, &value, sizeof (value)) < 0) + { + g_set_error (error, 0, 0, + "Can't set socket option (SO_REUSEPORT): %s", + g_strerror (errno)); + close (fd); + return -1; + } +#endif + } + + return fd; +} diff --git a/blib-1.1.7/blib/bsocket.h b/blib-1.1.7/blib/bsocket.h new file mode 100644 index 0000000..eb6c5f6 --- /dev/null +++ b/blib-1.1.7/blib/bsocket.h @@ -0,0 +1,42 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2001-2004 The Blinkenlights Crew + * Sven Neumann + * Daniel Mack + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __B_SOCKET_H__ +#define __B_SOCKET_H__ + +G_BEGIN_DECLS + + +typedef enum +{ + B_SO_NONE = 0, + B_SO_BROADCAST = 1 << 0, + B_SO_REUSEADDR = 1 << 1 +} BSocketOptions; + +gboolean b_socket_init (GError **error); +gint b_socket_udp_new (BSocketOptions options, + GError **error); + + +G_END_DECLS + +#endif /* __B_SOCKET_H__ */ diff --git a/blib-1.1.7/blib/btheme-parser.c b/blib-1.1.7/blib/btheme-parser.c new file mode 100644 index 0000000..9f51806 --- /dev/null +++ b/blib-1.1.7/blib/btheme-parser.c @@ -0,0 +1,536 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (C) 2002 The Blinkenlights Crew + * Sven Neumann + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include + +#include + +#include "btypes.h" +#include "bobject.h" +#include "bparser.h" +#include "btheme.h" +#include "btheme-parser.h" +#include "butils.h" + + +enum +{ + THEME = B_PARSER_STATE_USER, + BACKGROUND, + OVERLAY, + GRID, + GRID_WINDOW, + SPAN, + SPAN_WINDOW, + WINDOW, + FINISH +}; + +typedef struct +{ + BTheme *theme; + gchar *dirname; + gboolean lazy; + BOverlay *overlay; + gint dx, dy; + gint sx, sy; + GList *windows; +} ParserData; + + +static BParserState b_theme_start_element (BParserState state, + const gchar *element_name, + const gchar **attribute_names, + const gchar **attribute_values, + gpointer user_data, + GError **error); +static BParserState b_theme_end_element (BParserState state, + const gchar *element_name, + const gchar *cdata, + gsize cdata_len, + gpointer user_data, + GError **error); +static void b_theme_parse_header (BTheme *theme, + const gchar **attribute_names, + const gchar **attribute_values); +static void b_theme_parse_image (ParserData *data, + BOverlay *overlay, + const gchar **attribute_names, + const gchar **attribute_values); +static void b_theme_parse_grid (ParserData *data, + const gchar **attribute_names, + const gchar **attribute_values); +static void b_theme_parse_window (BWindow *window, + const gchar **attribute_names, + const gchar **attribute_values); +static void b_theme_overlay_add_window (BTheme *theme, + BOverlay *overlay, + const BWindow *window); +static gboolean b_theme_window_validate (BTheme *theme, + const BWindow *window); + + +gboolean +b_theme_parser_parse (BTheme *theme, + gboolean lazy, + GError **error) +{ + BParser *parser; + ParserData data = { NULL }; + GIOChannel *io; + const gchar *filename; + gboolean retval; + + g_return_val_if_fail (theme != NULL, FALSE); + g_return_val_if_fail (error == NULL || *error == NULL, FALSE); + + filename = b_object_get_filename (B_OBJECT (theme)); + g_return_val_if_fail (filename != NULL, FALSE); + + io = g_io_channel_new_file (filename, "r", error); + if (!io) + return FALSE; + + data.theme = theme; + data.dirname = g_path_get_dirname (filename); + data.lazy = lazy; + + parser = b_parser_new (b_theme_start_element, b_theme_end_element, &data); + + retval = b_parser_parse_io_channel (parser, io, TRUE, error); + + if (retval && b_parser_get_state (parser) != FINISH) + { + g_set_error (error, G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT, + "This does not look like a Blinkenlights Theme"); + retval = FALSE; + } + + g_io_channel_unref (io); + + b_parser_free (parser); + + g_free (data.dirname); + + if (retval && + (theme->rows < 1 || theme->columns < 1 || + theme->channels < 1 || + theme->maxval < 1 || theme->maxval > 256 || + theme->width < 1 || theme->height < 1)) + { + g_set_error (error, G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT, + "Incorrect theme header"); + retval = FALSE; + } + + return retval; +} + +static BParserState +b_theme_start_element (BParserState state, + const gchar *element_name, + const gchar **attribute_names, + const gchar **attribute_values, + gpointer user_data, + GError **error) +{ + ParserData *data = (ParserData *) user_data; + + switch (state) + { + case B_PARSER_STATE_TOPLEVEL: + if (strcmp (element_name, "blinkentheme") == 0) + { + b_theme_parse_header (data->theme, + attribute_names, attribute_values); + return THEME; + } + break; + + case THEME: + if (data->lazy) + return B_PARSER_STATE_UNKNOWN; + + if (strcmp (element_name, "background") == 0) + { + b_theme_parse_image (data, NULL, + attribute_names, attribute_values); + b_parse_coordinates (attribute_names, attribute_values, + &data->theme->bg_image_x, + &data->theme->bg_image_y); + return BACKGROUND; + } + else if (strcmp (element_name, "overlay") == 0) + { + BOverlay *overlay = g_new0 (BOverlay, 1); + + b_theme_parse_image (data, overlay, + attribute_names, attribute_values); + + data->overlay = overlay; + return OVERLAY; + } + break; + + case OVERLAY: + if (strcmp (element_name, "grid") == 0) + { + b_theme_parse_grid (data, attribute_names, attribute_values); + return GRID; + } + else if (strcmp (element_name, "span") == 0) + { + b_theme_parse_grid (data, attribute_names, attribute_values); + return SPAN; + } + else if (strcmp (element_name, "window") == 0) + { + BWindow window; + + b_theme_parse_window (&window, attribute_names, attribute_values); + + if (b_theme_window_validate (data->theme, &window)) + b_theme_overlay_add_window (data->theme, data->overlay, &window); + + return WINDOW; + } + + break; + + case GRID: + case SPAN: + if (strcmp (element_name, "window") == 0) + { + BWindow window; + + b_theme_parse_window (&window, attribute_names, attribute_values); + if (b_theme_window_validate (data->theme, &window)) + data->windows = g_list_append (data->windows, + g_memdup (&window, + sizeof (BWindow))); + + return state == GRID ? GRID_WINDOW : SPAN_WINDOW; + } + break; + + case GRID_WINDOW: + case SPAN_WINDOW: + case WINDOW: + g_printerr ("window element should be empty"); + break; + + default: + break; + } + + return B_PARSER_STATE_UNKNOWN; +} + +static BParserState +b_theme_end_element (BParserState state, + const gchar *element_name, + const gchar *cdata, + gsize cdata_len, + gpointer user_data, + GError **error) +{ + ParserData *data = (ParserData *) user_data; + GList *list; + + switch (state) + { + case THEME: + data->theme->overlays = g_list_reverse (data->theme->overlays); + return FINISH; + + case BACKGROUND: + return THEME; + + case OVERLAY: + g_return_val_if_fail (data->overlay != NULL, THEME); + + if (data->overlay->windows) + { + data->overlay->windows = g_list_reverse (data->overlay->windows); + data->theme->overlays = g_list_prepend (data->theme->overlays, + data->overlay); + } + else + { + g_printerr ("no windows defined in overlay, skipping"); + + g_free (data->overlay->image); + g_free (data->overlay); + } + data->overlay = NULL; + return THEME; + + case GRID: + case SPAN: + for (list = data->windows; list; list = list->next) + { + BWindow *template = list->data; + gint row, col; + + template->column = 0; + if (state == GRID) + template->row = 0; + + for (row = template->row; row < data->theme->rows; row++) + { + for (col = 0; col < data->theme->columns; col++) + { + BWindow window = *template; + + window.row = row; + window.column = col; + window.src_x += col * data->sx; + window.rect.x += col * data->dx; + +#if 0 + g_print ("window %d,%d (%d) is %dx%d @ %d,%d src=%d,%d\n", + window.column, window.row, window.value, + window.rect.w, window.rect.h, + window.rect.x, window.rect.y, + window.src_x, window.src_y); +#endif + + b_theme_overlay_add_window (data->theme, data->overlay, + &window); + } + + if (state == SPAN) + break; + + template->src_y += data->sy; + template->rect.y += data->dy; + } + + g_free (template); + } + + g_list_free (data->windows); + data->windows = NULL; + return OVERLAY; + + case GRID_WINDOW: + return GRID; + + case SPAN_WINDOW: + return SPAN; + + case WINDOW: + return OVERLAY; + + default: + break; + } + + return B_PARSER_STATE_UNKNOWN; +} + +static void +b_theme_parse_header (BTheme *theme, + const gchar **attribute_names, + const gchar **attribute_values) +{ + const gchar **name; + const gchar **value; + + if (theme->type) + { + g_free (theme->type); + theme->type = NULL; + } + + theme->rows = 0; + theme->columns = 0; + theme->channels = 1; + theme->maxval = 1; + theme->width = 0; + theme->height = 0; + + for (name = attribute_names, value = attribute_values; + *name && *value; + name++, value++) + { + if (strcmp (*name, "title") == 0) + b_object_set_name (B_OBJECT (theme), *value); + if (strcmp (*name, "type") == 0) + theme->type = g_strdup (*value); + if (strcmp (*name, "rows") == 0) + b_parse_int (*value, &theme->rows); + if (strcmp (*name, "columns") == 0) + b_parse_int (*value, &theme->columns); + if (strcmp (*name, "channels") == 0) + b_parse_int (*value, &theme->channels); + if (strcmp (*name, "maxval") == 0) + b_parse_int (*value, &theme->maxval); + if (strcmp (*name, "width") == 0) + b_parse_int (*value, &theme->width); + if (strcmp (*name, "height") == 0) + b_parse_int (*value, &theme->height); + } +} + +static void +b_theme_parse_image (ParserData *data, + BOverlay *overlay, + const gchar **attribute_names, + const gchar **attribute_values) +{ + const gchar **name; + const gchar **value; + gchar **image; + BColor *color; + + image = overlay ? &overlay->image : &data->theme->bg_image; + + for (name = attribute_names, value = attribute_values; + *name && *value; + name++, value++) + { + if (!*image && strcmp (*name, "image") == 0) + *image = g_build_filename (data->dirname, *value, NULL); + } + + color = overlay ? &overlay->color : &data->theme->bg_color; + + if (overlay) + color->r = color->g = color->b = 0xFF; + else + color->r = color->g = color->b = 0x00; + + color->a = 0xFF; + + b_parse_color (attribute_names, attribute_values, color); +} + +static void +b_theme_parse_grid (ParserData *data, + const gchar **attribute_names, + const gchar **attribute_values) +{ + const gchar **name; + const gchar **value; + + data->dx = data->dy = data->sx = data->sy = 0; + + for (name = attribute_names, value = attribute_values; + *name && *value; + name++, value++) + { + if (strcmp (*name, "dx") == 0) + b_parse_int (*value, &data->dx); + if (strcmp (*name, "dy") == 0) + b_parse_int (*value, &data->dy); + if (strcmp (*name, "sx") == 0) + b_parse_int (*value, &data->sx); + if (strcmp (*name, "sy") == 0) + b_parse_int (*value, &data->sy); + } +} + +static void +b_theme_parse_window (BWindow *window, + const gchar **attribute_names, + const gchar **attribute_values) +{ + const gchar **name; + const gchar **value; + + window->value = B_WINDOW_VALUE_ALL; + window->row = window->column = 0; + window->src_x = window->src_y = 0; + window->rect.x = window->rect.y = window->rect.w = window->rect.h = 0; + + for (name = attribute_names, value = attribute_values; + *name && *value; + name++, value++) + { + if (strcmp (*name, "value") == 0 && strcmp (*value, "all")) + b_parse_int (*value, &window->value); + if (strcmp (*name, "row") == 0) + b_parse_int (*value, &window->row); + if (strcmp (*name, "column") == 0) + b_parse_int (*value, &window->column); + if (strcmp (*name, "src-x") == 0) + b_parse_int (*value, &window->src_x); + if (strcmp (*name, "src-y") == 0) + b_parse_int (*value, &window->src_y); + } + + b_parse_rectangle (attribute_names, attribute_values, &window->rect); +} + +static void +b_theme_overlay_add_window (BTheme *theme, + BOverlay *overlay, + const BWindow *window) +{ + BWindow *windows; + GList *list; + gint i; + + for (list = overlay->windows; list; list = list->next) + { + windows = list->data; + + if (windows->row == window->row && windows->column == window->column) + break; + } + + if (!list) + { + windows = g_new (BWindow, theme->maxval); + for (i = 0; i < theme->maxval; i++) + { + windows[i] = *window; + windows[i].value = B_WINDOW_VALUE_ALL; + } + overlay->windows = g_list_prepend (overlay->windows, windows); + } + + if (window->value != B_WINDOW_VALUE_ALL) + { + windows[window->value - 1] = *window; + } +} + +static gboolean +b_theme_window_validate (BTheme *theme, + const BWindow *window) +{ + if (window + && + (window->value != B_WINDOW_VALUE_ALL && + (window->value < 1 || window->value > theme->maxval)) + && + (window->row < 0 || window->row >= theme->rows || + window->column < 0 || window->column >= theme->columns)) + { + g_printerr ("Invalid window, skipping"); + return FALSE; + } + + return TRUE; +} diff --git a/blib-1.1.7/blib/btheme-parser.h b/blib-1.1.7/blib/btheme-parser.h new file mode 100644 index 0000000..1aaf0da --- /dev/null +++ b/blib-1.1.7/blib/btheme-parser.h @@ -0,0 +1,32 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (C) 2002 The Blinkenlights Crew + * Sven Neumann + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __B_THEME_PARSER_H__ +#define __B_THEME_PARSER_H__ + +G_BEGIN_DECLS + +gboolean b_theme_parser_parse (BTheme *theme, + gboolean lazy, + GError **error); + +G_END_DECLS + +#endif /* __B_THEME_PARSER_H__ */ diff --git a/blib-1.1.7/blib/btheme.c b/blib-1.1.7/blib/btheme.c new file mode 100644 index 0000000..3f5a6b7 --- /dev/null +++ b/blib-1.1.7/blib/btheme.c @@ -0,0 +1,426 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (C) 2002-2004 The Blinkenlights Crew + * Sven Neumann + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include + +#include "btypes.h" +#include "bobject.h" +#include "btheme.h" +#include "btheme-parser.h" +#include "butils.h" + + +static void b_theme_class_init (BThemeClass *class); +static void b_theme_init (BTheme *theme); +static void b_theme_finalize (GObject *object); + + +static BObjectClass *parent_class = NULL; + +GType +b_theme_get_type (void) +{ + static GType theme_type = 0; + + if (!theme_type) + { + static const GTypeInfo theme_info = + { + sizeof (BThemeClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc) b_theme_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (BTheme), + 0, /* n_preallocs */ + (GInstanceInitFunc) b_theme_init + }; + + theme_type = g_type_register_static (B_TYPE_OBJECT, + "BTheme", &theme_info, 0); + } + + return theme_type; +} + +static void +b_theme_class_init (BThemeClass *class) +{ + GObjectClass *object_class; + + parent_class = g_type_class_peek_parent (class); + object_class = G_OBJECT_CLASS (class); + + object_class->finalize = b_theme_finalize; +} + + +static void +b_theme_init (BTheme *theme) +{ + theme->bg_color.a = 0xFF; + theme->bg_image_x = 0; + theme->bg_image_y = 0; + theme->needs_blending = FALSE; +} + +static void +b_theme_finalize (GObject *object) +{ + BTheme *theme; + + theme = B_THEME (object); + + if (theme->type) + { + g_free (theme->type); + theme->type = NULL; + } + + b_theme_unload (theme); + + G_OBJECT_CLASS (parent_class)->finalize (object); +} + +static gboolean +b_theme_needs_blending (BTheme *theme) +{ + GList *list; + + if (theme->maxval == 1) + return FALSE; + + for (list = theme->overlays; list; list = list->next) + { + BOverlay *overlay = list->data; + GList *windows; + + for (windows = overlay->windows; windows; windows = windows->next) + { + BWindow *window = windows->data; + + if (window->value == B_WINDOW_VALUE_ALL) + return TRUE; + } + } + + return FALSE; +} + + +/** + * b_theme_new_from_file: + * @filename: the name of the file to load the theme from + * @lazy_load: whether to do lazy-loading + * @error: location to store the error occuring, or %NULL to ignore errors + * + * Tries to load a #BTheme from the file pointed to by @filename. If + * @lazy_load is %TRUE, only the header is loaded. + * + * Return value: a newly allocated #BTheme object or %NULL if the load + * failed + **/ +BTheme * +b_theme_new_from_file (const gchar *filename, + gboolean lazy_load, + GError **error) +{ + BTheme *theme; + + g_return_val_if_fail (filename != NULL, NULL); + g_return_val_if_fail (error == NULL || *error == NULL, FALSE); + + if (g_path_is_absolute (filename)) + { + theme = g_object_new (B_TYPE_THEME, "filename", filename, NULL); + } + else + { + gchar *cwd = g_get_current_dir (); + gchar *abs = g_build_filename (cwd, filename, NULL); + + theme = g_object_new (B_TYPE_THEME, "filename", abs, NULL); + + g_free (abs); + g_free (cwd); + } + + if (! b_theme_parser_parse (theme, lazy_load, error)) + { + g_object_unref (theme); + return NULL; + } + + theme->needs_blending = b_theme_needs_blending (theme); + + return theme; +} + +/** + * b_theme_new_from_scratch: + * @title: a descriptive title + * @type: the theme type or %NULL + * @rows: the number of rows of windows + * @columns: the number of columns of windows + * @channels: the number of channels per window (must be 1) + * @maxval: the maximum value + * @width: screen width in pixels + * @height: screen height in pixels + * + * Creates a new #BTheme object from scratch. This may be useful if + * you want to quickly test a movie for a layout you don't have a + * theme for. You need to call b_theme_load() before you can use the + * new theme. + * + * Return value: a newly allocated, lazy-loaded, #BTheme object + **/ +BTheme * +b_theme_new_from_scratch (const gchar *title, + const gchar *type, + gint rows, + gint columns, + gint channels, + gint maxval, + gint width, + gint height) +{ + BTheme *theme; + + g_return_val_if_fail (title != NULL, NULL); + g_return_val_if_fail (rows > 0 && columns > 0, NULL); + g_return_val_if_fail (channels == 1, NULL); + g_return_val_if_fail (maxval > 0 && maxval < 256, NULL); + g_return_val_if_fail (width > 0 && height > 0, NULL); + + theme = g_object_new (B_TYPE_THEME, "name", title, NULL); + + theme->type = g_strdup (type); + theme->rows = rows; + theme->columns = columns; + theme->channels = channels; + theme->maxval = maxval; + theme->width = width; + theme->height = height; + + theme->needs_blending = b_theme_needs_blending (theme); + + return theme; +} + +static void +b_theme_load_from_scratch (BTheme *theme) +{ + BOverlay *overlay; + gint row; + gint column; + gint i; + + overlay = g_new0 (BOverlay, 1); + + overlay->color.a = 0xFF; + overlay->color.r = 0xFF; + overlay->color.g = 0xFF; + overlay->color.b = 0xFF; + + for (row = 0; row < theme->rows; row++) + for (column = 0; column < theme->columns; column++) + { + BWindow *windows; + BWindow template; + + template.value = B_WINDOW_VALUE_ALL; + template.row = row; + template.column = column; + template.src_x = template.src_y = 0; + template.rect.w = theme->width / theme->columns; + template.rect.h = theme->height / theme->rows; + template.rect.x = column * template.rect.w; + template.rect.y = row * template.rect.h; + + windows = g_new0 (BWindow, theme->maxval); + + for (i = 0; i < theme->maxval; i++) + windows[i] = template; + + overlay->windows = g_list_prepend (overlay->windows, windows); + } + + overlay->windows = g_list_reverse (overlay->windows); + + theme->overlays = g_list_prepend (NULL, overlay); +} + +/** + * b_theme_load: + * @theme: a #BTheme object + * @error: location to store the error occuring, or %NULL to ignore errors + * + * Loads all data into the @theme. You only need to call this if you + * lazy-loaded the theme or called b_theme_unload() before. + * + * Return value: %TRUE on success, FALSE otherwise + **/ +gboolean +b_theme_load (BTheme *theme, + GError **error) +{ + gboolean retval; + + g_return_val_if_fail (B_IS_THEME (theme), FALSE); + g_return_val_if_fail (error == NULL || *error == NULL, FALSE); + + b_theme_unload (theme); + + if (b_object_get_filename (B_OBJECT (theme))) + { + retval = b_theme_parser_parse (theme, FALSE, error); + } + else + { + b_theme_load_from_scratch (theme); + retval = TRUE; + } + + theme->needs_blending = b_theme_needs_blending (theme); + + return retval; +} + +/** + * b_theme_unload: + * @theme: a #BTheme object + * + * Frees all data of a BTheme except the meta information stored in + * the header. + **/ +void +b_theme_unload (BTheme *theme) +{ + GList *list; + + g_return_if_fail (B_IS_THEME (theme)); + + g_free (theme->bg_image); + theme->bg_image = NULL; + + for (list = theme->overlays; list; list = list->next) + { + BOverlay *overlay = list->data; + GList *window; + + g_free (overlay->image); + overlay->image = NULL; + + for (window = overlay->windows; window; window = window->next) + g_free (window->data); + + g_list_free (overlay->windows); + g_free (overlay); + } + + g_list_free (theme->overlays); + theme->overlays = NULL; + + theme->needs_blending = FALSE; +} + +static void +b_theme_frame_boundary (BTheme *theme, + BWindow *window, + guchar data, + BRectangle *bbox) +{ + if (! data) + return; + + window += (data * theme->maxval) / 256; + + b_rectangle_union (&window->rect, bbox, bbox); +} + +/** + * b_theme_frame_diff_boundary + * @theme: a #BTheme + * @prev_data: data of the previous frame + * @frame_data: data of the current frame + * @bbox: returns bounding box + * + * Computes the bounding box of the difference image between two frames. + * + * Return value: %TRUE if the bounding box is not empty. + **/ +gboolean +b_theme_frame_diff_boundary (BTheme *theme, + const guchar *prev_data, + const guchar *frame_data, + BRectangle *bbox) +{ + GList *list; + + g_return_val_if_fail (B_IS_THEME (theme), FALSE); + g_return_val_if_fail (bbox != NULL, FALSE); + + bbox->x = 0; + bbox->y = 0; + bbox->w = 0; + bbox->h = 0; + + for (list = theme->overlays; list; list = list->next) + { + BOverlay *overlay = list->data; + + if (overlay->image) + { + GList *iter; + + for (iter = overlay->windows; iter; iter = iter->next) + { + BWindow *window = iter->data; + guint index = window->column + window->row * theme->columns; + + if (prev_data && frame_data) + { + if (frame_data[index] != prev_data[index]) + { + b_theme_frame_boundary (theme, + window, frame_data[index], bbox); + b_theme_frame_boundary (theme, + window, prev_data[index], bbox); + } + } + else if (prev_data) + { + b_theme_frame_boundary (theme, + window, prev_data[index], bbox); + } + else if (frame_data) + { + b_theme_frame_boundary (theme, + window, frame_data[index], bbox); + } + } + } + } + + return (bbox->w > 0 && bbox->h > 0); +} diff --git a/blib-1.1.7/blib/btheme.h b/blib-1.1.7/blib/btheme.h new file mode 100644 index 0000000..7f73f77 --- /dev/null +++ b/blib-1.1.7/blib/btheme.h @@ -0,0 +1,116 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (C) 2002-2004 The Blinkenlights Crew + * Sven Neumann + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __B_THEME_H__ +#define __B_THEME_H__ + +#define B_WINDOW_VALUE_ALL 0 + +G_BEGIN_DECLS + +typedef struct _BWindow BWindow; +typedef struct _BOverlay BOverlay; + +struct _BWindow +{ + gint value; + gint row; + gint column; + gint src_x; + gint src_y; + BRectangle rect; +}; + +struct _BOverlay +{ + gchar *image; + BColor color; + + GList *windows; +}; + + +#define B_TYPE_THEME (b_theme_get_type ()) +#define B_THEME(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), B_TYPE_THEME, BTheme)) +#define B_THEME_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), B_TYPE_THEME, BThemeClass)) +#define B_IS_THEME(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), B_TYPE_THEME)) +#define B_IS_THEME_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), B_TYPE_THEME)) +#define B_THEME_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), B_TYPE_THEME, BThemeClass)) + + +typedef struct _BThemeClass BThemeClass; + +struct _BThemeClass +{ + BObjectClass parent_class; +}; + +struct _BTheme +{ + BObjectClass parent_class; + + gchar *type; + + gint rows; + gint columns; + gint channels; + gint maxval; + + gint width; + gint height; + + BColor bg_color; + gchar *bg_image; + gint bg_image_x; + gint bg_image_y; + + GList *overlays; + + gboolean needs_blending; /* for optimizations */ +}; + + +GType b_theme_get_type (void) G_GNUC_CONST; + +BTheme * b_theme_new_from_file (const gchar *filename, + gboolean lazy_load, + GError **error); +BTheme * b_theme_new_from_scratch (const gchar *title, + const gchar *type, + gint rows, + gint columns, + gint channels, + gint maxval, + gint width, + gint height); + +gboolean b_theme_load (BTheme *theme, + GError **error); +void b_theme_unload (BTheme *theme); + +gboolean b_theme_frame_diff_boundary (BTheme *theme, + const guchar *prev_data, + const guchar *frame_data, + BRectangle *bbox); + + +G_END_DECLS + +#endif /* __B_THEME_H__ */ diff --git a/blib-1.1.7/blib/bthemes.c b/blib-1.1.7/blib/bthemes.c new file mode 100644 index 0000000..7816ad6 --- /dev/null +++ b/blib-1.1.7/blib/bthemes.c @@ -0,0 +1,306 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (C) 2002 The Blinkenlights Crew + * Sven Neumann + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include + +#include + +#include "btypes.h" +#include "bobject.h" +#include "btheme.h" +#include "bthemes.h" + + +typedef struct +{ + BThemesQuery *query; + GList *list; +} BThemesQueryData; + + +static const gchar * +b_themes_get_path (void) +{ + const gchar *env = g_getenv ("B_THEME_PATH"); + + if (env) + return env; + + return THEMEPATH; +} + +static gboolean +b_themes_match_query (BTheme *theme, + gpointer callback_data) +{ + BThemesQueryData *data = callback_data; + BThemesQuery *query = data->query; + + if ((query->flags & B_THEMES_QUERY_ROWS) && + (query->rows != theme->rows)) + return TRUE; + if ((query->flags & B_THEMES_QUERY_COLUMNS) && + (query->columns != theme->columns)) + return TRUE; + if ((query->flags & B_THEMES_QUERY_WIDTH) && + (query->width != theme->width)) + return TRUE; + if ((query->flags & B_THEMES_QUERY_HEIGHT) && + (query->height != theme->height)) + return TRUE; + + if ((query->flags & B_THEMES_QUERY_TYPE)) + { + if (query->type) + { + if (theme->type == NULL || strcmp (query->type, theme->type)) + return TRUE; + } + else if (theme->type) + return TRUE; + } + + if ((query->flags & B_THEMES_QUERY_NAME)) + { + const gchar *name = b_object_get_name (B_OBJECT (theme)); + + if (query->name) + { + if (name == NULL || strcmp (query->name, name)) + return TRUE; + } + else if (name) + return TRUE; + } + + g_object_ref (G_OBJECT (theme)); + data->list = g_list_prepend (data->list, theme); + + return TRUE; +} + +/** + * b_themes_query: + * @themepath: a colon-separated list of directories to search or %NULL to + * use the default path + * @query: pointer to a #BThemesQuery + * + * Looks for themes as defined by @query. If @themepath is not + * specified the default path is used. The default path can be overridden + * by setting the environment variable B_THEME_PATH. + * + * Each theme that matches the @query is lazy-loaded. + * + * Return value: a #GList of newly allocated, lazy-loaded #BTheme objects + * or %NULL if no matching theme was found + **/ +GList * +b_themes_query (const gchar *themepath, + BThemesQuery *query) +{ + BThemesQueryData query_data; + + g_return_val_if_fail (query != NULL, FALSE); + + query_data.query = query; + query_data.list = NULL; + + b_themes_foreach (themepath, b_themes_match_query, &query_data); + + return g_list_reverse (query_data.list); +} + +/** + * b_themes_foreach + * @themepath: a colon-separated list of directories to search or %NULL to + * use the default path + * @callback: a function to call for each theme + * @callback_data: data to pass to the @callback + * + * This function iterates over all themes in the @themepath, lazy-loads them, + * runs @callback on the theme and unrefs it again. The iteration is stopped + * if a @callback returns %FALSE. + * + * If @themepath is not specified, the default path is used. The + * default path can be overridden by setting the environment variable + * B_THEME_PATH. + **/ +void +b_themes_foreach (const gchar *themepath, + BThemesForeachFunc callback, + gpointer callback_data) +{ + BTheme *theme; + gchar **dirs; + gint i; + gboolean cont = TRUE; + + g_return_if_fail (callback != NULL); + + if (!themepath) + themepath = b_themes_get_path (); + + dirs = g_strsplit (themepath, G_SEARCHPATH_SEPARATOR_S, 12); + + for (i = 0; cont && dirs[i]; i++) + { + const gchar *dirname = dirs[i]; + const gchar *name; + GDir *dir; + + dir = g_dir_open (dirname, 0, NULL); + if (!dir) + continue; + + while (cont && (name = g_dir_read_name (dir))) + { + gchar *filename = g_build_filename (dirname, name, NULL); + + if (g_file_test (filename, G_FILE_TEST_IS_REGULAR)) + { + theme = b_theme_new_from_file (filename, TRUE, NULL); + if (theme) + { + cont = callback (theme, callback_data); + g_object_unref (theme); + } + } + + g_free (filename); + } + + g_dir_close (dir); + } + + g_strfreev (dirs); +} + + +/* some wrappers that provide the old (pre 1.0) API, don't use */ + +typedef struct +{ + GHFunc callback; + gpointer data; +} WrapperData; + +static gboolean +wrapper (BTheme *theme, + gpointer callback_data) +{ + WrapperData *wrapper_data = callback_data; + gchar *basename; + gchar *suffix; + + basename = g_path_get_basename (b_object_get_filename (B_OBJECT (theme))); + + if ((suffix = g_strrstr (basename, ".xml")) != NULL) + suffix[0] = '\0'; + + wrapper_data->callback (basename, theme, wrapper_data->data); + + g_free (basename); + + return TRUE; +} + +/** + * b_themes_foreach_theme: + * @themepath: + * @callback: + * @callback_data: + * + * Shouldn't be used in new code, use b_themes_foreach() instead. + **/ +void +b_themes_foreach_theme (const gchar *themepath, + GHFunc callback, + gpointer callback_data) +{ + WrapperData wrapper_data = { callback, callback_data }; + + g_return_if_fail (callback != NULL); + + b_themes_foreach (themepath, wrapper, &wrapper_data); +} + +/** + * b_themes_lookup_theme: + * @name: + * @themepath: + * @error: + * + * Shouldn't be used in new code, use b_themes_query() instead. + * + * Return value: + **/ +BTheme * +b_themes_lookup_theme (const gchar *name, + const gchar *themepath, + GError **error) +{ + BTheme *theme = NULL; + gchar **dirs; + gchar *filename; + gint i; + + g_return_val_if_fail (name != NULL, FALSE); + g_return_val_if_fail (error == NULL || *error == NULL, FALSE); + + if (!themepath) + themepath = b_themes_get_path (); + + filename = g_strconcat (name, ".xml", NULL); + + dirs = g_strsplit (themepath, G_SEARCHPATH_SEPARATOR_S, 12); + + for (i = 0; !theme && dirs[i]; i++) + { + const gchar *dirname = dirs[i]; + gchar *fullname = g_build_filename (dirname, filename, NULL); + + if (g_file_test (fullname, G_FILE_TEST_IS_REGULAR)) + { + theme = b_theme_new_from_file (fullname, TRUE, NULL); + } + else /* try w/o the suffix */ + { + g_free (fullname); + fullname = g_build_filename (dirname, name, NULL); + + if (g_file_test (fullname, G_FILE_TEST_IS_REGULAR)) + theme = b_theme_new_from_file (fullname, TRUE, NULL); + } + + g_free (fullname); + } + + g_strfreev (dirs); + + g_free (filename); + + if (!theme) + g_set_error (error, 0, 0, + "No theme of this name found in '%s'", themepath); + + return theme; +} diff --git a/blib-1.1.7/blib/bthemes.h b/blib-1.1.7/blib/bthemes.h new file mode 100644 index 0000000..95d38a5 --- /dev/null +++ b/blib-1.1.7/blib/bthemes.h @@ -0,0 +1,78 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (C) 2002 The Blinkenlights Crew + * Sven Neumann + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __B_THEMES_H__ +#define __B_THEMES_H__ + +G_BEGIN_DECLS + +typedef enum +{ + B_THEMES_QUERY_NONE = 0, + B_THEMES_QUERY_NAME = 1 << 0, + B_THEMES_QUERY_TYPE = 1 << 1, + B_THEMES_QUERY_ROWS = 1 << 2, + B_THEMES_QUERY_COLUMNS = 1 << 3, + B_THEMES_QUERY_WIDTH = 1 << 4, + B_THEMES_QUERY_HEIGHT = 1 << 5 +} BThemesQueryFlags; + +struct _BThemesQuery +{ + BThemesQueryFlags flags; + + const gchar *name; + const gchar *type; + gint rows; + gint columns; + gint width; + gint height; +}; + +typedef gboolean (* BThemesForeachFunc) (BTheme *theme, + gpointer callback_data); + + +/* searches a theme in the theme path */ +GList * b_themes_query (const gchar *themepath, + BThemesQuery *query); /* may be NULL */ + +/* calls callback for each theme with the short name and the theme */ +void b_themes_foreach (const gchar *themepath, /* may be NULL */ + BThemesForeachFunc callback, + gpointer callback_data); + + +#ifndef B_DISABLE_DEPRECATED + +/* some wrappers that provide the old (pre 1.0) API, don't use */ +void b_themes_foreach_theme (const gchar *themepath, /* may be NULL */ + GHFunc callback, + gpointer callback_data); +BTheme * b_themes_lookup_theme (const gchar *name, + const gchar *themepath, /* may be NULL */ + GError **error); + +#endif /* B_DISABLE_DEPRECATED */ + + +G_END_DECLS + +#endif /* __B_THEMES_H__ */ diff --git a/blib-1.1.7/blib/btypes.c b/blib-1.1.7/blib/btypes.c new file mode 100644 index 0000000..29c4439 --- /dev/null +++ b/blib-1.1.7/blib/btypes.c @@ -0,0 +1,41 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (C) 2002 The Blinkenlights Crew + * Sven Neumann + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include + +#include "btypes.h" + +GType +b_filename_get_type (void) +{ + static GType filename_type = 0; + + if (!filename_type) + { + static const GTypeInfo type_info = { 0, }; + + filename_type = g_type_register_static (G_TYPE_STRING, "BFilename", + &type_info, 0); + } + + return filename_type; +} diff --git a/blib-1.1.7/blib/btypes.h b/blib-1.1.7/blib/btypes.h new file mode 100644 index 0000000..bba2fe1 --- /dev/null +++ b/blib-1.1.7/blib/btypes.h @@ -0,0 +1,93 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (C) 2002 The Blinkenlights Crew + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __B_TYPES_H__ +#define __B_TYPES_H__ + +G_BEGIN_DECLS + +typedef enum +{ + B_KEY_0, + B_KEY_1, + B_KEY_2, + B_KEY_3, + B_KEY_4, + B_KEY_5, + B_KEY_6, + B_KEY_7, + B_KEY_8, + B_KEY_9, + B_KEY_HASH, + B_KEY_ASTERISK +} BModuleKey; + +typedef enum +{ + B_EVENT_TYPE_UNKNOWN = 0, + B_EVENT_TYPE_KEY, + B_EVENT_TYPE_PLAYER_ENTERED, + B_EVENT_TYPE_PLAYER_LEFT +} BModuleEventType; + +struct _BColor +{ + guchar a; + guchar r; + guchar g; + guchar b; +}; + +struct _BRectangle +{ + gint x; + gint y; + gint w; + gint h; +}; + +typedef struct _BColor BColor; +typedef struct _BEffects BEffects; +typedef struct _BModule BModule; +typedef struct _BModuleEvent BModuleEvent; +typedef struct _BModuleInfo BModuleInfo; +typedef struct _BMovie BMovie; +typedef struct _BMoviePlayer BMoviePlayer; +typedef struct _BObject BObject; +typedef struct _BPacket BPacket; +typedef struct _BParser BParser; +typedef struct _BProxyClient BProxyClient; +typedef struct _BProxyServer BProxyServer; +typedef struct _BReceiver BReceiver; +typedef struct _BRectangle BRectangle; +typedef struct _BSender BSender; +typedef struct _BTheme BTheme; +typedef struct _BThemesQuery BThemesQuery; +typedef struct _BWriter BWriter; + + +#define B_TYPE_FILENAME (b_filename_get_type ()) +#define B_VALUE_HOLDS_FILENAME(value) (G_TYPE_CHECK_VALUE_TYPE ((value), B_TYPE_FILENAME)) + +GType b_filename_get_type (void) G_GNUC_CONST; + + +G_END_DECLS + +#endif /* __B_TYPES_H__ */ diff --git a/blib-1.1.7/blib/butils.c b/blib-1.1.7/blib/butils.c new file mode 100644 index 0000000..c3106ad --- /dev/null +++ b/blib-1.1.7/blib/butils.c @@ -0,0 +1,496 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (C) 2002-2004 The Blinkenlights Crew + * Sven Neumann + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include +#include + +#include + +#include "btypes.h" +#include "bparams.h" +#include "butils.h" + + +/** + * b_filename_from_utf8: + * @name: the filename in UTF-8 encoding + * @root: an optional path to use + * @error: location to store the error occuring, or %NULL to ignore errors + * + * Convert @name in UTF-8 encoding to a filename in the filesystem's + * encoding. If @root is non-%NULL and @name is not an absolute + * filename, the returned filename is built using @root as a prefix. + * + * Return value: a pointer to the newly allocated filename or %NULL in + * case of an error. This value must be freed with g_free(). + **/ +gchar * +b_filename_from_utf8 (const gchar *name, + const gchar *root, + GError **error) +{ + gchar *filename; + GError *conv_error = NULL; + + g_return_val_if_fail (name != NULL, NULL); + g_return_val_if_fail (error == NULL || *error == NULL, NULL); + + filename = g_filename_from_utf8 (name, -1, NULL, NULL, &conv_error); + + if (!filename) + { + const gchar *charset; + + g_get_charset (&charset); + + g_set_error (error, 0, 0, + "Couldn't convert filename '%s' to " + "your filesystem encoding (%s): %s", + name, charset, conv_error->message); + g_error_free (conv_error); + + return NULL; + } + + if (root && !g_path_is_absolute (filename)) + { + gchar *tmp = g_build_filename (root, filename, NULL); + g_free (filename); + filename = tmp; + } + + return filename; +} + +/** + * b_parse_int: + * @str: the string to parse + * @value: location to store the integer value + * + * Parse an integer value from a string. + * + * Return value: %TRUE if the string could be parsed, %FALSE otherwise + **/ +gboolean +b_parse_int (const gchar *str, + gint *value) +{ + gchar *err; + glong l; + + g_return_val_if_fail (str != NULL, FALSE); + + l = strtol (str, &err, 0); + + if (*str && *err) + return FALSE; + + if (value) + *value = l; + + return TRUE; +} + +/** + * b_parse_boolean: + * @str: the string to parse + * @value: location to store the boolean value + * + * Parse a boolean value from a string. + * + * Return value: %TRUE if the string could be parsed, %FALSE otherwise + **/ +gboolean +b_parse_boolean (const gchar *str, + gboolean *value) +{ + g_return_val_if_fail (str != NULL, FALSE); + + if (g_ascii_strcasecmp (str, "yes") == 0) + *value = TRUE; + else if (g_ascii_strcasecmp (str, "no") == 0) + *value = FALSE; + else if (g_ascii_strcasecmp (str, "oui") == 0) + *value = TRUE; + else if (g_ascii_strcasecmp (str, "non") == 0) + *value = FALSE; + else + return FALSE; + + return TRUE; +} + +/** + * b_parse_double: + * @str: the string to parse + * @value: location to store the double value + * + * Parse a double (floating-point) value from a string. + * + * Return value: %TRUE if the string could be parsed, %FALSE otherwise + **/ +gboolean +b_parse_double (const gchar *str, + gdouble *value) +{ + gchar *end; + gdouble d; + + g_return_val_if_fail (str != NULL, FALSE); + + d = g_ascii_strtod (str, &end); + + if (end && *end) + return FALSE; + + if (value) + *value = d; + + return TRUE; +} + +/** + * b_parse_coordinates: + * @names: a %NULL-terminated array of names + * @values: a %NULL-terminated array of values + * @x: location to store the value of the x coordinate + * @y: location to store the value of the y coordinate + * + * Parses a pair of name/value arrays looking for the names "x" and "y" + * and tries to parse the associated values into integer values. + * + * Return value: %TRUE if both coordinates could be parsed, %FALSE otherwise + **/ +gboolean +b_parse_coordinates (const gchar **names, + const gchar **values, + gint *x, + gint *y) +{ + const gchar **name; + const gchar **value; + guint f = 0; + + g_return_val_if_fail (names != NULL && values != NULL, FALSE); + + for (name = names, value = values; *name && *value; name++, value++) + { + if (!(f&1) && strcmp (*name, "x") == 0 && b_parse_int (*value, x)) + f |= 1; + if (!(f&2) && strcmp (*name, "y") == 0 && b_parse_int (*value, y)) + f |= 2; + } + + return (f == (1 | 2)); +} + +/** + * b_parse_rectangle: + * @names: a %NULL-terminated array of names + * @values: a %NULL-terminated array of values + * @rect: pointer to a #BRectangle to store the result + * + * Parses a pair of name/value arrays looking for the names "x", "y", + * "width" and "heigth" and tries to parse the associated values into + * a #BRectangle. + * + * Return value: %TRUE if the rectangle could be parsed, %FALSE otherwise + **/ +gboolean +b_parse_rectangle (const gchar **names, + const gchar **values, + BRectangle *rect) +{ + const gchar **name; + const gchar **value; + guint f = 0; + + g_return_val_if_fail (names != NULL && values != NULL, FALSE); + g_return_val_if_fail (rect != NULL, FALSE); + + for (name = names, value = values; *name && *value; name++, value++) + { + if (!(f&1) && strcmp (*name, "x") == 0 && + b_parse_int (*value, &rect->x)) + f |= 1; + + if (!(f&2) && strcmp (*name, "y") == 0 && + b_parse_int (*value, &rect->y)) + f |= 2; + + if (!(f&4) && strcmp (*name, "width") == 0 && + b_parse_int (*value, &rect->w)) + f |= 4; + + if (!(f&8) && strcmp (*name, "height") == 0 && + b_parse_int (*value, &rect->h)) + f |= 8; + } + + return (f == (1 | 2 | 4 | 8)); +} + +/** + * b_parse_color: + * @names: a %NULL-terminated array of names + * @values: a %NULL-terminated array of values + * @color: pointer to a #BColor to store the result + * + * Parses a pair of name/value arrays looking for the name "color" and + * tries to convert the associated value to a #BColor. The color value + * is expected to be in hexadecimal notation as in HTML. + * + * Return value: %TRUE if the color could be parsed, %FALSE otherwise + **/ +gboolean +b_parse_color (const gchar **names, + const gchar **values, + BColor *color) +{ + const gchar **name; + const gchar **value; + + g_return_val_if_fail (names != NULL && values != NULL, FALSE); + g_return_val_if_fail (color != NULL, FALSE); + + for (name = names, value = values; *name && *value; name++, value++) + { + if (strcmp (*name, "color") == 0 && **value == '#') + { + gchar *err; + guint32 argb = strtoul (*value + 1, &err, 16); + + if (*err) + continue; + + color->b = argb & 0xFF; argb >>= 8; + color->g = argb & 0xFF; argb >>= 8; + color->r = argb & 0xFF; argb >>= 8; + + if (strlen (*value + 1) > 6) + color->a = argb & 0xFF; + else + color->a = 0xFF; + + return TRUE; + } + } + + return FALSE; +} + +/** + * b_parse_param: + * @object: a #GObject + * @root: an optional string to use as root if a filename is set + * @names: a %NULL-terminated array of names + * @values: a %NULL-terminated array of values + * @error: location to store the error occuring, or %NULL to ignore errors + * + * Parses a pair of name/value arrays looking for the names "key" and + * "value". The key/value pair is then used to set the respective object + * property by calling b_object_set_property(). + * + * Return value: %TRUE if parsing was successful, %FALSE otherwise + **/ +gboolean +b_parse_param (GObject *object, + const gchar *root, + const gchar **names, + const gchar **values, + GError **error) +{ + const gchar *key = NULL; + const gchar *val = NULL; + gint i; + + g_return_val_if_fail (G_IS_OBJECT (object), FALSE); + g_return_val_if_fail (names != NULL && values != NULL, FALSE); + g_return_val_if_fail (error == NULL || *error == NULL, FALSE); + + for (i = 0; names[i] && values[i]; i++) + { + if (! strcmp (names[i], "key")) + { + key = values[i]; + val = NULL; + } + else if (! strcmp (names[i], "value")) + { + if (key) + val = values[i]; + } + } + + if (!key) + { + g_set_error (error, 0, 0, + "key attribute is missing for param element"); + return FALSE; + } + if (!val) + { + g_set_error (error, 0, 0, + "value attribute is missing for param element"); + return FALSE; + } + + return b_object_set_property (object, key, val, root, error); +} + +/** + * b_object_set_property: + * @object: a #GObject + * @key: the name of the property + * @value: the property value as a string + * @root: an optional string to use as root if a filename property is set + * @error: location to store the error occuring, or %NULL to ignore errors + * + * Sets the object property %key by interpreting the string + * @value. This function takes care of converting the string to the + * proper type. If the property is a %B_TYPE_FILENAME the filename is + * build using the @root parameter. + * + * Return value: %TRUE on success, %FALSE otherwise + **/ +gboolean +b_object_set_property (GObject *object, + const gchar *key, + const gchar *value, + const gchar *root, + GError **error) +{ + GObjectClass *class; + GParamSpec *spec; + GValue gvalue = { 0 }; + + g_return_val_if_fail (G_IS_OBJECT (object), FALSE); + g_return_val_if_fail (key != NULL, FALSE); + g_return_val_if_fail (value != NULL, FALSE); + g_return_val_if_fail (error == NULL || *error == NULL, FALSE); + + class = G_OBJECT_GET_CLASS (object); + spec = g_object_class_find_property (class, key); + + if (!spec) + { + g_set_error (error, 0, 0, + "%s doesn't have a property named '%s'", + G_OBJECT_CLASS_NAME (class), key); + return FALSE; + } + + if (B_IS_PARAM_SPEC_FILENAME (spec)) + { + gchar *filename = b_filename_from_utf8 (value, root, error); + + if (!filename) + return FALSE; + + g_value_init (&gvalue, G_TYPE_STRING); + g_value_set_string_take_ownership (&gvalue, filename); + } + else + { + g_value_init (&gvalue, G_TYPE_STRING); + g_value_set_static_string (&gvalue, value); + } + + g_object_set_property (object, key, &gvalue); + + g_value_unset (&gvalue); + + return TRUE; +} + + +void +b_rectangle_union (const BRectangle *src1, + const BRectangle *src2, + BRectangle *dest) +{ + gint dest_x, dest_y; + + g_return_if_fail (src1 != NULL); + g_return_if_fail (src2 != NULL); + g_return_if_fail (dest != NULL); + + if (src1->w > 0 && src1->h > 0 && src2->w > 0 && src2->h > 0) + { + dest_x = MIN (src1->x, src2->x); + dest_y = MIN (src1->y, src2->y); + + dest->w = MAX (src1->x + src1->w, src2->x + src2->w) - dest_x; + dest->h = MAX (src1->y + src1->h, src2->y + src2->h) - dest_y; + dest->x = dest_x; + dest->y = dest_y; + } + else if (src1->w > 0 && src1->h > 0) + { + *dest = *src1; + } + else if (src2->w > 0 && src2->h > 0) + { + *dest = *src2; + } + else + { + dest->x = dest->y = dest->w = dest->h = 0; + } +} + +gboolean +b_rectangle_intersect (const BRectangle *src1, + const BRectangle *src2, + BRectangle *dest) +{ + gint dest_x, dest_y; + gint dest_w, dest_h; + + g_return_val_if_fail (src1 != NULL, FALSE); + g_return_val_if_fail (src2 != NULL, FALSE); + + dest_x = MAX (src1->x, src2->x); + dest_y = MAX (src1->y, src2->y); + dest_w = MIN (src1->x + src1->w, src2->x + src2->w) - dest_x; + dest_h = MIN (src1->y + src1->h, src2->y + src2->h) - dest_y; + + if (dest_w > 0 && dest_h > 0) + { + if (dest) + { + dest->x = dest_x; + dest->y = dest_y; + dest->w = dest_w; + dest->h = dest_h; + } + + return TRUE; + } + else if (dest) + { + dest->w = 0; + dest->h = 0; + } + + return FALSE; +} diff --git a/blib-1.1.7/blib/butils.h b/blib-1.1.7/blib/butils.h new file mode 100644 index 0000000..38b06a8 --- /dev/null +++ b/blib-1.1.7/blib/butils.h @@ -0,0 +1,63 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (C) 2001-2003 The Blinkenlights Crew + * Sven Neumann + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __B_UTILS_H__ +#define __B_UTILS_H__ + +gchar * b_filename_from_utf8 (const gchar *name, + const gchar *root, + GError **error); + +gboolean b_parse_int (const gchar *str, + gint *value); +gboolean b_parse_boolean (const gchar *str, + gboolean *value); +gboolean b_parse_double (const gchar *str, + gdouble *value); +gboolean b_parse_coordinates (const gchar **names, + const gchar **values, + gint *x, + gint *y); +gboolean b_parse_rectangle (const gchar **names, + const gchar **values, + BRectangle *rect); +gboolean b_parse_color (const gchar **names, + const gchar **values, + BColor *color); +gboolean b_parse_param (GObject *object, + const gchar *root, + const gchar **names, + const gchar **values, + GError **error); + +gboolean b_object_set_property (GObject *object, + const gchar *key, + const gchar *value, + const gchar *root, + GError **error); + +void b_rectangle_union (const BRectangle *src1, + const BRectangle *src2, + BRectangle *dest); +gboolean b_rectangle_intersect (const BRectangle *src1, + const BRectangle *src2, + BRectangle *dest); + +#endif /* __B_UTILS_H__ */ diff --git a/blib-1.1.7/blib/bwriter.c b/blib-1.1.7/blib/bwriter.c new file mode 100644 index 0000000..5e35863 --- /dev/null +++ b/blib-1.1.7/blib/bwriter.c @@ -0,0 +1,241 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (C) 2002 The Blinkenlights Crew + * Sven Neumann + * + * Based on code written 2001 for convergence integrated media GmbH. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include + +#include + +#include "btypes.h" +#include "bwriter.h" + +struct _BWriter +{ + FILE *stream; + gint indent; + gint indent_level; +}; + + +static void b_write_attributes (BWriter *writer, + va_list attributes); +static void inline b_write_indent (BWriter *writer); + + +/** + * b_writer_new: + * @stream: a FILE stream prepared for writing + * @indent: how many characters to indent per nesting level + * + * Creates a new #BWriter which gives a convenient interface to write + * XML data to @stream. The writer should later be freed using + * b_writer_free(). + * + * Return value: a newly allocate #BWriter + **/ +BWriter * +b_writer_new (FILE *stream, + gint indent) +{ + BWriter *writer; + + g_return_val_if_fail (stream != NULL, NULL); + g_return_val_if_fail (indent >= 0, NULL); + + writer = g_new0 (BWriter, 1); + + writer->stream = stream; + writer->indent = indent; + + return writer; +} + +/** + * b_writer_free: + * @writer: a #BWriter + * + * Frees the resources allocated for @writer. You must not access + * @writer after calling this function. + **/ +void +b_writer_free (BWriter *writer) +{ + g_return_if_fail (writer != NULL); + + g_free (writer); +} + +/** + * b_write_header: + * @writer: a #BWriter + * @encoding: an optional encoding string or %NULL + * + * Writes an XML header to the stream associated with @writer. + **/ +void +b_write_header (BWriter *writer, + const gchar *encoding) +{ + g_return_if_fail (writer != NULL); + + if (encoding && *encoding) + fprintf (writer->stream, + "\n", encoding); + else + fprintf (writer->stream, "\n"); +} + +/** + * b_write_open_tag: + * @writer: a #BWriter + * @tag: the name of the element to open + * @Varargs: an optional key/value pairs interpreted as attributes + * + * Writes an opening XML tag with the element name @tag to the stream + * associated with @writer. You can pass a %NULL-terminated list of + * key/value pairs that are written out as attributes. + **/ +void +b_write_open_tag (BWriter *writer, + const gchar *tag, + ...) +{ + va_list attributes; + + g_return_if_fail (writer != NULL); + g_return_if_fail (tag != NULL); + + va_start (attributes, tag); + + b_write_indent (writer); + + fprintf (writer->stream, "<%s", tag); + b_write_attributes (writer, attributes); + fprintf (writer->stream, ">\n"); + + writer->indent_level++; + + va_end (attributes); +} + +/** + * b_write_close_tag: + * @writer: a #BWriter + * @tag: the name of the element to close + * + * Writes a closing XML tag with the element name @tag to the stream + * associated with @writer. + **/ +void +b_write_close_tag (BWriter *writer, + const gchar *tag) +{ + g_return_if_fail (writer != NULL); + g_return_if_fail (tag != NULL); + + writer->indent_level--; + b_write_indent (writer); + + fprintf (writer->stream, "\n", tag); +} + +/** + * b_write_element: + * @writer: a #BWriter + * @tag: the element name + * @value: the element value + * @Varargs: an optional key/value pairs interpreted as attributes + * + * Writes an XML element with the name @tag and the value @value to + * the stream associated with @writer. If @value is %NULL, an empty + * element is written. You can pass a %NULL-terminated list of + * key/value pairs that are written out as attributes. + **/ +void +b_write_element (BWriter *writer, + const gchar *tag, + const gchar *value, + ...) +{ + va_list attributes; + + g_return_if_fail (writer != NULL); + g_return_if_fail (tag != NULL); + + va_start (attributes, value); + + b_write_indent (writer); + + fprintf (writer->stream, "<%s", tag); + b_write_attributes (writer, attributes); + + if (value) + { + gchar *escaped = g_markup_escape_text (value, strlen (value)); + fprintf (writer->stream, ">%s\n", escaped, tag); + g_free (escaped); + } + else + { + fprintf (writer->stream, "/>\n"); + } + + va_end (attributes); +} + + +/* private functions */ + +static void +b_write_attributes (BWriter *writer, + va_list attributes) +{ + const gchar *name; + const gchar *attribute; + + name = va_arg (attributes, const gchar *); + + while (name) + { + attribute = va_arg (attributes, const gchar *); + + fprintf (writer->stream, " %s=\"%s\"", name, attribute); + + name = va_arg (attributes, const gchar *); + } +} + +static const gchar *spaces = " "; /* 16 spaces */ + +static inline void +b_write_indent (BWriter *writer) +{ + gint indent = writer->indent * writer->indent_level; + + while (indent > 16) + { + fprintf (writer->stream, spaces); + indent -= 16; + } + fprintf (writer->stream, spaces + 16 - indent); +} diff --git a/blib-1.1.7/blib/bwriter.h b/blib-1.1.7/blib/bwriter.h new file mode 100644 index 0000000..ecd161d --- /dev/null +++ b/blib-1.1.7/blib/bwriter.h @@ -0,0 +1,47 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (C) 2002 The Blinkenlights Crew + * Sven Neumann + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __B_WRITER_H__ +#define __B_WRITER_H__ + +#include + +G_BEGIN_DECLS + + +BWriter * b_writer_new (FILE *stream, + gint indent); +void b_writer_free (BWriter *writer); + +void b_write_header (BWriter *writer, + const gchar *encoding); +void b_write_open_tag (BWriter *writer, + const gchar *tag, + ...); +void b_write_close_tag (BWriter *writer, + const gchar *tag); +void b_write_element (BWriter *writer, + const gchar *tag, + const gchar *value, + ...); + +G_END_DECLS + +#endif /* __B_WRITER_H__ */ diff --git a/blib-1.1.7/blib/gif-load.c b/blib-1.1.7/blib/gif-load.c new file mode 100644 index 0000000..68b040b --- /dev/null +++ b/blib-1.1.7/blib/gif-load.c @@ -0,0 +1,643 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2001-2002 The Blinkenlights Crew + * Sven Neumann + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +/* GIF loading routines stripped out of the GIF loading filter for The GIMP. + * + * Modified for blinkentools in 2001 by Sven Neumann . + * Included into blib in 2002 by Sven Neumann . + * + * GIMP plug-in written by Adam D. Moss + * + * Based around original GIF code by David Koblas. + * + * This filter uses code taken from the "giftopnm" and "ppmtogif" programs + * which are part of the "netpbm" package. + * + * + * "The Graphics Interchange Format(c) is the Copyright property of + * CompuServe Incorporated. GIF(sm) is a Service Mark property of + * CompuServe Incorporated." + */ + +/* Copyright notice for GIF code from which this plugin was long ago * + * derived (David Koblas has granted permission to relicense): * + * +-------------------------------------------------------------------+ * + * | Copyright 1990, 1991, 1993, David Koblas. (koblas@extra.com) | * + * +-------------------------------------------------------------------+ */ + + +#include +#include + +#include + +#include "gif-load.h" + + +#define MAX_LZW_BITS 12 + +#define INTERLACE 0x40 +#define LOCALCOLORMAP 0x80 +#define BitSet(byte, bit) (((byte) & (bit)) == (bit)) + +#define LM_to_uint(a,b) (((b)<<8)|(a)) + + +static int ReadColorMap (GIOChannel *io, + int number, + unsigned char *buffer); +static int GetDataBlock (GIOChannel *io, + unsigned char *buf); +static int GetCode (GIOChannel *io, + int code_size, + int flag); +static int LZWReadByte (GIOChannel *io, + int flag, + int input_code_size); + + +static gboolean +ReadOK (GIOChannel *io, + gchar *buffer, + gsize len) +{ + while (len > 0) + { + GIOStatus status; + gsize bytes; + + status = g_io_channel_read_chars (io, buffer, len, &bytes, NULL); + + if (status == G_IO_STATUS_ERROR || status == G_IO_STATUS_EOF) + break; + + len -= bytes; + } + + return (len == 0); +} + +int +GIFDecodeHeader (GIOChannel *io, + gboolean skip_magic, + int *Width, + int *Height, + int *Background, + int *colors, + unsigned char **cmap) +{ + int AspectRatio; + unsigned char buf[16]; + char version[4]; + + if (!skip_magic) + { + if (!ReadOK (io, buf, 6)) + { + fprintf (stderr, "GIF: error reading magic number\n"); + return 0; + } + + if (strncmp ((char *) buf, "GIF", 3) != 0) + { + fprintf (stderr, "GIF: not a GIF file\n"); + return 0; + } + + strncpy (version, (char *) buf + 3, 3); + version[3] = '\0'; + + if ((strcmp (version, "87a") != 0) && (strcmp (version, "89a") != 0)) + { + fprintf (stderr, "GIF: bad version number, not '87a' or '89a'\n"); + return 0; + } + } + + if (!ReadOK (io, buf, 7)) + { + fprintf (stderr, "GIF: failed to read screen descriptor\n"); + return 0; + } + + *Width = LM_to_uint (buf[0], buf[1]); + *Height = LM_to_uint (buf[2], buf[3]); + *colors = 2 << (buf[4] & 0x07); + if (Background) + *Background = buf[5]; + + AspectRatio = buf[6]; + if (AspectRatio != 0 && AspectRatio != 49) + fprintf (stderr, "GIF: warning - non-square pixels\n"); + + *cmap = NULL; + + if (BitSet (buf[4], LOCALCOLORMAP)) + { + guchar *colormap; + + colormap = g_new0 (guchar, 3 * *colors); + + /* Global Colormap */ + if (!ReadColorMap (io, *colors, colormap)) + { + fprintf (stderr, "GIF: error reading global colormap\n"); + g_free (colormap); + return 0; + } + + *cmap = colormap; + } + + return 1; +} + +int +GIFDecodeRecordType (GIOChannel *io, + GIFRecordType *type) +{ + unsigned char c; + + if (!ReadOK (io, &c, 1)) + { + fprintf (stderr, "GIF: EOF / read error on image data\n"); + return 0; + } + + switch (c) + { + case ',': + *type = IMAGE; + return 1; + + case '!': + if (!ReadOK (io, &c, 1)) + { + fprintf (stderr, "GIF: EOF / read error on extension function code\n"); + return 0; + } + + switch (c) + { + case 0xf9: + *type = GRAPHIC_CONTROL_EXTENSION; + break; + case 0xfe: + *type = COMMENT_EXTENSION; + break; + case 0x01: /* PLAINTEXT_EXTENSION */ + case 0xff: /* APPLICATION_EXTENSION */ + *type = UNKNOWN_EXTENSION; + break; + default: + return 0; + } + + return 1; + + case ';': + *type = TERMINATOR; + return 1; + + default: + fprintf (stderr, "GIF: bogus character 0x%02x, ignoring\n", c); + return GIFDecodeRecordType (io, type); + } + + return 0; +} + +int +GIFDecodeImage (GIOChannel *io, + int *Width, + int *Height, + int *offx, + int *offy, + int *colors, + unsigned char **cmap, + unsigned char *data) +{ + unsigned char buf[16]; + unsigned char c; + unsigned char *dest; + int local_cmap; + int interlace; + int v; + int width, height; + int xpos = 0, ypos = 0, pass = 0; + + if (!ReadOK (io, buf, 9)) + { + fprintf (stderr, "GIF: couldn't read image data\n"); + return 0; + } + + *colors = 0; + *cmap = NULL; + + local_cmap = BitSet (buf[8], LOCALCOLORMAP); + + if (local_cmap) + { + guchar *colormap; + + *colors = 2 << (buf[8] & 0x07); + colormap = g_new0 (guchar, 3 * *colors); + + if (!ReadColorMap (io, *colors, colormap)) + { + g_free (colormap); + fprintf (stderr, "GIF: error reading local colormap\n"); + return 0; + } + + *cmap = colormap; + } + + *Width = width = LM_to_uint (buf[4], buf[5]); + *Height = height = LM_to_uint (buf[6], buf[7]); + *offx = LM_to_uint (buf[0], buf[1]); + *offy = LM_to_uint (buf[2], buf[3]); + + interlace = BitSet (buf[8], INTERLACE); + + if (!ReadOK (io, &c, 1)) + { + fprintf (stderr, "GIF: EOF / read error on image data\n"); + goto error; + } + + if (LZWReadByte (io, 1, c) < 0) + { + fprintf (stderr, "GIF: error while reading\n"); + goto error; + } + + while ((v = LZWReadByte (io, 0, c)) >= 0) + { + dest = data + (ypos * width) + xpos; + *dest = (unsigned char) v; + + xpos++; + if (xpos == width) + { + xpos = 0; + if (interlace) + { + switch (pass) + { + case 0: + case 1: + ypos += 8; + break; + case 2: + ypos += 4; + break; + case 3: + ypos += 2; + break; + } + + if (ypos >= height) + { + pass++; + switch (pass) + { + case 1: + ypos = 4; + break; + case 2: + ypos = 2; + break; + case 3: + ypos = 1; + break; + default: + goto fini; + } + } + } + else + { + ypos++; + } + } + if (ypos >= height) + break; + } + + fini: + if (LZWReadByte (io, 0, c) >= 0) + fprintf (stderr, "GIF: too much input data, ignoring extra...\n"); + + return 1; + + error: + g_free (*cmap); + *cmap = NULL; + return 0; +} + +int +GIFDecodeGraphicControlExt (GIOChannel *io, + GIFDisposeType *Disposal, + int *Delay, + int *Transparent) +{ + unsigned char buf[256]; + + if (GetDataBlock (io, buf) < 4) + return 0; + + *Disposal = (buf[0] >> 2) & 0x7; + *Delay = LM_to_uint (buf[1], buf[2]) * 10; /* the external API is ms */ + + if ((buf[0] & 0x1) != 0) + *Transparent = buf[3]; + else + *Transparent = -1; + + while (GetDataBlock (io, buf) > 0) + ; + + return 1; +} + +int +GIFDecodeCommentExt (GIOChannel *io, + char **comment) +{ + gchar buf[256]; + gint comment_len; + gint len; + + *comment = NULL; + comment_len = 0; + + while ((len = GetDataBlock (io, (unsigned char *) buf)) > 0) + { + *comment = g_realloc (*comment, comment_len + len + 1); + strncpy (*comment + comment_len, buf, len); + comment_len += len; + } + + return 1; +} + +void +GIFDecodeUnknownExt (GIOChannel *io) +{ + char buf[256]; + + while (GetDataBlock (io, buf) > 0) + ; +} + +static int +ReadColorMap (GIOChannel *io, + int number, + unsigned char *cmap) +{ + int i; + unsigned char rgb[3]; + + for (i = 0; i < number; ++i) + { + if (!ReadOK (io, rgb, sizeof (rgb))) + { + fprintf (stderr, "GIF: bad colormap\n"); + return 0; + } + + *cmap++ = rgb[0]; + *cmap++ = rgb[1]; + *cmap++ = rgb[2]; + } + + return 1; +} + + +int ZeroDataBlock = 0; + +static int +GetDataBlock (GIOChannel *io, + unsigned char *buf) +{ + unsigned char count; + + if (!ReadOK (io, &count, 1)) + { + fprintf (stderr, "GIF: error in getting DataBlock size\n"); + return -1; + } + + ZeroDataBlock = count == 0; + + if ((count != 0) && (!ReadOK (io, buf, count))) + { + fprintf (stderr, "GIF: error in reading DataBlock\n"); + return -1; + } + + return count; +} + +static int +GetCode (GIOChannel *io, + int code_size, + int flag) +{ + static unsigned char buf[280]; + static int curbit, lastbit, done, last_byte; + int i, j, ret; + unsigned char count; + + if (flag) + { + curbit = 0; + lastbit = 0; + done = 0; + last_byte = 2; + return 0; + } + + if ((curbit + code_size) >= lastbit) + { + if (done) + { + if (curbit >= lastbit) + fprintf (stderr, "GIF: ran off the end of my bits\n"); + + return -1; + } + + buf[0] = buf[last_byte - 2]; + buf[1] = buf[last_byte - 1]; + + if ((count = GetDataBlock (io, &buf[2])) <= 0) + done = 1; + + last_byte = 2 + count; + curbit = (curbit - lastbit) + 16; + lastbit = (2 + count) * 8; + } + + ret = 0; + for (i = curbit, j = 0; j < code_size; ++i, ++j) + ret |= ((buf[i / 8] & (1 << (i % 8))) != 0) << j; + + curbit += code_size; + + return ret; +} + +static int +LZWReadByte (GIOChannel *io, + int flag, + int input_code_size) +{ + static int fresh = 0; + int code, incode; + static int code_size, set_code_size; + static int max_code, max_code_size; + static int firstcode, oldcode; + static int clear_code, end_code; + static int table[2][(1 << MAX_LZW_BITS)]; + static int stack[(1 << (MAX_LZW_BITS)) * 2], *sp; + register int i; + + if (flag) + { + set_code_size = input_code_size; + code_size = set_code_size + 1; + clear_code = 1 << set_code_size; + end_code = clear_code + 1; + max_code_size = 2 * clear_code; + max_code = clear_code + 2; + + GetCode (io, 0, 1); + + fresh = 1; + + for (i = 0; i < clear_code; ++i) + { + table[0][i] = 0; + table[1][i] = i; + } + for (; i < (1 << MAX_LZW_BITS); ++i) + table[0][i] = table[1][0] = 0; + + sp = stack; + + return 0; + } + else if (fresh) + { + fresh = 0; + do + { + firstcode = oldcode = + GetCode (io, code_size, 0); + } + while (firstcode == clear_code); + return firstcode; + } + + if (sp > stack) + return *--sp; + + while ((code = GetCode (io, code_size, 0)) >= 0) + { + if (code == clear_code) + { + for (i = 0; i < clear_code; ++i) + { + table[0][i] = 0; + table[1][i] = i; + } + for (; i < (1 << MAX_LZW_BITS); ++i) + table[0][i] = table[1][i] = 0; + code_size = set_code_size + 1; + max_code_size = 2 * clear_code; + max_code = clear_code + 2; + sp = stack; + firstcode = oldcode = + GetCode (io, code_size, 0); + return firstcode; + } + else if (code == end_code) + { + int count; + unsigned char buf[260]; + + if (ZeroDataBlock) + return -2; + + while ((count = GetDataBlock (io, buf)) > 0) + ; + + if (count != 0) + fprintf (stderr, + "GIF: missing EOD in data stream (common occurence)"); + return -2; + } + + incode = code; + + if (code >= max_code) + { + *sp++ = firstcode; + code = oldcode; + } + + while (code >= clear_code) + { + *sp++ = table[1][code]; + if (code == table[0][code]) + { + fprintf (stderr, "GIF: circular table entry BIG ERROR\n"); + return -2; + } + code = table[0][code]; + } + + *sp++ = firstcode = table[1][code]; + + if ((code = max_code) < (1 << MAX_LZW_BITS)) + { + table[0][code] = oldcode; + table[1][code] = firstcode; + ++max_code; + if ((max_code >= max_code_size) && + (max_code_size < (1 << MAX_LZW_BITS))) + { + max_code_size *= 2; + ++code_size; + } + } + + oldcode = incode; + + if (sp > stack) + return *--sp; + } + return code; +} diff --git a/blib-1.1.7/blib/gif-load.h b/blib-1.1.7/blib/gif-load.h new file mode 100644 index 0000000..761400b --- /dev/null +++ b/blib-1.1.7/blib/gif-load.h @@ -0,0 +1,81 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2001-2002 The Blinkenlights Crew + * Sven Neumann + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +/* GIF loading routines stripped out of the GIF loading filter for The GIMP. + * + * Modified for blinkentools in 2001 by Sven Neumann . + * Included into blib in 2002 by Sven Neumann . + * + * GIMP plug-in written by Adam D. Moss + * + * Based around original GIF code by David Koblas. + * + * This filter uses code taken from the "giftopnm" and "ppmtogif" programs + * which are part of the "netpbm" package. + * + * "The Graphics Interchange Format(c) is the Copyright property of + * CompuServe Incorporated. GIF(sm) is a Service Mark property of + * CompuServe Incorporated." + */ + +/* Copyright notice for GIF code from which this plugin was long ago * + * derived (David Koblas has granted permission to relicense): * + * +-------------------------------------------------------------------+ * + * | Copyright 1990, 1991, 1993, David Koblas. (koblas@extra.com) | * + * +-------------------------------------------------------------------+ */ + + +#ifndef __GIF_LOAD_H__ +#define __GIF_LOAD_H__ + +#include + +G_BEGIN_DECLS + +int GIFDecodeHeader (GIOChannel *io, + gboolean skip_magic, + int *Width, + int *Height, + int *Background, + int *colors, + unsigned char **cmap); +int GIFDecodeRecordType (GIOChannel *io, + GIFRecordType *type); +int GIFDecodeImage (GIOChannel *io, + int *Width, + int *Height, + int *offx, + int *offy, + int *colors, + unsigned char **cmap, + unsigned char *data); +int GIFDecodeGraphicControlExt (GIOChannel *io, + GIFDisposeType *Disposal, + int *Delay, + int *Transparent); +int GIFDecodeCommentExt (GIOChannel *io, + char **comment); +void GIFDecodeUnknownExt (GIOChannel *io); + +#ifdef __cplusplus +} +#endif + +#endif /* __GIF_LOAD_H__ */ diff --git a/blib-1.1.7/blib/gif-save.c b/blib-1.1.7/blib/gif-save.c new file mode 100644 index 0000000..ec92854 --- /dev/null +++ b/blib-1.1.7/blib/gif-save.c @@ -0,0 +1,736 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2001-2002 The Blinkenlights Crew + * Sven Neumann + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +/* GIF savinging routines stripped out of the GIF saving filter for The GIMP. + * + * Modified for blinkentools in 2001 by Sven Neumann . + * Included into blib in 2002 by Sven Neumann . + * + * GIMP plug-in written by Adam D. Moss + * + * Based around original GIF code by David Koblas. + * + * This filter uses code taken from the "giftopnm" and "ppmtogif" programs + * which are part of the "netpbm" package. + * + * "The Graphics Interchange Format(c) is the Copyright property of + * CompuServe Incorporated. GIF(sm) is a Service Mark property of + * CompuServe Incorporated." + */ + +/* Copyright notice for GIF code from which this plugin was long ago * + * derived (David Koblas has granted permission to relicense): * + * +-------------------------------------------------------------------+ * + * | Copyright 1990, 1991, 1993, David Koblas. (koblas@extra.com) | * + * +-------------------------------------------------------------------+ */ + + +#include +#include + +#include "gif-save.h" + + +static int GIFNextPixel (void); + +/* + * a code_int must be able to hold 2**BITS values of type int, and also -1 + */ +typedef int code_int; +typedef long int count_int; + + +unsigned char *pixels; + +static void Putword (int, FILE *); +static void compress (int, FILE *); +static void output (code_int); +static void cl_block (void); +static void cl_hash (count_int); +static void writeerr (void); +static void char_init (void); +static void char_out (int); +static void flush_char (void); + + +static long CountDown; + +/* + * Return the next pixel from the image + */ +int +GIFNextPixel (void) +{ + if (CountDown == 0) + return EOF; + + --CountDown; + + return *pixels++; +} + +/* public */ + +void +GIFEncodeHeader (FILE *fp, + int gif89, + int Width, + int Height, + int Background, + int BitsPerPixel, + char *cmap) +{ + int B; + int Resolution; + int ColorMapSize; + int i; + + ColorMapSize = 1 << BitsPerPixel; + + Resolution = BitsPerPixel; + + /* + * Write the Magic header + */ + fwrite (gif89 ? "GIF89a" : "GIF87a", 1, 6, fp); + + /* + * Write out the screen width and height + */ + Putword (Width, fp); + Putword (Height, fp); + + /* + * Indicate that there is a global colour map + */ + B = 0x80; /* Yes, there is a color map */ + + /* + * OR in the resolution + */ + B |= (Resolution - 1) << 5; + + /* + * OR in the Bits per Pixel + */ + B |= (BitsPerPixel - 1); + + /* + * Write it out + */ + fputc (B, fp); + + /* + * Write out the Background colour + */ + fputc (Background, fp); + + /* + * Byte of 0's (future expansion) + */ + fputc (0, fp); + + /* + * Write out the Global Colour Map + */ + for (i = 0; i < 3 * ColorMapSize; i++) + fputc (cmap[i], fp); +} + +void +GIFEncodeGraphicControlExt (FILE *fp, + GIFDisposeType Disposal, + int Delay, + int Animation, + int Transparent) +{ + Delay /= 10; /* the external API is ms */ + + /* + * Write out extension for transparent colour index, if necessary. + */ + if ( (Transparent >= 0) || (Animation) ) + { + /* Extension Introducer - fixed. */ + fputc ('!', fp); + /* Graphic Control Label - fixed. */ + fputc (0xf9, fp); + /* Block Size - fixed. */ + fputc (4, fp); + + /* Packed Fields - XXXdddut (d=disposal, u=userInput, t=transFlag) */ + /* s8421 */ + fputc ( ((Transparent >= 0) ? 0x01 : 0x00) /* TRANSPARENCY */ + + /* DISPOSAL */ + | (Animation ? (Disposal << 2) : 0x00), + /* 0x03 or 0x01 build frames cumulatively */ + /* 0x02 clears frame before drawing */ + /* 0x00 'don't care' */ + + fp); + + fputc (Delay & 255, fp); + fputc ((Delay>>8) & 255, fp); + + fputc (Transparent, fp); + fputc (0, fp); + } +} + +void +GIFEncodeImageData (FILE *fp, + int Width, + int Height, + int BitsPerPixel, + int offset_x, + int offset_y, + char *data) +{ + int Resolution; + int ColorMapSize; + int InitCodeSize; + + ColorMapSize = 1 << BitsPerPixel; + + Resolution = BitsPerPixel; + + /* + * Calculate number of bits we are expecting + */ + CountDown = (long) Width * (long) Height; + pixels = data; + + /* + * The initial code size + */ + if (BitsPerPixel <= 1) + InitCodeSize = 2; + else + InitCodeSize = BitsPerPixel; + + /* + * Write an Image separator + */ + fputc (',', fp); + + /* + * Write the Image header + */ + Putword (offset_x, fp); + Putword (offset_y, fp); + Putword (Width, fp); + Putword (Height, fp); + + /* no interlacing */ + fputc (0x0, fp); + + /* + * Write out the initial code size + */ + fputc (InitCodeSize, fp); + + /* + * Go and actually compress the data + */ + compress (InitCodeSize + 1, fp); + + /* + * Write out a Zero-length packet (to end the series) + */ + fputc (0x0, fp); +} + +void +GIFEncodeClose (FILE *fp) +{ + /* + * Write the GIF file terminator + */ + fputc (';', fp); + + /* + * And close the file + */ + fclose (fp); +} + +void +GIFEncodeLoopExt (FILE *fp, + int num_loops) +{ + fputc(0x21,fp); + fputc(0xff,fp); + fputc(0x0b,fp); + fputs("NETSCAPE2.0",fp); + fputc(0x03,fp); + fputc(0x01,fp); + Putword(num_loops,fp); + fputc(0x00,fp); + + /* NOTE: num_loops==0 means 'loop infinitely' */ +} + + +void +GIFEncodeCommentExt (FILE *fp, + char *comment) +{ + if (!comment || !*comment) + return; + + if (strlen(comment)>240) + { + fprintf (stderr, + "GIF: warning: comment too large - comment block not written.\n"); + return; + } + + fputc(0x21,fp); + fputc(0xfe,fp); + fputc(strlen(comment),fp); + fputs((const char *)comment,fp); + fputc(0x00,fp); +} + + + +/* + * Write out a word to the GIF file + */ +static void +Putword (int w, + FILE *fp) +{ + fputc (w & 0xff, fp); + fputc ((w / 256) & 0xff, fp); +} + + +/*************************************************************************** + * + * GIFCOMPR.C - GIF Image compression routines + * + * Lempel-Ziv compression based on 'compress'. GIF modifications by + * David Rowley (mgardi@watdcsu.waterloo.edu) + * + ***************************************************************************/ + +/* + * General DEFINEs + */ + +#define GIF_BITS 12 + +#define HSIZE 5003 /* 80% occupancy */ + +#ifdef NO_UCHAR +typedef char char_type; +#else /*NO_UCHAR */ +typedef unsigned char char_type; +#endif /*NO_UCHAR */ + +/* + + * GIF Image compression - modified 'compress' + * + * Based on: compress.c - File compression ala IEEE Computer, June 1984. + * + * By Authors: Spencer W. Thomas (decvax!harpo!utah-cs!utah-gr!thomas) + * Jim McKie (decvax!mcvax!jim) + * Steve Davies (decvax!vax135!petsd!peora!srd) + * Ken Turkowski (decvax!decwrl!turtlevax!ken) + * James A. Woods (decvax!ihnp4!ames!jaw) + * Joe Orost (decvax!vax135!petsd!joe) + * + */ +#include + +#define ARGVAL() (*++(*argv) || (--argc && *++argv)) + +static int n_bits; /* number of bits/code */ +static int maxbits = GIF_BITS; /* user settable max # bits/code */ +static code_int maxcode; /* maximum code, given n_bits */ +static code_int maxmaxcode = (code_int) 1 << GIF_BITS; /* should NEVER generate this code */ +#ifdef COMPATIBLE /* But wrong! */ +#define MAXCODE(Mn_bits) ((code_int) 1 << (Mn_bits) - 1) +#else /*COMPATIBLE */ +#define MAXCODE(Mn_bits) (((code_int) 1 << (Mn_bits)) - 1) +#endif /*COMPATIBLE */ + +static count_int htab[HSIZE]; +static unsigned short codetab[HSIZE]; +#define HashTabOf(i) htab[i] +#define CodeTabOf(i) codetab[i] + +const code_int hsize = HSIZE; /* the original reason for this being + variable was "for dynamic table sizing", + but since it was never actually changed + I made it const --Adam. */ + +/* + * To save much memory, we overlay the table used by compress() with those + * used by decompress(). The tab_prefix table is the same size and type + * as the codetab. The tab_suffix table needs 2**GIF_BITS characters. We + * get this from the beginning of htab. The output stack uses the rest + * of htab, and contains characters. There is plenty of room for any + * possible stack (stack used to be 8000 characters). + */ + +#define tab_prefixof(i) CodeTabOf(i) +#define tab_suffixof(i) ((char_type*)(htab))[i] +#define de_stack ((char_type*)&tab_suffixof((code_int)1< 0) + goto probe; + nomatch: + output ((code_int) ent); + ++out_count; + ent = c; + + if (free_ent < maxmaxcode) + { + CodeTabOf (i) = free_ent++; /* code -> hashtable */ + HashTabOf (i) = fcode; + } + else + cl_block (); + } + /* + * Put out the final code. + */ + output ((code_int) ent); + ++out_count; + output ((code_int) EOFCode); +} + +/***************************************************************** + * TAG( output ) + * + * Output the given code. + * Inputs: + * code: A n_bits-bit integer. If == -1, then EOF. This assumes + * that n_bits =< (long)wordsize - 1. + * Outputs: + * Outputs code to the file. + * Assumptions: + * Chars are 8 bits long. + * Algorithm: + * Maintain a GIF_BITS character long buffer (so that 8 codes will + * fit in it exactly). Use the VAX insv instruction to insert each + * code in turn. When the buffer fills up empty it and start over. + */ + +static void +output (code_int code) +{ + cur_accum &= masks[cur_bits]; + + if (cur_bits > 0) + cur_accum |= ((long) code << cur_bits); + else + cur_accum = code; + + cur_bits += n_bits; + + while (cur_bits >= 8) + { + char_out ((unsigned int) (cur_accum & 0xff)); + cur_accum >>= 8; + cur_bits -= 8; + } + + /* + * If the next entry is going to be too big for the code size, + * then increase it, if possible. + */ + if (free_ent > maxcode || clear_flg) + { + if (clear_flg) + { + + maxcode = MAXCODE (n_bits = g_init_bits); + clear_flg = 0; + + } + else + { + + ++n_bits; + if (n_bits == maxbits) + maxcode = maxmaxcode; + else + maxcode = MAXCODE (n_bits); + } + } + + if (code == EOFCode) + { + /* + * At EOF, write the rest of the buffer. + */ + while (cur_bits > 0) + { + char_out ((unsigned int) (cur_accum & 0xff)); + cur_accum >>= 8; + cur_bits -= 8; + } + + flush_char (); + + fflush (g_outfile); + + if (ferror (g_outfile)) + writeerr (); + } +} + +/* + * Clear out the hash table + */ +static void +cl_block () /* table clear for block compress */ +{ + + cl_hash ((count_int) hsize); + free_ent = ClearCode + 2; + clear_flg = 1; + + output ((code_int) ClearCode); +} + +static void +cl_hash (register count_int hsize) /* reset code table */ +{ + + register count_int *htab_p = htab + hsize; + + register long i; + register long m1 = -1; + + i = hsize - 16; + do + { /* might use Sys V memset(3) here */ + *(htab_p - 16) = m1; + *(htab_p - 15) = m1; + *(htab_p - 14) = m1; + *(htab_p - 13) = m1; + *(htab_p - 12) = m1; + *(htab_p - 11) = m1; + *(htab_p - 10) = m1; + *(htab_p - 9) = m1; + *(htab_p - 8) = m1; + *(htab_p - 7) = m1; + *(htab_p - 6) = m1; + *(htab_p - 5) = m1; + *(htab_p - 4) = m1; + *(htab_p - 3) = m1; + *(htab_p - 2) = m1; + *(htab_p - 1) = m1; + htab_p -= 16; + } + while ((i -= 16) >= 0); + + for (i += 16; i > 0; --i) + *--htab_p = m1; +} + +static void +writeerr () +{ + fprintf (stderr, "GIF: error writing output file\n"); + return; +} + +/****************************************************************************** + * + * GIF Specific routines + * + ******************************************************************************/ + +/* + * Number of characters so far in this 'packet' + */ +static int a_count; + +/* + * Set up the 'byte output' routine + */ +static void +char_init () +{ + a_count = 0; +} + +/* + * Define the storage for the packet accumulator + */ +static char accum[256]; + +/* + * Add a character to the end of the current packet, and if it is 254 + * characters, flush the packet to disk. + */ +static void +char_out (int c) +{ + accum[a_count++] = c; + if (a_count >= 254) + flush_char (); +} + +/* + * Flush the packet to disk, and reset the accumulator + */ +static void +flush_char (void) +{ + if (a_count > 0) + { + fputc (a_count, g_outfile); + fwrite (accum, 1, a_count, g_outfile); + a_count = 0; + } +} diff --git a/blib-1.1.7/blib/gif-save.h b/blib-1.1.7/blib/gif-save.h new file mode 100644 index 0000000..401065c --- /dev/null +++ b/blib-1.1.7/blib/gif-save.h @@ -0,0 +1,83 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2001-2002 The Blinkenlights Crew + * Sven Neumann + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +/* GIF savinging routines stripped out of the GIF saving filter for The GIMP. + * + * Modified for blinkentools in 2001 by Sven Neumann . + * Included into blib in 2002 by Sven Neumann . + * + * GIMP plug-in written by Adam D. Moss + * + * Based around original GIF code by David Koblas. + * + * This filter uses code taken from the "giftopnm" and "ppmtogif" programs + * which are part of the "netpbm" package. + * + * "The Graphics Interchange Format(c) is the Copyright property of + * CompuServe Incorporated. GIF(sm) is a Service Mark property of + * CompuServe Incorporated." + */ + +/* Copyright notice for GIF code from which this plugin was long ago * + * derived (David Koblas has granted permission to relicense): * + * +-------------------------------------------------------------------+ * + * | Copyright 1990, 1991, 1993, David Koblas. (koblas@extra.com) | * + * +-------------------------------------------------------------------+ */ + + +#ifndef __GIF_SAVE_H__ +#define __GIF_SAVE_H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +void GIFEncodeHeader (FILE *fp, + int gif89, + int Width, + int Height, + int Background, + int BitsPerPixel, + char *cmap); +void GIFEncodeGraphicControlExt (FILE *fp, + GIFDisposeType Disposal, + int Delay, + int Animation, + int Transparent); +void GIFEncodeImageData (FILE *fp, + int Width, + int Height, + int BitsPerPixel, + int offset_x, + int offset_y, + char *data); +void GIFEncodeClose (FILE *fp); +void GIFEncodeCommentExt (FILE *fp, + char *comment); +void GIFEncodeLoopExt (FILE *fp, + int num_loops); + +#ifdef __cplusplus +} +#endif + +#endif /* __GIF_SAVE_H__ */ diff --git a/blib-1.1.7/blib/gif-types.h b/blib-1.1.7/blib/gif-types.h new file mode 100644 index 0000000..792df39 --- /dev/null +++ b/blib-1.1.7/blib/gif-types.h @@ -0,0 +1,76 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2001-2002 The Blinkenlights Crew + * Sven Neumann + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +/* GIF loading routines stripped out of the GIF loading filter for The GIMP. + * + * Modified for blinkentools in 2001 by Sven Neumann. + * Included into blib in 2002 by Sven Neumann. + * + * GIMP plug-in written by Adam D. Moss + * + * Based around original GIF code by David Koblas. + * + * This filter uses code taken from the "giftopnm" and "ppmtogif" programs + * which are part of the "netpbm" package. + * + * "The Graphics Interchange Format(c) is the Copyright property of + * CompuServe Incorporated. GIF(sm) is a Service Mark property of + * CompuServe Incorporated." + */ + +/* Copyright notice for code which this plugin was long ago derived from */ +/* +-------------------------------------------------------------------+ */ +/* | Copyright 1990, 1991, 1993, David Koblas. (koblas@netcom.com) | */ +/* | Permission to use, copy, modify, and distribute this software | */ +/* | and its documentation for any purpose and without fee is hereby | */ +/* | granted, provided that the above copyright notice appear in all | */ +/* | copies and that both that copyright notice and this permission | */ +/* | notice appear in supporting documentation. This software is | */ +/* | provided "as is" without express or implied warranty. | */ +/* +-------------------------------------------------------------------+ */ + +#ifndef __GIF_TYPES_H__ +#define __GIF_TYPES_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum +{ + DISPOSE_UNSPECIFIED, + DISPOSE_COMBINE, + DISPOSE_REPLACE +} GIFDisposeType; + +typedef enum +{ + IMAGE, + GRAPHIC_CONTROL_EXTENSION, + COMMENT_EXTENSION, + UNKNOWN_EXTENSION, + TERMINATOR +} GIFRecordType; + +#ifdef __cplusplus +} +#endif + +#endif /* __GIF_TYPES_H__ */ diff --git a/blib-1.1.7/config.guess b/blib-1.1.7/config.guess new file mode 100755 index 0000000..e8c6fc0 --- /dev/null +++ b/blib-1.1.7/config.guess @@ -0,0 +1,1432 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003 Free Software Foundation, Inc. + +timestamp='2004-01-05' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Per Bothner . +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# The plan is that this can be called by configure scripts if you +# don't specify an explicit build system type. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit 0 ;; + --version | -v ) + echo "$version" ; exit 0 ;; + --help | --h* | -h ) + echo "$usage"; exit 0 ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep __ELF__ >/dev/null + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit 0 ;; + amiga:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + arc:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + hp300:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mac68k:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + macppc:OpenBSD:*:*) + echo powerpc-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvme68k:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvme88k:OpenBSD:*:*) + echo m88k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvmeppc:OpenBSD:*:*) + echo powerpc-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + pegasos:OpenBSD:*:*) + echo powerpc-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + pmax:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + sgi:OpenBSD:*:*) + echo mipseb-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + sun3:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + wgrisc:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + *:OpenBSD:*:*) + echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + alpha:OSF1:*:*) + if test $UNAME_RELEASE = "V4.0"; then + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + fi + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit 0 ;; + Alpha*:OpenVMS:*:*) + echo alpha-hp-vms + exit 0 ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit 0 ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit 0 ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit 0;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit 0 ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit 0 ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit 0 ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit 0 ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit 0;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit 0;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit 0 ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit 0 ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit 0 ;; + DRS?6000:UNIX_SV:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7 && exit 0 ;; + esac ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + i86pc:SunOS:5.*:*) + echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit 0 ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit 0 ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit 0 ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit 0 ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit 0 ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit 0 ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit 0 ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit 0 ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit 0 ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit 0 ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit 0 ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit 0 ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c \ + && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ + && exit 0 + echo mips-mips-riscos${UNAME_RELEASE} + exit 0 ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit 0 ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit 0 ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit 0 ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit 0 ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit 0 ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit 0 ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit 0 ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit 0 ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit 0 ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit 0 ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit 0 ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit 0 ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit 0 ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit 0 ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit 0 ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 + echo rs6000-ibm-aix3.2.5 + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit 0 ;; + *:AIX:*:[45]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit 0 ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit 0 ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit 0 ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit 0 ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit 0 ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit 0 ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit 0 ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit 0 ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + # avoid double evaluation of $set_cc_for_build + test -n "$CC_FOR_BUILD" || eval $set_cc_for_build + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit 0 ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit 0 ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 + echo unknown-hitachi-hiuxwe2 + exit 0 ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit 0 ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit 0 ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit 0 ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit 0 ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit 0 ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit 0 ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit 0 ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit 0 ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit 0 ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit 0 ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit 0 ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit 0 ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + *:UNICOS/mp:*:*) + echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit 0 ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit 0 ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit 0 ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit 0 ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit 0 ;; + *:FreeBSD:*:*) + # Determine whether the default compiler uses glibc. + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + #if __GLIBC__ >= 2 + LIBC=gnu + #else + LIBC= + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` + # GNU/KFreeBSD systems have a "k" prefix to indicate we are using + # FreeBSD's kernel, but not the complete OS. + case ${LIBC} in gnu) kernel_only='k' ;; esac + echo ${UNAME_MACHINE}-unknown-${kernel_only}freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC} + exit 0 ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit 0 ;; + i*:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit 0 ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit 0 ;; + x86:Interix*:[34]*) + echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//' + exit 0 ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit 0 ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit 0 ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit 0 ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit 0 ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit 0 ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + exit 0 ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit 0 ;; + arm*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + cris:Linux:*:*) + echo cris-axis-linux-gnu + exit 0 ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + mips:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips + #undef mipsel + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mipsel + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` + test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 + ;; + mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips64 + #undef mips64el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mips64el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips64 + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` + test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 + ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit 0 ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit 0 ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit 0 ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit 0 ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit 0 ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit 0 ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-gnu + exit 0 ;; + i*86:Linux:*:*) + # The BFD linker knows what the default object file format is, so + # first see if it will tell us. cd to the root directory to prevent + # problems with other programs or directories called `ld' in the path. + # Set LC_ALL=C to ensure ld outputs messages in English. + ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ + | sed -ne '/supported targets:/!d + s/[ ][ ]*/ /g + s/.*supported targets: *// + s/ .*// + p'` + case "$ld_supported_targets" in + elf32-i386) + TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" + ;; + a.out-i386-linux) + echo "${UNAME_MACHINE}-pc-linux-gnuaout" + exit 0 ;; + coff-i386) + echo "${UNAME_MACHINE}-pc-linux-gnucoff" + exit 0 ;; + "") + # Either a pre-BFD a.out linker (linux-gnuoldld) or + # one that does not give us useful --help. + echo "${UNAME_MACHINE}-pc-linux-gnuoldld" + exit 0 ;; + esac + # Determine whether the default compiler is a.out or elf + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + #ifdef __ELF__ + # ifdef __GLIBC__ + # if __GLIBC__ >= 2 + LIBC=gnu + # else + LIBC=gnulibc1 + # endif + # else + LIBC=gnulibc1 + # endif + #else + #ifdef __INTEL_COMPILER + LIBC=gnu + #else + LIBC=gnuaout + #endif + #endif + #ifdef __dietlibc__ + LIBC=dietlibc + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` + test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0 + test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 + ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit 0 ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit 0 ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit 0 ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit 0 ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit 0 ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit 0 ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit 0 ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit 0 ;; + i*86:*:5:[78]*) + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit 0 ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit 0 ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i386. + echo i386-pc-msdosdjgpp + exit 0 ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit 0 ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit 0 ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit 0 ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit 0 ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit 0 ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit 0 ;; + M68*:*:R3V[567]*:*) + test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && echo i486-ncr-sysv4.3${OS_REL} && exit 0 + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && echo i486-ncr-sysv4 && exit 0 ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit 0 ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit 0 ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit 0 ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit 0 ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit 0 ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit 0 ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit 0 ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit 0 ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit 0 ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit 0 ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit 0 ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit 0 ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit 0 ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit 0 ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit 0 ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit 0 ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit 0 ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit 0 ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit 0 ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit 0 ;; + *:Darwin:*:*) + case `uname -p` in + *86) UNAME_PROCESSOR=i686 ;; + powerpc) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit 0 ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit 0 ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit 0 ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit 0 ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit 0 ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit 0 ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit 0 ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit 0 ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit 0 ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit 0 ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit 0 ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit 0 ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit 0 ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit 0 ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit 0 ;; + *:DRAGONFLY:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly${UNAME_RELEASE} + exit 0 ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0 + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit 0 ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit 0 ;; + c34*) + echo c34-convex-bsd + exit 0 ;; + c38*) + echo c38-convex-bsd + exit 0 ;; + c4*) + echo c4-convex-bsd + exit 0 ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/blib-1.1.7/config.h.in b/blib-1.1.7/config.h.in new file mode 100644 index 0000000..3b7e181 --- /dev/null +++ b/blib-1.1.7/config.h.in @@ -0,0 +1,61 @@ +/* config.h.in. Generated from configure.in by autoheader. */ + +/* The Blib version */ +#undef BLIB_VERSION + +/* Define to 1 if you have the header file. */ +#undef HAVE_DLFCN_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Version number of package */ +#undef VERSION + +/* Define to empty if `const' does not conform to ANSI C. */ +#undef const diff --git a/blib-1.1.7/config.sub b/blib-1.1.7/config.sub new file mode 100755 index 0000000..463186d --- /dev/null +++ b/blib-1.1.7/config.sub @@ -0,0 +1,1537 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003 Free Software Foundation, Inc. + +timestamp='2004-01-05' + +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine. It does not imply ALL GNU software can. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit 0 ;; + --version | -v ) + echo "$version" ; exit 0 ;; + --help | --h* | -h ) + echo "$usage"; exit 0 ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit 0;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \ + kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis) + os= + basic_machine=$1 + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | m32r | m68000 | m68k | m88k | mcore \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64vr | mips64vrel \ + | mips64orion | mips64orionel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | msp430 \ + | ns16k | ns32k \ + | openrisc | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \ + | strongarm \ + | tahoe | thumb | tic4x | tic80 | tron \ + | v850 | v850e \ + | we32k \ + | x86 | xscale | xstormy16 | xtensa \ + | z8k) + basic_machine=$basic_machine-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* \ + | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ + | clipper-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | m32r-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | mcore-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | msp430-* \ + | none-* | np1-* | nv1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* \ + | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \ + | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tron-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \ + | xtensa-* \ + | ymp-* \ + | z8k-*) + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + crds | unos) + basic_machine=m68k-crds + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + mmix*) + basic_machine=mmix-knuth + os=-mmixware + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + nv1) + basic_machine=nv1-cray + os=-unicosmp + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + or32 | or32-*) + basic_machine=or32-unknown + os=-coff + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; + tic55x | c55x*) + basic_machine=tic55x-unknown + os=-coff + ;; + tic6x | c6x*) + basic_machine=tic6x-unknown + os=-coff + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparc | sparcv9 | sparcv9b) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -netbsd* | -openbsd* | -kfreebsd* | -freebsd* | -riscix* \ + | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -kaos*) + os=-kaos + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-ibm) + os=-aix + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit 0 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/blib-1.1.7/configure b/blib-1.1.7/configure new file mode 100755 index 0000000..3c7bf94 --- /dev/null +++ b/blib-1.1.7/configure @@ -0,0 +1,22617 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.59. +# +# Copyright (C) 2003 Free Software Foundation, Inc. +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then + set -o posix +fi +DUALCASE=1; export DUALCASE # for MKS sh + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# Work around bugs in pre-3.0 UWIN ksh. +$as_unset ENV MAIL MAILPATH +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)$' \| \ + . : '\(.\)' 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } + /^X\/\(\/\/\)$/{ s//\1/; q; } + /^X\/\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + + +# PATH needs CR, and LINENO needs CR and PATH. +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" || { + # Find who we are. Look in the path if we contain no path at all + # relative or not. + case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done + + ;; + esac + # We did not find ourselves, most probably we were run as `sh COMMAND' + # in which case we are not to be found in the path. + if test "x$as_myself" = x; then + as_myself=$0 + fi + if test ! -f "$as_myself"; then + { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 + { (exit 1); exit 1; }; } + fi + case $CONFIG_SHELL in + '') + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for as_base in sh bash ksh sh5; do + case $as_dir in + /*) + if ("$as_dir/$as_base" -c ' + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then + $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } + $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } + CONFIG_SHELL=$as_dir/$as_base + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$0" ${1+"$@"} + fi;; + esac + done +done +;; + esac + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line before each line; the second 'sed' does the real + # work. The second script uses 'N' to pair each line-number line + # with the numbered line, and appends trailing '-' during + # substitution so that $LINENO is not a special case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) + sed '=' <$as_myself | + sed ' + N + s,$,-, + : loop + s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + t loop + s,-$,, + s,^['$as_cr_digits']*\n,, + ' >$as_me.lineno && + chmod +x $as_me.lineno || + { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensible to this). + . ./$as_me.lineno + # Exit status is that of the last command. + exit +} + + +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ECHO_C=' +' ECHO_T=' ' ;; + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +esac + +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + # We could just check for DJGPP; but this test a) works b) is more generic + # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). + if test -f conf$$.exe; then + # Don't use ln at all; we don't have any links + as_ln_s='cp -p' + else + as_ln_s='ln -s' + fi +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.file + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_executable_p="test -f" + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +# IFS +# We need space, tab and new line, in precisely that order. +as_nl=' +' +IFS=" $as_nl" + +# CDPATH. +$as_unset CDPATH + + + +# Check that we are running under the correct shell. +SHELL=${CONFIG_SHELL-/bin/sh} + +case X$ECHO in +X*--fallback-echo) + # Remove one level of quotation (which was required for Make). + ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','` + ;; +esac + +echo=${ECHO-echo} +if test "X$1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X$1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then + # Yippee, $echo works! + : +else + # Restart under the correct shell. + exec $SHELL "$0" --no-reexec ${1+"$@"} +fi + +if test "X$1" = X--fallback-echo; then + # used as fallback echo + shift + cat </dev/null && + echo_test_string="`eval $cmd`" && + (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null + then + break + fi + done +fi + +if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + : +else + # The Solaris, AIX, and Digital Unix default echo programs unquote + # backslashes. This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # + # So, first we look for a working echo in the user's PATH. + + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for dir in $PATH /usr/ucb; do + IFS="$lt_save_ifs" + if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && + test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + echo="$dir/echo" + break + fi + done + IFS="$lt_save_ifs" + + if test "X$echo" = Xecho; then + # We didn't find a better echo, so look for alternatives. + if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # This shell has a builtin print -r that does the trick. + echo='print -r' + elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && + test "X$CONFIG_SHELL" != X/bin/ksh; then + # If we have ksh, try running configure again with it. + ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} + export ORIGINAL_CONFIG_SHELL + CONFIG_SHELL=/bin/ksh + export CONFIG_SHELL + exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} + else + # Try using printf. + echo='printf %s\n' + if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # Cool, printf works + : + elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL + export CONFIG_SHELL + SHELL="$CONFIG_SHELL" + export SHELL + echo="$CONFIG_SHELL $0 --fallback-echo" + elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + echo="$CONFIG_SHELL $0 --fallback-echo" + else + # maybe with a smaller string... + prev=: + + for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do + if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null + then + break + fi + prev="$cmd" + done + + if test "$prev" != 'sed 50q "$0"'; then + echo_test_string=`eval $prev` + export echo_test_string + exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} + else + # Oops. We lost completely, so just stick with echo. + echo=echo + fi + fi + fi + fi +fi +fi + +# Copy echo and quote the copy suitably for passing to libtool from +# the Makefile, instead of quoting the original, which is used later. +ECHO=$echo +if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then + ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" +fi + + + + +tagnames=${tagnames+${tagnames},}CXX + +tagnames=${tagnames+${tagnames},}F77 + +# Name of the host. +# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +exec 6>&1 + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_config_libobj_dir=. +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} + +# Maximum number of lines to put in a shell here document. +# This variable seems obsolete. It should probably be removed, and +# only ac_max_sed_lines should be used. +: ${ac_max_here_lines=38} + +# Identity of this package. +PACKAGE_NAME= +PACKAGE_TARNAME= +PACKAGE_VERSION= +PACKAGE_STRING= +PACKAGE_BUGREPORT= + +ac_unique_file="blib/blib.h" +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#if HAVE_SYS_TYPES_H +# include +#endif +#if HAVE_SYS_STAT_H +# include +#endif +#if STDC_HEADERS +# include +# include +#else +# if HAVE_STDLIB_H +# include +# endif +#endif +#if HAVE_STRING_H +# if !STDC_HEADERS && HAVE_MEMORY_H +# include +# endif +# include +#endif +#if HAVE_STRINGS_H +# include +#endif +#if HAVE_INTTYPES_H +# include +#else +# if HAVE_STDINT_H +# include +# endif +#endif +#if HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS BLIB_MAJOR_VERSION BLIB_MINOR_VERSION BLIB_MICRO_VERSION BLIB_INTERFACE_AGE BLIB_BINARY_AGE BLIB_VERSION LT_RELEASE LT_CURRENT LT_REVISION LT_AGE INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO AMTAR install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM AWK SET_MAKE am__leading_dot MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT build build_cpu build_vendor build_os host host_cpu host_vendor host_os CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE EGREP LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB CPP CXX CXXFLAGS ac_ct_CXX CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL OS_WIN32_TRUE OS_WIN32_FALSE WIN32_LIBS WIN32_CFLAGS DATADIR INCLUDEDIR THEMEPATH MODULEPATH PKG_CONFIG GLIB_CFLAGS GLIB_LIBS GLIB_GENMARSHAL GOBJECT_QUERY GLIB_MKENUMS DIRECTFB_CFLAGS DIRECTFB_LIBS DIRECTFB_VIEW_TYPE HAVE_DIRECTFB_TRUE HAVE_DIRECTFB_FALSE GDK_PIXBUF_CFLAGS GDK_PIXBUF_LIBS PIXBUF_VIEW_TYPE HAVE_PIXBUF_TRUE HAVE_PIXBUF_FALSE GTK_CFLAGS GTK_LIBS GTK_VIEW_TYPE HAVE_GTK_TRUE HAVE_GTK_FALSE AA_LIBS AA_VIEW_TYPE HAVE_AA_TRUE HAVE_AA_FALSE BUILD_MODULES_TRUE BUILD_MODULES_FALSE HTML_DIR GTKDOC HAVE_GTK_DOC_TRUE HAVE_GTK_DOC_FALSE HAVE_GTK_DOC DB2HTML HAVE_DOCBOOK_TRUE HAVE_DOCBOOK_FALSE ENABLE_GTK_DOC_TRUE ENABLE_GTK_DOC_FALSE LIBOBJS LTLIBOBJS' +ac_subst_files='' + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datadir='${prefix}/share' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +libdir='${exec_prefix}/lib' +includedir='${prefix}/include' +oldincludedir='/usr/include' +infodir='${prefix}/info' +mandir='${prefix}/man' + +ac_prev= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval "$ac_prev=\$ac_option" + ac_prev= + continue + fi + + ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_option in + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad | --data | --dat | --da) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ + | --da=*) + datadir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/-/_/g'` + eval "enable_$ac_feature=no" ;; + + -enable-* | --enable-*) + ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/-/_/g'` + case $ac_option in + *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; + *) ac_optarg=yes ;; + esac + eval "enable_$ac_feature='$ac_optarg'" ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst \ + | --locals | --local | --loca | --loc | --lo) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* \ + | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package| sed 's/-/_/g'` + case $ac_option in + *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; + *) ac_optarg=yes ;; + esac + eval "with_$ac_package='$ac_optarg'" ;; + + -without-* | --without-*) + ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package | sed 's/-/_/g'` + eval "with_$ac_package=no" ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) { echo "$as_me: error: unrecognized option: $ac_option +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 + { (exit 1); exit 1; }; } + ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` + eval "$ac_envvar='$ac_optarg'" + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + { echo "$as_me: error: missing argument to $ac_option" >&2 + { (exit 1); exit 1; }; } +fi + +# Be sure to have absolute paths. +for ac_var in exec_prefix prefix +do + eval ac_val=$`echo $ac_var` + case $ac_val in + [\\/$]* | ?:[\\/]* | NONE | '' ) ;; + *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; };; + esac +done + +# Be sure to have absolute paths. +for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ + localstatedir libdir includedir oldincludedir infodir mandir +do + eval ac_val=$`echo $ac_var` + case $ac_val in + [\\/$]* | ?:[\\/]* ) ;; + *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; };; + esac +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used." >&2 + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then its parent. + ac_confdir=`(dirname "$0") 2>/dev/null || +$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$0" : 'X\(//\)[^/]' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$0" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r $srcdir/$ac_unique_file; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r $srcdir/$ac_unique_file; then + if test "$ac_srcdir_defaulted" = yes; then + { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 + { (exit 1); exit 1; }; } + else + { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 + { (exit 1); exit 1; }; } + fi +fi +(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || + { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 + { (exit 1); exit 1; }; } +srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` +ac_env_build_alias_set=${build_alias+set} +ac_env_build_alias_value=$build_alias +ac_cv_env_build_alias_set=${build_alias+set} +ac_cv_env_build_alias_value=$build_alias +ac_env_host_alias_set=${host_alias+set} +ac_env_host_alias_value=$host_alias +ac_cv_env_host_alias_set=${host_alias+set} +ac_cv_env_host_alias_value=$host_alias +ac_env_target_alias_set=${target_alias+set} +ac_env_target_alias_value=$target_alias +ac_cv_env_target_alias_set=${target_alias+set} +ac_cv_env_target_alias_value=$target_alias +ac_env_CC_set=${CC+set} +ac_env_CC_value=$CC +ac_cv_env_CC_set=${CC+set} +ac_cv_env_CC_value=$CC +ac_env_CFLAGS_set=${CFLAGS+set} +ac_env_CFLAGS_value=$CFLAGS +ac_cv_env_CFLAGS_set=${CFLAGS+set} +ac_cv_env_CFLAGS_value=$CFLAGS +ac_env_LDFLAGS_set=${LDFLAGS+set} +ac_env_LDFLAGS_value=$LDFLAGS +ac_cv_env_LDFLAGS_set=${LDFLAGS+set} +ac_cv_env_LDFLAGS_value=$LDFLAGS +ac_env_CPPFLAGS_set=${CPPFLAGS+set} +ac_env_CPPFLAGS_value=$CPPFLAGS +ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} +ac_cv_env_CPPFLAGS_value=$CPPFLAGS +ac_env_CPP_set=${CPP+set} +ac_env_CPP_value=$CPP +ac_cv_env_CPP_set=${CPP+set} +ac_cv_env_CPP_value=$CPP +ac_env_CXX_set=${CXX+set} +ac_env_CXX_value=$CXX +ac_cv_env_CXX_set=${CXX+set} +ac_cv_env_CXX_value=$CXX +ac_env_CXXFLAGS_set=${CXXFLAGS+set} +ac_env_CXXFLAGS_value=$CXXFLAGS +ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set} +ac_cv_env_CXXFLAGS_value=$CXXFLAGS +ac_env_CXXCPP_set=${CXXCPP+set} +ac_env_CXXCPP_value=$CXXCPP +ac_cv_env_CXXCPP_set=${CXXCPP+set} +ac_cv_env_CXXCPP_value=$CXXCPP +ac_env_F77_set=${F77+set} +ac_env_F77_value=$F77 +ac_cv_env_F77_set=${F77+set} +ac_cv_env_F77_value=$F77 +ac_env_FFLAGS_set=${FFLAGS+set} +ac_env_FFLAGS_value=$FFLAGS +ac_cv_env_FFLAGS_set=${FFLAGS+set} +ac_cv_env_FFLAGS_value=$FFLAGS + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures this package to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +_ACEOF + + cat <<_ACEOF +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --datadir=DIR read-only architecture-independent data [PREFIX/share] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --infodir=DIR info documentation [PREFIX/info] + --mandir=DIR man documentation [PREFIX/man] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + + cat <<\_ACEOF + +Optional Features: + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-maintainer-mode enable make rules and dependencies not useful + (and sometimes confusing) to the casual installer + --enable-shared[=PKGS] + build shared libraries [default=yes] + --enable-static[=PKGS] + build static libraries [default=yes] + --enable-fast-install[=PKGS] + optimize for fast installation [default=yes] + --disable-dependency-tracking Speeds up one-time builds + --enable-dependency-tracking Do not reject slow dependency extractors + --disable-libtool-lock avoid locking (might break parallel builds) + --disable-glibtest do not try to compile and run a test GLIB program + --disable-directfb disable support for DirectFB default=auto + --disable-gdk-pixbuf disable support for gdk-pixbuf default=auto + --disable-gtk disable support for GTK+-2.0 default=auto + --disable-aa disable support for AA-lib default=auto + --disable-modules disable the build of modules + --enable-gtk-doc use gtk-doc to build documentation default=auto + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-gnu-ld assume the C compiler uses GNU ld [default=no] + --with-pic try to use only PIC/non-PIC objects [default=use + both] + --with-tags[=TAGS] + include additional configurations [automatic] + --with-html-dir=PATH path to installed docs + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have + headers in a nonstandard directory + CPP C preprocessor + CXX C++ compiler command + CXXFLAGS C++ compiler flags + CXXCPP C++ preprocessor + F77 Fortran 77 compiler command + FFLAGS Fortran 77 compiler flags + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +_ACEOF +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + ac_popdir=`pwd` + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d $ac_dir || continue + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac + +# Do not use `cd foo && pwd` to compute absolute paths, because +# the directories may not exist. +case `pwd` in +.) ac_abs_builddir="$ac_dir";; +*) + case "$ac_dir" in + .) ac_abs_builddir=`pwd`;; + [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; + *) ac_abs_builddir=`pwd`/"$ac_dir";; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_builddir=${ac_top_builddir}.;; +*) + case ${ac_top_builddir}. in + .) ac_abs_top_builddir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; + *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_srcdir=$ac_srcdir;; +*) + case $ac_srcdir in + .) ac_abs_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; + *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_srcdir=$ac_top_srcdir;; +*) + case $ac_top_srcdir in + .) ac_abs_top_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; + *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; + esac;; +esac + + cd $ac_dir + # Check for guested configure; otherwise get Cygnus style configure. + if test -f $ac_srcdir/configure.gnu; then + echo + $SHELL $ac_srcdir/configure.gnu --help=recursive + elif test -f $ac_srcdir/configure; then + echo + $SHELL $ac_srcdir/configure --help=recursive + elif test -f $ac_srcdir/configure.ac || + test -f $ac_srcdir/configure.in; then + echo + $ac_configure --help + else + echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi + cd "$ac_popdir" + done +fi + +test -n "$ac_init_help" && exit 0 +if $ac_init_version; then + cat <<\_ACEOF + +Copyright (C) 2003 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit 0 +fi +exec 5>config.log +cat >&5 <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by $as_me, which was +generated by GNU Autoconf 2.59. Invocation command line was + + $ $0 $@ + +_ACEOF +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +hostinfo = `(hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + echo "PATH: $as_dir" +done + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_sep= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) + ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; + 2) + ac_configure_args1="$ac_configure_args1 '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" + # Get rid of the leading space. + ac_sep=" " + ;; + esac + done +done +$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } +$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Be sure not to use single quotes in there, as some shells, +# such as our DU 5.0 friend, will then `close' the trap. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + cat <<\_ASBOX +## ---------------- ## +## Cache variables. ## +## ---------------- ## +_ASBOX + echo + # The following way of writing the cache mishandles newlines in values, +{ + (set) 2>&1 | + case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in + *ac_space=\ *) + sed -n \ + "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" + ;; + *) + sed -n \ + "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + ;; + esac; +} + echo + + cat <<\_ASBOX +## ----------------- ## +## Output variables. ## +## ----------------- ## +_ASBOX + echo + for ac_var in $ac_subst_vars + do + eval ac_val=$`echo $ac_var` + echo "$ac_var='"'"'$ac_val'"'"'" + done | sort + echo + + if test -n "$ac_subst_files"; then + cat <<\_ASBOX +## ------------- ## +## Output files. ## +## ------------- ## +_ASBOX + echo + for ac_var in $ac_subst_files + do + eval ac_val=$`echo $ac_var` + echo "$ac_var='"'"'$ac_val'"'"'" + done | sort + echo + fi + + if test -s confdefs.h; then + cat <<\_ASBOX +## ----------- ## +## confdefs.h. ## +## ----------- ## +_ASBOX + echo + sed "/^$/d" confdefs.h | sort + echo + fi + test "$ac_signal" != 0 && + echo "$as_me: caught signal $ac_signal" + echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core && + rm -rf conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status + ' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -rf conftest* confdefs.h +# AIX cpp loses on an empty file, so make sure it contains at least a newline. +echo >confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer explicitly selected file to automatically selected ones. +if test -z "$CONFIG_SITE"; then + if test "x$prefix" != xNONE; then + CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" + else + CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" + fi +fi +for ac_site_file in $CONFIG_SITE; do + if test -r "$ac_site_file"; then + { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 +echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special + # files actually), so we avoid doing that. + if test -f "$cache_file"; then + { echo "$as_me:$LINENO: loading cache $cache_file" >&5 +echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . $cache_file;; + *) . ./$cache_file;; + esac + fi +else + { echo "$as_me:$LINENO: creating cache $cache_file" >&5 +echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in `(set) 2>&1 | + sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val="\$ac_cv_env_${ac_var}_value" + eval ac_new_val="\$ac_env_${ac_var}_value" + case $ac_old_set,$ac_new_set in + set,) + { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 +echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 +echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 +echo "$as_me: former value: $ac_old_val" >&2;} + { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 +echo "$as_me: current value: $ac_new_val" >&2;} + ac_cache_corrupted=: + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) + ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 +echo "$as_me: error: changes in the environment can compromise the build" >&2;} + { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 +echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} + { (exit 1); exit 1; }; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + + + + + + + + + + + + + + + + + +# Save this values here, since automake will set cflags later +cflags_set="${CFLAGS}set" + +# Making releases: +# BLIB_MICRO_VERSION += 1; +# BLIB_INTERFACE_AGE += 1; +# BLIB_BINARY_AGE += 1; +# if any functions have been added, set BLIB_INTERFACE_AGE to 0. +# if backwards compatibility has been broken, +# set BLIB_BINARY_AGE and BLIB_INTERFACE_AGE to 0. +# +BLIB_MAJOR_VERSION=1 +BLIB_MINOR_VERSION=1 +BLIB_MICRO_VERSION=7 +BLIB_INTERFACE_AGE=0 +BLIB_BINARY_AGE=0 +BLIB_API_VERSION=$BLIB_MAJOR_VERSION.$BLIB_MINOR_VERSION +BLIB_VERSION=$BLIB_MAJOR_VERSION.$BLIB_MINOR_VERSION.$BLIB_MICRO_VERSION + + + + + + + + + +cat >>confdefs.h <<_ACEOF +#define BLIB_VERSION "$BLIB_VERSION" +_ACEOF + + +# libtool versioning +LT_RELEASE=$BLIB_MAJOR_VERSION.$BLIB_MINOR_VERSION +LT_CURRENT=`expr $BLIB_MICRO_VERSION - $BLIB_INTERFACE_AGE` +LT_REVISION=$BLIB_INTERFACE_AGE +LT_AGE=`expr $BLIB_BINARY_AGE - $BLIB_INTERFACE_AGE` + + + + + + +VERSION=$BLIB_VERSION +PACKAGE=blib + +am__api_version="1.7" +ac_aux_dir= +for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do + if test -f $ac_dir/install-sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f $ac_dir/install.sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f $ac_dir/shtool; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 +echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} + { (exit 1); exit 1; }; } +fi +ac_config_guess="$SHELL $ac_aux_dir/config.guess" +ac_config_sub="$SHELL $ac_aux_dir/config.sub" +ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 +echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 +if test -z "$INSTALL"; then +if test "${ac_cv_path_install+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in + ./ | .// | /cC/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + done + done + ;; +esac +done + + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. We don't cache a + # path for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the path is relative. + INSTALL=$ac_install_sh + fi +fi +echo "$as_me:$LINENO: result: $INSTALL" >&5 +echo "${ECHO_T}$INSTALL" >&6 + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +echo "$as_me:$LINENO: checking whether build environment is sane" >&5 +echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6 +# Just in case +sleep 1 +echo timestamp > conftest.file +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftest.file` + fi + rm -f conftest.file + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" >&5 +echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" >&2;} + { (exit 1); exit 1; }; } + fi + + test "$2" = conftest.file + ) +then + # Ok. + : +else + { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! +Check your system clock" >&5 +echo "$as_me: error: newly created file is older than distributed files! +Check your system clock" >&2;} + { (exit 1); exit 1; }; } +fi +echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 +test "$program_prefix" != NONE && + program_transform_name="s,^,$program_prefix,;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s,\$,$program_suffix,;$program_transform_name" +# Double any \ or $. echo might interpret backslashes. +# By default was `s,x,x', remove it if useless. +cat <<\_ACEOF >conftest.sed +s/[\\$]/&&/g;s/;s,x,x,$// +_ACEOF +program_transform_name=`echo $program_transform_name | sed -f conftest.sed` +rm conftest.sed + + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 +echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} +fi + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_AWK+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + echo "$as_me:$LINENO: result: $AWK" >&5 +echo "${ECHO_T}$AWK" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$AWK" && break +done + +echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 +set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` +if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.make <<\_ACEOF +all: + @echo 'ac_maketemp="$(MAKE)"' +_ACEOF +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` +if test -n "$ac_maketemp"; then + eval ac_cv_prog_make_${ac_make}_set=yes +else + eval ac_cv_prog_make_${ac_make}_set=no +fi +rm -f conftest.make +fi +if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + SET_MAKE= +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + + # test to see if srcdir already configured +if test "`cd $srcdir && pwd`" != "`pwd`" && + test -f $srcdir/config.status; then + { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 +echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} + { (exit 1); exit 1; }; } +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE=$PACKAGE + VERSION=$VERSION + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + + +AMTAR=${AMTAR-"${am_missing_run}tar"} + +install_sh=${install_sh-"$am_aux_dir/install-sh"} + +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + echo "$as_me:$LINENO: result: $STRIP" >&5 +echo "${ECHO_T}$STRIP" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 +echo "${ECHO_T}$ac_ct_STRIP" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + STRIP=$ac_ct_STRIP +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. + + + + + ac_config_headers="$ac_config_headers config.h" + + +echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5 +echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6 + # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given. +if test "${enable_maintainer_mode+set}" = set; then + enableval="$enable_maintainer_mode" + USE_MAINTAINER_MODE=$enableval +else + USE_MAINTAINER_MODE=no +fi; + echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5 +echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6 + + +if test $USE_MAINTAINER_MODE = yes; then + MAINTAINER_MODE_TRUE= + MAINTAINER_MODE_FALSE='#' +else + MAINTAINER_MODE_TRUE='#' + MAINTAINER_MODE_FALSE= +fi + + MAINT=$MAINTAINER_MODE_TRUE + + + +# Check whether --enable-shared or --disable-shared was given. +if test "${enable_shared+set}" = set; then + enableval="$enable_shared" + p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_shared=yes +fi; + +# Check whether --enable-static or --disable-static was given. +if test "${enable_static+set}" = set; then + enableval="$enable_static" + p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_static=yes +fi; + +# Check whether --enable-fast-install or --disable-fast-install was given. +if test "${enable_fast_install+set}" = set; then + enableval="$enable_fast_install" + p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_fast_install=yes +fi; + +# Make sure we can run config.sub. +$ac_config_sub sun4 >/dev/null 2>&1 || + { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 +echo "$as_me: error: cannot run $ac_config_sub" >&2;} + { (exit 1); exit 1; }; } + +echo "$as_me:$LINENO: checking build system type" >&5 +echo $ECHO_N "checking build system type... $ECHO_C" >&6 +if test "${ac_cv_build+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_build_alias=$build_alias +test -z "$ac_cv_build_alias" && + ac_cv_build_alias=`$ac_config_guess` +test -z "$ac_cv_build_alias" && + { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 +echo "$as_me: error: cannot guess build type; you must specify one" >&2;} + { (exit 1); exit 1; }; } +ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || + { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 +echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} + { (exit 1); exit 1; }; } + +fi +echo "$as_me:$LINENO: result: $ac_cv_build" >&5 +echo "${ECHO_T}$ac_cv_build" >&6 +build=$ac_cv_build +build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + + +echo "$as_me:$LINENO: checking host system type" >&5 +echo $ECHO_N "checking host system type... $ECHO_C" >&6 +if test "${ac_cv_host+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_host_alias=$host_alias +test -z "$ac_cv_host_alias" && + ac_cv_host_alias=$ac_cv_build_alias +ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || + { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5 +echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} + { (exit 1); exit 1; }; } + +fi +echo "$as_me:$LINENO: result: $ac_cv_host" >&5 +echo "${ECHO_T}$ac_cv_host" >&6 +host=$ac_cv_host +host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + + +DEPDIR="${am__leading_dot}deps" + + ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo done +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 +echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6 +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# We grep out `Entering directory' and `Leaving directory' +# messages which can occur if `w' ends up in MAKEFLAGS. +# In particular we don't look at `^make:' because GNU make might +# be invoked under some other name (usually "gmake"), in which +# case it prints its new name instead of `make'. +if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then + am__include=include + am__quote= + _am_result=GNU +fi +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then + am__include=.include + am__quote="\"" + _am_result=BSD + fi +fi + + +echo "$as_me:$LINENO: result: $_am_result" >&5 +echo "${ECHO_T}$_am_result" >&6 +rm -f confinc confmf + +# Check whether --enable-dependency-tracking or --disable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then + enableval="$enable_dependency_tracking" + +fi; +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi + + +if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + CC=$ac_ct_CC +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + CC=$ac_ct_CC +else + CC="$ac_cv_prog_CC" +fi + +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$ac_ct_CC" && break +done + + CC=$ac_ct_CC +fi + +fi + + +test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&5 +echo "$as_me: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } + +# Provide some information about the compiler. +echo "$as_me:$LINENO:" \ + "checking for C compiler version" >&5 +ac_compiler=`set X $ac_compile; echo $2` +{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 + (eval $ac_compiler --version &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 + (eval $ac_compiler -v &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 + (eval $ac_compiler -V &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 +echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6 +ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` +if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 + (eval $ac_link_default) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Find the output, starting from the most likely. This scheme is +# not robust to junk in `.', hence go to wildcards (a.*) only as a last +# resort. + +# Be careful to initialize this variable, since it used to be cached. +# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. +ac_cv_exeext= +# b.out is created by i960 compilers. +for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) + ;; + conftest.$ac_ext ) + # This is the source file. + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + # FIXME: I believe we export ac_cv_exeext for Libtool, + # but it would be cool to find out if it's true. Does anybody + # maintain Libtool? --akim. + export ac_cv_exeext + break;; + * ) + break;; + esac +done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { echo "$as_me:$LINENO: error: C compiler cannot create executables +See \`config.log' for more details." >&5 +echo "$as_me: error: C compiler cannot create executables +See \`config.log' for more details." >&2;} + { (exit 77); exit 77; }; } +fi + +ac_exeext=$ac_cv_exeext +echo "$as_me:$LINENO: result: $ac_file" >&5 +echo "${ECHO_T}$ac_file" >&6 + +# Check the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +echo "$as_me:$LINENO: checking whether the C compiler works" >&5 +echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 +# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 +# If not cross compiling, check that we can run a simple program. +if test "$cross_compiling" != yes; then + if { ac_try='./$ac_file' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { echo "$as_me:$LINENO: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } + fi + fi +fi +echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + +rm -f a.out a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +# Check the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 +echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 +echo "$as_me:$LINENO: result: $cross_compiling" >&5 +echo "${ECHO_T}$cross_compiling" >&6 + +echo "$as_me:$LINENO: checking for suffix of executables" >&5 +echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + export ac_cv_exeext + break;; + * ) break;; + esac +done +else + { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +rm -f conftest$ac_cv_exeext +echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 +echo "${ECHO_T}$ac_cv_exeext" >&6 + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +echo "$as_me:$LINENO: checking for suffix of object files" >&5 +echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 +if test "${ac_cv_objext+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 +echo "${ECHO_T}$ac_cv_objext" >&6 +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 +echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 +if test "${ac_cv_c_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_compiler_gnu=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_compiler_gnu=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 +echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 +GCC=`test $ac_compiler_gnu = yes && echo yes` +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +CFLAGS="-g" +echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 +echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 +if test "${ac_cv_prog_cc_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_prog_cc_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_prog_cc_g=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 +echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 +if test "${ac_cv_prog_cc_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_prog_cc_stdc=no +ac_save_CC=$CC +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std1 is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std1. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +# Don't try gcc -ansi; that turns off useful extensions and +# breaks some systems' header files. +# AIX -qlanglvl=ansi +# Ultrix and OSF/1 -std1 +# HP-UX 10.20 and later -Ae +# HP-UX older versions -Aa -D_HPUX_SOURCE +# SVR4 -Xc -D__EXTENSIONS__ +for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_prog_cc_stdc=$ac_arg +break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext +done +rm -f conftest.$ac_ext conftest.$ac_objext +CC=$ac_save_CC + +fi + +case "x$ac_cv_prog_cc_stdc" in + x|xno) + echo "$as_me:$LINENO: result: none needed" >&5 +echo "${ECHO_T}none needed" >&6 ;; + *) + echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 + CC="$CC $ac_cv_prog_cc_stdc" ;; +esac + +# Some people use a C++ compiler to compile C. Since we use `exit', +# in C++ we need to declare it. In case someone uses the same compiler +# for both compiling C and C++ we need to have the C++ compiler decide +# the declaration of exit, since it's the most demanding environment. +cat >conftest.$ac_ext <<_ACEOF +#ifndef __cplusplus + choke me +#endif +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + for ac_declaration in \ + '' \ + 'extern "C" void std::exit (int) throw (); using std::exit;' \ + 'extern "C" void std::exit (int); using std::exit;' \ + 'extern "C" void exit (int) throw ();' \ + 'extern "C" void exit (int);' \ + 'void exit (int);' +do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_declaration +#include +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +continue +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_declaration +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +done +rm -f conftest* +if test -n "$ac_declaration"; then + echo '#ifdef __cplusplus' >>confdefs.h + echo $ac_declaration >>confdefs.h + echo '#endif' >>confdefs.h +fi + +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +depcc="$CC" am_compiler_list= + +echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 +echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 +if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + : > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + case $depmode in + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + none) break ;; + esac + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. + if depmode=$depmode \ + source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # (even with -Werror). So we grep stderr for any message + # that says an option was ignored. + if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 +echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6 +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + + +if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + +echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5 +echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6 +if test "${lt_cv_path_SED+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # Loop through the user's path and test for sed and gsed. +# Then use that list of sed's as ones to test for truncation. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for lt_ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then + lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" + fi + done + done +done +lt_ac_max=0 +lt_ac_count=0 +# Add /usr/xpg4/bin/sed as it is typically found on Solaris +# along with /bin/sed that truncates output. +for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do + test ! -f $lt_ac_sed && break + cat /dev/null > conftest.in + lt_ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >conftest.in + # Check for GNU sed and select it if it is found. + if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then + lt_cv_path_SED=$lt_ac_sed + break + fi + while true; do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo >>conftest.nl + $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break + cmp -s conftest.out conftest.nl || break + # 10000 chars as input seems more than enough + test $lt_ac_count -gt 10 && break + lt_ac_count=`expr $lt_ac_count + 1` + if test $lt_ac_count -gt $lt_ac_max; then + lt_ac_max=$lt_ac_count + lt_cv_path_SED=$lt_ac_sed + fi + done +done +SED=$lt_cv_path_SED + +fi + +echo "$as_me:$LINENO: result: $SED" >&5 +echo "${ECHO_T}$SED" >&6 + +echo "$as_me:$LINENO: checking for egrep" >&5 +echo $ECHO_N "checking for egrep... $ECHO_C" >&6 +if test "${ac_cv_prog_egrep+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if echo a | (grep -E '(a|b)') >/dev/null 2>&1 + then ac_cv_prog_egrep='grep -E' + else ac_cv_prog_egrep='egrep' + fi +fi +echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 +echo "${ECHO_T}$ac_cv_prog_egrep" >&6 + EGREP=$ac_cv_prog_egrep + + + +# Check whether --with-gnu-ld or --without-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then + withval="$with_gnu_ld" + test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi; +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + echo "$as_me:$LINENO: checking for ld used by $CC" >&5 +echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6 + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` + while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + echo "$as_me:$LINENO: checking for GNU ld" >&5 +echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 +else + echo "$as_me:$LINENO: checking for non-GNU ld" >&5 +echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 +fi +if test "${lt_cv_path_LD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +echo "${ECHO_T}$LD" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi +test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 +echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} + { (exit 1); exit 1; }; } +echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 +echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 +if test "${lt_cv_prog_gnu_ld+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # I'd rather use --version here, but apparently some GNU ld's only accept -v. +case `$LD -v 2>&1 &5 +echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6 +with_gnu_ld=$lt_cv_prog_gnu_ld + + +echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 +echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6 +if test "${lt_cv_ld_reload_flag+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_ld_reload_flag='-r' +fi +echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 +echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6 +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' + +echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5 +echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6 +if test "${lt_cv_path_NM+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/${ac_tool_prefix}nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + esac + fi + done + IFS="$lt_save_ifs" + test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm +fi +fi +echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5 +echo "${ECHO_T}$lt_cv_path_NM" >&6 +NM="$lt_cv_path_NM" + +echo "$as_me:$LINENO: checking whether ln -s works" >&5 +echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6 +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 +else + echo "$as_me:$LINENO: result: no, using $LN_S" >&5 +echo "${ECHO_T}no, using $LN_S" >&6 +fi + +echo "$as_me:$LINENO: checking how to recognise dependent libraries" >&5 +echo $ECHO_N "checking how to recognise dependent libraries... $ECHO_C" >&6 +if test "${lt_cv_deplibs_check_method+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# `unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# which responds to the $file_magic_cmd with a given extended regex. +# If you have `file' or equivalent on your system and you're not sure +# whether `pass_all' will *always* work, you probably want this one. + +case $host_os in +aix4* | aix5*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi4*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump'. + lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | kfreebsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case "$host_cpu" in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux*) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd* | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +nto-qnx*) + lt_cv_deplibs_check_method=unknown + ;; + +openbsd*) + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB shared object' + else + lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +sco3.2v5*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; +esac + +fi +echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 +echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6 +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Check whether --enable-libtool-lock or --disable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then + enableval="$enable_libtool_lock" + +fi; +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '#line 3674 "configure"' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + case "`/usr/bin/file conftest.o`" in + *32-bit*) + case $host in + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 +echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6 +if test "${lt_cv_cc_needs_belf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + lt_cv_cc_needs_belf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +lt_cv_cc_needs_belf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi +echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 +echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6 + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; + +esac + +need_locks="$enable_libtool_lock" + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 +echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test "${ac_cv_prog_CPP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether non-existent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +echo "$as_me:$LINENO: result: $CPP" >&5 +echo "${ECHO_T}$CPP" >&6 +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether non-existent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + : +else + { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&5 +echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +echo "$as_me:$LINENO: checking for ANSI C header files" >&5 +echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 +if test "${ac_cv_header_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_header_stdc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_header_stdc=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then + : +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + exit(2); + exit (0); +} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_header_stdc=no +fi +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +fi +fi +echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 +echo "${ECHO_T}$ac_cv_header_stdc" >&6 +if test $ac_cv_header_stdc = yes; then + +cat >>confdefs.h <<\_ACEOF +#define STDC_HEADERS 1 +_ACEOF + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. + + + + + + + + + +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_Header=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +eval "$as_ac_Header=no" +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + +for ac_header in dlfcn.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------------ ## +## Report this to the AC_PACKAGE_NAME lists. ## +## ------------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + +ac_ext=cc +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -n "$ac_tool_prefix"; then + for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CXX+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + echo "$as_me:$LINENO: result: $CXX" >&5 +echo "${ECHO_T}$CXX" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$CXX" && break + done +fi +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CXX="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 +echo "${ECHO_T}$ac_ct_CXX" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$ac_ct_CXX" && break +done +test -n "$ac_ct_CXX" || ac_ct_CXX="g++" + + CXX=$ac_ct_CXX +fi + + +# Provide some information about the compiler. +echo "$as_me:$LINENO:" \ + "checking for C++ compiler version" >&5 +ac_compiler=`set X $ac_compile; echo $2` +{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 + (eval $ac_compiler --version &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 + (eval $ac_compiler -v &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 + (eval $ac_compiler -V &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + +echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 +echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6 +if test "${ac_cv_cxx_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_compiler_gnu=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_compiler_gnu=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu + +fi +echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 +echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6 +GXX=`test $ac_compiler_gnu = yes && echo yes` +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +CXXFLAGS="-g" +echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 +echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6 +if test "${ac_cv_prog_cxx_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_prog_cxx_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_prog_cxx_g=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 +echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6 +if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS=$ac_save_CXXFLAGS +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi +for ac_declaration in \ + '' \ + 'extern "C" void std::exit (int) throw (); using std::exit;' \ + 'extern "C" void std::exit (int); using std::exit;' \ + 'extern "C" void exit (int) throw ();' \ + 'extern "C" void exit (int);' \ + 'void exit (int);' +do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_declaration +#include +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +continue +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_declaration +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +done +rm -f conftest* +if test -n "$ac_declaration"; then + echo '#ifdef __cplusplus' >>confdefs.h + echo $ac_declaration >>confdefs.h + echo '#endif' >>confdefs.h +fi + +ac_ext=cc +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +depcc="$CXX" am_compiler_list= + +echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 +echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 +if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CXX_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + : > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + case $depmode in + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + none) break ;; + esac + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. + if depmode=$depmode \ + source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # (even with -Werror). So we grep stderr for any message + # that says an option was ignored. + if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else + am_cv_CXX_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CXX_dependencies_compiler_type=none +fi + +fi +echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5 +echo "${ECHO_T}$am_cv_CXX_dependencies_compiler_type" >&6 +CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type + + + +if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then + am__fastdepCXX_TRUE= + am__fastdepCXX_FALSE='#' +else + am__fastdepCXX_TRUE='#' + am__fastdepCXX_FALSE= +fi + + +ac_ext=cc +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5 +echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6 +if test -z "$CXXCPP"; then + if test "${ac_cv_prog_CXXCPP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # Double quotes because CXXCPP needs to be expanded + for CXXCPP in "$CXX -E" "/lib/cpp" + do + ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_cxx_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether non-existent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_cxx_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + break +fi + + done + ac_cv_prog_CXXCPP=$CXXCPP + +fi + CXXCPP=$ac_cv_prog_CXXCPP +else + ac_cv_prog_CXXCPP=$CXXCPP +fi +echo "$as_me:$LINENO: result: $CXXCPP" >&5 +echo "${ECHO_T}$CXXCPP" >&6 +ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_cxx_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether non-existent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_cxx_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + : +else + { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check +See \`config.log' for more details." >&5 +echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +ac_ext=cc +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + +ac_ext=f +ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' +ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_f77_compiler_gnu +if test -n "$ac_tool_prefix"; then + for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 ifc efc pgf95 lf95 gfortran + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_F77+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$F77"; then + ac_cv_prog_F77="$F77" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_F77="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +F77=$ac_cv_prog_F77 +if test -n "$F77"; then + echo "$as_me:$LINENO: result: $F77" >&5 +echo "${ECHO_T}$F77" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$F77" && break + done +fi +if test -z "$F77"; then + ac_ct_F77=$F77 + for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 ifc efc pgf95 lf95 gfortran +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_F77+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_F77"; then + ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_F77="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_F77=$ac_cv_prog_ac_ct_F77 +if test -n "$ac_ct_F77"; then + echo "$as_me:$LINENO: result: $ac_ct_F77" >&5 +echo "${ECHO_T}$ac_ct_F77" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$ac_ct_F77" && break +done + + F77=$ac_ct_F77 +fi + + +# Provide some information about the compiler. +echo "$as_me:5231:" \ + "checking for Fortran 77 compiler version" >&5 +ac_compiler=`set X $ac_compile; echo $2` +{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 + (eval $ac_compiler --version &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 + (eval $ac_compiler -v &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 + (eval $ac_compiler -V &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +rm -f a.out + +# If we don't use `.F' as extension, the preprocessor is not run on the +# input file. (Note that this only needs to work for GNU compilers.) +ac_save_ext=$ac_ext +ac_ext=F +echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5 +echo $ECHO_N "checking whether we are using the GNU Fortran 77 compiler... $ECHO_C" >&6 +if test "${ac_cv_f77_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF + program main +#ifndef __GNUC__ + choke me +#endif + + end +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_compiler_gnu=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_compiler_gnu=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_f77_compiler_gnu=$ac_compiler_gnu + +fi +echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5 +echo "${ECHO_T}$ac_cv_f77_compiler_gnu" >&6 +ac_ext=$ac_save_ext +ac_test_FFLAGS=${FFLAGS+set} +ac_save_FFLAGS=$FFLAGS +FFLAGS= +echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5 +echo $ECHO_N "checking whether $F77 accepts -g... $ECHO_C" >&6 +if test "${ac_cv_prog_f77_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + FFLAGS=-g +cat >conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_prog_f77_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_prog_f77_g=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5 +echo "${ECHO_T}$ac_cv_prog_f77_g" >&6 +if test "$ac_test_FFLAGS" = set; then + FFLAGS=$ac_save_FFLAGS +elif test $ac_cv_prog_f77_g = yes; then + if test "x$ac_cv_f77_compiler_gnu" = xyes; then + FFLAGS="-g -O2" + else + FFLAGS="-g" + fi +else + if test "x$ac_cv_f77_compiler_gnu" = xyes; then + FFLAGS="-O2" + else + FFLAGS= + fi +fi + +G77=`test $ac_compiler_gnu = yes && echo yes` +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! + +# find the maximum length of command line arguments +echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 +echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6 +if test "${lt_cv_sys_max_cmd_len+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + *) + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while (test "X"`$CONFIG_SHELL $0 --fallback-echo "X$teststring" 2>/dev/null` \ + = "XX$teststring") >/dev/null 2>&1 && + new_result=`expr "X$teststring" : ".*" 2>&1` && + lt_cv_sys_max_cmd_len=$new_result && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + teststring= + # Add a significant safety factor because C++ compilers can tack on massive + # amounts of additional arguments before passing them to the linker. + # It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + ;; + esac + +fi + +if test -n $lt_cv_sys_max_cmd_len ; then + echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 +echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6 +else + echo "$as_me:$LINENO: result: none" >&5 +echo "${ECHO_T}none" >&6 +fi + + + + +# Check for command to grab the raw symbol name followed by C symbol from nm. +echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5 +echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6 +if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Transform the above into a raw symbol and a C symbol. +symxfrm='\1 \2\3 \3' + +# Transform an extracted symbol line into a proper C declaration +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32*) + symcode='[ABCDGISTW]' + ;; +hpux*) # Its linker distinguishes data from code symbols + if test "$host_cpu" = ia64; then + symcode='[ABCDEGRST]' + fi + lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris* | sysv5*) + symcode='[BDRT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[ABCDGIRSTW]' ;; +esac + +# Try without a prefix undercore, then with it. +for ac_symprfx in "" "_"; do + + # Write the raw and C identifiers. + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5 + (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if grep ' nm_test_var$' "$nlist" >/dev/null; then + if grep ' nm_test_func$' "$nlist" >/dev/null; then + cat < conftest.$ac_ext +#ifdef __cplusplus +extern "C" { +#endif + +EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext' + + cat <> conftest.$ac_ext +#if defined (__STDC__) && __STDC__ +# define lt_ptr_t void * +#else +# define lt_ptr_t char * +# define const +#endif + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + lt_ptr_t address; +} +lt_preloaded_symbols[] = +{ +EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext + cat <<\EOF >> conftest.$ac_ext + {0, (lt_ptr_t) 0} +}; + +#ifdef __cplusplus +} +#endif +EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_save_LIBS="$LIBS" + lt_save_CFLAGS="$CFLAGS" + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS="$lt_save_LIBS" + CFLAGS="$lt_save_CFLAGS" + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + fi + rm -f conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done + +fi + +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + echo "$as_me:$LINENO: result: failed" >&5 +echo "${ECHO_T}failed" >&6 +else + echo "$as_me:$LINENO: result: ok" >&5 +echo "${ECHO_T}ok" >&6 +fi + +echo "$as_me:$LINENO: checking for objdir" >&5 +echo $ECHO_N "checking for objdir... $ECHO_C" >&6 +if test "${lt_cv_objdir+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null +fi +echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5 +echo "${ECHO_T}$lt_cv_objdir" >&6 +objdir=$lt_cv_objdir + + + + + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='sed -e s/^X//' +sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +# Constants: +rm="rm -f" + +# Global variables: +default_ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except M$VC, +# which needs '.lib'). +libext=a +ltmain="$ac_aux_dir/ltmain.sh" +ofile="$default_ofile" +with_gnu_ld="$lt_cv_prog_gnu_ld" + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_AR+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + echo "$as_me:$LINENO: result: $AR" >&5 +echo "${ECHO_T}$AR" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_AR+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_prog_ac_ct_AR" && ac_cv_prog_ac_ct_AR="false" +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + echo "$as_me:$LINENO: result: $ac_ct_AR" >&5 +echo "${ECHO_T}$ac_ct_AR" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + AR=$ac_ct_AR +else + AR="$ac_cv_prog_AR" +fi + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + echo "$as_me:$LINENO: result: $RANLIB" >&5 +echo "${ECHO_T}$RANLIB" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 +echo "${ECHO_T}$ac_ct_RANLIB" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + RANLIB=$ac_ct_RANLIB +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + echo "$as_me:$LINENO: result: $STRIP" >&5 +echo "${ECHO_T}$STRIP" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 +echo "${ECHO_T}$ac_ct_STRIP" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + STRIP=$ac_ct_STRIP +else + STRIP="$ac_cv_prog_STRIP" +fi + + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$AR" && AR=ar +test -z "$AR_FLAGS" && AR_FLAGS=cru +test -z "$AS" && AS=as +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$DLLTOOL" && DLLTOOL=dlltool +test -z "$LD" && LD=ld +test -z "$LN_S" && LN_S="ln -s" +test -z "$MAGIC_CMD" && MAGIC_CMD=file +test -z "$NM" && NM=nm +test -z "$SED" && SED=sed +test -z "$OBJDUMP" && OBJDUMP=objdump +test -z "$RANLIB" && RANLIB=: +test -z "$STRIP" && STRIP=: +test -z "$ac_objext" && ac_objext=o + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds" + ;; + *) + old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi + +# Only perform the check for file, if the check method requires it +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 +echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6 +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/${ac_tool_prefix}file; then + lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 +echo "${ECHO_T}$MAGIC_CMD" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + echo "$as_me:$LINENO: checking for file" >&5 +echo $ECHO_N "checking for file... $ECHO_C" >&6 +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/file; then + lt_cv_path_MAGIC_CMD="$ac_dir/file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 +echo "${ECHO_T}$MAGIC_CMD" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + else + MAGIC_CMD=: + fi +fi + + fi + ;; +esac + +enable_dlopen=no +enable_win32_dll=no + +# Check whether --enable-libtool-lock or --disable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then + enableval="$enable_libtool_lock" + +fi; +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + + +# Check whether --with-pic or --without-pic was given. +if test "${with_pic+set}" = set; then + withval="$with_pic" + pic_mode="$withval" +else + pic_mode=default +fi; +test -z "$pic_mode" && pic_mode=default + +# Use C for the default configuration in the libtool script +tagname= +lt_save_CC="$CC" +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +objext=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;\n" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}\n' + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# +# Check for any special shared library compilation flags. +# +lt_prog_cc_shlib= +if test "$GCC" = no; then + case $host_os in + sco3.2v5*) + lt_prog_cc_shlib='-belf' + ;; + esac +fi +if test -n "$lt_prog_cc_shlib"; then + { echo "$as_me:$LINENO: WARNING: \`$CC' requires \`$lt_prog_cc_shlib' to build shared libraries" >&5 +echo "$as_me: WARNING: \`$CC' requires \`$lt_prog_cc_shlib' to build shared libraries" >&2;} + if echo "$old_CC $old_CFLAGS " | grep "[ ]$lt_prog_cc_shlib[ ]" >/dev/null; then : + else + { echo "$as_me:$LINENO: WARNING: add \`$lt_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&5 +echo "$as_me: WARNING: add \`$lt_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&2;} + lt_cv_prog_cc_can_build_shared=no + fi +fi + + +# +# Check to make sure the static flag actually works. +# +echo "$as_me:$LINENO: checking if $compiler static flag $lt_prog_compiler_static works" >&5 +echo $ECHO_N "checking if $compiler static flag $lt_prog_compiler_static works... $ECHO_C" >&6 +if test "${lt_prog_compiler_static_works+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_prog_compiler_static_works=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_prog_compiler_static" + printf "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + else + lt_prog_compiler_static_works=yes + fi + fi + $rm conftest* + LDFLAGS="$save_LDFLAGS" + +fi +echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works" >&5 +echo "${ECHO_T}$lt_prog_compiler_static_works" >&6 + +if test x"$lt_prog_compiler_static_works" = xyes; then + : +else + lt_prog_compiler_static= +fi + + + + +lt_prog_compiler_no_builtin_flag= + +if test "$GCC" = yes; then + lt_prog_compiler_no_builtin_flag=' -fno-builtin' + + +echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6 +if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:6263: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:6267: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test ! -s conftest.err; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $rm conftest* + +fi +echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6 + +if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then + lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +else + : +fi + +fi + +lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= + +echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 +echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 + + if test "$GCC" = yes; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + fi + ;; + + amigaos*) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' + ;; + + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic + fi + ;; + + hpux*) + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case "$host_cpu" in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + ;; + + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case "$host_cpu" in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' + ;; + + newsos6) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + linux*) + case $CC in + icc* | ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + esac + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + + sco3.2v5*) + lt_prog_compiler_pic='-Kpic' + lt_prog_compiler_static='-dn' + ;; + + solaris*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sunos4*) + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' + fi + ;; + + uts4*) + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared=no + ;; + esac + fi + +echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic" >&6 + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + +echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6 +if test "${lt_prog_compiler_pic_works+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:6496: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:6500: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test ! -s conftest.err; then + lt_prog_compiler_pic_works=yes + fi + fi + $rm conftest* + +fi +echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_works" >&6 + +if test x"$lt_prog_compiler_pic_works" = xyes; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi + +fi +case "$host_os" in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" + ;; +esac + +echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 +echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 +if test "${lt_cv_prog_compiler_c_o+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_c_o=no + $rm -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:6556: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:6560: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test ! -s out/conftest.err; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . + $rm conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files + $rm out/* && rmdir out + cd .. + rmdir conftest + $rm conftest* + +fi +echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6 + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 +echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 + hard_links=yes + $rm conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + echo "$as_me:$LINENO: result: $hard_links" >&5 +echo "${ECHO_T}$hard_links" >&6 + if test "$hard_links" = no; then + { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + +echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 + + runpath_var= + allow_undefined_flag= + enable_shared_with_static_runtimes=no + archive_cmds= + archive_expsym_cmds= + old_archive_From_new_cmds= + old_archive_from_expsyms_cmds= + export_dynamic_flag_spec= + whole_archive_flag_spec= + thread_safe_flag_spec= + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld= + hardcode_libdir_separator= + hardcode_direct=no + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + link_all_deplibs=unknown + hardcode_automatic=no + module_cmds= + module_expsym_cmds= + always_export_symbols=no + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms="_GLOBAL_OFFSET_TABLE_" + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + ld_shlibs=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # See if GNU ld supports shared libraries. + case $host_os in + aix3* | aix4* | aix5*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + cat <&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +EOF + fi + ;; + + amigaos*) + archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + + # Samuel A. Falvo II reports + # that the semantics of dynamic libraries on AmigaOS, at least up + # to version 4, is to share data among multiple programs linked + # with the same dynamic library. Since this doesn't match the + # behavior of shared libraries on other platforms, we can't use + # them. + ld_shlibs=no + ;; + + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + allow_undefined_flag=unsupported + always_export_symbols=no + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + else + ld_shlibs=no + fi + ;; + + netbsd* | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris* | sysv5*) + if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +EOF + elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + linux*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_cmds="$tmp_archive_cmds" + supports_anon_versioning=no + case `$LD -v 2>/dev/null` in + *\ 01.* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + if test $supports_anon_versioning = yes; then + archive_expsym_cmds='$echo "{ global:" > $output_objdir/$libname.ver~ +cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ +$echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + else + archive_expsym_cmds="$tmp_archive_cmds" + fi + link_all_deplibs=no + else + ld_shlibs=no + fi + ;; + + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test "$ld_shlibs" = yes; then + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec= + fi + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes && test -z "$link_static_flag"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | grep 'GNU' > /dev/null; then + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix5*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds='' + hardcode_direct=yes + hardcode_libdir_separator=':' + link_all_deplibs=yes + + if test "$GCC" = yes; then + case $host_os in aix4.012|aix4.012.*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + hardcode_direct=yes + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + esac + shared_flag='-shared' + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag=' ${wl}-bernotok' + allow_undefined_flag=' ${wl}-berok' + # -bexpall does not export symbols beginning with underscore (_) + always_export_symbols=yes + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec=' ' + archive_cmds_need_lc=yes + # This is similar to how AIX traditionally builds it's shared libraries. + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + # see comment about different semantics on the GNU ld section + ld_shlibs=no + ;; + + bsdi4*) + export_dynamic_flag_spec=-rdynamic + ;; + + cygwin* | mingw* | pw32*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_From_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path='`cygpath -w "$srcfile"`' + enable_shared_with_static_runtimes=yes + ;; + + darwin* | rhapsody*) + if test "$GXX" = yes ; then + archive_cmds_need_lc=no + case "$host_os" in + rhapsody* | darwin1.[012]) + allow_undefined_flag='-undefined suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + allow_undefined_flag='-flat_namespace -undefined suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[012]) + allow_undefined_flag='-flat_namespace -undefined suppress' + ;; + 10.*) + allow_undefined_flag='-undefined dynamic_lookup' + ;; + esac + fi + ;; + esac + lt_int_apple_cc_single_mod=no + output_verbose_link_cmd='echo' + if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then + lt_int_apple_cc_single_mod=yes + fi + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + archive_cmds='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + else + archive_cmds='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + fi + module_cmds='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + whole_archive_flag_spec='-all_load $convenience' + link_all_deplibs=yes + else + ld_shlibs=no + fi + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + freebsd1*) + ld_shlibs=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | kfreebsd*-gnu) + archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + export_dynamic_flag_spec='${wl}-E' + ;; + + hpux10* | hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case "$host_cpu" in + hppa*64*|ia64*) + archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case "$host_cpu" in + hppa*64*|ia64*) + archive_cmds='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' + ;; + *) + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + case "$host_cpu" in + hppa*64*) + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_flag_spec_ld='+b $libdir' + hardcode_libdir_separator=: + hardcode_direct=no + hardcode_shlibpath_var=no + ;; + ia64*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=no + hardcode_shlibpath_var=no + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + *) + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + export_dynamic_flag_spec='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_ld='-rpath $libdir' + fi + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + link_all_deplibs=yes + ;; + + netbsd* | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + + openbsd*) + hardcode_direct=yes + hardcode_shlibpath_var=no + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_From_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + fi + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ + $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + hardcode_libdir_separator=: + ;; + + sco3.2v5*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='${wl}-Bexport' + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ;; + + solaris*) + no_undefined_flag=' -z text' + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' + else + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) # Supported since Solaris 2.6 (maybe 2.5.1?) + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;; + esac + link_all_deplibs=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4.2uw2*) + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=no + hardcode_shlibpath_var=no + hardcode_runpath_var=yes + runpath_var=LD_RUN_PATH + ;; + + sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) + no_undefined_flag='${wl}-z ${wl}text' + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv5*) + no_undefined_flag=' -z text' + # $CC -shared without GNU ld will not create a library from C++ + # object files and a static libstdc++, better avoid it by now + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' + hardcode_libdir_flag_spec= + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac + fi + +echo "$as_me:$LINENO: result: $ld_shlibs" >&5 +echo "${ECHO_T}$ld_shlibs" >&6 +test "$ld_shlibs" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 +echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 + $rm conftest* + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 + (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + then + archive_cmds_need_lc=no + else + archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $rm conftest* + echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5 +echo "${ECHO_T}$archive_cmds_need_lc" >&6 + ;; + esac + fi + ;; +esac + +echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 +echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix4* | aix5*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi4*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $rm \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)' + # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. + if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` + else + sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' + fi + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +kfreebsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='GNU ld.so' + ;; + +freebsd*) + objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.01* | freebsdelf3.01*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + *) # from 3.2 on + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case "$host_cpu" in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`$SED -e 's/:,\t/ /g;s/=^=*$//;s/=^= * / /g' /etc/ld.so.conf | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +knetbsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='GNU ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +nto-qnx*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +openbsd*) + version_type=sunos + need_lib_prefix=no + need_version=yes + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +sco3.2v5*) + version_type=osf + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + export_dynamic_flag_spec='${wl}-Blargedynsym' + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +echo "$as_me:$LINENO: result: $dynamic_linker" >&5 +echo "${ECHO_T}$dynamic_linker" >&6 +test "$dynamic_linker" = no && can_build_shared=no + +echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 +echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || \ + test -n "$runpath_var " || \ + test "X$hardcode_automatic"="Xyes" ; then + + # We can hardcode non-existant directories. + if test "$hardcode_direct" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, )" != no && + test "$hardcode_minus_L" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +echo "$as_me:$LINENO: result: $hardcode_action" >&5 +echo "${ECHO_T}$hardcode_action" >&6 + +if test "$hardcode_action" = relink; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + +striplib= +old_striplib= +echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 +echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 +if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + ;; + *) + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 + ;; + esac +fi + +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main () +{ +dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dl_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dl_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 +if test $ac_cv_lib_dl_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + *) + echo "$as_me:$LINENO: checking for shl_load" >&5 +echo $ECHO_N "checking for shl_load... $ECHO_C" >&6 +if test "${ac_cv_func_shl_load+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define shl_load to an innocuous variant, in case declares shl_load. + For example, HP-UX 11i declares gettimeofday. */ +#define shl_load innocuous_shl_load + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char shl_load (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef shl_load + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char shl_load (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_shl_load) || defined (__stub___shl_load) +choke me +#else +char (*f) () = shl_load; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != shl_load; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_shl_load=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_shl_load=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 +echo "${ECHO_T}$ac_cv_func_shl_load" >&6 +if test $ac_cv_func_shl_load = yes; then + lt_cv_dlopen="shl_load" +else + echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 +echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6 +if test "${ac_cv_lib_dld_shl_load+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char shl_load (); +int +main () +{ +shl_load (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dld_shl_load=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dld_shl_load=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 +echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6 +if test $ac_cv_lib_dld_shl_load = yes; then + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" +else + echo "$as_me:$LINENO: checking for dlopen" >&5 +echo $ECHO_N "checking for dlopen... $ECHO_C" >&6 +if test "${ac_cv_func_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define dlopen to an innocuous variant, in case declares dlopen. + For example, HP-UX 11i declares gettimeofday. */ +#define dlopen innocuous_dlopen + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char dlopen (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef dlopen + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_dlopen) || defined (__stub___dlopen) +choke me +#else +char (*f) () = dlopen; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != dlopen; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 +echo "${ECHO_T}$ac_cv_func_dlopen" >&6 +if test $ac_cv_func_dlopen = yes; then + lt_cv_dlopen="dlopen" +else + echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main () +{ +dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dl_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dl_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 +if test $ac_cv_lib_dl_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 +echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6 +if test "${ac_cv_lib_svld_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main () +{ +dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_svld_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_svld_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6 +if test $ac_cv_lib_svld_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 +echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6 +if test "${ac_cv_lib_dld_dld_link+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dld_link (); +int +main () +{ +dld_link (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dld_dld_link=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dld_dld_link=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 +echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6 +if test $ac_cv_lib_dld_dld_link = yes; then + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 +echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6 +if test "${lt_cv_dlopen_self+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext < +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +#ifdef __cplusplus +extern "C" void exit (int); +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + + exit (status); +} +EOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_unknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 +echo "${ECHO_T}$lt_cv_dlopen_self" >&6 + + if test "x$lt_cv_dlopen_self" = xyes; then + LDFLAGS="$LDFLAGS $link_static_flag" + echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 +echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6 +if test "${lt_cv_dlopen_self_static+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext < +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +#ifdef __cplusplus +extern "C" void exit (int); +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + + exit (status); +} +EOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 +echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6 + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + +# Report which librarie types wil actually be built +echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 +echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6 +echo "$as_me:$LINENO: result: $can_build_shared" >&5 +echo "${ECHO_T}$can_build_shared" >&6 + +echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 +echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6 +test "$can_build_shared" = "no" && enable_shared=no + +# On AIX, shared libraries and static libraries use the same namespace, and +# are all built from PIC. +case "$host_os" in +aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + +aix4* | aix5*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + darwin* | rhapsody*) + if test "$GCC" = yes; then + archive_cmds_need_lc=no + case "$host_os" in + rhapsody* | darwin1.[012]) + allow_undefined_flag='-undefined suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + allow_undefined_flag='-flat_namespace -undefined suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[012]) + allow_undefined_flag='-flat_namespace -undefined suppress' + ;; + 10.*) + allow_undefined_flag='-undefined dynamic_lookup' + ;; + esac + fi + ;; + esac + output_verbose_link_cmd='echo' + archive_cmds='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring' + module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + whole_archive_flag_spec='-all_load $convenience' + link_all_deplibs=yes + else + ld_shlibs=no + fi + ;; +esac +echo "$as_me:$LINENO: result: $enable_shared" >&5 +echo "${ECHO_T}$enable_shared" >&6 + +echo "$as_me:$LINENO: checking whether to build static libraries" >&5 +echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6 +# Make sure either enable_shared or enable_static is yes. +test "$enable_shared" = yes || enable_static=yes +echo "$as_me:$LINENO: result: $enable_static" >&5 +echo "${ECHO_T}$enable_static" >&6 + +# The else clause should only fire when bootstrapping the +# libtool distribution, otherwise you forgot to ship ltmain.sh +# with your package, and you will get complaints that there are +# no rules to generate ltmain.sh. +if test -f "$ltmain"; then + # See if we are running on zsh, and set the options which allow our commands through + # without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + # Now quote all the things that may contain metacharacters while being + # careful not to overquote the AC_SUBSTed values. We take copies of the + # variables and quote the copies for generation of the libtool script. + for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \ + SED SHELL STRIP \ + libname_spec library_names_spec soname_spec extract_expsyms_cmds \ + old_striplib striplib file_magic_cmd finish_cmds finish_eval \ + deplibs_check_method reload_flag reload_cmds need_locks \ + lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ + lt_cv_sys_global_symbol_to_c_name_address \ + sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ + old_postinstall_cmds old_postuninstall_cmds \ + compiler \ + CC \ + LD \ + lt_prog_compiler_wl \ + lt_prog_compiler_pic \ + lt_prog_compiler_static \ + lt_prog_compiler_no_builtin_flag \ + export_dynamic_flag_spec \ + thread_safe_flag_spec \ + whole_archive_flag_spec \ + enable_shared_with_static_runtimes \ + old_archive_cmds \ + old_archive_from_new_cmds \ + predep_objects \ + postdep_objects \ + predeps \ + postdeps \ + compiler_lib_search_path \ + archive_cmds \ + archive_expsym_cmds \ + postinstall_cmds \ + postuninstall_cmds \ + old_archive_from_expsyms_cmds \ + allow_undefined_flag \ + no_undefined_flag \ + export_symbols_cmds \ + hardcode_libdir_flag_spec \ + hardcode_libdir_flag_spec_ld \ + hardcode_libdir_separator \ + hardcode_automatic \ + module_cmds \ + module_expsym_cmds \ + lt_cv_prog_compiler_c_o \ + exclude_expsyms \ + include_expsyms; do + + case $var in + old_archive_cmds | \ + old_archive_from_new_cmds | \ + archive_cmds | \ + archive_expsym_cmds | \ + module_cmds | \ + module_expsym_cmds | \ + old_archive_from_expsyms_cmds | \ + export_symbols_cmds | \ + extract_expsyms_cmds | reload_cmds | finish_cmds | \ + postinstall_cmds | postuninstall_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | \ + sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) + # Double-quote double-evaled strings. + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" + ;; + esac + done + + case $lt_echo in + *'\$0 --fallback-echo"') + lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` + ;; + esac + +cfgfile="${ofile}T" + trap "$rm \"$cfgfile\"; exit 1" 1 2 15 + $rm -f "$cfgfile" + { echo "$as_me:$LINENO: creating $ofile" >&5 +echo "$as_me: creating $ofile" >&6;} + + cat <<__EOF__ >> "$cfgfile" +#! $SHELL + +# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 +# Free Software Foundation, Inc. +# +# This file is part of GNU Libtool: +# Originally by Gordon Matzigkeit , 1996 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="$SED -e s/^X//" + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi + +# The names of the tagged configurations supported by this script. +available_tags= + +# ### BEGIN LIBTOOL CONFIG + +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A C compiler. +LTCC=$lt_LTCC + +# A language-specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU C compiler? +with_gcc=$GCC + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_LD + +# Whether we need hard or soft links. +LN_S=$lt_LN_S + +# A BSD-compatible nm program. +NM=$lt_NM + +# A symbol stripping program +STRIP=$lt_STRIP + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=$MAGIC_CMD + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Shared library suffix (normally ".so"). +shrext_cmds='$shrext_cmds' + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic +pic_mode=$pic_mode + +# What is the maximum length of a command? +max_cmd_len=$lt_cv_sys_max_cmd_len + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Must we lock files when doing compilation ? +need_locks=$lt_need_locks + +# Do we need the lib prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_thread_safe_flag_spec + +# Library versioning type. +version_type=$version_type + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Commands used to build and install an old-style archive. +RANLIB=$lt_RANLIB +old_archive_cmds=$lt_old_archive_cmds +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build and install a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds +postinstall_cmds=$lt_postinstall_cmds +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to build a loadable module (assumed same as above if empty) +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# Dependencies to place before the objects being linked to create a +# shared library. +predep_objects=$lt_predep_objects + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_postdep_objects + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_predeps + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps=$lt_postdeps + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == file_magic. +file_magic_cmd=$lt_file_magic_cmd + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$lt_finish_eval + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# If ld is used when linking, flag to hardcode \$libdir into +# a binary during linking. This must work even if \$libdir does +# not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to yes if building a shared library automatically hardcodes DIR into the library +# and all subsequent libraries and executables linked against it. +hardcode_automatic=$hardcode_automatic + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="$variables_saved_for_relink" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$fix_srcfile_path" + +# Set to yes if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# ### END LIBTOOL CONFIG + +__EOF__ + + + case $host_os in + aix3*) + cat <<\EOF >> "$cfgfile" + +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +EOF + ;; + esac + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || \ + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + +else + # If there is no Makefile yet, we rely on a make rule to execute + # `config.status --recheck' to rerun these tests and create the + # libtool script then. + ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` + if test -f "$ltmain_in"; then + test -f Makefile && make "$ltmain" + fi +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + +# Check whether --with-tags or --without-tags was given. +if test "${with_tags+set}" = set; then + withval="$with_tags" + tagnames="$withval" +fi; + +if test -f "$ltmain" && test -n "$tagnames"; then + if test ! -f "${ofile}"; then + { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not exist" >&5 +echo "$as_me: WARNING: output file \`$ofile' does not exist" >&2;} + fi + + if test -z "$LTCC"; then + eval "`$SHELL ${ofile} --config | grep '^LTCC='`" + if test -z "$LTCC"; then + { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not look like a libtool script" >&5 +echo "$as_me: WARNING: output file \`$ofile' does not look like a libtool script" >&2;} + else + { echo "$as_me:$LINENO: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&5 +echo "$as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&2;} + fi + fi + + # Extract list of available tagged configurations in $ofile. + # Note that this assumes the entire list is on one line. + available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'` + + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for tagname in $tagnames; do + IFS="$lt_save_ifs" + # Check whether tagname contains only valid characters + case `$echo "X$tagname" | $Xsed -e 's:[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]::g'` in + "") ;; + *) { { echo "$as_me:$LINENO: error: invalid tag name: $tagname" >&5 +echo "$as_me: error: invalid tag name: $tagname" >&2;} + { (exit 1); exit 1; }; } + ;; + esac + + if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null + then + { { echo "$as_me:$LINENO: error: tag name \"$tagname\" already exists" >&5 +echo "$as_me: error: tag name \"$tagname\" already exists" >&2;} + { (exit 1); exit 1; }; } + fi + + # Update the list of available tags. + if test -n "$tagname"; then + echo appending configuration tag \"$tagname\" to $ofile + + case $tagname in + CXX) + if test -n "$CXX" && test "X$CXX" != "Xno"; then + ac_ext=cc +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + + + +archive_cmds_need_lc_CXX=no +allow_undefined_flag_CXX= +always_export_symbols_CXX=no +archive_expsym_cmds_CXX= +export_dynamic_flag_spec_CXX= +hardcode_direct_CXX=no +hardcode_libdir_flag_spec_CXX= +hardcode_libdir_flag_spec_ld_CXX= +hardcode_libdir_separator_CXX= +hardcode_minus_L_CXX=no +hardcode_automatic_CXX=no +module_cmds_CXX= +module_expsym_cmds_CXX= +link_all_deplibs_CXX=unknown +old_archive_cmds_CXX=$old_archive_cmds +no_undefined_flag_CXX= +whole_archive_flag_spec_CXX= +enable_shared_with_static_runtimes_CXX=no + +# Dependencies to place before and after the object being linked: +predep_objects_CXX= +postdep_objects_CXX= +predeps_CXX= +postdeps_CXX= +compiler_lib_search_path_CXX= + +# Source file extension for C++ test sources. +ac_ext=cc + +# Object file extension for compiled C++ test sources. +objext=o +objext_CXX=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;\n" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(int, char *) { return(0); }\n' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_LD=$LD +lt_save_GCC=$GCC +GCC=$GXX +lt_save_with_gnu_ld=$with_gnu_ld +lt_save_path_LD=$lt_cv_path_LD +if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx +else + unset lt_cv_prog_gnu_ld +fi +if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX +else + unset lt_cv_path_LD +fi +test -z "${LDCXX+set}" || LD=$LDCXX +CC=${CXX-"c++"} +compiler=$CC +compiler_CXX=$CC +cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'` + +# We don't want -fno-exception wen compiling C++ code, so set the +# no_builtin_flag separately +if test "$GXX" = yes; then + lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' +else + lt_prog_compiler_no_builtin_flag_CXX= +fi + +if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + +# Check whether --with-gnu-ld or --without-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then + withval="$with_gnu_ld" + test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi; +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + echo "$as_me:$LINENO: checking for ld used by $CC" >&5 +echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6 + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` + while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + echo "$as_me:$LINENO: checking for GNU ld" >&5 +echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 +else + echo "$as_me:$LINENO: checking for non-GNU ld" >&5 +echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 +fi +if test "${lt_cv_path_LD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +echo "${ECHO_T}$LD" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi +test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 +echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} + { (exit 1); exit 1; }; } +echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 +echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 +if test "${lt_cv_prog_gnu_ld+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # I'd rather use --version here, but apparently some GNU ld's only accept -v. +case `$LD -v 2>&1 &5 +echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6 +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='${wl}' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | \ + grep 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec_CXX= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' + +else + GXX=no + with_gnu_ld=no + wlarc= +fi + +# PORTME: fill in a description of your system's C++ link characteristics +echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 +ld_shlibs_CXX=yes +case $host_os in + aix3*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix5*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds_CXX='' + hardcode_direct_CXX=yes + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + + if test "$GXX" = yes; then + case $host_os in aix4.012|aix4.012.*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + hardcode_direct_CXX=yes + else + # We have old collect2 + hardcode_direct_CXX=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L_CXX=yes + hardcode_libdir_flag_spec_CXX='-L$libdir' + hardcode_libdir_separator_CXX= + fi + esac + shared_flag='-shared' + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols_CXX=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag_CXX='-berok' + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" + + archive_expsym_cmds_CXX="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag_CXX="-z nodefs" + archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag_CXX=' ${wl}-bernotok' + allow_undefined_flag_CXX=' ${wl}-berok' + # -bexpall does not export symbols beginning with underscore (_) + always_export_symbols_CXX=yes + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec_CXX=' ' + archive_cmds_need_lc_CXX=yes + # This is similar to how AIX traditionally builds it's shared libraries. + archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec_CXX='-L$libdir' + allow_undefined_flag_CXX=unsupported + always_export_symbols_CXX=no + enable_shared_with_static_runtimes_CXX=yes + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + else + ld_shlibs_CXX=no + fi + ;; + + darwin* | rhapsody*) + if test "$GXX" = yes; then + archive_cmds_need_lc_CXX=no + case "$host_os" in + rhapsody* | darwin1.[012]) + allow_undefined_flag_CXX='-undefined suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + allow_undefined_flag_CXX='-flat_namespace -undefined suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[012]) + allow_undefined_flag_CXX='-flat_namespace -undefined suppress' + ;; + 10.*) + allow_undefined_flag_CXX='-undefined dynamic_lookup' + ;; + esac + fi + ;; + esac + lt_int_apple_cc_single_mod=no + output_verbose_link_cmd='echo' + if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then + lt_int_apple_cc_single_mod=yes + fi + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + archive_cmds_CXX='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + else + archive_cmds_CXX='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + fi + module_cmds_CXX='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + hardcode_direct_CXX=no + hardcode_automatic_CXX=yes + hardcode_shlibpath_var_CXX=unsupported + whole_archive_flag_spec_CXX='-all_load $convenience' + link_all_deplibs_CXX=yes + else + ld_shlibs_CXX=no + fi + ;; + + dgux*) + case $cc_basename in + ec++) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + ghcx) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + freebsd12*) + # C++ shared libraries reported to be fairly broken before switch to ELF + ld_shlibs_CXX=no + ;; + freebsd-elf*) + archive_cmds_need_lc_CXX=no + ;; + freebsd* | kfreebsd*-gnu) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + ld_shlibs_CXX=yes + ;; + gnu*) + ;; + hpux9*) + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_CXX=: + export_dynamic_flag_spec_CXX='${wl}-E' + hardcode_direct_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC) + archive_cmds_CXX='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes; then + archive_cmds_CXX='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + case "$host_cpu" in + hppa*64*) + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_flag_spec_ld_CXX='+b $libdir' + hardcode_libdir_separator_CXX=: + ;; + ia64*) + hardcode_libdir_flag_spec_CXX='-L$libdir' + ;; + *) + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_CXX=: + export_dynamic_flag_spec_CXX='${wl}-E' + ;; + esac + fi + case "$host_cpu" in + hppa*64*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + ;; + ia64*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + *) + hardcode_direct_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC) + case "$host_cpu" in + hppa*64*|ia64*) + archive_cmds_CXX='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' + ;; + *) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case "$host_cpu" in + ia64*|hppa*64*) + archive_cmds_CXX='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' + ;; + *) + archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + irix5* | irix6*) + case $cc_basename in + CC) + # SGI C++ + archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' + else + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib' + fi + fi + link_all_deplibs_CXX=yes + ;; + esac + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + ;; + linux*) + case $cc_basename in + KCC) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + + hardcode_libdir_flag_spec_CXX='${wl}--rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc) + # Intel C++ + with_gnu_ld=yes + archive_cmds_need_lc_CXX=no + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + cxx) + # Compaq C++ + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + esac + ;; + lynxos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + m88k*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + mvs*) + case $cc_basename in + cxx) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + netbsd* | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + osf3*) + case $cc_basename in + KCC) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + hardcode_libdir_separator_CXX=: + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' + + ;; + RCC) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + cxx) + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' + + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + osf4* | osf5*) + case $cc_basename in + KCC) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + hardcode_libdir_separator_CXX=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' + ;; + RCC) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + cxx) + allow_undefined_flag_CXX=' -expect_unresolved \*' + archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' + archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry $objdir/so_locations -o $lib~ + $rm $lib.exp' + + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' + + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + psos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + sco*) + archive_cmds_need_lc_CXX=no + case $cc_basename in + CC) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + lcc) + # Lucid + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + solaris*) + case $cc_basename in + CC) + # Sun C++ 4.2, 5.x and Centerline C++ + no_undefined_flag_CXX=' -zdefs' + archive_cmds_CXX='$CC -G${allow_undefined_flag} -nolib -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -nolib ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_shlibpath_var_CXX=no + case $host_os in + solaris2.0-5 | solaris2.0-5.*) ;; + *) + # The C++ compiler is used as linker so we must use $wl + # flag to pass the commands to the underlying system + # linker. + # Supported since Solaris 2.6 (maybe 2.5.1?) + whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + ;; + esac + link_all_deplibs_CXX=yes + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep "\-[LR]"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' + ;; + gcx) + # Green Hills C++ Compiler + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + no_undefined_flag_CXX=' ${wl}-z ${wl}defs' + if $CC --version | grep -v '^2\.7' > /dev/null; then + archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" + fi + + hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' + fi + ;; + esac + ;; + sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) + archive_cmds_need_lc_CXX=no + ;; + tandem*) + case $cc_basename in + NCC) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + vxworks*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; +esac +echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 +echo "${ECHO_T}$ld_shlibs_CXX" >&6 +test "$ld_shlibs_CXX" = no && can_build_shared=no + +GCC_CXX="$GXX" +LD_CXX="$LD" + + +cat > conftest.$ac_ext <&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + # The `*' in the case matches for architectures that use `case' in + # $output_verbose_cmd can trigger glob expansion during the loop + # eval without this substitution. + output_verbose_link_cmd="`$echo \"X$output_verbose_link_cmd\" | $Xsed -e \"$no_glob_subst\"`" + + for p in `eval $output_verbose_link_cmd`; do + case $p in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test $p = "-L" \ + || test $p = "-R"; then + prev=$p + continue + else + prev= + fi + + if test "$pre_test_object_deps_done" = no; then + case $p in + -L* | -R*) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$compiler_lib_search_path_CXX"; then + compiler_lib_search_path_CXX="${prev}${p}" + else + compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$postdeps_CXX"; then + postdeps_CXX="${prev}${p}" + else + postdeps_CXX="${postdeps_CXX} ${prev}${p}" + fi + fi + ;; + + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test "$pre_test_object_deps_done" = no; then + if test -z "$predep_objects_CXX"; then + predep_objects_CXX="$p" + else + predep_objects_CXX="$predep_objects_CXX $p" + fi + else + if test -z "$postdep_objects_CXX"; then + postdep_objects_CXX="$p" + else + postdep_objects_CXX="$postdep_objects_CXX $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling CXX test program" +fi + +$rm -f confest.$objext + +case " $postdeps_CXX " in +*" -lc "*) archive_cmds_need_lc_CXX=no ;; +esac + +lt_prog_compiler_wl_CXX= +lt_prog_compiler_pic_CXX= +lt_prog_compiler_static_CXX= + +echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 +echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 + + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + fi + ;; + amigaos*) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' + ;; + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | os2* | pw32*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic_CXX='-DDLL_EXPORT' + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic_CXX='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + lt_prog_compiler_pic_CXX= + ;; + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic_CXX=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case "$host_cpu" in + hppa*64*|ia64*) + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + else + case $host_os in + aix4* | aix5*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + else + lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68) + # Green Hills C++ Compiler + # _LT_AC_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + dgux*) + case $cc_basename in + ec++) + lt_prog_compiler_pic_CXX='-KPIC' + ;; + ghcx) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | kfreebsd*-gnu) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" + if test "$host_cpu" != ia64; then + lt_prog_compiler_pic_CXX='+Z' + fi + ;; + aCC) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" + case "$host_cpu" in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_CXX='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux*) + case $cc_basename in + KCC) + # KAI C++ Compiler + lt_prog_compiler_wl_CXX='--backend -Wl,' + lt_prog_compiler_pic_CXX='-fPIC' + ;; + icpc) + # Intel C++ + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-static' + ;; + cxx) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + *) + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx) + lt_prog_compiler_pic_CXX='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd* | knetbsd*-gnu) + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC) + lt_prog_compiler_wl_CXX='--backend -Wl,' + ;; + RCC) + # Rational C++ 2.4.1 + lt_prog_compiler_pic_CXX='-pic' + ;; + cxx) + # Digital/Compaq C++ + lt_prog_compiler_wl_CXX='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + sco*) + case $cc_basename in + CC) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + *) + ;; + esac + ;; + solaris*) + case $cc_basename in + CC) + # Sun C++ 4.2, 5.x and Centerline C++ + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + lt_prog_compiler_wl_CXX='-Qoption ld ' + ;; + gcx) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC) + # Sun C++ 4.x + lt_prog_compiler_pic_CXX='-pic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + lcc) + # Lucid + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC) + # NonStop-UX NCC 3.20 + lt_prog_compiler_pic_CXX='-KPIC' + ;; + *) + ;; + esac + ;; + unixware*) + ;; + vxworks*) + ;; + *) + lt_prog_compiler_can_build_shared_CXX=no + ;; + esac + fi + +echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_CXX" >&6 + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic_CXX"; then + +echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 +echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... $ECHO_C" >&6 +if test "${lt_prog_compiler_pic_works_CXX+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_prog_compiler_pic_works_CXX=no + ac_outfile=conftest.$ac_objext + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:11007: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:11011: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test ! -s conftest.err; then + lt_prog_compiler_pic_works_CXX=yes + fi + fi + $rm conftest* + +fi +echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_CXX" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_works_CXX" >&6 + +if test x"$lt_prog_compiler_pic_works_CXX" = xyes; then + case $lt_prog_compiler_pic_CXX in + "" | " "*) ;; + *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; + esac +else + lt_prog_compiler_pic_CXX= + lt_prog_compiler_can_build_shared_CXX=no +fi + +fi +case "$host_os" in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic_CXX= + ;; + *) + lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" + ;; +esac + +echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 +echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 +if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_c_o_CXX=no + $rm -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:11067: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:11071: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test ! -s out/conftest.err; then + lt_cv_prog_compiler_c_o_CXX=yes + fi + fi + chmod u+w . + $rm conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files + $rm out/* && rmdir out + cd .. + rmdir conftest + $rm conftest* + +fi +echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_c_o_CXX" >&6 + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 +echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 + hard_links=yes + $rm conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + echo "$as_me:$LINENO: result: $hard_links" >&5 +echo "${ECHO_T}$hard_links" >&6 + if test "$hard_links" = no; then + { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + +echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 + + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + case $host_os in + aix4* | aix5*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | grep 'GNU' > /dev/null; then + export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + export_symbols_cmds_CXX="$ltdll_cmds" + ;; + cygwin* | mingw*) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' + ;; + linux*) + link_all_deplibs_CXX=no + ;; + *) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac + +echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 +echo "${ECHO_T}$ld_shlibs_CXX" >&6 +test "$ld_shlibs_CXX" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc_CXX" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc_CXX=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds_CXX in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 +echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 + $rm conftest* + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl_CXX + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag_CXX + allow_undefined_flag_CXX= + if { (eval echo "$as_me:$LINENO: \"$archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 + (eval $archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + then + archive_cmds_need_lc_CXX=no + else + archive_cmds_need_lc_CXX=yes + fi + allow_undefined_flag_CXX=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $rm conftest* + echo "$as_me:$LINENO: result: $archive_cmds_need_lc_CXX" >&5 +echo "${ECHO_T}$archive_cmds_need_lc_CXX" >&6 + ;; + esac + fi + ;; +esac + +echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 +echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix4* | aix5*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi4*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $rm \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)' + # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. + if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` + else + sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' + fi + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +kfreebsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='GNU ld.so' + ;; + +freebsd*) + objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.01* | freebsdelf3.01*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + *) # from 3.2 on + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case "$host_cpu" in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`$SED -e 's/:,\t/ /g;s/=^=*$//;s/=^= * / /g' /etc/ld.so.conf | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +knetbsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='GNU ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +nto-qnx*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +openbsd*) + version_type=sunos + need_lib_prefix=no + need_version=yes + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +sco3.2v5*) + version_type=osf + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + export_dynamic_flag_spec='${wl}-Blargedynsym' + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +echo "$as_me:$LINENO: result: $dynamic_linker" >&5 +echo "${ECHO_T}$dynamic_linker" >&6 +test "$dynamic_linker" = no && can_build_shared=no + +echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 +echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 +hardcode_action_CXX= +if test -n "$hardcode_libdir_flag_spec_CXX" || \ + test -n "$runpath_var CXX" || \ + test "X$hardcode_automatic_CXX"="Xyes" ; then + + # We can hardcode non-existant directories. + if test "$hardcode_direct_CXX" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, CXX)" != no && + test "$hardcode_minus_L_CXX" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action_CXX=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_CXX=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_CXX=unsupported +fi +echo "$as_me:$LINENO: result: $hardcode_action_CXX" >&5 +echo "${ECHO_T}$hardcode_action_CXX" >&6 + +if test "$hardcode_action_CXX" = relink; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + +striplib= +old_striplib= +echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 +echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 +if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + ;; + *) + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 + ;; + esac +fi + +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main () +{ +dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dl_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dl_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 +if test $ac_cv_lib_dl_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + *) + echo "$as_me:$LINENO: checking for shl_load" >&5 +echo $ECHO_N "checking for shl_load... $ECHO_C" >&6 +if test "${ac_cv_func_shl_load+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define shl_load to an innocuous variant, in case declares shl_load. + For example, HP-UX 11i declares gettimeofday. */ +#define shl_load innocuous_shl_load + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char shl_load (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef shl_load + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char shl_load (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_shl_load) || defined (__stub___shl_load) +choke me +#else +char (*f) () = shl_load; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != shl_load; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_shl_load=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_shl_load=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 +echo "${ECHO_T}$ac_cv_func_shl_load" >&6 +if test $ac_cv_func_shl_load = yes; then + lt_cv_dlopen="shl_load" +else + echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 +echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6 +if test "${ac_cv_lib_dld_shl_load+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char shl_load (); +int +main () +{ +shl_load (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dld_shl_load=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dld_shl_load=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 +echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6 +if test $ac_cv_lib_dld_shl_load = yes; then + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" +else + echo "$as_me:$LINENO: checking for dlopen" >&5 +echo $ECHO_N "checking for dlopen... $ECHO_C" >&6 +if test "${ac_cv_func_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define dlopen to an innocuous variant, in case declares dlopen. + For example, HP-UX 11i declares gettimeofday. */ +#define dlopen innocuous_dlopen + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char dlopen (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef dlopen + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_dlopen) || defined (__stub___dlopen) +choke me +#else +char (*f) () = dlopen; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != dlopen; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 +echo "${ECHO_T}$ac_cv_func_dlopen" >&6 +if test $ac_cv_func_dlopen = yes; then + lt_cv_dlopen="dlopen" +else + echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main () +{ +dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dl_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dl_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 +if test $ac_cv_lib_dl_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 +echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6 +if test "${ac_cv_lib_svld_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main () +{ +dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_svld_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_svld_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6 +if test $ac_cv_lib_svld_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 +echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6 +if test "${ac_cv_lib_dld_dld_link+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dld_link (); +int +main () +{ +dld_link (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dld_dld_link=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dld_dld_link=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 +echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6 +if test $ac_cv_lib_dld_dld_link = yes; then + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 +echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6 +if test "${lt_cv_dlopen_self+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext < +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +#ifdef __cplusplus +extern "C" void exit (int); +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + + exit (status); +} +EOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_unknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 +echo "${ECHO_T}$lt_cv_dlopen_self" >&6 + + if test "x$lt_cv_dlopen_self" = xyes; then + LDFLAGS="$LDFLAGS $link_static_flag" + echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 +echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6 +if test "${lt_cv_dlopen_self_static+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext < +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +#ifdef __cplusplus +extern "C" void exit (int); +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + + exit (status); +} +EOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 +echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6 + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + +# The else clause should only fire when bootstrapping the +# libtool distribution, otherwise you forgot to ship ltmain.sh +# with your package, and you will get complaints that there are +# no rules to generate ltmain.sh. +if test -f "$ltmain"; then + # See if we are running on zsh, and set the options which allow our commands through + # without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + # Now quote all the things that may contain metacharacters while being + # careful not to overquote the AC_SUBSTed values. We take copies of the + # variables and quote the copies for generation of the libtool script. + for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \ + SED SHELL STRIP \ + libname_spec library_names_spec soname_spec extract_expsyms_cmds \ + old_striplib striplib file_magic_cmd finish_cmds finish_eval \ + deplibs_check_method reload_flag reload_cmds need_locks \ + lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ + lt_cv_sys_global_symbol_to_c_name_address \ + sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ + old_postinstall_cmds old_postuninstall_cmds \ + compiler_CXX \ + CC_CXX \ + LD_CXX \ + lt_prog_compiler_wl_CXX \ + lt_prog_compiler_pic_CXX \ + lt_prog_compiler_static_CXX \ + lt_prog_compiler_no_builtin_flag_CXX \ + export_dynamic_flag_spec_CXX \ + thread_safe_flag_spec_CXX \ + whole_archive_flag_spec_CXX \ + enable_shared_with_static_runtimes_CXX \ + old_archive_cmds_CXX \ + old_archive_from_new_cmds_CXX \ + predep_objects_CXX \ + postdep_objects_CXX \ + predeps_CXX \ + postdeps_CXX \ + compiler_lib_search_path_CXX \ + archive_cmds_CXX \ + archive_expsym_cmds_CXX \ + postinstall_cmds_CXX \ + postuninstall_cmds_CXX \ + old_archive_from_expsyms_cmds_CXX \ + allow_undefined_flag_CXX \ + no_undefined_flag_CXX \ + export_symbols_cmds_CXX \ + hardcode_libdir_flag_spec_CXX \ + hardcode_libdir_flag_spec_ld_CXX \ + hardcode_libdir_separator_CXX \ + hardcode_automatic_CXX \ + module_cmds_CXX \ + module_expsym_cmds_CXX \ + lt_cv_prog_compiler_c_o_CXX \ + exclude_expsyms_CXX \ + include_expsyms_CXX; do + + case $var in + old_archive_cmds_CXX | \ + old_archive_from_new_cmds_CXX | \ + archive_cmds_CXX | \ + archive_expsym_cmds_CXX | \ + module_cmds_CXX | \ + module_expsym_cmds_CXX | \ + old_archive_from_expsyms_cmds_CXX | \ + export_symbols_cmds_CXX | \ + extract_expsyms_cmds | reload_cmds | finish_cmds | \ + postinstall_cmds | postuninstall_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | \ + sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) + # Double-quote double-evaled strings. + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" + ;; + esac + done + + case $lt_echo in + *'\$0 --fallback-echo"') + lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` + ;; + esac + +cfgfile="$ofile" + + cat <<__EOF__ >> "$cfgfile" +# ### BEGIN LIBTOOL TAG CONFIG: $tagname + +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_CXX + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A C compiler. +LTCC=$lt_LTCC + +# A language-specific compiler. +CC=$lt_compiler_CXX + +# Is the compiler the GNU C compiler? +with_gcc=$GCC_CXX + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_LD_CXX + +# Whether we need hard or soft links. +LN_S=$lt_LN_S + +# A BSD-compatible nm program. +NM=$lt_NM + +# A symbol stripping program +STRIP=$lt_STRIP + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=$MAGIC_CMD + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_CXX + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Shared library suffix (normally ".so"). +shrext_cmds='$shrext_cmds' + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_CXX +pic_mode=$pic_mode + +# What is the maximum length of a command? +max_cmd_len=$lt_cv_sys_max_cmd_len + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX + +# Must we lock files when doing compilation ? +need_locks=$lt_need_locks + +# Do we need the lib prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_CXX + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_thread_safe_flag_spec_CXX + +# Library versioning type. +version_type=$version_type + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Commands used to build and install an old-style archive. +RANLIB=$lt_RANLIB +old_archive_cmds=$lt_old_archive_cmds_CXX +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX + +# Commands used to build and install a shared archive. +archive_cmds=$lt_archive_cmds_CXX +archive_expsym_cmds=$lt_archive_expsym_cmds_CXX +postinstall_cmds=$lt_postinstall_cmds +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to build a loadable module (assumed same as above if empty) +module_cmds=$lt_module_cmds_CXX +module_expsym_cmds=$lt_module_expsym_cmds_CXX + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# Dependencies to place before the objects being linked to create a +# shared library. +predep_objects=$lt_predep_objects_CXX + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_postdep_objects_CXX + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_predeps_CXX + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps=$lt_postdeps_CXX + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_CXX + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == file_magic. +file_magic_cmd=$lt_file_magic_cmd + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_CXX + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_CXX + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$lt_finish_eval + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_CXX + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX + +# If ld is used when linking, flag to hardcode \$libdir into +# a binary during linking. This must work even if \$libdir does +# not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX + +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct_CXX + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L_CXX + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX + +# Set to yes if building a shared library automatically hardcodes DIR into the library +# and all subsequent libraries and executables linked against it. +hardcode_automatic=$hardcode_automatic_CXX + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="$variables_saved_for_relink" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_CXX + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$fix_srcfile_path_CXX" + +# Set to yes if exported symbols are required. +always_export_symbols=$always_export_symbols_CXX + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_CXX + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_CXX + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_CXX + +# ### END LIBTOOL TAG CONFIG: $tagname + +__EOF__ + + +else + # If there is no Makefile yet, we rely on a make rule to execute + # `config.status --recheck' to rerun these tests and create the + # libtool script then. + ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` + if test -f "$ltmain_in"; then + test -f Makefile && make "$ltmain" + fi +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC=$lt_save_CC +LDCXX=$LD +LD=$lt_save_LD +GCC=$lt_save_GCC +with_gnu_ldcxx=$with_gnu_ld +with_gnu_ld=$lt_save_with_gnu_ld +lt_cv_path_LDCXX=$lt_cv_path_LD +lt_cv_path_LD=$lt_save_path_LD +lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld +lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld + + else + tagname="" + fi + ;; + + F77) + if test -n "$F77" && test "X$F77" != "Xno"; then + +ac_ext=f +ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' +ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_f77_compiler_gnu + + +archive_cmds_need_lc_F77=no +allow_undefined_flag_F77= +always_export_symbols_F77=no +archive_expsym_cmds_F77= +export_dynamic_flag_spec_F77= +hardcode_direct_F77=no +hardcode_libdir_flag_spec_F77= +hardcode_libdir_flag_spec_ld_F77= +hardcode_libdir_separator_F77= +hardcode_minus_L_F77=no +hardcode_automatic_F77=no +module_cmds_F77= +module_expsym_cmds_F77= +link_all_deplibs_F77=unknown +old_archive_cmds_F77=$old_archive_cmds +no_undefined_flag_F77= +whole_archive_flag_spec_F77= +enable_shared_with_static_runtimes_F77=no + +# Source file extension for f77 test sources. +ac_ext=f + +# Object file extension for compiled f77 test sources. +objext=o +objext_F77=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code=" subroutine t\n return\n end\n" + +# Code to be used in simple link tests +lt_simple_link_test_code=" program t\n end\n" + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +CC=${F77-"f77"} +compiler=$CC +compiler_F77=$CC +cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'` + +echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 +echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6 +echo "$as_me:$LINENO: result: $can_build_shared" >&5 +echo "${ECHO_T}$can_build_shared" >&6 + +echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 +echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6 +test "$can_build_shared" = "no" && enable_shared=no + +# On AIX, shared libraries and static libraries use the same namespace, and +# are all built from PIC. +case "$host_os" in +aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; +aix4* | aix5*) + test "$enable_shared" = yes && enable_static=no + ;; +esac +echo "$as_me:$LINENO: result: $enable_shared" >&5 +echo "${ECHO_T}$enable_shared" >&6 + +echo "$as_me:$LINENO: checking whether to build static libraries" >&5 +echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6 +# Make sure either enable_shared or enable_static is yes. +test "$enable_shared" = yes || enable_static=yes +echo "$as_me:$LINENO: result: $enable_static" >&5 +echo "${ECHO_T}$enable_static" >&6 + +test "$ld_shlibs_F77" = no && can_build_shared=no + +GCC_F77="$G77" +LD_F77="$LD" + +lt_prog_compiler_wl_F77= +lt_prog_compiler_pic_F77= +lt_prog_compiler_static_F77= + +echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 +echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 + + if test "$GCC" = yes; then + lt_prog_compiler_wl_F77='-Wl,' + lt_prog_compiler_static_F77='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_F77='-Bstatic' + fi + ;; + + amigaos*) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic_F77='-m68020 -resident32 -malways-restore-a4' + ;; + + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic_F77='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic_F77='-fno-common' + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared_F77=no + enable_shared=no + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic_F77=-Kconform_pic + fi + ;; + + hpux*) + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case "$host_cpu" in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_F77='-fPIC' + ;; + esac + ;; + + *) + lt_prog_compiler_pic_F77='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl_F77='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_F77='-Bstatic' + else + lt_prog_compiler_static_F77='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic_F77='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl_F77='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case "$host_cpu" in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_F77='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static_F77='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl_F77='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static_F77='-non_shared' + ;; + + newsos6) + lt_prog_compiler_pic_F77='-KPIC' + lt_prog_compiler_static_F77='-Bstatic' + ;; + + linux*) + case $CC in + icc* | ecc*) + lt_prog_compiler_wl_F77='-Wl,' + lt_prog_compiler_pic_F77='-KPIC' + lt_prog_compiler_static_F77='-static' + ;; + ccc*) + lt_prog_compiler_wl_F77='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static_F77='-non_shared' + ;; + esac + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl_F77='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static_F77='-non_shared' + ;; + + sco3.2v5*) + lt_prog_compiler_pic_F77='-Kpic' + lt_prog_compiler_static_F77='-dn' + ;; + + solaris*) + lt_prog_compiler_wl_F77='-Wl,' + lt_prog_compiler_pic_F77='-KPIC' + lt_prog_compiler_static_F77='-Bstatic' + ;; + + sunos4*) + lt_prog_compiler_wl_F77='-Qoption ld ' + lt_prog_compiler_pic_F77='-PIC' + lt_prog_compiler_static_F77='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + lt_prog_compiler_wl_F77='-Wl,' + lt_prog_compiler_pic_F77='-KPIC' + lt_prog_compiler_static_F77='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic_F77='-Kconform_pic' + lt_prog_compiler_static_F77='-Bstatic' + fi + ;; + + uts4*) + lt_prog_compiler_pic_F77='-pic' + lt_prog_compiler_static_F77='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared_F77=no + ;; + esac + fi + +echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_F77" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_F77" >&6 + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic_F77"; then + +echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5 +echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... $ECHO_C" >&6 +if test "${lt_prog_compiler_pic_works_F77+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_prog_compiler_pic_works_F77=no + ac_outfile=conftest.$ac_objext + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic_F77" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:13349: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:13353: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test ! -s conftest.err; then + lt_prog_compiler_pic_works_F77=yes + fi + fi + $rm conftest* + +fi +echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_F77" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_works_F77" >&6 + +if test x"$lt_prog_compiler_pic_works_F77" = xyes; then + case $lt_prog_compiler_pic_F77 in + "" | " "*) ;; + *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;; + esac +else + lt_prog_compiler_pic_F77= + lt_prog_compiler_can_build_shared_F77=no +fi + +fi +case "$host_os" in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic_F77= + ;; + *) + lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77" + ;; +esac + +echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 +echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 +if test "${lt_cv_prog_compiler_c_o_F77+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_c_o_F77=no + $rm -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:13409: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:13413: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test ! -s out/conftest.err; then + lt_cv_prog_compiler_c_o_F77=yes + fi + fi + chmod u+w . + $rm conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files + $rm out/* && rmdir out + cd .. + rmdir conftest + $rm conftest* + +fi +echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_F77" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_c_o_F77" >&6 + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o_F77" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 +echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 + hard_links=yes + $rm conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + echo "$as_me:$LINENO: result: $hard_links" >&5 +echo "${ECHO_T}$hard_links" >&6 + if test "$hard_links" = no; then + { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + +echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 + + runpath_var= + allow_undefined_flag_F77= + enable_shared_with_static_runtimes_F77=no + archive_cmds_F77= + archive_expsym_cmds_F77= + old_archive_From_new_cmds_F77= + old_archive_from_expsyms_cmds_F77= + export_dynamic_flag_spec_F77= + whole_archive_flag_spec_F77= + thread_safe_flag_spec_F77= + hardcode_libdir_flag_spec_F77= + hardcode_libdir_flag_spec_ld_F77= + hardcode_libdir_separator_F77= + hardcode_direct_F77=no + hardcode_minus_L_F77=no + hardcode_shlibpath_var_F77=unsupported + link_all_deplibs_F77=unknown + hardcode_automatic_F77=no + module_cmds_F77= + module_expsym_cmds_F77= + always_export_symbols_F77=no + export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms_F77= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms_F77="_GLOBAL_OFFSET_TABLE_" + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + ld_shlibs_F77=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # See if GNU ld supports shared libraries. + case $host_os in + aix3* | aix4* | aix5*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs_F77=no + cat <&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +EOF + fi + ;; + + amigaos*) + archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_minus_L_F77=yes + + # Samuel A. Falvo II reports + # that the semantics of dynamic libraries on AmigaOS, at least up + # to version 4, is to share data among multiple programs linked + # with the same dynamic library. Since this doesn't match the + # behavior of shared libraries on other platforms, we can't use + # them. + ld_shlibs_F77=no + ;; + + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag_F77=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds_F77='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs_F77=no + fi + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec_F77='-L$libdir' + allow_undefined_flag_F77=unsupported + always_export_symbols_F77=no + enable_shared_with_static_runtimes_F77=yes + export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds_F77='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + else + ld_shlibs=no + fi + ;; + + netbsd* | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris* | sysv5*) + if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then + ld_shlibs_F77=no + cat <&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +EOF + elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs_F77=no + fi + ;; + + sunos4*) + archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + linux*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_cmds_F77="$tmp_archive_cmds" + supports_anon_versioning=no + case `$LD -v 2>/dev/null` in + *\ 01.* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + if test $supports_anon_versioning = yes; then + archive_expsym_cmds_F77='$echo "{ global:" > $output_objdir/$libname.ver~ +cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ +$echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + else + archive_expsym_cmds_F77="$tmp_archive_cmds" + fi + link_all_deplibs_F77=no + else + ld_shlibs_F77=no + fi + ;; + + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs_F77=no + fi + ;; + esac + + if test "$ld_shlibs_F77" = yes; then + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec_F77='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec_F77='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec_F77="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec_F77= + fi + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag_F77=unsupported + always_export_symbols_F77=yes + archive_expsym_cmds_F77='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L_F77=yes + if test "$GCC" = yes && test -z "$link_static_flag"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct_F77=unsupported + fi + ;; + + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | grep 'GNU' > /dev/null; then + export_symbols_cmds_F77='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds_F77='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix5*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds_F77='' + hardcode_direct_F77=yes + hardcode_libdir_separator_F77=':' + link_all_deplibs_F77=yes + + if test "$GCC" = yes; then + case $host_os in aix4.012|aix4.012.*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + hardcode_direct_F77=yes + else + # We have old collect2 + hardcode_direct_F77=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L_F77=yes + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_libdir_separator_F77= + fi + esac + shared_flag='-shared' + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols_F77=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag_F77='-berok' + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds_F77="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec_F77='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag_F77="-z nodefs" + archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag_F77=' ${wl}-bernotok' + allow_undefined_flag_F77=' ${wl}-berok' + # -bexpall does not export symbols beginning with underscore (_) + always_export_symbols_F77=yes + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec_F77=' ' + archive_cmds_need_lc_F77=yes + # This is similar to how AIX traditionally builds it's shared libraries. + archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_minus_L_F77=yes + # see comment about different semantics on the GNU ld section + ld_shlibs_F77=no + ;; + + bsdi4*) + export_dynamic_flag_spec_F77=-rdynamic + ;; + + cygwin* | mingw* | pw32*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec_F77=' ' + allow_undefined_flag_F77=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds_F77='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_From_new_cmds_F77='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds_F77='lib /OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path='`cygpath -w "$srcfile"`' + enable_shared_with_static_runtimes_F77=yes + ;; + + darwin* | rhapsody*) + if test "$GXX" = yes ; then + archive_cmds_need_lc_F77=no + case "$host_os" in + rhapsody* | darwin1.[012]) + allow_undefined_flag_F77='-undefined suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + allow_undefined_flag_F77='-flat_namespace -undefined suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[012]) + allow_undefined_flag_F77='-flat_namespace -undefined suppress' + ;; + 10.*) + allow_undefined_flag_F77='-undefined dynamic_lookup' + ;; + esac + fi + ;; + esac + lt_int_apple_cc_single_mod=no + output_verbose_link_cmd='echo' + if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then + lt_int_apple_cc_single_mod=yes + fi + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + archive_cmds_F77='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + else + archive_cmds_F77='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + fi + module_cmds_F77='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + hardcode_direct_F77=no + hardcode_automatic_F77=yes + hardcode_shlibpath_var_F77=unsupported + whole_archive_flag_spec_F77='-all_load $convenience' + link_all_deplibs_F77=yes + else + ld_shlibs_F77=no + fi + ;; + + dgux*) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_shlibpath_var_F77=no + ;; + + freebsd1*) + ld_shlibs_F77=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec_F77='-R$libdir' + hardcode_direct_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_F77=yes + hardcode_minus_L_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | kfreebsd*-gnu) + archive_cmds_F77='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec_F77='-R$libdir' + hardcode_direct_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds_F77='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds_F77='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_F77=: + hardcode_direct_F77=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_F77=yes + export_dynamic_flag_spec_F77='${wl}-E' + ;; + + hpux10* | hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case "$host_cpu" in + hppa*64*|ia64*) + archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case "$host_cpu" in + hppa*64*|ia64*) + archive_cmds_F77='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' + ;; + *) + archive_cmds_F77='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + case "$host_cpu" in + hppa*64*) + hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' + hardcode_libdir_flag_spec_ld_F77='+b $libdir' + hardcode_libdir_separator_F77=: + hardcode_direct_F77=no + hardcode_shlibpath_var_F77=no + ;; + ia64*) + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_direct_F77=no + hardcode_shlibpath_var_F77=no + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_F77=yes + ;; + *) + hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_F77=: + hardcode_direct_F77=yes + export_dynamic_flag_spec_F77='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_F77=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + archive_cmds_F77='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_ld_F77='-rpath $libdir' + fi + hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_F77=: + link_all_deplibs_F77=yes + ;; + + netbsd* | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec_F77='-R$libdir' + hardcode_direct_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + newsos6) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_F77=yes + hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_F77=: + hardcode_shlibpath_var_F77=no + ;; + + openbsd*) + hardcode_direct_F77=yes + hardcode_shlibpath_var_F77=no + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' + export_dynamic_flag_spec_F77='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_F77='-R$libdir' + ;; + *) + archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' + ;; + esac + fi + ;; + + os2*) + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_minus_L_F77=yes + allow_undefined_flag_F77=unsupported + archive_cmds_F77='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_From_new_cmds_F77='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag_F77=' -expect_unresolved \*' + archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + fi + hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_F77=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag_F77=' -expect_unresolved \*' + archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds_F77='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ + $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec_F77='-rpath $libdir' + fi + hardcode_libdir_separator_F77=: + ;; + + sco3.2v5*) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_F77=no + export_dynamic_flag_spec_F77='${wl}-Bexport' + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ;; + + solaris*) + no_undefined_flag_F77=' -z text' + if test "$GCC" = yes; then + archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' + else + archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' + fi + hardcode_libdir_flag_spec_F77='-R$libdir' + hardcode_shlibpath_var_F77=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) # Supported since Solaris 2.6 (maybe 2.5.1?) + whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' ;; + esac + link_all_deplibs_F77=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds_F77='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_direct_F77=yes + hardcode_minus_L_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_F77=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds_F77='$CC -r -o $output$reload_objs' + hardcode_direct_F77=no + ;; + motorola) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var_F77=no + ;; + + sysv4.3*) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_F77=no + export_dynamic_flag_spec_F77='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_F77=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs_F77=yes + fi + ;; + + sysv4.2uw2*) + archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_F77=yes + hardcode_minus_L_F77=no + hardcode_shlibpath_var_F77=no + hardcode_runpath_var=yes + runpath_var=LD_RUN_PATH + ;; + + sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) + no_undefined_flag_F77='${wl}-z ${wl}text' + if test "$GCC" = yes; then + archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_F77='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var_F77=no + ;; + + sysv5*) + no_undefined_flag_F77=' -z text' + # $CC -shared without GNU ld will not create a library from C++ + # object files and a static libstdc++, better avoid it by now + archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' + hardcode_libdir_flag_spec_F77= + hardcode_shlibpath_var_F77=no + runpath_var='LD_RUN_PATH' + ;; + + uts4*) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_shlibpath_var_F77=no + ;; + + *) + ld_shlibs_F77=no + ;; + esac + fi + +echo "$as_me:$LINENO: result: $ld_shlibs_F77" >&5 +echo "${ECHO_T}$ld_shlibs_F77" >&6 +test "$ld_shlibs_F77" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc_F77" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc_F77=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds_F77 in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 +echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 + $rm conftest* + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl_F77 + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag_F77 + allow_undefined_flag_F77= + if { (eval echo "$as_me:$LINENO: \"$archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 + (eval $archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + then + archive_cmds_need_lc_F77=no + else + archive_cmds_need_lc_F77=yes + fi + allow_undefined_flag_F77=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $rm conftest* + echo "$as_me:$LINENO: result: $archive_cmds_need_lc_F77" >&5 +echo "${ECHO_T}$archive_cmds_need_lc_F77" >&6 + ;; + esac + fi + ;; +esac + +echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 +echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix4* | aix5*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi4*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $rm \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)' + # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. + if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` + else + sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' + fi + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +kfreebsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='GNU ld.so' + ;; + +freebsd*) + objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.01* | freebsdelf3.01*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + *) # from 3.2 on + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case "$host_cpu" in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`$SED -e 's/:,\t/ /g;s/=^=*$//;s/=^= * / /g' /etc/ld.so.conf | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +knetbsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='GNU ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +nto-qnx*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +openbsd*) + version_type=sunos + need_lib_prefix=no + need_version=yes + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +sco3.2v5*) + version_type=osf + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + export_dynamic_flag_spec='${wl}-Blargedynsym' + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +echo "$as_me:$LINENO: result: $dynamic_linker" >&5 +echo "${ECHO_T}$dynamic_linker" >&6 +test "$dynamic_linker" = no && can_build_shared=no + +echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 +echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 +hardcode_action_F77= +if test -n "$hardcode_libdir_flag_spec_F77" || \ + test -n "$runpath_var F77" || \ + test "X$hardcode_automatic_F77"="Xyes" ; then + + # We can hardcode non-existant directories. + if test "$hardcode_direct_F77" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, F77)" != no && + test "$hardcode_minus_L_F77" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action_F77=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_F77=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_F77=unsupported +fi +echo "$as_me:$LINENO: result: $hardcode_action_F77" >&5 +echo "${ECHO_T}$hardcode_action_F77" >&6 + +if test "$hardcode_action_F77" = relink; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + +striplib= +old_striplib= +echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 +echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 +if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + ;; + *) + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 + ;; + esac +fi + + + +# The else clause should only fire when bootstrapping the +# libtool distribution, otherwise you forgot to ship ltmain.sh +# with your package, and you will get complaints that there are +# no rules to generate ltmain.sh. +if test -f "$ltmain"; then + # See if we are running on zsh, and set the options which allow our commands through + # without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + # Now quote all the things that may contain metacharacters while being + # careful not to overquote the AC_SUBSTed values. We take copies of the + # variables and quote the copies for generation of the libtool script. + for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \ + SED SHELL STRIP \ + libname_spec library_names_spec soname_spec extract_expsyms_cmds \ + old_striplib striplib file_magic_cmd finish_cmds finish_eval \ + deplibs_check_method reload_flag reload_cmds need_locks \ + lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ + lt_cv_sys_global_symbol_to_c_name_address \ + sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ + old_postinstall_cmds old_postuninstall_cmds \ + compiler_F77 \ + CC_F77 \ + LD_F77 \ + lt_prog_compiler_wl_F77 \ + lt_prog_compiler_pic_F77 \ + lt_prog_compiler_static_F77 \ + lt_prog_compiler_no_builtin_flag_F77 \ + export_dynamic_flag_spec_F77 \ + thread_safe_flag_spec_F77 \ + whole_archive_flag_spec_F77 \ + enable_shared_with_static_runtimes_F77 \ + old_archive_cmds_F77 \ + old_archive_from_new_cmds_F77 \ + predep_objects_F77 \ + postdep_objects_F77 \ + predeps_F77 \ + postdeps_F77 \ + compiler_lib_search_path_F77 \ + archive_cmds_F77 \ + archive_expsym_cmds_F77 \ + postinstall_cmds_F77 \ + postuninstall_cmds_F77 \ + old_archive_from_expsyms_cmds_F77 \ + allow_undefined_flag_F77 \ + no_undefined_flag_F77 \ + export_symbols_cmds_F77 \ + hardcode_libdir_flag_spec_F77 \ + hardcode_libdir_flag_spec_ld_F77 \ + hardcode_libdir_separator_F77 \ + hardcode_automatic_F77 \ + module_cmds_F77 \ + module_expsym_cmds_F77 \ + lt_cv_prog_compiler_c_o_F77 \ + exclude_expsyms_F77 \ + include_expsyms_F77; do + + case $var in + old_archive_cmds_F77 | \ + old_archive_from_new_cmds_F77 | \ + archive_cmds_F77 | \ + archive_expsym_cmds_F77 | \ + module_cmds_F77 | \ + module_expsym_cmds_F77 | \ + old_archive_from_expsyms_cmds_F77 | \ + export_symbols_cmds_F77 | \ + extract_expsyms_cmds | reload_cmds | finish_cmds | \ + postinstall_cmds | postuninstall_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | \ + sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) + # Double-quote double-evaled strings. + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" + ;; + esac + done + + case $lt_echo in + *'\$0 --fallback-echo"') + lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` + ;; + esac + +cfgfile="$ofile" + + cat <<__EOF__ >> "$cfgfile" +# ### BEGIN LIBTOOL TAG CONFIG: $tagname + +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_F77 + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77 + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A C compiler. +LTCC=$lt_LTCC + +# A language-specific compiler. +CC=$lt_compiler_F77 + +# Is the compiler the GNU C compiler? +with_gcc=$GCC_F77 + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_LD_F77 + +# Whether we need hard or soft links. +LN_S=$lt_LN_S + +# A BSD-compatible nm program. +NM=$lt_NM + +# A symbol stripping program +STRIP=$lt_STRIP + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=$MAGIC_CMD + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_F77 + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Shared library suffix (normally ".so"). +shrext_cmds='$shrext_cmds' + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_F77 +pic_mode=$pic_mode + +# What is the maximum length of a command? +max_cmd_len=$lt_cv_sys_max_cmd_len + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77 + +# Must we lock files when doing compilation ? +need_locks=$lt_need_locks + +# Do we need the lib prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_F77 + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77 + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77 + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77 + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_thread_safe_flag_spec_F77 + +# Library versioning type. +version_type=$version_type + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Commands used to build and install an old-style archive. +RANLIB=$lt_RANLIB +old_archive_cmds=$lt_old_archive_cmds_F77 +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_F77 + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77 + +# Commands used to build and install a shared archive. +archive_cmds=$lt_archive_cmds_F77 +archive_expsym_cmds=$lt_archive_expsym_cmds_F77 +postinstall_cmds=$lt_postinstall_cmds +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to build a loadable module (assumed same as above if empty) +module_cmds=$lt_module_cmds_F77 +module_expsym_cmds=$lt_module_expsym_cmds_F77 + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# Dependencies to place before the objects being linked to create a +# shared library. +predep_objects=$lt_predep_objects_F77 + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_postdep_objects_F77 + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_predeps_F77 + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps=$lt_postdeps_F77 + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_F77 + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == file_magic. +file_magic_cmd=$lt_file_magic_cmd + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_F77 + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_F77 + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$lt_finish_eval + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_F77 + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_F77 + +# If ld is used when linking, flag to hardcode \$libdir into +# a binary during linking. This must work even if \$libdir does +# not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_F77 + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77 + +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct_F77 + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L_F77 + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_F77 + +# Set to yes if building a shared library automatically hardcodes DIR into the library +# and all subsequent libraries and executables linked against it. +hardcode_automatic=$hardcode_automatic_F77 + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="$variables_saved_for_relink" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_F77 + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$fix_srcfile_path_F77" + +# Set to yes if exported symbols are required. +always_export_symbols=$always_export_symbols_F77 + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_F77 + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_F77 + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_F77 + +# ### END LIBTOOL TAG CONFIG: $tagname + +__EOF__ + + +else + # If there is no Makefile yet, we rely on a make rule to execute + # `config.status --recheck' to rerun these tests and create the + # libtool script then. + ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` + if test -f "$ltmain_in"; then + test -f Makefile && make "$ltmain" + fi +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + else + tagname="" + fi + ;; + + GCJ) + if test -n "$GCJ" && test "X$GCJ" != "Xno"; then + + + +# Source file extension for Java test sources. +ac_ext=java + +# Object file extension for compiled Java test sources. +objext=o +objext_GCJ=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="class foo {}\n" + +# Code to be used in simple link tests +lt_simple_link_test_code='public class conftest { public static void main(String argv) {}; }\n' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +CC=${GCJ-"gcj"} +compiler=$CC +compiler_GCJ=$CC + +# GCJ did not exist at the time GCC didn't implicitly link libc in. +archive_cmds_need_lc_GCJ=no + + +lt_prog_compiler_no_builtin_flag_GCJ= + +if test "$GCC" = yes; then + lt_prog_compiler_no_builtin_flag_GCJ=' -fno-builtin' + + +echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6 +if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:15442: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:15446: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test ! -s conftest.err; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $rm conftest* + +fi +echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6 + +if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then + lt_prog_compiler_no_builtin_flag_GCJ="$lt_prog_compiler_no_builtin_flag_GCJ -fno-rtti -fno-exceptions" +else + : +fi + +fi + +lt_prog_compiler_wl_GCJ= +lt_prog_compiler_pic_GCJ= +lt_prog_compiler_static_GCJ= + +echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 +echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 + + if test "$GCC" = yes; then + lt_prog_compiler_wl_GCJ='-Wl,' + lt_prog_compiler_static_GCJ='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_GCJ='-Bstatic' + fi + ;; + + amigaos*) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic_GCJ='-m68020 -resident32 -malways-restore-a4' + ;; + + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic_GCJ='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic_GCJ='-fno-common' + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared_GCJ=no + enable_shared=no + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic_GCJ=-Kconform_pic + fi + ;; + + hpux*) + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case "$host_cpu" in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_GCJ='-fPIC' + ;; + esac + ;; + + *) + lt_prog_compiler_pic_GCJ='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl_GCJ='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_GCJ='-Bstatic' + else + lt_prog_compiler_static_GCJ='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic_GCJ='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl_GCJ='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case "$host_cpu" in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_GCJ='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static_GCJ='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl_GCJ='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static_GCJ='-non_shared' + ;; + + newsos6) + lt_prog_compiler_pic_GCJ='-KPIC' + lt_prog_compiler_static_GCJ='-Bstatic' + ;; + + linux*) + case $CC in + icc* | ecc*) + lt_prog_compiler_wl_GCJ='-Wl,' + lt_prog_compiler_pic_GCJ='-KPIC' + lt_prog_compiler_static_GCJ='-static' + ;; + ccc*) + lt_prog_compiler_wl_GCJ='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static_GCJ='-non_shared' + ;; + esac + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl_GCJ='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static_GCJ='-non_shared' + ;; + + sco3.2v5*) + lt_prog_compiler_pic_GCJ='-Kpic' + lt_prog_compiler_static_GCJ='-dn' + ;; + + solaris*) + lt_prog_compiler_wl_GCJ='-Wl,' + lt_prog_compiler_pic_GCJ='-KPIC' + lt_prog_compiler_static_GCJ='-Bstatic' + ;; + + sunos4*) + lt_prog_compiler_wl_GCJ='-Qoption ld ' + lt_prog_compiler_pic_GCJ='-PIC' + lt_prog_compiler_static_GCJ='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + lt_prog_compiler_wl_GCJ='-Wl,' + lt_prog_compiler_pic_GCJ='-KPIC' + lt_prog_compiler_static_GCJ='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic_GCJ='-Kconform_pic' + lt_prog_compiler_static_GCJ='-Bstatic' + fi + ;; + + uts4*) + lt_prog_compiler_pic_GCJ='-pic' + lt_prog_compiler_static_GCJ='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared_GCJ=no + ;; + esac + fi + +echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_GCJ" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_GCJ" >&6 + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic_GCJ"; then + +echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works" >&5 +echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works... $ECHO_C" >&6 +if test "${lt_prog_compiler_pic_works_GCJ+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_prog_compiler_pic_works_GCJ=no + ac_outfile=conftest.$ac_objext + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic_GCJ" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:15675: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:15679: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test ! -s conftest.err; then + lt_prog_compiler_pic_works_GCJ=yes + fi + fi + $rm conftest* + +fi +echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_GCJ" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_works_GCJ" >&6 + +if test x"$lt_prog_compiler_pic_works_GCJ" = xyes; then + case $lt_prog_compiler_pic_GCJ in + "" | " "*) ;; + *) lt_prog_compiler_pic_GCJ=" $lt_prog_compiler_pic_GCJ" ;; + esac +else + lt_prog_compiler_pic_GCJ= + lt_prog_compiler_can_build_shared_GCJ=no +fi + +fi +case "$host_os" in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic_GCJ= + ;; + *) + lt_prog_compiler_pic_GCJ="$lt_prog_compiler_pic_GCJ" + ;; +esac + +echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 +echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 +if test "${lt_cv_prog_compiler_c_o_GCJ+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_c_o_GCJ=no + $rm -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:15735: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:15739: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test ! -s out/conftest.err; then + lt_cv_prog_compiler_c_o_GCJ=yes + fi + fi + chmod u+w . + $rm conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files + $rm out/* && rmdir out + cd .. + rmdir conftest + $rm conftest* + +fi +echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_GCJ" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_c_o_GCJ" >&6 + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o_GCJ" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 +echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 + hard_links=yes + $rm conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + echo "$as_me:$LINENO: result: $hard_links" >&5 +echo "${ECHO_T}$hard_links" >&6 + if test "$hard_links" = no; then + { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + +echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 + + runpath_var= + allow_undefined_flag_GCJ= + enable_shared_with_static_runtimes_GCJ=no + archive_cmds_GCJ= + archive_expsym_cmds_GCJ= + old_archive_From_new_cmds_GCJ= + old_archive_from_expsyms_cmds_GCJ= + export_dynamic_flag_spec_GCJ= + whole_archive_flag_spec_GCJ= + thread_safe_flag_spec_GCJ= + hardcode_libdir_flag_spec_GCJ= + hardcode_libdir_flag_spec_ld_GCJ= + hardcode_libdir_separator_GCJ= + hardcode_direct_GCJ=no + hardcode_minus_L_GCJ=no + hardcode_shlibpath_var_GCJ=unsupported + link_all_deplibs_GCJ=unknown + hardcode_automatic_GCJ=no + module_cmds_GCJ= + module_expsym_cmds_GCJ= + always_export_symbols_GCJ=no + export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms_GCJ= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms_GCJ="_GLOBAL_OFFSET_TABLE_" + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + ld_shlibs_GCJ=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # See if GNU ld supports shared libraries. + case $host_os in + aix3* | aix4* | aix5*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs_GCJ=no + cat <&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +EOF + fi + ;; + + amigaos*) + archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_minus_L_GCJ=yes + + # Samuel A. Falvo II reports + # that the semantics of dynamic libraries on AmigaOS, at least up + # to version 4, is to share data among multiple programs linked + # with the same dynamic library. Since this doesn't match the + # behavior of shared libraries on other platforms, we can't use + # them. + ld_shlibs_GCJ=no + ;; + + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag_GCJ=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds_GCJ='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs_GCJ=no + fi + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, GCJ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec_GCJ='-L$libdir' + allow_undefined_flag_GCJ=unsupported + always_export_symbols_GCJ=no + enable_shared_with_static_runtimes_GCJ=yes + export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds_GCJ='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + else + ld_shlibs=no + fi + ;; + + netbsd* | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds_GCJ='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris* | sysv5*) + if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then + ld_shlibs_GCJ=no + cat <&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +EOF + elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs_GCJ=no + fi + ;; + + sunos4*) + archive_cmds_GCJ='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct_GCJ=yes + hardcode_shlibpath_var_GCJ=no + ;; + + linux*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_cmds_GCJ="$tmp_archive_cmds" + supports_anon_versioning=no + case `$LD -v 2>/dev/null` in + *\ 01.* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + if test $supports_anon_versioning = yes; then + archive_expsym_cmds_GCJ='$echo "{ global:" > $output_objdir/$libname.ver~ +cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ +$echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + else + archive_expsym_cmds_GCJ="$tmp_archive_cmds" + fi + link_all_deplibs_GCJ=no + else + ld_shlibs_GCJ=no + fi + ;; + + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs_GCJ=no + fi + ;; + esac + + if test "$ld_shlibs_GCJ" = yes; then + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec_GCJ='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec_GCJ='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec_GCJ="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec_GCJ= + fi + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag_GCJ=unsupported + always_export_symbols_GCJ=yes + archive_expsym_cmds_GCJ='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L_GCJ=yes + if test "$GCC" = yes && test -z "$link_static_flag"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct_GCJ=unsupported + fi + ;; + + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | grep 'GNU' > /dev/null; then + export_symbols_cmds_GCJ='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds_GCJ='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix5*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds_GCJ='' + hardcode_direct_GCJ=yes + hardcode_libdir_separator_GCJ=':' + link_all_deplibs_GCJ=yes + + if test "$GCC" = yes; then + case $host_os in aix4.012|aix4.012.*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + hardcode_direct_GCJ=yes + else + # We have old collect2 + hardcode_direct_GCJ=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L_GCJ=yes + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_libdir_separator_GCJ= + fi + esac + shared_flag='-shared' + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols_GCJ=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag_GCJ='-berok' + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds_GCJ="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec_GCJ='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag_GCJ="-z nodefs" + archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag_GCJ=' ${wl}-bernotok' + allow_undefined_flag_GCJ=' ${wl}-berok' + # -bexpall does not export symbols beginning with underscore (_) + always_export_symbols_GCJ=yes + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec_GCJ=' ' + archive_cmds_need_lc_GCJ=yes + # This is similar to how AIX traditionally builds it's shared libraries. + archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_minus_L_GCJ=yes + # see comment about different semantics on the GNU ld section + ld_shlibs_GCJ=no + ;; + + bsdi4*) + export_dynamic_flag_spec_GCJ=-rdynamic + ;; + + cygwin* | mingw* | pw32*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec_GCJ=' ' + allow_undefined_flag_GCJ=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds_GCJ='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_From_new_cmds_GCJ='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds_GCJ='lib /OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path='`cygpath -w "$srcfile"`' + enable_shared_with_static_runtimes_GCJ=yes + ;; + + darwin* | rhapsody*) + if test "$GXX" = yes ; then + archive_cmds_need_lc_GCJ=no + case "$host_os" in + rhapsody* | darwin1.[012]) + allow_undefined_flag_GCJ='-undefined suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + allow_undefined_flag_GCJ='-flat_namespace -undefined suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[012]) + allow_undefined_flag_GCJ='-flat_namespace -undefined suppress' + ;; + 10.*) + allow_undefined_flag_GCJ='-undefined dynamic_lookup' + ;; + esac + fi + ;; + esac + lt_int_apple_cc_single_mod=no + output_verbose_link_cmd='echo' + if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then + lt_int_apple_cc_single_mod=yes + fi + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + archive_cmds_GCJ='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + else + archive_cmds_GCJ='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + fi + module_cmds_GCJ='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + hardcode_direct_GCJ=no + hardcode_automatic_GCJ=yes + hardcode_shlibpath_var_GCJ=unsupported + whole_archive_flag_spec_GCJ='-all_load $convenience' + link_all_deplibs_GCJ=yes + else + ld_shlibs_GCJ=no + fi + ;; + + dgux*) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_shlibpath_var_GCJ=no + ;; + + freebsd1*) + ld_shlibs_GCJ=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec_GCJ='-R$libdir' + hardcode_direct_GCJ=yes + hardcode_shlibpath_var_GCJ=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_GCJ=yes + hardcode_minus_L_GCJ=yes + hardcode_shlibpath_var_GCJ=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | kfreebsd*-gnu) + archive_cmds_GCJ='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec_GCJ='-R$libdir' + hardcode_direct_GCJ=yes + hardcode_shlibpath_var_GCJ=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds_GCJ='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds_GCJ='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_GCJ=: + hardcode_direct_GCJ=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_GCJ=yes + export_dynamic_flag_spec_GCJ='${wl}-E' + ;; + + hpux10* | hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case "$host_cpu" in + hppa*64*|ia64*) + archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case "$host_cpu" in + hppa*64*|ia64*) + archive_cmds_GCJ='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' + ;; + *) + archive_cmds_GCJ='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + case "$host_cpu" in + hppa*64*) + hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' + hardcode_libdir_flag_spec_ld_GCJ='+b $libdir' + hardcode_libdir_separator_GCJ=: + hardcode_direct_GCJ=no + hardcode_shlibpath_var_GCJ=no + ;; + ia64*) + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_direct_GCJ=no + hardcode_shlibpath_var_GCJ=no + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_GCJ=yes + ;; + *) + hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_GCJ=: + hardcode_direct_GCJ=yes + export_dynamic_flag_spec_GCJ='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_GCJ=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + archive_cmds_GCJ='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_ld_GCJ='-rpath $libdir' + fi + hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_GCJ=: + link_all_deplibs_GCJ=yes + ;; + + netbsd* | knetbsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds_GCJ='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec_GCJ='-R$libdir' + hardcode_direct_GCJ=yes + hardcode_shlibpath_var_GCJ=no + ;; + + newsos6) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_GCJ=yes + hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_GCJ=: + hardcode_shlibpath_var_GCJ=no + ;; + + openbsd*) + hardcode_direct_GCJ=yes + hardcode_shlibpath_var_GCJ=no + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' + export_dynamic_flag_spec_GCJ='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_GCJ='-R$libdir' + ;; + *) + archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' + ;; + esac + fi + ;; + + os2*) + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_minus_L_GCJ=yes + allow_undefined_flag_GCJ=unsupported + archive_cmds_GCJ='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_From_new_cmds_GCJ='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag_GCJ=' -expect_unresolved \*' + archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + fi + hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_GCJ=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag_GCJ=' -expect_unresolved \*' + archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds_GCJ='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ + $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec_GCJ='-rpath $libdir' + fi + hardcode_libdir_separator_GCJ=: + ;; + + sco3.2v5*) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_GCJ=no + export_dynamic_flag_spec_GCJ='${wl}-Bexport' + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ;; + + solaris*) + no_undefined_flag_GCJ=' -z text' + if test "$GCC" = yes; then + archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' + else + archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' + fi + hardcode_libdir_flag_spec_GCJ='-R$libdir' + hardcode_shlibpath_var_GCJ=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) # Supported since Solaris 2.6 (maybe 2.5.1?) + whole_archive_flag_spec_GCJ='-z allextract$convenience -z defaultextract' ;; + esac + link_all_deplibs_GCJ=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds_GCJ='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_GCJ='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_direct_GCJ=yes + hardcode_minus_L_GCJ=yes + hardcode_shlibpath_var_GCJ=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_GCJ=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds_GCJ='$CC -r -o $output$reload_objs' + hardcode_direct_GCJ=no + ;; + motorola) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_GCJ=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var_GCJ=no + ;; + + sysv4.3*) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_GCJ=no + export_dynamic_flag_spec_GCJ='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_GCJ=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs_GCJ=yes + fi + ;; + + sysv4.2uw2*) + archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_GCJ=yes + hardcode_minus_L_GCJ=no + hardcode_shlibpath_var_GCJ=no + hardcode_runpath_var=yes + runpath_var=LD_RUN_PATH + ;; + + sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) + no_undefined_flag_GCJ='${wl}-z ${wl}text' + if test "$GCC" = yes; then + archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_GCJ='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var_GCJ=no + ;; + + sysv5*) + no_undefined_flag_GCJ=' -z text' + # $CC -shared without GNU ld will not create a library from C++ + # object files and a static libstdc++, better avoid it by now + archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' + hardcode_libdir_flag_spec_GCJ= + hardcode_shlibpath_var_GCJ=no + runpath_var='LD_RUN_PATH' + ;; + + uts4*) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_shlibpath_var_GCJ=no + ;; + + *) + ld_shlibs_GCJ=no + ;; + esac + fi + +echo "$as_me:$LINENO: result: $ld_shlibs_GCJ" >&5 +echo "${ECHO_T}$ld_shlibs_GCJ" >&6 +test "$ld_shlibs_GCJ" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc_GCJ" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc_GCJ=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds_GCJ in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 +echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 + $rm conftest* + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl_GCJ + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag_GCJ + allow_undefined_flag_GCJ= + if { (eval echo "$as_me:$LINENO: \"$archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 + (eval $archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + then + archive_cmds_need_lc_GCJ=no + else + archive_cmds_need_lc_GCJ=yes + fi + allow_undefined_flag_GCJ=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $rm conftest* + echo "$as_me:$LINENO: result: $archive_cmds_need_lc_GCJ" >&5 +echo "${ECHO_T}$archive_cmds_need_lc_GCJ" >&6 + ;; + esac + fi + ;; +esac + +echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 +echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix4* | aix5*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi4*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $rm \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)' + # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. + if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` + else + sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' + fi + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +kfreebsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='GNU ld.so' + ;; + +freebsd*) + objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.01* | freebsdelf3.01*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + *) # from 3.2 on + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case "$host_cpu" in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`$SED -e 's/:,\t/ /g;s/=^=*$//;s/=^= * / /g' /etc/ld.so.conf | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +knetbsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='GNU ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +nto-qnx*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +openbsd*) + version_type=sunos + need_lib_prefix=no + need_version=yes + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +sco3.2v5*) + version_type=osf + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + export_dynamic_flag_spec='${wl}-Blargedynsym' + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +echo "$as_me:$LINENO: result: $dynamic_linker" >&5 +echo "${ECHO_T}$dynamic_linker" >&6 +test "$dynamic_linker" = no && can_build_shared=no + +echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 +echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 +hardcode_action_GCJ= +if test -n "$hardcode_libdir_flag_spec_GCJ" || \ + test -n "$runpath_var GCJ" || \ + test "X$hardcode_automatic_GCJ"="Xyes" ; then + + # We can hardcode non-existant directories. + if test "$hardcode_direct_GCJ" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, GCJ)" != no && + test "$hardcode_minus_L_GCJ" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action_GCJ=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_GCJ=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_GCJ=unsupported +fi +echo "$as_me:$LINENO: result: $hardcode_action_GCJ" >&5 +echo "${ECHO_T}$hardcode_action_GCJ" >&6 + +if test "$hardcode_action_GCJ" = relink; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + +striplib= +old_striplib= +echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 +echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 +if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + ;; + *) + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 + ;; + esac +fi + +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main () +{ +dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dl_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dl_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 +if test $ac_cv_lib_dl_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + *) + echo "$as_me:$LINENO: checking for shl_load" >&5 +echo $ECHO_N "checking for shl_load... $ECHO_C" >&6 +if test "${ac_cv_func_shl_load+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define shl_load to an innocuous variant, in case declares shl_load. + For example, HP-UX 11i declares gettimeofday. */ +#define shl_load innocuous_shl_load + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char shl_load (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef shl_load + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char shl_load (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_shl_load) || defined (__stub___shl_load) +choke me +#else +char (*f) () = shl_load; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != shl_load; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_shl_load=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_shl_load=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 +echo "${ECHO_T}$ac_cv_func_shl_load" >&6 +if test $ac_cv_func_shl_load = yes; then + lt_cv_dlopen="shl_load" +else + echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 +echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6 +if test "${ac_cv_lib_dld_shl_load+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char shl_load (); +int +main () +{ +shl_load (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dld_shl_load=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dld_shl_load=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 +echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6 +if test $ac_cv_lib_dld_shl_load = yes; then + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" +else + echo "$as_me:$LINENO: checking for dlopen" >&5 +echo $ECHO_N "checking for dlopen... $ECHO_C" >&6 +if test "${ac_cv_func_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define dlopen to an innocuous variant, in case declares dlopen. + For example, HP-UX 11i declares gettimeofday. */ +#define dlopen innocuous_dlopen + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char dlopen (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef dlopen + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_dlopen) || defined (__stub___dlopen) +choke me +#else +char (*f) () = dlopen; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != dlopen; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 +echo "${ECHO_T}$ac_cv_func_dlopen" >&6 +if test $ac_cv_func_dlopen = yes; then + lt_cv_dlopen="dlopen" +else + echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main () +{ +dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dl_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dl_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 +if test $ac_cv_lib_dl_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 +echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6 +if test "${ac_cv_lib_svld_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main () +{ +dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_svld_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_svld_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6 +if test $ac_cv_lib_svld_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 +echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6 +if test "${ac_cv_lib_dld_dld_link+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dld_link (); +int +main () +{ +dld_link (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dld_dld_link=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dld_dld_link=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 +echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6 +if test $ac_cv_lib_dld_dld_link = yes; then + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 +echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6 +if test "${lt_cv_dlopen_self+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext < +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +#ifdef __cplusplus +extern "C" void exit (int); +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + + exit (status); +} +EOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_unknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 +echo "${ECHO_T}$lt_cv_dlopen_self" >&6 + + if test "x$lt_cv_dlopen_self" = xyes; then + LDFLAGS="$LDFLAGS $link_static_flag" + echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 +echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6 +if test "${lt_cv_dlopen_self_static+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext < +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +#ifdef __cplusplus +extern "C" void exit (int); +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + + exit (status); +} +EOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 +echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6 + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + +# The else clause should only fire when bootstrapping the +# libtool distribution, otherwise you forgot to ship ltmain.sh +# with your package, and you will get complaints that there are +# no rules to generate ltmain.sh. +if test -f "$ltmain"; then + # See if we are running on zsh, and set the options which allow our commands through + # without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + # Now quote all the things that may contain metacharacters while being + # careful not to overquote the AC_SUBSTed values. We take copies of the + # variables and quote the copies for generation of the libtool script. + for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \ + SED SHELL STRIP \ + libname_spec library_names_spec soname_spec extract_expsyms_cmds \ + old_striplib striplib file_magic_cmd finish_cmds finish_eval \ + deplibs_check_method reload_flag reload_cmds need_locks \ + lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ + lt_cv_sys_global_symbol_to_c_name_address \ + sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ + old_postinstall_cmds old_postuninstall_cmds \ + compiler_GCJ \ + CC_GCJ \ + LD_GCJ \ + lt_prog_compiler_wl_GCJ \ + lt_prog_compiler_pic_GCJ \ + lt_prog_compiler_static_GCJ \ + lt_prog_compiler_no_builtin_flag_GCJ \ + export_dynamic_flag_spec_GCJ \ + thread_safe_flag_spec_GCJ \ + whole_archive_flag_spec_GCJ \ + enable_shared_with_static_runtimes_GCJ \ + old_archive_cmds_GCJ \ + old_archive_from_new_cmds_GCJ \ + predep_objects_GCJ \ + postdep_objects_GCJ \ + predeps_GCJ \ + postdeps_GCJ \ + compiler_lib_search_path_GCJ \ + archive_cmds_GCJ \ + archive_expsym_cmds_GCJ \ + postinstall_cmds_GCJ \ + postuninstall_cmds_GCJ \ + old_archive_from_expsyms_cmds_GCJ \ + allow_undefined_flag_GCJ \ + no_undefined_flag_GCJ \ + export_symbols_cmds_GCJ \ + hardcode_libdir_flag_spec_GCJ \ + hardcode_libdir_flag_spec_ld_GCJ \ + hardcode_libdir_separator_GCJ \ + hardcode_automatic_GCJ \ + module_cmds_GCJ \ + module_expsym_cmds_GCJ \ + lt_cv_prog_compiler_c_o_GCJ \ + exclude_expsyms_GCJ \ + include_expsyms_GCJ; do + + case $var in + old_archive_cmds_GCJ | \ + old_archive_from_new_cmds_GCJ | \ + archive_cmds_GCJ | \ + archive_expsym_cmds_GCJ | \ + module_cmds_GCJ | \ + module_expsym_cmds_GCJ | \ + old_archive_from_expsyms_cmds_GCJ | \ + export_symbols_cmds_GCJ | \ + extract_expsyms_cmds | reload_cmds | finish_cmds | \ + postinstall_cmds | postuninstall_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | \ + sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) + # Double-quote double-evaled strings. + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" + ;; + esac + done + + case $lt_echo in + *'\$0 --fallback-echo"') + lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` + ;; + esac + +cfgfile="$ofile" + + cat <<__EOF__ >> "$cfgfile" +# ### BEGIN LIBTOOL TAG CONFIG: $tagname + +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_GCJ + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_GCJ + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A C compiler. +LTCC=$lt_LTCC + +# A language-specific compiler. +CC=$lt_compiler_GCJ + +# Is the compiler the GNU C compiler? +with_gcc=$GCC_GCJ + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_LD_GCJ + +# Whether we need hard or soft links. +LN_S=$lt_LN_S + +# A BSD-compatible nm program. +NM=$lt_NM + +# A symbol stripping program +STRIP=$lt_STRIP + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=$MAGIC_CMD + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_GCJ + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Shared library suffix (normally ".so"). +shrext_cmds='$shrext_cmds' + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_GCJ +pic_mode=$pic_mode + +# What is the maximum length of a command? +max_cmd_len=$lt_cv_sys_max_cmd_len + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_GCJ + +# Must we lock files when doing compilation ? +need_locks=$lt_need_locks + +# Do we need the lib prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_GCJ + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_GCJ + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_GCJ + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_GCJ + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_thread_safe_flag_spec_GCJ + +# Library versioning type. +version_type=$version_type + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Commands used to build and install an old-style archive. +RANLIB=$lt_RANLIB +old_archive_cmds=$lt_old_archive_cmds_GCJ +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_GCJ + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_GCJ + +# Commands used to build and install a shared archive. +archive_cmds=$lt_archive_cmds_GCJ +archive_expsym_cmds=$lt_archive_expsym_cmds_GCJ +postinstall_cmds=$lt_postinstall_cmds +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to build a loadable module (assumed same as above if empty) +module_cmds=$lt_module_cmds_GCJ +module_expsym_cmds=$lt_module_expsym_cmds_GCJ + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# Dependencies to place before the objects being linked to create a +# shared library. +predep_objects=$lt_predep_objects_GCJ + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_postdep_objects_GCJ + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_predeps_GCJ + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps=$lt_postdeps_GCJ + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_GCJ + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == file_magic. +file_magic_cmd=$lt_file_magic_cmd + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_GCJ + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_GCJ + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$lt_finish_eval + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_GCJ + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_GCJ + +# If ld is used when linking, flag to hardcode \$libdir into +# a binary during linking. This must work even if \$libdir does +# not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_GCJ + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_GCJ + +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct_GCJ + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L_GCJ + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_GCJ + +# Set to yes if building a shared library automatically hardcodes DIR into the library +# and all subsequent libraries and executables linked against it. +hardcode_automatic=$hardcode_automatic_GCJ + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="$variables_saved_for_relink" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_GCJ + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$fix_srcfile_path_GCJ" + +# Set to yes if exported symbols are required. +always_export_symbols=$always_export_symbols_GCJ + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_GCJ + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_GCJ + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_GCJ + +# ### END LIBTOOL TAG CONFIG: $tagname + +__EOF__ + + +else + # If there is no Makefile yet, we rely on a make rule to execute + # `config.status --recheck' to rerun these tests and create the + # libtool script then. + ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` + if test -f "$ltmain_in"; then + test -f Makefile && make "$ltmain" + fi +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + else + tagname="" + fi + ;; + + RC) + + + +# Source file extension for RC test sources. +ac_ext=rc + +# Object file extension for compiled RC test sources. +objext=o +objext_RC=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n' + +# Code to be used in simple link tests +lt_simple_link_test_code="$lt_simple_compile_test_code" + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +CC=${RC-"windres"} +compiler=$CC +compiler_RC=$CC +lt_cv_prog_compiler_c_o_RC=yes + +# The else clause should only fire when bootstrapping the +# libtool distribution, otherwise you forgot to ship ltmain.sh +# with your package, and you will get complaints that there are +# no rules to generate ltmain.sh. +if test -f "$ltmain"; then + # See if we are running on zsh, and set the options which allow our commands through + # without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + # Now quote all the things that may contain metacharacters while being + # careful not to overquote the AC_SUBSTed values. We take copies of the + # variables and quote the copies for generation of the libtool script. + for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \ + SED SHELL STRIP \ + libname_spec library_names_spec soname_spec extract_expsyms_cmds \ + old_striplib striplib file_magic_cmd finish_cmds finish_eval \ + deplibs_check_method reload_flag reload_cmds need_locks \ + lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ + lt_cv_sys_global_symbol_to_c_name_address \ + sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ + old_postinstall_cmds old_postuninstall_cmds \ + compiler_RC \ + CC_RC \ + LD_RC \ + lt_prog_compiler_wl_RC \ + lt_prog_compiler_pic_RC \ + lt_prog_compiler_static_RC \ + lt_prog_compiler_no_builtin_flag_RC \ + export_dynamic_flag_spec_RC \ + thread_safe_flag_spec_RC \ + whole_archive_flag_spec_RC \ + enable_shared_with_static_runtimes_RC \ + old_archive_cmds_RC \ + old_archive_from_new_cmds_RC \ + predep_objects_RC \ + postdep_objects_RC \ + predeps_RC \ + postdeps_RC \ + compiler_lib_search_path_RC \ + archive_cmds_RC \ + archive_expsym_cmds_RC \ + postinstall_cmds_RC \ + postuninstall_cmds_RC \ + old_archive_from_expsyms_cmds_RC \ + allow_undefined_flag_RC \ + no_undefined_flag_RC \ + export_symbols_cmds_RC \ + hardcode_libdir_flag_spec_RC \ + hardcode_libdir_flag_spec_ld_RC \ + hardcode_libdir_separator_RC \ + hardcode_automatic_RC \ + module_cmds_RC \ + module_expsym_cmds_RC \ + lt_cv_prog_compiler_c_o_RC \ + exclude_expsyms_RC \ + include_expsyms_RC; do + + case $var in + old_archive_cmds_RC | \ + old_archive_from_new_cmds_RC | \ + archive_cmds_RC | \ + archive_expsym_cmds_RC | \ + module_cmds_RC | \ + module_expsym_cmds_RC | \ + old_archive_from_expsyms_cmds_RC | \ + export_symbols_cmds_RC | \ + extract_expsyms_cmds | reload_cmds | finish_cmds | \ + postinstall_cmds | postuninstall_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | \ + sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) + # Double-quote double-evaled strings. + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" + ;; + esac + done + + case $lt_echo in + *'\$0 --fallback-echo"') + lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` + ;; + esac + +cfgfile="$ofile" + + cat <<__EOF__ >> "$cfgfile" +# ### BEGIN LIBTOOL TAG CONFIG: $tagname + +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_RC + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_RC + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A C compiler. +LTCC=$lt_LTCC + +# A language-specific compiler. +CC=$lt_compiler_RC + +# Is the compiler the GNU C compiler? +with_gcc=$GCC_RC + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_LD_RC + +# Whether we need hard or soft links. +LN_S=$lt_LN_S + +# A BSD-compatible nm program. +NM=$lt_NM + +# A symbol stripping program +STRIP=$lt_STRIP + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=$MAGIC_CMD + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_RC + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Shared library suffix (normally ".so"). +shrext_cmds='$shrext_cmds' + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_RC +pic_mode=$pic_mode + +# What is the maximum length of a command? +max_cmd_len=$lt_cv_sys_max_cmd_len + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_RC + +# Must we lock files when doing compilation ? +need_locks=$lt_need_locks + +# Do we need the lib prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_RC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_RC + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_RC + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_RC + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_thread_safe_flag_spec_RC + +# Library versioning type. +version_type=$version_type + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Commands used to build and install an old-style archive. +RANLIB=$lt_RANLIB +old_archive_cmds=$lt_old_archive_cmds_RC +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_RC + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_RC + +# Commands used to build and install a shared archive. +archive_cmds=$lt_archive_cmds_RC +archive_expsym_cmds=$lt_archive_expsym_cmds_RC +postinstall_cmds=$lt_postinstall_cmds +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to build a loadable module (assumed same as above if empty) +module_cmds=$lt_module_cmds_RC +module_expsym_cmds=$lt_module_expsym_cmds_RC + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# Dependencies to place before the objects being linked to create a +# shared library. +predep_objects=$lt_predep_objects_RC + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_postdep_objects_RC + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_predeps_RC + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps=$lt_postdeps_RC + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_RC + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == file_magic. +file_magic_cmd=$lt_file_magic_cmd + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_RC + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_RC + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$lt_finish_eval + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_RC + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_RC + +# If ld is used when linking, flag to hardcode \$libdir into +# a binary during linking. This must work even if \$libdir does +# not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_RC + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_RC + +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct_RC + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L_RC + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_RC + +# Set to yes if building a shared library automatically hardcodes DIR into the library +# and all subsequent libraries and executables linked against it. +hardcode_automatic=$hardcode_automatic_RC + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="$variables_saved_for_relink" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_RC + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$fix_srcfile_path_RC" + +# Set to yes if exported symbols are required. +always_export_symbols=$always_export_symbols_RC + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_RC + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_RC + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_RC + +# ### END LIBTOOL TAG CONFIG: $tagname + +__EOF__ + + +else + # If there is no Makefile yet, we rely on a make rule to execute + # `config.status --recheck' to rerun these tests and create the + # libtool script then. + ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` + if test -f "$ltmain_in"; then + test -f Makefile && make "$ltmain" + fi +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + ;; + + *) + { { echo "$as_me:$LINENO: error: Unsupported tag name: $tagname" >&5 +echo "$as_me: error: Unsupported tag name: $tagname" >&2;} + { (exit 1); exit 1; }; } + ;; + esac + + # Append the new tag name to the list of available tags. + if test -n "$tagname" ; then + available_tags="$available_tags $tagname" + fi + fi + done + IFS="$lt_save_ifs" + + # Now substitute the updated list of available tags. + if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then + mv "${ofile}T" "$ofile" + chmod +x "$ofile" + else + rm -f "${ofile}T" + { { echo "$as_me:$LINENO: error: unable to update list of available tagged configurations." >&5 +echo "$as_me: error: unable to update list of available tagged configurations." >&2;} + { (exit 1); exit 1; }; } + fi +fi + + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + +# Prevent multiple expansion + + + + + + + + + + + + + + + + + + + + + + + echo "$as_me:$LINENO: checking for strerror in -lcposix" >&5 +echo $ECHO_N "checking for strerror in -lcposix... $ECHO_C" >&6 +if test "${ac_cv_lib_cposix_strerror+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lcposix $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char strerror (); +int +main () +{ +strerror (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_cposix_strerror=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_cposix_strerror=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_cposix_strerror" >&5 +echo "${ECHO_T}$ac_cv_lib_cposix_strerror" >&6 +if test $ac_cv_lib_cposix_strerror = yes; then + LIBS="$LIBS -lcposix" +fi + + + +echo "$as_me:$LINENO: checking whether build environment is sane" >&5 +echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6 +# Just in case +sleep 1 +echo timestamp > conftest.file +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftest.file` + fi + rm -f conftest.file + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" >&5 +echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" >&2;} + { (exit 1); exit 1; }; } + fi + + test "$2" = conftest.file + ) +then + # Ok. + : +else + { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! +Check your system clock" >&5 +echo "$as_me: error: newly created file is older than distributed files! +Check your system clock" >&2;} + { (exit 1); exit 1; }; } +fi +echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + + + +echo "$as_me:$LINENO: checking for ${CC-cc} option to accept ANSI C" >&5 +echo $ECHO_N "checking for ${CC-cc} option to accept ANSI C... $ECHO_C" >&6 +if test "${am_cv_prog_cc_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + am_cv_prog_cc_stdc=no +ac_save_CC="$CC" +# Don't try gcc -ansi; that turns off useful extensions and +# breaks some systems' header files. +# AIX -qlanglvl=ansi +# Ultrix and OSF/1 -std1 +# HP-UX 10.20 and later -Ae +# HP-UX older versions -Aa -D_HPUX_SOURCE +# SVR4 -Xc -D__EXTENSIONS__ +for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; + +int +main () +{ + +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + am_cv_prog_cc_stdc="$ac_arg"; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +done +CC="$ac_save_CC" + +fi + +if test -z "$am_cv_prog_cc_stdc"; then + echo "$as_me:$LINENO: result: none needed" >&5 +echo "${ECHO_T}none needed" >&6 +else + echo "$as_me:$LINENO: result: $am_cv_prog_cc_stdc" >&5 +echo "${ECHO_T}$am_cv_prog_cc_stdc" >&6 +fi +case "x$am_cv_prog_cc_stdc" in + x|xno) ;; + *) CC="$CC $am_cv_prog_cc_stdc" ;; +esac + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 +echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 +if test -z "$INSTALL"; then +if test "${ac_cv_path_install+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in + ./ | .// | /cC/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + done + done + ;; +esac +done + + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. We don't cache a + # path for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the path is relative. + INSTALL=$ac_install_sh + fi +fi +echo "$as_me:$LINENO: result: $INSTALL" >&5 +echo "${ECHO_T}$INSTALL" >&6 + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 +set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` +if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.make <<\_ACEOF +all: + @echo 'ac_maketemp="$(MAKE)"' +_ACEOF +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` +if test -n "$ac_maketemp"; then + eval ac_cv_prog_make_${ac_make}_set=yes +else + eval ac_cv_prog_make_${ac_make}_set=no +fi +rm -f conftest.make +fi +if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + SET_MAKE= +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 + SET_MAKE="MAKE=${MAKE-make}" +fi + +echo "$as_me:$LINENO: checking for ANSI C header files" >&5 +echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 +if test "${ac_cv_header_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_header_stdc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_header_stdc=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then + : +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + exit(2); + exit (0); +} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_header_stdc=no +fi +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +fi +fi +echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 +echo "${ECHO_T}$ac_cv_header_stdc" >&6 +if test $ac_cv_header_stdc = yes; then + +cat >>confdefs.h <<\_ACEOF +#define STDC_HEADERS 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 +echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6 +if test "${ac_cv_c_const+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +/* FIXME: Include the comments suggested by Paul. */ +#ifndef __cplusplus + /* Ultrix mips cc rejects this. */ + typedef int charset[2]; + const charset x; + /* SunOS 4.1.1 cc rejects this. */ + char const *const *ccp; + char **p; + /* NEC SVR4.0.2 mips cc rejects this. */ + struct point {int x, y;}; + static struct point const zero = {0,0}; + /* AIX XL C 1.02.0.0 rejects this. + It does not let you subtract one const X* pointer from another in + an arm of an if-expression whose if-part is not a constant + expression */ + const char *g = "string"; + ccp = &g + (g ? g-g : 0); + /* HPUX 7.0 cc rejects these. */ + ++ccp; + p = (char**) ccp; + ccp = (char const *const *) p; + { /* SCO 3.2v4 cc rejects this. */ + char *t; + char const *s = 0 ? (char *) 0 : (char const *) 0; + + *t++ = 0; + } + { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ + int x[] = {25, 17}; + const int *foo = &x[0]; + ++foo; + } + { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ + typedef const int *iptr; + iptr p = 0; + ++p; + } + { /* AIX XL C 1.02.0.0 rejects this saying + "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ + struct s { int j; const int *ap[3]; }; + struct s *b; b->j = 5; + } + { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ + const int foo = 10; + } +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_c_const=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_c_const=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 +echo "${ECHO_T}$ac_cv_c_const" >&6 +if test $ac_cv_c_const = no; then + +cat >>confdefs.h <<\_ACEOF +#define const +_ACEOF + +fi + + + +for ac_header in unistd.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------------ ## +## Report this to the AC_PACKAGE_NAME lists. ## +## ------------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + +echo "$as_me:$LINENO: checking for target architecture" >&5 +echo $ECHO_N "checking for target architecture... $ECHO_C" >&6 +case x"$target" in + xNONE | x) + target_or_host="$host" ;; + *) + target_or_host="$target" ;; +esac +echo "$as_me:$LINENO: result: $target_or_host" >&5 +echo "${ECHO_T}$target_or_host" >&6 + + +echo "$as_me:$LINENO: checking for native Win32" >&5 +echo $ECHO_N "checking for native Win32... $ECHO_C" >&6 +case "$target_or_host" in + *-*-mingw*) + os_win32=yes + ;; + *) + os_win32=no + ;; +esac +echo "$as_me:$LINENO: result: $os_win32" >&5 +echo "${ECHO_T}$os_win32" >&6 + + +if test "$os_win32" = "yes"; then + OS_WIN32_TRUE= + OS_WIN32_FALSE='#' +else + OS_WIN32_TRUE='#' + OS_WIN32_FALSE= +fi + + + +if test x"$os_win32" = xyes; then +WIN32_LIBS=-lwsock32 +fi + + + +# Ensure MSVC-compatible struct packing convention is used when +# compiling for Win32 with gcc. +# What flag to depends on gcc version: gcc3 uses "-mms-bitfields", while +# gcc2 uses "-fnative-struct". +if test x"$os_win32" = xyes; then + if test x"$GCC" = xyes; then + msnative_struct='' + echo "$as_me:$LINENO: checking how to get MSVC-compatible struct packing" >&5 +echo $ECHO_N "checking how to get MSVC-compatible struct packing... $ECHO_C" >&6 + if test -z "$ac_cv_prog_CC"; then + our_gcc="$CC" + else + our_gcc="$ac_cv_prog_CC" + fi + case `$our_gcc --version | sed -e 's,\..*,.,' -e q` in + 2.) + if $our_gcc -v --help 2>/dev/null | grep fnative-struct >/dev/null; then + msnative_struct='-fnative-struct' + fi + ;; + *) + if $our_gcc -v --help 2>/dev/null | grep ms-bitfields >/dev/null; then + msnative_struct='-mms-bitfields' + fi + ;; + esac + if test x"$msnative_struct" = x ; then + echo "$as_me:$LINENO: result: no way" >&5 +echo "${ECHO_T}no way" >&6 + { echo "$as_me:$LINENO: WARNING: build will be incompatible with GTK+ DLLs" >&5 +echo "$as_me: WARNING: build will be incompatible with GTK+ DLLs" >&2;} + else + WIN32_CFLAGS=$msnative_struct + echo "$as_me:$LINENO: result: $WIN32_CFLAGS" >&5 +echo "${ECHO_T}$WIN32_CFLAGS" >&6 + fi + fi +fi + + + + +if test "x$GCC" = xyes; then + CFLAGS="$CFLAGS -Wall $WIN32_CFLAGS" +fi + + + + +DATADIR=$datadir/blib-$BLIB_API_VERSION +INCLUDEDIR=$includedir/blib-$BLIB_API_VERSION +THEMEPATH=$datadir/blib-$BLIB_API_VERSION/themes +MODULEPATH=$libdir/blib-$BLIB_API_VERSION/modules + + + + + + +# Check whether --enable-glibtest or --disable-glibtest was given. +if test "${enable_glibtest+set}" = set; then + enableval="$enable_glibtest" + +else + enable_glibtest=yes +fi; + + pkg_config_args=glib-2.0 + for module in . gobject gmodule + do + case "$module" in + gmodule) + pkg_config_args="$pkg_config_args gmodule-2.0" + ;; + gobject) + pkg_config_args="$pkg_config_args gobject-2.0" + ;; + gthread) + pkg_config_args="$pkg_config_args gthread-2.0" + ;; + esac + done + + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_PKG_CONFIG+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no" + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG + +if test -n "$PKG_CONFIG"; then + echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5 +echo "${ECHO_T}$PKG_CONFIG" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + + no_glib="" + + if test x$PKG_CONFIG != xno ; then + if $PKG_CONFIG --atleast-pkgconfig-version 0.7 ; then + : + else + echo *** pkg-config too old; version 0.7 or better required. + no_glib=yes + PKG_CONFIG=no + fi + else + no_glib=yes + fi + + min_glib_version=2.0.1 + echo "$as_me:$LINENO: checking for GLIB - version >= $min_glib_version" >&5 +echo $ECHO_N "checking for GLIB - version >= $min_glib_version... $ECHO_C" >&6 + + if test x$PKG_CONFIG != xno ; then + ## don't try to run the test against uninstalled libtool libs + if $PKG_CONFIG --uninstalled $pkg_config_args; then + echo "Will use uninstalled version of GLib found in PKG_CONFIG_PATH" + enable_glibtest=no + fi + + if $PKG_CONFIG --atleast-version $min_glib_version $pkg_config_args; then + : + else + no_glib=yes + fi + fi + + if test x"$no_glib" = x ; then + GLIB_GENMARSHAL=`$PKG_CONFIG --variable=glib_genmarshal glib-2.0` + GOBJECT_QUERY=`$PKG_CONFIG --variable=gobject_query glib-2.0` + GLIB_MKENUMS=`$PKG_CONFIG --variable=glib_mkenums glib-2.0` + + GLIB_CFLAGS=`$PKG_CONFIG --cflags $pkg_config_args` + GLIB_LIBS=`$PKG_CONFIG --libs $pkg_config_args` + glib_config_major_version=`$PKG_CONFIG --modversion glib-2.0 | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` + glib_config_minor_version=`$PKG_CONFIG --modversion glib-2.0 | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` + glib_config_micro_version=`$PKG_CONFIG --modversion glib-2.0 | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` + if test "x$enable_glibtest" = "xyes" ; then + ac_save_CFLAGS="$CFLAGS" + ac_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $GLIB_CFLAGS" + LIBS="$GLIB_LIBS $LIBS" + rm -f conf.glibtest + if test "$cross_compiling" = yes; then + echo $ac_n "cross compiling; assumed OK... $ac_c" +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#include + +int +main () +{ + int major, minor, micro; + char *tmp_version; + + system ("touch conf.glibtest"); + + /* HP/UX 9 (%@#!) writes to sscanf strings */ + tmp_version = g_strdup("$min_glib_version"); + if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { + printf("%s, bad version string\n", "$min_glib_version"); + exit(1); + } + + if ((glib_major_version != $glib_config_major_version) || + (glib_minor_version != $glib_config_minor_version) || + (glib_micro_version != $glib_config_micro_version)) + { + printf("\n*** 'pkg-config --modversion glib-2.0' returned %d.%d.%d, but GLIB (%d.%d.%d)\n", + $glib_config_major_version, $glib_config_minor_version, $glib_config_micro_version, + glib_major_version, glib_minor_version, glib_micro_version); + printf ("*** was found! If pkg-config was correct, then it is best\n"); + printf ("*** to remove the old version of GLib. You may also be able to fix the error\n"); + printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n"); + printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n"); + printf("*** required on your system.\n"); + printf("*** If pkg-config was wrong, set the environment variable PKG_CONFIG_PATH\n"); + printf("*** to point to the correct configuration files\n"); + } + else if ((glib_major_version != GLIB_MAJOR_VERSION) || + (glib_minor_version != GLIB_MINOR_VERSION) || + (glib_micro_version != GLIB_MICRO_VERSION)) + { + printf("*** GLIB header files (version %d.%d.%d) do not match\n", + GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION); + printf("*** library (version %d.%d.%d)\n", + glib_major_version, glib_minor_version, glib_micro_version); + } + else + { + if ((glib_major_version > major) || + ((glib_major_version == major) && (glib_minor_version > minor)) || + ((glib_major_version == major) && (glib_minor_version == minor) && (glib_micro_version >= micro))) + { + return 0; + } + else + { + printf("\n*** An old version of GLIB (%d.%d.%d) was found.\n", + glib_major_version, glib_minor_version, glib_micro_version); + printf("*** You need a version of GLIB newer than %d.%d.%d. The latest version of\n", + major, minor, micro); + printf("*** GLIB is always available from ftp://ftp.gtk.org.\n"); + printf("***\n"); + printf("*** If you have already installed a sufficiently new version, this error\n"); + printf("*** probably means that the wrong copy of the pkg-config shell script is\n"); + printf("*** being found. The easiest way to fix this is to remove the old version\n"); + printf("*** of GLIB, but you can also set the PKG_CONFIG environment to point to the\n"); + printf("*** correct copy of pkg-config. (In this case, you will have to\n"); + printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n"); + printf("*** so that the correct libraries are found at run-time))\n"); + } + } + return 1; +} + +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +no_glib=yes +fi +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + if test "x$no_glib" = x ; then + echo "$as_me:$LINENO: result: yes (version $glib_config_major_version.$glib_config_minor_version.$glib_config_micro_version)" >&5 +echo "${ECHO_T}yes (version $glib_config_major_version.$glib_config_minor_version.$glib_config_micro_version)" >&6 + : + else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 + if test "$PKG_CONFIG" = "no" ; then + echo "*** A new enough version of pkg-config was not found." + echo "*** See http://www.freedesktop.org/software/pkgconfig/" + else + if test -f conf.glibtest ; then + : + else + echo "*** Could not run GLIB test program, checking why..." + ac_save_CFLAGS="$CFLAGS" + ac_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $GLIB_CFLAGS" + LIBS="$LIBS $GLIB_LIBS" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include + +int +main () +{ + return ((glib_major_version) || (glib_minor_version) || (glib_micro_version)); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + echo "*** The test program compiled, but did not run. This usually means" + echo "*** that the run-time linker is not finding GLIB or finding the wrong" + echo "*** version of GLIB. If it is not finding GLIB, you'll need to set your" + echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" + echo "*** to the installed location Also, make sure you have run ldconfig if that" + echo "*** is required on your system" + echo "***" + echo "*** If you have an old version installed, it is best to remove it, although" + echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + echo "*** The test program failed to compile or link. See the file config.log for the" + echo "*** exact error that occured. This usually means GLIB is incorrectly installed." +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + GLIB_CFLAGS="" + GLIB_LIBS="" + GLIB_GENMARSHAL="" + GOBJECT_QUERY="" + GLIB_MKENUMS="" + { { echo "$as_me:$LINENO: error: +*** blib depends on glib-2.0 which doesn't seem to be available." >&5 +echo "$as_me: error: +*** blib depends on glib-2.0 which doesn't seem to be available." >&2;} + { (exit 1); exit 1; }; } + fi + + + + + + rm -f conf.glibtest + + + +# Check whether --enable-directfb or --disable-directfb was given. +if test "${enable_directfb+set}" = set; then + enableval="$enable_directfb" + +else + enable_directfb=yes +fi; + +if test "x$enable_directfb" = "xyes"; then + + succeeded=no + + if test -z "$PKG_CONFIG"; then + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_PKG_CONFIG+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no" + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG + +if test -n "$PKG_CONFIG"; then + echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5 +echo "${ECHO_T}$PKG_CONFIG" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + fi + + if test "$PKG_CONFIG" = "no" ; then + echo "*** The pkg-config script could not be found. Make sure it is" + echo "*** in your path, or set the PKG_CONFIG environment variable" + echo "*** to the full path to pkg-config." + echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config." + else + PKG_CONFIG_MIN_VERSION=0.9.0 + if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then + echo "$as_me:$LINENO: checking for directfb >= 0.9.11" >&5 +echo $ECHO_N "checking for directfb >= 0.9.11... $ECHO_C" >&6 + + if $PKG_CONFIG --exists "directfb >= 0.9.11" ; then + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + succeeded=yes + + echo "$as_me:$LINENO: checking DIRECTFB_CFLAGS" >&5 +echo $ECHO_N "checking DIRECTFB_CFLAGS... $ECHO_C" >&6 + DIRECTFB_CFLAGS=`$PKG_CONFIG --cflags "directfb >= 0.9.11"` + echo "$as_me:$LINENO: result: $DIRECTFB_CFLAGS" >&5 +echo "${ECHO_T}$DIRECTFB_CFLAGS" >&6 + + echo "$as_me:$LINENO: checking DIRECTFB_LIBS" >&5 +echo $ECHO_N "checking DIRECTFB_LIBS... $ECHO_C" >&6 + DIRECTFB_LIBS=`$PKG_CONFIG --libs "directfb >= 0.9.11"` + echo "$as_me:$LINENO: result: $DIRECTFB_LIBS" >&5 +echo "${ECHO_T}$DIRECTFB_LIBS" >&6 + else + DIRECTFB_CFLAGS="" + DIRECTFB_LIBS="" + ## If we have a custom action on failure, don't print errors, but + ## do set a variable so people can do so. + DIRECTFB_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "directfb >= 0.9.11"` + + fi + + + + else + echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer." + echo "*** See http://www.freedesktop.org/software/pkgconfig" + fi + fi + + if test $succeeded = yes; then + have_directfb=yes + else + have_directfb=no + fi + +else + have_directfb=no +fi + +if test $have_directfb = yes; then + DIRECTFB_VIEW_TYPE=b_view_directfb_get_type +fi + + + + + +if test $have_directfb = yes; then + HAVE_DIRECTFB_TRUE= + HAVE_DIRECTFB_FALSE='#' +else + HAVE_DIRECTFB_TRUE='#' + HAVE_DIRECTFB_FALSE= +fi + + + +# Check whether --enable-gdk_pixbuf or --disable-gdk_pixbuf was given. +if test "${enable_gdk_pixbuf+set}" = set; then + enableval="$enable_gdk_pixbuf" + +else + enable_gdk_pixbuf=yes +fi; + +if test "x$enable_gdk_pixbuf" = "xyes"; then + + succeeded=no + + if test -z "$PKG_CONFIG"; then + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_PKG_CONFIG+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no" + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG + +if test -n "$PKG_CONFIG"; then + echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5 +echo "${ECHO_T}$PKG_CONFIG" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + fi + + if test "$PKG_CONFIG" = "no" ; then + echo "*** The pkg-config script could not be found. Make sure it is" + echo "*** in your path, or set the PKG_CONFIG environment variable" + echo "*** to the full path to pkg-config." + echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config." + else + PKG_CONFIG_MIN_VERSION=0.9.0 + if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then + echo "$as_me:$LINENO: checking for gdk-pixbuf-2.0 >= 2.0.0" >&5 +echo $ECHO_N "checking for gdk-pixbuf-2.0 >= 2.0.0... $ECHO_C" >&6 + + if $PKG_CONFIG --exists "gdk-pixbuf-2.0 >= 2.0.0" ; then + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + succeeded=yes + + echo "$as_me:$LINENO: checking GDK_PIXBUF_CFLAGS" >&5 +echo $ECHO_N "checking GDK_PIXBUF_CFLAGS... $ECHO_C" >&6 + GDK_PIXBUF_CFLAGS=`$PKG_CONFIG --cflags "gdk-pixbuf-2.0 >= 2.0.0"` + echo "$as_me:$LINENO: result: $GDK_PIXBUF_CFLAGS" >&5 +echo "${ECHO_T}$GDK_PIXBUF_CFLAGS" >&6 + + echo "$as_me:$LINENO: checking GDK_PIXBUF_LIBS" >&5 +echo $ECHO_N "checking GDK_PIXBUF_LIBS... $ECHO_C" >&6 + GDK_PIXBUF_LIBS=`$PKG_CONFIG --libs "gdk-pixbuf-2.0 >= 2.0.0"` + echo "$as_me:$LINENO: result: $GDK_PIXBUF_LIBS" >&5 +echo "${ECHO_T}$GDK_PIXBUF_LIBS" >&6 + else + GDK_PIXBUF_CFLAGS="" + GDK_PIXBUF_LIBS="" + ## If we have a custom action on failure, don't print errors, but + ## do set a variable so people can do so. + GDK_PIXBUF_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gdk-pixbuf-2.0 >= 2.0.0"` + + fi + + + + else + echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer." + echo "*** See http://www.freedesktop.org/software/pkgconfig" + fi + fi + + if test $succeeded = yes; then + have_pixbuf=yes + else + have_pixbuf=no + fi + +else + have_pixbuf=no +fi + +if test $have_pixbuf = yes; then + PIXBUF_VIEW_TYPE=b_view_pixbuf_get_type +fi + + + + + +if test $have_pixbuf = yes; then + HAVE_PIXBUF_TRUE= + HAVE_PIXBUF_FALSE='#' +else + HAVE_PIXBUF_TRUE='#' + HAVE_PIXBUF_FALSE= +fi + + + +# Check whether --enable-gtk or --disable-gtk was given. +if test "${enable_gtk+set}" = set; then + enableval="$enable_gtk" + +else + enable_gtk=yes +fi; + +if test "x$enable_gtk" = "xyes"; then + + succeeded=no + + if test -z "$PKG_CONFIG"; then + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_PKG_CONFIG+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no" + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG + +if test -n "$PKG_CONFIG"; then + echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5 +echo "${ECHO_T}$PKG_CONFIG" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + fi + + if test "$PKG_CONFIG" = "no" ; then + echo "*** The pkg-config script could not be found. Make sure it is" + echo "*** in your path, or set the PKG_CONFIG environment variable" + echo "*** to the full path to pkg-config." + echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config." + else + PKG_CONFIG_MIN_VERSION=0.9.0 + if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then + echo "$as_me:$LINENO: checking for gtk+-2.0 >= 2.0.3" >&5 +echo $ECHO_N "checking for gtk+-2.0 >= 2.0.3... $ECHO_C" >&6 + + if $PKG_CONFIG --exists "gtk+-2.0 >= 2.0.3" ; then + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + succeeded=yes + + echo "$as_me:$LINENO: checking GTK_CFLAGS" >&5 +echo $ECHO_N "checking GTK_CFLAGS... $ECHO_C" >&6 + GTK_CFLAGS=`$PKG_CONFIG --cflags "gtk+-2.0 >= 2.0.3"` + echo "$as_me:$LINENO: result: $GTK_CFLAGS" >&5 +echo "${ECHO_T}$GTK_CFLAGS" >&6 + + echo "$as_me:$LINENO: checking GTK_LIBS" >&5 +echo $ECHO_N "checking GTK_LIBS... $ECHO_C" >&6 + GTK_LIBS=`$PKG_CONFIG --libs "gtk+-2.0 >= 2.0.3"` + echo "$as_me:$LINENO: result: $GTK_LIBS" >&5 +echo "${ECHO_T}$GTK_LIBS" >&6 + else + GTK_CFLAGS="" + GTK_LIBS="" + ## If we have a custom action on failure, don't print errors, but + ## do set a variable so people can do so. + GTK_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gtk+-2.0 >= 2.0.3"` + + fi + + + + else + echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer." + echo "*** See http://www.freedesktop.org/software/pkgconfig" + fi + fi + + if test $succeeded = yes; then + have_gtk=yes + else + have_gtk=no + fi + +else + have_gtk=no +fi + +if test $have_gtk = yes; then + GTK_VIEW_TYPE=b_view_gtk_get_type +fi + + + + + +if test $have_gtk = yes; then + HAVE_GTK_TRUE= + HAVE_GTK_FALSE='#' +else + HAVE_GTK_TRUE='#' + HAVE_GTK_FALSE= +fi + + + +# Check whether --enable-aa or --disable-aa was given. +if test "${enable_aa+set}" = set; then + enableval="$enable_aa" + +else + enable_aa=yes +fi; + +have_aa=no +if test "x$enable_aa" = "xyes"; then + echo "$as_me:$LINENO: checking for aa_fastrender in -laa" >&5 +echo $ECHO_N "checking for aa_fastrender in -laa... $ECHO_C" >&6 +if test "${ac_cv_lib_aa_aa_fastrender+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-laa $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char aa_fastrender (); +int +main () +{ +aa_fastrender (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_aa_aa_fastrender=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_aa_aa_fastrender=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_aa_aa_fastrender" >&5 +echo "${ECHO_T}$ac_cv_lib_aa_aa_fastrender" >&6 +if test $ac_cv_lib_aa_aa_fastrender = yes; then + if test "${ac_cv_header_aalib_h+set}" = set; then + echo "$as_me:$LINENO: checking for aalib.h" >&5 +echo $ECHO_N "checking for aalib.h... $ECHO_C" >&6 +if test "${ac_cv_header_aalib_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: $ac_cv_header_aalib_h" >&5 +echo "${ECHO_T}$ac_cv_header_aalib_h" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking aalib.h usability" >&5 +echo $ECHO_N "checking aalib.h usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking aalib.h presence" >&5 +echo $ECHO_N "checking aalib.h presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: aalib.h: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: aalib.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: aalib.h: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: aalib.h: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: aalib.h: present but cannot be compiled" >&5 +echo "$as_me: WARNING: aalib.h: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: aalib.h: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: aalib.h: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: aalib.h: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: aalib.h: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: aalib.h: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: aalib.h: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: aalib.h: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: aalib.h: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: aalib.h: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: aalib.h: in the future, the compiler will take precedence" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------------ ## +## Report this to the AC_PACKAGE_NAME lists. ## +## ------------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for aalib.h" >&5 +echo $ECHO_N "checking for aalib.h... $ECHO_C" >&6 +if test "${ac_cv_header_aalib_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_header_aalib_h=$ac_header_preproc +fi +echo "$as_me:$LINENO: result: $ac_cv_header_aalib_h" >&5 +echo "${ECHO_T}$ac_cv_header_aalib_h" >&6 + +fi +if test $ac_cv_header_aalib_h = yes; then + have_aa=yes + AA_LIBS='-laa' +fi + + +fi + +fi + + + +if test $have_aa = yes; then + AA_VIEW_TYPE=b_view_aa_get_type +fi + + + + + +if test $have_aa = "yes"; then + HAVE_AA_TRUE= + HAVE_AA_FALSE='#' +else + HAVE_AA_TRUE='#' + HAVE_AA_FALSE= +fi + + + +# Check whether --enable-modules or --disable-modules was given. +if test "${enable_modules+set}" = set; then + enableval="$enable_modules" + +else + enable_modules=yes +fi; + + + +if test $enable_modules = yes; then + BUILD_MODULES_TRUE= + BUILD_MODULES_FALSE='#' +else + BUILD_MODULES_TRUE='#' + BUILD_MODULES_FALSE= +fi + + + + + +# Check whether --with-html-dir or --without-html-dir was given. +if test "${with_html_dir+set}" = set; then + withval="$with_html_dir" + +fi; + +if test "x$with_html_dir" = "x" ; then + HTML_DIR='${datadir}/gtk-doc/html' +else + HTML_DIR=$with_html_dir +fi + + + +# Extract the first word of "gtkdoc-mkdb", so it can be a program name with args. +set dummy gtkdoc-mkdb; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_GTKDOC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$GTKDOC"; then + ac_cv_prog_GTKDOC="$GTKDOC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_GTKDOC="true" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_prog_GTKDOC" && ac_cv_prog_GTKDOC="false" +fi +fi +GTKDOC=$ac_cv_prog_GTKDOC +if test -n "$GTKDOC"; then + echo "$as_me:$LINENO: result: $GTKDOC" >&5 +echo "${ECHO_T}$GTKDOC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + +gtk_doc_min_version=0.10 +if $GTKDOC ; then + gtk_doc_version=`gtkdoc-mkdb --version` + echo "$as_me:$LINENO: checking gtk-doc version ($gtk_doc_version) >= $gtk_doc_min_version" >&5 +echo $ECHO_N "checking gtk-doc version ($gtk_doc_version) >= $gtk_doc_min_version... $ECHO_C" >&6 + + IFS="${IFS= }"; blib_save_IFS="$IFS"; IFS="." + set $gtk_doc_version + for min in $gtk_doc_min_version ; do + cur=$1; shift + if test -z $min ; then break; fi + if test -z $cur ; then GTKDOC=false; break; fi + if test $cur -gt $min ; then break ; fi + if test $cur -lt $min ; then GTKDOC=false; break ; fi + done + IFS="$blib_save_IFS" + + if $GTKDOC ; then + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 + fi +fi + + + +if $GTKDOC; then + HAVE_GTK_DOC_TRUE= + HAVE_GTK_DOC_FALSE='#' +else + HAVE_GTK_DOC_TRUE='#' + HAVE_GTK_DOC_FALSE= +fi + + + +# Extract the first word of "db2html", so it can be a program name with args. +set dummy db2html; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_DB2HTML+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$DB2HTML"; then + ac_cv_prog_DB2HTML="$DB2HTML" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DB2HTML="true" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_prog_DB2HTML" && ac_cv_prog_DB2HTML="false" +fi +fi +DB2HTML=$ac_cv_prog_DB2HTML +if test -n "$DB2HTML"; then + echo "$as_me:$LINENO: result: $DB2HTML" >&5 +echo "${ECHO_T}$DB2HTML" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + + +if $DB2HTML; then + HAVE_DOCBOOK_TRUE= + HAVE_DOCBOOK_FALSE='#' +else + HAVE_DOCBOOK_TRUE='#' + HAVE_DOCBOOK_FALSE= +fi + + +# Check whether --enable-gtk-doc or --disable-gtk-doc was given. +if test "${enable_gtk_doc+set}" = set; then + enableval="$enable_gtk_doc" + enable_gtk_doc="$enableval" +else + enable_gtk_doc=no +fi; + +if test x$enable_gtk_doc = xyes ; then + if test x$GTKDOC = xtrue ; then + enable_gtk_doc=yes + else + enable_gtk_doc=no + fi +fi + + + +if test x$enable_gtk_doc = xyes; then + ENABLE_GTK_DOC_TRUE= + ENABLE_GTK_DOC_FALSE='#' +else + ENABLE_GTK_DOC_TRUE='#' + ENABLE_GTK_DOC_FALSE= +fi + + + + ac_config_files="$ac_config_files blib.pc blib-aa.pc blib-directfb.pc blib-gtk.pc blib-pixbuf.pc Makefile blib/Makefile data/Makefile docs/Makefile docs/reference/Makefile docs/reference/blib.types docs/reference/version gfx/Makefile modules/Makefile test/Makefile test/movies/Makefile test/modules/Makefile" +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, don't put newlines in cache variables' values. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +{ + (set) 2>&1 | + case `(ac_space=' '; set | grep ac_space) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n \ + "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + ;; + esac; +} | + sed ' + t clear + : clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + : end' >>confcache +if diff $cache_file confcache >/dev/null 2>&1; then :; else + if test -w $cache_file; then + test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" + cat confcache >$cache_file + else + echo "not updating unwritable cache $cache_file" + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# VPATH may cause trouble with some makes, so we remove $(srcdir), +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/; +s/:*\${srcdir}:*/:/; +s/:*@srcdir@:*/:/; +s/^\([^=]*=[ ]*\):*/\1/; +s/:*$//; +s/^[^=]*=[ ]*$//; +}' +fi + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_i=`echo "$ac_i" | + sed 's/\$U\././;s/\.o$//;s/\.obj$//'` + # 2. Add them. + ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" + ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + +if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${OS_WIN32_TRUE}" && test -z "${OS_WIN32_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"OS_WIN32\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"OS_WIN32\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${HAVE_DIRECTFB_TRUE}" && test -z "${HAVE_DIRECTFB_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"HAVE_DIRECTFB\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"HAVE_DIRECTFB\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${HAVE_PIXBUF_TRUE}" && test -z "${HAVE_PIXBUF_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"HAVE_PIXBUF\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"HAVE_PIXBUF\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${HAVE_GTK_TRUE}" && test -z "${HAVE_GTK_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"HAVE_GTK\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"HAVE_GTK\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${HAVE_AA_TRUE}" && test -z "${HAVE_AA_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"HAVE_AA\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"HAVE_AA\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${BUILD_MODULES_TRUE}" && test -z "${BUILD_MODULES_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"BUILD_MODULES\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"BUILD_MODULES\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${HAVE_GTK_DOC_TRUE}" && test -z "${HAVE_GTK_DOC_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"HAVE_GTK_DOC\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"HAVE_GTK_DOC\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${HAVE_DOCBOOK_TRUE}" && test -z "${HAVE_DOCBOOK_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"HAVE_DOCBOOK\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"HAVE_DOCBOOK\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${ENABLE_GTK_DOC_TRUE}" && test -z "${ENABLE_GTK_DOC_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"ENABLE_GTK_DOC\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"ENABLE_GTK_DOC\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi + +: ${CONFIG_STATUS=./config.status} +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 +echo "$as_me: creating $CONFIG_STATUS" >&6;} +cat >$CONFIG_STATUS <<_ACEOF +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false +SHELL=\${CONFIG_SHELL-$SHELL} +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then + set -o posix +fi +DUALCASE=1; export DUALCASE # for MKS sh + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# Work around bugs in pre-3.0 UWIN ksh. +$as_unset ENV MAIL MAILPATH +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)$' \| \ + . : '\(.\)' 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } + /^X\/\(\/\/\)$/{ s//\1/; q; } + /^X\/\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + + +# PATH needs CR, and LINENO needs CR and PATH. +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" || { + # Find who we are. Look in the path if we contain no path at all + # relative or not. + case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done + + ;; + esac + # We did not find ourselves, most probably we were run as `sh COMMAND' + # in which case we are not to be found in the path. + if test "x$as_myself" = x; then + as_myself=$0 + fi + if test ! -f "$as_myself"; then + { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 +echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} + { (exit 1); exit 1; }; } + fi + case $CONFIG_SHELL in + '') + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for as_base in sh bash ksh sh5; do + case $as_dir in + /*) + if ("$as_dir/$as_base" -c ' + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then + $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } + $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } + CONFIG_SHELL=$as_dir/$as_base + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$0" ${1+"$@"} + fi;; + esac + done +done +;; + esac + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line before each line; the second 'sed' does the real + # work. The second script uses 'N' to pair each line-number line + # with the numbered line, and appends trailing '-' during + # substitution so that $LINENO is not a special case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) + sed '=' <$as_myself | + sed ' + N + s,$,-, + : loop + s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + t loop + s,-$,, + s,^['$as_cr_digits']*\n,, + ' >$as_me.lineno && + chmod +x $as_me.lineno || + { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 +echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensible to this). + . ./$as_me.lineno + # Exit status is that of the last command. + exit +} + + +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ECHO_C=' +' ECHO_T=' ' ;; + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +esac + +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + # We could just check for DJGPP; but this test a) works b) is more generic + # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). + if test -f conf$$.exe; then + # Don't use ln at all; we don't have any links + as_ln_s='cp -p' + else + as_ln_s='ln -s' + fi +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.file + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_executable_p="test -f" + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +# IFS +# We need space, tab and new line, in precisely that order. +as_nl=' +' +IFS=" $as_nl" + +# CDPATH. +$as_unset CDPATH + +exec 6>&1 + +# Open the log real soon, to keep \$[0] and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. Logging --version etc. is OK. +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX +} >&5 +cat >&5 <<_CSEOF + +This file was extended by $as_me, which was +generated by GNU Autoconf 2.59. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +_CSEOF +echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 +echo >&5 +_ACEOF + +# Files that config.status was made for. +if test -n "$ac_config_files"; then + echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_headers"; then + echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_links"; then + echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_commands"; then + echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS +fi + +cat >>$CONFIG_STATUS <<\_ACEOF + +ac_cs_usage="\ +\`$as_me' instantiates files from templates according to the +current configuration. + +Usage: $0 [OPTIONS] [FILE]... + + -h, --help print this help, then exit + -V, --version print version number, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to ." +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF +ac_cs_version="\\ +config.status +configured by $0, generated by GNU Autoconf 2.59, + with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" + +Copyright (C) 2003 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." +srcdir=$srcdir +INSTALL="$INSTALL" +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +# If no file are specified by the user, then we need to provide default +# value. By we need to know if files were specified by the user. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=*) + ac_option=`expr "x$1" : 'x\([^=]*\)='` + ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` + ac_shift=: + ;; + -*) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + *) # This is not an option, so the user has probably given explicit + # arguments. + ac_option=$1 + ac_need_defaults=false;; + esac + + case $ac_option in + # Handling of the options. +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --vers* | -V ) + echo "$ac_cs_version"; exit 0 ;; + --he | --h) + # Conflict between --help and --header + { { echo "$as_me:$LINENO: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&5 +echo "$as_me: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&2;} + { (exit 1); exit 1; }; };; + --help | --hel | -h ) + echo "$ac_cs_usage"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + CONFIG_FILES="$CONFIG_FILES $ac_optarg" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" + ac_need_defaults=false;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&5 +echo "$as_me: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&2;} + { (exit 1); exit 1; }; } ;; + + *) ac_config_targets="$ac_config_targets $1" ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF +if \$ac_cs_recheck; then + echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 + exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion +fi + +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF +# +# INIT-COMMANDS section. +# + +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + +_ACEOF + + + +cat >>$CONFIG_STATUS <<\_ACEOF +for ac_config_target in $ac_config_targets +do + case "$ac_config_target" in + # Handling of arguments. + "blib.pc" ) CONFIG_FILES="$CONFIG_FILES blib.pc" ;; + "blib-aa.pc" ) CONFIG_FILES="$CONFIG_FILES blib-aa.pc" ;; + "blib-directfb.pc" ) CONFIG_FILES="$CONFIG_FILES blib-directfb.pc" ;; + "blib-gtk.pc" ) CONFIG_FILES="$CONFIG_FILES blib-gtk.pc" ;; + "blib-pixbuf.pc" ) CONFIG_FILES="$CONFIG_FILES blib-pixbuf.pc" ;; + "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "blib/Makefile" ) CONFIG_FILES="$CONFIG_FILES blib/Makefile" ;; + "data/Makefile" ) CONFIG_FILES="$CONFIG_FILES data/Makefile" ;; + "docs/Makefile" ) CONFIG_FILES="$CONFIG_FILES docs/Makefile" ;; + "docs/reference/Makefile" ) CONFIG_FILES="$CONFIG_FILES docs/reference/Makefile" ;; + "docs/reference/blib.types" ) CONFIG_FILES="$CONFIG_FILES docs/reference/blib.types" ;; + "docs/reference/version" ) CONFIG_FILES="$CONFIG_FILES docs/reference/version" ;; + "gfx/Makefile" ) CONFIG_FILES="$CONFIG_FILES gfx/Makefile" ;; + "modules/Makefile" ) CONFIG_FILES="$CONFIG_FILES modules/Makefile" ;; + "test/Makefile" ) CONFIG_FILES="$CONFIG_FILES test/Makefile" ;; + "test/movies/Makefile" ) CONFIG_FILES="$CONFIG_FILES test/movies/Makefile" ;; + "test/modules/Makefile" ) CONFIG_FILES="$CONFIG_FILES test/modules/Makefile" ;; + "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; + *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 +echo "$as_me: error: invalid argument: $ac_config_target" >&2;} + { (exit 1); exit 1; }; };; + esac +done + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason to put it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Create a temporary directory, and hook for its removal unless debugging. +$debug || +{ + trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 + trap '{ (exit 1); exit 1; }' 1 2 13 15 +} + +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=./confstat$$-$RANDOM + (umask 077 && mkdir $tmp) +} || +{ + echo "$me: cannot create a temporary directory in ." >&2 + { (exit 1); exit 1; } +} + +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF + +# +# CONFIG_FILES section. +# + +# No need to generate the scripts if there are no CONFIG_FILES. +# This happens for instance when ./config.status config.h +if test -n "\$CONFIG_FILES"; then + # Protect against being on the right side of a sed subst in config.status. + sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; + s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF +s,@SHELL@,$SHELL,;t t +s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t +s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t +s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t +s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t +s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t +s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t +s,@exec_prefix@,$exec_prefix,;t t +s,@prefix@,$prefix,;t t +s,@program_transform_name@,$program_transform_name,;t t +s,@bindir@,$bindir,;t t +s,@sbindir@,$sbindir,;t t +s,@libexecdir@,$libexecdir,;t t +s,@datadir@,$datadir,;t t +s,@sysconfdir@,$sysconfdir,;t t +s,@sharedstatedir@,$sharedstatedir,;t t +s,@localstatedir@,$localstatedir,;t t +s,@libdir@,$libdir,;t t +s,@includedir@,$includedir,;t t +s,@oldincludedir@,$oldincludedir,;t t +s,@infodir@,$infodir,;t t +s,@mandir@,$mandir,;t t +s,@build_alias@,$build_alias,;t t +s,@host_alias@,$host_alias,;t t +s,@target_alias@,$target_alias,;t t +s,@DEFS@,$DEFS,;t t +s,@ECHO_C@,$ECHO_C,;t t +s,@ECHO_N@,$ECHO_N,;t t +s,@ECHO_T@,$ECHO_T,;t t +s,@LIBS@,$LIBS,;t t +s,@BLIB_MAJOR_VERSION@,$BLIB_MAJOR_VERSION,;t t +s,@BLIB_MINOR_VERSION@,$BLIB_MINOR_VERSION,;t t +s,@BLIB_MICRO_VERSION@,$BLIB_MICRO_VERSION,;t t +s,@BLIB_INTERFACE_AGE@,$BLIB_INTERFACE_AGE,;t t +s,@BLIB_BINARY_AGE@,$BLIB_BINARY_AGE,;t t +s,@BLIB_VERSION@,$BLIB_VERSION,;t t +s,@LT_RELEASE@,$LT_RELEASE,;t t +s,@LT_CURRENT@,$LT_CURRENT,;t t +s,@LT_REVISION@,$LT_REVISION,;t t +s,@LT_AGE@,$LT_AGE,;t t +s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t +s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t +s,@INSTALL_DATA@,$INSTALL_DATA,;t t +s,@CYGPATH_W@,$CYGPATH_W,;t t +s,@PACKAGE@,$PACKAGE,;t t +s,@VERSION@,$VERSION,;t t +s,@ACLOCAL@,$ACLOCAL,;t t +s,@AUTOCONF@,$AUTOCONF,;t t +s,@AUTOMAKE@,$AUTOMAKE,;t t +s,@AUTOHEADER@,$AUTOHEADER,;t t +s,@MAKEINFO@,$MAKEINFO,;t t +s,@AMTAR@,$AMTAR,;t t +s,@install_sh@,$install_sh,;t t +s,@STRIP@,$STRIP,;t t +s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t +s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t +s,@AWK@,$AWK,;t t +s,@SET_MAKE@,$SET_MAKE,;t t +s,@am__leading_dot@,$am__leading_dot,;t t +s,@MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t +s,@MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t +s,@MAINT@,$MAINT,;t t +s,@build@,$build,;t t +s,@build_cpu@,$build_cpu,;t t +s,@build_vendor@,$build_vendor,;t t +s,@build_os@,$build_os,;t t +s,@host@,$host,;t t +s,@host_cpu@,$host_cpu,;t t +s,@host_vendor@,$host_vendor,;t t +s,@host_os@,$host_os,;t t +s,@CC@,$CC,;t t +s,@CFLAGS@,$CFLAGS,;t t +s,@LDFLAGS@,$LDFLAGS,;t t +s,@CPPFLAGS@,$CPPFLAGS,;t t +s,@ac_ct_CC@,$ac_ct_CC,;t t +s,@EXEEXT@,$EXEEXT,;t t +s,@OBJEXT@,$OBJEXT,;t t +s,@DEPDIR@,$DEPDIR,;t t +s,@am__include@,$am__include,;t t +s,@am__quote@,$am__quote,;t t +s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t +s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t +s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t +s,@CCDEPMODE@,$CCDEPMODE,;t t +s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t +s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t +s,@EGREP@,$EGREP,;t t +s,@LN_S@,$LN_S,;t t +s,@ECHO@,$ECHO,;t t +s,@AR@,$AR,;t t +s,@ac_ct_AR@,$ac_ct_AR,;t t +s,@RANLIB@,$RANLIB,;t t +s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t +s,@CPP@,$CPP,;t t +s,@CXX@,$CXX,;t t +s,@CXXFLAGS@,$CXXFLAGS,;t t +s,@ac_ct_CXX@,$ac_ct_CXX,;t t +s,@CXXDEPMODE@,$CXXDEPMODE,;t t +s,@am__fastdepCXX_TRUE@,$am__fastdepCXX_TRUE,;t t +s,@am__fastdepCXX_FALSE@,$am__fastdepCXX_FALSE,;t t +s,@CXXCPP@,$CXXCPP,;t t +s,@F77@,$F77,;t t +s,@FFLAGS@,$FFLAGS,;t t +s,@ac_ct_F77@,$ac_ct_F77,;t t +s,@LIBTOOL@,$LIBTOOL,;t t +s,@OS_WIN32_TRUE@,$OS_WIN32_TRUE,;t t +s,@OS_WIN32_FALSE@,$OS_WIN32_FALSE,;t t +s,@WIN32_LIBS@,$WIN32_LIBS,;t t +s,@WIN32_CFLAGS@,$WIN32_CFLAGS,;t t +s,@DATADIR@,$DATADIR,;t t +s,@INCLUDEDIR@,$INCLUDEDIR,;t t +s,@THEMEPATH@,$THEMEPATH,;t t +s,@MODULEPATH@,$MODULEPATH,;t t +s,@PKG_CONFIG@,$PKG_CONFIG,;t t +s,@GLIB_CFLAGS@,$GLIB_CFLAGS,;t t +s,@GLIB_LIBS@,$GLIB_LIBS,;t t +s,@GLIB_GENMARSHAL@,$GLIB_GENMARSHAL,;t t +s,@GOBJECT_QUERY@,$GOBJECT_QUERY,;t t +s,@GLIB_MKENUMS@,$GLIB_MKENUMS,;t t +s,@DIRECTFB_CFLAGS@,$DIRECTFB_CFLAGS,;t t +s,@DIRECTFB_LIBS@,$DIRECTFB_LIBS,;t t +s,@DIRECTFB_VIEW_TYPE@,$DIRECTFB_VIEW_TYPE,;t t +s,@HAVE_DIRECTFB_TRUE@,$HAVE_DIRECTFB_TRUE,;t t +s,@HAVE_DIRECTFB_FALSE@,$HAVE_DIRECTFB_FALSE,;t t +s,@GDK_PIXBUF_CFLAGS@,$GDK_PIXBUF_CFLAGS,;t t +s,@GDK_PIXBUF_LIBS@,$GDK_PIXBUF_LIBS,;t t +s,@PIXBUF_VIEW_TYPE@,$PIXBUF_VIEW_TYPE,;t t +s,@HAVE_PIXBUF_TRUE@,$HAVE_PIXBUF_TRUE,;t t +s,@HAVE_PIXBUF_FALSE@,$HAVE_PIXBUF_FALSE,;t t +s,@GTK_CFLAGS@,$GTK_CFLAGS,;t t +s,@GTK_LIBS@,$GTK_LIBS,;t t +s,@GTK_VIEW_TYPE@,$GTK_VIEW_TYPE,;t t +s,@HAVE_GTK_TRUE@,$HAVE_GTK_TRUE,;t t +s,@HAVE_GTK_FALSE@,$HAVE_GTK_FALSE,;t t +s,@AA_LIBS@,$AA_LIBS,;t t +s,@AA_VIEW_TYPE@,$AA_VIEW_TYPE,;t t +s,@HAVE_AA_TRUE@,$HAVE_AA_TRUE,;t t +s,@HAVE_AA_FALSE@,$HAVE_AA_FALSE,;t t +s,@BUILD_MODULES_TRUE@,$BUILD_MODULES_TRUE,;t t +s,@BUILD_MODULES_FALSE@,$BUILD_MODULES_FALSE,;t t +s,@HTML_DIR@,$HTML_DIR,;t t +s,@GTKDOC@,$GTKDOC,;t t +s,@HAVE_GTK_DOC_TRUE@,$HAVE_GTK_DOC_TRUE,;t t +s,@HAVE_GTK_DOC_FALSE@,$HAVE_GTK_DOC_FALSE,;t t +s,@HAVE_GTK_DOC@,$HAVE_GTK_DOC,;t t +s,@DB2HTML@,$DB2HTML,;t t +s,@HAVE_DOCBOOK_TRUE@,$HAVE_DOCBOOK_TRUE,;t t +s,@HAVE_DOCBOOK_FALSE@,$HAVE_DOCBOOK_FALSE,;t t +s,@ENABLE_GTK_DOC_TRUE@,$ENABLE_GTK_DOC_TRUE,;t t +s,@ENABLE_GTK_DOC_FALSE@,$ENABLE_GTK_DOC_FALSE,;t t +s,@LIBOBJS@,$LIBOBJS,;t t +s,@LTLIBOBJS@,$LTLIBOBJS,;t t +CEOF + +_ACEOF + + cat >>$CONFIG_STATUS <<\_ACEOF + # Split the substitutions into bite-sized pieces for seds with + # small command number limits, like on Digital OSF/1 and HP-UX. + ac_max_sed_lines=48 + ac_sed_frag=1 # Number of current file. + ac_beg=1 # First line for current file. + ac_end=$ac_max_sed_lines # Line after last line for current file. + ac_more_lines=: + ac_sed_cmds= + while $ac_more_lines; do + if test $ac_beg -gt 1; then + sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag + else + sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag + fi + if test ! -s $tmp/subs.frag; then + ac_more_lines=false + else + # The purpose of the label and of the branching condition is to + # speed up the sed processing (if there are no `@' at all, there + # is no need to browse any of the substitutions). + # These are the two extra sed commands mentioned above. + (echo ':t + /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed + if test -z "$ac_sed_cmds"; then + ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" + else + ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" + fi + ac_sed_frag=`expr $ac_sed_frag + 1` + ac_beg=$ac_end + ac_end=`expr $ac_end + $ac_max_sed_lines` + fi + done + if test -z "$ac_sed_cmds"; then + ac_sed_cmds=cat + fi +fi # test -n "$CONFIG_FILES" + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case $ac_file in + - | *:- | *:-:* ) # input from stdin + cat >$tmp/stdin + ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + * ) ac_file_in=$ac_file.in ;; + esac + + # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. + ac_dir=`(dirname "$ac_file") 2>/dev/null || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { if $as_mkdir_p; then + mkdir -p "$ac_dir" + else + as_dir="$ac_dir" + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; }; } + + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac + +# Do not use `cd foo && pwd` to compute absolute paths, because +# the directories may not exist. +case `pwd` in +.) ac_abs_builddir="$ac_dir";; +*) + case "$ac_dir" in + .) ac_abs_builddir=`pwd`;; + [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; + *) ac_abs_builddir=`pwd`/"$ac_dir";; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_builddir=${ac_top_builddir}.;; +*) + case ${ac_top_builddir}. in + .) ac_abs_top_builddir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; + *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_srcdir=$ac_srcdir;; +*) + case $ac_srcdir in + .) ac_abs_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; + *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_srcdir=$ac_top_srcdir;; +*) + case $ac_top_srcdir in + .) ac_abs_top_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; + *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; + esac;; +esac + + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_builddir$INSTALL ;; + esac + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + if test x"$ac_file" = x-; then + configure_input= + else + configure_input="$ac_file. " + fi + configure_input=$configure_input"Generated from `echo $ac_file_in | + sed 's,.*/,,'` by configure." + + # First look for the input files in the build tree, otherwise in the + # src tree. + ac_file_inputs=`IFS=: + for f in $ac_file_in; do + case $f in + -) echo $tmp/stdin ;; + [\\/$]*) + # Absolute (can't be DOS-style, as IFS=:) + test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + echo "$f";; + *) # Relative + if test -f "$f"; then + # Build tree + echo "$f" + elif test -f "$srcdir/$f"; then + # Source tree + echo "$srcdir/$f" + else + # /dev/null tree + { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + fi;; + esac + done` || { (exit 1); exit 1; } + + if test x"$ac_file" != x-; then + { echo "$as_me:$LINENO: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + rm -f "$ac_file" + fi +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF + sed "$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s,@configure_input@,$configure_input,;t t +s,@srcdir@,$ac_srcdir,;t t +s,@abs_srcdir@,$ac_abs_srcdir,;t t +s,@top_srcdir@,$ac_top_srcdir,;t t +s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t +s,@builddir@,$ac_builddir,;t t +s,@abs_builddir@,$ac_abs_builddir,;t t +s,@top_builddir@,$ac_top_builddir,;t t +s,@abs_top_builddir@,$ac_abs_top_builddir,;t t +s,@INSTALL@,$ac_INSTALL,;t t +" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out + rm -f $tmp/stdin + if test x"$ac_file" != x-; then + mv $tmp/out $ac_file + else + cat $tmp/out + rm -f $tmp/out + fi + +done +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF + +# +# CONFIG_HEADER section. +# + +# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where +# NAME is the cpp macro being defined and VALUE is the value it is being given. +# +# ac_d sets the value in "#define NAME VALUE" lines. +ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' +ac_dB='[ ].*$,\1#\2' +ac_dC=' ' +ac_dD=',;t' +# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". +ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +ac_uB='$,\1#\2define\3' +ac_uC=' ' +ac_uD=',;t' + +for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case $ac_file in + - | *:- | *:-:* ) # input from stdin + cat >$tmp/stdin + ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + * ) ac_file_in=$ac_file.in ;; + esac + + test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + + # First look for the input files in the build tree, otherwise in the + # src tree. + ac_file_inputs=`IFS=: + for f in $ac_file_in; do + case $f in + -) echo $tmp/stdin ;; + [\\/$]*) + # Absolute (can't be DOS-style, as IFS=:) + test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + # Do quote $f, to prevent DOS paths from being IFS'd. + echo "$f";; + *) # Relative + if test -f "$f"; then + # Build tree + echo "$f" + elif test -f "$srcdir/$f"; then + # Source tree + echo "$srcdir/$f" + else + # /dev/null tree + { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + fi;; + esac + done` || { (exit 1); exit 1; } + # Remove the trailing spaces. + sed 's/[ ]*$//' $ac_file_inputs >$tmp/in + +_ACEOF + +# Transform confdefs.h into two sed scripts, `conftest.defines' and +# `conftest.undefs', that substitutes the proper values into +# config.h.in to produce config.h. The first handles `#define' +# templates, and the second `#undef' templates. +# And first: Protect against being on the right side of a sed subst in +# config.status. Protect against being in an unquoted here document +# in config.status. +rm -f conftest.defines conftest.undefs +# Using a here document instead of a string reduces the quoting nightmare. +# Putting comments in sed scripts is not portable. +# +# `end' is used to avoid that the second main sed command (meant for +# 0-ary CPP macros) applies to n-ary macro definitions. +# See the Autoconf documentation for `clear'. +cat >confdef2sed.sed <<\_ACEOF +s/[\\&,]/\\&/g +s,[\\$`],\\&,g +t clear +: clear +s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp +t end +s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp +: end +_ACEOF +# If some macros were called several times there might be several times +# the same #defines, which is useless. Nevertheless, we may not want to +# sort them, since we want the *last* AC-DEFINE to be honored. +uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines +sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs +rm -f confdef2sed.sed + +# This sed command replaces #undef with comments. This is necessary, for +# example, in the case of _POSIX_SOURCE, which is predefined and required +# on some systems where configure will not decide to define it. +cat >>conftest.undefs <<\_ACEOF +s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, +_ACEOF + +# Break up conftest.defines because some shells have a limit on the size +# of here documents, and old seds have small limits too (100 cmds). +echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS +echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS +echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS +echo ' :' >>$CONFIG_STATUS +rm -f conftest.tail +while grep . conftest.defines >/dev/null +do + # Write a limited-size here document to $tmp/defines.sed. + echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS + # Speed up: don't consider the non `#define' lines. + echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS + # Work around the forget-to-reset-the-flag bug. + echo 't clr' >>$CONFIG_STATUS + echo ': clr' >>$CONFIG_STATUS + sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS + echo 'CEOF + sed -f $tmp/defines.sed $tmp/in >$tmp/out + rm -f $tmp/in + mv $tmp/out $tmp/in +' >>$CONFIG_STATUS + sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail + rm -f conftest.defines + mv conftest.tail conftest.defines +done +rm -f conftest.defines +echo ' fi # grep' >>$CONFIG_STATUS +echo >>$CONFIG_STATUS + +# Break up conftest.undefs because some shells have a limit on the size +# of here documents, and old seds have small limits too (100 cmds). +echo ' # Handle all the #undef templates' >>$CONFIG_STATUS +rm -f conftest.tail +while grep . conftest.undefs >/dev/null +do + # Write a limited-size here document to $tmp/undefs.sed. + echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS + # Speed up: don't consider the non `#undef' + echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS + # Work around the forget-to-reset-the-flag bug. + echo 't clr' >>$CONFIG_STATUS + echo ': clr' >>$CONFIG_STATUS + sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS + echo 'CEOF + sed -f $tmp/undefs.sed $tmp/in >$tmp/out + rm -f $tmp/in + mv $tmp/out $tmp/in +' >>$CONFIG_STATUS + sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail + rm -f conftest.undefs + mv conftest.tail conftest.undefs +done +rm -f conftest.undefs + +cat >>$CONFIG_STATUS <<\_ACEOF + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + if test x"$ac_file" = x-; then + echo "/* Generated by configure. */" >$tmp/config.h + else + echo "/* $ac_file. Generated by configure. */" >$tmp/config.h + fi + cat $tmp/in >>$tmp/config.h + rm -f $tmp/in + if test x"$ac_file" != x-; then + if diff $ac_file $tmp/config.h >/dev/null 2>&1; then + { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 +echo "$as_me: $ac_file is unchanged" >&6;} + else + ac_dir=`(dirname "$ac_file") 2>/dev/null || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { if $as_mkdir_p; then + mkdir -p "$ac_dir" + else + as_dir="$ac_dir" + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; }; } + + rm -f $ac_file + mv $tmp/config.h $ac_file + fi + else + cat $tmp/config.h + rm -f $tmp/config.h + fi +# Compute $ac_file's index in $config_headers. +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $ac_file | $ac_file:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null || +$as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X$ac_file : 'X\(//\)[^/]' \| \ + X$ac_file : 'X\(//\)$' \| \ + X$ac_file : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X$ac_file | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'`/stamp-h$_am_stamp_count +done +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF + +# +# CONFIG_COMMANDS section. +# +for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue + ac_dest=`echo "$ac_file" | sed 's,:.*,,'` + ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_dir=`(dirname "$ac_dest") 2>/dev/null || +$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_dest" : 'X\(//\)[^/]' \| \ + X"$ac_dest" : 'X\(//\)$' \| \ + X"$ac_dest" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$ac_dest" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { if $as_mkdir_p; then + mkdir -p "$ac_dir" + else + as_dir="$ac_dir" + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; }; } + + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac + +# Do not use `cd foo && pwd` to compute absolute paths, because +# the directories may not exist. +case `pwd` in +.) ac_abs_builddir="$ac_dir";; +*) + case "$ac_dir" in + .) ac_abs_builddir=`pwd`;; + [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; + *) ac_abs_builddir=`pwd`/"$ac_dir";; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_builddir=${ac_top_builddir}.;; +*) + case ${ac_top_builddir}. in + .) ac_abs_top_builddir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; + *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_srcdir=$ac_srcdir;; +*) + case $ac_srcdir in + .) ac_abs_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; + *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_srcdir=$ac_top_srcdir;; +*) + case $ac_top_srcdir in + .) ac_abs_top_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; + *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; + esac;; +esac + + + { echo "$as_me:$LINENO: executing $ac_dest commands" >&5 +echo "$as_me: executing $ac_dest commands" >&6;} + case $ac_dest in + depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # So let's grep whole file. + if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then + dirpart=`(dirname "$mf") 2>/dev/null || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + else + continue + fi + grep '^DEP_FILES *= *[^ #]' < "$mf" > /dev/null || continue + # Extract the definition of DEP_FILES from the Makefile without + # running `make'. + DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"` + test -z "$DEPDIR" && continue + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n -e '/^U = / s///p' < "$mf"` + test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR" + # We invoke sed twice because it is the simplest approach to + # changing $(DEPDIR) to its actual value in the expansion. + for file in `sed -n -e ' + /^DEP_FILES = .*\\\\$/ { + s/^DEP_FILES = // + :loop + s/\\\\$// + p + n + /\\\\$/ b loop + p + } + /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`(dirname "$file") 2>/dev/null || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { if $as_mkdir_p; then + mkdir -p $dirpart/$fdir + else + as_dir=$dirpart/$fdir + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5 +echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;} + { (exit 1); exit 1; }; }; } + + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done +done + ;; + esac +done +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF + +{ (exit 0); exit 0; } +_ACEOF +chmod +x $CONFIG_STATUS +ac_clean_files=$ac_clean_files_save + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || { (exit 1); exit 1; } +fi + + +echo "$as_me:$LINENO: result: +Build options: + Version $VERSION + Install prefix $prefix + Include dir $INCLUDEDIR + Data dir $DATADIR + Theme path $THEMEPATH + Module path $MODULEPATH + +Views: + DirectFB $have_directfb + GdkPixbuf $have_pixbuf + GTK+-2.0 $have_gtk + AA-lib $have_aa +" >&5 +echo "${ECHO_T} +Build options: + Version $VERSION + Install prefix $prefix + Include dir $INCLUDEDIR + Data dir $DATADIR + Theme path $THEMEPATH + Module path $MODULEPATH + +Views: + DirectFB $have_directfb + GdkPixbuf $have_pixbuf + GTK+-2.0 $have_gtk + AA-lib $have_aa +" >&6; diff --git a/blib-1.1.7/configure.in b/blib-1.1.7/configure.in new file mode 100644 index 0000000..a4f1315 --- /dev/null +++ b/blib-1.1.7/configure.in @@ -0,0 +1,340 @@ +dnl Process this file with autoconf to produce a configure script. +AC_INIT(blib/blib.h) + +# Save this values here, since automake will set cflags later +cflags_set="${CFLAGS}set" + +# Making releases: +# BLIB_MICRO_VERSION += 1; +# BLIB_INTERFACE_AGE += 1; +# BLIB_BINARY_AGE += 1; +# if any functions have been added, set BLIB_INTERFACE_AGE to 0. +# if backwards compatibility has been broken, +# set BLIB_BINARY_AGE and BLIB_INTERFACE_AGE to 0. +# +BLIB_MAJOR_VERSION=1 +BLIB_MINOR_VERSION=1 +BLIB_MICRO_VERSION=7 +BLIB_INTERFACE_AGE=0 +BLIB_BINARY_AGE=0 +BLIB_API_VERSION=$BLIB_MAJOR_VERSION.$BLIB_MINOR_VERSION +BLIB_VERSION=$BLIB_MAJOR_VERSION.$BLIB_MINOR_VERSION.$BLIB_MICRO_VERSION + +AC_SUBST(BLIB_MAJOR_VERSION) +AC_SUBST(BLIB_MINOR_VERSION) +AC_SUBST(BLIB_MICRO_VERSION) +AC_SUBST(BLIB_INTERFACE_AGE) +AC_SUBST(BLIB_BINARY_AGE) +AC_SUBST(BLIB_VERSION) + +AC_DEFINE_UNQUOTED(BLIB_VERSION,"$BLIB_VERSION",[The Blib version]) + +# libtool versioning +LT_RELEASE=$BLIB_MAJOR_VERSION.$BLIB_MINOR_VERSION +LT_CURRENT=`expr $BLIB_MICRO_VERSION - $BLIB_INTERFACE_AGE` +LT_REVISION=$BLIB_INTERFACE_AGE +LT_AGE=`expr $BLIB_BINARY_AGE - $BLIB_INTERFACE_AGE` + +AC_SUBST(LT_RELEASE) +AC_SUBST(LT_CURRENT) +AC_SUBST(LT_REVISION) +AC_SUBST(LT_AGE) + +VERSION=$BLIB_VERSION +PACKAGE=blib + +AM_INIT_AUTOMAKE($PACKAGE, $VERSION) + +AM_CONFIG_HEADER(config.h) + +AM_MAINTAINER_MODE + +AM_PROG_LIBTOOL + +AC_ISC_POSIX +AM_SANITY_CHECK +AM_PROG_CC_STDC +AC_PROG_INSTALL +AC_PROG_MAKE_SET +AC_HEADER_STDC +AC_C_CONST + +AC_CHECK_HEADERS(unistd.h) + + +AC_MSG_CHECKING([for target architecture]) +case x"$target" in + xNONE | x) + target_or_host="$host" ;; + *) + target_or_host="$target" ;; +esac +AC_MSG_RESULT([$target_or_host]) + + +AC_MSG_CHECKING([for native Win32]) +case "$target_or_host" in + *-*-mingw*) + os_win32=yes + ;; + *) + os_win32=no + ;; +esac +AC_MSG_RESULT([$os_win32]) +AM_CONDITIONAL(OS_WIN32, test "$os_win32" = "yes") + + +if test x"$os_win32" = xyes; then +WIN32_LIBS=-lwsock32 +fi +AC_SUBST(WIN32_LIBS) + + +# Ensure MSVC-compatible struct packing convention is used when +# compiling for Win32 with gcc. +# What flag to depends on gcc version: gcc3 uses "-mms-bitfields", while +# gcc2 uses "-fnative-struct". +if test x"$os_win32" = xyes; then + if test x"$GCC" = xyes; then + msnative_struct='' + AC_MSG_CHECKING([how to get MSVC-compatible struct packing]) + if test -z "$ac_cv_prog_CC"; then + our_gcc="$CC" + else + our_gcc="$ac_cv_prog_CC" + fi + case `$our_gcc --version | sed -e 's,\..*,.,' -e q` in + 2.) + if $our_gcc -v --help 2>/dev/null | grep fnative-struct >/dev/null; then + msnative_struct='-fnative-struct' + fi + ;; + *) + if $our_gcc -v --help 2>/dev/null | grep ms-bitfields >/dev/null; then + msnative_struct='-mms-bitfields' + fi + ;; + esac + if test x"$msnative_struct" = x ; then + AC_MSG_RESULT([no way]) + AC_MSG_WARN([build will be incompatible with GTK+ DLLs]) + else + WIN32_CFLAGS=$msnative_struct + AC_MSG_RESULT([$WIN32_CFLAGS]) + fi + fi +fi + +AC_SUBST(WIN32_CFLAGS) + + +if test "x$GCC" = xyes; then + CFLAGS="$CFLAGS -Wall $WIN32_CFLAGS" +fi + +AC_SUBST(CFLAGS) + + +DATADIR=$datadir/blib-$BLIB_API_VERSION +INCLUDEDIR=$includedir/blib-$BLIB_API_VERSION +THEMEPATH=$datadir/blib-$BLIB_API_VERSION/themes +MODULEPATH=$libdir/blib-$BLIB_API_VERSION/modules + +AC_SUBST(DATADIR) +AC_SUBST(INCLUDEDIR) +AC_SUBST(THEMEPATH) +AC_SUBST(MODULEPATH) + +AM_PATH_GLIB_2_0(2.0.1,, + AC_MSG_ERROR([ +*** blib depends on glib-2.0 which doesn't seem to be available.]), + gobject gmodule) + + +AC_ARG_ENABLE(directfb, + [ --disable-directfb disable support for DirectFB [default=auto]], , + enable_directfb=yes) + +if test "x$enable_directfb" = "xyes"; then + PKG_CHECK_MODULES(DIRECTFB, directfb >= 0.9.11, + have_directfb=yes, have_directfb=no) +else + have_directfb=no +fi + +if test $have_directfb = yes; then + DIRECTFB_VIEW_TYPE=b_view_directfb_get_type +fi + +AC_SUBST(DIRECTFB_VIEW_TYPE) + +AM_CONDITIONAL(HAVE_DIRECTFB, test $have_directfb = yes) + + +AC_ARG_ENABLE(gdk_pixbuf, + [ --disable-gdk-pixbuf disable support for gdk-pixbuf [default=auto]], , + enable_gdk_pixbuf=yes) + +if test "x$enable_gdk_pixbuf" = "xyes"; then + PKG_CHECK_MODULES(GDK_PIXBUF, gdk-pixbuf-2.0 >= 2.0.0, +have_pixbuf=yes, have_pixbuf=no) +else + have_pixbuf=no +fi + +if test $have_pixbuf = yes; then + PIXBUF_VIEW_TYPE=b_view_pixbuf_get_type +fi + +AC_SUBST(PIXBUF_VIEW_TYPE) + +AM_CONDITIONAL(HAVE_PIXBUF, test $have_pixbuf = yes) + + +AC_ARG_ENABLE(gtk, + [ --disable-gtk disable support for GTK+-2.0 [default=auto]], , + enable_gtk=yes) + +if test "x$enable_gtk" = "xyes"; then + PKG_CHECK_MODULES(GTK, gtk+-2.0 >= 2.0.3, + have_gtk=yes, have_gtk=no) +else + have_gtk=no +fi + +if test $have_gtk = yes; then + GTK_VIEW_TYPE=b_view_gtk_get_type +fi + +AC_SUBST(GTK_VIEW_TYPE) + +AM_CONDITIONAL(HAVE_GTK, test $have_gtk = yes) + + +AC_ARG_ENABLE(aa, + [ --disable-aa disable support for AA-lib [default=auto]], , + enable_aa=yes) + +have_aa=no +if test "x$enable_aa" = "xyes"; then + AC_CHECK_LIB(aa, aa_fastrender, + [AC_CHECK_HEADER(aalib.h, + have_aa=yes + AA_LIBS='-laa')]) +fi + +AC_SUBST(AA_LIBS) + +if test $have_aa = yes; then + AA_VIEW_TYPE=b_view_aa_get_type +fi + +AC_SUBST(AA_VIEW_TYPE) + +AM_CONDITIONAL(HAVE_AA, test $have_aa = "yes") + + +AC_ARG_ENABLE(modules, + [ --disable-modules disable the build of modules], , + enable_modules=yes) + +AM_CONDITIONAL(BUILD_MODULES, test $enable_modules = yes) + + +dnl ************************** +dnl *** Checks for gtk-doc *** +dnl ************************** + +AC_ARG_WITH(html-dir, [ --with-html-dir=PATH path to installed docs]) + +if test "x$with_html_dir" = "x" ; then + HTML_DIR='${datadir}/gtk-doc/html' +else + HTML_DIR=$with_html_dir +fi + +AC_SUBST(HTML_DIR) + +AC_CHECK_PROG(GTKDOC, gtkdoc-mkdb, true, false) + +gtk_doc_min_version=0.10 +if $GTKDOC ; then + gtk_doc_version=`gtkdoc-mkdb --version` + AC_MSG_CHECKING([gtk-doc version ($gtk_doc_version) >= $gtk_doc_min_version]) + + IFS="${IFS= }"; blib_save_IFS="$IFS"; IFS="." + set $gtk_doc_version + for min in $gtk_doc_min_version ; do + cur=$1; shift + if test -z $min ; then break; fi + if test -z $cur ; then GTKDOC=false; break; fi + if test $cur -gt $min ; then break ; fi + if test $cur -lt $min ; then GTKDOC=false; break ; fi + done + IFS="$blib_save_IFS" + + if $GTKDOC ; then + AC_MSG_RESULT(yes) + else + AC_MSG_RESULT(no) + fi +fi + +AM_CONDITIONAL(HAVE_GTK_DOC, $GTKDOC) +AC_SUBST(HAVE_GTK_DOC) + +AC_CHECK_PROG(DB2HTML, db2html, true, false) +AM_CONDITIONAL(HAVE_DOCBOOK, $DB2HTML) + +dnl Let people disable the gtk-doc stuff. +AC_ARG_ENABLE(gtk-doc, [ --enable-gtk-doc use gtk-doc to build documentation [default=auto]], enable_gtk_doc="$enableval", enable_gtk_doc=no) + +if test x$enable_gtk_doc = xyes ; then + if test x$GTKDOC = xtrue ; then + enable_gtk_doc=yes + else + enable_gtk_doc=no + fi +fi + +dnl NOTE: We need to use a separate automake conditional for this +dnl to make this work with the tarballs. +AM_CONDITIONAL(ENABLE_GTK_DOC, test x$enable_gtk_doc = xyes) + + +AC_OUTPUT([ +blib.pc +blib-aa.pc +blib-directfb.pc +blib-gtk.pc +blib-pixbuf.pc +Makefile +blib/Makefile +data/Makefile +docs/Makefile +docs/reference/Makefile +docs/reference/blib.types +docs/reference/version +gfx/Makefile +modules/Makefile +test/Makefile +test/movies/Makefile +test/modules/Makefile +]) + +AC_MSG_RESULT([ +Build options: + Version $VERSION + Install prefix $prefix + Include dir $INCLUDEDIR + Data dir $DATADIR + Theme path $THEMEPATH + Module path $MODULEPATH + +Views: + DirectFB $have_directfb + GdkPixbuf $have_pixbuf + GTK+-2.0 $have_gtk + AA-lib $have_aa +]); diff --git a/blib-1.1.7/data/Makefile.am b/blib-1.1.7/data/Makefile.am new file mode 100644 index 0000000..2a53979 --- /dev/null +++ b/blib-1.1.7/data/Makefile.am @@ -0,0 +1,10 @@ +## Makefile.am for blib/data +## Process this file with automake to produce Makefile.in + +blibdatadir = $(DATADIR) + +blibdata_DATA = \ + bml.dtd \ + blinkentheme.dtd + +EXTRA_DIST = $(blibdata_DATA) diff --git a/blib-1.1.7/data/Makefile.in b/blib-1.1.7/data/Makefile.in new file mode 100644 index 0000000..93e7b4e --- /dev/null +++ b/blib-1.1.7/data/Makefile.in @@ -0,0 +1,368 @@ +# Makefile.in generated by automake 1.7.9 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = .. + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +AA_LIBS = @AA_LIBS@ +AA_VIEW_TYPE = @AA_VIEW_TYPE@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BLIB_BINARY_AGE = @BLIB_BINARY_AGE@ +BLIB_INTERFACE_AGE = @BLIB_INTERFACE_AGE@ +BLIB_MAJOR_VERSION = @BLIB_MAJOR_VERSION@ +BLIB_MICRO_VERSION = @BLIB_MICRO_VERSION@ +BLIB_MINOR_VERSION = @BLIB_MINOR_VERSION@ +BLIB_VERSION = @BLIB_VERSION@ +BUILD_MODULES_FALSE = @BUILD_MODULES_FALSE@ +BUILD_MODULES_TRUE = @BUILD_MODULES_TRUE@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIR = @DATADIR@ +DB2HTML = @DB2HTML@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DIRECTFB_CFLAGS = @DIRECTFB_CFLAGS@ +DIRECTFB_LIBS = @DIRECTFB_LIBS@ +DIRECTFB_VIEW_TYPE = @DIRECTFB_VIEW_TYPE@ +ECHO = @ECHO@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ENABLE_GTK_DOC_FALSE = @ENABLE_GTK_DOC_FALSE@ +ENABLE_GTK_DOC_TRUE = @ENABLE_GTK_DOC_TRUE@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ +GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ +GLIB_LIBS = @GLIB_LIBS@ +GLIB_MKENUMS = @GLIB_MKENUMS@ +GOBJECT_QUERY = @GOBJECT_QUERY@ +GTKDOC = @GTKDOC@ +GTK_CFLAGS = @GTK_CFLAGS@ +GTK_LIBS = @GTK_LIBS@ +GTK_VIEW_TYPE = @GTK_VIEW_TYPE@ +HAVE_AA_FALSE = @HAVE_AA_FALSE@ +HAVE_AA_TRUE = @HAVE_AA_TRUE@ +HAVE_DIRECTFB_FALSE = @HAVE_DIRECTFB_FALSE@ +HAVE_DIRECTFB_TRUE = @HAVE_DIRECTFB_TRUE@ +HAVE_DOCBOOK_FALSE = @HAVE_DOCBOOK_FALSE@ +HAVE_DOCBOOK_TRUE = @HAVE_DOCBOOK_TRUE@ +HAVE_GTK_DOC = @HAVE_GTK_DOC@ +HAVE_GTK_DOC_FALSE = @HAVE_GTK_DOC_FALSE@ +HAVE_GTK_DOC_TRUE = @HAVE_GTK_DOC_TRUE@ +HAVE_GTK_FALSE = @HAVE_GTK_FALSE@ +HAVE_GTK_TRUE = @HAVE_GTK_TRUE@ +HAVE_PIXBUF_FALSE = @HAVE_PIXBUF_FALSE@ +HAVE_PIXBUF_TRUE = @HAVE_PIXBUF_TRUE@ +HTML_DIR = @HTML_DIR@ +INCLUDEDIR = @INCLUDEDIR@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_AGE = @LT_AGE@ +LT_CURRENT = @LT_CURRENT@ +LT_RELEASE = @LT_RELEASE@ +LT_REVISION = @LT_REVISION@ +MAINT = @MAINT@ +MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ +MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ +MAKEINFO = @MAKEINFO@ +MODULEPATH = @MODULEPATH@ +OBJEXT = @OBJEXT@ +OS_WIN32_FALSE = @OS_WIN32_FALSE@ +OS_WIN32_TRUE = @OS_WIN32_TRUE@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PIXBUF_VIEW_TYPE = @PIXBUF_VIEW_TYPE@ +PKG_CONFIG = @PKG_CONFIG@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +THEMEPATH = @THEMEPATH@ +VERSION = @VERSION@ +WIN32_CFLAGS = @WIN32_CFLAGS@ +WIN32_LIBS = @WIN32_LIBS@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_F77 = @ac_ct_F77@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +blibdatadir = $(DATADIR) + +blibdata_DATA = \ + bml.dtd \ + blinkentheme.dtd + + +EXTRA_DIST = $(blibdata_DATA) +subdir = data +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +DIST_SOURCES = +DATA = $(blibdata_DATA) + +DIST_COMMON = $(srcdir)/Makefile.in Makefile.am +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu data/Makefile +Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool +uninstall-info-am: +blibdataDATA_INSTALL = $(INSTALL_DATA) +install-blibdataDATA: $(blibdata_DATA) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(blibdatadir) + @list='$(blibdata_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f="`echo $$p | sed -e 's|^.*/||'`"; \ + echo " $(blibdataDATA_INSTALL) $$d$$p $(DESTDIR)$(blibdatadir)/$$f"; \ + $(blibdataDATA_INSTALL) $$d$$p $(DESTDIR)$(blibdatadir)/$$f; \ + done + +uninstall-blibdataDATA: + @$(NORMAL_UNINSTALL) + @list='$(blibdata_DATA)'; for p in $$list; do \ + f="`echo $$p | sed -e 's|^.*/||'`"; \ + echo " rm -f $(DESTDIR)$(blibdatadir)/$$f"; \ + rm -f $(DESTDIR)$(blibdatadir)/$$f; \ + done +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = .. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(DATA) + +installdirs: + $(mkinstalldirs) $(DESTDIR)$(blibdatadir) +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-libtool + +dvi: dvi-am + +dvi-am: + +info: info-am + +info-am: + +install-data-am: install-blibdataDATA + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-blibdataDATA uninstall-info-am + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am info info-am install install-am install-blibdataDATA \ + install-data install-data-am install-exec install-exec-am \ + install-info install-info-am install-man install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-blibdataDATA uninstall-info-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/blib-1.1.7/data/blinkentheme.dtd b/blib-1.1.7/data/blinkentheme.dtd new file mode 100644 index 0000000..75b9551 --- /dev/null +++ b/blib-1.1.7/data/blinkentheme.dtd @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/blib-1.1.7/data/bml.dtd b/blib-1.1.7/data/bml.dtd new file mode 100644 index 0000000..b3c5b52 --- /dev/null +++ b/blib-1.1.7/data/bml.dtd @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/blib-1.1.7/debian/changelog b/blib-1.1.7/debian/changelog new file mode 100644 index 0000000..a8972c9 --- /dev/null +++ b/blib-1.1.7/debian/changelog @@ -0,0 +1,5 @@ +blib (1.1.0) unstable; urgency=low + + * unofficial debian packages + + -- Sven Neumann Mon, 22 Dec 2003 20:20:22 +0100 diff --git a/blib-1.1.7/debian/control b/blib-1.1.7/debian/control new file mode 100644 index 0000000..e166de4 --- /dev/null +++ b/blib-1.1.7/debian/control @@ -0,0 +1,70 @@ +Source: blib +Priority: optional +Maintainer: Sven Neumann +Build-Depends: debhelper (>> 3.0.0), autoconf +Standards-Version: 3.5.6 + +Package: libblib +Section: libs +Architecture: any +Depends: libglib2.0-0 +Description: a library of useful things to hack the Blinkenlights + blib contains some code that you will find useful if you want to + create any kind of software related to Blinkenlights, + +Package: libblib-dev +Section: libs +Architecture: any +Depends: libblib (= ${Source-Version}), libc6-dev, libglib2.0-dev +Section: devel +Description: Blinkenlights library, development files + blib contains some code that you will find useful if you want to + create any kind of software related to Blinkenlights, + . + This package contains the files needed to compile and link + programs which use blib. + +Package: libblib-directfb +Section: libs +Architecture: any +Depends: libblib (= ${Source-Version}), libdirectfb-0.9-19 +Description: Blinkenlights display library using DirectFB + blib contains some code that you will find useful if you want to + create any kind of software related to Blinkenlights, + . + This packages contains the DirectFB backend of the Blinkenlights + display widget. + +Package: libblib-directfb-dev +Section: libs +Architecture: any +Depends: libblib-dev (= ${Source-Version}), libdirectfb-dev +Description: Blinkenlights display library using DirectFB + blib contains some code that you will find useful if you want to + create any kind of software related to Blinkenlights, + . + This packages contains the files needed to compile and link programs + that use the DirectFB backend of the Blinkenlights display widget. + +Package: libblib-gtk +Section: libs +Architecture: any +Depends: ${shlibs:Depends}, libblib (= ${Source-Version}), libgtk2.0-0 +Description: Blinkenlights display library using GTK+ + blib contains some code that you will find useful if you want to + create any kind of software related to Blinkenlights, + . + This packages contains the DirectFB backend of the Blinkenlights + display widget. + +Package: libblib-gtk-dev +Section: libs +Architecture: any +Depends: libblib-dev (= ${Source-Version}), libgtk2.0-dev +Description: Blinkenlights display library using GTK+ + blib contains some code that you will find useful if you want to + create any kind of software related to Blinkenlights, + . + This packages contains the files needed to compile and link programs + that use the GTK+ backend of the Blinkenlights display widget. + diff --git a/blib-1.1.7/debian/copyright b/blib-1.1.7/debian/copyright new file mode 100644 index 0000000..2d02824 --- /dev/null +++ b/blib-1.1.7/debian/copyright @@ -0,0 +1,29 @@ +This package was debianized by Sven Neumann +Mon Dec 22 20:22:42 CET 2003 + +It was downloaded from http://sven.gimp.org/blinkenlights + +Upstream Authors: + + Sven Neumann + Michael Natterer + Daniel Mack + +Copyright: + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +On Debian GNU/Linux systems, the complete text of the GNU General +Public License can be found in `/usr/share/common-licenses/GPL'. diff --git a/blib-1.1.7/debian/dirs b/blib-1.1.7/debian/dirs new file mode 100644 index 0000000..73752c9 --- /dev/null +++ b/blib-1.1.7/debian/dirs @@ -0,0 +1 @@ +usr diff --git a/blib-1.1.7/debian/docs b/blib-1.1.7/debian/docs new file mode 100644 index 0000000..ba8894c --- /dev/null +++ b/blib-1.1.7/debian/docs @@ -0,0 +1,2 @@ +README + diff --git a/blib-1.1.7/debian/files b/blib-1.1.7/debian/files new file mode 100644 index 0000000..9ca0f06 --- /dev/null +++ b/blib-1.1.7/debian/files @@ -0,0 +1,6 @@ +libblib_1.1.0_i386.deb libs optional +libblib-dev_1.1.0_i386.deb devel optional +libblib-directfb_1.1.0_i386.deb libs optional +libblib-directfb-dev_1.1.0_i386.deb libs optional +libblib-gtk_1.1.0_i386.deb libs optional +libblib-gtk-dev_1.1.0_i386.deb libs optional diff --git a/blib-1.1.7/debian/libblib-dev.files b/blib-1.1.7/debian/libblib-dev.files new file mode 100644 index 0000000..f390f00 --- /dev/null +++ b/blib-1.1.7/debian/libblib-dev.files @@ -0,0 +1,4 @@ +usr/include/* +usr/lib/libb.a +usr/lib/libb.la +usr/lib/pkgconfig/blib.pc diff --git a/blib-1.1.7/debian/libblib-directfb-dev.files b/blib-1.1.7/debian/libblib-directfb-dev.files new file mode 100644 index 0000000..070b9d4 --- /dev/null +++ b/blib-1.1.7/debian/libblib-directfb-dev.files @@ -0,0 +1,3 @@ +usr/lib/libb-directfb.a +usr/lib/libb-directfb.la +usr/lib/pkgconfig/blib-directfb.pc diff --git a/blib-1.1.7/debian/libblib-directfb.files b/blib-1.1.7/debian/libblib-directfb.files new file mode 100644 index 0000000..3e4c12c --- /dev/null +++ b/blib-1.1.7/debian/libblib-directfb.files @@ -0,0 +1,2 @@ +usr/lib/libb-directfb*.so.* + diff --git a/blib-1.1.7/debian/libblib-gtk-dev.files b/blib-1.1.7/debian/libblib-gtk-dev.files new file mode 100644 index 0000000..1d3d8fa --- /dev/null +++ b/blib-1.1.7/debian/libblib-gtk-dev.files @@ -0,0 +1,3 @@ +usr/lib/libb-gtk.a +usr/lib/libb-gtk.la +usr/lib/pkgconfig/blib-gtk.pc diff --git a/blib-1.1.7/debian/libblib-gtk.files b/blib-1.1.7/debian/libblib-gtk.files new file mode 100644 index 0000000..2b0b7dd --- /dev/null +++ b/blib-1.1.7/debian/libblib-gtk.files @@ -0,0 +1 @@ +usr/lib/libb-gtk*.so.* diff --git a/blib-1.1.7/debian/libblib.files b/blib-1.1.7/debian/libblib.files new file mode 100644 index 0000000..cdaa983 --- /dev/null +++ b/blib-1.1.7/debian/libblib.files @@ -0,0 +1,3 @@ +usr/lib/libb-${Source-Version}.so.* +usr/lib/blib/module/*.so +usr/share/blib* diff --git a/blib-1.1.7/debian/rules b/blib-1.1.7/debian/rules new file mode 100755 index 0000000..95f77f4 --- /dev/null +++ b/blib-1.1.7/debian/rules @@ -0,0 +1,89 @@ +#!/usr/bin/make -f + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + +# This is the debhelper compatability version to use. +export DH_COMPAT=3 + +DEVPACKAGE=$(shell dh_listpackages | grep -- -udeb.*dev$$) +VERSION=$(shell dpkg-parsechangelog | grep ^Version: | cut -d ' ' -f 2) +ARCH=$(shell dpkg --print-architecture) + + +configure: configure-dist + +configure-dist: $(BUILD_DIST)/configure-stamp + + +$(BUILD_DIST)/configure-stamp: + dh_testdir + + mkdir -p $(BUILD_DIST) + + cd $(BUILD_DIST) && \ + ../configure --prefix=/usr --disable-gtk-doc + + touch $@ + +build: build-dist + +build-dist: configure-dist $(BUILD_DIST)/build-stamp + +$(BUILD_DIST)/build-stamp: + dh_testdir + + $(MAKE) -C $(BUILD_DIST) + + touch $@ + +clean: + dh_testdir + dh_testroot + + -$(MAKE) distclean + -rm -f install-test-stamp + -rm -rf $(BUILD_DIST) + + dh_clean + +install: install-dist + +install-test: install-test-stamp +install-test-stamp: + dh_testdir + dh_testroot + dh_clean -k + dh_installdirs + + touch $@ + +install-dist: build-dist install-test + + $(MAKE) -C $(BUILD_DIST) install prefix=$(CURDIR)/debian/tmp/usr + +# Build architecture-independent files here. +binary-indep: build install +# We have nothing to do by default. + +# Build architecture-dependent files here. +binary-arch: build install + dh_testdir + dh_testroot + + dh_movefiles + dh_installdocs + dh_installchangelogs ChangeLog + dh_link + dh_strip + dh_compress + dh_fixperms + dh_makeshlibs + dh_installdeb + dh_shlibdeps + dh_gencontrol + dh_md5sums + dh_builddeb + +binary: binary-indep binary-arch +.PHONY: build clean binary-indep binary-arch binary install configure diff --git a/blib-1.1.7/depcomp b/blib-1.1.7/depcomp new file mode 100755 index 0000000..edb5d38 --- /dev/null +++ b/blib-1.1.7/depcomp @@ -0,0 +1,479 @@ +#! /bin/sh + +# depcomp - compile a program generating dependencies as side-effects +# Copyright 1999, 2000, 2003 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Alexandre Oliva . + +if test -z "$depmode" || test -z "$source" || test -z "$object"; then + echo "depcomp: Variables source, object and depmode must be set" 1>&2 + exit 1 +fi +# `libtool' can also be set to `yes' or `no'. + +if test -z "$depfile"; then + base=`echo "$object" | sed -e 's,^.*/,,' -e 's,\.\([^.]*\)$,.P\1,'` + dir=`echo "$object" | sed 's,/.*$,/,'` + if test "$dir" = "$object"; then + dir= + fi + # FIXME: should be _deps on DOS. + depfile="$dir.deps/$base" +fi + +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# Some modes work just like other modes, but use different flags. We +# parameterize here, but still list the modes in the big case below, +# to make depend.m4 easier to write. Note that we *cannot* use a case +# here, because this file can only contain one case statement. +if test "$depmode" = hp; then + # HP compiler uses -M and no extra arg. + gccflag=-M + depmode=gcc +fi + +if test "$depmode" = dashXmstdout; then + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout +fi + +case "$depmode" in +gcc3) +## gcc 3 implements dependency tracking that does exactly what +## we want. Yay! Note: for some reason libtool 1.4 doesn't like +## it if -MD -MP comes after the -MF stuff. Hmm. + "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## There are various ways to get dependency output from gcc. Here's +## why we pick this rather obscure method: +## - Don't want to use -MD because we'd like the dependencies to end +## up in a subdir. Having to rename by hand is ugly. +## (We might end up doing this anyway to support other compilers.) +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like +## -MM, not -M (despite what the docs say). +## - Using -M directly means running the compiler twice (even worse +## than renaming). + if test -z "$gccflag"; then + gccflag=-MD, + fi + "$@" -Wp,"$gccflag$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz +## The second -e expression handles DOS-style file names with drive letters. + sed -e 's/^[^:]*: / /' \ + -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" +## This next piece of magic avoids the `deleted header file' problem. +## The problem is that when a header file which appears in a .P file +## is deleted, the dependency causes make to die (because there is +## typically no way to rebuild the header). We avoid this by adding +## dummy dependencies for each header file. Too bad gcc doesn't do +## this for us directly. + tr ' ' ' +' < "$tmpdepfile" | +## Some versions of gcc put a space before the `:'. On the theory +## that the space means something, we add a space to the output as +## well. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +sgi) + if test "$libtool" = yes; then + "$@" "-Wp,-MDupdate,$tmpdepfile" + else + "$@" -MDupdate "$tmpdepfile" + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + + if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files + echo "$object : \\" > "$depfile" + + # Clip off the initial element (the dependent). Don't try to be + # clever and replace this with sed code, as IRIX sed won't handle + # lines with more than a fixed number of characters (4096 in + # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; + # the IRIX cc adds comments like `#:fec' to the end of the + # dependency line. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ + tr ' +' ' ' >> $depfile + echo >> $depfile + + # The second pass generates a dummy entry for each header file. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> $depfile + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +aix) + # The C for AIX Compiler uses -M and outputs the dependencies + # in a .u file. In older versions, this file always lives in the + # current directory. Also, the AIX compiler puts `$object:' at the + # start of each line; $object doesn't have directory information. + # Version 6 uses the directory in both cases. + stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` + tmpdepfile="$stripped.u" + if test "$libtool" = yes; then + "$@" -Wc,-M + else + "$@" -M + fi + stat=$? + + if test -f "$tmpdepfile"; then : + else + stripped=`echo "$stripped" | sed 's,^.*/,,'` + tmpdepfile="$stripped.u" + fi + + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + + if test -f "$tmpdepfile"; then + outname="$stripped.o" + # Each line is of the form `foo.o: dependent.h'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" + sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +icc) + # Intel's C compiler understands `-MD -MF file'. However on + # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c + # ICC 7.0 will fill foo.d with something like + # foo.o: sub/foo.c + # foo.o: sub/foo.h + # which is wrong. We want: + # sub/foo.o: sub/foo.c + # sub/foo.o: sub/foo.h + # sub/foo.c: + # sub/foo.h: + # ICC 7.1 will output + # foo.o: sub/foo.c sub/foo.h + # and will wrap long lines using \ : + # foo.o: sub/foo.c ... \ + # sub/foo.h ... \ + # ... + + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each line is of the form `foo.o: dependent.h', + # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | + sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +tru64) + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in `foo.d' instead, so we check for that too. + # Subdirectories are respected. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + + if test "$libtool" = yes; then + tmpdepfile1="$dir.libs/$base.lo.d" + tmpdepfile2="$dir.libs/$base.d" + "$@" -Wc,-MD + else + tmpdepfile1="$dir$base.o.d" + tmpdepfile2="$dir$base.d" + "$@" -MD + fi + + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" + exit $stat + fi + + if test -f "$tmpdepfile1"; then + tmpdepfile="$tmpdepfile1" + else + tmpdepfile="$tmpdepfile2" + fi + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a tab and a space in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +#nosideeffect) + # This comment above is used by automake to tell side-effect + # dependency tracking mechanisms from slower ones. + +dashmstdout) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + test -z "$dashmflag" && dashmflag=-M + # Require at least two characters before searching for `:' + # in the target name. This is to cope with DOS-style filenames: + # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. + "$@" $dashmflag | + sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + tr ' ' ' +' < "$tmpdepfile" | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +dashXmstdout) + # This case only exists to satisfy depend.m4. It is never actually + # run, as this mode is specially recognized in the preamble. + exit 1 + ;; + +makedepend) + "$@" || exit $? + # Remove any Libtool call + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + # X makedepend + shift + cleared=no + for arg in "$@"; do + case $cleared in + no) + set ""; shift + cleared=yes ;; + esac + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift ;; + # Strip any option that makedepend may not understand. Remove + # the object too, otherwise makedepend will parse it as a source file. + -*|$object) + ;; + *) + set fnord "$@" "$arg"; shift ;; + esac + done + obj_suffix="`echo $object | sed 's/^.*\././'`" + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + sed '1,2d' "$tmpdepfile" | tr ' ' ' +' | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" "$tmpdepfile".bak + ;; + +cpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + "$@" -E | + sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | + sed '$ s: \\$::' > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + cat < "$tmpdepfile" >> "$depfile" + sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvisualcpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o, + # because we must use -o when running libtool. + "$@" || exit $? + IFS=" " + for arg + do + case "$arg" in + "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") + set fnord "$@" + shift + shift + ;; + *) + set fnord "$@" "$arg" + shift + shift + ;; + esac + done + "$@" -E | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" + echo " " >> "$depfile" + . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 diff --git a/blib-1.1.7/docs/Makefile.am b/blib-1.1.7/docs/Makefile.am new file mode 100644 index 0000000..e539c08 --- /dev/null +++ b/blib-1.1.7/docs/Makefile.am @@ -0,0 +1,3 @@ +## Process this file with automake to produce Makefile.in + +SUBDIRS = reference diff --git a/blib-1.1.7/docs/Makefile.in b/blib-1.1.7/docs/Makefile.in new file mode 100644 index 0000000..7288979 --- /dev/null +++ b/blib-1.1.7/docs/Makefile.in @@ -0,0 +1,489 @@ +# Makefile.in generated by automake 1.7.9 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = .. + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +AA_LIBS = @AA_LIBS@ +AA_VIEW_TYPE = @AA_VIEW_TYPE@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BLIB_BINARY_AGE = @BLIB_BINARY_AGE@ +BLIB_INTERFACE_AGE = @BLIB_INTERFACE_AGE@ +BLIB_MAJOR_VERSION = @BLIB_MAJOR_VERSION@ +BLIB_MICRO_VERSION = @BLIB_MICRO_VERSION@ +BLIB_MINOR_VERSION = @BLIB_MINOR_VERSION@ +BLIB_VERSION = @BLIB_VERSION@ +BUILD_MODULES_FALSE = @BUILD_MODULES_FALSE@ +BUILD_MODULES_TRUE = @BUILD_MODULES_TRUE@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIR = @DATADIR@ +DB2HTML = @DB2HTML@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DIRECTFB_CFLAGS = @DIRECTFB_CFLAGS@ +DIRECTFB_LIBS = @DIRECTFB_LIBS@ +DIRECTFB_VIEW_TYPE = @DIRECTFB_VIEW_TYPE@ +ECHO = @ECHO@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ENABLE_GTK_DOC_FALSE = @ENABLE_GTK_DOC_FALSE@ +ENABLE_GTK_DOC_TRUE = @ENABLE_GTK_DOC_TRUE@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ +GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ +GLIB_LIBS = @GLIB_LIBS@ +GLIB_MKENUMS = @GLIB_MKENUMS@ +GOBJECT_QUERY = @GOBJECT_QUERY@ +GTKDOC = @GTKDOC@ +GTK_CFLAGS = @GTK_CFLAGS@ +GTK_LIBS = @GTK_LIBS@ +GTK_VIEW_TYPE = @GTK_VIEW_TYPE@ +HAVE_AA_FALSE = @HAVE_AA_FALSE@ +HAVE_AA_TRUE = @HAVE_AA_TRUE@ +HAVE_DIRECTFB_FALSE = @HAVE_DIRECTFB_FALSE@ +HAVE_DIRECTFB_TRUE = @HAVE_DIRECTFB_TRUE@ +HAVE_DOCBOOK_FALSE = @HAVE_DOCBOOK_FALSE@ +HAVE_DOCBOOK_TRUE = @HAVE_DOCBOOK_TRUE@ +HAVE_GTK_DOC = @HAVE_GTK_DOC@ +HAVE_GTK_DOC_FALSE = @HAVE_GTK_DOC_FALSE@ +HAVE_GTK_DOC_TRUE = @HAVE_GTK_DOC_TRUE@ +HAVE_GTK_FALSE = @HAVE_GTK_FALSE@ +HAVE_GTK_TRUE = @HAVE_GTK_TRUE@ +HAVE_PIXBUF_FALSE = @HAVE_PIXBUF_FALSE@ +HAVE_PIXBUF_TRUE = @HAVE_PIXBUF_TRUE@ +HTML_DIR = @HTML_DIR@ +INCLUDEDIR = @INCLUDEDIR@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_AGE = @LT_AGE@ +LT_CURRENT = @LT_CURRENT@ +LT_RELEASE = @LT_RELEASE@ +LT_REVISION = @LT_REVISION@ +MAINT = @MAINT@ +MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ +MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ +MAKEINFO = @MAKEINFO@ +MODULEPATH = @MODULEPATH@ +OBJEXT = @OBJEXT@ +OS_WIN32_FALSE = @OS_WIN32_FALSE@ +OS_WIN32_TRUE = @OS_WIN32_TRUE@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PIXBUF_VIEW_TYPE = @PIXBUF_VIEW_TYPE@ +PKG_CONFIG = @PKG_CONFIG@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +THEMEPATH = @THEMEPATH@ +VERSION = @VERSION@ +WIN32_CFLAGS = @WIN32_CFLAGS@ +WIN32_LIBS = @WIN32_LIBS@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_F77 = @ac_ct_F77@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +SUBDIRS = reference +subdir = docs +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +DIST_SOURCES = + +RECURSIVE_TARGETS = info-recursive dvi-recursive pdf-recursive \ + ps-recursive install-info-recursive uninstall-info-recursive \ + all-recursive install-data-recursive install-exec-recursive \ + installdirs-recursive install-recursive uninstall-recursive \ + check-recursive installcheck-recursive +DIST_COMMON = $(srcdir)/Makefile.in Makefile.am +DIST_SUBDIRS = $(SUBDIRS) +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu docs/Makefile +Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool +uninstall-info-am: + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @set fnord $$MAKEFLAGS; amf=$$2; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +mostlyclean-recursive clean-recursive distclean-recursive \ +maintainer-clean-recursive: + @set fnord $$MAKEFLAGS; amf=$$2; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ETAGS = etags +ETAGSFLAGS = + +CTAGS = ctags +CTAGSFLAGS = + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if (etags --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + else \ + include_option=--include; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -f $$subdir/TAGS && \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)$$tags$$unique" \ + || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique + +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = .. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d $(distdir)/$$subdir \ + || mkdir $(distdir)/$$subdir \ + || exit 1; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" \ + distdir=../$(distdir)/$$subdir \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: + +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-libtool \ + distclean-tags + +dvi: dvi-recursive + +dvi-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-recursive + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-info-am + +uninstall-info: uninstall-info-recursive + +.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am clean \ + clean-generic clean-libtool clean-recursive ctags \ + ctags-recursive distclean distclean-generic distclean-libtool \ + distclean-recursive distclean-tags distdir dvi dvi-am \ + dvi-recursive info info-am info-recursive install install-am \ + install-data install-data-am install-data-recursive \ + install-exec install-exec-am install-exec-recursive \ + install-info install-info-am install-info-recursive install-man \ + install-recursive install-strip installcheck installcheck-am \ + installdirs installdirs-am installdirs-recursive \ + maintainer-clean maintainer-clean-generic \ + maintainer-clean-recursive mostlyclean mostlyclean-generic \ + mostlyclean-libtool mostlyclean-recursive pdf pdf-am \ + pdf-recursive ps ps-am ps-recursive tags tags-recursive \ + uninstall uninstall-am uninstall-info-am \ + uninstall-info-recursive uninstall-recursive + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/blib-1.1.7/docs/reference/Makefile.am b/blib-1.1.7/docs/reference/Makefile.am new file mode 100644 index 0000000..351ec34 --- /dev/null +++ b/blib-1.1.7/docs/reference/Makefile.am @@ -0,0 +1,220 @@ +## Process this file with automake to produce Makefile.in + +# The name of the module. +DOC_MODULE = blib + +# The top-level SGML file. +DOC_MAIN_SGML_FILE = blib-docs.sgml + +# The directory containing the source code. Relative to $(srcdir) +DOC_SOURCE_DIR = ../.. + +# Extra options to supply to gtkdoc-scan +SCAN_OPTIONS = --deprecated-guards="B_DISABLE_DEPRECATED" + +# Extra options to supply to gtkdoc-mkdb +MKDB_OPTIONS = --sgml-mode --output-format=xml + +# Extra options to supply to gtkdoc-fixref +FIXXREF_OPTIONS = + +# Used for dependencies +HFILE_GLOB = $(top_srcdir)/blib/*.h $(top_srcdir)/gfx/*.h +CFILE_GLOB = $(top_srcdir)/blib/*.c $(top_srcdir)/gfx/*.c + +# Headers to ignore +IGNORE_HFILES = \ + config.h \ + blib-directfb.h \ + blib-gtk.h \ + bmarshal.h \ + bmovie-bml-parser.h \ + bmovie-gif-parser.h \ + btheme-parser.h \ + gif-load.h \ + gif-save.h \ + gif-types.h \ + digits.h + +# Extra files to add when scanning +EXTRA_HFILES = + +# Images to copy into HTML directory +HTML_IMAGES = + +# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE) +content_files = + +# Other files to distribute +extra_files = + +# CFLAGS and LDFLAGS for compiling scan program. Only needed +# if $(DOC_MODULE).types is non-empty. +GTKDOC_CFLAGS = \ + -I$(top_srcdir) \ + @GLIB_CFLAGS@ \ + @GDK_PIXBUF_CFLAGS@ \ + @GTK_CFLAGS@ \ + @DIRECTFB_CFLAGS@ + +if HAVE_AA +LIBB_AA=$(top_builddir)/gfx/libb-aa.la @AA_LIBS@ +endif + +if HAVE_DIRECTFB +LIBB_DIRECTFB=$(top_builddir)/gfx/libb-directfb.la @DIRECTFB_LIBS@ +endif + +if HAVE_GTK +LIBB_GTK=$(top_builddir)/gfx/libb-gtk.la @GTK_LIBS@ +endif + +if HAVE_PIXBUF +LIBB_PIXBUF=$(top_builddir)/gfx/libb-pixbuf.la @GDK_PIXBUF_LIBS@ +endif + +GTKDOC_LIBS = \ + $(top_builddir)/blib/libb.la \ + $(LIBB_AA) \ + $(LIBB_DIRECTFB) \ + $(LIBB_PIXBUF) \ + $(LIBB_GTK) \ + @GLIB_LIBS@ + +# Commands for compiling and linking +GTKDOC_CC = $(LIBTOOL) --mode=compile $(CC) +GTKDOC_LD = $(LIBTOOL) --mode=link $(CC) + + +#################################### +# Everything below here is generic # +#################################### + +# We set GPATH here; this gives us semantics for GNU make +# which are more like other make's VPATH, when it comes to +# whether a source that is a target of one rule is then +# searched for in VPATH/GPATH. +# +GPATH = $(srcdir) + +TARGET_DIR=$(HTML_DIR)/$(DOC_MODULE) + +EXTRA_DIST = \ + $(content_files) \ + $(extra_files) \ + $(HTML_IMAGES) \ + $(DOC_MAIN_SGML_FILE) \ + $(DOC_MODULE).types.in \ + $(DOC_MODULE)-sections.txt \ + $(DOC_MODULE)-overrides.txt + +DOC_STAMPS=scan-build.stamp tmpl-build.stamp sgml-build.stamp html-build.stamp \ + $(srcdir)/tmpl.stamp $(srcdir)/sgml.stamp $(srcdir)/html.stamp + +SCANOBJ_FILES = \ + $(DOC_MODULE).args \ + $(DOC_MODULE).hierarchy \ + $(DOC_MODULE).interfaces \ + $(DOC_MODULE).prerequisites \ + $(DOC_MODULE).signals + +if ENABLE_GTK_DOC +all-local: html-build.stamp + +#### scan #### + +scan-build.stamp: $(HFILE_GLOB) $(DOC_MODULE).types + @echo '*** Scanning header files ***' + if grep -l '^..*$$' $(srcdir)/$(DOC_MODULE).types > /dev/null ; then \ + CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" CFLAGS="$(GTKDOC_CFLAGS)" LDFLAGS="$(GTKDOC_LIBS)" gtkdoc-scangobj --module=$(DOC_MODULE) --output-dir=$(srcdir) ; \ + else \ + cd $(srcdir) ; \ + for i in $(SCANOBJ_FILES) ; do \ + test -f $$i || touch $$i ; \ + done \ + fi + cd $(srcdir) && \ + gtkdoc-scan --module=$(DOC_MODULE) --source-dir=$(DOC_SOURCE_DIR) --ignore-headers="$(IGNORE_HFILES)" $(SCAN_OPTIONS) $(EXTRA_HFILES) + touch scan-build.stamp + +$(DOC_MODULE)-decl.txt $(SCANOBJ_FILES): scan-build.stamp + @true + +#### templates #### + +tmpl-build.stamp: $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt + @echo '*** Rebuilding template files ***' + cd $(srcdir) && gtkdoc-mktmpl --module=$(DOC_MODULE) + touch tmpl-build.stamp + +tmpl.stamp: tmpl-build.stamp + @true + +#### sgml #### + +sgml-build.stamp: tmpl.stamp $(CFILE_GLOB) $(srcdir)/tmpl/*.sgml + @echo '*** Building SGML ***' + cd $(srcdir) && \ + gtkdoc-mkdb --module=$(DOC_MODULE) --source-dir=$(DOC_SOURCE_DIR) $(MKDB_OPTIONS) + touch sgml-build.stamp + +sgml.stamp: sgml-build.stamp + @true + +#### html #### + +html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) + @echo '*** Building HTML ***' + rm -rf $(srcdir)/html + mkdir $(srcdir)/html + cd $(srcdir)/html && gtkdoc-mkhtml $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE) + test "x$(HTML_IMAGES)" = "x" || ( cd $(srcdir) && cp $(HTML_IMAGES) html ) + @echo '-- Fixing Crossreferences' + cd $(srcdir) && gtkdoc-fixxref --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS) + touch html-build.stamp +endif + +############## + +clean-local: + rm -f *~ *.bak $(SCANOBJ_FILES) *-unused.txt $(DOC_STAMPS) + +maintainer-clean-local: clean + cd $(srcdir) && rm -rf sgml html $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt + +install-data-local: + $(mkinstalldirs) $(DESTDIR)$(TARGET_DIR) + (installfiles=`echo $(srcdir)/html/*`; \ + if test "$$installfiles" = '$(srcdir)/html/*'; \ + then echo '-- Nothing to install' ; \ + else \ + for i in $$installfiles; do \ + echo '-- Installing '$$i ; \ + $(INSTALL_DATA) $$i $(DESTDIR)$(TARGET_DIR); \ + done; \ + echo '-- Installing $(srcdir)/html/index.sgml' ; \ + $(INSTALL_DATA) $(srcdir)/html/index.sgml $(DESTDIR)$(TARGET_DIR); \ + fi) + +# +# Require gtk-doc when making dist +# +if ENABLE_GTK_DOC +dist-check-gtkdoc: +else +dist-check-gtkdoc: + @echo "*** gtk-doc must be installed and enabled in order to make dist" + @false +endif + +dist-hook: dist-check-gtkdoc dist-hook-local + mkdir $(distdir)/tmpl + mkdir $(distdir)/xml + mkdir $(distdir)/html + -cp $(srcdir)/tmpl/*.sgml $(distdir)/tmpl + -cp $(srcdir)/xml/*.xml $(distdir)/xml + -cp $(srcdir)/html/* $(distdir)/html + +.PHONY : dist-hook-local + + diff --git a/blib-1.1.7/docs/reference/Makefile.in b/blib-1.1.7/docs/reference/Makefile.in new file mode 100644 index 0000000..2481c36 --- /dev/null +++ b/blib-1.1.7/docs/reference/Makefile.in @@ -0,0 +1,557 @@ +# Makefile.in generated by automake 1.7.9 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +AA_LIBS = @AA_LIBS@ +AA_VIEW_TYPE = @AA_VIEW_TYPE@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BLIB_BINARY_AGE = @BLIB_BINARY_AGE@ +BLIB_INTERFACE_AGE = @BLIB_INTERFACE_AGE@ +BLIB_MAJOR_VERSION = @BLIB_MAJOR_VERSION@ +BLIB_MICRO_VERSION = @BLIB_MICRO_VERSION@ +BLIB_MINOR_VERSION = @BLIB_MINOR_VERSION@ +BLIB_VERSION = @BLIB_VERSION@ +BUILD_MODULES_FALSE = @BUILD_MODULES_FALSE@ +BUILD_MODULES_TRUE = @BUILD_MODULES_TRUE@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIR = @DATADIR@ +DB2HTML = @DB2HTML@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DIRECTFB_CFLAGS = @DIRECTFB_CFLAGS@ +DIRECTFB_LIBS = @DIRECTFB_LIBS@ +DIRECTFB_VIEW_TYPE = @DIRECTFB_VIEW_TYPE@ +ECHO = @ECHO@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ENABLE_GTK_DOC_FALSE = @ENABLE_GTK_DOC_FALSE@ +ENABLE_GTK_DOC_TRUE = @ENABLE_GTK_DOC_TRUE@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ +GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ +GLIB_LIBS = @GLIB_LIBS@ +GLIB_MKENUMS = @GLIB_MKENUMS@ +GOBJECT_QUERY = @GOBJECT_QUERY@ +GTKDOC = @GTKDOC@ +GTK_CFLAGS = @GTK_CFLAGS@ +GTK_LIBS = @GTK_LIBS@ +GTK_VIEW_TYPE = @GTK_VIEW_TYPE@ +HAVE_AA_FALSE = @HAVE_AA_FALSE@ +HAVE_AA_TRUE = @HAVE_AA_TRUE@ +HAVE_DIRECTFB_FALSE = @HAVE_DIRECTFB_FALSE@ +HAVE_DIRECTFB_TRUE = @HAVE_DIRECTFB_TRUE@ +HAVE_DOCBOOK_FALSE = @HAVE_DOCBOOK_FALSE@ +HAVE_DOCBOOK_TRUE = @HAVE_DOCBOOK_TRUE@ +HAVE_GTK_DOC = @HAVE_GTK_DOC@ +HAVE_GTK_DOC_FALSE = @HAVE_GTK_DOC_FALSE@ +HAVE_GTK_DOC_TRUE = @HAVE_GTK_DOC_TRUE@ +HAVE_GTK_FALSE = @HAVE_GTK_FALSE@ +HAVE_GTK_TRUE = @HAVE_GTK_TRUE@ +HAVE_PIXBUF_FALSE = @HAVE_PIXBUF_FALSE@ +HAVE_PIXBUF_TRUE = @HAVE_PIXBUF_TRUE@ +HTML_DIR = @HTML_DIR@ +INCLUDEDIR = @INCLUDEDIR@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_AGE = @LT_AGE@ +LT_CURRENT = @LT_CURRENT@ +LT_RELEASE = @LT_RELEASE@ +LT_REVISION = @LT_REVISION@ +MAINT = @MAINT@ +MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ +MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ +MAKEINFO = @MAKEINFO@ +MODULEPATH = @MODULEPATH@ +OBJEXT = @OBJEXT@ +OS_WIN32_FALSE = @OS_WIN32_FALSE@ +OS_WIN32_TRUE = @OS_WIN32_TRUE@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PIXBUF_VIEW_TYPE = @PIXBUF_VIEW_TYPE@ +PKG_CONFIG = @PKG_CONFIG@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +THEMEPATH = @THEMEPATH@ +VERSION = @VERSION@ +WIN32_CFLAGS = @WIN32_CFLAGS@ +WIN32_LIBS = @WIN32_LIBS@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_F77 = @ac_ct_F77@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +# The name of the module. +DOC_MODULE = blib + +# The top-level SGML file. +DOC_MAIN_SGML_FILE = blib-docs.sgml + +# The directory containing the source code. Relative to $(srcdir) +DOC_SOURCE_DIR = ../.. + +# Extra options to supply to gtkdoc-scan +SCAN_OPTIONS = --deprecated-guards="B_DISABLE_DEPRECATED" + +# Extra options to supply to gtkdoc-mkdb +MKDB_OPTIONS = --sgml-mode --output-format=xml + +# Extra options to supply to gtkdoc-fixref +FIXXREF_OPTIONS = + +# Used for dependencies +HFILE_GLOB = $(top_srcdir)/blib/*.h $(top_srcdir)/gfx/*.h +CFILE_GLOB = $(top_srcdir)/blib/*.c $(top_srcdir)/gfx/*.c + +# Headers to ignore +IGNORE_HFILES = \ + config.h \ + blib-directfb.h \ + blib-gtk.h \ + bmarshal.h \ + bmovie-bml-parser.h \ + bmovie-gif-parser.h \ + btheme-parser.h \ + gif-load.h \ + gif-save.h \ + gif-types.h \ + digits.h + + +# Extra files to add when scanning +EXTRA_HFILES = + +# Images to copy into HTML directory +HTML_IMAGES = + +# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE) +content_files = + +# Other files to distribute +extra_files = + +# CFLAGS and LDFLAGS for compiling scan program. Only needed +# if $(DOC_MODULE).types is non-empty. +GTKDOC_CFLAGS = \ + -I$(top_srcdir) \ + @GLIB_CFLAGS@ \ + @GDK_PIXBUF_CFLAGS@ \ + @GTK_CFLAGS@ \ + @DIRECTFB_CFLAGS@ + + +@HAVE_AA_TRUE@LIBB_AA = $(top_builddir)/gfx/libb-aa.la @AA_LIBS@ + +@HAVE_DIRECTFB_TRUE@LIBB_DIRECTFB = $(top_builddir)/gfx/libb-directfb.la @DIRECTFB_LIBS@ + +@HAVE_GTK_TRUE@LIBB_GTK = $(top_builddir)/gfx/libb-gtk.la @GTK_LIBS@ + +@HAVE_PIXBUF_TRUE@LIBB_PIXBUF = $(top_builddir)/gfx/libb-pixbuf.la @GDK_PIXBUF_LIBS@ + +GTKDOC_LIBS = \ + $(top_builddir)/blib/libb.la \ + $(LIBB_AA) \ + $(LIBB_DIRECTFB) \ + $(LIBB_PIXBUF) \ + $(LIBB_GTK) \ + @GLIB_LIBS@ + + +# Commands for compiling and linking +GTKDOC_CC = $(LIBTOOL) --mode=compile $(CC) +GTKDOC_LD = $(LIBTOOL) --mode=link $(CC) + +#################################### +# Everything below here is generic # +#################################### + +# We set GPATH here; this gives us semantics for GNU make +# which are more like other make's VPATH, when it comes to +# whether a source that is a target of one rule is then +# searched for in VPATH/GPATH. +# +GPATH = $(srcdir) + +TARGET_DIR = $(HTML_DIR)/$(DOC_MODULE) + +EXTRA_DIST = \ + $(content_files) \ + $(extra_files) \ + $(HTML_IMAGES) \ + $(DOC_MAIN_SGML_FILE) \ + $(DOC_MODULE).types.in \ + $(DOC_MODULE)-sections.txt \ + $(DOC_MODULE)-overrides.txt + + +DOC_STAMPS = scan-build.stamp tmpl-build.stamp sgml-build.stamp html-build.stamp \ + $(srcdir)/tmpl.stamp $(srcdir)/sgml.stamp $(srcdir)/html.stamp + + +SCANOBJ_FILES = \ + $(DOC_MODULE).args \ + $(DOC_MODULE).hierarchy \ + $(DOC_MODULE).interfaces \ + $(DOC_MODULE).prerequisites \ + $(DOC_MODULE).signals + +subdir = docs/reference +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = blib.types version +DIST_SOURCES = +DIST_COMMON = $(srcdir)/Makefile.in Makefile.am blib.types.in \ + version.in +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu docs/reference/Makefile +Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) +blib.types: $(top_builddir)/config.status blib.types.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +version: $(top_builddir)/config.status version.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool +uninstall-info-am: +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = ../.. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile all-local + +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-local mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-libtool + +dvi: dvi-am + +dvi-am: + +info: info-am + +info-am: + +install-data-am: install-data-local + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic \ + maintainer-clean-local + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: all all-am all-local check check-am clean clean-generic \ + clean-libtool clean-local distclean distclean-generic \ + distclean-libtool distdir dvi dvi-am info info-am install \ + install-am install-data install-data-am install-data-local \ + install-exec install-exec-am install-info install-info-am \ + install-man install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + maintainer-clean-local mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-info-am + + +@ENABLE_GTK_DOC_TRUE@all-local: html-build.stamp + +#### scan #### + +@ENABLE_GTK_DOC_TRUE@scan-build.stamp: $(HFILE_GLOB) $(DOC_MODULE).types +@ENABLE_GTK_DOC_TRUE@ @echo '*** Scanning header files ***' +@ENABLE_GTK_DOC_TRUE@ if grep -l '^..*$$' $(srcdir)/$(DOC_MODULE).types > /dev/null ; then \ +@ENABLE_GTK_DOC_TRUE@ CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" CFLAGS="$(GTKDOC_CFLAGS)" LDFLAGS="$(GTKDOC_LIBS)" gtkdoc-scangobj --module=$(DOC_MODULE) --output-dir=$(srcdir) ; \ +@ENABLE_GTK_DOC_TRUE@ else \ +@ENABLE_GTK_DOC_TRUE@ cd $(srcdir) ; \ +@ENABLE_GTK_DOC_TRUE@ for i in $(SCANOBJ_FILES) ; do \ +@ENABLE_GTK_DOC_TRUE@ test -f $$i || touch $$i ; \ +@ENABLE_GTK_DOC_TRUE@ done \ +@ENABLE_GTK_DOC_TRUE@ fi +@ENABLE_GTK_DOC_TRUE@ cd $(srcdir) && \ +@ENABLE_GTK_DOC_TRUE@ gtkdoc-scan --module=$(DOC_MODULE) --source-dir=$(DOC_SOURCE_DIR) --ignore-headers="$(IGNORE_HFILES)" $(SCAN_OPTIONS) $(EXTRA_HFILES) +@ENABLE_GTK_DOC_TRUE@ touch scan-build.stamp + +@ENABLE_GTK_DOC_TRUE@$(DOC_MODULE)-decl.txt $(SCANOBJ_FILES): scan-build.stamp +@ENABLE_GTK_DOC_TRUE@ @true + +#### templates #### + +@ENABLE_GTK_DOC_TRUE@tmpl-build.stamp: $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt +@ENABLE_GTK_DOC_TRUE@ @echo '*** Rebuilding template files ***' +@ENABLE_GTK_DOC_TRUE@ cd $(srcdir) && gtkdoc-mktmpl --module=$(DOC_MODULE) +@ENABLE_GTK_DOC_TRUE@ touch tmpl-build.stamp + +@ENABLE_GTK_DOC_TRUE@tmpl.stamp: tmpl-build.stamp +@ENABLE_GTK_DOC_TRUE@ @true + +#### sgml #### + +@ENABLE_GTK_DOC_TRUE@sgml-build.stamp: tmpl.stamp $(CFILE_GLOB) $(srcdir)/tmpl/*.sgml +@ENABLE_GTK_DOC_TRUE@ @echo '*** Building SGML ***' +@ENABLE_GTK_DOC_TRUE@ cd $(srcdir) && \ +@ENABLE_GTK_DOC_TRUE@ gtkdoc-mkdb --module=$(DOC_MODULE) --source-dir=$(DOC_SOURCE_DIR) $(MKDB_OPTIONS) +@ENABLE_GTK_DOC_TRUE@ touch sgml-build.stamp + +@ENABLE_GTK_DOC_TRUE@sgml.stamp: sgml-build.stamp +@ENABLE_GTK_DOC_TRUE@ @true + +#### html #### + +@ENABLE_GTK_DOC_TRUE@html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) +@ENABLE_GTK_DOC_TRUE@ @echo '*** Building HTML ***' +@ENABLE_GTK_DOC_TRUE@ rm -rf $(srcdir)/html +@ENABLE_GTK_DOC_TRUE@ mkdir $(srcdir)/html +@ENABLE_GTK_DOC_TRUE@ cd $(srcdir)/html && gtkdoc-mkhtml $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE) +@ENABLE_GTK_DOC_TRUE@ test "x$(HTML_IMAGES)" = "x" || ( cd $(srcdir) && cp $(HTML_IMAGES) html ) +@ENABLE_GTK_DOC_TRUE@ @echo '-- Fixing Crossreferences' +@ENABLE_GTK_DOC_TRUE@ cd $(srcdir) && gtkdoc-fixxref --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS) +@ENABLE_GTK_DOC_TRUE@ touch html-build.stamp + +############## + +clean-local: + rm -f *~ *.bak $(SCANOBJ_FILES) *-unused.txt $(DOC_STAMPS) + +maintainer-clean-local: clean + cd $(srcdir) && rm -rf sgml html $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt + +install-data-local: + $(mkinstalldirs) $(DESTDIR)$(TARGET_DIR) + (installfiles=`echo $(srcdir)/html/*`; \ + if test "$$installfiles" = '$(srcdir)/html/*'; \ + then echo '-- Nothing to install' ; \ + else \ + for i in $$installfiles; do \ + echo '-- Installing '$$i ; \ + $(INSTALL_DATA) $$i $(DESTDIR)$(TARGET_DIR); \ + done; \ + echo '-- Installing $(srcdir)/html/index.sgml' ; \ + $(INSTALL_DATA) $(srcdir)/html/index.sgml $(DESTDIR)$(TARGET_DIR); \ + fi) + +# +# Require gtk-doc when making dist +# +@ENABLE_GTK_DOC_TRUE@dist-check-gtkdoc: +@ENABLE_GTK_DOC_FALSE@dist-check-gtkdoc: +@ENABLE_GTK_DOC_FALSE@ @echo "*** gtk-doc must be installed and enabled in order to make dist" +@ENABLE_GTK_DOC_FALSE@ @false + +dist-hook: dist-check-gtkdoc dist-hook-local + mkdir $(distdir)/tmpl + mkdir $(distdir)/xml + mkdir $(distdir)/html + -cp $(srcdir)/tmpl/*.sgml $(distdir)/tmpl + -cp $(srcdir)/xml/*.xml $(distdir)/xml + -cp $(srcdir)/html/* $(distdir)/html + +.PHONY : dist-hook-local +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/blib-1.1.7/docs/reference/blib-docs.sgml b/blib-1.1.7/docs/reference/blib-docs.sgml new file mode 100644 index 0000000..ca442a2 --- /dev/null +++ b/blib-1.1.7/docs/reference/blib-docs.sgml @@ -0,0 +1,169 @@ + + + + + + + BLib Reference Manual + + for BLib + + + Sven + Neumann + + + + + + This room is fullfilled mit special electronische equippment. + Fingergrabbing and pressing the cnoeppkes from the computers is + allowed for die experts only! So all the "lefthanders" stay away + and do not disturben the brainstorming von here working + intelligencies. Otherwise you will be out thrown and kicked + anderswhere! Also: please keep still and only watchen astaunished + the blinkenlights. + + + + + BLib Overview + + BLib is a library of useful things to hack the Blinkenlights. The + software used for the original Blinkenlights installation in + Berlin didn't fit our needs when we planned the installation in + Paris, dubbed Arcade. We + decided we need something more generic and developed BLib. + + + + BLib was written by Daniel Mack, Michael Natterer and Sven + Neumann with modules contributed by 1stein (BPacman, BBreakout) + and Simon Budig (BMatrix). + + + + There are a couple of software packages that use BLib: + + + blinkentools + + + A set of command-line utilities related to Blinkenlights. + It includes b2b, a converter for Blinkenmovies that can + apply some simple effects, b2mng, which creates MNG + animations from Blinkenmovies, and bsend, which sends movies + over the net using the Blinkenlights Network Protocol. + + + + + blinkensim + + + A graphical Blinkenlights simulator that displays the UDP + packets it receives according to the Blinkenlights Network + Protocol. It supports themes and comes with DirectFB and GTK+ backends. + + + + + blccc + + + The Blinkenlights Chaos Control center is the heart of + every Blinkenlights installation. This is the master + process that controls the lights. It makes heavy use of + BLib. + + + + + + + + BLib depends on GLib + version 2.0 (or newer). For the optional DirectFB view you need + DirectFB version + 0.9.11 (or newer) and the GTK+ view requires at least GTK+ version 2.0.3. + + + + BLib is released under the GNU General Public License (GPL). + + + + + Blinkenlights Utilities + + A collection of utilities that aren't that useful in itself but + are used from all over the Blinkenlights library. + + + + + + + + + + + + Blinkenlights Movies + + Support for loading and saving the various Blinkenlights Movie + formats. Some simple effects and a movie player module. + + + + + + + + + + Blinkenlights Network Protocol + + Support for speaking the Blinkenlights Network Protocol, a + simple UDP protocol layer. + + + + + + + + + + + + + Blinkenlights Modules + + Loadable modules that define our Game API. + + + + + + + + + Blinkenlights Simulation + + Themeable visualization of Blinkenlights Movies. + + + + + + + + + diff --git a/blib-1.1.7/docs/reference/blib-overrides.txt b/blib-1.1.7/docs/reference/blib-overrides.txt new file mode 100644 index 0000000..e69de29 diff --git a/blib-1.1.7/docs/reference/blib-sections.txt b/blib-1.1.7/docs/reference/blib-sections.txt new file mode 100644 index 0000000..fd90de0 --- /dev/null +++ b/blib-1.1.7/docs/reference/blib-sections.txt @@ -0,0 +1,443 @@ +
+beffects +BEffects +BEffects +BEffectScope +BEffects +b_effects_new +b_effects_apply + +BEffectsClass +B_EFFECTS +B_IS_EFFECTS +B_TYPE_EFFECTS +b_effects_get_type +B_EFFECTS_CLASS +B_IS_EFFECTS_CLASS +
+ +
+bmodule +BModule +BModule +BModuleEvent +BModuleEventType +BModuleKey +BModulePaintCallback +BModule +b_module_ticker_start +b_module_ticker_stop +b_module_request_stop +b_module_paint + +BModuleClass +B_MODULE +B_IS_MODULE +B_TYPE_MODULE +b_module_get_type +B_MODULE_CLASS +B_IS_MODULE_CLASS +B_MODULE_GET_CLASS +
+ +
+bmoduleinfo +BModuleInfo +BModuleInfo +b_module_info_new +b_module_infos_scan_dir + +BModuleInfoClass +B_MODULE_INFO +B_IS_MODULE_INFO +B_TYPE_MODULE_INFO +b_module_info_get_type +B_MODULE_INFO_CLASS +B_IS_MODULE_INFO_CLASS +B_MODULE_INFO_GET_CLASS +
+ +
+bmovie +B_MOVIE_MIN_DELAY +B_MOVIE_DEFAULT_DELAY +BMovie +BMovie +BMovieFrame +B_TYPE_MOVIE_BML +B_TYPE_MOVIE_BLM +B_TYPE_MOVIE_GIF +b_movie_new_from_file +b_movie_new_from_fd +b_movie_load +b_movie_unload +b_movie_save +b_movie_save_as +b_movie_get_frame_at_time +b_movie_prepend_frame + +BMovieClass +B_MOVIE +B_IS_MOVIE +B_TYPE_MOVIE +b_movie_get_type +B_MOVIE_CLASS +B_IS_MOVIE_CLASS +B_MOVIE_GET_CLASS +B_MOVIE_BML +B_IS_MOVIE_BML +B_MOVIE_BML_CLASS +B_IS_MOVIE_BML_CLASS +b_movie_bml_get_type +B_MOVIE_BLM +B_IS_MOVIE_BLM +B_MOVIE_BLM_CLASS +B_IS_MOVIE_BLM_CLASS +b_movie_blm_get_type +B_MOVIE_GIF +B_IS_MOVIE_GIF +B_MOVIE_GIF_CLASS +B_IS_MOVIE_GIF_CLASS +b_movie_gif_get_type +
+ +
+bmovie-effects +BMovieEffects +b_movie_normalize +b_movie_apply_colormap +b_movie_apply_effects +
+ +
+bmovieplayer +BMoviePlayer +BMoviePlayer + +BMoviePlayerClass +B_MOVIE_PLAYER +B_IS_MOVIE_PLAYER +B_TYPE_MOVIE_PLAYER +b_movie_player_get_type +B_MOVIE_PLAYER_CLASS +B_IS_MOVIE_PLAYER_CLASS +B_MOVIE_PLAYER_GET_CLASS +
+ +
+bobject +BObject +BObject +b_object_set_filename +b_object_set_name +b_object_get_filename +b_object_get_name + +BObjectClass +B_OBJECT +B_IS_OBJECT +B_TYPE_OBJECT +b_object_get_type +B_OBJECT_CLASS +B_IS_OBJECT_CLASS +B_OBJECT_GET_CLASS +
+ +
+bparams +BParams +B_TYPE_PARAM_FILENAME +b_param_spec_filename + +B_IS_PARAM_SPEC_FILENAME +b_param_filename_get_type +
+ +
+bproxyclient +BProxyClient +BProxyClient +b_proxy_client_new +b_proxy_client_send_heartbeat + +BProxyClientClass +B_PROXY_CLIENT +B_IS_PROXY_CLIENT +B_TYPE_PROXY_CLIENT +b_proxy_client_get_type +B_PROXY_CLIENT_CLASS +B_IS_PROXY_CLIENT_CLASS +B_PROXY_CLIENT_GET_CLASS +
+ +
+bproxyserver +BProxyServer +BProxyServer +b_proxy_server_new +b_proxy_server_send_packet +b_proxy_server_num_clients + +BProxyServerClass +B_PROXY_SERVER +B_IS_PROXY_SERVER +B_TYPE_PROXY_SERVER +b_proxy_server_get_type +B_PROXY_SERVER_CLASS +B_IS_PROXY_SERVER_CLASS +B_PROXY_SERVER_GET_CLASS +
+ +
+breceiver +BReceiver +BReceiverCallback +BReceiver +b_receiver_new +b_receiver_listen +b_receiver_listen_fd +b_receiver_stop + +BReceiverClass +B_RECEIVER +B_IS_RECEIVER +B_TYPE_RECEIVER +b_receiver_get_type +B_RECEIVER_CLASS +B_IS_RECEIVER_CLASS +B_RECEIVER_GET_CLASS +
+ +
+bsender +BSender +BSender +b_sender_new +b_sender_add_recipient +b_sender_remove_recipient +b_sender_list_recipients +b_sender_configure +b_sender_send_frame +b_sender_send_heartbeat +b_sender_set_verbose + +BSenderClass +B_SENDER +B_IS_SENDER +B_TYPE_SENDER +b_sender_get_type +B_SENDER_CLASS +B_IS_SENDER_CLASS +B_SENDER_GET_CLASS +
+ +
+bsocket +BSocketOptions +b_socket_init +b_socket_udp_new +
+ +
+btheme +BTheme +BColor +BRectangle +BWindow +B_WINDOW_VALUE_ALL +BOverlay +BTheme +b_theme_new_from_file +b_theme_new_from_scratch +b_theme_load +b_theme_unload +BThemesQuery +BThemesQueryFlags +b_themes_query +BThemesForeachFunc +b_themes_foreach +b_themes_foreach_theme +b_themes_lookup_theme +b_theme_frame_diff_boundary + +BThemeClass +B_THEME +B_IS_THEME +B_TYPE_THEME +b_theme_get_type +B_THEME_CLASS +B_IS_THEME_CLASS +B_THEME_GET_CLASS +
+ + +
+bview-aa +BViewAA +BViewAA +b_view_aa_new +b_view_aa_update + +BViewAAClass +B_VIEW_AA +B_IS_VIEW_AA +B_TYPE_VIEW_AA +b_view_aa_get_type +B_VIEW_AA_CLASS +
+ +
+bview-directfb +BViewDirectFB +BViewDirectFB +b_view_directfb_new +b_view_directfb_update + +BViewDirectFBClass +B_VIEW_DIRECTFB +B_IS_VIEW_DIRECTFB +B_TYPE_VIEW_DIRECTFB +b_view_directfb_get_type +B_VIEW_DIRECTFB_CLASS +
+ +
+bview-gtk +BViewGtk +BViewGtk +b_view_gtk_new +b_view_gtk_update + +BViewGtkClass +B_VIEW_GTK +B_IS_VIEW_GTK +B_TYPE_VIEW_GTK +b_view_gtk_get_type +B_VIEW_GTK_CLASS +
+ +
+bview-pixbuf +BViewPixbuf +BViewPixbuf +b_view_pixbuf_new +b_view_pixbuf_new_theme +b_view_pixbuf_load_image +b_view_pixbuf_render + +BViewPixbufClass +B_VIEW_PIXBUF +B_IS_VIEW_PIXBUF +B_TYPE_VIEW_PIXBUF +b_view_pixbuf_get_type +B_VIEW_PIXBUF_CLASS +
+ +
+blib +BLib +b_init +
+ +
+bmodule-internal +BModule Internal API +b_module_new +b_module_set_aspect +b_module_prepare +b_module_relax +b_module_start +b_module_stop +b_module_event +b_module_tick +b_module_describe +
+ +
+bmodule-utils +BModule Utilities +b_module_draw_point +b_module_draw_line +b_module_fill +
+ +
+bpacket +BPacket +BPacket +BPacketHeader +b_packet_new +b_packet_size +b_packet_hton +b_packet_ntoh +
+ +
+bparser +BParser +BParser +BParserState +BParserStartFunc +BParserEndFunc +b_parser_new +b_parser_free +b_parser_parse +b_parser_end_parse +b_parser_parse_io_channel +b_parser_get_state +b_parse_encoding +
+ +
+bprotocol +BProtocol +MAGIC_MCU_SETUP +MAGIC_MCU_FRAME +MAGIC_MCU_DEVCTRL +MAGIC_BLFRAME +MAGIC_BLFRAME_256 +MAGIC_HEARTBEAT +MCU_LISTENER_PORT +MCU_ID_ANY +MCU_DEVCTRL_OFF +MCU_DEVCTRL_ON +B_HEARTBEAT_PORT +B_HEARTBEAT_INTERVAL +
+ +
+btypes +BTypes +B_TYPE_FILENAME +B_VALUE_HOLDS_FILENAME + +b_filename_get_type +
+ +
+butils +BUtils +b_filename_from_utf8 +b_parse_int +b_parse_boolean +b_parse_double +b_parse_coordinates +b_parse_rectangle +b_parse_color +b_parse_param +b_object_set_property +b_rectangle_union +b_rectangle_intersect +
+ +
+bwriter +BWriter +BWriter +b_writer_new +b_writer_free +b_write_header +b_write_open_tag +b_write_close_tag +b_write_element +
diff --git a/blib-1.1.7/docs/reference/blib.types.in b/blib-1.1.7/docs/reference/blib.types.in new file mode 100644 index 0000000..fe609fb --- /dev/null +++ b/blib-1.1.7/docs/reference/blib.types.in @@ -0,0 +1,20 @@ +#include "blib/blib.h" + +b_effects_get_type +b_module_get_type +b_module_info_get_type +b_movie_get_type +b_movie_bml_get_type +b_movie_blm_get_type +b_movie_gif_get_type +b_movie_player_get_type +b_object_get_type +b_proxy_client_get_type +b_receiver_get_type +b_sender_get_type +b_theme_get_type + +@DIRECTFB_VIEW_TYPE@ +@PIXBUF_VIEW_TYPE@ +@GTK_VIEW_TYPE@ +@AA_VIEW_TYPE@ diff --git a/blib-1.1.7/docs/reference/html/BEffects.html b/blib-1.1.7/docs/reference/html/BEffects.html new file mode 100644 index 0000000..dc1f8ee --- /dev/null +++ b/blib-1.1.7/docs/reference/html/BEffects.html @@ -0,0 +1,81 @@ +BEffects

BEffects

BEffects — simple effects on a single movie frame

Synopsis

+
+
+
+struct      BEffects;
+enum        BEffectScope;
+BEffects*   b_effects_new                   (void);
+void        b_effects_apply                 (BEffects *effects,
+                                             guchar *frame_data,
+                                             gint width,
+                                             gint height,
+                                             gint channels,
+                                             gint maxval);
+
+

Object Hierarchy

+
+  GObject
+   +----BEffects
+

Description

+ +

Details

struct BEffects

struct BEffects;

+ +


enum BEffectScope

typedef enum
+{
+  B_EFFECT_SCOPE_NONE  = 0,
+  B_EFFECT_SCOPE_LEFT  = 1 << 0,
+  B_EFFECT_SCOPE_RIGHT = 1 << 1,
+  B_EFFECT_SCOPE_ALL   = B_EFFECT_SCOPE_LEFT | B_EFFECT_SCOPE_RIGHT
+} BEffectScope;
+

+ +


b_effects_new ()

BEffects*   b_effects_new                   (void);

+Creates a new BEffects object with default values.

+ +

Returns : the newly allocate BEffects object. +

b_effects_apply ()

void        b_effects_apply                 (BEffects *effects,
+                                             guchar *frame_data,
+                                             gint width,
+                                             gint height,
+                                             gint channels,
+                                             gint maxval);

+This function applies the effects described in the effects object +to a single frame.

+ +

effects : a BEffects object +
frame_data : data to apply the effects on +
width : width of the frame_data buffer +
height : height of the frame_data buffer +
channels : number of channels in the frame_data buffer +
maxval : the maximum value for the frame_data buffer +
diff --git a/blib-1.1.7/docs/reference/html/BModule.html b/blib-1.1.7/docs/reference/html/BModule.html new file mode 100644 index 0000000..af09c03 --- /dev/null +++ b/blib-1.1.7/docs/reference/html/BModule.html @@ -0,0 +1,177 @@ +BModule

BModule

BModule — definition of the Blinkenlights Game API

Synopsis

+
+
+
+struct      BModule;
+struct      BModuleEvent;
+enum        BModuleEventType;
+enum        BModuleKey;
+gboolean    (*BModulePaintCallback)         (BModule *bmodule,
+                                             guchar *buffer,
+                                             gpointer data);
+void        b_module_ticker_start           (BModule *module,
+                                             gint timeout);
+void        b_module_ticker_stop            (BModule *module);
+void        b_module_request_stop           (BModule *module);
+void        b_module_paint                  (BModule *module);
+
+

Object Hierarchy

+
+  GObject
+   +----BModule
+

Properties

+
+  "lifetime"             gint                 : Write / Construct
+  "speed"                gdouble              : Write / Construct
+

Signal Prototypes

+
+"start"     void        user_function      (BModule *bmodule,
+                                            gpointer user_data);
+"stop"      void        user_function      (BModule *bmodule,
+                                            gpointer user_data);
+

Description

+ +

Details

struct BModule

struct BModule;

+The BModule struct has a couple of fields that may be read directly +from a BModule implementation. You must however not change any +members directly. Usually a BModule uses the +width, height, +channels, +maxval, aspect +and num_players fields. +

+The buffer variable is the only one a +BModule may write to. It does so when it needs to update the frame +buffer. It is however recommened to use utility functions like +b_module_fill() instead of writing into the +buffer. All other fields of BModule are +considered private. +


struct BModuleEvent

struct BModuleEvent {
+
+  gint             device_id;
+  BModuleEventType type;
+  BModuleKey       key;
+};
+

+The BModuleEvent struct defines an event delivered to a BModule. +The key field is only valid if the type +is B_EVENT_TYPE_KEY. More field may be added when new event types +are added. +

gint device_idthe event source +
BModuleEventType typethe type of event +
BModuleKey keythe key + +

enum BModuleEventType

typedef enum
+{
+  B_EVENT_TYPE_UNKNOWN = 0,
+  B_EVENT_TYPE_KEY,
+  B_EVENT_TYPE_PLAYER_ENTERED,
+  B_EVENT_TYPE_PLAYER_LEFT
+} BModuleEventType;
+

+This enumeration classifies an event into a number of types. +


enum BModuleKey

typedef enum
+{
+  B_KEY_0,
+  B_KEY_1,
+  B_KEY_2,
+  B_KEY_3,
+  B_KEY_4,
+  B_KEY_5,
+  B_KEY_6,
+  B_KEY_7,
+  B_KEY_8,
+  B_KEY_9,
+  B_KEY_HASH,
+  B_KEY_ASTERISK
+} BModuleKey;
+

+Enumeration of the possible key values in an event of type +B_EVENT_TYPE_KEY. +


BModulePaintCallback ()

gboolean    (*BModulePaintCallback)         (BModule *bmodule,
+                                             guchar *buffer,
+                                             gpointer data);

+A callback that is registered when a BModule is created using +b_module_new(). It is called from b_module_paint() and typically +causes a Blinkenlights frame packet to be emitted. You don't need +to care about this if you are implementing a BModule. +

bmodule : +
buffer : +
data : +
Returns : + + +

b_module_ticker_start ()

void        b_module_ticker_start           (BModule *module,
+                                             gint timeout);

+Starts a timeout for module that will call cause its tick() method +to be called in timeout milliseconds. The return value of the +tick() method is then used to install a new timeout for module. +This proceeds until the tick() method returns -1, +b_module_ticker_stop() is called or the module is stopped. +

+You may only call this function for a BModule that is currently +running.

+ +

module : a BModule object +
timeout : the timeout interval in milliseconds +

b_module_ticker_stop ()

void        b_module_ticker_stop            (BModule *module);

+Stops the ticker for module. If there is a pending timeout for +module, it is removed. +

+You may only call this function for a BModule that is currently +running.

+ +

module : a BModule object +

b_module_request_stop ()

void        b_module_request_stop           (BModule *module);

+This function causes the module to be stopped. This is for example +used when a game module decides that the game is over. +

+You may only call this function for a BModule that is currently +running.

+ +

module : a BModule object +

b_module_paint ()

void        b_module_paint                  (BModule *module);

+This function causes a repaint of the screen.

+ +

module : a BModule object +

Properties

"lifetime" (gint : Write / Construct)

Maximum time a module is allowed to run (in milliseconds).

"speed" (gdouble : Write / Construct)

Allows to tune the playback speed.

Signals

The "start" signal

void        user_function                  (BModule *bmodule,
+                                            gpointer user_data);

+ +

bmodule :the object which received the signal. + +
user_data :user data set when the signal handler was connected.

The "stop" signal

void        user_function                  (BModule *bmodule,
+                                            gpointer user_data);

+ +

bmodule :the object which received the signal. + +
user_data :user data set when the signal handler was connected.
diff --git a/blib-1.1.7/docs/reference/html/BModuleInfo.html b/blib-1.1.7/docs/reference/html/BModuleInfo.html new file mode 100644 index 0000000..115e018 --- /dev/null +++ b/blib-1.1.7/docs/reference/html/BModuleInfo.html @@ -0,0 +1,62 @@ +BModuleInfo

BModuleInfo

BModuleInfo — handling of loadable modules

Synopsis

+
+
+
+struct      BModuleInfo;
+BModuleInfo* b_module_info_new              (const gchar *filename);
+gint        b_module_infos_scan_dir         (const gchar *dirname);
+
+

Object Hierarchy

+
+  GObject
+   +----GTypeModule
+         +----BModuleInfo
+

Implemented Interfaces

+BModuleInfo implements GTypePlugin. +

Description

+ +

Details

struct BModuleInfo

struct BModuleInfo;

+The BModuleInfo struct is considered private. +


b_module_info_new ()

BModuleInfo* b_module_info_new              (const gchar *filename);

+Creates a new BModuleInfo object a loadable module.

+ +

filename : the filename of the loadable module +
Returns : a newly allocated BModuleInfo object +

b_module_infos_scan_dir ()

gint        b_module_infos_scan_dir         (const gchar *dirname);

+Scans the given directory for loadable modules and registers the +types implemented by the found modules.

+ +

dirname : the name of the directory to scan or NULL to use the +default directory +
Returns : the number of successfully registered modules +
diff --git a/blib-1.1.7/docs/reference/html/BMovie.html b/blib-1.1.7/docs/reference/html/BMovie.html new file mode 100644 index 0000000..b359d33 --- /dev/null +++ b/blib-1.1.7/docs/reference/html/BMovie.html @@ -0,0 +1,194 @@ +BMovie

BMovie

BMovie — base class for Blinkenlights movies

Synopsis

+
+
+
+#define     B_MOVIE_MIN_DELAY
+#define     B_MOVIE_DEFAULT_DELAY
+struct      BMovie;
+struct      BMovieFrame;
+#define     B_TYPE_MOVIE_BML
+#define     B_TYPE_MOVIE_BLM
+#define     B_TYPE_MOVIE_GIF
+BMovie*     b_movie_new_from_file           (const gchar *filename,
+                                             gboolean lazy_load,
+                                             GError **error);
+BMovie*     b_movie_new_from_fd             (gint fd,
+                                             GError **error);
+gboolean    b_movie_load                    (BMovie *movie,
+                                             GError **error);
+void        b_movie_unload                  (BMovie *movie);
+gboolean    b_movie_save                    (BMovie *movie,
+                                             FILE *stream,
+                                             GError **error);
+gboolean    b_movie_save_as                 (BMovie *movie,
+                                             GType movie_type,
+                                             FILE *stream,
+                                             GError **error);
+GList*      b_movie_get_frame_at_time       (BMovie *movie,
+                                             GList *seed,
+                                             gint time);
+void        b_movie_prepend_frame           (BMovie *movie,
+                                             gint duration,
+                                             const guchar *data);
+
+

Object Hierarchy

+
+  GObject
+   +----BObject
+         +----BMovie
+

Description

+The BMovie class defines a common interface to a Blinkenlights +movie. BLib comes with a couple of implementations that correspond to +the different file formats. They are referred to by their GType: +B_TYPE_MOVIE_BML, B_TYPE_MOVIE_BLM and B_TYPE_MOVIE_GIF. +

Details

B_MOVIE_MIN_DELAY

#define B_MOVIE_MIN_DELAY      20
+

+The minimum time for a frame in milliseconds. Shorter frame delays +will be set to this value. +


B_MOVIE_DEFAULT_DELAY

#define B_MOVIE_DEFAULT_DELAY  100
+

+The default time for a frame in milliseconds. Frames with no specified +delay will be set to this value. +


struct BMovie

struct BMovie;

+The BMovie struct has various members that may be read directly since +not all of them has accessor functions. You must however not change +any of the fields. +


struct BMovieFrame

struct BMovieFrame {
+
+  gint          start;
+  gint          duration;
+  guchar       *data;
+};
+

+The BMovieFrame struct defines a single movie frame. +

gint startthe start time of the frame in milliseconds +
gint durationthe duration of the frame in milliseconds +
guchar *dataframe data according to the values in the BMovie that owns this frame + +

B_TYPE_MOVIE_BML

#define B_TYPE_MOVIE_BML            (b_movie_bml_get_type ())
+

+Type derived from BMovie that handles movies in the Blinkenlights Markup +Language (BML). +


B_TYPE_MOVIE_BLM

#define B_TYPE_MOVIE_BLM            (b_movie_blm_get_type ())
+

+Type derived from BMovie that handles movies in old-fashioned BLM format. +


B_TYPE_MOVIE_GIF

#define B_TYPE_MOVIE_GIF            (b_movie_gif_get_type ())
+

+Type derived from BMovie that handles movies in the GIF format. +


b_movie_new_from_file ()

BMovie*     b_movie_new_from_file           (const gchar *filename,
+                                             gboolean lazy_load,
+                                             GError **error);

+Tries to load a BMovie from the file pointed to by filename. If +lazy_load is TRUE, only the header is loaded and no frames are stored.

+ +

filename : the name of the file to load +
lazy_load : whether to do lazy-loading, i.e. only load the header +
error : location to store the error occuring, or NULL to ignore errors +
Returns : a newly allocated BMovie object or NULL if the load +failed +

b_movie_new_from_fd ()

BMovie*     b_movie_new_from_fd             (gint fd,
+                                             GError **error);

+Tries to load a BMovie from the UNIX file descriptor fd. Lazy +loading from file descriptors is not implemented since it doesn't +seem to make much sense.

+ +

fd : a UNIX file descriptor +
error : location to store the error occuring, or NULL to ignore errors +
Returns : a newly allocated BMovie object or NULL if the load +failed +

b_movie_load ()

gboolean    b_movie_load                    (BMovie *movie,
+                                             GError **error);

+Assures that the frames of the movie are loaded.

+ +

movie : a BMovie object +
error : location to store the error occuring, or NULL to ignore errors +
Returns : TRUE if the movie was loaded successfully. +

b_movie_unload ()

void        b_movie_unload                  (BMovie *movie);

+Unloads the frames of a movie. +

+The movie object counts how many times you call b_movie_load() and +b_movie_unload() and only really unloads the frames if +b_movie_unload() was called as often as b_movie_load(). Note that +b_movie_new_from_file() and b_movie_new_from_fd() call +b_movie_load() unless lazy-loading was requested.

+ +

movie : a BMovie object +

b_movie_save ()

gboolean    b_movie_save                    (BMovie *movie,
+                                             FILE *stream,
+                                             GError **error);

+Saves a BMovie object to a stream.

+ +

movie : a BMovie object +
stream : a FILE stream ready for writing +
error : location to store the error occuring, or NULL to ignore errors +
Returns : TRUE on success or FALSE otherwise +

b_movie_save_as ()

gboolean    b_movie_save_as                 (BMovie *movie,
+                                             GType movie_type,
+                                             FILE *stream,
+                                             GError **error);

+Saves a BMovie object to a stream and allows to specify the file +format to use. +

+The format is specified by passing a type derived from +B_TYPE_MOVIE as movie_type. At the moment B_TYPE_MOVIE_BML, +B_TYPE_MOVIE_BLM and B_TYPE_MOVIE_GIF are supported types.

+ +

movie : a BMovie object +
movie_type : the movie type to use for saving +
stream : a FILE stream ready for writing +
error : location to store the error occuring, or NULL to ignore errors +
Returns : TRUE on success or FALSE otherwise +

b_movie_get_frame_at_time ()

GList*      b_movie_get_frame_at_time       (BMovie *movie,
+                                             GList *seed,
+                                             gint time);

+Looks for the frame active after time milliseconds. +

+If you are calling this function subsequentially with increasing +time values, you can speed up the search by passing the last return +value as the seed parameter.

+ +

movie : a loaded BMovie object +
seed : an optional GList pointer that can speed up the search +
time : the time in milliseconds +
Returns : a GList pointer that has the frame as data or NULL +if the time was out of the movie's range. +

b_movie_prepend_frame ()

void        b_movie_prepend_frame           (BMovie *movie,
+                                             gint duration,
+                                             const guchar *data);

+This is an internal function used by the movie loaders. It should +never be called from anywhere else.

+ +

movie : +
duration : +
data : +
diff --git a/blib-1.1.7/docs/reference/html/BMoviePlayer.html b/blib-1.1.7/docs/reference/html/BMoviePlayer.html new file mode 100644 index 0000000..2b598ef --- /dev/null +++ b/blib-1.1.7/docs/reference/html/BMoviePlayer.html @@ -0,0 +1,53 @@ +BMoviePlayer

BMoviePlayer

BMoviePlayer — a BModule that implements a BMovie player

Synopsis

+
+
+
+struct      BMoviePlayer;
+
+

Object Hierarchy

+
+  GObject
+   +----BModule
+         +----BMoviePlayer
+

Properties

+
+  "clear"                gboolean             : Write / Construct
+  "h-align"              gdouble              : Write / Construct
+  "movie"                BFilename            : Write / Construct
+  "reverse"              gboolean             : Write / Construct
+  "v-align"              gdouble              : Write / Construct
+

Description

+ +

Details

struct BMoviePlayer

struct BMoviePlayer;

+The BMoviePlayer struct is considered private. +

Properties

"clear" (gboolean : Write / Construct)

Clear the screen before starting.

"h-align" (gdouble : Write / Construct)

Horizontal alignment on the screen.

"movie" (BFilename : Write / Construct)

The filename of the movie to play.

"reverse" (gboolean : Write / Construct)

Allows to play the movie backwards.

"v-align" (gdouble : Write / Construct)

Vertical alignment on the screen.

diff --git a/blib-1.1.7/docs/reference/html/BObject.html b/blib-1.1.7/docs/reference/html/BObject.html new file mode 100644 index 0000000..ed994da --- /dev/null +++ b/blib-1.1.7/docs/reference/html/BObject.html @@ -0,0 +1,84 @@ +BObject

BObject

BObject — an abstract base class derived from GObject

Synopsis

+
+
+
+struct      BObject;
+void        b_object_set_filename           (BObject *object,
+                                             const gchar *filename);
+void        b_object_set_name               (BObject *object,
+                                             const gchar *name);
+const gchar* b_object_get_filename          (BObject *object);
+const gchar* b_object_get_name              (BObject *object);
+
+

Object Hierarchy

+
+  GObject
+   +----BObject
+

Properties

+
+  "filename"             gchararray           : Read / Write
+  "name"                 gchararray           : Read / Write
+

Description

+BObject is directly derived from GObject and adds name and filename + properties. +

Details

struct BObject

struct BObject;

+The BObject struct shouldn't be accessed directly. Its members are +considered private. +


b_object_set_filename ()

void        b_object_set_filename           (BObject *object,
+                                             const gchar *filename);

+Sets the filename associated with object.

+ +

object : a BObject. +
filename : the new filename, a nul-terminated string in the filesystem's +encoding. +

b_object_set_name ()

void        b_object_set_name               (BObject *object,
+                                             const gchar *name);

+Sets the name associated with object.

+ +

object : a BObject. +
name : the new name, a nul-terminated string in UTF-8 encoding. +

b_object_get_filename ()

const gchar* b_object_get_filename          (BObject *object);

+This functions retrieves the filename associated with object. The +returned value must not be freed.

+ +

object : a BObject. +
Returns : the fileanme or NULL if no filename was set for object. +

b_object_get_name ()

const gchar* b_object_get_name              (BObject *object);

+This functions retrieves the name associated with object. If no +name has been set for object, the name is generated from the +object's filename. The returned value must not be freed.

+ +

object : a BObject. +
Returns : the name or NULL if no name and no filename was set +for object. +

Properties

"filename" (gchararray : Read / Write)

The filename associated with the object. This is a string in the filesystems's encoding.

"name" (gchararray : Read / Write)

The name associated with the object. This is a string in UTF-8 encoding.

diff --git a/blib-1.1.7/docs/reference/html/BProxyClient.html b/blib-1.1.7/docs/reference/html/BProxyClient.html new file mode 100644 index 0000000..7c83ddc --- /dev/null +++ b/blib-1.1.7/docs/reference/html/BProxyClient.html @@ -0,0 +1,77 @@ +BProxyClient

BProxyClient

BProxyClient —

Synopsis

+
+
+
+struct      BProxyClient;
+BProxyClient* b_proxy_client_new            (const gchar *proxy_host,
+                                             gint proxy_port,
+                                             gint listen_port,
+                                             BReceiverCallback callback,
+                                             gpointer callback_data,
+                                             GError **error);
+gboolean    b_proxy_client_send_heartbeat   (BProxyClient *client);
+
+

Object Hierarchy

+
+  GObject
+   +----BReceiver
+         +----BProxyClient
+

Description

+ +

Details

struct BProxyClient

struct BProxyClient;

+ +


b_proxy_client_new ()

BProxyClient* b_proxy_client_new            (const gchar *proxy_host,
+                                             gint proxy_port,
+                                             gint listen_port,
+                                             BReceiverCallback callback,
+                                             gpointer callback_data,
+                                             GError **error);

+Creates a new BProxyClient object, ready to use.

+ +

proxy_host : the blinkenproxy host +
proxy_port : the blinkenproxy port +
listen_port : the local port to listen to for Blinkenlights packages + or -1 to bind to an arbitrary free local port +
callback : the function to call when a new frame arrives +
callback_data : data to pass to the callback +
error : return location for a possible error +
Returns : a newly allocate BProxyClient object +

b_proxy_client_send_heartbeat ()

gboolean    b_proxy_client_send_heartbeat   (BProxyClient *client);

+Make the client send a heartbeat packet. This function should +be called periodically with the suggested interval of +B_HEARTBEAT_INTERVAL. To achieve, use this function with +g_timeout_add().

+ +

client : a BProxyClient +
Returns : always TRUE +
diff --git a/blib-1.1.7/docs/reference/html/BProxyServer.html b/blib-1.1.7/docs/reference/html/BProxyServer.html new file mode 100644 index 0000000..c6e8285 --- /dev/null +++ b/blib-1.1.7/docs/reference/html/BProxyServer.html @@ -0,0 +1,102 @@ +BProxyServer

BProxyServer

BProxyServer —

Synopsis

+
+
+
+struct      BProxyServer;
+BProxyServer* b_proxy_server_new            (gint port,
+                                             GError **error);
+gboolean    b_proxy_server_send_packet      (BProxyServer *server,
+                                             BPacket *packet);
+gint        b_proxy_server_num_clients      (BProxyServer *server);
+
+

Object Hierarchy

+
+  GObject
+   +----BReceiver
+         +----BProxyServer
+

Signal Prototypes

+
+"client-added"
+            void        user_function      (BProxyServer *bproxyserver,
+                                            gchar *arg1,
+                                            gint arg2,
+                                            gpointer user_data);
+"client-removed"
+            void        user_function      (BProxyServer *bproxyserver,
+                                            gchar *arg1,
+                                            gint arg2,
+                                            gpointer user_data);
+

Description

+ +

Details

struct BProxyServer

struct BProxyServer;

+ +


b_proxy_server_new ()

BProxyServer* b_proxy_server_new            (gint port,
+                                             GError **error);

+Creates a new BProxyServer object, ready to use.

+ +

port : the local port to listen to for heartbeat packages +
error : return location for a possible error +
Returns : a newly allocate BProxyServer object +

b_proxy_server_send_packet ()

gboolean    b_proxy_server_send_packet      (BProxyServer *server,
+                                             BPacket *packet);

+ +

server : +
packet : +
Returns : + + +

b_proxy_server_num_clients ()

gint        b_proxy_server_num_clients      (BProxyServer *server);

+ +

server : +
Returns : + + +

Signals

The "client-added" signal

void        user_function                  (BProxyServer *bproxyserver,
+                                            gchar *arg1,
+                                            gint arg2,
+                                            gpointer user_data);

+ +

bproxyserver :the object which received the signal. +
arg1 : +
arg2 : + +
user_data :user data set when the signal handler was connected.

The "client-removed" signal

void        user_function                  (BProxyServer *bproxyserver,
+                                            gchar *arg1,
+                                            gint arg2,
+                                            gpointer user_data);

+ +

bproxyserver :the object which received the signal. +
arg1 : +
arg2 : + +
user_data :user data set when the signal handler was connected.
diff --git a/blib-1.1.7/docs/reference/html/BReceiver.html b/blib-1.1.7/docs/reference/html/BReceiver.html new file mode 100644 index 0000000..161e85b --- /dev/null +++ b/blib-1.1.7/docs/reference/html/BReceiver.html @@ -0,0 +1,102 @@ +BReceiver

BReceiver

BReceiver — receives Blinkenlights packets

Synopsis

+
+
+
+struct      BReceiver;
+gboolean    (*BReceiverCallback)            (BReceiver *receiver,
+                                             BPacket *packet,
+                                             gpointer callback_data);
+BReceiver*  b_receiver_new                  (BReceiverCallback callback,
+                                             gpointer callback_data);
+gboolean    b_receiver_listen               (BReceiver *receiver,
+                                             gint port);
+gboolean    b_receiver_listen_fd            (BReceiver *receiver,
+                                             gint fd);
+void        b_receiver_stop                 (BReceiver *receiver);
+
+

Object Hierarchy

+
+  GObject
+   +----BReceiver
+

Properties

+
+  "callback"             gpointer             : Write / Construct Only
+  "callback-data"        gpointer             : Write / Construct Only
+

Description

+The BReceiver object listens for Blinkenlights UDP packets. For each +frame that matches the receiver configuration, a user-defined callback +is called with the received packet. +

Details

struct BReceiver

struct BReceiver;

+The BReceiver struct is considered private. +


BReceiverCallback ()

gboolean    (*BReceiverCallback)            (BReceiver *receiver,
+                                             BPacket *packet,
+                                             gpointer callback_data);

+The function that gets called to dispatch incoming packets. +

receiver :the BReceiver object that received the packet +
packet :the received BPacket converted to host byteorder +
callback_data :the data that was passed to b_receiver_new() +
Returns :TRUE if you want to be called again + + +

b_receiver_new ()

BReceiver*  b_receiver_new                  (BReceiverCallback callback,
+                                             gpointer callback_data);

+Creates a new BReceiver object.

+ +

callback : the function to call when a new frame arrives +
callback_data : data to pass to the callback +
Returns : a newly allocate BReceiver object +

b_receiver_listen ()

gboolean    b_receiver_listen               (BReceiver *receiver,
+                                             gint port);

+Causes the receiver to start to listen to the specified UDP +port. For each successfully received Blinkenlights packet, the +packet will be converted to host byteorder and the callback that +was specified on b_receiver_new() will be called.

+ +

receiver : a BReceiver object +
port : the UDP port to listen to +
Returns : TRUE if the receiver listens to port, FALSE otherwise +

b_receiver_listen_fd ()

gboolean    b_receiver_listen_fd            (BReceiver *receiver,
+                                             gint fd);

+Causes the receiver to start to listen to the given file descriptor. +This function is rarely useful, it is used internally by BProxyClient.

+ +

receiver : a BReceiver object +
fd : a file descriptor +
Returns : TRUE on success +

b_receiver_stop ()

void        b_receiver_stop                 (BReceiver *receiver);

+Makes the receiver stop listening.

+ +

receiver : a BReceiver object +

Properties

"callback" (gpointer : Write / Construct Only)

"callback-data" (gpointer : Write / Construct Only)

See Also

+BSender, BPacket +

diff --git a/blib-1.1.7/docs/reference/html/BSender.html b/blib-1.1.7/docs/reference/html/BSender.html new file mode 100644 index 0000000..94e4c0f --- /dev/null +++ b/blib-1.1.7/docs/reference/html/BSender.html @@ -0,0 +1,145 @@ +BSender

BSender

BSender — sends Blinkenlights packets

Synopsis

+
+
+
+struct      BSender;
+BSender*    b_sender_new                    (void);
+gboolean    b_sender_add_recipient          (BSender *sender,
+                                             gint src_port,
+                                             const gchar *dest_host,
+                                             gint dest_port,
+                                             GError **error);
+gboolean    b_sender_remove_recipient       (BSender *sender,
+                                             const gchar *dest_host,
+                                             gint dest_port,
+                                             GError **error);
+GList*      b_sender_list_recipients        (BSender *sender);
+gboolean    b_sender_configure              (BSender *sender,
+                                             gint width,
+                                             gint height,
+                                             gint channels,
+                                             gint maxval);
+gboolean    b_sender_send_frame             (BSender *sender,
+                                             const guchar *data);
+gboolean    b_sender_send_heartbeat         (BSender *sender);
+void        b_sender_set_verbose            (BSender *sender,
+                                             gboolean verbose);
+
+

Object Hierarchy

+
+  GObject
+   +----BSender
+

Description

+The BSender object sends Blinkenlights UDP packets to a number of +recipients. Recipients can be added and removed at run-time. +

Details

struct BSender

struct BSender;

+The BSender struct is considered private. +


b_sender_new ()

BSender*    b_sender_new                    (void);

+Creates a new BSender object.

+ +

Returns : a newly allocated BSender object +

b_sender_add_recipient ()

gboolean    b_sender_add_recipient          (BSender *sender,
+                                             gint src_port,
+                                             const gchar *dest_host,
+                                             gint dest_port,
+                                             GError **error);

+Tries to resolve host and adds it to the sender's list of recipients.

+ +

sender : a BSender object +
src_port : originating UDP port (-1 to leave unspecified) +
dest_host : destination hostname or IP address +
dest_port : destination UDP port +
error : location to store the error occuring, or NULL to ignore errors +
Returns : TRUE if the recipient was successfully added, FALSE +otherwise +

b_sender_remove_recipient ()

gboolean    b_sender_remove_recipient       (BSender *sender,
+                                             const gchar *dest_host,
+                                             gint dest_port,
+                                             GError **error);

+Removes all recipients with matching host and port from the +sender's list of recipients.

+ +

sender : a BSender object +
dest_host : destination hostname or IP address +
dest_port : destination UDP port +
error : location to store the error occuring, or NULL to ignore errors +
Returns : TRUE if at least one matching recipient was found +and removed, FALSE otherwise +

b_sender_list_recipients ()

GList*      b_sender_list_recipients        (BSender *sender);

+Creates a list of strings that describe the senders +recipients. You should free the strings as well as the list when +it is no longer needed.

+ +

sender : a BSender object +
Returns : a newly allocated GList of newly allocated strings +

b_sender_configure ()

gboolean    b_sender_configure              (BSender *sender,
+                                             gint width,
+                                             gint height,
+                                             gint channels,
+                                             gint maxval);

+Prepares sender to send Blinkenlights UDP packets with the given +parameters.

+ +

sender : a BSender object +
width : number of pixels per row +
height : number of pixels per column +
channels : number of channels per pixel +
maxval : the maximum value +
Returns : TRUE if sender was successfully reconfigured, +FALSE otherwise +

b_sender_send_frame ()

gboolean    b_sender_send_frame             (BSender *sender,
+                                             const guchar *data);

+Sends Blinkenlights packets to all recipients registered with +sender. The data should match the values of the last call to +b_sender_configure() for sender.

+ +

sender : a Bsender object +
data : the frame data to send +
Returns : FALSE in case of a fatal error, TRUE otherwise +

b_sender_send_heartbeat ()

gboolean    b_sender_send_heartbeat         (BSender *sender);

Warning

b_sender_send_heartbeat is deprecated and should not be used in newly-written code.

+This function is deprecated and might be removed in the future. +If you need the heartbeat functionality, use BProxyClient instead.

+ +

sender : a Bsender object +
Returns : TRUE always +

b_sender_set_verbose ()

void        b_sender_set_verbose            (BSender *sender,
+                                             gboolean verbose);

+In earlier BLib versions BSender used to print a message to stderr +when send() failed. This message is now suppressed by default, but +you can get the old behaviour back using this function.

+ +

sender : a Bsender object +
verbose : whether the sender should do verbose error reporting or not +

See Also

+BReceiver, BPacket +

diff --git a/blib-1.1.7/docs/reference/html/BTheme.html b/blib-1.1.7/docs/reference/html/BTheme.html new file mode 100644 index 0000000..e19e779 --- /dev/null +++ b/blib-1.1.7/docs/reference/html/BTheme.html @@ -0,0 +1,292 @@ +BTheme

BTheme

BTheme — theme support to visualize Blinkenlights

Synopsis

+
+
+
+struct      BColor;
+struct      BRectangle;
+struct      BWindow;
+#define     B_WINDOW_VALUE_ALL
+struct      BOverlay;
+struct      BTheme;
+BTheme*     b_theme_new_from_file           (const gchar *filename,
+                                             gboolean lazy_load,
+                                             GError **error);
+BTheme*     b_theme_new_from_scratch        (const gchar *title,
+                                             const gchar *type,
+                                             gint rows,
+                                             gint columns,
+                                             gint channels,
+                                             gint maxval,
+                                             gint width,
+                                             gint height);
+gboolean    b_theme_load                    (BTheme *theme,
+                                             GError **error);
+void        b_theme_unload                  (BTheme *theme);
+struct      BThemesQuery;
+enum        BThemesQueryFlags;
+GList*      b_themes_query                  (const gchar *themepath,
+                                             BThemesQuery *query);
+gboolean    (*BThemesForeachFunc)           (BTheme *theme,
+                                             gpointer callback_data);
+void        b_themes_foreach                (const gchar *themepath,
+                                             BThemesForeachFunc callback,
+                                             gpointer callback_data);
+void        b_themes_foreach_theme          (const gchar *themepath,
+                                             GHFunc callback,
+                                             gpointer callback_data);
+BTheme*     b_themes_lookup_theme           (const gchar *name,
+                                             const gchar *themepath,
+                                             GError **error);
+gboolean    b_theme_frame_diff_boundary     (BTheme *theme,
+                                             const guchar *prev_data,
+                                             const guchar *frame_data,
+                                             BRectangle *bbox);
+
+

Object Hierarchy

+
+  GObject
+   +----BObject
+         +----BTheme
+

Description

+A BTheme object defines the dimensions, features and the look of a +Blinkenlights installation. It allows to implement a graphical +simulation. BLib comes with two widgets, BViewGtk and BViewDirectFB +that hide the ugly details of BTheme. +

Details

struct BColor

struct BColor {
+
+  guchar  a;
+  guchar  r;
+  guchar  g;
+  guchar  b;
+};
+

+The BColor struct is used to store a single color. The color channels +have values in the range from 0 to 255. +

guchar aalpha channel value (opacity) +
guchar rred channel value +
guchar ggreen channel value +
guchar bblue channel value + +

struct BRectangle

struct BRectangle {
+
+  gint    x;
+  gint    y;
+  gint    w;
+  gint    h;
+};
+

+The BRectangle struct is used to store a rectangle. The coordinates +are pixel values. The x coordinate advances from left to right, the +y coordinate from top to bottom. +

gint xhorizontal offset from origin +
gint yvertical offset from origin +
gint wwidth +
gint hheight + +

struct BWindow

struct BWindow {
+
+  gint        value;
+  gint        row;
+  gint        column;
+  gint        src_x;
+  gint        src_y;
+  BRectangle  rect;
+};
+

+The BWindow struct defines a single overlay window used in a BTheme. +

gint valuethe value this window definition applies to +
gint rowthe row index +
gint columnthe column index +
gint src_xx coordinate in the upper left corner in the source image +
gint src_yy coordinate of the upper left corner in the source image +
BRectangle rectthe destination rectangle + +

B_WINDOW_VALUE_ALL

#define B_WINDOW_VALUE_ALL 0
+

+A special value used to indicate that the window definition is valid +for all possible values. +


struct BOverlay

struct BOverlay {
+
+  gchar       *image;
+  BColor       color;
+
+  GList       *windows;
+};
+

+The BOverlay struct defines a set of overlay windows used in a BTheme. +

gchar *imagean optional image to blend over the background +
BColor colorthe color is only used when no image is specified +
GList *windowsa GList of BWindow structs + +

struct BTheme

struct BTheme;

+The BTheme object defines the dimensions and the look of a +Blinkenlights installation. +


b_theme_new_from_file ()

BTheme*     b_theme_new_from_file           (const gchar *filename,
+                                             gboolean lazy_load,
+                                             GError **error);

+Tries to load a BTheme from the file pointed to by filename. If +lazy_load is TRUE, only the header is loaded.

+ +

filename : the name of the file to load the theme from +
lazy_load : whether to do lazy-loading +
error : location to store the error occuring, or NULL to ignore errors +
Returns : a newly allocated BTheme object or NULL if the load +failed +

b_theme_new_from_scratch ()

BTheme*     b_theme_new_from_scratch        (const gchar *title,
+                                             const gchar *type,
+                                             gint rows,
+                                             gint columns,
+                                             gint channels,
+                                             gint maxval,
+                                             gint width,
+                                             gint height);

+Creates a new BTheme object from scratch. This may be useful if +you want to quickly test a movie for a layout you don't have a +theme for. You need to call b_theme_load() before you can use the +new theme.

+ +

title : a descriptive title +
type : the theme type or NULL +
rows : the number of rows of windows +
columns : the number of columns of windows +
channels : the number of channels per window (must be 1) +
maxval : the maximum value +
width : screen width in pixels +
height : screen height in pixels +
Returns : a newly allocated, lazy-loaded, BTheme object +

b_theme_load ()

gboolean    b_theme_load                    (BTheme *theme,
+                                             GError **error);

+Loads all data into the theme. You only need to call this if you +lazy-loaded the theme or called b_theme_unload() before.

+ +

theme : a BTheme object +
error : location to store the error occuring, or NULL to ignore errors +
Returns : TRUE on success, FALSE otherwise +

b_theme_unload ()

void        b_theme_unload                  (BTheme *theme);

+Frees all data of a BTheme except the meta information stored in +the header.

+ +

theme : a BTheme object +

struct BThemesQuery

struct BThemesQuery {
+
+  BThemesQueryFlags  flags;
+
+  const gchar       *name;
+  const gchar       *type;
+  gint               rows;
+  gint               columns;
+  gint               width;
+  gint               height;
+};
+

+A structure that defines a query on the installed themes. Used by +b_themes_query(). +


enum BThemesQueryFlags

typedef enum
+{
+  B_THEMES_QUERY_NONE    = 0,
+  B_THEMES_QUERY_NAME    = 1 << 0,
+  B_THEMES_QUERY_TYPE    = 1 << 1,
+  B_THEMES_QUERY_ROWS    = 1 << 2,
+  B_THEMES_QUERY_COLUMNS = 1 << 3,
+  B_THEMES_QUERY_WIDTH   = 1 << 4,
+  B_THEMES_QUERY_HEIGHT  = 1 << 5
+} BThemesQueryFlags;
+

+Flags that define which values of a BThemesQuery are valid. +


b_themes_query ()

GList*      b_themes_query                  (const gchar *themepath,
+                                             BThemesQuery *query);

+Looks for themes as defined by query. If themepath is not +specified the default path is used. The default path can be overridden +by setting the environment variable B_THEME_PATH. +

+Each theme that matches the query is lazy-loaded.

+ +

themepath : a colon-separated list of directories to search or NULL to +use the default path +
query : pointer to a BThemesQuery +
Returns : a GList of newly allocated, lazy-loaded BTheme objects +or NULL if no matching theme was found +

BThemesForeachFunc ()

gboolean    (*BThemesForeachFunc)           (BTheme *theme,
+                                             gpointer callback_data);

+This function is called for each theme found by b_themes_foreach(). +

theme : +
callback_data : +
Returns : + + +

b_themes_foreach ()

void        b_themes_foreach                (const gchar *themepath,
+                                             BThemesForeachFunc callback,
+                                             gpointer callback_data);

+This function iterates over all themes in the themepath, lazy-loads them, +runs callback on the theme and unrefs it again. The iteration is stopped +if a callback returns FALSE. +

+If themepath is not specified, the default path is used. The +default path can be overridden by setting the environment variable +B_THEME_PATH.

+ +

themepath : a colon-separated list of directories to search or NULL to +use the default path +
callback : a function to call for each theme +
callback_data : data to pass to the callback +

b_themes_foreach_theme ()

void        b_themes_foreach_theme          (const gchar *themepath,
+                                             GHFunc callback,
+                                             gpointer callback_data);

Warning

b_themes_foreach_theme is deprecated and should not be used in newly-written code.

+Shouldn't be used in new code, use b_themes_foreach() instead.

+ +

themepath : +
callback : +
callback_data : +

b_themes_lookup_theme ()

BTheme*     b_themes_lookup_theme           (const gchar *name,
+                                             const gchar *themepath,
+                                             GError **error);

Warning

b_themes_lookup_theme is deprecated and should not be used in newly-written code.

+Shouldn't be used in new code, use b_themes_query() instead.

+ +

name : +
themepath : +
error : +
Returns : +

b_theme_frame_diff_boundary ()

gboolean    b_theme_frame_diff_boundary     (BTheme *theme,
+                                             const guchar *prev_data,
+                                             const guchar *frame_data,
+                                             BRectangle *bbox);

+Computes the bounding box of the difference image between two frames.

+ +

theme : a BTheme +
prev_data : data of the previous frame +
frame_data : data of the current frame +
bbox : returns bounding box +
Returns : TRUE if the bounding box is not empty. +

See Also

+BViewDirectFB, BViewGtk +

diff --git a/blib-1.1.7/docs/reference/html/BViewAA.html b/blib-1.1.7/docs/reference/html/BViewAA.html new file mode 100644 index 0000000..3ea5ebe --- /dev/null +++ b/blib-1.1.7/docs/reference/html/BViewAA.html @@ -0,0 +1,74 @@ +BViewAA

BViewAA

BViewAA —

Synopsis

+
+
+
+struct      BViewAA;
+BViewAA*    b_view_aa_new                   (aa_context *aac,
+                                             gint rows,
+                                             gint columns,
+                                             gint channels,
+                                             GError **error);
+void        b_view_aa_update                (BViewAA *view,
+                                             const guchar *frame_data);
+
+

Object Hierarchy

+
+  GObject
+   +----BViewAA
+

Description

+ +

Details

struct BViewAA

struct BViewAA;

+ +


b_view_aa_new ()

BViewAA*    b_view_aa_new                   (aa_context *aac,
+                                             gint rows,
+                                             gint columns,
+                                             gint channels,
+                                             GError **error);

+Creates a new BViewAA object suitable to display +Blinkenlights movies that fit the theme. Most of the information +from the theme is ignored, except for the placement of the windows.

+ +

aac : the AALIB context +
rows : +
columns : +
channels : +
error : location to store the error occuring, or NULL to ignore errors +
Returns : a new BViewAA or NULL in case of an error +

b_view_aa_update ()

void        b_view_aa_update                (BViewAA *view,
+                                             const guchar *frame_data);

+Displays a new frame on the view. The view expects frame_data +in the range of 0 to 255.

+ +

view : a BViewAA object +
frame_data : the frame data to display +
diff --git a/blib-1.1.7/docs/reference/html/BViewDirectFB.html b/blib-1.1.7/docs/reference/html/BViewDirectFB.html new file mode 100644 index 0000000..54a94c8 --- /dev/null +++ b/blib-1.1.7/docs/reference/html/BViewDirectFB.html @@ -0,0 +1,76 @@ +BViewDirectFB

BViewDirectFB

BViewDirectFB — a DirectFB widget to display Blinkenlights

Synopsis

+
+
+
+struct      BViewDirectFB;
+BViewDirectFB* b_view_directfb_new          (BTheme *theme,
+                                             IDirectFB *dfb,
+                                             IDirectFBSurface *dest,
+                                             GError **error);
+void        b_view_directfb_update          (BViewDirectFB *view,
+                                             const guchar *frame_data);
+
+

Object Hierarchy

+
+  GObject
+   +----BViewDirectFB
+

Description

+ +

Details

struct BViewDirectFB

struct BViewDirectFB;

+The BViewDirectFB struct shouldn't be accessed directly. Its members +are considered private. +


b_view_directfb_new ()

BViewDirectFB* b_view_directfb_new          (BTheme *theme,
+                                             IDirectFB *dfb,
+                                             IDirectFBSurface *dest,
+                                             GError **error);

+Creates a new BViewDirectFB object suitable to display +Blinkenlights movies that fit the theme. The view will render to +the dest surface. If its size doesn't fit the screen size +specified in the theme, the view is drawn centered on the dest +surface.

+ +

theme : a BTheme object +
dfb : the DirectFB super interface +
dest : the destination surface +
error : location to store the error occuring, or NULL to ignore errors +
Returns : a new BViewDirectFB or NULL in case of an error +

b_view_directfb_update ()

void        b_view_directfb_update          (BViewDirectFB *view,
+                                             const guchar *frame_data);

+Displays a new frame on the view. The view expects frame_data +in the range of 0 to 255.

+ +

view : a BViewDirectFB object +
frame_data : the frame data to display +

See Also

+BViewGtk +

diff --git a/blib-1.1.7/docs/reference/html/BViewGtk.html b/blib-1.1.7/docs/reference/html/BViewGtk.html new file mode 100644 index 0000000..18f306c --- /dev/null +++ b/blib-1.1.7/docs/reference/html/BViewGtk.html @@ -0,0 +1,72 @@ +BViewGtk

BViewGtk

BViewGtk — a GTK+ widget to display Blinkenlights

Synopsis

+
+
+
+struct      BViewGtk;
+GtkWidget*  b_view_gtk_new                  (BTheme *theme,
+                                             GError **error);
+void        b_view_gtk_update               (BViewGtk *view,
+                                             const guchar *frame_data);
+
+

Object Hierarchy

+
+  GObject
+   +----GtkObject
+         +----GtkWidget
+               +----GtkDrawingArea
+                     +----BViewGtk
+

Implemented Interfaces

+BViewGtk implements AtkImplementorIface. +

Description

+ +

Details

struct BViewGtk

struct BViewGtk;

+The BViewGtk struct shouldn't be accessed directly. Its members are +considered private. +


b_view_gtk_new ()

GtkWidget*  b_view_gtk_new                  (BTheme *theme,
+                                             GError **error);

+Creates a new widget suitable to display Blinkenlights movies that +fit the theme.

+ +

theme : a BTheme object +
error : location to store the error occuring, or NULL to ignore errors +
Returns : a new widget or NULL in case of an error +

b_view_gtk_update ()

void        b_view_gtk_update               (BViewGtk *view,
+                                             const guchar *frame_data);

+Displays a new frame on the view. The view expects frame_data +in the range of 0 to 255.

+ +

view : a BViewGtk widget +
frame_data : the frame data to display +

See Also

+BViewDirectFB +

diff --git a/blib-1.1.7/docs/reference/html/BViewPixbuf.html b/blib-1.1.7/docs/reference/html/BViewPixbuf.html new file mode 100644 index 0000000..25ff916 --- /dev/null +++ b/blib-1.1.7/docs/reference/html/BViewPixbuf.html @@ -0,0 +1,112 @@ +BViewPixbuf

BViewPixbuf

BViewPixbuf —

Synopsis

+
+
+
+struct      BViewPixbuf;
+BViewPixbuf* b_view_pixbuf_new              (gint rows,
+                                             gint columns,
+                                             gint channels,
+                                             GError **error);
+BViewPixbuf* b_view_pixbuf_new_theme        (BTheme *theme,
+                                             gboolean image_preload,
+                                             GError **error);
+const GdkPixbuf* b_view_pixbuf_load_image   (BViewPixbuf *view,
+                                             const gchar *filename,
+                                             GError **error);
+const GdkPixbuf* b_view_pixbuf_render       (BViewPixbuf *view,
+                                             const guchar *frame_data,
+                                             const BRectangle *clip,
+                                             GError **error);
+
+

Object Hierarchy

+
+  GObject
+   +----BViewPixbuf
+

Description

+ +

Details

struct BViewPixbuf

struct BViewPixbuf;

+ +


b_view_pixbuf_new ()

BViewPixbuf* b_view_pixbuf_new              (gint rows,
+                                             gint columns,
+                                             gint channels,
+                                             GError **error);

+Creates a new BViewPixbuf for the given parameters. This is a +simple version that renders a grayscale pixel for every window.

+ +

rows : +
columns : +
channels : +
error : location to store the error occuring, or NULL to ignore errors +
Returns : a new view or NULL in case of an error +

b_view_pixbuf_new_theme ()

BViewPixbuf* b_view_pixbuf_new_theme        (BTheme *theme,
+                                             gboolean image_preload,
+                                             GError **error);

+Creates a pixbuf renderer for Blinkenlights frames using the +theme. When image_preload is enabled, all images refered to by +the theme are loaded. If an error occurs loading the images, +b_view_pixbuf_new() will fail and return NULL. If a view is +created with preloaded images, calling b_view_pixbuf_render() on +it will always succeed so you can skip error checking later.

+ +

theme : a BTheme object +
image_preload : whether to preload all images +
error : location to store the error occuring, + or NULL to ignore errors +
Returns : a new view or NULL in case of an error +

b_view_pixbuf_load_image ()

const GdkPixbuf* b_view_pixbuf_load_image   (BViewPixbuf *view,
+                                             const gchar *filename,
+                                             GError **error);

+Renders a frame on the view and returns a pointer to a GdkPixbuf +holding the rendered image. The pixbuf is owned by the view, you +may only read from it. +

+The view expects frame_data in the range of 0 to 255.

+ +

view : a BViewPixbuf object +
filename : the filename of the image to load +
error : location to store the error occuring, or NULL to ignore errors +
Returns : a pointer to a GdkPixbuf with the rendered frame +

b_view_pixbuf_render ()

const GdkPixbuf* b_view_pixbuf_render       (BViewPixbuf *view,
+                                             const guchar *frame_data,
+                                             const BRectangle *clip,
+                                             GError **error);

+Renders a frame on the view. The view expects frame_data in the +range of 0 to 255.

+ +

view : a BViewPixbuf object +
frame_data : the frame data to display +
clip : clipping rectangle (or NULL) +
error : location to store the error occuring, or NULL to ignore + errors +
Returns : a reference to a GdkPixbuf with the rendered frame. +
diff --git a/blib-1.1.7/docs/reference/html/blib-BLib.html b/blib-1.1.7/docs/reference/html/blib-BLib.html new file mode 100644 index 0000000..b93e52c --- /dev/null +++ b/blib-1.1.7/docs/reference/html/blib-BLib.html @@ -0,0 +1,46 @@ +BLib

BLib

BLib — BLib library initialization

Synopsis

+
+
+
+void        b_init                          (void);
+

Description

+ +

Details

b_init ()

void        b_init                          (void);

+This function initializes the BLib library. It calls g_type_init() +for you, initializes the random number generator and registers some +transform functions needed for the deserialization routines. +

+It is safe to call this function multiple times but you should at +least call it once before you use any other BLib functions.

+ +

diff --git a/blib-1.1.7/docs/reference/html/blib-BModule-Internal-API.html b/blib-1.1.7/docs/reference/html/blib-BModule-Internal-API.html new file mode 100644 index 0000000..866a780 --- /dev/null +++ b/blib-1.1.7/docs/reference/html/blib-BModule-Internal-API.html @@ -0,0 +1,148 @@ +BModule Internal API

BModule Internal API

BModule Internal API — the internal API for users of BModules

Synopsis

+
+
+
+BModule*    b_module_new                    (GType module_type,
+                                             gint width,
+                                             gint height,
+                                             guchar *buffer,
+                                             BModulePaintCallback paint_callback,
+                                             gpointer paint_data,
+                                             GError **error);
+void        b_module_set_aspect             (BModule *module,
+                                             gdouble aspect_ratio);
+gboolean    b_module_prepare                (BModule *module,
+                                             GError **error);
+void        b_module_relax                  (BModule *module);
+void        b_module_start                  (BModule *module);
+void        b_module_stop                   (BModule *module);
+void        b_module_event                  (BModule *module,
+                                             BModuleEvent *event);
+gint        b_module_tick                   (BModule *module);
+void        b_module_describe               (BModule *module,
+                                             gchar **title,
+                                             gchar **description,
+                                             gchar **author);
+

Description

+ +

Details

b_module_new ()

BModule*    b_module_new                    (GType module_type,
+                                             gint width,
+                                             gint height,
+                                             guchar *buffer,
+                                             BModulePaintCallback paint_callback,
+                                             gpointer paint_data,
+                                             GError **error);

+This function tries to create the class for the module_type and +queries it with the given width and height. Only if the class can +handle the requested size, a BModule instance is created and +initialized with the given values.

+ +

module_type : the type of module to create +
width : width of the frame buffer +
height : height of the frame buffer +
buffer : pointer to a preallocated buffer or NULL +
paint_callback : the function to call in b_module_paint() +
paint_data : data to pass to the paint_callback +
error : location to store the error occuring, or NULL to ignore errors +
Returns : the newly allocate BModule object +

b_module_set_aspect ()

void        b_module_set_aspect             (BModule *module,
+                                             gdouble aspect_ratio);

+Sets the pixel (or window) aspect ratio for the module. Most +modules ignore this value but some may adapt their output to take +the shape of pixels into account.

+ +

module : a BModule object +
aspect_ratio : the new pixel aspect ratio (x / y) +

b_module_prepare ()

gboolean    b_module_prepare                (BModule *module,
+                                             GError **error);

+This function first queries the module once more to check that it +can handle the current settings. If the query succeeds, the prepare() +method of the module is called. The module should then prepare +itself and will be able to start as soon as b_module_start() is called.

+ +

module : a BModule object +
error : location to store the error occuring, or NULL to ignore errors +
Returns : TRUE is the module has successfully prepared itself, +FALSE otherwise +

b_module_relax ()

void        b_module_relax                  (BModule *module);

+Calls the relax() method of the module causing it to release +resources allocated in b_module_prepare().

+ +

module : a BModule object +

b_module_start ()

void        b_module_start                  (BModule *module);

+Emits the start signal for module. If module has a lifetime set, +a timer is installed that stops the module when the lifetime expires. +

+You need to prepare module by calling b_module_prepare() before it +can be started.

+ +

module : a BModule object +

b_module_stop ()

void        b_module_stop                   (BModule *module);

+Emits the stop signal for module. You may only call this function +for a BModule that is currently running.

+ +

module : a BModule object +

b_module_event ()

void        b_module_event                  (BModule *module,
+                                             BModuleEvent *event);

+Dispatches an event to module by calling its event() method with +event. This function has no effect if the module is not currently +running.

+ +

module : a BModule object +
event : pointer to a BModuleEvent +

b_module_tick ()

gint        b_module_tick                   (BModule *module);

+Calls the tick() method of module. You may only call this function +for a BModule that is currently running.

+ +

module : a BModule object +
Returns : the number of milliseconds until tick() should be +called again or -1 to indicate that no further ticks are requested +

b_module_describe ()

void        b_module_describe               (BModule *module,
+                                             gchar **title,
+                                             gchar **description,
+                                             gchar **author);

+This function queries module for a title, description and the name +of the author. It does so by calling the modules describe() method. +You may pass NULL as return location if you are not interested in +a particular information. The title is guaranteed to be available, +description and author may be NULL if the module doesn't provide +this information. +

+You must free all returned strings using g_free() if you don't need +them any longer.

+ +

module : a BModule object +
title : return location for the module title or NULL +
description : return location for the module description or NULL +
author : return location for the name of the module author or NULL +
diff --git a/blib-1.1.7/docs/reference/html/blib-BModule-Utilities.html b/blib-1.1.7/docs/reference/html/blib-BModule-Utilities.html new file mode 100644 index 0000000..5ec81f1 --- /dev/null +++ b/blib-1.1.7/docs/reference/html/blib-BModule-Utilities.html @@ -0,0 +1,82 @@ +BModule Utilities

BModule Utilities

BModule Utilities — utility functions for BModule implementations

Synopsis

+
+
+
+void        b_module_draw_point             (BModule *module,
+                                             gint x,
+                                             gint y,
+                                             guchar value);
+void        b_module_draw_line              (BModule *module,
+                                             gint x1,
+                                             gint y1,
+                                             gint x2,
+                                             gint y2,
+                                             guchar value);
+void        b_module_fill                   (BModule *module,
+                                             guchar value);
+

Description

+ +

Details

b_module_draw_point ()

void        b_module_draw_point             (BModule *module,
+                                             gint x,
+                                             gint y,
+                                             guchar value);

+Draws a point to the module's frame buffer. It is safe to specify +coordinates outside the buffer.

+ +

module : a BModule object +
x : x coordinate +
y : y coordinate +
value : the color to draw with +

b_module_draw_line ()

void        b_module_draw_line              (BModule *module,
+                                             gint x1,
+                                             gint y1,
+                                             gint x2,
+                                             gint y2,
+                                             guchar value);

+Draws a one-pixel wide line between two points to the module's +frame buffer. The endpoints are included in the line. If the line +exceeds the buffer, it is properly clipped.

+ +

module : a BModule object +
x1 : x coordinate of the start point +
y1 : y coordinate of the start point +
x2 : x coordinate of the end point +
y2 : y coordinate of the end point +
value : the color to draw with +

b_module_fill ()

void        b_module_fill                   (BModule *module,
+                                             guchar value);

+Fills the module's framebuffer with value.

+ +

module : a BModule object +
value : the color to draw with +
diff --git a/blib-1.1.7/docs/reference/html/blib-BMovieEffects.html b/blib-1.1.7/docs/reference/html/blib-BMovieEffects.html new file mode 100644 index 0000000..71263bd --- /dev/null +++ b/blib-1.1.7/docs/reference/html/blib-BMovieEffects.html @@ -0,0 +1,73 @@ +BMovieEffects

BMovieEffects

BMovieEffects — simple effects on a movie

Synopsis

+
+
+
+void        b_movie_normalize               (BMovie *movie,
+                                             gint maxval);
+void        b_movie_apply_colormap          (BMovie *movie,
+                                             guchar *map);
+void        b_movie_apply_effects           (BMovie *movie,
+                                             BEffects *effects,
+                                             gboolean reverse,
+                                             gdouble speed);
+

Description

+ +

Details

b_movie_normalize ()

void        b_movie_normalize               (BMovie *movie,
+                                             gint maxval);

+Changes the maximum value for movie, that is the value that will +cause the lamp to glow with full intensity. This function iterates +over all frames of the movie and changes the frame data accordingly.

+ +

movie : a BMovie object +
maxval : the new maximum value to apply to movie +

b_movie_apply_colormap ()

void        b_movie_apply_colormap          (BMovie *movie,
+                                             guchar *map);

+Applies a mapping defined by map to all frames of the movie. The +mapping must not exceed the movie's maxval.

+ +

movie : a BMovie object +
map : a LUT that remaps each color value +

b_movie_apply_effects ()

void        b_movie_apply_effects           (BMovie *movie,
+                                             BEffects *effects,
+                                             gboolean reverse,
+                                             gdouble speed);

+If effects is non-NULL, the effects described by it are applied +to movie. If reverse is TRUE, the order of frames is reversed. +If speed is different from 1.0, the frame timing is adjusted; for +example a value of 2.0 makes the movie play with double speed.

+ +

movie : a BMovie object +
effects : a BEffects object or NULL +
reverse : whether to reverse the order of frames in movie +
speed : an adjustment factor to be applied on the frame timing +
diff --git a/blib-1.1.7/docs/reference/html/blib-BPacket.html b/blib-1.1.7/docs/reference/html/blib-BPacket.html new file mode 100644 index 0000000..601c956 --- /dev/null +++ b/blib-1.1.7/docs/reference/html/blib-BPacket.html @@ -0,0 +1,98 @@ +BPacket

BPacket

BPacket — the UDP packet used to transport a single frame

Synopsis

+
+
+
+struct      BPacket;
+union       BPacketHeader;
+BPacket*    b_packet_new                    (gint width,
+                                             gint height,
+                                             gint channels,
+                                             gint maxval,
+                                             gint *data_size);
+gsize       b_packet_size                   (BPacket *packet);
+void        b_packet_hton                   (BPacket *packet);
+void        b_packet_ntoh                   (BPacket *packet);
+

Description

+A BPacket consists of a mcu_frame_header struct followed by the +actual frame data. It corresponds to a single animation frame. +

Details

struct BPacket

struct BPacket {
+
+  BPacketHeader      header;
+  guchar             data[0];
+};
+

+The BPacket struct has a variable size which is determined by the +values passed to b_packet_new(). +

BPacketHeader headerthe Blinkenlights frame header +
guchar data[0]the frame data + +

union BPacketHeader

union BPacketHeader
+{
+  mcu_frame_header_t  mcu_frame_h;
+  heartbeat_header_t  heartbeat_h;
+};
+

+ +


b_packet_new ()

BPacket*    b_packet_new                    (gint width,
+                                             gint height,
+                                             gint channels,
+                                             gint maxval,
+                                             gint *data_size);

+Allocates a new BPacket structure and initializes it with the +given values. If data_size is non-NULL the size of the data area +(in bytes) is returned via this variable. +

+The packet should be freed with g_free() when it is not needed any +longer.

+ +

width : the number of pixels per row +
height : the number of pixels per column +
channels : the number of channels per pixels +
maxval : the maximum value +
data_size : returns the size of the packet data +
Returns : a newly allocated BPacket. +

b_packet_size ()

gsize       b_packet_size                   (BPacket *packet);

+ +

packet : +
Returns : + + +

b_packet_hton ()

void        b_packet_hton                   (BPacket *packet);

+Converts all members of packet from host to network byteorder.

+ +

packet : pointer to a BPacket +

b_packet_ntoh ()

void        b_packet_ntoh                   (BPacket *packet);

+Converts all members of packet from network to host byteorder.

+ +

packet : pointer to a BPacket +
diff --git a/blib-1.1.7/docs/reference/html/blib-BParams.html b/blib-1.1.7/docs/reference/html/blib-BParams.html new file mode 100644 index 0000000..f20ecac --- /dev/null +++ b/blib-1.1.7/docs/reference/html/blib-BParams.html @@ -0,0 +1,60 @@ +BParams

BParams

BParams — Additional Parameter types introduced by BLib

Synopsis

+
+
+
+#define     B_TYPE_PARAM_FILENAME
+GParamSpec* b_param_spec_filename           (const gchar *name,
+                                             const gchar *nick,
+                                             const gchar *blurb,
+                                             gchar *default_value,
+                                             GParamFlags flags);
+
+

Description

+ +

Details

B_TYPE_PARAM_FILENAME

#define B_TYPE_PARAM_FILENAME           (b_param_filename_get_type ())
+

+The GType of the param spec for a B_TYPE_FILENAME property. +


b_param_spec_filename ()

GParamSpec* b_param_spec_filename           (const gchar *name,
+                                             const gchar *nick,
+                                             const gchar *blurb,
+                                             gchar *default_value,
+                                             GParamFlags flags);

+Creates a new GParamSpec for a B_TYPE_FILENAME property.

+ +

name : the property name +
nick : an optional short version of the name +
blurb : an optional description +
default_value : the default value (may be NULL) +
flags : the GParamFlags for this param_spec +
Returns : the newly allocate GParamSpec. +
diff --git a/blib-1.1.7/docs/reference/html/blib-BParser.html b/blib-1.1.7/docs/reference/html/blib-BParser.html new file mode 100644 index 0000000..7ab5274 --- /dev/null +++ b/blib-1.1.7/docs/reference/html/blib-BParser.html @@ -0,0 +1,182 @@ +BParser

BParser

BParser — an XML parser that offers a simplified SAX API

Synopsis

+
+
+
+struct      BParser;
+enum        BParserState;
+BParserState (*BParserStartFunc)            (BParserState state,
+                                             const gchar *element_name,
+                                             const gchar **attribute_names,
+                                             const gchar **attribute_values,
+                                             gpointer user_data,
+                                             GError **error);
+BParserState (*BParserEndFunc)              (BParserState state,
+                                             const gchar *element_name,
+                                             const gchar *cdata,
+                                             gsize cdata_len,
+                                             gpointer user_data,
+                                             GError **error);
+BParser*    b_parser_new                    (BParserStartFunc start_element,
+                                             BParserEndFunc end_element,
+                                             gpointer user_data);
+void        b_parser_free                   (BParser *parser);
+gboolean    b_parser_parse                  (BParser *parser,
+                                             const gchar *text,
+                                             gssize text_len,
+                                             GError **error);
+gboolean    b_parser_end_parse              (BParser *parser,
+                                             GError **error);
+gboolean    b_parser_parse_io_channel       (BParser *parser,
+                                             GIOChannel *io,
+                                             gboolean recode,
+                                             GError **error);
+BParserState b_parser_get_state             (BParser *parser);
+gchar*      b_parse_encoding                (const gchar *text,
+                                             gint text_len);
+

Description

+ +

Details

struct BParser

struct BParser;

+The BParser struct is private. +


enum BParserState

typedef enum
+{
+  B_PARSER_STATE_UNKNOWN,
+  B_PARSER_STATE_TOPLEVEL,
+  B_PARSER_STATE_USER = 0x10  /* first user state, use as many as you need */
+} BParserState;
+

+An enumeration used to indicate the state of a BParser. Users of +BParser will want to add their own states; they may use any values +equal or greater than B_PARSER_STATE_USER. +


BParserStartFunc ()

BParserState (*BParserStartFunc)            (BParserState state,
+                                             const gchar *element_name,
+                                             const gchar **attribute_names,
+                                             const gchar **attribute_values,
+                                             gpointer user_data,
+                                             GError **error);

+The function that is called when the parser hits the start of an +element. Return B_PARSER_STATE_UNKNOWN from this function to indicate +an error which should cause the parser to abort. +

state :the current state of the parser +
element_name :the name of the element +
attribute_names :a NULL-terminated list of attribute names +
attribute_values :a NULL-terminated list of attribute values +
user_data :the data that was passed to b_parser_new() +
error :the error pointer that was passed to b_parser_new() +
Returns :the new state of the parser + + +

BParserEndFunc ()

BParserState (*BParserEndFunc)              (BParserState state,
+                                             const gchar *element_name,
+                                             const gchar *cdata,
+                                             gsize cdata_len,
+                                             gpointer user_data,
+                                             GError **error);

+The function that is called when the parser hits the end of an +element. Return B_PARSER_STATE_UNKNOWN from this function to +indicate an error which should cause the parser to abort. +

state :the current state of the parser +
element_name :the name of the element +
cdata :pointer to character data that occured between the opening +and closing tags +
cdata_len :the length of cdata in bytes +
user_data :the data that was passed to b_parser_new() +
error :the error pointer that was passed to b_parser_new() +
Returns :the new state of the parser + + +

b_parser_new ()

BParser*    b_parser_new                    (BParserStartFunc start_element,
+                                             BParserEndFunc end_element,
+                                             gpointer user_data);

+Creates a new BParser suited to parse XML files. The BParser +should later be freed using b_parser_free().

+ +

start_element : the function to call when an element is started +
end_element : the function to call when an element is closed +
user_data : data to pass to the functions above +
Returns : a newly allocated BParser +

b_parser_free ()

void        b_parser_free                   (BParser *parser);

+Frees the resources allocated for parser. You must not access +parser after calling this function.

+ +

parser : a BParser +

b_parser_parse ()

gboolean    b_parser_parse                  (BParser *parser,
+                                             const gchar *text,
+                                             gssize text_len,
+                                             GError **error);

+Let the parser process a chunk of text. You need to call +b_parser_end_parse() after you passed the last chunk to the parser.

+ +

parser : a BParser +
text : pointer to a text buffer to parse +
text_len : the number of bytes to parse from text +
error : location to store the error occuring, or NULL to ignore errors +
Returns : TRUE if parsing was successful, FALSE if an error occured +

b_parser_end_parse ()

gboolean    b_parser_end_parse              (BParser *parser,
+                                             GError **error);

+Finishes the parser. After calling this function, you must not +call b_parser_parse() on the parser again.

+ +

parser : a BParser +
error : location to store the error occuring, or NULL to ignore errors +
Returns : TRUE if parser was successfully finished, FALSE +otherwise +

b_parser_parse_io_channel ()

gboolean    b_parser_parse_io_channel       (BParser *parser,
+                                             GIOChannel *io,
+                                             gboolean recode,
+                                             GError **error);

+Reads data from the GIOChannel io and passes it to parser. If +recode is TRUE, the data should start with an XML header so this +function can determine the encoding of the XML data and convert it +to UTF-8 for you.

+ +

parser : a BParser +
io : a GIOChannel to read the text to parse from +
recode : TRUE if you want the parser to do automatic encoding conversion +
error : location to store the error occuring, or NULL to ignore errors +
Returns : TRUE if parsing was successful, FALSE otherwise +

b_parser_get_state ()

BParserState b_parser_get_state             (BParser *parser);

+Retrieves the current state of parser.

+ +

parser : a BParser +
Returns : the state of parser +

b_parse_encoding ()

gchar*      b_parse_encoding                (const gchar *text,
+                                             gint text_len);

+Scans the text for an XML header with encoding specification.

+ +

text : a string to parse, must be at least 20 bytes +
text_len : the maximum number of bytes to parse from text +
Returns : a copy of the encoding string or NULL if none was +found +

See Also

+GMarkupParser +

diff --git a/blib-1.1.7/docs/reference/html/blib-BProtocol.html b/blib-1.1.7/docs/reference/html/blib-BProtocol.html new file mode 100644 index 0000000..ca8ecb1 --- /dev/null +++ b/blib-1.1.7/docs/reference/html/blib-BProtocol.html @@ -0,0 +1,98 @@ +BProtocol

BProtocol

BProtocol — definiton of the Blinkenlights Network Protocol

Synopsis

+
+
+
+#define     MAGIC_MCU_SETUP
+#define     MAGIC_MCU_FRAME
+#define     MAGIC_MCU_DEVCTRL
+#define     MAGIC_BLFRAME
+#define     MAGIC_BLFRAME_256
+#define     MAGIC_HEARTBEAT
+#define     MCU_LISTENER_PORT
+#define     MCU_ID_ANY
+#define     MCU_DEVCTRL_OFF
+#define     MCU_DEVCTRL_ON
+#define     B_HEARTBEAT_PORT
+#define     B_HEARTBEAT_INTERVAL
+

Description

+The bprotocol.h header file defines the Blinkenlights Network +Protocol. It contains structure definitions for the different network +packets as well as defines for magic numbers. +

+This header file doesn't use any GLib types to make it possible to +include it from applications that can not or don't want to use BLib. +As a user of BLib you don't need to care about the details of the +protocol described here. Use the BSender and BReceiver instead. +

Details

MAGIC_MCU_SETUP

#define MAGIC_MCU_SETUP     0x2342FEED  /* MCU Configuration packet              */
+

+The magic number that identifies a setup packet. +


MAGIC_MCU_FRAME

#define MAGIC_MCU_FRAME     0x23542666  /* MCU Frame packet                      */
+

+The magic number that identifies a frame packet. +


MAGIC_MCU_DEVCTRL

#define MAGIC_MCU_DEVCTRL   0x23542667  /* MCU Device Control packet             */
+

+The magic number that identifies a device control packet. +


MAGIC_BLFRAME

#define MAGIC_BLFRAME       0xDEADBEEF  /* Original BL Frame Packet              */
+

+The magic number that identifies a frame packet in the old +Blinkenlights protocol. BLib doesn't support this old version. +


MAGIC_BLFRAME_256

#define MAGIC_BLFRAME_256   0xFEEDBEEF  /* Extendend BL Frame Packet (Greyscale) */
+

+The magic number that identifies a frame packet in an extension to the +old Blinkenlights protocol. BLib doesn't support this old version. +


MAGIC_HEARTBEAT

#define MAGIC_HEARTBEAT     0x42424242  /* Heartbeat packet                      */
+

+The magic number that identifies a heartbeat package as used with +the BlinkenProxy protocol. +


MCU_LISTENER_PORT

#define MCU_LISTENER_PORT    2323
+

+The default port a matrox control unit listens too. +


MCU_ID_ANY

#define MCU_ID_ANY           -1
+

+Use this value in a setup packet to address all listening matrix +control units. +


MCU_DEVCTRL_OFF

#define MCU_DEVCTRL_OFF  0    /* switch device off */
+

+Use this value in a device control packet to switch a device off. +


MCU_DEVCTRL_ON

#define MCU_DEVCTRL_ON   1    /* switch device on  */
+

+Use this value in a device control packet to switch a device on. +


B_HEARTBEAT_PORT

#define B_HEARTBEAT_PORT       4242
+

+The default port number for BlinkenProxy heartbeat packets. +


B_HEARTBEAT_INTERVAL

#define B_HEARTBEAT_INTERVAL   5000     /* Heartbeat interval in ms    */
+

+The default timeout in milliseconds between BlinkenProxy heartbeat packets. +

See Also

+BPacket, BSender, BReceiver +

diff --git a/blib-1.1.7/docs/reference/html/blib-BTypes.html b/blib-1.1.7/docs/reference/html/blib-BTypes.html new file mode 100644 index 0000000..9243988 --- /dev/null +++ b/blib-1.1.7/docs/reference/html/blib-BTypes.html @@ -0,0 +1,51 @@ +BTypes

BTypes

BTypes — Additional GTypes registered by BLib

Synopsis

+
+
+
+#define     B_TYPE_FILENAME
+#define     B_VALUE_HOLDS_FILENAME          (value)
+
+

Description

+ +

Details

B_TYPE_FILENAME

#define B_TYPE_FILENAME               (b_filename_get_type ())
+

+The filename type is derived from G_TYPE_STRING and is used to +indicate that a string should be interpreted as a filename. This +macro returns the GType for this type. +


B_VALUE_HOLDS_FILENAME()

#define B_VALUE_HOLDS_FILENAME(value) (G_TYPE_CHECK_VALUE_TYPE ((value), B_TYPE_FILENAME))
+

+Return whether the given GValue can hold values of type B_TYPE_FILENAME. +

value :a GValue + + +
diff --git a/blib-1.1.7/docs/reference/html/blib-BUtils.html b/blib-1.1.7/docs/reference/html/blib-BUtils.html new file mode 100644 index 0000000..a22b214 --- /dev/null +++ b/blib-1.1.7/docs/reference/html/blib-BUtils.html @@ -0,0 +1,189 @@ +BUtils

BUtils

BUtils — a collection of utility functions, mainly used from parsers

Synopsis

+
+
+
+gchar*      b_filename_from_utf8            (const gchar *name,
+                                             const gchar *root,
+                                             GError **error);
+gboolean    b_parse_int                     (const gchar *str,
+                                             gint *value);
+gboolean    b_parse_boolean                 (const gchar *str,
+                                             gboolean *value);
+gboolean    b_parse_double                  (const gchar *str,
+                                             gdouble *value);
+gboolean    b_parse_coordinates             (const gchar **names,
+                                             const gchar **values,
+                                             gint *x,
+                                             gint *y);
+gboolean    b_parse_rectangle               (const gchar **names,
+                                             const gchar **values,
+                                             BRectangle *rect);
+gboolean    b_parse_color                   (const gchar **names,
+                                             const gchar **values,
+                                             BColor *color);
+gboolean    b_parse_param                   (GObject *object,
+                                             const gchar *root,
+                                             const gchar **names,
+                                             const gchar **values,
+                                             GError **error);
+gboolean    b_object_set_property           (GObject *object,
+                                             const gchar *key,
+                                             const gchar *value,
+                                             const gchar *root,
+                                             GError **error);
+void        b_rectangle_union               (const BRectangle *src1,
+                                             const BRectangle *src2,
+                                             BRectangle *dest);
+gboolean    b_rectangle_intersect           (const BRectangle *src1,
+                                             const BRectangle *src2,
+                                             BRectangle *dest);
+

Description

+ +

Details

b_filename_from_utf8 ()

gchar*      b_filename_from_utf8            (const gchar *name,
+                                             const gchar *root,
+                                             GError **error);

+Convert name in UTF-8 encoding to a filename in the filesystem's +encoding. If root is non-NULL and name is not an absolute +filename, the returned filename is built using root as a prefix.

+ +

name : the filename in UTF-8 encoding +
root : an optional path to use +
error : location to store the error occuring, or NULL to ignore errors +
Returns : a pointer to the newly allocated filename or NULL in +case of an error. This value must be freed with g_free(). +

b_parse_int ()

gboolean    b_parse_int                     (const gchar *str,
+                                             gint *value);

+Parse an integer value from a string.

+ +

str : the string to parse +
value : location to store the integer value +
Returns : TRUE if the string could be parsed, FALSE otherwise +

b_parse_boolean ()

gboolean    b_parse_boolean                 (const gchar *str,
+                                             gboolean *value);

+Parse a boolean value from a string.

+ +

str : the string to parse +
value : location to store the boolean value +
Returns : TRUE if the string could be parsed, FALSE otherwise +

b_parse_double ()

gboolean    b_parse_double                  (const gchar *str,
+                                             gdouble *value);

+Parse a double (floating-point) value from a string.

+ +

str : the string to parse +
value : location to store the double value +
Returns : TRUE if the string could be parsed, FALSE otherwise +

b_parse_coordinates ()

gboolean    b_parse_coordinates             (const gchar **names,
+                                             const gchar **values,
+                                             gint *x,
+                                             gint *y);

+Parses a pair of name/value arrays looking for the names "x" and "y" +and tries to parse the associated values into integer values.

+ +

names : a NULL-terminated array of names +
values : a NULL-terminated array of values +
x : location to store the value of the x coordinate +
y : location to store the value of the y coordinate +
Returns : TRUE if both coordinates could be parsed, FALSE otherwise +

b_parse_rectangle ()

gboolean    b_parse_rectangle               (const gchar **names,
+                                             const gchar **values,
+                                             BRectangle *rect);

+Parses a pair of name/value arrays looking for the names "x", "y", +"width" and "heigth" and tries to parse the associated values into +a BRectangle.

+ +

names : a NULL-terminated array of names +
values : a NULL-terminated array of values +
rect : pointer to a BRectangle to store the result +
Returns : TRUE if the rectangle could be parsed, FALSE otherwise +

b_parse_color ()

gboolean    b_parse_color                   (const gchar **names,
+                                             const gchar **values,
+                                             BColor *color);

+Parses a pair of name/value arrays looking for the name "color" and +tries to convert the associated value to a BColor. The color value +is expected to be in hexadecimal notation as in HTML.

+ +

names : a NULL-terminated array of names +
values : a NULL-terminated array of values +
color : pointer to a BColor to store the result +
Returns : TRUE if the color could be parsed, FALSE otherwise +

b_parse_param ()

gboolean    b_parse_param                   (GObject *object,
+                                             const gchar *root,
+                                             const gchar **names,
+                                             const gchar **values,
+                                             GError **error);

+Parses a pair of name/value arrays looking for the names "key" and +"value". The key/value pair is then used to set the respective object +property by calling b_object_set_property().

+ +

object : a GObject +
root : an optional string to use as root if a filename is set +
names : a NULL-terminated array of names +
values : a NULL-terminated array of values +
error : location to store the error occuring, or NULL to ignore errors +
Returns : TRUE if parsing was successful, FALSE otherwise +

b_object_set_property ()

gboolean    b_object_set_property           (GObject *object,
+                                             const gchar *key,
+                                             const gchar *value,
+                                             const gchar *root,
+                                             GError **error);

+Sets the object property key by interpreting the string +value. This function takes care of converting the string to the +proper type. If the property is a B_TYPE_FILENAME the filename is +build using the root parameter.

+ +

object : a GObject +
key : the name of the property +
value : the property value as a string +
root : an optional string to use as root if a filename property is set +
error : location to store the error occuring, or NULL to ignore errors +
Returns : TRUE on success, FALSE otherwise +

b_rectangle_union ()

void        b_rectangle_union               (const BRectangle *src1,
+                                             const BRectangle *src2,
+                                             BRectangle *dest);

+ +

src1 : +
src2 : +
dest : + + +

b_rectangle_intersect ()

gboolean    b_rectangle_intersect           (const BRectangle *src1,
+                                             const BRectangle *src2,
+                                             BRectangle *dest);

+ +

src1 : +
src2 : +
dest : +
Returns : + + +
diff --git a/blib-1.1.7/docs/reference/html/blib-BWriter.html b/blib-1.1.7/docs/reference/html/blib-BWriter.html new file mode 100644 index 0000000..2b2f65d --- /dev/null +++ b/blib-1.1.7/docs/reference/html/blib-BWriter.html @@ -0,0 +1,104 @@ +BWriter

BWriter

BWriter — writes XML files

Synopsis

+
+
+
+struct      BWriter;
+BWriter*    b_writer_new                    (FILE *stream,
+                                             gint indent);
+void        b_writer_free                   (BWriter *writer);
+void        b_write_header                  (BWriter *writer,
+                                             const gchar *encoding);
+void        b_write_open_tag                (BWriter *writer,
+                                             const gchar *tag,
+                                             ...);
+void        b_write_close_tag               (BWriter *writer,
+                                             const gchar *tag);
+void        b_write_element                 (BWriter *writer,
+                                             const gchar *tag,
+                                             const gchar *value,
+                                             ...);
+

Description

+ +

Details

struct BWriter

struct BWriter;

+The BWriter struct is private. +


b_writer_new ()

BWriter*    b_writer_new                    (FILE *stream,
+                                             gint indent);

+Creates a new BWriter which gives a convenient interface to write +XML data to stream. The writer should later be freed using +b_writer_free().

+ +

stream : a FILE stream prepared for writing +
indent : how many characters to indent per nesting level +
Returns : a newly allocate BWriter +

b_writer_free ()

void        b_writer_free                   (BWriter *writer);

+Frees the resources allocated for writer. You must not access +writer after calling this function.

+ +

writer : a BWriter +

b_write_header ()

void        b_write_header                  (BWriter *writer,
+                                             const gchar *encoding);

+Writes an XML header to the stream associated with writer.

+ +

writer : a BWriter +
encoding : an optional encoding string or NULL +

b_write_open_tag ()

void        b_write_open_tag                (BWriter *writer,
+                                             const gchar *tag,
+                                             ...);

+Writes an opening XML tag with the element name tag to the stream +associated with writer. You can pass a NULL-terminated list of +key/value pairs that are written out as attributes.

+ +

writer : a BWriter +
tag : the name of the element to open +
... : an optional key/value pairs interpreted as attributes +

b_write_close_tag ()

void        b_write_close_tag               (BWriter *writer,
+                                             const gchar *tag);

+Writes a closing XML tag with the element name tag to the stream +associated with writer.

+ +

writer : a BWriter +
tag : the name of the element to close +

b_write_element ()

void        b_write_element                 (BWriter *writer,
+                                             const gchar *tag,
+                                             const gchar *value,
+                                             ...);

+Writes an XML element with the name tag and the value value to +the stream associated with writer. If value is NULL, an empty +element is written. You can pass a NULL-terminated list of +key/value pairs that are written out as attributes.

+ +

writer : a BWriter +
tag : the element name +
value : the element value +
... : an optional key/value pairs interpreted as attributes +
diff --git a/blib-1.1.7/docs/reference/html/blib-bsocket.html b/blib-1.1.7/docs/reference/html/blib-bsocket.html new file mode 100644 index 0000000..6cf6248 --- /dev/null +++ b/blib-1.1.7/docs/reference/html/blib-bsocket.html @@ -0,0 +1,67 @@ +bsocket

bsocket

bsocket —

Synopsis

+
+
+
+enum        BSocketOptions;
+gboolean    b_socket_init                   (GError **error);
+gint        b_socket_udp_new                (BSocketOptions options,
+                                             GError **error);
+

Description

+ +

Details

enum BSocketOptions

typedef enum
+{
+  B_SO_NONE      = 0,
+  B_SO_BROADCAST = 1 << 0,
+  B_SO_REUSEADDR = 1 << 1
+} BSocketOptions;
+

+ +

B_SO_NONE no options +
B_SO_BROADCASTsend and receive broadcast packages +
B_SO_REUSEADDRallow the address and port to be reused + +

b_socket_init ()

gboolean    b_socket_init                   (GError **error);

+Initialize network sockets. This function does nothing on +UNIXes. On Win32 it initializes the Winsock DLL. You may call this +function any number of times, the initialization is only done once.

+ +

error : return location for possible errors. +
Returns : TRUE on success, FALSE in case of an error +

b_socket_udp_new ()

gint        b_socket_udp_new                (BSocketOptions options,
+                                             GError **error);

+Creates an UDP socket and configures it according to options.

+ +

options : BSocketOptions to set on the socket. +
error : return location for possible errors. +
Returns : a socket descriptor or -1 in case of an error +
diff --git a/blib-1.1.7/docs/reference/html/blib-modules.html b/blib-1.1.7/docs/reference/html/blib-modules.html new file mode 100644 index 0000000..f6bcb62 --- /dev/null +++ b/blib-1.1.7/docs/reference/html/blib-modules.html @@ -0,0 +1,33 @@ +Blinkenlights Modules

Blinkenlights Modules

Table of Contents

BModule - definition of the Blinkenlights Game API
BModule Utilities - utility functions for BModule implementations
BModuleInfo - handling of loadable modules
BModule Internal API - the internal API for users of BModules

+ Loadable modules that define our Game API. +

diff --git a/blib-1.1.7/docs/reference/html/blib-movies.html b/blib-1.1.7/docs/reference/html/blib-movies.html new file mode 100644 index 0000000..b6a1b02 --- /dev/null +++ b/blib-1.1.7/docs/reference/html/blib-movies.html @@ -0,0 +1,34 @@ +Blinkenlights Movies

Blinkenlights Movies

Table of Contents

BMovie - base class for Blinkenlights movies
BMovieEffects - simple effects on a movie
BEffects - simple effects on a single movie frame
BMoviePlayer - a BModule that implements a BMovie player

+ Support for loading and saving the various Blinkenlights Movie + formats. Some simple effects and a movie player module. +

diff --git a/blib-1.1.7/docs/reference/html/blib-network.html b/blib-1.1.7/docs/reference/html/blib-network.html new file mode 100644 index 0000000..fa27990 --- /dev/null +++ b/blib-1.1.7/docs/reference/html/blib-network.html @@ -0,0 +1,34 @@ +Blinkenlights Network Protocol

Blinkenlights Network Protocol

Table of Contents

BProtocol - definiton of the Blinkenlights Network Protocol
BPacket - the UDP packet used to transport a single frame
BProxyClient -
BProxyServer -
BReceiver - receives Blinkenlights packets
BSender - sends Blinkenlights packets
bsocket -

+ Support for speaking the Blinkenlights Network Protocol, a + simple UDP protocol layer. +

diff --git a/blib-1.1.7/docs/reference/html/blib-sim.html b/blib-1.1.7/docs/reference/html/blib-sim.html new file mode 100644 index 0000000..2051249 --- /dev/null +++ b/blib-1.1.7/docs/reference/html/blib-sim.html @@ -0,0 +1,33 @@ +Blinkenlights Simulation

Blinkenlights Simulation

Table of Contents

BTheme - theme support to visualize Blinkenlights
BViewAA -
BViewDirectFB - a DirectFB widget to display Blinkenlights
BViewPixbuf -
BViewGtk - a GTK+ widget to display Blinkenlights

+ Themeable visualization of Blinkenlights Movies. +

diff --git a/blib-1.1.7/docs/reference/html/blib-utils.html b/blib-1.1.7/docs/reference/html/blib-utils.html new file mode 100644 index 0000000..f153511 --- /dev/null +++ b/blib-1.1.7/docs/reference/html/blib-utils.html @@ -0,0 +1,34 @@ +Blinkenlights Utilities

Blinkenlights Utilities

Table of Contents

BLib - BLib library initialization
BObject - an abstract base class derived from GObject
BTypes - Additional GTypes registered by BLib
BParams - Additional Parameter types introduced by BLib
BUtils - a collection of utility functions, mainly used from parsers
BParser - an XML parser that offers a simplified SAX API
BWriter - writes XML files

+ A collection of utilities that aren't that useful in itself but + are used from all over the Blinkenlights library. +

diff --git a/blib-1.1.7/docs/reference/html/blib.devhelp b/blib-1.1.7/docs/reference/html/blib.devhelp new file mode 100644 index 0000000..60d6362 --- /dev/null +++ b/blib-1.1.7/docs/reference/html/blib.devhelp @@ -0,0 +1,210 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/blib-1.1.7/docs/reference/html/blib.html b/blib-1.1.7/docs/reference/html/blib.html new file mode 100644 index 0000000..02eafef --- /dev/null +++ b/blib-1.1.7/docs/reference/html/blib.html @@ -0,0 +1,66 @@ +BLib Overview

BLib Overview

+ BLib is a library of useful things to hack the Blinkenlights. The + software used for the original Blinkenlights installation in + Berlin didn't fit our needs when we planned the installation in + Paris, dubbed Arcade. We + decided we need something more generic and developed BLib. +

+ BLib was written by Daniel Mack, Michael Natterer and Sven + Neumann with modules contributed by 1stein (BPacman, BBreakout) + and Simon Budig (BMatrix). +

+ There are a couple of software packages that use BLib: +

blinkentools

+ A set of command-line utilities related to Blinkenlights. + It includes b2b, a converter for Blinkenmovies that can + apply some simple effects, b2mng, which creates MNG + animations from Blinkenmovies, and bsend, which sends movies + over the net using the Blinkenlights Network Protocol. +

blinkensim

+ A graphical Blinkenlights simulator that displays the UDP + packets it receives according to the Blinkenlights Network + Protocol. It supports themes and comes with DirectFB and GTK+ backends. +

blccc

+ The Blinkenlights Chaos Control center is the heart of + every Blinkenlights installation. This is the master + process that controls the lights. It makes heavy use of + BLib. +

+

+ BLib depends on GLib + version 2.0 (or newer). For the optional DirectFB view you need + DirectFB version + 0.9.11 (or newer) and the GTK+ view requires at least GTK+ version 2.0.3. +

+ BLib is released under the GNU General Public License (GPL). +

diff --git a/blib-1.1.7/docs/reference/html/home.png b/blib-1.1.7/docs/reference/html/home.png new file mode 100644 index 0000000..1700361 Binary files /dev/null and b/blib-1.1.7/docs/reference/html/home.png differ diff --git a/blib-1.1.7/docs/reference/html/index.html b/blib-1.1.7/docs/reference/html/index.html new file mode 100644 index 0000000..cb342c5 --- /dev/null +++ b/blib-1.1.7/docs/reference/html/index.html @@ -0,0 +1,42 @@ +BLib Reference Manual

Sven Neumann

+ for BLib 1.1.7 + +


Warning

+ This room is fullfilled mit special electronische equippment. + Fingergrabbing and pressing the cnoeppkes from the computers is + allowed for die experts only! So all the "lefthanders" stay away + and do not disturben the brainstorming von here working + intelligencies. Otherwise you will be out thrown and kicked + anderswhere! Also: please keep still and only watchen astaunished + the blinkenlights. +

diff --git a/blib-1.1.7/docs/reference/html/index.sgml b/blib-1.1.7/docs/reference/html/index.sgml new file mode 100644 index 0000000..5e62850 --- /dev/null +++ b/blib-1.1.7/docs/reference/html/index.sgml @@ -0,0 +1,203 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/blib-1.1.7/docs/reference/html/left.png b/blib-1.1.7/docs/reference/html/left.png new file mode 100644 index 0000000..2d05b3d Binary files /dev/null and b/blib-1.1.7/docs/reference/html/left.png differ diff --git a/blib-1.1.7/docs/reference/html/right.png b/blib-1.1.7/docs/reference/html/right.png new file mode 100644 index 0000000..92832e3 Binary files /dev/null and b/blib-1.1.7/docs/reference/html/right.png differ diff --git a/blib-1.1.7/docs/reference/html/up.png b/blib-1.1.7/docs/reference/html/up.png new file mode 100644 index 0000000..85b3e2a Binary files /dev/null and b/blib-1.1.7/docs/reference/html/up.png differ diff --git a/blib-1.1.7/docs/reference/tmpl/beffects.sgml b/blib-1.1.7/docs/reference/tmpl/beffects.sgml new file mode 100644 index 0000000..dfe5250 --- /dev/null +++ b/blib-1.1.7/docs/reference/tmpl/beffects.sgml @@ -0,0 +1,53 @@ + +BEffects + + +simple effects on a single movie frame + + + + + + + + + + + + + + + + + + + + + + +@B_EFFECT_SCOPE_NONE: +@B_EFFECT_SCOPE_LEFT: +@B_EFFECT_SCOPE_RIGHT: +@B_EFFECT_SCOPE_ALL: + + + + + + +@Returns: + + + + + + + +@effects: +@frame_data: +@width: +@height: +@channels: +@maxval: + + diff --git a/blib-1.1.7/docs/reference/tmpl/blib-unused.sgml b/blib-1.1.7/docs/reference/tmpl/blib-unused.sgml new file mode 100644 index 0000000..e69de29 diff --git a/blib-1.1.7/docs/reference/tmpl/blib.sgml b/blib-1.1.7/docs/reference/tmpl/blib.sgml new file mode 100644 index 0000000..e8e6633 --- /dev/null +++ b/blib-1.1.7/docs/reference/tmpl/blib.sgml @@ -0,0 +1,23 @@ + +BLib + + +BLib library initialization + + + + + + + + + + + + + + + + + + diff --git a/blib-1.1.7/docs/reference/tmpl/bmodule-internal.sgml b/blib-1.1.7/docs/reference/tmpl/bmodule-internal.sgml new file mode 100644 index 0000000..1ad247d --- /dev/null +++ b/blib-1.1.7/docs/reference/tmpl/bmodule-internal.sgml @@ -0,0 +1,103 @@ + +BModule Internal API + + +the internal API for users of #BModules + + + + + + + + + + + + + + + + +@module_type: +@width: +@height: +@buffer: +@paint_callback: +@paint_data: +@error: +@Returns: + + + + + + + +@module: +@aspect_ratio: + + + + + + + +@module: +@error: +@Returns: + + + + + + + +@module: + + + + + + + +@module: + + + + + + + +@module: + + + + + + + +@module: +@event: + + + + + + + +@module: +@Returns: + + + + + + + +@module: +@title: +@description: +@author: + + diff --git a/blib-1.1.7/docs/reference/tmpl/bmodule-utils.sgml b/blib-1.1.7/docs/reference/tmpl/bmodule-utils.sgml new file mode 100644 index 0000000..dce803f --- /dev/null +++ b/blib-1.1.7/docs/reference/tmpl/bmodule-utils.sgml @@ -0,0 +1,49 @@ + +BModule Utilities + + +utility functions for #BModule implementations + + + + + + + + + + + + + + + + +@module: +@x: +@y: +@value: + + + + + + + +@module: +@x1: +@y1: +@x2: +@y2: +@value: + + + + + + + +@module: +@value: + + diff --git a/blib-1.1.7/docs/reference/tmpl/bmodule.sgml b/blib-1.1.7/docs/reference/tmpl/bmodule.sgml new file mode 100644 index 0000000..4559da3 --- /dev/null +++ b/blib-1.1.7/docs/reference/tmpl/bmodule.sgml @@ -0,0 +1,148 @@ + +BModule + + +definition of the Blinkenlights Game API + + + + + + + + + + + + + +The #BModule struct has a couple of fields that may be read directly +from a #BModule implementation. You must however not change any +members directly. Usually a #BModule uses the +width, height, +channels, +maxval, aspect +and num_players fields. + + +The buffer variable is the only one a +#BModule may write to. It does so when it needs to update the frame +buffer. It is however recommened to use utility functions like +b_module_fill() instead of writing into the +buffer. All other fields of #BModule are +considered private. + + + + + +The #BModuleEvent struct defines an event delivered to a #BModule. +The key field is only valid if the type +is %B_EVENT_TYPE_KEY. More field may be added when new event types +are added. + + +@device_id: the event source +@type: the type of event +@key: the key + + + +This enumeration classifies an event into a number of types. + + +@B_EVENT_TYPE_UNKNOWN: +@B_EVENT_TYPE_KEY: +@B_EVENT_TYPE_PLAYER_ENTERED: +@B_EVENT_TYPE_PLAYER_LEFT: + + + +Enumeration of the possible key values in an event of type +%B_EVENT_TYPE_KEY. + + +@B_KEY_0: +@B_KEY_1: +@B_KEY_2: +@B_KEY_3: +@B_KEY_4: +@B_KEY_5: +@B_KEY_6: +@B_KEY_7: +@B_KEY_8: +@B_KEY_9: +@B_KEY_HASH: +@B_KEY_ASTERISK: + + + +A callback that is registered when a #BModule is created using +b_module_new(). It is called from b_module_paint() and typically +causes a Blinkenlights frame packet to be emitted. You don't need +to care about this if you are implementing a #BModule. + + +@bmodule: +@buffer: +@data: +@Returns: + + + + + + + +@module: +@timeout: + + + + + + + +@module: + + + + + + + +@module: + + + + + + + +@module: + + + + + + + +@bmodule: the object which received the signal. + + + + + + +@bmodule: the object which received the signal. + + + + + + + + + + + diff --git a/blib-1.1.7/docs/reference/tmpl/bmoduleinfo.sgml b/blib-1.1.7/docs/reference/tmpl/bmoduleinfo.sgml new file mode 100644 index 0000000..df50dfd --- /dev/null +++ b/blib-1.1.7/docs/reference/tmpl/bmoduleinfo.sgml @@ -0,0 +1,40 @@ + +BModuleInfo + + +handling of loadable modules + + + + + + + + + + + + + +The #BModuleInfo struct is considered private. + + + + + + + + +@filename: +@Returns: + + + + + + + +@dirname: +@Returns: + + diff --git a/blib-1.1.7/docs/reference/tmpl/bmovie-effects.sgml b/blib-1.1.7/docs/reference/tmpl/bmovie-effects.sgml new file mode 100644 index 0000000..4f1e164 --- /dev/null +++ b/blib-1.1.7/docs/reference/tmpl/bmovie-effects.sgml @@ -0,0 +1,45 @@ + +BMovieEffects + + +simple effects on a movie + + + + + + + + + + + + + + + + +@movie: +@maxval: + + + + + + + +@movie: +@map: + + + + + + + +@movie: +@effects: +@reverse: +@speed: + + diff --git a/blib-1.1.7/docs/reference/tmpl/bmovie.sgml b/blib-1.1.7/docs/reference/tmpl/bmovie.sgml new file mode 100644 index 0000000..ea5a7f2 --- /dev/null +++ b/blib-1.1.7/docs/reference/tmpl/bmovie.sgml @@ -0,0 +1,157 @@ + +BMovie + + +base class for Blinkenlights movies + + + +The #BMovie class defines a common interface to a Blinkenlights +movie. BLib comes with a couple of implementations that correspond to +the different file formats. They are referred to by their #GType: +#B_TYPE_MOVIE_BML, #B_TYPE_MOVIE_BLM and #B_TYPE_MOVIE_GIF. + + + + + + + + + +The minimum time for a frame in milliseconds. Shorter frame delays +will be set to this value. + + + + + + +The default time for a frame in milliseconds. Frames with no specified +delay will be set to this value. + + + + + + +The #BMovie struct has various members that may be read directly since +not all of them has accessor functions. You must however not change +any of the fields. + + + + + +The #BMovieFrame struct defines a single movie frame. + + +@start: the start time of the frame in milliseconds +@duration: the duration of the frame in milliseconds +@data: frame data according to the values in the #BMovie that owns this frame + + + +Type derived from #BMovie that handles movies in the Blinkenlights Markup +Language (BML). + + + + + + +Type derived from #BMovie that handles movies in old-fashioned BLM format. + + + + + + +Type derived from #BMovie that handles movies in the GIF format. + + + + + + + + + +@filename: +@lazy_load: +@error: +@Returns: + + + + + + + +@fd: +@error: +@Returns: + + + + + + + +@movie: +@error: +@Returns: + + + + + + + +@movie: + + + + + + + +@movie: +@stream: +@error: +@Returns: + + + + + + + +@movie: +@movie_type: +@stream: +@error: +@Returns: + + + + + + + +@movie: +@seed: +@time: +@Returns: + + + + + + + +@movie: +@duration: +@data: + + diff --git a/blib-1.1.7/docs/reference/tmpl/bmovieplayer.sgml b/blib-1.1.7/docs/reference/tmpl/bmovieplayer.sgml new file mode 100644 index 0000000..d8cc2d7 --- /dev/null +++ b/blib-1.1.7/docs/reference/tmpl/bmovieplayer.sgml @@ -0,0 +1,47 @@ + +BMoviePlayer + + +a #BModule that implements a #BMovie player + + + + + + + + + + + + + +The #BMoviePlayer struct is considered private. + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/blib-1.1.7/docs/reference/tmpl/bobject.sgml b/blib-1.1.7/docs/reference/tmpl/bobject.sgml new file mode 100644 index 0000000..ddea6b1 --- /dev/null +++ b/blib-1.1.7/docs/reference/tmpl/bobject.sgml @@ -0,0 +1,70 @@ + +BObject + + +an abstract base class derived from #GObject + + + +#BObject is directly derived from #GObject and adds name and filename + properties. + + + + + + + + + +The #BObject struct shouldn't be accessed directly. Its members are +considered private. + + + + + + + + +@object: +@filename: + + + + + + + +@object: +@name: + + + + + + + +@object: +@Returns: + + + + + + + +@object: +@Returns: + + + + + + + + + + + + diff --git a/blib-1.1.7/docs/reference/tmpl/bpacket.sgml b/blib-1.1.7/docs/reference/tmpl/bpacket.sgml new file mode 100644 index 0000000..7976971 --- /dev/null +++ b/blib-1.1.7/docs/reference/tmpl/bpacket.sgml @@ -0,0 +1,70 @@ + +BPacket + + +the UDP packet used to transport a single frame + + + +A #BPacket consists of a mcu_frame_header struct followed by the +actual frame data. It corresponds to a single animation frame. + + + + + + + + + +The #BPacket struct has a variable size which is determined by the +values passed to b_packet_new(). + + +@header: the Blinkenlights frame header +@data: the frame data + + + + + + + + + + + + +@width: +@height: +@channels: +@maxval: +@data_size: +@Returns: + + + + + + + +@packet: +@Returns: + + + + + + + +@packet: + + + + + + + +@packet: + + diff --git a/blib-1.1.7/docs/reference/tmpl/bparams.sgml b/blib-1.1.7/docs/reference/tmpl/bparams.sgml new file mode 100644 index 0000000..87ab474 --- /dev/null +++ b/blib-1.1.7/docs/reference/tmpl/bparams.sgml @@ -0,0 +1,36 @@ + +BParams + + +Additional Parameter types introduced by BLib + + + + + + + + + + + + + +The #GType of the param spec for a %B_TYPE_FILENAME property. + + + + + + + + + +@name: +@nick: +@blurb: +@default_value: +@flags: +@Returns: + + diff --git a/blib-1.1.7/docs/reference/tmpl/bparser.sgml b/blib-1.1.7/docs/reference/tmpl/bparser.sgml new file mode 100644 index 0000000..7538119 --- /dev/null +++ b/blib-1.1.7/docs/reference/tmpl/bparser.sgml @@ -0,0 +1,138 @@ + +BParser + + +an XML parser that offers a simplified SAX API + + + + + + + + +#GMarkupParser + + + + +The #BParser struct is private. + + + + + +An enumeration used to indicate the state of a #BParser. Users of +#BParser will want to add their own states; they may use any values +equal or greater than %B_PARSER_STATE_USER. + + +@B_PARSER_STATE_UNKNOWN: +@B_PARSER_STATE_TOPLEVEL: +@B_PARSER_STATE_USER: + + + +The function that is called when the parser hits the start of an +element. Return %B_PARSER_STATE_UNKNOWN from this function to indicate +an error which should cause the parser to abort. + + +@state: the current state of the parser +@element_name: the name of the element +@attribute_names: a %NULL-terminated list of attribute names +@attribute_values: a %NULL-terminated list of attribute values +@user_data: the data that was passed to b_parser_new() +@error: the error pointer that was passed to b_parser_new() +@Returns: the new state of the parser + + + + +The function that is called when the parser hits the end of an +element. Return %B_PARSER_STATE_UNKNOWN from this function to +indicate an error which should cause the parser to abort. + + +@state: the current state of the parser +@element_name: the name of the element +@cdata: pointer to character data that occured between the opening +and closing tags +@cdata_len: the length of @cdata in bytes +@user_data: the data that was passed to b_parser_new() +@error: the error pointer that was passed to b_parser_new() +@Returns: the new state of the parser + + + + + + + +@start_element: +@end_element: +@user_data: +@Returns: + + + + + + + +@parser: + + + + + + + +@parser: +@text: +@text_len: +@error: +@Returns: + + + + + + + +@parser: +@error: +@Returns: + + + + + + + +@parser: +@io: +@recode: +@error: +@Returns: + + + + + + + +@parser: +@Returns: + + + + + + + +@text: +@text_len: +@Returns: + + diff --git a/blib-1.1.7/docs/reference/tmpl/bprotocol.sgml b/blib-1.1.7/docs/reference/tmpl/bprotocol.sgml new file mode 100644 index 0000000..aafe230 --- /dev/null +++ b/blib-1.1.7/docs/reference/tmpl/bprotocol.sgml @@ -0,0 +1,113 @@ + +BProtocol + + +definiton of the Blinkenlights Network Protocol + + + +The bprotocol.h header file defines the Blinkenlights Network +Protocol. It contains structure definitions for the different network +packets as well as defines for magic numbers. + + + +This header file doesn't use any GLib types to make it possible to +include it from applications that can not or don't want to use BLib. +As a user of BLib you don't need to care about the details of the +protocol described here. Use the #BSender and #BReceiver instead. + + + + +#BPacket, #BSender, #BReceiver + + + + +The magic number that identifies a setup packet. + + + + + + +The magic number that identifies a frame packet. + + + + + + +The magic number that identifies a device control packet. + + + + + + +The magic number that identifies a frame packet in the old +Blinkenlights protocol. BLib doesn't support this old version. + + + + + + +The magic number that identifies a frame packet in an extension to the +old Blinkenlights protocol. BLib doesn't support this old version. + + + + + + +The magic number that identifies a heartbeat package as used with +the BlinkenProxy protocol. + + + + + + +The default port a matrox control unit listens too. + + + + + + +Use this value in a setup packet to address all listening matrix +control units. + + + + + + +Use this value in a device control packet to switch a device off. + + + + + + +Use this value in a device control packet to switch a device on. + + + + + + +The default port number for BlinkenProxy heartbeat packets. + + + + + + +The default timeout in milliseconds between BlinkenProxy heartbeat packets. + + + + diff --git a/blib-1.1.7/docs/reference/tmpl/bproxyclient.sgml b/blib-1.1.7/docs/reference/tmpl/bproxyclient.sgml new file mode 100644 index 0000000..b628767 --- /dev/null +++ b/blib-1.1.7/docs/reference/tmpl/bproxyclient.sgml @@ -0,0 +1,45 @@ + +BProxyClient + + + + + + + + + + + + + + + + + + + + + + + + + +@proxy_host: +@proxy_port: +@listen_port: +@callback: +@callback_data: +@error: +@Returns: + + + + + + + +@client: +@Returns: + + diff --git a/blib-1.1.7/docs/reference/tmpl/bproxyserver.sgml b/blib-1.1.7/docs/reference/tmpl/bproxyserver.sgml new file mode 100644 index 0000000..dbc8d56 --- /dev/null +++ b/blib-1.1.7/docs/reference/tmpl/bproxyserver.sgml @@ -0,0 +1,69 @@ + +BProxyServer + + + + + + + + + + + + + + + + + + + + + + + + + +@port: +@error: +@Returns: + + + + + + + +@server: +@packet: +@Returns: + + + + + + + +@server: +@Returns: + + + + + + + +@bproxyserver: the object which received the signal. +@arg1: +@arg2: + + + + + + +@bproxyserver: the object which received the signal. +@arg1: +@arg2: + diff --git a/blib-1.1.7/docs/reference/tmpl/breceiver.sgml b/blib-1.1.7/docs/reference/tmpl/breceiver.sgml new file mode 100644 index 0000000..da24af9 --- /dev/null +++ b/blib-1.1.7/docs/reference/tmpl/breceiver.sgml @@ -0,0 +1,83 @@ + +BReceiver + + +receives Blinkenlights packets + + + +The #BReceiver object listens for Blinkenlights UDP packets. For each +frame that matches the receiver configuration, a user-defined callback +is called with the received packet. + + + + +#BSender, #BPacket + + + + +The #BReceiver struct is considered private. + + + + + +The function that gets called to dispatch incoming packets. + + +@receiver: the #BReceiver object that received the packet +@packet: the received #BPacket converted to host byteorder +@callback_data: the data that was passed to b_receiver_new() +@Returns: %TRUE if you want to be called again + + + + + + + +@callback: +@callback_data: +@Returns: + + + + + + + +@receiver: +@port: +@Returns: + + + + + + + +@receiver: +@fd: +@Returns: + + + + + + + +@receiver: + + + + + + + + + + + + diff --git a/blib-1.1.7/docs/reference/tmpl/bsender.sgml b/blib-1.1.7/docs/reference/tmpl/bsender.sgml new file mode 100644 index 0000000..99e0844 --- /dev/null +++ b/blib-1.1.7/docs/reference/tmpl/bsender.sgml @@ -0,0 +1,115 @@ + +BSender + + +sends Blinkenlights packets + + + +The #BSender object sends Blinkenlights UDP packets to a number of +recipients. Recipients can be added and removed at run-time. + + + + +#BReceiver, #BPacket + + + + +The #BSender struct is considered private. + + + + + + + + +@Returns: + + + + + + + +@sender: +@src_port: +@dest_host: +@dest_port: +@error: +@Returns: + +@host: +@port: + + + + + + + +@sender: +@dest_host: +@dest_port: +@error: +@Returns: + +@host: +@port: + + + + + + + +@sender: +@Returns: + + + + + + + +@sender: +@width: +@height: +@channels: +@maxval: +@Returns: + + + + + + + +@sender: +@data: +@Returns: + + + + + + + +@sender: +@Returns: + +@port: +@data: + + + + + + + +@sender: +@verbose: + + diff --git a/blib-1.1.7/docs/reference/tmpl/bsocket.sgml b/blib-1.1.7/docs/reference/tmpl/bsocket.sgml new file mode 100644 index 0000000..2b25b5d --- /dev/null +++ b/blib-1.1.7/docs/reference/tmpl/bsocket.sgml @@ -0,0 +1,44 @@ + +bsocket + + + + + + + + + + + + + + + + + + + +@B_SO_NONE: no options +@B_SO_BROADCAST: send and receive broadcast packages +@B_SO_REUSEADDR: allow the address and port to be reused + + + + + + +@error: +@Returns: + + + + + + + +@options: +@error: +@Returns: + + diff --git a/blib-1.1.7/docs/reference/tmpl/btheme.sgml b/blib-1.1.7/docs/reference/tmpl/btheme.sgml new file mode 100644 index 0000000..6927c7f --- /dev/null +++ b/blib-1.1.7/docs/reference/tmpl/btheme.sgml @@ -0,0 +1,213 @@ + +BTheme + + +theme support to visualize Blinkenlights + + + +A #BTheme object defines the dimensions, features and the look of a +Blinkenlights installation. It allows to implement a graphical +simulation. BLib comes with two widgets, #BViewGtk and #BViewDirectFB +that hide the ugly details of #BTheme. + + + + +BViewDirectFB, BViewGtk + + + + +The #BColor struct is used to store a single color. The color channels +have values in the range from 0 to 255. + + +@a: alpha channel value (opacity) +@r: red channel value +@g: green channel value +@b: blue channel value + + + +The #BRectangle struct is used to store a rectangle. The coordinates +are pixel values. The x coordinate advances from left to right, the +y coordinate from top to bottom. + + +@x: horizontal offset from origin +@y: vertical offset from origin +@w: width +@h: height + + + +The #BWindow struct defines a single overlay window used in a #BTheme. + + +@value: the value this window definition applies to +@row: the row index +@column: the column index +@src_x: x coordinate in the upper left corner in the source image +@src_y: y coordinate of the upper left corner in the source image +@rect: the destination rectangle + + + +A special value used to indicate that the window definition is valid +for all possible values. + + + + + + +The #BOverlay struct defines a set of overlay windows used in a #BTheme. + + +@image: an optional image to blend over the background +@color: the color is only used when no @image is specified +@windows: a #GList of #BWindow structs + + + +The #BTheme object defines the dimensions and the look of a +Blinkenlights installation. + + + + + + + + +@filename: +@lazy_load: +@error: +@Returns: + + + + + + + +@title: +@type: +@rows: +@columns: +@channels: +@maxval: +@width: +@height: +@Returns: + + + + + + + +@theme: +@error: +@Returns: + + + + + + + +@theme: + + + + +A structure that defines a query on the installed themes. Used by +b_themes_query(). + + +@flags: +@name: +@type: +@rows: +@columns: +@width: +@height: + + + +Flags that define which values of a BThemesQuery are valid. + + +@B_THEMES_QUERY_NONE: +@B_THEMES_QUERY_NAME: +@B_THEMES_QUERY_TYPE: +@B_THEMES_QUERY_ROWS: +@B_THEMES_QUERY_COLUMNS: +@B_THEMES_QUERY_WIDTH: +@B_THEMES_QUERY_HEIGHT: + + + + + + +@themepath: +@query: +@Returns: + + + + +This function is called for each theme found by b_themes_foreach(). + + +@theme: +@callback_data: +@Returns: + + + + + + + +@themepath: +@callback: +@callback_data: + + + + + + + +@themepath: +@callback: +@callback_data: + + + + + + + +@name: +@themepath: +@error: +@Returns: + + + + + + + +@theme: +@prev_data: +@frame_data: +@bbox: +@Returns: + + diff --git a/blib-1.1.7/docs/reference/tmpl/btypes.sgml b/blib-1.1.7/docs/reference/tmpl/btypes.sgml new file mode 100644 index 0000000..c55ac11 --- /dev/null +++ b/blib-1.1.7/docs/reference/tmpl/btypes.sgml @@ -0,0 +1,33 @@ + +BTypes + + +Additional GTypes registered by BLib + + + + + + + + + + + + + +The filename type is derived from %G_TYPE_STRING and is used to +indicate that a string should be interpreted as a filename. This +macro returns the #GType for this type. + + + + + + +Return whether the given #GValue can hold values of type %B_TYPE_FILENAME. + + +@value: a #GValue + + diff --git a/blib-1.1.7/docs/reference/tmpl/butils.sgml b/blib-1.1.7/docs/reference/tmpl/butils.sgml new file mode 100644 index 0000000..0d3de8c --- /dev/null +++ b/blib-1.1.7/docs/reference/tmpl/butils.sgml @@ -0,0 +1,138 @@ + +BUtils + + +a collection of utility functions, mainly used from parsers + + + + + + + + + + + + + + + + +@name: +@root: +@error: +@Returns: + + + + + + + +@str: +@value: +@Returns: + + + + + + + +@str: +@value: +@Returns: + + + + + + + +@str: +@value: +@Returns: + + + + + + + +@names: +@values: +@x: +@y: +@Returns: + + + + + + + +@names: +@values: +@rect: +@Returns: + + + + + + + +@names: +@values: +@color: +@Returns: + + + + + + + +@object: +@root: +@names: +@values: +@error: +@Returns: + + + + + + + +@object: +@key: +@value: +@root: +@error: +@Returns: + + + + + + + +@src1: +@src2: +@dest: + + + + + + + +@src1: +@src2: +@dest: +@Returns: + + diff --git a/blib-1.1.7/docs/reference/tmpl/bview-aa.sgml b/blib-1.1.7/docs/reference/tmpl/bview-aa.sgml new file mode 100644 index 0000000..73fec13 --- /dev/null +++ b/blib-1.1.7/docs/reference/tmpl/bview-aa.sgml @@ -0,0 +1,44 @@ + +BViewAA + + + + + + + + + + + + + + + + + + + + + + + + + +@aac: +@rows: +@columns: +@channels: +@error: +@Returns: + + + + + + + +@view: +@frame_data: + + diff --git a/blib-1.1.7/docs/reference/tmpl/bview-directfb.sgml b/blib-1.1.7/docs/reference/tmpl/bview-directfb.sgml new file mode 100644 index 0000000..954c21a --- /dev/null +++ b/blib-1.1.7/docs/reference/tmpl/bview-directfb.sgml @@ -0,0 +1,44 @@ + +BViewDirectFB + + +a DirectFB widget to display Blinkenlights + + + + + + + + +BViewGtk + + + + +The #BViewDirectFB struct shouldn't be accessed directly. Its members +are considered private. + + + + + + + + +@theme: +@dfb: +@dest: +@error: +@Returns: + + + + + + + +@view: +@frame_data: + + diff --git a/blib-1.1.7/docs/reference/tmpl/bview-gtk.sgml b/blib-1.1.7/docs/reference/tmpl/bview-gtk.sgml new file mode 100644 index 0000000..cc311ff --- /dev/null +++ b/blib-1.1.7/docs/reference/tmpl/bview-gtk.sgml @@ -0,0 +1,42 @@ + +BViewGtk + + +a GTK+ widget to display Blinkenlights + + + + + + + + +BViewDirectFB + + + + +The #BViewGtk struct shouldn't be accessed directly. Its members are +considered private. + + + + + + + + +@theme: +@error: +@Returns: + + + + + + + +@view: +@frame_data: + + diff --git a/blib-1.1.7/docs/reference/tmpl/bview-pixbuf.sgml b/blib-1.1.7/docs/reference/tmpl/bview-pixbuf.sgml new file mode 100644 index 0000000..96fc49b --- /dev/null +++ b/blib-1.1.7/docs/reference/tmpl/bview-pixbuf.sgml @@ -0,0 +1,72 @@ + +BViewPixbuf + + + + + + + + + + + + + + + + + + + + + + + + + +@rows: +@columns: +@channels: +@error: +@Returns: + +@theme: + + + + + + + +@theme: +@image_preload: +@error: +@Returns: + +@preload: + + + + + + + +@view: +@filename: +@error: +@Returns: + + + + + + + +@view: +@frame_data: +@clip: +@error: +@Returns: + + diff --git a/blib-1.1.7/docs/reference/tmpl/bwriter.sgml b/blib-1.1.7/docs/reference/tmpl/bwriter.sgml new file mode 100644 index 0000000..8bb60ce --- /dev/null +++ b/blib-1.1.7/docs/reference/tmpl/bwriter.sgml @@ -0,0 +1,79 @@ + +BWriter + + +writes XML files + + + + + + + + + + + + + +The #BWriter struct is private. + + + + + + + + +@stream: +@indent: +@Returns: + + + + + + + +@writer: + + + + + + + +@writer: +@encoding: + + + + + + + +@writer: +@tag: +@Varargs: + + + + + + + +@writer: +@tag: + + + + + + + +@writer: +@tag: +@value: +@Varargs: + + diff --git a/blib-1.1.7/docs/reference/version.in b/blib-1.1.7/docs/reference/version.in new file mode 100644 index 0000000..3b063b3 --- /dev/null +++ b/blib-1.1.7/docs/reference/version.in @@ -0,0 +1 @@ +@BLIB_VERSION@ diff --git a/blib-1.1.7/docs/reference/xml/beffects.xml b/blib-1.1.7/docs/reference/xml/beffects.xml new file mode 100644 index 0000000..0a7fe99 --- /dev/null +++ b/blib-1.1.7/docs/reference/xml/beffects.xml @@ -0,0 +1,128 @@ + + + + + +BEffects +3 +BLIB Library + + + +BEffectssimple effects on a single movie frame + + +Synopsis + + + + + +struct BEffects; +enum BEffectScope; +BEffects* b_effects_new (void); +void b_effects_apply (BEffects *effects, + guchar *frame_data, + gint width, + gint height, + gint channels, + gint maxval); + + + + + +Object Hierarchy + + + GObject + +----BEffects + + + + + + + + + + +Description + + + + + + +Details + +<anchor id="BEffects-struct"/>struct BEffects +struct BEffects; + + + + +<anchor id="BEffectScope"/>enum BEffectScope +typedef enum +{ + B_EFFECT_SCOPE_NONE = 0, + B_EFFECT_SCOPE_LEFT = 1 << 0, + B_EFFECT_SCOPE_RIGHT = 1 << 1, + B_EFFECT_SCOPE_ALL = B_EFFECT_SCOPE_LEFT | B_EFFECT_SCOPE_RIGHT +} BEffectScope; + + + + + +<anchor id="b-effects-new"/>b_effects_new () +BEffects* b_effects_new (void); + +Creates a new BEffects object with default values. + + + +Returns : the newly allocate BEffects object. + + + +<anchor id="b-effects-apply"/>b_effects_apply () +void b_effects_apply (BEffects *effects, + guchar *frame_data, + gint width, + gint height, + gint channels, + gint maxval); + +This function applies the effects described in the effects object +to a single frame. + + + +effects : + a BEffects object + +frame_data : + data to apply the effects on + +width : + width of the frame_data buffer + +height : + height of the frame_data buffer + +channels : + number of channels in the frame_data buffer + +maxval : + the maximum value for the frame_data buffer + + + + + + + + + diff --git a/blib-1.1.7/docs/reference/xml/blib.xml b/blib-1.1.7/docs/reference/xml/blib.xml new file mode 100644 index 0000000..2c032e1 --- /dev/null +++ b/blib-1.1.7/docs/reference/xml/blib.xml @@ -0,0 +1,61 @@ + + + + + +BLib +3 +BLIB Library + + + +BLibBLib library initialization + + +Synopsis + + + + + +void b_init (void); + + + + + + + + + + +Description + + + + + + +Details + +<anchor id="b-init"/>b_init () +void b_init (void); + +This function initializes the BLib library. It calls g_type_init() +for you, initializes the random number generator and registers some +transform functions needed for the deserialization routines. + + +It is safe to call this function multiple times but you should at +least call it once before you use any other BLib functions. + + + + + + + + + + diff --git a/blib-1.1.7/docs/reference/xml/bmodule-internal.xml b/blib-1.1.7/docs/reference/xml/bmodule-internal.xml new file mode 100644 index 0000000..18d9f6a --- /dev/null +++ b/blib-1.1.7/docs/reference/xml/bmodule-internal.xml @@ -0,0 +1,258 @@ + + + + + +BModule Internal API +3 +BLIB Library + + + +BModule Internal APIthe internal API for users of BModules + + +Synopsis + + + + + +BModule* b_module_new (GType module_type, + gint width, + gint height, + guchar *buffer, + BModulePaintCallback paint_callback, + gpointer paint_data, + GError **error); +void b_module_set_aspect (BModule *module, + gdouble aspect_ratio); +gboolean b_module_prepare (BModule *module, + GError **error); +void b_module_relax (BModule *module); +void b_module_start (BModule *module); +void b_module_stop (BModule *module); +void b_module_event (BModule *module, + BModuleEvent *event); +gint b_module_tick (BModule *module); +void b_module_describe (BModule *module, + gchar **title, + gchar **description, + gchar **author); + + + + + + + + + + +Description + + + + + + +Details + +<anchor id="b-module-new"/>b_module_new () +BModule* b_module_new (GType module_type, + gint width, + gint height, + guchar *buffer, + BModulePaintCallback paint_callback, + gpointer paint_data, + GError **error); + +This function tries to create the class for the module_type and +queries it with the given width and height. Only if the class can +handle the requested size, a BModule instance is created and +initialized with the given values. + + + +module_type : + the type of module to create + +width : + width of the frame buffer + +height : + height of the frame buffer + +buffer : + pointer to a preallocated buffer or NULL + +paint_callback : + the function to call in b_module_paint() + +paint_data : + data to pass to the paint_callback + +error : + location to store the error occuring, or NULL to ignore errors + +Returns : the newly allocate BModule object + + + +<anchor id="b-module-set-aspect"/>b_module_set_aspect () +void b_module_set_aspect (BModule *module, + gdouble aspect_ratio); + +Sets the pixel (or window) aspect ratio for the module. Most +modules ignore this value but some may adapt their output to take +the shape of pixels into account. + + + +module : + a BModule object + +aspect_ratio : + the new pixel aspect ratio (x / y) + + + +<anchor id="b-module-prepare"/>b_module_prepare () +gboolean b_module_prepare (BModule *module, + GError **error); + +This function first queries the module once more to check that it +can handle the current settings. If the query succeeds, the prepare() +method of the module is called. The module should then prepare +itself and will be able to start as soon as b_module_start() is called. + + + +module : + a BModule object + +error : + location to store the error occuring, or NULL to ignore errors + +Returns : TRUE is the module has successfully prepared itself, +FALSE otherwise + + + +<anchor id="b-module-relax"/>b_module_relax () +void b_module_relax (BModule *module); + +Calls the relax() method of the module causing it to release +resources allocated in b_module_prepare(). + + + +module : + a BModule object + + + +<anchor id="b-module-start"/>b_module_start () +void b_module_start (BModule *module); + +Emits the start signal for module. If module has a lifetime set, +a timer is installed that stops the module when the lifetime expires. + + +You need to prepare module by calling b_module_prepare() before it +can be started. + + + +module : + a BModule object + + + +<anchor id="b-module-stop"/>b_module_stop () +void b_module_stop (BModule *module); + +Emits the stop signal for module. You may only call this function +for a BModule that is currently running. + + + +module : + a BModule object + + + +<anchor id="b-module-event"/>b_module_event () +void b_module_event (BModule *module, + BModuleEvent *event); + +Dispatches an event to module by calling its event() method with +event. This function has no effect if the module is not currently +running. + + + +module : + a BModule object + +event : + pointer to a BModuleEvent + + + +<anchor id="b-module-tick"/>b_module_tick () +gint b_module_tick (BModule *module); + +Calls the tick() method of module. You may only call this function +for a BModule that is currently running. + + + +module : + a BModule object + +Returns : the number of milliseconds until tick() should be +called again or -1 to indicate that no further ticks are requested + + + +<anchor id="b-module-describe"/>b_module_describe () +void b_module_describe (BModule *module, + gchar **title, + gchar **description, + gchar **author); + +This function queries module for a title, description and the name +of the author. It does so by calling the modules describe() method. +You may pass NULL as return location if you are not interested in +a particular information. The title is guaranteed to be available, +description and author may be NULL if the module doesn't provide +this information. + + +You must free all returned strings using g_free() if you don't need +them any longer. + + + +module : + a BModule object + +title : + return location for the module title or NULL + +description : + return location for the module description or NULL + +author : + return location for the name of the module author or NULL + + + + + + + + + diff --git a/blib-1.1.7/docs/reference/xml/bmodule-utils.xml b/blib-1.1.7/docs/reference/xml/bmodule-utils.xml new file mode 100644 index 0000000..273a885 --- /dev/null +++ b/blib-1.1.7/docs/reference/xml/bmodule-utils.xml @@ -0,0 +1,133 @@ + + + + + +BModule Utilities +3 +BLIB Library + + + +BModule Utilitiesutility functions for BModule implementations + + +Synopsis + + + + + +void b_module_draw_point (BModule *module, + gint x, + gint y, + guchar value); +void b_module_draw_line (BModule *module, + gint x1, + gint y1, + gint x2, + gint y2, + guchar value); +void b_module_fill (BModule *module, + guchar value); + + + + + + + + + + +Description + + + + + + +Details + +<anchor id="b-module-draw-point"/>b_module_draw_point () +void b_module_draw_point (BModule *module, + gint x, + gint y, + guchar value); + +Draws a point to the module's frame buffer. It is safe to specify +coordinates outside the buffer. + + + +module : + a BModule object + +x : + x coordinate + +y : + y coordinate + +value : + the color to draw with + + + +<anchor id="b-module-draw-line"/>b_module_draw_line () +void b_module_draw_line (BModule *module, + gint x1, + gint y1, + gint x2, + gint y2, + guchar value); + +Draws a one-pixel wide line between two points to the module's +frame buffer. The endpoints are included in the line. If the line +exceeds the buffer, it is properly clipped. + + + +module : + a BModule object + +x1 : + x coordinate of the start point + +y1 : + y coordinate of the start point + +x2 : + x coordinate of the end point + +y2 : + y coordinate of the end point + +value : + the color to draw with + + + +<anchor id="b-module-fill"/>b_module_fill () +void b_module_fill (BModule *module, + guchar value); + +Fills the module's framebuffer with value. + + + +module : + a BModule object + +value : + the color to draw with + + + + + + + + + diff --git a/blib-1.1.7/docs/reference/xml/bmodule.xml b/blib-1.1.7/docs/reference/xml/bmodule.xml new file mode 100644 index 0000000..0697adb --- /dev/null +++ b/blib-1.1.7/docs/reference/xml/bmodule.xml @@ -0,0 +1,310 @@ + + + + + +BModule +3 +BLIB Library + + + +BModuledefinition of the Blinkenlights Game API + + +Synopsis + + + + + +struct BModule; +struct BModuleEvent; +enum BModuleEventType; +enum BModuleKey; +gboolean (*BModulePaintCallback) (BModule *bmodule, + guchar *buffer, + gpointer data); +void b_module_ticker_start (BModule *module, + gint timeout); +void b_module_ticker_stop (BModule *module); +void b_module_request_stop (BModule *module); +void b_module_paint (BModule *module); + + + + + +Object Hierarchy + + + GObject + +----BModule + + + + + + + +Properties + + + "lifetime" gint : Write / Construct + "speed" gdouble : Write / Construct + + + + +Signal Prototypes + + +"start" void user_function (BModule *bmodule, + gpointer user_data); +"stop" void user_function (BModule *bmodule, + gpointer user_data); + + + + + +Description + + + + + + +Details + +<anchor id="BModule-struct"/>struct BModule +struct BModule; + +The BModule struct has a couple of fields that may be read directly +from a BModule implementation. You must however not change any +members directly. Usually a BModule uses the +width, height, +channels, +maxval, aspect +and num_players fields. + + +The buffer variable is the only one a +BModule may write to. It does so when it needs to update the frame +buffer. It is however recommened to use utility functions like +b_module_fill() instead of writing into the +buffer. All other fields of BModule are +considered private. + + +<anchor id="BModuleEvent"/>struct BModuleEvent +struct BModuleEvent { + + gint device_id; + BModuleEventType type; + BModuleKey key; +}; + + +The BModuleEvent struct defines an event delivered to a BModule. +The key field is only valid if the type +is B_EVENT_TYPE_KEY. More field may be added when new event types +are added. + + +gint device_id +the event source + + + +BModuleEventType type +the type of event + + + +BModuleKey key +the key + + + + + +<anchor id="BModuleEventType"/>enum BModuleEventType +typedef enum +{ + B_EVENT_TYPE_UNKNOWN = 0, + B_EVENT_TYPE_KEY, + B_EVENT_TYPE_PLAYER_ENTERED, + B_EVENT_TYPE_PLAYER_LEFT +} BModuleEventType; + + +This enumeration classifies an event into a number of types. + + +<anchor id="BModuleKey"/>enum BModuleKey +typedef enum +{ + B_KEY_0, + B_KEY_1, + B_KEY_2, + B_KEY_3, + B_KEY_4, + B_KEY_5, + B_KEY_6, + B_KEY_7, + B_KEY_8, + B_KEY_9, + B_KEY_HASH, + B_KEY_ASTERISK +} BModuleKey; + + +Enumeration of the possible key values in an event of type +B_EVENT_TYPE_KEY. + + +<anchor id="BModulePaintCallback"/>BModulePaintCallback () +gboolean (*BModulePaintCallback) (BModule *bmodule, + guchar *buffer, + gpointer data); + +A callback that is registered when a BModule is created using +b_module_new(). It is called from b_module_paint() and typically +causes a Blinkenlights frame packet to be emitted. You don't need +to care about this if you are implementing a BModule. + +bmodule : + + +buffer : + + +data : + + +Returns : + + + + + +<anchor id="b-module-ticker-start"/>b_module_ticker_start () +void b_module_ticker_start (BModule *module, + gint timeout); + +Starts a timeout for module that will call cause its tick() method +to be called in timeout milliseconds. The return value of the +tick() method is then used to install a new timeout for module. +This proceeds until the tick() method returns -1, +b_module_ticker_stop() is called or the module is stopped. + + +You may only call this function for a BModule that is currently +running. + + + +module : + a BModule object + +timeout : + the timeout interval in milliseconds + + + +<anchor id="b-module-ticker-stop"/>b_module_ticker_stop () +void b_module_ticker_stop (BModule *module); + +Stops the ticker for module. If there is a pending timeout for +module, it is removed. + + +You may only call this function for a BModule that is currently +running. + + + +module : + a BModule object + + + +<anchor id="b-module-request-stop"/>b_module_request_stop () +void b_module_request_stop (BModule *module); + +This function causes the module to be stopped. This is for example +used when a game module decides that the game is over. + + +You may only call this function for a BModule that is currently +running. + + + +module : + a BModule object + + + +<anchor id="b-module-paint"/>b_module_paint () +void b_module_paint (BModule *module); + +This function causes a repaint of the screen. + + + +module : + a BModule object + + + + + +Properties + +"lifetime" (gint : Write / Construct) + +Maximum time a module is allowed to run (in milliseconds). + +"speed" (gdouble : Write / Construct) + +Allows to tune the playback speed. + + + + + + +Signals +<anchor id="BModule-start"/>The "start" signal +void user_function (BModule *bmodule, + gpointer user_data); + + + +bmodule : +the object which received the signal. + + +user_data : +user data set when the signal handler was connected. +<anchor id="BModule-stop"/>The "stop" signal +void user_function (BModule *bmodule, + gpointer user_data); + + + +bmodule : +the object which received the signal. + + +user_data : +user data set when the signal handler was connected. + + + + + + diff --git a/blib-1.1.7/docs/reference/xml/bmoduleinfo.xml b/blib-1.1.7/docs/reference/xml/bmoduleinfo.xml new file mode 100644 index 0000000..24bb592 --- /dev/null +++ b/blib-1.1.7/docs/reference/xml/bmoduleinfo.xml @@ -0,0 +1,102 @@ + + + + + +BModuleInfo +3 +BLIB Library + + + +BModuleInfohandling of loadable modules + + +Synopsis + + + + + +struct BModuleInfo; +BModuleInfo* b_module_info_new (const gchar *filename); +gint b_module_infos_scan_dir (const gchar *dirname); + + + + + +Object Hierarchy + + + GObject + +----GTypeModule + +----BModuleInfo + + + + + +Implemented Interfaces + +BModuleInfo implements GTypePlugin. + + + + + + + + +Description + + + + + + +Details + +<anchor id="BModuleInfo-struct"/>struct BModuleInfo +struct BModuleInfo; + +The BModuleInfo struct is considered private. + + +<anchor id="b-module-info-new"/>b_module_info_new () +BModuleInfo* b_module_info_new (const gchar *filename); + +Creates a new BModuleInfo object a loadable module. + + + +filename : + the filename of the loadable module + +Returns : a newly allocated BModuleInfo object + + + +<anchor id="b-module-infos-scan-dir"/>b_module_infos_scan_dir () +gint b_module_infos_scan_dir (const gchar *dirname); + +Scans the given directory for loadable modules and registers the +types implemented by the found modules. + + + +dirname : + the name of the directory to scan or NULL to use the +default directory + +Returns : the number of successfully registered modules + + + + + + + + + diff --git a/blib-1.1.7/docs/reference/xml/bmovie-effects.xml b/blib-1.1.7/docs/reference/xml/bmovie-effects.xml new file mode 100644 index 0000000..c863c38 --- /dev/null +++ b/blib-1.1.7/docs/reference/xml/bmovie-effects.xml @@ -0,0 +1,116 @@ + + + + + +BMovieEffects +3 +BLIB Library + + + +BMovieEffectssimple effects on a movie + + +Synopsis + + + + + +void b_movie_normalize (BMovie *movie, + gint maxval); +void b_movie_apply_colormap (BMovie *movie, + guchar *map); +void b_movie_apply_effects (BMovie *movie, + BEffects *effects, + gboolean reverse, + gdouble speed); + + + + + + + + + + +Description + + + + + + +Details + +<anchor id="b-movie-normalize"/>b_movie_normalize () +void b_movie_normalize (BMovie *movie, + gint maxval); + +Changes the maximum value for movie, that is the value that will +cause the lamp to glow with full intensity. This function iterates +over all frames of the movie and changes the frame data accordingly. + + + +movie : + a BMovie object + +maxval : + the new maximum value to apply to movie + + + +<anchor id="b-movie-apply-colormap"/>b_movie_apply_colormap () +void b_movie_apply_colormap (BMovie *movie, + guchar *map); + +Applies a mapping defined by map to all frames of the movie. The +mapping must not exceed the movie's maxval. + + + +movie : + a BMovie object + +map : + a LUT that remaps each color value + + + +<anchor id="b-movie-apply-effects"/>b_movie_apply_effects () +void b_movie_apply_effects (BMovie *movie, + BEffects *effects, + gboolean reverse, + gdouble speed); + +If effects is non-NULL, the effects described by it are applied +to movie. If reverse is TRUE, the order of frames is reversed. +If speed is different from 1.0, the frame timing is adjusted; for +example a value of 2.0 makes the movie play with double speed. + + + +movie : + a BMovie object + +effects : + a BEffects object or NULL + +reverse : + whether to reverse the order of frames in movie + +speed : + an adjustment factor to be applied on the frame timing + + + + + + + + + diff --git a/blib-1.1.7/docs/reference/xml/bmovie.xml b/blib-1.1.7/docs/reference/xml/bmovie.xml new file mode 100644 index 0000000..40da2db --- /dev/null +++ b/blib-1.1.7/docs/reference/xml/bmovie.xml @@ -0,0 +1,348 @@ + + + + + +BMovie +3 +BLIB Library + + + +BMoviebase class for Blinkenlights movies + + +Synopsis + + + + + +#define B_MOVIE_MIN_DELAY +#define B_MOVIE_DEFAULT_DELAY +struct BMovie; +struct BMovieFrame; +#define B_TYPE_MOVIE_BML +#define B_TYPE_MOVIE_BLM +#define B_TYPE_MOVIE_GIF +BMovie* b_movie_new_from_file (const gchar *filename, + gboolean lazy_load, + GError **error); +BMovie* b_movie_new_from_fd (gint fd, + GError **error); +gboolean b_movie_load (BMovie *movie, + GError **error); +void b_movie_unload (BMovie *movie); +gboolean b_movie_save (BMovie *movie, + FILE *stream, + GError **error); +gboolean b_movie_save_as (BMovie *movie, + GType movie_type, + FILE *stream, + GError **error); +GList* b_movie_get_frame_at_time (BMovie *movie, + GList *seed, + gint time); +void b_movie_prepend_frame (BMovie *movie, + gint duration, + const guchar *data); + + + + + +Object Hierarchy + + + GObject + +----BObject + +----BMovie + + + + + + + + + + +Description + +The BMovie class defines a common interface to a Blinkenlights +movie. BLib comes with a couple of implementations that correspond to +the different file formats. They are referred to by their GType: +B_TYPE_MOVIE_BML, B_TYPE_MOVIE_BLM and B_TYPE_MOVIE_GIF. + + + + +Details + +<anchor id="B-MOVIE-MIN-DELAY-CAPS"/>B_MOVIE_MIN_DELAY +#define B_MOVIE_MIN_DELAY 20 + + +The minimum time for a frame in milliseconds. Shorter frame delays +will be set to this value. + + +<anchor id="B-MOVIE-DEFAULT-DELAY-CAPS"/>B_MOVIE_DEFAULT_DELAY +#define B_MOVIE_DEFAULT_DELAY 100 + + +The default time for a frame in milliseconds. Frames with no specified +delay will be set to this value. + + +<anchor id="BMovie-struct"/>struct BMovie +struct BMovie; + +The BMovie struct has various members that may be read directly since +not all of them has accessor functions. You must however not change +any of the fields. + + +<anchor id="BMovieFrame"/>struct BMovieFrame +struct BMovieFrame { + + gint start; + gint duration; + guchar *data; +}; + + +The BMovieFrame struct defines a single movie frame. + + +gint start +the start time of the frame in milliseconds + + + +gint duration +the duration of the frame in milliseconds + + + +guchar *data +frame data according to the values in the BMovie that owns this frame + + + + + +<anchor id="B-TYPE-MOVIE-BML-CAPS"/>B_TYPE_MOVIE_BML +#define B_TYPE_MOVIE_BML (b_movie_bml_get_type ()) + + +Type derived from BMovie that handles movies in the Blinkenlights Markup +Language (BML). + + +<anchor id="B-TYPE-MOVIE-BLM-CAPS"/>B_TYPE_MOVIE_BLM +#define B_TYPE_MOVIE_BLM (b_movie_blm_get_type ()) + + +Type derived from BMovie that handles movies in old-fashioned BLM format. + + +<anchor id="B-TYPE-MOVIE-GIF-CAPS"/>B_TYPE_MOVIE_GIF +#define B_TYPE_MOVIE_GIF (b_movie_gif_get_type ()) + + +Type derived from BMovie that handles movies in the GIF format. + + +<anchor id="b-movie-new-from-file"/>b_movie_new_from_file () +BMovie* b_movie_new_from_file (const gchar *filename, + gboolean lazy_load, + GError **error); + +Tries to load a BMovie from the file pointed to by filename. If +lazy_load is TRUE, only the header is loaded and no frames are stored. + + + +filename : + the name of the file to load + +lazy_load : + whether to do lazy-loading, i.e. only load the header + +error : + location to store the error occuring, or NULL to ignore errors + +Returns : a newly allocated BMovie object or NULL if the load +failed + + + +<anchor id="b-movie-new-from-fd"/>b_movie_new_from_fd () +BMovie* b_movie_new_from_fd (gint fd, + GError **error); + +Tries to load a BMovie from the UNIX file descriptor fd. Lazy +loading from file descriptors is not implemented since it doesn't +seem to make much sense. + + + +fd : + a UNIX file descriptor + +error : + location to store the error occuring, or NULL to ignore errors + +Returns : a newly allocated BMovie object or NULL if the load +failed + + + +<anchor id="b-movie-load"/>b_movie_load () +gboolean b_movie_load (BMovie *movie, + GError **error); + +Assures that the frames of the movie are loaded. + + + +movie : + a BMovie object + +error : + location to store the error occuring, or NULL to ignore errors + +Returns : TRUE if the movie was loaded successfully. + + + +<anchor id="b-movie-unload"/>b_movie_unload () +void b_movie_unload (BMovie *movie); + +Unloads the frames of a movie. + + +The movie object counts how many times you call b_movie_load() and +b_movie_unload() and only really unloads the frames if +b_movie_unload() was called as often as b_movie_load(). Note that +b_movie_new_from_file() and b_movie_new_from_fd() call +b_movie_load() unless lazy-loading was requested. + + + +movie : + a BMovie object + + + +<anchor id="b-movie-save"/>b_movie_save () +gboolean b_movie_save (BMovie *movie, + FILE *stream, + GError **error); + +Saves a BMovie object to a stream. + + + +movie : + a BMovie object + +stream : + a FILE stream ready for writing + +error : + location to store the error occuring, or NULL to ignore errors + +Returns : TRUE on success or FALSE otherwise + + + +<anchor id="b-movie-save-as"/>b_movie_save_as () +gboolean b_movie_save_as (BMovie *movie, + GType movie_type, + FILE *stream, + GError **error); + +Saves a BMovie object to a stream and allows to specify the file +format to use. + + +The format is specified by passing a type derived from +B_TYPE_MOVIE as movie_type. At the moment B_TYPE_MOVIE_BML, +B_TYPE_MOVIE_BLM and B_TYPE_MOVIE_GIF are supported types. + + + +movie : + a BMovie object + +movie_type : + the movie type to use for saving + +stream : + a FILE stream ready for writing + +error : + location to store the error occuring, or NULL to ignore errors + +Returns : TRUE on success or FALSE otherwise + + + +<anchor id="b-movie-get-frame-at-time"/>b_movie_get_frame_at_time () +GList* b_movie_get_frame_at_time (BMovie *movie, + GList *seed, + gint time); + +Looks for the frame active after time milliseconds. + + +If you are calling this function subsequentially with increasing +time values, you can speed up the search by passing the last return +value as the seed parameter. + + + +movie : + a loaded BMovie object + +seed : + an optional GList pointer that can speed up the search + +time : + the time in milliseconds + +Returns : a GList pointer that has the frame as data or NULL +if the time was out of the movie's range. + + + +<anchor id="b-movie-prepend-frame"/>b_movie_prepend_frame () +void b_movie_prepend_frame (BMovie *movie, + gint duration, + const guchar *data); + +This is an internal function used by the movie loaders. It should +never be called from anywhere else. + + + +movie : + + +duration : + + +data : + + + + + + + + + + diff --git a/blib-1.1.7/docs/reference/xml/bmovieplayer.xml b/blib-1.1.7/docs/reference/xml/bmovieplayer.xml new file mode 100644 index 0000000..13400c8 --- /dev/null +++ b/blib-1.1.7/docs/reference/xml/bmovieplayer.xml @@ -0,0 +1,101 @@ + + + + + +BMoviePlayer +3 +BLIB Library + + + +BMoviePlayera BModule that implements a BMovie player + + +Synopsis + + + + + +struct BMoviePlayer; + + + + + +Object Hierarchy + + + GObject + +----BModule + +----BMoviePlayer + + + + + + + +Properties + + + "clear" gboolean : Write / Construct + "h-align" gdouble : Write / Construct + "movie" BFilename : Write / Construct + "reverse" gboolean : Write / Construct + "v-align" gdouble : Write / Construct + + + + + + +Description + + + + + + +Details + +<anchor id="BMoviePlayer-struct"/>struct BMoviePlayer +struct BMoviePlayer; + +The BMoviePlayer struct is considered private. + + + + +Properties + +"clear" (gboolean : Write / Construct) + +Clear the screen before starting. + +"h-align" (gdouble : Write / Construct) + +Horizontal alignment on the screen. + +"movie" (BFilename : Write / Construct) + +The filename of the movie to play. + +"reverse" (gboolean : Write / Construct) + +Allows to play the movie backwards. + +"v-align" (gdouble : Write / Construct) + +Vertical alignment on the screen. + + + + + + + + + diff --git a/blib-1.1.7/docs/reference/xml/bobject.xml b/blib-1.1.7/docs/reference/xml/bobject.xml new file mode 100644 index 0000000..ed5a194 --- /dev/null +++ b/blib-1.1.7/docs/reference/xml/bobject.xml @@ -0,0 +1,158 @@ + + + + + +BObject +3 +BLIB Library + + + +BObjectan abstract base class derived from GObject + + +Synopsis + + + + + +struct BObject; +void b_object_set_filename (BObject *object, + const gchar *filename); +void b_object_set_name (BObject *object, + const gchar *name); +const gchar* b_object_get_filename (BObject *object); +const gchar* b_object_get_name (BObject *object); + + + + + +Object Hierarchy + + + GObject + +----BObject + + + + + + + +Properties + + + "filename" gchararray : Read / Write + "name" gchararray : Read / Write + + + + + + +Description + +BObject is directly derived from GObject and adds name and filename + properties. + + + + +Details + +<anchor id="BObject-struct"/>struct BObject +struct BObject; + +The BObject struct shouldn't be accessed directly. Its members are +considered private. + + +<anchor id="b-object-set-filename"/>b_object_set_filename () +void b_object_set_filename (BObject *object, + const gchar *filename); + +Sets the filename associated with object. + + + +object : + a BObject. + +filename : + the new filename, a nul-terminated string in the filesystem's +encoding. + + + +<anchor id="b-object-set-name"/>b_object_set_name () +void b_object_set_name (BObject *object, + const gchar *name); + +Sets the name associated with object. + + + +object : + a BObject. + +name : + the new name, a nul-terminated string in UTF-8 encoding. + + + +<anchor id="b-object-get-filename"/>b_object_get_filename () +const gchar* b_object_get_filename (BObject *object); + +This functions retrieves the filename associated with object. The +returned value must not be freed. + + + +object : + a BObject. + +Returns : the fileanme or NULL if no filename was set for object. + + + +<anchor id="b-object-get-name"/>b_object_get_name () +const gchar* b_object_get_name (BObject *object); + +This functions retrieves the name associated with object. If no +name has been set for object, the name is generated from the +object's filename. The returned value must not be freed. + + + +object : + a BObject. + +Returns : the name or NULL if no name and no filename was set +for object. + + + + + +Properties + +"filename" (gchararray : Read / Write) + +The filename associated with the object. This is a string in the filesystems's encoding. + +"name" (gchararray : Read / Write) + +The name associated with the object. This is a string in UTF-8 encoding. + + + + + + + + + diff --git a/blib-1.1.7/docs/reference/xml/bpacket.xml b/blib-1.1.7/docs/reference/xml/bpacket.xml new file mode 100644 index 0000000..64f8598 --- /dev/null +++ b/blib-1.1.7/docs/reference/xml/bpacket.xml @@ -0,0 +1,166 @@ + + + + + +BPacket +3 +BLIB Library + + + +BPacketthe UDP packet used to transport a single frame + + +Synopsis + + + + + +struct BPacket; +union BPacketHeader; +BPacket* b_packet_new (gint width, + gint height, + gint channels, + gint maxval, + gint *data_size); +gsize b_packet_size (BPacket *packet); +void b_packet_hton (BPacket *packet); +void b_packet_ntoh (BPacket *packet); + + + + + + + + + + +Description + +A BPacket consists of a mcu_frame_header struct followed by the +actual frame data. It corresponds to a single animation frame. + + + + +Details + +<anchor id="BPacket"/>struct BPacket +struct BPacket { + + BPacketHeader header; + guchar data[0]; +}; + + +The BPacket struct has a variable size which is determined by the +values passed to b_packet_new(). + + +BPacketHeader header +the Blinkenlights frame header + + + +guchar data[0] +the frame data + + + + + +<anchor id="BPacketHeader"/>union BPacketHeader +union BPacketHeader +{ + mcu_frame_header_t mcu_frame_h; + heartbeat_header_t heartbeat_h; +}; + + + + + +<anchor id="b-packet-new"/>b_packet_new () +BPacket* b_packet_new (gint width, + gint height, + gint channels, + gint maxval, + gint *data_size); + +Allocates a new BPacket structure and initializes it with the +given values. If data_size is non-NULL the size of the data area +(in bytes) is returned via this variable. + + +The packet should be freed with g_free() when it is not needed any +longer. + + + +width : + the number of pixels per row + +height : + the number of pixels per column + +channels : + the number of channels per pixels + +maxval : + the maximum value + +data_size : + returns the size of the packet data + +Returns : a newly allocated BPacket. + + + +<anchor id="b-packet-size"/>b_packet_size () +gsize b_packet_size (BPacket *packet); + + + +packet : + + +Returns : + + + + + +<anchor id="b-packet-hton"/>b_packet_hton () +void b_packet_hton (BPacket *packet); + +Converts all members of packet from host to network byteorder. + + + +packet : + pointer to a BPacket + + + +<anchor id="b-packet-ntoh"/>b_packet_ntoh () +void b_packet_ntoh (BPacket *packet); + +Converts all members of packet from network to host byteorder. + + + +packet : + pointer to a BPacket + + + + + + + + + diff --git a/blib-1.1.7/docs/reference/xml/bparams.xml b/blib-1.1.7/docs/reference/xml/bparams.xml new file mode 100644 index 0000000..0786107 --- /dev/null +++ b/blib-1.1.7/docs/reference/xml/bparams.xml @@ -0,0 +1,90 @@ + + + + + +BParams +3 +BLIB Library + + + +BParamsAdditional Parameter types introduced by BLib + + +Synopsis + + + + + +#define B_TYPE_PARAM_FILENAME +GParamSpec* b_param_spec_filename (const gchar *name, + const gchar *nick, + const gchar *blurb, + gchar *default_value, + GParamFlags flags); + + + + + + + + + + + +Description + + + + + + +Details + +<anchor id="B-TYPE-PARAM-FILENAME-CAPS"/>B_TYPE_PARAM_FILENAME +#define B_TYPE_PARAM_FILENAME (b_param_filename_get_type ()) + + +The GType of the param spec for a B_TYPE_FILENAME property. + + +<anchor id="b-param-spec-filename"/>b_param_spec_filename () +GParamSpec* b_param_spec_filename (const gchar *name, + const gchar *nick, + const gchar *blurb, + gchar *default_value, + GParamFlags flags); + +Creates a new GParamSpec for a B_TYPE_FILENAME property. + + + +name : + the property name + +nick : + an optional short version of the name + +blurb : + an optional description + +default_value : + the default value (may be NULL) + +flags : + the GParamFlags for this param_spec + +Returns : the newly allocate GParamSpec. + + + + + + + + + diff --git a/blib-1.1.7/docs/reference/xml/bparser.xml b/blib-1.1.7/docs/reference/xml/bparser.xml new file mode 100644 index 0000000..f49b984 --- /dev/null +++ b/blib-1.1.7/docs/reference/xml/bparser.xml @@ -0,0 +1,321 @@ + + + + + +BParser +3 +BLIB Library + + + +BParseran XML parser that offers a simplified SAX API + + +Synopsis + + + + + +struct BParser; +enum BParserState; +BParserState (*BParserStartFunc) (BParserState state, + const gchar *element_name, + const gchar **attribute_names, + const gchar **attribute_values, + gpointer user_data, + GError **error); +BParserState (*BParserEndFunc) (BParserState state, + const gchar *element_name, + const gchar *cdata, + gsize cdata_len, + gpointer user_data, + GError **error); +BParser* b_parser_new (BParserStartFunc start_element, + BParserEndFunc end_element, + gpointer user_data); +void b_parser_free (BParser *parser); +gboolean b_parser_parse (BParser *parser, + const gchar *text, + gssize text_len, + GError **error); +gboolean b_parser_end_parse (BParser *parser, + GError **error); +gboolean b_parser_parse_io_channel (BParser *parser, + GIOChannel *io, + gboolean recode, + GError **error); +BParserState b_parser_get_state (BParser *parser); +gchar* b_parse_encoding (const gchar *text, + gint text_len); + + + + + + + + + + +Description + + + + + + +Details + +<anchor id="BParser"/>struct BParser +struct BParser; + +The BParser struct is private. + + +<anchor id="BParserState"/>enum BParserState +typedef enum +{ + B_PARSER_STATE_UNKNOWN, + B_PARSER_STATE_TOPLEVEL, + B_PARSER_STATE_USER = 0x10 /* first user state, use as many as you need */ +} BParserState; + + +An enumeration used to indicate the state of a BParser. Users of +BParser will want to add their own states; they may use any values +equal or greater than B_PARSER_STATE_USER. + + +<anchor id="BParserStartFunc"/>BParserStartFunc () +BParserState (*BParserStartFunc) (BParserState state, + const gchar *element_name, + const gchar **attribute_names, + const gchar **attribute_values, + gpointer user_data, + GError **error); + +The function that is called when the parser hits the start of an +element. Return B_PARSER_STATE_UNKNOWN from this function to indicate +an error which should cause the parser to abort. + +state : +the current state of the parser + +element_name : +the name of the element + +attribute_names : +a NULL-terminated list of attribute names + +attribute_values : +a NULL-terminated list of attribute values + +user_data : +the data that was passed to b_parser_new() + +error : +the error pointer that was passed to b_parser_new() + +Returns :the new state of the parser + + + + + +<anchor id="BParserEndFunc"/>BParserEndFunc () +BParserState (*BParserEndFunc) (BParserState state, + const gchar *element_name, + const gchar *cdata, + gsize cdata_len, + gpointer user_data, + GError **error); + +The function that is called when the parser hits the end of an +element. Return B_PARSER_STATE_UNKNOWN from this function to +indicate an error which should cause the parser to abort. + +state : +the current state of the parser + +element_name : +the name of the element + +cdata : +pointer to character data that occured between the opening +and closing tags + +cdata_len : +the length of cdata in bytes + +user_data : +the data that was passed to b_parser_new() + +error : +the error pointer that was passed to b_parser_new() + +Returns :the new state of the parser + + + + + +<anchor id="b-parser-new"/>b_parser_new () +BParser* b_parser_new (BParserStartFunc start_element, + BParserEndFunc end_element, + gpointer user_data); + +Creates a new BParser suited to parse XML files. The BParser +should later be freed using b_parser_free(). + + + +start_element : + the function to call when an element is started + +end_element : + the function to call when an element is closed + +user_data : + data to pass to the functions above + +Returns : a newly allocated BParser + + + +<anchor id="b-parser-free"/>b_parser_free () +void b_parser_free (BParser *parser); + +Frees the resources allocated for parser. You must not access +parser after calling this function. + + + +parser : + a BParser + + + +<anchor id="b-parser-parse"/>b_parser_parse () +gboolean b_parser_parse (BParser *parser, + const gchar *text, + gssize text_len, + GError **error); + +Let the parser process a chunk of text. You need to call +b_parser_end_parse() after you passed the last chunk to the parser. + + + +parser : + a BParser + +text : + pointer to a text buffer to parse + +text_len : + the number of bytes to parse from text + +error : + location to store the error occuring, or NULL to ignore errors + +Returns : TRUE if parsing was successful, FALSE if an error occured + + + +<anchor id="b-parser-end-parse"/>b_parser_end_parse () +gboolean b_parser_end_parse (BParser *parser, + GError **error); + +Finishes the parser. After calling this function, you must not +call b_parser_parse() on the parser again. + + + +parser : + a BParser + +error : + location to store the error occuring, or NULL to ignore errors + +Returns : TRUE if parser was successfully finished, FALSE +otherwise + + + +<anchor id="b-parser-parse-io-channel"/>b_parser_parse_io_channel () +gboolean b_parser_parse_io_channel (BParser *parser, + GIOChannel *io, + gboolean recode, + GError **error); + +Reads data from the GIOChannel io and passes it to parser. If +recode is TRUE, the data should start with an XML header so this +function can determine the encoding of the XML data and convert it +to UTF-8 for you. + + + +parser : + a BParser + +io : + a GIOChannel to read the text to parse from + +recode : + TRUE if you want the parser to do automatic encoding conversion + +error : + location to store the error occuring, or NULL to ignore errors + +Returns : TRUE if parsing was successful, FALSE otherwise + + + +<anchor id="b-parser-get-state"/>b_parser_get_state () +BParserState b_parser_get_state (BParser *parser); + +Retrieves the current state of parser. + + + +parser : + a BParser + +Returns : the state of parser + + + +<anchor id="b-parse-encoding"/>b_parse_encoding () +gchar* b_parse_encoding (const gchar *text, + gint text_len); + +Scans the text for an XML header with encoding specification. + + + +text : + a string to parse, must be at least 20 bytes + +text_len : + the maximum number of bytes to parse from text + +Returns : a copy of the encoding string or NULL if none was +found + + + + + + + + +See Also + +GMarkupParser + + + + diff --git a/blib-1.1.7/docs/reference/xml/bprotocol.xml b/blib-1.1.7/docs/reference/xml/bprotocol.xml new file mode 100644 index 0000000..d68993a --- /dev/null +++ b/blib-1.1.7/docs/reference/xml/bprotocol.xml @@ -0,0 +1,161 @@ + + + + + +BProtocol +3 +BLIB Library + + + +BProtocoldefiniton of the Blinkenlights Network Protocol + + +Synopsis + + + + + +#define MAGIC_MCU_SETUP +#define MAGIC_MCU_FRAME +#define MAGIC_MCU_DEVCTRL +#define MAGIC_BLFRAME +#define MAGIC_BLFRAME_256 +#define MAGIC_HEARTBEAT +#define MCU_LISTENER_PORT +#define MCU_ID_ANY +#define MCU_DEVCTRL_OFF +#define MCU_DEVCTRL_ON +#define B_HEARTBEAT_PORT +#define B_HEARTBEAT_INTERVAL + + + + + + + + + + +Description + +The bprotocol.h header file defines the Blinkenlights Network +Protocol. It contains structure definitions for the different network +packets as well as defines for magic numbers. + + + +This header file doesn't use any GLib types to make it possible to +include it from applications that can not or don't want to use BLib. +As a user of BLib you don't need to care about the details of the +protocol described here. Use the BSender and BReceiver instead. + + + + +Details + +<anchor id="MAGIC-MCU-SETUP-CAPS"/>MAGIC_MCU_SETUP +#define MAGIC_MCU_SETUP 0x2342FEED /* MCU Configuration packet */ + + +The magic number that identifies a setup packet. + + +<anchor id="MAGIC-MCU-FRAME-CAPS"/>MAGIC_MCU_FRAME +#define MAGIC_MCU_FRAME 0x23542666 /* MCU Frame packet */ + + +The magic number that identifies a frame packet. + + +<anchor id="MAGIC-MCU-DEVCTRL-CAPS"/>MAGIC_MCU_DEVCTRL +#define MAGIC_MCU_DEVCTRL 0x23542667 /* MCU Device Control packet */ + + +The magic number that identifies a device control packet. + + +<anchor id="MAGIC-BLFRAME-CAPS"/>MAGIC_BLFRAME +#define MAGIC_BLFRAME 0xDEADBEEF /* Original BL Frame Packet */ + + +The magic number that identifies a frame packet in the old +Blinkenlights protocol. BLib doesn't support this old version. + + +<anchor id="MAGIC-BLFRAME-256-CAPS"/>MAGIC_BLFRAME_256 +#define MAGIC_BLFRAME_256 0xFEEDBEEF /* Extendend BL Frame Packet (Greyscale) */ + + +The magic number that identifies a frame packet in an extension to the +old Blinkenlights protocol. BLib doesn't support this old version. + + +<anchor id="MAGIC-HEARTBEAT-CAPS"/>MAGIC_HEARTBEAT +#define MAGIC_HEARTBEAT 0x42424242 /* Heartbeat packet */ + + +The magic number that identifies a heartbeat package as used with +the BlinkenProxy protocol. + + +<anchor id="MCU-LISTENER-PORT-CAPS"/>MCU_LISTENER_PORT +#define MCU_LISTENER_PORT 2323 + + +The default port a matrox control unit listens too. + + +<anchor id="MCU-ID-ANY-CAPS"/>MCU_ID_ANY +#define MCU_ID_ANY -1 + + +Use this value in a setup packet to address all listening matrix +control units. + + +<anchor id="MCU-DEVCTRL-OFF-CAPS"/>MCU_DEVCTRL_OFF +#define MCU_DEVCTRL_OFF 0 /* switch device off */ + + +Use this value in a device control packet to switch a device off. + + +<anchor id="MCU-DEVCTRL-ON-CAPS"/>MCU_DEVCTRL_ON +#define MCU_DEVCTRL_ON 1 /* switch device on */ + + +Use this value in a device control packet to switch a device on. + + +<anchor id="B-HEARTBEAT-PORT-CAPS"/>B_HEARTBEAT_PORT +#define B_HEARTBEAT_PORT 4242 + + +The default port number for BlinkenProxy heartbeat packets. + + +<anchor id="B-HEARTBEAT-INTERVAL-CAPS"/>B_HEARTBEAT_INTERVAL +#define B_HEARTBEAT_INTERVAL 5000 /* Heartbeat interval in ms */ + + +The default timeout in milliseconds between BlinkenProxy heartbeat packets. + + + + + + + +See Also + +BPacket, BSender, BReceiver + + + + diff --git a/blib-1.1.7/docs/reference/xml/bproxyclient.xml b/blib-1.1.7/docs/reference/xml/bproxyclient.xml new file mode 100644 index 0000000..7ab3749 --- /dev/null +++ b/blib-1.1.7/docs/reference/xml/bproxyclient.xml @@ -0,0 +1,123 @@ + + + + + +BProxyClient +3 +BLIB Library + + + +BProxyClient + + +Synopsis + + + + + +struct BProxyClient; +BProxyClient* b_proxy_client_new (const gchar *proxy_host, + gint proxy_port, + gint listen_port, + BReceiverCallback callback, + gpointer callback_data, + GError **error); +gboolean b_proxy_client_send_heartbeat (BProxyClient *client); + + + + + +Object Hierarchy + + + GObject + +----BReceiver + +----BProxyClient + + + + + + + + + + +Description + + + + + + +Details + +<anchor id="BProxyClient-struct"/>struct BProxyClient +struct BProxyClient; + + + + +<anchor id="b-proxy-client-new"/>b_proxy_client_new () +BProxyClient* b_proxy_client_new (const gchar *proxy_host, + gint proxy_port, + gint listen_port, + BReceiverCallback callback, + gpointer callback_data, + GError **error); + +Creates a new BProxyClient object, ready to use. + + + +proxy_host : + the blinkenproxy host + +proxy_port : + the blinkenproxy port + +listen_port : + the local port to listen to for Blinkenlights packages + or -1 to bind to an arbitrary free local port + +callback : + the function to call when a new frame arrives + +callback_data : + data to pass to the callback + +error : + return location for a possible error + +Returns : a newly allocate BProxyClient object + + + +<anchor id="b-proxy-client-send-heartbeat"/>b_proxy_client_send_heartbeat () +gboolean b_proxy_client_send_heartbeat (BProxyClient *client); + +Make the client send a heartbeat packet. This function should +be called periodically with the suggested interval of +B_HEARTBEAT_INTERVAL. To achieve, use this function with +g_timeout_add(). + + + +client : + a BProxyClient + +Returns : always TRUE + + + + + + + + + diff --git a/blib-1.1.7/docs/reference/xml/bproxyserver.xml b/blib-1.1.7/docs/reference/xml/bproxyserver.xml new file mode 100644 index 0000000..fe5f7fb --- /dev/null +++ b/blib-1.1.7/docs/reference/xml/bproxyserver.xml @@ -0,0 +1,179 @@ + + + + + +BProxyServer +3 +BLIB Library + + + +BProxyServer + + +Synopsis + + + + + +struct BProxyServer; +BProxyServer* b_proxy_server_new (gint port, + GError **error); +gboolean b_proxy_server_send_packet (BProxyServer *server, + BPacket *packet); +gint b_proxy_server_num_clients (BProxyServer *server); + + + + + +Object Hierarchy + + + GObject + +----BReceiver + +----BProxyServer + + + + + + + + +Signal Prototypes + + +"client-added" + void user_function (BProxyServer *bproxyserver, + gchar *arg1, + gint arg2, + gpointer user_data); +"client-removed" + void user_function (BProxyServer *bproxyserver, + gchar *arg1, + gint arg2, + gpointer user_data); + + + + + +Description + + + + + + +Details + +<anchor id="BProxyServer-struct"/>struct BProxyServer +struct BProxyServer; + + + + +<anchor id="b-proxy-server-new"/>b_proxy_server_new () +BProxyServer* b_proxy_server_new (gint port, + GError **error); + +Creates a new BProxyServer object, ready to use. + + + +port : + the local port to listen to for heartbeat packages + +error : + return location for a possible error + +Returns : a newly allocate BProxyServer object + + + +<anchor id="b-proxy-server-send-packet"/>b_proxy_server_send_packet () +gboolean b_proxy_server_send_packet (BProxyServer *server, + BPacket *packet); + + + +server : + + +packet : + + +Returns : + + + + + +<anchor id="b-proxy-server-num-clients"/>b_proxy_server_num_clients () +gint b_proxy_server_num_clients (BProxyServer *server); + + + +server : + + +Returns : + + + + + + + + +Signals +<anchor id="BProxyServer-client-added"/>The "client-added" signal +void user_function (BProxyServer *bproxyserver, + gchar *arg1, + gint arg2, + gpointer user_data); + + + +bproxyserver : +the object which received the signal. + +arg1 : + + +arg2 : + + + +user_data : +user data set when the signal handler was connected. +<anchor id="BProxyServer-client-removed"/>The "client-removed" signal +void user_function (BProxyServer *bproxyserver, + gchar *arg1, + gint arg2, + gpointer user_data); + + + +bproxyserver : +the object which received the signal. + +arg1 : + + +arg2 : + + + +user_data : +user data set when the signal handler was connected. + + + + + + diff --git a/blib-1.1.7/docs/reference/xml/breceiver.xml b/blib-1.1.7/docs/reference/xml/breceiver.xml new file mode 100644 index 0000000..d6c8ecb --- /dev/null +++ b/blib-1.1.7/docs/reference/xml/breceiver.xml @@ -0,0 +1,195 @@ + + + + + +BReceiver +3 +BLIB Library + + + +BReceiverreceives Blinkenlights packets + + +Synopsis + + + + + +struct BReceiver; +gboolean (*BReceiverCallback) (BReceiver *receiver, + BPacket *packet, + gpointer callback_data); +BReceiver* b_receiver_new (BReceiverCallback callback, + gpointer callback_data); +gboolean b_receiver_listen (BReceiver *receiver, + gint port); +gboolean b_receiver_listen_fd (BReceiver *receiver, + gint fd); +void b_receiver_stop (BReceiver *receiver); + + + + + +Object Hierarchy + + + GObject + +----BReceiver + + + + + + + +Properties + + + "callback" gpointer : Write / Construct Only + "callback-data" gpointer : Write / Construct Only + + + + + + +Description + +The BReceiver object listens for Blinkenlights UDP packets. For each +frame that matches the receiver configuration, a user-defined callback +is called with the received packet. + + + + +Details + +<anchor id="BReceiver-struct"/>struct BReceiver +struct BReceiver; + +The BReceiver struct is considered private. + + +<anchor id="BReceiverCallback"/>BReceiverCallback () +gboolean (*BReceiverCallback) (BReceiver *receiver, + BPacket *packet, + gpointer callback_data); + +The function that gets called to dispatch incoming packets. + +receiver : +the BReceiver object that received the packet + +packet : +the received BPacket converted to host byteorder + +callback_data : +the data that was passed to b_receiver_new() + +Returns :TRUE if you want to be called again + + + + + +<anchor id="b-receiver-new"/>b_receiver_new () +BReceiver* b_receiver_new (BReceiverCallback callback, + gpointer callback_data); + +Creates a new BReceiver object. + + + +callback : + the function to call when a new frame arrives + +callback_data : + data to pass to the callback + +Returns : a newly allocate BReceiver object + + + +<anchor id="b-receiver-listen"/>b_receiver_listen () +gboolean b_receiver_listen (BReceiver *receiver, + gint port); + +Causes the receiver to start to listen to the specified UDP +port. For each successfully received Blinkenlights packet, the +packet will be converted to host byteorder and the callback that +was specified on b_receiver_new() will be called. + + + +receiver : + a BReceiver object + +port : + the UDP port to listen to + +Returns : TRUE if the receiver listens to port, FALSE otherwise + + + +<anchor id="b-receiver-listen-fd"/>b_receiver_listen_fd () +gboolean b_receiver_listen_fd (BReceiver *receiver, + gint fd); + +Causes the receiver to start to listen to the given file descriptor. +This function is rarely useful, it is used internally by BProxyClient. + + + +receiver : + a BReceiver object + +fd : + a file descriptor + +Returns : TRUE on success + + + +<anchor id="b-receiver-stop"/>b_receiver_stop () +void b_receiver_stop (BReceiver *receiver); + +Makes the receiver stop listening. + + + +receiver : + a BReceiver object + + + + + +Properties + +"callback" (gpointer : Write / Construct Only) + + + +"callback-data" (gpointer : Write / Construct Only) + + + + + + + + + + +See Also + +BSender, BPacket + + + + diff --git a/blib-1.1.7/docs/reference/xml/bsender.xml b/blib-1.1.7/docs/reference/xml/bsender.xml new file mode 100644 index 0000000..ba4961f --- /dev/null +++ b/blib-1.1.7/docs/reference/xml/bsender.xml @@ -0,0 +1,263 @@ + + + + + +BSender +3 +BLIB Library + + + +BSendersends Blinkenlights packets + + +Synopsis + + + + + +struct BSender; +BSender* b_sender_new (void); +gboolean b_sender_add_recipient (BSender *sender, + gint src_port, + const gchar *dest_host, + gint dest_port, + GError **error); +gboolean b_sender_remove_recipient (BSender *sender, + const gchar *dest_host, + gint dest_port, + GError **error); +GList* b_sender_list_recipients (BSender *sender); +gboolean b_sender_configure (BSender *sender, + gint width, + gint height, + gint channels, + gint maxval); +gboolean b_sender_send_frame (BSender *sender, + const guchar *data); +gboolean b_sender_send_heartbeat (BSender *sender); +void b_sender_set_verbose (BSender *sender, + gboolean verbose); + + + + + +Object Hierarchy + + + GObject + +----BSender + + + + + + + + + + +Description + +The BSender object sends Blinkenlights UDP packets to a number of +recipients. Recipients can be added and removed at run-time. + + + + +Details + +<anchor id="BSender-struct"/>struct BSender +struct BSender; + +The BSender struct is considered private. + + +<anchor id="b-sender-new"/>b_sender_new () +BSender* b_sender_new (void); + +Creates a new BSender object. + + + +Returns : a newly allocated BSender object + + + +<anchor id="b-sender-add-recipient"/>b_sender_add_recipient () +gboolean b_sender_add_recipient (BSender *sender, + gint src_port, + const gchar *dest_host, + gint dest_port, + GError **error); + +Tries to resolve host and adds it to the sender's list of recipients. + + + +sender : + a BSender object + +src_port : + originating UDP port (-1 to leave unspecified) + +dest_host : + destination hostname or IP address + +dest_port : + destination UDP port + +error : + location to store the error occuring, or NULL to ignore errors + +Returns : TRUE if the recipient was successfully added, FALSE +otherwise + + + +<anchor id="b-sender-remove-recipient"/>b_sender_remove_recipient () +gboolean b_sender_remove_recipient (BSender *sender, + const gchar *dest_host, + gint dest_port, + GError **error); + +Removes all recipients with matching host and port from the +sender's list of recipients. + + + +sender : + a BSender object + +dest_host : + destination hostname or IP address + +dest_port : + destination UDP port + +error : + location to store the error occuring, or NULL to ignore errors + +Returns : TRUE if at least one matching recipient was found +and removed, FALSE otherwise + + + +<anchor id="b-sender-list-recipients"/>b_sender_list_recipients () +GList* b_sender_list_recipients (BSender *sender); + +Creates a list of strings that describe the senders +recipients. You should free the strings as well as the list when +it is no longer needed. + + + +sender : + a BSender object + +Returns : a newly allocated GList of newly allocated strings + + + +<anchor id="b-sender-configure"/>b_sender_configure () +gboolean b_sender_configure (BSender *sender, + gint width, + gint height, + gint channels, + gint maxval); + +Prepares sender to send Blinkenlights UDP packets with the given +parameters. + + + +sender : + a BSender object + +width : + number of pixels per row + +height : + number of pixels per column + +channels : + number of channels per pixel + +maxval : + the maximum value + +Returns : TRUE if sender was successfully reconfigured, +FALSE otherwise + + + +<anchor id="b-sender-send-frame"/>b_sender_send_frame () +gboolean b_sender_send_frame (BSender *sender, + const guchar *data); + +Sends Blinkenlights packets to all recipients registered with +sender. The data should match the values of the last call to +b_sender_configure() for sender. + + + +sender : + a Bsender object + +data : + the frame data to send + +Returns : FALSE in case of a fatal error, TRUE otherwise + + + +<anchor id="b-sender-send-heartbeat"/>b_sender_send_heartbeat () +gboolean b_sender_send_heartbeat (BSender *sender); +b_sender_send_heartbeat is deprecated and should not be used in newly-written code. + +This function is deprecated and might be removed in the future. +If you need the heartbeat functionality, use BProxyClient instead. + + + +sender : + a Bsender object + +Returns : TRUE always + + + +<anchor id="b-sender-set-verbose"/>b_sender_set_verbose () +void b_sender_set_verbose (BSender *sender, + gboolean verbose); + +In earlier BLib versions BSender used to print a message to stderr +when send() failed. This message is now suppressed by default, but +you can get the old behaviour back using this function. + + + +sender : + a Bsender object + +verbose : + whether the sender should do verbose error reporting or not + + + + + + + + +See Also + +BReceiver, BPacket + + + + diff --git a/blib-1.1.7/docs/reference/xml/bsocket.xml b/blib-1.1.7/docs/reference/xml/bsocket.xml new file mode 100644 index 0000000..6b41a40 --- /dev/null +++ b/blib-1.1.7/docs/reference/xml/bsocket.xml @@ -0,0 +1,113 @@ + + + + + +bsocket +3 +BLIB Library + + + +bsocket + + +Synopsis + + + + + +enum BSocketOptions; +gboolean b_socket_init (GError **error); +gint b_socket_udp_new (BSocketOptions options, + GError **error); + + + + + + + + + + +Description + + + + + + +Details + +<anchor id="BSocketOptions"/>enum BSocketOptions +typedef enum +{ + B_SO_NONE = 0, + B_SO_BROADCAST = 1 << 0, + B_SO_REUSEADDR = 1 << 1 +} BSocketOptions; + + + + + +B_SO_NONE + no options + + + +B_SO_BROADCAST +send and receive broadcast packages + + + +B_SO_REUSEADDR +allow the address and port to be reused + + + + + +<anchor id="b-socket-init"/>b_socket_init () +gboolean b_socket_init (GError **error); + +Initialize network sockets. This function does nothing on +UNIXes. On Win32 it initializes the Winsock DLL. You may call this +function any number of times, the initialization is only done once. + + + +error : + return location for possible errors. + +Returns : TRUE on success, FALSE in case of an error + + + +<anchor id="b-socket-udp-new"/>b_socket_udp_new () +gint b_socket_udp_new (BSocketOptions options, + GError **error); + +Creates an UDP socket and configures it according to options. + + + +options : + BSocketOptions to set on the socket. + +error : + return location for possible errors. + +Returns : a socket descriptor or -1 in case of an error + + + + + + + + + diff --git a/blib-1.1.7/docs/reference/xml/btheme.xml b/blib-1.1.7/docs/reference/xml/btheme.xml new file mode 100644 index 0000000..2e6cb19 --- /dev/null +++ b/blib-1.1.7/docs/reference/xml/btheme.xml @@ -0,0 +1,546 @@ + + + + + +BTheme +3 +BLIB Library + + + +BThemetheme support to visualize Blinkenlights + + +Synopsis + + + + + +struct BColor; +struct BRectangle; +struct BWindow; +#define B_WINDOW_VALUE_ALL +struct BOverlay; +struct BTheme; +BTheme* b_theme_new_from_file (const gchar *filename, + gboolean lazy_load, + GError **error); +BTheme* b_theme_new_from_scratch (const gchar *title, + const gchar *type, + gint rows, + gint columns, + gint channels, + gint maxval, + gint width, + gint height); +gboolean b_theme_load (BTheme *theme, + GError **error); +void b_theme_unload (BTheme *theme); +struct BThemesQuery; +enum BThemesQueryFlags; +GList* b_themes_query (const gchar *themepath, + BThemesQuery *query); +gboolean (*BThemesForeachFunc) (BTheme *theme, + gpointer callback_data); +void b_themes_foreach (const gchar *themepath, + BThemesForeachFunc callback, + gpointer callback_data); +void b_themes_foreach_theme (const gchar *themepath, + GHFunc callback, + gpointer callback_data); +BTheme* b_themes_lookup_theme (const gchar *name, + const gchar *themepath, + GError **error); +gboolean b_theme_frame_diff_boundary (BTheme *theme, + const guchar *prev_data, + const guchar *frame_data, + BRectangle *bbox); + + + + + +Object Hierarchy + + + GObject + +----BObject + +----BTheme + + + + + + + + + + +Description + +A BTheme object defines the dimensions, features and the look of a +Blinkenlights installation. It allows to implement a graphical +simulation. BLib comes with two widgets, BViewGtk and BViewDirectFB +that hide the ugly details of BTheme. + + + + +Details + +<anchor id="BColor"/>struct BColor +struct BColor { + + guchar a; + guchar r; + guchar g; + guchar b; +}; + + +The BColor struct is used to store a single color. The color channels +have values in the range from 0 to 255. + + +guchar a +alpha channel value (opacity) + + + +guchar r +red channel value + + + +guchar g +green channel value + + + +guchar b +blue channel value + + + + + +<anchor id="BRectangle"/>struct BRectangle +struct BRectangle { + + gint x; + gint y; + gint w; + gint h; +}; + + +The BRectangle struct is used to store a rectangle. The coordinates +are pixel values. The x coordinate advances from left to right, the +y coordinate from top to bottom. + + +gint x +horizontal offset from origin + + + +gint y +vertical offset from origin + + + +gint w +width + + + +gint h +height + + + + + +<anchor id="BWindow"/>struct BWindow +struct BWindow { + + gint value; + gint row; + gint column; + gint src_x; + gint src_y; + BRectangle rect; +}; + + +The BWindow struct defines a single overlay window used in a BTheme. + + +gint value +the value this window definition applies to + + + +gint row +the row index + + + +gint column +the column index + + + +gint src_x +x coordinate in the upper left corner in the source image + + + +gint src_y +y coordinate of the upper left corner in the source image + + + +BRectangle rect +the destination rectangle + + + + + +<anchor id="B-WINDOW-VALUE-ALL-CAPS"/>B_WINDOW_VALUE_ALL +#define B_WINDOW_VALUE_ALL 0 + + +A special value used to indicate that the window definition is valid +for all possible values. + + +<anchor id="BOverlay"/>struct BOverlay +struct BOverlay { + + gchar *image; + BColor color; + + GList *windows; +}; + + +The BOverlay struct defines a set of overlay windows used in a BTheme. + + +gchar *image +an optional image to blend over the background + + + +BColor color +the color is only used when no image is specified + + + +GList *windows +a GList of BWindow structs + + + + + +<anchor id="BTheme-struct"/>struct BTheme +struct BTheme; + +The BTheme object defines the dimensions and the look of a +Blinkenlights installation. + + +<anchor id="b-theme-new-from-file"/>b_theme_new_from_file () +BTheme* b_theme_new_from_file (const gchar *filename, + gboolean lazy_load, + GError **error); + +Tries to load a BTheme from the file pointed to by filename. If +lazy_load is TRUE, only the header is loaded. + + + +filename : + the name of the file to load the theme from + +lazy_load : + whether to do lazy-loading + +error : + location to store the error occuring, or NULL to ignore errors + +Returns : a newly allocated BTheme object or NULL if the load +failed + + + +<anchor id="b-theme-new-from-scratch"/>b_theme_new_from_scratch () +BTheme* b_theme_new_from_scratch (const gchar *title, + const gchar *type, + gint rows, + gint columns, + gint channels, + gint maxval, + gint width, + gint height); + +Creates a new BTheme object from scratch. This may be useful if +you want to quickly test a movie for a layout you don't have a +theme for. You need to call b_theme_load() before you can use the +new theme. + + + +title : + a descriptive title + +type : + the theme type or NULL + +rows : + the number of rows of windows + +columns : + the number of columns of windows + +channels : + the number of channels per window (must be 1) + +maxval : + the maximum value + +width : + screen width in pixels + +height : + screen height in pixels + +Returns : a newly allocated, lazy-loaded, BTheme object + + + +<anchor id="b-theme-load"/>b_theme_load () +gboolean b_theme_load (BTheme *theme, + GError **error); + +Loads all data into the theme. You only need to call this if you +lazy-loaded the theme or called b_theme_unload() before. + + + +theme : + a BTheme object + +error : + location to store the error occuring, or NULL to ignore errors + +Returns : TRUE on success, FALSE otherwise + + + +<anchor id="b-theme-unload"/>b_theme_unload () +void b_theme_unload (BTheme *theme); + +Frees all data of a BTheme except the meta information stored in +the header. + + + +theme : + a BTheme object + + + +<anchor id="BThemesQuery"/>struct BThemesQuery +struct BThemesQuery { + + BThemesQueryFlags flags; + + const gchar *name; + const gchar *type; + gint rows; + gint columns; + gint width; + gint height; +}; + + +A structure that defines a query on the installed themes. Used by +b_themes_query(). + + +<anchor id="BThemesQueryFlags"/>enum BThemesQueryFlags +typedef enum +{ + B_THEMES_QUERY_NONE = 0, + B_THEMES_QUERY_NAME = 1 << 0, + B_THEMES_QUERY_TYPE = 1 << 1, + B_THEMES_QUERY_ROWS = 1 << 2, + B_THEMES_QUERY_COLUMNS = 1 << 3, + B_THEMES_QUERY_WIDTH = 1 << 4, + B_THEMES_QUERY_HEIGHT = 1 << 5 +} BThemesQueryFlags; + + +Flags that define which values of a BThemesQuery are valid. + + +<anchor id="b-themes-query"/>b_themes_query () +GList* b_themes_query (const gchar *themepath, + BThemesQuery *query); + +Looks for themes as defined by query. If themepath is not +specified the default path is used. The default path can be overridden +by setting the environment variable B_THEME_PATH. + + +Each theme that matches the query is lazy-loaded. + + + +themepath : + a colon-separated list of directories to search or NULL to +use the default path + +query : + pointer to a BThemesQuery + +Returns : a GList of newly allocated, lazy-loaded BTheme objects +or NULL if no matching theme was found + + + +<anchor id="BThemesForeachFunc"/>BThemesForeachFunc () +gboolean (*BThemesForeachFunc) (BTheme *theme, + gpointer callback_data); + +This function is called for each theme found by b_themes_foreach(). + +theme : + + +callback_data : + + +Returns : + + + + + +<anchor id="b-themes-foreach"/>b_themes_foreach () +void b_themes_foreach (const gchar *themepath, + BThemesForeachFunc callback, + gpointer callback_data); + +This function iterates over all themes in the themepath, lazy-loads them, +runs callback on the theme and unrefs it again. The iteration is stopped +if a callback returns FALSE. + + +If themepath is not specified, the default path is used. The +default path can be overridden by setting the environment variable +B_THEME_PATH. + + + +themepath : + a colon-separated list of directories to search or NULL to +use the default path + +callback : + a function to call for each theme + +callback_data : + data to pass to the callback + + + +<anchor id="b-themes-foreach-theme"/>b_themes_foreach_theme () +void b_themes_foreach_theme (const gchar *themepath, + GHFunc callback, + gpointer callback_data); +b_themes_foreach_theme is deprecated and should not be used in newly-written code. + +Shouldn't be used in new code, use b_themes_foreach() instead. + + + +themepath : + + +callback : + + +callback_data : + + + + +<anchor id="b-themes-lookup-theme"/>b_themes_lookup_theme () +BTheme* b_themes_lookup_theme (const gchar *name, + const gchar *themepath, + GError **error); +b_themes_lookup_theme is deprecated and should not be used in newly-written code. + +Shouldn't be used in new code, use b_themes_query() instead. + + + +name : + + +themepath : + + +error : + + +Returns : + + + +<anchor id="b-theme-frame-diff-boundary"/>b_theme_frame_diff_boundary () +gboolean b_theme_frame_diff_boundary (BTheme *theme, + const guchar *prev_data, + const guchar *frame_data, + BRectangle *bbox); + +Computes the bounding box of the difference image between two frames. + + + +theme : + a BTheme + +prev_data : + data of the previous frame + +frame_data : + data of the current frame + +bbox : + returns bounding box + +Returns : TRUE if the bounding box is not empty. + + + + + + + + +See Also + +BViewDirectFB, BViewGtk + + + + diff --git a/blib-1.1.7/docs/reference/xml/btypes.xml b/blib-1.1.7/docs/reference/xml/btypes.xml new file mode 100644 index 0000000..a6c6057 --- /dev/null +++ b/blib-1.1.7/docs/reference/xml/btypes.xml @@ -0,0 +1,71 @@ + + + + + +BTypes +3 +BLIB Library + + + +BTypesAdditional GTypes registered by BLib + + +Synopsis + + + + + +#define B_TYPE_FILENAME +#define B_VALUE_HOLDS_FILENAME (value) + + + + + + + + + + + +Description + + + + + + +Details + +<anchor id="B-TYPE-FILENAME-CAPS"/>B_TYPE_FILENAME +#define B_TYPE_FILENAME (b_filename_get_type ()) + + +The filename type is derived from G_TYPE_STRING and is used to +indicate that a string should be interpreted as a filename. This +macro returns the GType for this type. + + +<anchor id="B-VALUE-HOLDS-FILENAME-CAPS"/>B_VALUE_HOLDS_FILENAME() +#define B_VALUE_HOLDS_FILENAME(value) (G_TYPE_CHECK_VALUE_TYPE ((value), B_TYPE_FILENAME)) + + +Return whether the given GValue can hold values of type B_TYPE_FILENAME. + +value : +a GValue + + + + + + + + + + + diff --git a/blib-1.1.7/docs/reference/xml/butils.xml b/blib-1.1.7/docs/reference/xml/butils.xml new file mode 100644 index 0000000..9462c09 --- /dev/null +++ b/blib-1.1.7/docs/reference/xml/butils.xml @@ -0,0 +1,342 @@ + + + + + +BUtils +3 +BLIB Library + + + +BUtilsa collection of utility functions, mainly used from parsers + + +Synopsis + + + + + +gchar* b_filename_from_utf8 (const gchar *name, + const gchar *root, + GError **error); +gboolean b_parse_int (const gchar *str, + gint *value); +gboolean b_parse_boolean (const gchar *str, + gboolean *value); +gboolean b_parse_double (const gchar *str, + gdouble *value); +gboolean b_parse_coordinates (const gchar **names, + const gchar **values, + gint *x, + gint *y); +gboolean b_parse_rectangle (const gchar **names, + const gchar **values, + BRectangle *rect); +gboolean b_parse_color (const gchar **names, + const gchar **values, + BColor *color); +gboolean b_parse_param (GObject *object, + const gchar *root, + const gchar **names, + const gchar **values, + GError **error); +gboolean b_object_set_property (GObject *object, + const gchar *key, + const gchar *value, + const gchar *root, + GError **error); +void b_rectangle_union (const BRectangle *src1, + const BRectangle *src2, + BRectangle *dest); +gboolean b_rectangle_intersect (const BRectangle *src1, + const BRectangle *src2, + BRectangle *dest); + + + + + + + + + + +Description + + + + + + +Details + +<anchor id="b-filename-from-utf8"/>b_filename_from_utf8 () +gchar* b_filename_from_utf8 (const gchar *name, + const gchar *root, + GError **error); + +Convert name in UTF-8 encoding to a filename in the filesystem's +encoding. If root is non-NULL and name is not an absolute +filename, the returned filename is built using root as a prefix. + + + +name : + the filename in UTF-8 encoding + +root : + an optional path to use + +error : + location to store the error occuring, or NULL to ignore errors + +Returns : a pointer to the newly allocated filename or NULL in +case of an error. This value must be freed with g_free(). + + + +<anchor id="b-parse-int"/>b_parse_int () +gboolean b_parse_int (const gchar *str, + gint *value); + +Parse an integer value from a string. + + + +str : + the string to parse + +value : + location to store the integer value + +Returns : TRUE if the string could be parsed, FALSE otherwise + + + +<anchor id="b-parse-boolean"/>b_parse_boolean () +gboolean b_parse_boolean (const gchar *str, + gboolean *value); + +Parse a boolean value from a string. + + + +str : + the string to parse + +value : + location to store the boolean value + +Returns : TRUE if the string could be parsed, FALSE otherwise + + + +<anchor id="b-parse-double"/>b_parse_double () +gboolean b_parse_double (const gchar *str, + gdouble *value); + +Parse a double (floating-point) value from a string. + + + +str : + the string to parse + +value : + location to store the double value + +Returns : TRUE if the string could be parsed, FALSE otherwise + + + +<anchor id="b-parse-coordinates"/>b_parse_coordinates () +gboolean b_parse_coordinates (const gchar **names, + const gchar **values, + gint *x, + gint *y); + +Parses a pair of name/value arrays looking for the names "x" and "y" +and tries to parse the associated values into integer values. + + + +names : + a NULL-terminated array of names + +values : + a NULL-terminated array of values + +x : + location to store the value of the x coordinate + +y : + location to store the value of the y coordinate + +Returns : TRUE if both coordinates could be parsed, FALSE otherwise + + + +<anchor id="b-parse-rectangle"/>b_parse_rectangle () +gboolean b_parse_rectangle (const gchar **names, + const gchar **values, + BRectangle *rect); + +Parses a pair of name/value arrays looking for the names "x", "y", +"width" and "heigth" and tries to parse the associated values into +a BRectangle. + + + +names : + a NULL-terminated array of names + +values : + a NULL-terminated array of values + +rect : + pointer to a BRectangle to store the result + +Returns : TRUE if the rectangle could be parsed, FALSE otherwise + + + +<anchor id="b-parse-color"/>b_parse_color () +gboolean b_parse_color (const gchar **names, + const gchar **values, + BColor *color); + +Parses a pair of name/value arrays looking for the name "color" and +tries to convert the associated value to a BColor. The color value +is expected to be in hexadecimal notation as in HTML. + + + +names : + a NULL-terminated array of names + +values : + a NULL-terminated array of values + +color : + pointer to a BColor to store the result + +Returns : TRUE if the color could be parsed, FALSE otherwise + + + +<anchor id="b-parse-param"/>b_parse_param () +gboolean b_parse_param (GObject *object, + const gchar *root, + const gchar **names, + const gchar **values, + GError **error); + +Parses a pair of name/value arrays looking for the names "key" and +"value". The key/value pair is then used to set the respective object +property by calling b_object_set_property(). + + + +object : + a GObject + +root : + an optional string to use as root if a filename is set + +names : + a NULL-terminated array of names + +values : + a NULL-terminated array of values + +error : + location to store the error occuring, or NULL to ignore errors + +Returns : TRUE if parsing was successful, FALSE otherwise + + + +<anchor id="b-object-set-property"/>b_object_set_property () +gboolean b_object_set_property (GObject *object, + const gchar *key, + const gchar *value, + const gchar *root, + GError **error); + +Sets the object property key by interpreting the string +value. This function takes care of converting the string to the +proper type. If the property is a B_TYPE_FILENAME the filename is +build using the root parameter. + + + +object : + a GObject + +key : + the name of the property + +value : + the property value as a string + +root : + an optional string to use as root if a filename property is set + +error : + location to store the error occuring, or NULL to ignore errors + +Returns : TRUE on success, FALSE otherwise + + + +<anchor id="b-rectangle-union"/>b_rectangle_union () +void b_rectangle_union (const BRectangle *src1, + const BRectangle *src2, + BRectangle *dest); + + + +src1 : + + +src2 : + + +dest : + + + + + + +<anchor id="b-rectangle-intersect"/>b_rectangle_intersect () +gboolean b_rectangle_intersect (const BRectangle *src1, + const BRectangle *src2, + BRectangle *dest); + + + +src1 : + + +src2 : + + +dest : + + +Returns : + + + + + + + + + + + diff --git a/blib-1.1.7/docs/reference/xml/bview-aa.xml b/blib-1.1.7/docs/reference/xml/bview-aa.xml new file mode 100644 index 0000000..c0863bc --- /dev/null +++ b/blib-1.1.7/docs/reference/xml/bview-aa.xml @@ -0,0 +1,119 @@ + + + + + +BViewAA +3 +BLIB Library + + + +BViewAA + + +Synopsis + + + + + +struct BViewAA; +BViewAA* b_view_aa_new (aa_context *aac, + gint rows, + gint columns, + gint channels, + GError **error); +void b_view_aa_update (BViewAA *view, + const guchar *frame_data); + + + + + +Object Hierarchy + + + GObject + +----BViewAA + + + + + + + + + + +Description + + + + + + +Details + +<anchor id="BViewAA-struct"/>struct BViewAA +struct BViewAA; + + + + +<anchor id="b-view-aa-new"/>b_view_aa_new () +BViewAA* b_view_aa_new (aa_context *aac, + gint rows, + gint columns, + gint channels, + GError **error); + +Creates a new BViewAA object suitable to display +Blinkenlights movies that fit the theme. Most of the information +from the theme is ignored, except for the placement of the windows. + + + +aac : + the AALIB context + +rows : + + +columns : + + +channels : + + +error : + location to store the error occuring, or NULL to ignore errors + +Returns : a new BViewAA or NULL in case of an error + + + +<anchor id="b-view-aa-update"/>b_view_aa_update () +void b_view_aa_update (BViewAA *view, + const guchar *frame_data); + +Displays a new frame on the view. The view expects frame_data +in the range of 0 to 255. + + + +view : + a BViewAA object + +frame_data : + the frame data to display + + + + + + + + + diff --git a/blib-1.1.7/docs/reference/xml/bview-directfb.xml b/blib-1.1.7/docs/reference/xml/bview-directfb.xml new file mode 100644 index 0000000..a007a1f --- /dev/null +++ b/blib-1.1.7/docs/reference/xml/bview-directfb.xml @@ -0,0 +1,123 @@ + + + + + +BViewDirectFB +3 +BLIB Library + + + +BViewDirectFBa DirectFB widget to display Blinkenlights + + +Synopsis + + + + + +struct BViewDirectFB; +BViewDirectFB* b_view_directfb_new (BTheme *theme, + IDirectFB *dfb, + IDirectFBSurface *dest, + GError **error); +void b_view_directfb_update (BViewDirectFB *view, + const guchar *frame_data); + + + + + +Object Hierarchy + + + GObject + +----BViewDirectFB + + + + + + + + + + +Description + + + + + + +Details + +<anchor id="BViewDirectFB-struct"/>struct BViewDirectFB +struct BViewDirectFB; + +The BViewDirectFB struct shouldn't be accessed directly. Its members +are considered private. + + +<anchor id="b-view-directfb-new"/>b_view_directfb_new () +BViewDirectFB* b_view_directfb_new (BTheme *theme, + IDirectFB *dfb, + IDirectFBSurface *dest, + GError **error); + +Creates a new BViewDirectFB object suitable to display +Blinkenlights movies that fit the theme. The view will render to +the dest surface. If its size doesn't fit the screen size +specified in the theme, the view is drawn centered on the dest +surface. + + + +theme : + a BTheme object + +dfb : + the DirectFB super interface + +dest : + the destination surface + +error : + location to store the error occuring, or NULL to ignore errors + +Returns : a new BViewDirectFB or NULL in case of an error + + + +<anchor id="b-view-directfb-update"/>b_view_directfb_update () +void b_view_directfb_update (BViewDirectFB *view, + const guchar *frame_data); + +Displays a new frame on the view. The view expects frame_data +in the range of 0 to 255. + + + +view : + a BViewDirectFB object + +frame_data : + the frame data to display + + + + + + + + +See Also + +BViewGtk + + + + diff --git a/blib-1.1.7/docs/reference/xml/bview-gtk.xml b/blib-1.1.7/docs/reference/xml/bview-gtk.xml new file mode 100644 index 0000000..66b520b --- /dev/null +++ b/blib-1.1.7/docs/reference/xml/bview-gtk.xml @@ -0,0 +1,119 @@ + + + + + +BViewGtk +3 +BLIB Library + + + +BViewGtka GTK+ widget to display Blinkenlights + + +Synopsis + + + + + +struct BViewGtk; +GtkWidget* b_view_gtk_new (BTheme *theme, + GError **error); +void b_view_gtk_update (BViewGtk *view, + const guchar *frame_data); + + + + + +Object Hierarchy + + + GObject + +----GtkObject + +----GtkWidget + +----GtkDrawingArea + +----BViewGtk + + + + + +Implemented Interfaces + +BViewGtk implements AtkImplementorIface. + + + + + + + + +Description + + + + + + +Details + +<anchor id="BViewGtk-struct"/>struct BViewGtk +struct BViewGtk; + +The BViewGtk struct shouldn't be accessed directly. Its members are +considered private. + + +<anchor id="b-view-gtk-new"/>b_view_gtk_new () +GtkWidget* b_view_gtk_new (BTheme *theme, + GError **error); + +Creates a new widget suitable to display Blinkenlights movies that +fit the theme. + + + +theme : + a BTheme object + +error : + location to store the error occuring, or NULL to ignore errors + +Returns : a new widget or NULL in case of an error + + + +<anchor id="b-view-gtk-update"/>b_view_gtk_update () +void b_view_gtk_update (BViewGtk *view, + const guchar *frame_data); + +Displays a new frame on the view. The view expects frame_data +in the range of 0 to 255. + + + +view : + a BViewGtk widget + +frame_data : + the frame data to display + + + + + + + + +See Also + +BViewDirectFB + + + + diff --git a/blib-1.1.7/docs/reference/xml/bview-pixbuf.xml b/blib-1.1.7/docs/reference/xml/bview-pixbuf.xml new file mode 100644 index 0000000..a06c55c --- /dev/null +++ b/blib-1.1.7/docs/reference/xml/bview-pixbuf.xml @@ -0,0 +1,187 @@ + + + + + +BViewPixbuf +3 +BLIB Library + + + +BViewPixbuf + + +Synopsis + + + + + +struct BViewPixbuf; +BViewPixbuf* b_view_pixbuf_new (gint rows, + gint columns, + gint channels, + GError **error); +BViewPixbuf* b_view_pixbuf_new_theme (BTheme *theme, + gboolean image_preload, + GError **error); +const GdkPixbuf* b_view_pixbuf_load_image (BViewPixbuf *view, + const gchar *filename, + GError **error); +const GdkPixbuf* b_view_pixbuf_render (BViewPixbuf *view, + const guchar *frame_data, + const BRectangle *clip, + GError **error); + + + + + +Object Hierarchy + + + GObject + +----BViewPixbuf + + + + + + + + + + +Description + + + + + + +Details + +<anchor id="BViewPixbuf-struct"/>struct BViewPixbuf +struct BViewPixbuf; + + + + +<anchor id="b-view-pixbuf-new"/>b_view_pixbuf_new () +BViewPixbuf* b_view_pixbuf_new (gint rows, + gint columns, + gint channels, + GError **error); + +Creates a new BViewPixbuf for the given parameters. This is a +simple version that renders a grayscale pixel for every window. + + + +rows : + + +columns : + + +channels : + + +error : + location to store the error occuring, or NULL to ignore errors + +Returns : a new view or NULL in case of an error + + + +<anchor id="b-view-pixbuf-new-theme"/>b_view_pixbuf_new_theme () +BViewPixbuf* b_view_pixbuf_new_theme (BTheme *theme, + gboolean image_preload, + GError **error); + +Creates a pixbuf renderer for Blinkenlights frames using the +theme. When image_preload is enabled, all images refered to by +the theme are loaded. If an error occurs loading the images, +b_view_pixbuf_new() will fail and return NULL. If a view is +created with preloaded images, calling b_view_pixbuf_render() on +it will always succeed so you can skip error checking later. + + + +theme : + a BTheme object + +image_preload : + whether to preload all images + +error : + location to store the error occuring, + or NULL to ignore errors + +Returns : a new view or NULL in case of an error + + + +<anchor id="b-view-pixbuf-load-image"/>b_view_pixbuf_load_image () +const GdkPixbuf* b_view_pixbuf_load_image (BViewPixbuf *view, + const gchar *filename, + GError **error); + +Renders a frame on the view and returns a pointer to a GdkPixbuf +holding the rendered image. The pixbuf is owned by the view, you +may only read from it. + + +The view expects frame_data in the range of 0 to 255. + + + +view : + a BViewPixbuf object + +filename : + the filename of the image to load + +error : + location to store the error occuring, or NULL to ignore errors + +Returns : a pointer to a GdkPixbuf with the rendered frame + + + +<anchor id="b-view-pixbuf-render"/>b_view_pixbuf_render () +const GdkPixbuf* b_view_pixbuf_render (BViewPixbuf *view, + const guchar *frame_data, + const BRectangle *clip, + GError **error); + +Renders a frame on the view. The view expects frame_data in the +range of 0 to 255. + + + +view : + a BViewPixbuf object + +frame_data : + the frame data to display + +clip : + clipping rectangle (or NULL) + +error : + location to store the error occuring, or NULL to ignore + errors + +Returns : a reference to a GdkPixbuf with the rendered frame. + + + + + + + + + diff --git a/blib-1.1.7/docs/reference/xml/bwriter.xml b/blib-1.1.7/docs/reference/xml/bwriter.xml new file mode 100644 index 0000000..8b80198 --- /dev/null +++ b/blib-1.1.7/docs/reference/xml/bwriter.xml @@ -0,0 +1,182 @@ + + + + + +BWriter +3 +BLIB Library + + + +BWriterwrites XML files + + +Synopsis + + + + + +struct BWriter; +BWriter* b_writer_new (FILE *stream, + gint indent); +void b_writer_free (BWriter *writer); +void b_write_header (BWriter *writer, + const gchar *encoding); +void b_write_open_tag (BWriter *writer, + const gchar *tag, + ...); +void b_write_close_tag (BWriter *writer, + const gchar *tag); +void b_write_element (BWriter *writer, + const gchar *tag, + const gchar *value, + ...); + + + + + + + + + + +Description + + + + + + +Details + +<anchor id="BWriter"/>struct BWriter +struct BWriter; + +The BWriter struct is private. + + +<anchor id="b-writer-new"/>b_writer_new () +BWriter* b_writer_new (FILE *stream, + gint indent); + +Creates a new BWriter which gives a convenient interface to write +XML data to stream. The writer should later be freed using +b_writer_free(). + + + +stream : + a FILE stream prepared for writing + +indent : + how many characters to indent per nesting level + +Returns : a newly allocate BWriter + + + +<anchor id="b-writer-free"/>b_writer_free () +void b_writer_free (BWriter *writer); + +Frees the resources allocated for writer. You must not access +writer after calling this function. + + + +writer : + a BWriter + + + +<anchor id="b-write-header"/>b_write_header () +void b_write_header (BWriter *writer, + const gchar *encoding); + +Writes an XML header to the stream associated with writer. + + + +writer : + a BWriter + +encoding : + an optional encoding string or NULL + + + +<anchor id="b-write-open-tag"/>b_write_open_tag () +void b_write_open_tag (BWriter *writer, + const gchar *tag, + ...); + +Writes an opening XML tag with the element name tag to the stream +associated with writer. You can pass a NULL-terminated list of +key/value pairs that are written out as attributes. + + + +writer : + a BWriter + +tag : + the name of the element to open + +... : + an optional key/value pairs interpreted as attributes + + + +<anchor id="b-write-close-tag"/>b_write_close_tag () +void b_write_close_tag (BWriter *writer, + const gchar *tag); + +Writes a closing XML tag with the element name tag to the stream +associated with writer. + + + +writer : + a BWriter + +tag : + the name of the element to close + + + +<anchor id="b-write-element"/>b_write_element () +void b_write_element (BWriter *writer, + const gchar *tag, + const gchar *value, + ...); + +Writes an XML element with the name tag and the value value to +the stream associated with writer. If value is NULL, an empty +element is written. You can pass a NULL-terminated list of +key/value pairs that are written out as attributes. + + + +writer : + a BWriter + +tag : + the element name + +value : + the element value + +... : + an optional key/value pairs interpreted as attributes + + + + + + + + + diff --git a/blib-1.1.7/gfx/Makefile.am b/blib-1.1.7/gfx/Makefile.am new file mode 100644 index 0000000..dcb8c68 --- /dev/null +++ b/blib-1.1.7/gfx/Makefile.am @@ -0,0 +1,68 @@ +## Makefile.am for blib/gfx +## Process this file with automake to produce Makefile.in + +AM_CPPFLAGS = \ + $(CFLAGS) \ + -DG_DISABLE_DEPRECATED \ + -DGDK_PIXBUF_DISABLE_DEPRECATED \ + -DGDK_DISABLE_DEPRECATED \ + -DGTK_DISABLE_DEPRECATED + +INCLUDES = \ + -I$(top_srcdir) \ + @GLIB_CFLAGS@ \ + @GDK_PIXBUF_CFLAGS@ \ + @GTK_CFLAGS@ \ + @DIRECTFB_CFLAGS@ + +gfx_ldflags = \ + -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \ + -release $(LT_RELEASE) -export-dynamic + + +if HAVE_AA +gfx_aa_lib = libb-aa.la +endif + +if HAVE_DIRECTFB +gfx_directfb_lib = libb-directfb.la +endif + +if HAVE_GTK +gfx_gtk_lib = libb-gtk.la +endif + +if HAVE_PIXBUF +gfx_pixbuf_lib = libb-pixbuf.la +endif + + +lib_LTLIBRARIES = \ + $(gfx_directfb_lib) \ + $(gfx_pixbuf_lib) \ + $(gfx_gtk_lib) \ + $(gfx_aa_lib) + +libb_aa_la_includedir = $(INCLUDEDIR)/blib +libb_aa_la_include_HEADERS = blib-aa.h bview-aa.h +libb_aa_la_SOURCES = bview-aa.c +libb_aa_la_LIBADD = @AA_LIBS@ @WIN32_LIBS@ +libb_aa_la_LDFLAGS = $(gfx_ldflags) + +libb_directfb_la_includedir = $(INCLUDEDIR)/blib +libb_directfb_la_include_HEADERS = blib-directfb.h bview-directfb.h +libb_directfb_la_SOURCES = bview-directfb.c +libb_directfb_la_LIBADD = @DIRECTFB_LIBS@ @WIN32_LIBS@ +libb_directfb_la_LDFLAGS = $(gfx_ldflags) + +libb_gtk_la_includedir = $(INCLUDEDIR)/blib +libb_gtk_la_include_HEADERS = blib-gtk.h bview-gtk.h +libb_gtk_la_SOURCES = bview-gtk.c +libb_gtk_la_LIBADD = @GTK_LIBS@ @WIN32_LIBS@ +libb_gtk_la_LDFLAGS = $(gfx_ldflags) + +libb_pixbuf_la_includedir = $(INCLUDEDIR)/blib +libb_pixbuf_la_include_HEADERS = blib-pixbuf.h bview-pixbuf.h +libb_pixbuf_la_SOURCES = bview-pixbuf.c +libb_pixbuf_la_LIBADD = @GDK_PIXBUF_LIBS@ @WIN32_LIBS@ +libb_pixbuf_la_LDFLAGS = $(gfx_ldflags) diff --git a/blib-1.1.7/gfx/Makefile.in b/blib-1.1.7/gfx/Makefile.in new file mode 100644 index 0000000..089b12d --- /dev/null +++ b/blib-1.1.7/gfx/Makefile.in @@ -0,0 +1,662 @@ +# Makefile.in generated by automake 1.7.9 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = .. + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +AA_LIBS = @AA_LIBS@ +AA_VIEW_TYPE = @AA_VIEW_TYPE@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BLIB_BINARY_AGE = @BLIB_BINARY_AGE@ +BLIB_INTERFACE_AGE = @BLIB_INTERFACE_AGE@ +BLIB_MAJOR_VERSION = @BLIB_MAJOR_VERSION@ +BLIB_MICRO_VERSION = @BLIB_MICRO_VERSION@ +BLIB_MINOR_VERSION = @BLIB_MINOR_VERSION@ +BLIB_VERSION = @BLIB_VERSION@ +BUILD_MODULES_FALSE = @BUILD_MODULES_FALSE@ +BUILD_MODULES_TRUE = @BUILD_MODULES_TRUE@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIR = @DATADIR@ +DB2HTML = @DB2HTML@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DIRECTFB_CFLAGS = @DIRECTFB_CFLAGS@ +DIRECTFB_LIBS = @DIRECTFB_LIBS@ +DIRECTFB_VIEW_TYPE = @DIRECTFB_VIEW_TYPE@ +ECHO = @ECHO@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ENABLE_GTK_DOC_FALSE = @ENABLE_GTK_DOC_FALSE@ +ENABLE_GTK_DOC_TRUE = @ENABLE_GTK_DOC_TRUE@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ +GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ +GLIB_LIBS = @GLIB_LIBS@ +GLIB_MKENUMS = @GLIB_MKENUMS@ +GOBJECT_QUERY = @GOBJECT_QUERY@ +GTKDOC = @GTKDOC@ +GTK_CFLAGS = @GTK_CFLAGS@ +GTK_LIBS = @GTK_LIBS@ +GTK_VIEW_TYPE = @GTK_VIEW_TYPE@ +HAVE_AA_FALSE = @HAVE_AA_FALSE@ +HAVE_AA_TRUE = @HAVE_AA_TRUE@ +HAVE_DIRECTFB_FALSE = @HAVE_DIRECTFB_FALSE@ +HAVE_DIRECTFB_TRUE = @HAVE_DIRECTFB_TRUE@ +HAVE_DOCBOOK_FALSE = @HAVE_DOCBOOK_FALSE@ +HAVE_DOCBOOK_TRUE = @HAVE_DOCBOOK_TRUE@ +HAVE_GTK_DOC = @HAVE_GTK_DOC@ +HAVE_GTK_DOC_FALSE = @HAVE_GTK_DOC_FALSE@ +HAVE_GTK_DOC_TRUE = @HAVE_GTK_DOC_TRUE@ +HAVE_GTK_FALSE = @HAVE_GTK_FALSE@ +HAVE_GTK_TRUE = @HAVE_GTK_TRUE@ +HAVE_PIXBUF_FALSE = @HAVE_PIXBUF_FALSE@ +HAVE_PIXBUF_TRUE = @HAVE_PIXBUF_TRUE@ +HTML_DIR = @HTML_DIR@ +INCLUDEDIR = @INCLUDEDIR@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_AGE = @LT_AGE@ +LT_CURRENT = @LT_CURRENT@ +LT_RELEASE = @LT_RELEASE@ +LT_REVISION = @LT_REVISION@ +MAINT = @MAINT@ +MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ +MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ +MAKEINFO = @MAKEINFO@ +MODULEPATH = @MODULEPATH@ +OBJEXT = @OBJEXT@ +OS_WIN32_FALSE = @OS_WIN32_FALSE@ +OS_WIN32_TRUE = @OS_WIN32_TRUE@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PIXBUF_VIEW_TYPE = @PIXBUF_VIEW_TYPE@ +PKG_CONFIG = @PKG_CONFIG@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +THEMEPATH = @THEMEPATH@ +VERSION = @VERSION@ +WIN32_CFLAGS = @WIN32_CFLAGS@ +WIN32_LIBS = @WIN32_LIBS@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_F77 = @ac_ct_F77@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +AM_CPPFLAGS = \ + $(CFLAGS) \ + -DG_DISABLE_DEPRECATED \ + -DGDK_PIXBUF_DISABLE_DEPRECATED \ + -DGDK_DISABLE_DEPRECATED \ + -DGTK_DISABLE_DEPRECATED + + +INCLUDES = \ + -I$(top_srcdir) \ + @GLIB_CFLAGS@ \ + @GDK_PIXBUF_CFLAGS@ \ + @GTK_CFLAGS@ \ + @DIRECTFB_CFLAGS@ + + +gfx_ldflags = \ + -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \ + -release $(LT_RELEASE) -export-dynamic + + +@HAVE_AA_TRUE@gfx_aa_lib = libb-aa.la + +@HAVE_DIRECTFB_TRUE@gfx_directfb_lib = libb-directfb.la + +@HAVE_GTK_TRUE@gfx_gtk_lib = libb-gtk.la + +@HAVE_PIXBUF_TRUE@gfx_pixbuf_lib = libb-pixbuf.la + +lib_LTLIBRARIES = \ + $(gfx_directfb_lib) \ + $(gfx_pixbuf_lib) \ + $(gfx_gtk_lib) \ + $(gfx_aa_lib) + + +libb_aa_la_includedir = $(INCLUDEDIR)/blib +libb_aa_la_include_HEADERS = blib-aa.h bview-aa.h +libb_aa_la_SOURCES = bview-aa.c +libb_aa_la_LIBADD = @AA_LIBS@ @WIN32_LIBS@ +libb_aa_la_LDFLAGS = $(gfx_ldflags) + +libb_directfb_la_includedir = $(INCLUDEDIR)/blib +libb_directfb_la_include_HEADERS = blib-directfb.h bview-directfb.h +libb_directfb_la_SOURCES = bview-directfb.c +libb_directfb_la_LIBADD = @DIRECTFB_LIBS@ @WIN32_LIBS@ +libb_directfb_la_LDFLAGS = $(gfx_ldflags) + +libb_gtk_la_includedir = $(INCLUDEDIR)/blib +libb_gtk_la_include_HEADERS = blib-gtk.h bview-gtk.h +libb_gtk_la_SOURCES = bview-gtk.c +libb_gtk_la_LIBADD = @GTK_LIBS@ @WIN32_LIBS@ +libb_gtk_la_LDFLAGS = $(gfx_ldflags) + +libb_pixbuf_la_includedir = $(INCLUDEDIR)/blib +libb_pixbuf_la_include_HEADERS = blib-pixbuf.h bview-pixbuf.h +libb_pixbuf_la_SOURCES = bview-pixbuf.c +libb_pixbuf_la_LIBADD = @GDK_PIXBUF_LIBS@ @WIN32_LIBS@ +libb_pixbuf_la_LDFLAGS = $(gfx_ldflags) +subdir = gfx +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +LTLIBRARIES = $(lib_LTLIBRARIES) + +libb_aa_la_DEPENDENCIES = +am_libb_aa_la_OBJECTS = bview-aa.lo +libb_aa_la_OBJECTS = $(am_libb_aa_la_OBJECTS) +libb_directfb_la_DEPENDENCIES = +am_libb_directfb_la_OBJECTS = bview-directfb.lo +libb_directfb_la_OBJECTS = $(am_libb_directfb_la_OBJECTS) +libb_gtk_la_DEPENDENCIES = +am_libb_gtk_la_OBJECTS = bview-gtk.lo +libb_gtk_la_OBJECTS = $(am_libb_gtk_la_OBJECTS) +libb_pixbuf_la_DEPENDENCIES = +am_libb_pixbuf_la_OBJECTS = bview-pixbuf.lo +libb_pixbuf_la_OBJECTS = $(am_libb_pixbuf_la_OBJECTS) + +DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/bview-aa.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/bview-directfb.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/bview-gtk.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/bview-pixbuf.Plo +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) \ + $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +DIST_SOURCES = $(libb_aa_la_SOURCES) $(libb_directfb_la_SOURCES) \ + $(libb_gtk_la_SOURCES) $(libb_pixbuf_la_SOURCES) +HEADERS = $(libb_aa_la_include_HEADERS) \ + $(libb_directfb_la_include_HEADERS) \ + $(libb_gtk_la_include_HEADERS) \ + $(libb_pixbuf_la_include_HEADERS) + +DIST_COMMON = $(libb_aa_la_include_HEADERS) \ + $(libb_directfb_la_include_HEADERS) \ + $(libb_gtk_la_include_HEADERS) \ + $(libb_pixbuf_la_include_HEADERS) $(srcdir)/Makefile.in \ + Makefile.am +SOURCES = $(libb_aa_la_SOURCES) $(libb_directfb_la_SOURCES) $(libb_gtk_la_SOURCES) $(libb_pixbuf_la_SOURCES) + +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu gfx/Makefile +Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) +libLTLIBRARIES_INSTALL = $(INSTALL) +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(libdir) + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + f="`echo $$p | sed -e 's|^.*/||'`"; \ + echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(libdir)/$$f"; \ + $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(libdir)/$$f; \ + else :; fi; \ + done + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + p="`echo $$p | sed -e 's|^.*/||'`"; \ + echo " $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/$$p"; \ + $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/$$p; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" = "$$p" && dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +libb-aa.la: $(libb_aa_la_OBJECTS) $(libb_aa_la_DEPENDENCIES) + $(LINK) -rpath $(libdir) $(libb_aa_la_LDFLAGS) $(libb_aa_la_OBJECTS) $(libb_aa_la_LIBADD) $(LIBS) +libb-directfb.la: $(libb_directfb_la_OBJECTS) $(libb_directfb_la_DEPENDENCIES) + $(LINK) -rpath $(libdir) $(libb_directfb_la_LDFLAGS) $(libb_directfb_la_OBJECTS) $(libb_directfb_la_LIBADD) $(LIBS) +libb-gtk.la: $(libb_gtk_la_OBJECTS) $(libb_gtk_la_DEPENDENCIES) + $(LINK) -rpath $(libdir) $(libb_gtk_la_LDFLAGS) $(libb_gtk_la_OBJECTS) $(libb_gtk_la_LIBADD) $(LIBS) +libb-pixbuf.la: $(libb_pixbuf_la_OBJECTS) $(libb_pixbuf_la_DEPENDENCIES) + $(LINK) -rpath $(libdir) $(libb_pixbuf_la_LDFLAGS) $(libb_pixbuf_la_OBJECTS) $(libb_pixbuf_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) core *.core + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bview-aa.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bview-directfb.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bview-gtk.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bview-pixbuf.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \ +@am__fastdepCC_TRUE@ -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \ +@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ +@am__fastdepCC_TRUE@ fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$< + +.c.obj: +@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \ +@am__fastdepCC_TRUE@ -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \ +@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ +@am__fastdepCC_TRUE@ fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi` + +.c.lo: +@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \ +@am__fastdepCC_TRUE@ -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; \ +@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ +@am__fastdepCC_TRUE@ fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool +uninstall-info-am: +libb_aa_la_includeHEADERS_INSTALL = $(INSTALL_HEADER) +install-libb_aa_la_includeHEADERS: $(libb_aa_la_include_HEADERS) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(libb_aa_la_includedir) + @list='$(libb_aa_la_include_HEADERS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f="`echo $$p | sed -e 's|^.*/||'`"; \ + echo " $(libb_aa_la_includeHEADERS_INSTALL) $$d$$p $(DESTDIR)$(libb_aa_la_includedir)/$$f"; \ + $(libb_aa_la_includeHEADERS_INSTALL) $$d$$p $(DESTDIR)$(libb_aa_la_includedir)/$$f; \ + done + +uninstall-libb_aa_la_includeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(libb_aa_la_include_HEADERS)'; for p in $$list; do \ + f="`echo $$p | sed -e 's|^.*/||'`"; \ + echo " rm -f $(DESTDIR)$(libb_aa_la_includedir)/$$f"; \ + rm -f $(DESTDIR)$(libb_aa_la_includedir)/$$f; \ + done +libb_directfb_la_includeHEADERS_INSTALL = $(INSTALL_HEADER) +install-libb_directfb_la_includeHEADERS: $(libb_directfb_la_include_HEADERS) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(libb_directfb_la_includedir) + @list='$(libb_directfb_la_include_HEADERS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f="`echo $$p | sed -e 's|^.*/||'`"; \ + echo " $(libb_directfb_la_includeHEADERS_INSTALL) $$d$$p $(DESTDIR)$(libb_directfb_la_includedir)/$$f"; \ + $(libb_directfb_la_includeHEADERS_INSTALL) $$d$$p $(DESTDIR)$(libb_directfb_la_includedir)/$$f; \ + done + +uninstall-libb_directfb_la_includeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(libb_directfb_la_include_HEADERS)'; for p in $$list; do \ + f="`echo $$p | sed -e 's|^.*/||'`"; \ + echo " rm -f $(DESTDIR)$(libb_directfb_la_includedir)/$$f"; \ + rm -f $(DESTDIR)$(libb_directfb_la_includedir)/$$f; \ + done +libb_gtk_la_includeHEADERS_INSTALL = $(INSTALL_HEADER) +install-libb_gtk_la_includeHEADERS: $(libb_gtk_la_include_HEADERS) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(libb_gtk_la_includedir) + @list='$(libb_gtk_la_include_HEADERS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f="`echo $$p | sed -e 's|^.*/||'`"; \ + echo " $(libb_gtk_la_includeHEADERS_INSTALL) $$d$$p $(DESTDIR)$(libb_gtk_la_includedir)/$$f"; \ + $(libb_gtk_la_includeHEADERS_INSTALL) $$d$$p $(DESTDIR)$(libb_gtk_la_includedir)/$$f; \ + done + +uninstall-libb_gtk_la_includeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(libb_gtk_la_include_HEADERS)'; for p in $$list; do \ + f="`echo $$p | sed -e 's|^.*/||'`"; \ + echo " rm -f $(DESTDIR)$(libb_gtk_la_includedir)/$$f"; \ + rm -f $(DESTDIR)$(libb_gtk_la_includedir)/$$f; \ + done +libb_pixbuf_la_includeHEADERS_INSTALL = $(INSTALL_HEADER) +install-libb_pixbuf_la_includeHEADERS: $(libb_pixbuf_la_include_HEADERS) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(libb_pixbuf_la_includedir) + @list='$(libb_pixbuf_la_include_HEADERS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f="`echo $$p | sed -e 's|^.*/||'`"; \ + echo " $(libb_pixbuf_la_includeHEADERS_INSTALL) $$d$$p $(DESTDIR)$(libb_pixbuf_la_includedir)/$$f"; \ + $(libb_pixbuf_la_includeHEADERS_INSTALL) $$d$$p $(DESTDIR)$(libb_pixbuf_la_includedir)/$$f; \ + done + +uninstall-libb_pixbuf_la_includeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(libb_pixbuf_la_include_HEADERS)'; for p in $$list; do \ + f="`echo $$p | sed -e 's|^.*/||'`"; \ + echo " rm -f $(DESTDIR)$(libb_pixbuf_la_includedir)/$$f"; \ + rm -f $(DESTDIR)$(libb_pixbuf_la_includedir)/$$f; \ + done + +ETAGS = etags +ETAGSFLAGS = + +CTAGS = ctags +CTAGSFLAGS = + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)$$tags$$unique" \ + || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique + +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = .. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) $(HEADERS) + +installdirs: + $(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(libb_aa_la_includedir) $(DESTDIR)$(libb_directfb_la_includedir) $(DESTDIR)$(libb_gtk_la_includedir) $(DESTDIR)$(libb_pixbuf_la_includedir) +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-libtool distclean-tags + +dvi: dvi-am + +dvi-am: + +info: info-am + +info-am: + +install-data-am: install-libb_aa_la_includeHEADERS \ + install-libb_directfb_la_includeHEADERS \ + install-libb_gtk_la_includeHEADERS \ + install-libb_pixbuf_la_includeHEADERS + +install-exec-am: install-libLTLIBRARIES + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am uninstall-libLTLIBRARIES \ + uninstall-libb_aa_la_includeHEADERS \ + uninstall-libb_directfb_la_includeHEADERS \ + uninstall-libb_gtk_la_includeHEADERS \ + uninstall-libb_pixbuf_la_includeHEADERS + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libLTLIBRARIES clean-libtool ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am info info-am install \ + install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am \ + install-libLTLIBRARIES install-libb_aa_la_includeHEADERS \ + install-libb_directfb_la_includeHEADERS \ + install-libb_gtk_la_includeHEADERS \ + install-libb_pixbuf_la_includeHEADERS install-man install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-info-am \ + uninstall-libLTLIBRARIES uninstall-libb_aa_la_includeHEADERS \ + uninstall-libb_directfb_la_includeHEADERS \ + uninstall-libb_gtk_la_includeHEADERS \ + uninstall-libb_pixbuf_la_includeHEADERS + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/blib-1.1.7/gfx/blib-aa.h b/blib-1.1.7/gfx/blib-aa.h new file mode 100644 index 0000000..ff1d0ea --- /dev/null +++ b/blib-1.1.7/gfx/blib-aa.h @@ -0,0 +1,29 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (C) 2003 pix + * Copyright (C) 2002 The Blinkenlights Crew + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __BLIB_AA_H__ +#define __BLIB_AA_H__ + +#include + +#include +#include + +#endif /* __BLIB_AA_H__ */ diff --git a/blib-1.1.7/gfx/blib-directfb.h b/blib-1.1.7/gfx/blib-directfb.h new file mode 100644 index 0000000..9f01def --- /dev/null +++ b/blib-1.1.7/gfx/blib-directfb.h @@ -0,0 +1,28 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (C) 2002 The Blinkenlights Crew + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __BLIB_DIRECTFB_H__ +#define __BLIB_DIRECTFB_H__ + +#include + +#include +#include + +#endif /* __BLIB_DIRECTFB_H__ */ diff --git a/blib-1.1.7/gfx/blib-gtk.h b/blib-1.1.7/gfx/blib-gtk.h new file mode 100644 index 0000000..b68b3af --- /dev/null +++ b/blib-1.1.7/gfx/blib-gtk.h @@ -0,0 +1,29 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (C) 2002 The Blinkenlights Crew + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __BLIB_GTK_H__ +#define __BLIB_GTK_H__ + +#include + +#include +#include +#include + +#endif /* __BLIB_GTK_H__ */ diff --git a/blib-1.1.7/gfx/blib-pixbuf.h b/blib-1.1.7/gfx/blib-pixbuf.h new file mode 100644 index 0000000..2c801e4 --- /dev/null +++ b/blib-1.1.7/gfx/blib-pixbuf.h @@ -0,0 +1,28 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (C) 2002-2004 The Blinkenlights Crew + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __BLIB_PIXBUF_H__ +#define __BLIB_PIXBUF_H__ + +#include + +#include +#include + +#endif /* __BLIB_PIXBUF_H__ */ diff --git a/blib-1.1.7/gfx/bview-aa.c b/blib-1.1.7/gfx/bview-aa.c new file mode 100644 index 0000000..b1a76cf --- /dev/null +++ b/blib-1.1.7/gfx/bview-aa.c @@ -0,0 +1,170 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2003 pix + * Copyright (c) 2001-2002 The Blinkenlights Crew + * Sven Neumann + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include /* memset */ + +#include + +#include "blib/blib.h" + +#include "bview-aa.h" + + +static void b_view_aa_init (BViewAA *view); + + +GType +b_view_aa_get_type (void) +{ + static GType view_type = 0; + + if (!view_type) + { + static const GTypeInfo view_info = + { + sizeof (BViewAAClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + NULL, /* class_init */ + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (BViewAA), + 0, /* n_preallocs */ + (GInstanceInitFunc) b_view_aa_init, + }; + + view_type = g_type_register_static (G_TYPE_OBJECT, + "BViewAA", &view_info, 0); + } + + return view_type; +} + +static void +b_view_aa_init (BViewAA *view) +{ + view->aac = NULL; + view->rows = 0; + view->columns = 0; + view->channels = 0; +} + +/** + * b_view_aa_new: + * @aac: the AALIB context + * @rows: + * @columns: + * @channels: + * @error: location to store the error occuring, or %NULL to ignore errors + * + * Creates a new #BViewAA object suitable to display + * Blinkenlights movies that fit the @theme. Most of the information + * from the theme is ignored, except for the placement of the windows. + * + * Return value: a new #BViewAA or %NULL in case of an error + **/ +BViewAA * +b_view_aa_new (aa_context *aac, + gint rows, + gint columns, + gint channels, + GError **error) +{ + BViewAA *view; + + g_return_val_if_fail (aac != NULL, NULL); + g_return_val_if_fail (rows > 0 && columns > 0, NULL); + g_return_val_if_fail (error == NULL || *error == NULL, NULL); + + if (channels != 1) + { + g_set_error (error, 0, 0, "Channels != 1 is not (yet) supported"); + return NULL; + } + + view = B_VIEW_AA (g_object_new (B_TYPE_VIEW_AA, NULL)); + + view->aac = aac; + view->rows = rows; + view->columns = columns; + view->channels = channels; + + /* + work out how many pixels make up a screen character + normally 2x2 but they threaten to change it to 3x3 + */ + view->char_width = (aa_imgwidth (aac) / aa_scrwidth (aac)); + view->char_height = (aa_imgheight (aac) / aa_scrheight (aac)); + + b_view_aa_update (view, NULL); + + return view; +} + +/** + * b_view_aa_update: + * @view: a #BViewAA object + * @frame_data: the frame data to display + * + * Displays a new frame on the @view. The @view expects @frame_data + * in the range of 0 to 255. + **/ +void +b_view_aa_update (BViewAA *view, + const guchar *frame_data) +{ + aa_context *aac; + gint x, y; + + g_return_if_fail (B_IS_VIEW_AA (view)); + + aac = view->aac; + + /* clear the screen */ + memset (aa_image (aac), 0, aa_imgheight (aac) * aa_imgwidth (aac)); + + if (!frame_data) + return; + + for (y = 0; y < view->rows; y++) + for (x = 0; x < view->columns; x++) + { + gint ix, iy; + + /* draw a block that fills one screen character */ + for (iy = 0; iy < view->char_height; iy++) + for (ix = 0; ix < view->char_width; ix++) + { + aa_putpixel (aac, + x * view->char_width + ix, + y * view->char_height + iy, + *frame_data); + } + + frame_data++; + } + + aa_fastrender (aac, 0, 0, view->columns, view->rows); + + aa_flush (aac); +} diff --git a/blib-1.1.7/gfx/bview-aa.h b/blib-1.1.7/gfx/bview-aa.h new file mode 100644 index 0000000..c029b7a --- /dev/null +++ b/blib-1.1.7/gfx/bview-aa.h @@ -0,0 +1,70 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2003 pix + * Copyright (c) 2001-2002 The Blinkenlights Crew + * Sven Neumann + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __B_VIEW_AA_H__ +#define __B_VIEW_AA_H__ + +G_BEGIN_DECLS + +#define B_TYPE_VIEW_AA (b_view_aa_get_type ()) +#define B_VIEW_AA(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), B_TYPE_VIEW_AA, BViewAA)) +#define B_VIEW_AA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), B_TYPE_VIEW_AA, BViewAAClass)) +#define B_IS_VIEW_AA(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), B_TYPE_VIEW_AA)) + + +typedef struct _BViewAAClass BViewAAClass; +typedef struct _BViewAA BViewAA; + +struct _BViewAAClass +{ + GObjectClass parent_class; +}; + +struct _BViewAA +{ + /*< private >*/ + GObject parent_instance; + + gint rows; + gint columns; + gint channels; + + gint char_width; + gint char_height; + + aa_context *aac; +}; + + +GType b_view_aa_get_type (void) G_GNUC_CONST; +BViewAA * b_view_aa_new (aa_context *aac, + gint rows, + gint columns, + gint channels, + GError **error); + +/* the view expects data with a maxval of 255 */ +void b_view_aa_update (BViewAA *view, + const guchar *frame_data); + +G_END_DECLS + +#endif /* __B_VIEW_AA_H__ */ diff --git a/blib-1.1.7/gfx/bview-directfb.c b/blib-1.1.7/gfx/bview-directfb.c new file mode 100644 index 0000000..a0be90e --- /dev/null +++ b/blib-1.1.7/gfx/bview-directfb.c @@ -0,0 +1,325 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2001-2004 The Blinkenlights Crew + * Sven Neumann + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include + +#include "blib/blib.h" + +#include "bview-directfb.h" + + +static void b_view_directfb_class_init (BViewDirectFBClass *class); +static void b_view_directfb_init (BViewDirectFB *view); +static void b_view_directfb_finalize (GObject *object); + +static IDirectFBSurface * load_image (BViewDirectFB *view, + IDirectFB *dfb, + const gchar *filename); +static void surface_release (IDirectFBSurface *surface); + + +static GObjectClass *parent_class = NULL; + + +GType +b_view_directfb_get_type (void) +{ + static GType view_type = 0; + + if (!view_type) + { + static const GTypeInfo view_info = + { + sizeof (BViewDirectFBClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc) b_view_directfb_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (BViewDirectFB), + 0, /* n_preallocs */ + (GInstanceInitFunc) b_view_directfb_init, + }; + + view_type = g_type_register_static (G_TYPE_OBJECT, + "BViewDirectFB", &view_info, 0); + } + + return view_type; +} + +static void +b_view_directfb_class_init (BViewDirectFBClass *class) +{ + GObjectClass *object_class; + + parent_class = g_type_class_peek_parent (class); + object_class = G_OBJECT_CLASS (class); + + object_class->finalize = b_view_directfb_finalize; +} + +static void +b_view_directfb_init (BViewDirectFB *view) +{ + view->theme = NULL; + view->images = g_hash_table_new_full (g_str_hash, g_str_equal, + (GDestroyNotify) NULL, + (GDestroyNotify) surface_release); +} + +static void +b_view_directfb_finalize (GObject *object) +{ + BViewDirectFB *view; + + view = B_VIEW_DIRECTFB (object); + + if (view->dest) + view->dest->Release (view->dest); + + if (view->theme) + g_object_unref (view->theme); + + g_hash_table_destroy (view->images); + + G_OBJECT_CLASS (parent_class)->finalize (object); +} + +/** + * b_view_directfb_new: + * @theme: a #BTheme object + * @dfb: the DirectFB super interface + * @dest: the destination surface + * @error: location to store the error occuring, or %NULL to ignore errors + * + * Creates a new #BViewDirectFB object suitable to display + * Blinkenlights movies that fit the @theme. The view will render to + * the @dest surface. If its size doesn't fit the screen size + * specified in the theme, the view is drawn centered on the @dest + * surface. + * + * Return value: a new #BViewDirectFB or %NULL in case of an error + **/ +BViewDirectFB * +b_view_directfb_new (BTheme *theme, + IDirectFB *dfb, + IDirectFBSurface *dest, + GError **error) +{ + BViewDirectFB *view; + GList *list; + DFBRectangle rect; + + g_return_val_if_fail (B_IS_THEME (theme), NULL); + g_return_val_if_fail (dfb != NULL, NULL); + g_return_val_if_fail (dest != NULL, NULL); + g_return_val_if_fail (error == NULL || *error == NULL, NULL); + + if (theme->channels != 1) + { + g_set_error (error, 0, 0, "Channels != 1 is not (yet) supported"); + return NULL; + } + + view = B_VIEW_DIRECTFB (g_object_new (B_TYPE_VIEW_DIRECTFB, NULL)); + + view->theme = g_object_ref (theme); + + dest->Clear (dest, + theme->bg_color.r, theme->bg_color.g, theme->bg_color.b, 0xFF); + + dest->GetSize (dest, &rect.w, &rect.h); + + rect.x = (rect.w - theme->width) / 2; + rect.y = (rect.h - theme->height) / 2; + + dest->GetSubSurface (dest, &rect, &view->dest); + + if (theme->bg_image) + view->background = load_image (view, dfb, theme->bg_image); + + for (list = theme->overlays; list; list = list->next) + { + BOverlay *overlay = list->data; + + if (!overlay->image) + continue; + + load_image (view, dfb, overlay->image); + } + + b_view_directfb_update (view, NULL); + + return view; +} + +/** + * b_view_directfb_update: + * @view: a #BViewDirectFB object + * @frame_data: the frame data to display + * + * Displays a new frame on the @view. The @view expects @frame_data + * in the range of 0 to 255. + **/ +void +b_view_directfb_update (BViewDirectFB *view, + const guchar *frame_data) +{ + BTheme *theme; + IDirectFBSurface *dest; + GList *list; + + g_return_if_fail (B_IS_VIEW_DIRECTFB (view)); + g_return_if_fail (B_IS_THEME (view->theme)); + + theme = view->theme; + dest = view->dest; + + dest->Clear (dest, + theme->bg_color.r, theme->bg_color.g, theme->bg_color.b, 0xFF); + + if (view->background) + { + dest->SetBlittingFlags (dest, DSBLIT_NOFX); + dest->Blit (dest, + view->background, NULL, + theme->bg_image_x, theme->bg_image_y); + } + + if (!frame_data) + return; + + for (list = theme->overlays; list; list = list->next) + { + BOverlay *overlay = list->data; + IDirectFBSurface *surface = NULL; + GList *windows; + + if (overlay->image) + surface = g_hash_table_lookup (view->images, overlay->image); + + if (surface) + { + dest->SetBlittingFlags (dest, (DSBLIT_BLEND_ALPHACHANNEL | + DSBLIT_BLEND_COLORALPHA)); + + for (windows = overlay->windows; windows; windows = windows->next) + { + BWindow *window = windows->data; + DFBRectangle rect; + guchar value; + + value = frame_data[(window->column + + window->row * theme->columns)]; + if (!value) + continue; + + window += (value * theme->maxval) / 256; + + rect.x = window->src_x; + rect.y = window->src_y; + rect.w = window->rect.w; + rect.h = window->rect.h; + + dest->SetColor (dest, + 0, 0, 0, + window->value == B_WINDOW_VALUE_ALL ? + value : 0xFF); + dest->Blit (dest, + surface, &rect, window->rect.x, window->rect.y); + } + } + else + { + dest->SetDrawingFlags (dest, DSDRAW_BLEND); + + for (windows = overlay->windows; windows; windows = windows->next) + { + BWindow *window = windows->data; + guchar value; + + value = frame_data[(window->column + + window->row * theme->columns)]; + if (!value) + continue; + + window += (value * theme->maxval) / 256; + + dest->SetColor (dest, + overlay->color.r, + overlay->color.g, + overlay->color.b, + (window->value == B_WINDOW_VALUE_ALL) ? + ((overlay->color.a + 1) * value) >> 8 : + overlay->color.a); + dest->FillRectangle (dest, + window->rect.x, window->rect.y, + window->rect.w, window->rect.h); + } + } + } +} + +static IDirectFBSurface * +load_image (BViewDirectFB *view, + IDirectFB *dfb, + const gchar *filename) +{ + IDirectFBSurface *surface; + IDirectFBImageProvider *provider; + DFBSurfaceDescription dsc; + DFBResult err; + + surface = g_hash_table_lookup (view->images, filename); + + if (surface) + return surface; + + err = dfb->CreateImageProvider (dfb, filename, &provider); + + if (err) + { + g_printerr ("Error loading image from file '%s': %s\n", + filename, DirectFBErrorString (err)); + } + else + { + provider->GetSurfaceDescription (provider, &dsc); + + if (dfb->CreateSurface (dfb, &dsc, &surface) != DFB_OK) + return NULL; + + provider->RenderTo (provider, surface, NULL); + provider->Release (provider); + } + + g_hash_table_insert (view->images, (gpointer) filename, surface); + + return surface; +} + +static void +surface_release (IDirectFBSurface *surface) +{ + surface->Release (surface); +} diff --git a/blib-1.1.7/gfx/bview-directfb.h b/blib-1.1.7/gfx/bview-directfb.h new file mode 100644 index 0000000..f3c1f98 --- /dev/null +++ b/blib-1.1.7/gfx/bview-directfb.h @@ -0,0 +1,65 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2001-2004 The Blinkenlights Crew + * Sven Neumann + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __B_VIEW_DIRECTFB_H__ +#define __B_VIEW_DIRECTFB_H__ + +G_BEGIN_DECLS + +#define B_TYPE_VIEW_DIRECTFB (b_view_directfb_get_type ()) +#define B_VIEW_DIRECTFB(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), B_TYPE_VIEW_DIRECTFB, BViewDirectFB)) +#define B_VIEW_DIRECTFB_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), B_TYPE_VIEW_DIRECTFB, BViewDirectFBClass)) +#define B_IS_VIEW_DIRECTFB(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), B_TYPE_VIEW_DIRECTFB)) + + +typedef struct _BViewDirectFBClass BViewDirectFBClass; +typedef struct _BViewDirectFB BViewDirectFB; + +struct _BViewDirectFBClass +{ + GObjectClass parent_class; +}; + +struct _BViewDirectFB +{ + /*< private >*/ + GObject parent_instance; + + BTheme *theme; + + IDirectFBSurface *dest; + IDirectFBSurface *background; + GHashTable *images; +}; + + +GType b_view_directfb_get_type (void) G_GNUC_CONST; +BViewDirectFB * b_view_directfb_new (BTheme *theme, + IDirectFB *dfb, + IDirectFBSurface *dest, + GError **error); + +/* the view expects data with a maxval of 255 */ +void b_view_directfb_update (BViewDirectFB *view, + const guchar *frame_data); + +G_END_DECLS + +#endif /* __B_VIEW_DIRECTFB_H__ */ diff --git a/blib-1.1.7/gfx/bview-gtk.c b/blib-1.1.7/gfx/bview-gtk.c new file mode 100644 index 0000000..1697553 --- /dev/null +++ b/blib-1.1.7/gfx/bview-gtk.c @@ -0,0 +1,389 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2001-2004 The Blinkenlights Crew + * Sven Neumann + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include + +#include + +#include "blib/blib.h" + +#include "bview-pixbuf.h" +#include "bview-gtk.h" + + +static void b_view_gtk_class_init (BViewGtkClass *class); +static void b_view_gtk_init (BViewGtk *view); +static void b_view_gtk_finalize (GObject *object); +static void b_view_gtk_realize (GtkWidget *widget); +static void b_view_gtk_size_request (GtkWidget *widget, + GtkRequisition *requisition); +static gboolean b_view_gtk_expose_event (GtkWidget *widget, + GdkEventExpose *event); +static gboolean b_view_gtk_alloc_color (GdkDrawable *drawable, + BColor *color, + GdkColor *gdk_color); +static GdkDrawable * b_view_gtk_get_drawable (BViewGtk *view, + const gchar *filename, + GdkWindow *window); + + +static GtkDrawingAreaClass *parent_class = NULL; + + +GType +b_view_gtk_get_type (void) +{ + static GType view_type = 0; + + if (!view_type) + { + static const GTypeInfo view_info = + { + sizeof (BViewGtkClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc) b_view_gtk_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (BViewGtk), + 0, /* n_preallocs */ + (GInstanceInitFunc) b_view_gtk_init, + }; + + view_type = g_type_register_static (GTK_TYPE_DRAWING_AREA, + "BViewGtk", &view_info, 0); + } + + return view_type; +} + +static void +b_view_gtk_class_init (BViewGtkClass *class) +{ + GObjectClass *object_class; + GtkWidgetClass *widget_class; + + parent_class = g_type_class_peek_parent (class); + object_class = G_OBJECT_CLASS (class); + widget_class = GTK_WIDGET_CLASS (class); + + object_class->finalize = b_view_gtk_finalize; + + widget_class->realize = b_view_gtk_realize; + widget_class->size_request = b_view_gtk_size_request; + widget_class->expose_event = b_view_gtk_expose_event; +} + +static void +b_view_gtk_init (BViewGtk *view) +{ + view->pixview = NULL; + view->theme = NULL; + view->frame_data = NULL; + view->drawables = g_hash_table_new_full (g_str_hash, g_str_equal, + (GDestroyNotify) NULL, + (GDestroyNotify) g_object_unref); +} + +static void +b_view_gtk_finalize (GObject *object) +{ + BViewGtk *view = B_VIEW_GTK (object); + + g_free (view->frame_data); + + g_hash_table_destroy (view->drawables); + + g_object_unref (view->theme); + g_object_unref (view->pixview); + + G_OBJECT_CLASS (parent_class)->finalize (object); +} + +static void +b_view_gtk_realize (GtkWidget *widget) +{ + BViewGtk *view = B_VIEW_GTK (widget); + GdkColor color; + + GTK_WIDGET_CLASS (parent_class)->realize (widget); + + if (b_view_gtk_alloc_color (GDK_DRAWABLE (widget->window), + &view->theme->bg_color, &color)) + { + gdk_window_set_background (widget->window, &color); + } +} + +static void +b_view_gtk_size_request (GtkWidget *widget, + GtkRequisition *requisition) +{ + BViewGtk *view = B_VIEW_GTK (widget); + + requisition->width = view->theme->width; + requisition->height = view->theme->height; +} + +static gboolean +b_view_gtk_expose_event (GtkWidget *widget, + GdkEventExpose *event) +{ + BViewGtk *view = B_VIEW_GTK (widget); + BTheme *theme = view->theme; + GdkGC *gc; + BRectangle rect; + gint x, y; + + x = (widget->allocation.width - view->theme->width) / 2; + y = (widget->allocation.height - view->theme->height) / 2; + + gc = widget->style->fg_gc[GTK_STATE_NORMAL]; + + gdk_gc_set_clip_rectangle (gc, &event->area); + + if (view->blend) + { + rect.x = x; + rect.y = y; + rect.w = view->theme->width; + rect.h = view->theme->height; + + if (b_rectangle_intersect (&rect, (BRectangle *) &event->area, NULL)) + gdk_pixbuf_render_to_drawable (view->pixview->pixbuf, + widget->window, gc, + 0, 0, + rect.x, rect.y, rect.w, rect.h, + GDK_RGB_DITHER_NORMAL, + - event->area.x, - event->area.y); + } + else + { + GdkDrawable *drawable; + GList *list; + + drawable = b_view_gtk_get_drawable (view, + theme->bg_image, widget->window); + + if (drawable) + { + rect.x = x + view->theme->bg_image_x; + rect.y = y + view->theme->bg_image_y; + + gdk_drawable_get_size (drawable, &rect.w, &rect.h); + + if (b_rectangle_intersect (&rect, (BRectangle *) &event->area, NULL)) + gdk_draw_drawable (GDK_DRAWABLE (widget->window), gc, + drawable, + 0, 0, + rect.x, rect.y, rect.w, rect.h); + } + for (list = theme->overlays; list; list = list->next) + { + BOverlay *overlay = list->data; + GList *windows; + GdkColor color; + + drawable = b_view_gtk_get_drawable (view, + overlay->image, widget->window); + + if (drawable == NULL && + b_view_gtk_alloc_color (widget->window, &overlay->color, &color)) + { + gdk_gc_set_foreground (gc, &color); + } + + for (windows = overlay->windows; windows; windows = windows->next) + { + BWindow *window = windows->data; + guchar value; + + value = view->frame_data[(window->column + + window->row * theme->columns)]; + if (!value) + continue; + + window += (value * theme->maxval) / 256; + + rect.x = window->rect.x + x; + rect.y = window->rect.y + y; + rect.w = window->rect.w; + rect.h = window->rect.h; + + if (b_rectangle_intersect (&rect, + (BRectangle *) &event->area, NULL)) + { + if (drawable) + gdk_draw_drawable (GDK_DRAWABLE (widget->window), gc, + drawable, + window->src_x, window->src_y, + rect.x, rect.y, rect.w, rect.h); + else + gdk_draw_rectangle (GDK_DRAWABLE (widget->window), gc, + TRUE, + rect.x, rect.y, rect.w, rect.h); + } + } + } + } + + gdk_gc_set_clip_rectangle (gc, NULL); + + return TRUE; +} + +/** + * b_view_gtk_new: + * @theme: a #BTheme object + * @error: location to store the error occuring, or %NULL to ignore errors + * + * Creates a new widget suitable to display Blinkenlights movies that + * fit the @theme. + * + * Return value: a new widget or %NULL in case of an error + **/ +GtkWidget * +b_view_gtk_new (BTheme *theme, + GError **error) +{ + BViewGtk *view; + BViewPixbuf *pixview; + + g_return_val_if_fail (B_IS_THEME (theme), NULL); + g_return_val_if_fail (error == NULL || *error == NULL, NULL); + + if (theme->channels != 1) + { + g_set_error (error, 0, 0, "Channels != 1 is not (yet) supported"); + return NULL; + } + + pixview = b_view_pixbuf_new_theme (theme, TRUE, error); + if (! pixview) + return FALSE; + + view = B_VIEW_GTK (g_object_new (B_TYPE_VIEW_GTK, NULL)); + + view->pixview = pixview; + view->theme = g_object_ref (theme); + view->blend = theme->needs_blending; + view->frame_data = g_new0 (guchar, (theme->rows * theme->columns)); + + if (view->blend) + b_view_pixbuf_render (view->pixview, NULL, NULL, NULL); + + return GTK_WIDGET (view); +} + +/** + * b_view_gtk_update: + * @view: a #BViewGtk widget + * @frame_data: the frame data to display + * + * Displays a new frame on the @view. The @view expects @frame_data + * in the range of 0 to 255. + **/ +void +b_view_gtk_update (BViewGtk *view, + const guchar *frame_data) +{ + GtkWidget *widget; + BTheme *theme; + BRectangle rect; + + g_return_if_fail (B_IS_VIEW_GTK (view)); + g_return_if_fail (B_IS_THEME (view->theme)); + + theme = view->theme; + + b_theme_frame_diff_boundary (theme, view->frame_data, frame_data, &rect); + + if (frame_data) + memcpy (view->frame_data, frame_data, (theme->rows * theme->columns)); + else + memset (view->frame_data, 0, (theme->rows * theme->columns)); + + if (view->blend) + b_view_pixbuf_render (view->pixview, view->frame_data, &rect, NULL); + + widget = GTK_WIDGET (view); + + rect.x += (widget->allocation.width - view->theme->width) / 2; + rect.y += (widget->allocation.height - view->theme->height) / 2; + + gtk_widget_queue_draw_area (widget, rect.x, rect.y, rect.w, rect.h); +} + +static gboolean +b_view_gtk_alloc_color (GdkDrawable *drawable, + BColor *color, + GdkColor *gdk_color) +{ + gdk_color->red = (color->r << 8) | color->r; + gdk_color->green = (color->g << 8) | color->g; + gdk_color->blue = (color->b << 8) | color->b; + + return (gdk_colormap_alloc_color (gdk_drawable_get_colormap (drawable), + gdk_color, FALSE, TRUE)); +} + +static GdkDrawable * +b_view_gtk_get_drawable (BViewGtk *view, + const gchar *filename, + GdkWindow *window) +{ + GdkDrawable *drawable; + const GdkPixbuf *pixbuf; + + if (! filename) + return NULL; + + drawable = g_hash_table_lookup (view->drawables, filename); + if (drawable) + return drawable; + + pixbuf = b_view_pixbuf_load_image (view->pixview, filename, NULL); + if (pixbuf) + { + GdkColormap *colormap = gdk_drawable_get_colormap (window); + gint width = gdk_pixbuf_get_width (pixbuf); + gint height = gdk_pixbuf_get_height (pixbuf); + GdkGC *gc; + + drawable = GDK_DRAWABLE (gdk_pixmap_new (window, width, height, + gdk_colormap_get_visual (colormap)->depth)); + + gdk_drawable_set_colormap (drawable, colormap); + + gc = gdk_gc_new (drawable); + + gdk_draw_pixbuf (drawable, gc, + (GdkPixbuf *) pixbuf, 0, 0, 0, 0, width, height, + GDK_RGB_DITHER_NORMAL, 0, 0); + + g_object_unref (gc); + + g_hash_table_insert (view->drawables, (gpointer) filename, drawable); + } + + return drawable; +} diff --git a/blib-1.1.7/gfx/bview-gtk.h b/blib-1.1.7/gfx/bview-gtk.h new file mode 100644 index 0000000..5e01526 --- /dev/null +++ b/blib-1.1.7/gfx/bview-gtk.h @@ -0,0 +1,64 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2001-2004 The Blinkenlights Crew + * Sven Neumann + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __B_VIEW_GTK_H__ +#define __B_VIEW_GTK_H__ + +G_BEGIN_DECLS + +#define B_TYPE_VIEW_GTK (b_view_gtk_get_type ()) +#define B_VIEW_GTK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), B_TYPE_VIEW_GTK, BViewGtk)) +#define B_VIEW_GTK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), B_TYPE_VIEW_GTK, BViewGtkClass)) +#define B_IS_VIEW_GTK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), B_TYPE_VIEW_GTK)) + + +typedef struct _BViewGtkClass BViewGtkClass; +typedef struct _BViewGtk BViewGtk; + +struct _BViewGtkClass +{ + GtkDrawingAreaClass parent_class; +}; + +struct _BViewGtk +{ + /*< private >*/ + GtkDrawingArea parent_instance; + + BViewPixbuf *pixview; + BTheme *theme; + gboolean blend; + guchar *frame_data; + + GHashTable *drawables; +}; + + +GType b_view_gtk_get_type (void) G_GNUC_CONST; +GtkWidget * b_view_gtk_new (BTheme *theme, + GError **error); + +/* the view expects data with a maxval of 255 */ +void b_view_gtk_update (BViewGtk *view, + const guchar *frame_data); + +G_END_DECLS + +#endif /* __B_VIEW_GTK_H__ */ diff --git a/blib-1.1.7/gfx/bview-pixbuf.c b/blib-1.1.7/gfx/bview-pixbuf.c new file mode 100644 index 0000000..127fa37 --- /dev/null +++ b/blib-1.1.7/gfx/bview-pixbuf.c @@ -0,0 +1,677 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2001-2004 The Blinkenlights Crew + * Sven Neumann + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include + +#include + +#include "blib/blib.h" + +#include "bview-pixbuf.h" + + +static void b_view_pixbuf_class_init (BViewPixbufClass *class); +static void b_view_pixbuf_init (BViewPixbuf *view); +static void b_view_pixbuf_finalize (GObject *object); + +static void b_view_pixbuf_fill_rect (GdkPixbuf *pixbuf, + const BRectangle *rect, + const BColor *color); +static void b_view_pixbuf_blend_rect (GdkPixbuf *dest, + const GdkPixbuf *src, + const BRectangle *dest_rect, + gint src_x, + gint src_y, + guchar opacity); + + +static GObjectClass *parent_class = NULL; + + +GType +b_view_pixbuf_get_type (void) +{ + static GType view_type = 0; + + if (!view_type) + { + static const GTypeInfo view_info = + { + sizeof (BViewPixbufClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc) b_view_pixbuf_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (BViewPixbuf), + 0, /* n_preallocs */ + (GInstanceInitFunc) b_view_pixbuf_init, + }; + + view_type = g_type_register_static (G_TYPE_OBJECT, + "BViewPixbuf", &view_info, 0); + } + + return view_type; +} + +static void +b_view_pixbuf_class_init (BViewPixbufClass *class) +{ + GObjectClass *object_class = G_OBJECT_CLASS (class); + + parent_class = g_type_class_peek_parent (class); + + object_class->finalize = b_view_pixbuf_finalize; +} + +static void +b_view_pixbuf_init (BViewPixbuf *view) +{ + view->pixbuf = NULL; + view->theme = NULL; + view->rows = 0; + view->columns = 0; + view->channels = 0; + view->images = g_hash_table_new_full (g_str_hash, g_str_equal, + (GDestroyNotify) NULL, + (GDestroyNotify) g_object_unref); +} + +static void +b_view_pixbuf_finalize (GObject *object) +{ + BViewPixbuf *view = B_VIEW_PIXBUF (object); + + g_hash_table_destroy (view->images); + + if (view->theme) + g_object_unref (view->theme); + + if (view->pixbuf) + g_object_unref (view->pixbuf); + + G_OBJECT_CLASS (parent_class)->finalize (object); +} + +/** + * b_view_pixbuf_new: + * @rows: + * @columns: + * @channels: + * @error: location to store the error occuring, or %NULL to ignore errors + * + * Creates a new #BViewPixbuf for the given parameters. This is a + * simple version that renders a grayscale pixel for every window. + * + * Return value: a new view or %NULL in case of an error + **/ +BViewPixbuf * +b_view_pixbuf_new (gint rows, + gint columns, + gint channels, + GError **error) +{ + BViewPixbuf *view; + + g_return_val_if_fail (rows > 0 && columns > 0, NULL); + g_return_val_if_fail (error == NULL || *error == NULL, NULL); + + if (channels != 1) + { + g_set_error (error, 0, 0, "Channels != 1 is not (yet) supported"); + return NULL; + } + + view = B_VIEW_PIXBUF (g_object_new (B_TYPE_VIEW_PIXBUF, NULL)); + + view->rows = rows; + view->columns = columns; + view->channels = channels; + + return view; +} + +/** + * b_view_pixbuf_new_theme: + * @theme: a #BTheme object + * @image_preload: whether to preload all images + * @error: location to store the error occuring, + * or %NULL to ignore errors + * + * Creates a pixbuf renderer for Blinkenlights frames using the + * @theme. When image_preload is enabled, all images refered to by + * the theme are loaded. If an error occurs loading the images, + * b_view_pixbuf_new() will fail and return %NULL. If a view is + * created with preloaded images, calling b_view_pixbuf_render() on + * it will always succeed so you can skip error checking later. + * + * Return value: a new view or %NULL in case of an error + **/ +BViewPixbuf * +b_view_pixbuf_new_theme (BTheme *theme, + gboolean image_preload, + GError **error) +{ + BViewPixbuf *view; + + g_return_val_if_fail (B_IS_THEME (theme), NULL); + g_return_val_if_fail (error == NULL || *error == NULL, NULL); + + if (theme->channels != 1) + { + g_set_error (error, 0, 0, "Channels != 1 is not (yet) supported"); + return NULL; + } + + view = B_VIEW_PIXBUF (g_object_new (B_TYPE_VIEW_PIXBUF, NULL)); + + view->theme = g_object_ref (theme); + + view->rows = theme->rows; + view->columns = theme->columns; + view->channels = theme->channels; + + if (image_preload) + { + GList *list; + + if (theme->bg_image) + { + if (! b_view_pixbuf_load_image (view, theme->bg_image, error)) + { + g_object_unref (view); + return NULL; + } + } + + for (list = theme->overlays; list; list = list->next) + { + BOverlay *overlay = list->data; + + if (! b_view_pixbuf_load_image (view, overlay->image, error)) + { + g_object_unref (view); + return NULL; + } + } + } + + return view; +} + +static const GdkPixbuf * +b_view_pixbuf_render_theme (BViewPixbuf *view, + const guchar *frame_data, + const BRectangle *clip, + GError **error) +{ + BTheme *theme = view->theme; + const GdkPixbuf *image; + GList *list; + BRectangle rect; + + if (view->pixbuf) + { + b_view_pixbuf_fill_rect (view->pixbuf, clip, &theme->bg_color); + } + else + { + view->pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8, + theme->width, theme->height); + b_view_pixbuf_fill_rect (view->pixbuf, NULL, &theme->bg_color); + } + + if (theme->bg_image) + { + gint x, y; + + image = b_view_pixbuf_load_image (view, theme->bg_image, error); + if (! image) + return NULL; + + rect.x = x = theme->bg_image_x; + rect.y = y = theme->bg_image_y; + rect.w = gdk_pixbuf_get_width (image); + rect.h = gdk_pixbuf_get_height (image); + + if (!clip || b_rectangle_intersect (&rect, clip, &rect)) + gdk_pixbuf_copy_area (image, + rect.x - x, rect.y - x, rect.w, rect.h, + view->pixbuf, + rect.x, rect.y); + } + + for (list = theme->overlays; list && frame_data; list = list->next) + { + BOverlay *overlay = list->data; + GList *windows; + + if (overlay->image) + { + image = b_view_pixbuf_load_image (view, overlay->image, error); + if (! image) + return NULL; + + for (windows = overlay->windows; windows; windows = windows->next) + { + BWindow *window = windows->data; + guchar value = frame_data[(window->column + + window->row * theme->columns)]; + if (value) + { + gint x, y; + + window += (value * theme->maxval) / 256; + + memcpy (&rect, &window->rect, sizeof (BRectangle)); + + x = rect.x; + y = rect.y; + + if (!clip || b_rectangle_intersect (&rect, clip, &rect)) + b_view_pixbuf_blend_rect (view->pixbuf, image, + &rect, + window->src_x + rect.x - x, + window->src_y + rect.y - y, + (window->value + == B_WINDOW_VALUE_ALL) ? + value : 0xFF); + } + } + } + else + { + BColor color = overlay->color; + + for (windows = overlay->windows; windows; windows = windows->next) + { + BWindow *window = windows->data; + guchar value = frame_data[(window->column + + window->row * theme->columns)]; + if (value) + { + window += (value * theme->maxval) / 256; + + color.a = overlay->color.a; + if (window->value == B_WINDOW_VALUE_ALL) + color.a = ((color.a + 1) * value) >> 8; + + memcpy (&rect, &window->rect, sizeof (BRectangle)); + + if (!clip || b_rectangle_intersect (&rect, clip, &rect)) + b_view_pixbuf_fill_rect (view->pixbuf, &rect, &color); + } + } + } + + } + + return (const GdkPixbuf *) view->pixbuf; +} + + +/** + * b_view_pixbuf_render + * @view: a #BViewPixbuf object + * @frame_data: the frame data to display + * @clip: clipping rectangle (or %NULL) + * @error: location to store the error occuring, or %NULL to ignore + * errors + * + * Renders a frame on the @view. The @view expects @frame_data in the + * range of 0 to 255. + * + * Return value: a reference to a #GdkPixbuf with the rendered frame. + **/ +const GdkPixbuf * +b_view_pixbuf_render (BViewPixbuf *view, + const guchar *frame_data, + const BRectangle *clip, + GError **error) +{ + BRectangle rect; + + g_return_val_if_fail (B_IS_VIEW_PIXBUF (view), NULL); + g_return_val_if_fail (error == NULL || *error == NULL, NULL); + + if (view->theme) + return b_view_pixbuf_render_theme (view, frame_data, clip, error); + + if (! view->pixbuf) + view->pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8, + view->columns, view->rows); + + rect.x = 0; + rect.y = 0; + rect.w = view->columns; + rect.h = view->rows; + + if (!clip || b_rectangle_intersect (&rect, clip, &rect)) + { + const guchar *src; + guchar *dest; + guchar *pixels = gdk_pixbuf_get_pixels (view->pixbuf); + gint pitch = gdk_pixbuf_get_rowstride (view->pixbuf); + gint x, y; + + src = frame_data + (rect.y * view->columns) + rect.x; + dest = pixels + (rect.y * pitch) + rect.x; + + for (y = 0; y < rect.h; y++) + { + for (x = 0; x < rect.w; x++) + { + dest[3 * x] = src[x]; + dest[3 * x + 1] = src[x]; + dest[3 * x + 2] = src[x]; + } + + dest += pitch; + src += view->columns; + } + } + + return (const GdkPixbuf *) view->pixbuf; +} + +/** + * b_view_pixbuf_load_image: + * @view: a #BViewPixbuf object + * @filename: the filename of the image to load + * @error: location to store the error occuring, or %NULL to ignore errors + * + * Renders a frame on the @view and returns a pointer to a #GdkPixbuf + * holding the rendered image. The pixbuf is owned by the view, you + * may only read from it. + * + * The @view expects @frame_data in the range of 0 to 255. + * + * Return value: a pointer to a #GdkPixbuf with the rendered frame + **/ +const GdkPixbuf * +b_view_pixbuf_load_image (BViewPixbuf *view, + const gchar *filename, + GError **error) +{ + GdkPixbuf *pixbuf = g_hash_table_lookup (view->images, filename); + + if (pixbuf) + return pixbuf; + + pixbuf = gdk_pixbuf_new_from_file (filename, error); + + if (pixbuf) + { + g_hash_table_insert (view->images, (gpointer) filename, pixbuf); + } + else if (error && *error) + { + gchar *msg = g_strdup_printf ("Error loading image from file '%s': %s\n", + filename, (*error)->message); + g_free ((*error)->message); + (*error)->message = msg; + } + + return (const GdkPixbuf *) pixbuf; +} + + +/* this function assumes that the pixbuf has no alpha channel */ +static void +b_view_pixbuf_fill_rect (GdkPixbuf *pixbuf, + const BRectangle *rect, + const BColor *color) +{ + guchar *data; + gint pitch; + guchar r, g, b; + BRectangle fill = { 0, 0, + gdk_pixbuf_get_width (pixbuf), + gdk_pixbuf_get_height (pixbuf) }; + + if (rect && ! b_rectangle_intersect ((BRectangle *) rect, &fill, &fill)) + return; + + data = gdk_pixbuf_get_pixels (pixbuf); + pitch = gdk_pixbuf_get_rowstride (pixbuf); + + data += fill.y * pitch + fill.x * 3; + + r = color ? color->r : 0x0; + g = color ? color->g : 0x0; + b = color ? color->b : 0x0; + + do + { + guchar *d = data; + guint w = fill.w; + + do + { + data[0] = r; + data[1] = g; + data[2] = g; + + d += 3; + } + while (--w); + + data += pitch; + } + while (--fill.h); +} + +/* this function assumes that the dest pixbuf has no alpha channel */ +static void +b_view_pixbuf_blend_rect (GdkPixbuf *dest, + const GdkPixbuf *src, + const BRectangle *dest_rect, + gint src_x, + gint src_y, + guchar opacity) +{ + guchar *src_data; + guchar *dest_data; + gint src_pitch; + gint dest_pitch; + gint i; + BRectangle rect = { 0, 0, + gdk_pixbuf_get_width (dest), + gdk_pixbuf_get_height (dest) }; + + if (! opacity) + return; + + if (! b_rectangle_intersect (dest_rect, &rect, &rect)) + return; + + src_x += rect.x - dest_rect->x; + src_y += rect.y - dest_rect->y; + + if (src_x < 0) + rect.w += src_x, src_x = 0; + + if (src_y < 0) + rect.h += src_y, src_y = 0; + + i = gdk_pixbuf_get_width (src); + rect.w = MIN (i - src_x, rect.w); + if (rect.w < 1) + return; + + i = gdk_pixbuf_get_height (src); + rect.h = MIN (i - src_y, rect.h); + if (rect.h < 1) + return; + + src_data = gdk_pixbuf_get_pixels (src); + src_pitch = gdk_pixbuf_get_rowstride (src); + + dest_data = gdk_pixbuf_get_pixels (dest); + dest_pitch = gdk_pixbuf_get_rowstride (dest); + + dest_data += rect.y * dest_pitch + rect.x * 3; + + switch (gdk_pixbuf_get_n_channels (src)) + { + case 3: + src_data += src_y * src_pitch + src_x * 3; + + switch (opacity) + { + case 0xff: + do + { + guchar *s = src_data; + guchar *d = dest_data; + gint w = rect.w; + + do + { + d[0] = s[0]; + d[1] = s[1]; + d[2] = s[2]; + + d += 3; + s += 3; + } + while (--w); + + src_data += src_pitch; + dest_data += dest_pitch; + } + while (--rect.h); + break; + + default: + do + { + guchar *s = src_data; + guchar *d = dest_data; + gint w = rect.w; + + do + { + guint a0 = opacity; + guint a1 = 0xff - opacity; + guint a = a0 + a1; + + d[0] = (a0 * s[0] + a1 * d[0]) / a; + d[1] = (a0 * s[1] + a1 * d[1]) / a; + d[2] = (a0 * s[2] + a1 * d[2]) / a; + + d += 3; + s += 3; + } + while (--w); + + src_data += src_pitch; + dest_data += dest_pitch; + } + while (--rect.h); + break; + } + break; + + case 4: + src_data += src_y * src_pitch + src_x * 4; + + switch (opacity) + { + case 0xff: + do + { + guchar *s = src_data; + guchar *d = dest_data; + gint w = rect.w; + + do + { + switch (s[3]) + { + case 0: + break; + + case 0xff: + d[0] = s[0]; + d[1] = s[1]; + d[2] = s[2]; + break; + + default: + { + guint a0 = s[3] * 0xff; + guint a1 = 0xffff - s[3]; + guint a = a0 + a1; + + d[0] = (a0 * s[0] + a1 * d[0]) / a; + d[1] = (a0 * s[1] + a1 * d[1]) / a; + d[2] = (a0 * s[2] + a1 * d[2]) / a; + } + break; + } + + s += 4; + d += 3; + } + while (--w); + + src_data += src_pitch; + dest_data += dest_pitch; + } + while (--rect.h); + break; + + default: + do + { + guchar *s = src_data; + guchar *d = dest_data; + gint w = rect.w; + + do + { + if (s[3]) + { + guint a0 = s[3] * opacity; + guint a1 = 0xffff - opacity; + guint a = a0 + a1; + + d[0] = (a0 * s[0] + a1 * d[0]) / a; + d[1] = (a0 * s[1] + a1 * d[1]) / a; + d[2] = (a0 * s[2] + a1 * d[2]) / a; + } + + s += 4; + d += 3; + } + while (--w); + + src_data += src_pitch; + dest_data += dest_pitch; + } + while (--rect.h); + break; + } + } +} diff --git a/blib-1.1.7/gfx/bview-pixbuf.h b/blib-1.1.7/gfx/bview-pixbuf.h new file mode 100644 index 0000000..3e23990 --- /dev/null +++ b/blib-1.1.7/gfx/bview-pixbuf.h @@ -0,0 +1,76 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2001-2004 The Blinkenlights Crew + * Sven Neumann + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __B_VIEW_PIXBUF_H__ +#define __B_VIEW_PIXBUF_H__ + +G_BEGIN_DECLS + +#define B_TYPE_VIEW_PIXBUF (b_view_pixbuf_get_type ()) +#define B_VIEW_PIXBUF(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), B_TYPE_VIEW_PIXBUF, BViewPixbuf)) +#define B_VIEW_PIXBUF_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), B_TYPE_VIEW_PIXBUF, BViewPixbufClass)) +#define B_IS_VIEW_PIXBUF(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), B_TYPE_VIEW_PIXBUF)) + + +typedef struct _BViewPixbufClass BViewPixbufClass; +typedef struct _BViewPixbuf BViewPixbuf; + +struct _BViewPixbufClass +{ + GObjectClass parent_class; +}; + +struct _BViewPixbuf +{ + /*< private >*/ + GObject parent_instance; + + BTheme *theme; + gint rows; + gint columns; + gint channels; + + GdkPixbuf *pixbuf; + GHashTable *images; +}; + + +GType b_view_pixbuf_get_type (void) G_GNUC_CONST; +BViewPixbuf * b_view_pixbuf_new (gint rows, + gint columns, + gint channels, + GError **error); +BViewPixbuf * b_view_pixbuf_new_theme (BTheme *theme, + gboolean image_preload, + GError **error); + +/* the view expects data with a maxval of 255 */ +const GdkPixbuf * b_view_pixbuf_render (BViewPixbuf *view, + const guchar *frame_data, + const BRectangle *clip, + GError **error); + +const GdkPixbuf * b_view_pixbuf_load_image (BViewPixbuf *view, + const gchar *filename, + GError **error); + +G_END_DECLS + +#endif /* __B_VIEW_PIXBUF_H__ */ diff --git a/blib-1.1.7/install-sh b/blib-1.1.7/install-sh new file mode 100755 index 0000000..6ce63b9 --- /dev/null +++ b/blib-1.1.7/install-sh @@ -0,0 +1,294 @@ +#!/bin/sh +# +# install - install a program, script, or datafile +# +# This originates from X11R5 (mit/util/scripts/install.sh), which was +# later released in X11R6 (xc/config/util/install.sh) with the +# following copyright and license. +# +# Copyright (C) 1994 X Consortium +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name of the X Consortium shall not +# be used in advertising or otherwise to promote the sale, use or other deal- +# ings in this Software without prior written authorization from the X Consor- +# tium. +# +# +# FSF changes to this file are in the public domain. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# `make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. It can only install one file at a time, a restriction +# shared with many OS's install programs. + + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit="${DOITPROG-}" + + +# put in absolute paths if you don't have them in your path; or use env. vars. + +mvprog="${MVPROG-mv}" +cpprog="${CPPROG-cp}" +chmodprog="${CHMODPROG-chmod}" +chownprog="${CHOWNPROG-chown}" +chgrpprog="${CHGRPPROG-chgrp}" +stripprog="${STRIPPROG-strip}" +rmprog="${RMPROG-rm}" +mkdirprog="${MKDIRPROG-mkdir}" + +transformbasename="" +transform_arg="" +instcmd="$mvprog" +chmodcmd="$chmodprog 0755" +chowncmd="" +chgrpcmd="" +stripcmd="" +rmcmd="$rmprog -f" +mvcmd="$mvprog" +src="" +dst="" +dir_arg="" + +while [ x"$1" != x ]; do + case $1 in + -c) instcmd=$cpprog + shift + continue;; + + -d) dir_arg=true + shift + continue;; + + -m) chmodcmd="$chmodprog $2" + shift + shift + continue;; + + -o) chowncmd="$chownprog $2" + shift + shift + continue;; + + -g) chgrpcmd="$chgrpprog $2" + shift + shift + continue;; + + -s) stripcmd=$stripprog + shift + continue;; + + -t=*) transformarg=`echo $1 | sed 's/-t=//'` + shift + continue;; + + -b=*) transformbasename=`echo $1 | sed 's/-b=//'` + shift + continue;; + + *) if [ x"$src" = x ] + then + src=$1 + else + # this colon is to work around a 386BSD /bin/sh bug + : + dst=$1 + fi + shift + continue;; + esac +done + +if [ x"$src" = x ] +then + echo "$0: no input file specified" >&2 + exit 1 +else + : +fi + +if [ x"$dir_arg" != x ]; then + dst=$src + src="" + + if [ -d "$dst" ]; then + instcmd=: + chmodcmd="" + else + instcmd=$mkdirprog + fi +else + +# Waiting for this to be detected by the "$instcmd $src $dsttmp" command +# might cause directories to be created, which would be especially bad +# if $src (and thus $dsttmp) contains '*'. + + if [ -f "$src" ] || [ -d "$src" ] + then + : + else + echo "$0: $src does not exist" >&2 + exit 1 + fi + + if [ x"$dst" = x ] + then + echo "$0: no destination specified" >&2 + exit 1 + else + : + fi + +# If destination is a directory, append the input filename; if your system +# does not like double slashes in filenames, you may need to add some logic + + if [ -d "$dst" ] + then + dst=$dst/`basename "$src"` + else + : + fi +fi + +## this sed command emulates the dirname command +dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` + +# Make sure that the destination directory exists. +# this part is taken from Noah Friedman's mkinstalldirs script + +# Skip lots of stat calls in the usual case. +if [ ! -d "$dstdir" ]; then +defaultIFS=' + ' +IFS="${IFS-$defaultIFS}" + +oIFS=$IFS +# Some sh's can't handle IFS=/ for some reason. +IFS='%' +set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` +IFS=$oIFS + +pathcomp='' + +while [ $# -ne 0 ] ; do + pathcomp=$pathcomp$1 + shift + + if [ ! -d "$pathcomp" ] ; + then + $mkdirprog "$pathcomp" + else + : + fi + + pathcomp=$pathcomp/ +done +fi + +if [ x"$dir_arg" != x ] +then + $doit $instcmd "$dst" && + + if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dst"; else : ; fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dst"; else : ; fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dst"; else : ; fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dst"; else : ; fi +else + +# If we're going to rename the final executable, determine the name now. + + if [ x"$transformarg" = x ] + then + dstfile=`basename "$dst"` + else + dstfile=`basename "$dst" $transformbasename | + sed $transformarg`$transformbasename + fi + +# don't allow the sed command to completely eliminate the filename + + if [ x"$dstfile" = x ] + then + dstfile=`basename "$dst"` + else + : + fi + +# Make a couple of temp file names in the proper directory. + + dsttmp=$dstdir/_inst.$$_ + rmtmp=$dstdir/_rm.$$_ + +# Trap to clean up temp files at exit. + + trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0 + trap '(exit $?); exit' 1 2 13 15 + +# Move or copy the file name to the temp name + + $doit $instcmd "$src" "$dsttmp" && + +# and set any options; do chmod last to preserve setuid bits + +# If any of these fail, we abort the whole thing. If we want to +# ignore errors from any of these, just make sure not to ignore +# errors from the above "$doit $instcmd $src $dsttmp" command. + + if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dsttmp"; else :;fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dsttmp"; else :;fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dsttmp"; else :;fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dsttmp"; else :;fi && + +# Now remove or move aside any old file at destination location. We try this +# two ways since rm can't unlink itself on some systems and the destination +# file might be busy for other reasons. In this case, the final cleanup +# might fail but the new file should still install successfully. + +{ + if [ -f "$dstdir/$dstfile" ] + then + $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null || + $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null || + { + echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 + (exit 1); exit + } + else + : + fi +} && + +# Now rename the file to the real destination. + + $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" + +fi && + +# The final little trick to "correctly" pass the exit status to the exit trap. + +{ + (exit 0); exit +} diff --git a/blib-1.1.7/ltmain.sh b/blib-1.1.7/ltmain.sh new file mode 100644 index 0000000..18281bb --- /dev/null +++ b/blib-1.1.7/ltmain.sh @@ -0,0 +1,6425 @@ +# ltmain.sh - Provide generalized library-building support services. +# NOTE: Changing this file will not affect anything until you rerun configure. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004 +# Free Software Foundation, Inc. +# Originally by Gordon Matzigkeit , 1996 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +basename="s,^.*/,,g" + +# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh +# is ksh but when the shell is invoked as "sh" and the current value of +# the _XPG environment variable is not equal to 1 (one), the special +# positional parameter $0, within a function call, is the name of the +# function. +progpath="$0" + +# The name of this program: +progname=`echo "$progpath" | $SED $basename` +modename="$progname" + +# Global variables: +EXIT_SUCCESS=0 +EXIT_FAILURE=1 + +PROGRAM=ltmain.sh +PACKAGE=libtool +VERSION=1.5.4 +TIMESTAMP=" (1.1220.2.90 2004/04/03 14:10:19) Debian$Rev: 203 $" + + +# Check that we have a working $echo. +if test "X$1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X$1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then + # Yippee, $echo works! + : +else + # Restart under the correct shell, and then maybe $echo will work. + exec $SHELL "$progpath" --no-reexec ${1+"$@"} +fi + +if test "X$1" = X--fallback-echo; then + # used as fallback echo + shift + cat <&2 + $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit $EXIT_FAILURE +fi + +# Global variables. +mode=$default_mode +nonopt= +prev= +prevopt= +run= +show="$echo" +show_help= +execute_dlfiles= +lo2o="s/\\.lo\$/.${objext}/" +o2lo="s/\\.${objext}\$/.lo/" + +##################################### +# Shell function definitions: +# This seems to be the best place for them + +# func_win32_libid arg +# return the library type of file 'arg' +# +# Need a lot of goo to handle *both* DLLs and import libs +# Has to be a shell function in order to 'eat' the argument +# that is supplied when $file_magic_command is called. +func_win32_libid () { + win32_libid_type="unknown" + win32_fileres=`file -L $1 2>/dev/null` + case $win32_fileres in + *ar\ archive\ import\ library*) # definitely import + win32_libid_type="x86 archive import" + ;; + *ar\ archive*) # could be an import, or static + if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \ + $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then + win32_nmres=`eval $NM -f posix -A $1 | \ + sed -n -e '1,100{/ I /{x;/import/!{s/^/import/;h;p;};x;};}'` + if test "X$win32_nmres" = "Ximport" ; then + win32_libid_type="x86 archive import" + else + win32_libid_type="x86 archive static" + fi + fi + ;; + *DLL*) + win32_libid_type="x86 DLL" + ;; + *executable*) # but shell scripts are "executable" too... + case $win32_fileres in + *MS\ Windows\ PE\ Intel*) + win32_libid_type="x86 DLL" + ;; + esac + ;; + esac + $echo $win32_libid_type +} + + +# func_infer_tag arg +# Infer tagged configuration to use if any are available and +# if one wasn't chosen via the "--tag" command line option. +# Only attempt this if the compiler in the base compile +# command doesn't match the default compiler. +# arg is usually of the form 'gcc ...' +func_infer_tag () { + if test -n "$available_tags" && test -z "$tagname"; then + CC_quoted= + for arg in $CC; do + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + CC_quoted="$CC_quoted $arg" + done + case $@ in + # Blanks in the command may have been stripped by the calling shell, + # but not from the CC environment variable when configure was run. + " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) ;; + # Blanks at the start of $base_compile will cause this to fail + # if we don't check for them as well. + *) + for z in $available_tags; do + if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then + # Evaluate the configuration. + eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" + CC_quoted= + for arg in $CC; do + # Double-quote args containing other shell metacharacters. + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + CC_quoted="$CC_quoted $arg" + done + case "$@ " in + " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) + # The compiler in the base compile command matches + # the one in the tagged configuration. + # Assume this is the tagged configuration we want. + tagname=$z + break + ;; + esac + fi + done + # If $tagname still isn't set, then no tagged configuration + # was found and let the user know that the "--tag" command + # line option must be used. + if test -z "$tagname"; then + $echo "$modename: unable to infer tagged configuration" + $echo "$modename: specify a tag with \`--tag'" 1>&2 + exit $EXIT_FAILURE +# else +# $echo "$modename: using $tagname tagged configuration" + fi + ;; + esac + fi +} +# End of Shell function definitions +##################################### + +# Darwin sucks +eval std_shrext=\"$shrext_cmds\" + +# Parse our command line options once, thoroughly. +while test "$#" -gt 0 +do + arg="$1" + shift + + case $arg in + -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; + *) optarg= ;; + esac + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + execute_dlfiles) + execute_dlfiles="$execute_dlfiles $arg" + ;; + tag) + tagname="$arg" + preserve_args="${preserve_args}=$arg" + + # Check whether tagname contains only valid characters + case $tagname in + *[!-_A-Za-z0-9,/]*) + $echo "$progname: invalid tag name: $tagname" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + case $tagname in + CC) + # Don't test for the "default" C tag, as we know, it's there, but + # not specially marked. + ;; + *) + if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$progpath" > /dev/null; then + taglist="$taglist $tagname" + # Evaluate the configuration. + eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $progpath`" + else + $echo "$progname: ignoring unknown tag $tagname" 1>&2 + fi + ;; + esac + ;; + *) + eval "$prev=\$arg" + ;; + esac + + prev= + prevopt= + continue + fi + + # Have we seen a non-optional argument yet? + case $arg in + --help) + show_help=yes + ;; + + --version) + $echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP" + $echo + $echo "Copyright (C) 2003 Free Software Foundation, Inc." + $echo "This is free software; see the source for copying conditions. There is NO" + $echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + exit $EXIT_SUCCESS + ;; + + --config) + ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $progpath + # Now print the configurations for the tags. + for tagname in $taglist; do + ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$progpath" + done + exit $EXIT_SUCCESS + ;; + + --debug) + $echo "$progname: enabling shell trace mode" + set -x + preserve_args="$preserve_args $arg" + ;; + + --dry-run | -n) + run=: + ;; + + --features) + $echo "host: $host" + if test "$build_libtool_libs" = yes; then + $echo "enable shared libraries" + else + $echo "disable shared libraries" + fi + if test "$build_old_libs" = yes; then + $echo "enable static libraries" + else + $echo "disable static libraries" + fi + exit $EXIT_SUCCESS + ;; + + --finish) mode="finish" ;; + + --mode) prevopt="--mode" prev=mode ;; + --mode=*) mode="$optarg" ;; + + --preserve-dup-deps) duplicate_deps="yes" ;; + + --quiet | --silent) + show=: + preserve_args="$preserve_args $arg" + ;; + + --tag) prevopt="--tag" prev=tag ;; + --tag=*) + set tag "$optarg" ${1+"$@"} + shift + prev=tag + preserve_args="$preserve_args --tag" + ;; + + -dlopen) + prevopt="-dlopen" + prev=execute_dlfiles + ;; + + -*) + $echo "$modename: unrecognized option \`$arg'" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + ;; + + *) + nonopt="$arg" + break + ;; + esac +done + +if test -n "$prevopt"; then + $echo "$modename: option \`$prevopt' requires an argument" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE +fi + +# If this variable is set in any of the actions, the command in it +# will be execed at the end. This prevents here-documents from being +# left over by shells. +exec_cmd= + +if test -z "$show_help"; then + + # Infer the operation mode. + if test -z "$mode"; then + $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2 + $echo "*** Future versions of Libtool will require -mode=MODE be specified." 1>&2 + case $nonopt in + *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*) + mode=link + for arg + do + case $arg in + -c) + mode=compile + break + ;; + esac + done + ;; + *db | *dbx | *strace | *truss) + mode=execute + ;; + *install*|cp|mv) + mode=install + ;; + *rm) + mode=uninstall + ;; + *) + # If we have no mode, but dlfiles were specified, then do execute mode. + test -n "$execute_dlfiles" && mode=execute + + # Just use the default operation mode. + if test -z "$mode"; then + if test -n "$nonopt"; then + $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 + else + $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 + fi + fi + ;; + esac + fi + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$execute_dlfiles" && test "$mode" != execute; then + $echo "$modename: unrecognized option \`-dlopen'" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Change the help message to a mode-specific one. + generic_help="$help" + help="Try \`$modename --help --mode=$mode' for more information." + + # These modes are in order of execution frequency so that they run quickly. + case $mode in + # libtool compile mode + compile) + modename="$modename: compile" + # Get the compilation command and the source file. + base_compile= + srcfile="$nonopt" # always keep a non-empty value in "srcfile" + suppress_opt=yes + suppress_output= + arg_mode=normal + libobj= + later= + + for arg + do + case "$arg_mode" in + arg ) + # do not "continue". Instead, add this to base_compile + lastarg="$arg" + arg_mode=normal + ;; + + target ) + libobj="$arg" + arg_mode=normal + continue + ;; + + normal ) + # Accept any command-line options. + case $arg in + -o) + if test -n "$libobj" ; then + $echo "$modename: you cannot specify \`-o' more than once" 1>&2 + exit $EXIT_FAILURE + fi + arg_mode=target + continue + ;; + + -static | -prefer-pic | -prefer-non-pic) + later="$later $arg" + continue + ;; + + -no-suppress) + suppress_opt=no + continue + ;; + + -Xcompiler) + arg_mode=arg # the next one goes into the "base_compile" arg list + continue # The current "srcfile" will either be retained or + ;; # replaced later. I would guess that would be a bug. + + -Wc,*) + args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` + lastarg= + save_ifs="$IFS"; IFS=',' + for arg in $args; do + IFS="$save_ifs" + + # Double-quote args containing other shell metacharacters. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + lastarg="$lastarg $arg" + done + IFS="$save_ifs" + lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"` + + # Add the arguments to base_compile. + base_compile="$base_compile $lastarg" + continue + ;; + + * ) + # Accept the current argument as the source file. + # The previous "srcfile" becomes the current argument. + # + lastarg="$srcfile" + srcfile="$arg" + ;; + esac # case $arg + ;; + esac # case $arg_mode + + # Aesthetically quote the previous argument. + lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` + + case $lastarg in + # Double-quote args containing other shell metacharacters. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + lastarg="\"$lastarg\"" + ;; + esac + + base_compile="$base_compile $lastarg" + done # for arg + + case $arg_mode in + arg) + $echo "$modename: you must specify an argument for -Xcompile" + exit $EXIT_FAILURE + ;; + target) + $echo "$modename: you must specify a target with \`-o'" 1>&2 + exit $EXIT_FAILURE + ;; + *) + # Get the name of the library object. + [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` + ;; + esac + + # Recognize several different file suffixes. + # If the user specifies -o file.o, it is replaced with file.lo + xform='[cCFSifmso]' + case $libobj in + *.ada) xform=ada ;; + *.adb) xform=adb ;; + *.ads) xform=ads ;; + *.asm) xform=asm ;; + *.c++) xform=c++ ;; + *.cc) xform=cc ;; + *.ii) xform=ii ;; + *.class) xform=class ;; + *.cpp) xform=cpp ;; + *.cxx) xform=cxx ;; + *.f90) xform=f90 ;; + *.for) xform=for ;; + *.java) xform=java ;; + esac + + libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` + + case $libobj in + *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; + *) + $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + func_infer_tag $base_compile + + for arg in $later; do + case $arg in + -static) + build_old_libs=yes + continue + ;; + + -prefer-pic) + pic_mode=yes + continue + ;; + + -prefer-non-pic) + pic_mode=no + continue + ;; + esac + done + + objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` + xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$obj"; then + xdir= + else + xdir=$xdir/ + fi + lobj=${xdir}$objdir/$objname + + if test -z "$base_compile"; then + $echo "$modename: you must specify a compilation command" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Delete any leftover library objects. + if test "$build_old_libs" = yes; then + removelist="$obj $lobj $libobj ${libobj}T" + else + removelist="$lobj $libobj ${libobj}T" + fi + + $run $rm $removelist + trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 + + # On Cygwin there's no "real" PIC flag so we must build both object types + case $host_os in + cygwin* | mingw* | pw32* | os2*) + pic_mode=default + ;; + esac + if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then + # non-PIC code in shared libraries is not supported + pic_mode=default + fi + + # Calculate the filename of the output object if compiler does + # not support -o with -c + if test "$compiler_c_o" = no; then + output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} + lockfile="$output_obj.lock" + removelist="$removelist $output_obj $lockfile" + trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 + else + output_obj= + need_locks=no + lockfile= + fi + + # Lock this critical section if it is needed + # We use this script file to make the link, it avoids creating a new file + if test "$need_locks" = yes; then + until $run ln "$progpath" "$lockfile" 2>/dev/null; do + $show "Waiting for $lockfile to be removed" + sleep 2 + done + elif test "$need_locks" = warn; then + if test -f "$lockfile"; then + $echo "\ +*** ERROR, $lockfile exists and contains: +`cat $lockfile 2>/dev/null` + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $run $rm $removelist + exit $EXIT_FAILURE + fi + $echo $srcfile > "$lockfile" + fi + + if test -n "$fix_srcfile_path"; then + eval srcfile=\"$fix_srcfile_path\" + fi + + $run $rm "$libobj" "${libobj}T" + + # Create a libtool object file (analogous to a ".la" file), + # but don't create it if we're doing a dry run. + test -z "$run" && cat > ${libobj}T </dev/null`" != "X$srcfile"; then + $echo "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $run $rm $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed, then go on to compile the next one + if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then + $show "$mv $output_obj $lobj" + if $run $mv $output_obj $lobj; then : + else + error=$? + $run $rm $removelist + exit $error + fi + fi + + # Append the name of the PIC object to the libtool object file. + test -z "$run" && cat >> ${libobj}T <> ${libobj}T </dev/null`" != "X$srcfile"; then + $echo "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $run $rm $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed + if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then + $show "$mv $output_obj $obj" + if $run $mv $output_obj $obj; then : + else + error=$? + $run $rm $removelist + exit $error + fi + fi + + # Append the name of the non-PIC object the libtool object file. + # Only append if the libtool object file exists. + test -z "$run" && cat >> ${libobj}T <> ${libobj}T <&2 + fi + if test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + else + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + fi + build_libtool_libs=no + build_old_libs=yes + prefer_static_libs=yes + break + ;; + esac + done + + # See if our shared archives depend on static archives. + test -n "$old_archive_from_new_cmds" && build_old_libs=yes + + # Go through the arguments, transforming them on the way. + while test "$#" -gt 0; do + arg="$1" + shift + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test + ;; + *) qarg=$arg ;; + esac + libtool_args="$libtool_args $qarg" + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + output) + compile_command="$compile_command @OUTPUT@" + finalize_command="$finalize_command @OUTPUT@" + ;; + esac + + case $prev in + dlfiles|dlprefiles) + if test "$preload" = no; then + # Add the symbol object into the linking commands. + compile_command="$compile_command @SYMFILE@" + finalize_command="$finalize_command @SYMFILE@" + preload=yes + fi + case $arg in + *.la | *.lo) ;; # We handle these cases below. + force) + if test "$dlself" = no; then + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + self) + if test "$prev" = dlprefiles; then + dlself=yes + elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then + dlself=yes + else + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + *) + if test "$prev" = dlfiles; then + dlfiles="$dlfiles $arg" + else + dlprefiles="$dlprefiles $arg" + fi + prev= + continue + ;; + esac + ;; + expsyms) + export_symbols="$arg" + if test ! -f "$arg"; then + $echo "$modename: symbol file \`$arg' does not exist" + exit $EXIT_FAILURE + fi + prev= + continue + ;; + expsyms_regex) + export_symbols_regex="$arg" + prev= + continue + ;; + inst_prefix) + inst_prefix_dir="$arg" + prev= + continue + ;; + precious_regex) + precious_files_regex="$arg" + prev= + continue + ;; + release) + release="-$arg" + prev= + continue + ;; + objectlist) + if test -f "$arg"; then + save_arg=$arg + moreargs= + for fil in `cat $save_arg` + do +# moreargs="$moreargs $fil" + arg=$fil + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + pic_object= + non_pic_object= + + # Read the .lo file + # If there is no directory component, then add one. + case $arg in + */* | *\\*) . $arg ;; + *) . ./$arg ;; + esac + + if test -z "$pic_object" || \ + test -z "$non_pic_object" || + test "$pic_object" = none && \ + test "$non_pic_object" = none; then + $echo "$modename: cannot find name of object for \`$arg'" 1>&2 + exit $EXIT_FAILURE + fi + + # Extract subdirectory from the argument. + xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$arg"; then + xdir= + else + xdir="$xdir/" + fi + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + dlfiles="$dlfiles $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles $pic_object" + prev= + fi + + # A PIC object. + libobjs="$libobjs $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + non_pic_objects="$non_pic_objects $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + fi + else + # Only an error if not doing a dry-run. + if test -z "$run"; then + $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 + exit $EXIT_FAILURE + else + # Dry-run case. + + # Extract subdirectory from the argument. + xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$arg"; then + xdir= + else + xdir="$xdir/" + fi + + pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` + non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` + libobjs="$libobjs $pic_object" + non_pic_objects="$non_pic_objects $non_pic_object" + fi + fi + done + else + $echo "$modename: link input file \`$save_arg' does not exist" + exit $EXIT_FAILURE + fi + arg=$save_arg + prev= + continue + ;; + rpath | xrpath) + # We need an absolute path. + case $arg in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + $echo "$modename: only absolute run-paths are allowed" 1>&2 + exit $EXIT_FAILURE + ;; + esac + if test "$prev" = rpath; then + case "$rpath " in + *" $arg "*) ;; + *) rpath="$rpath $arg" ;; + esac + else + case "$xrpath " in + *" $arg "*) ;; + *) xrpath="$xrpath $arg" ;; + esac + fi + prev= + continue + ;; + xcompiler) + compiler_flags="$compiler_flags $qarg" + prev= + compile_command="$compile_command $qarg" + finalize_command="$finalize_command $qarg" + continue + ;; + xlinker) + linker_flags="$linker_flags $qarg" + compiler_flags="$compiler_flags $wl$qarg" + prev= + compile_command="$compile_command $wl$qarg" + finalize_command="$finalize_command $wl$qarg" + continue + ;; + xcclinker) + linker_flags="$linker_flags $qarg" + compiler_flags="$compiler_flags $qarg" + prev= + compile_command="$compile_command $qarg" + finalize_command="$finalize_command $qarg" + continue + ;; + shrext) + shrext_cmds="$arg" + prev= + continue + ;; + *) + eval "$prev=\"\$arg\"" + prev= + continue + ;; + esac + fi # test -n "$prev" + + prevarg="$arg" + + case $arg in + -all-static) + if test -n "$link_static_flag"; then + compile_command="$compile_command $link_static_flag" + finalize_command="$finalize_command $link_static_flag" + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 + continue + ;; + + -avoid-version) + avoid_version=yes + continue + ;; + + -dlopen) + prev=dlfiles + continue + ;; + + -dlpreopen) + prev=dlprefiles + continue + ;; + + -export-dynamic) + export_dynamic=yes + continue + ;; + + -export-symbols | -export-symbols-regex) + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + $echo "$modename: more than one -exported-symbols argument is not allowed" + exit $EXIT_FAILURE + fi + if test "X$arg" = "X-export-symbols"; then + prev=expsyms + else + prev=expsyms_regex + fi + continue + ;; + + -inst-prefix-dir) + prev=inst_prefix + continue + ;; + + # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* + # so, if we see these flags be careful not to treat them like -L + -L[A-Z][A-Z]*:*) + case $with_gcc/$host in + no/*-*-irix* | /*-*-irix*) + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + ;; + esac + continue + ;; + + -L*) + dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 + exit $EXIT_FAILURE + fi + dir="$absdir" + ;; + esac + case "$deplibs " in + *" -L$dir "*) ;; + *) + deplibs="$deplibs -L$dir" + lib_search_path="$lib_search_path $dir" + ;; + esac + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) + case :$dllsearchpath: in + *":$dir:"*) ;; + *) dllsearchpath="$dllsearchpath:$dir";; + esac + ;; + esac + continue + ;; + + -l*) + if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then + case $host in + *-*-cygwin* | *-*-pw32* | *-*-beos*) + # These systems don't actually have a C or math library (as such) + continue + ;; + *-*-mingw* | *-*-os2*) + # These systems don't actually have a C library (as such) + test "X$arg" = "X-lc" && continue + ;; + *-*-openbsd* | *-*-freebsd*) + # Do not include libc due to us having libc/libc_r. + test "X$arg" = "X-lc" && continue + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C and math libraries are in the System framework + deplibs="$deplibs -framework System" + continue + esac + elif test "X$arg" = "X-lc_r"; then + case $host in + *-*-openbsd* | *-*-freebsd*) + # Do not include libc_r directly, use -pthread flag. + continue + ;; + esac + fi + deplibs="$deplibs $arg" + continue + ;; + + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe) + deplibs="$deplibs $arg" + continue + ;; + + -module) + module=yes + continue + ;; + + # gcc -m* arguments should be passed to the linker via $compiler_flags + # in order to pass architecture information to the linker + # (e.g. 32 vs 64-bit). This may also be accomplished via -Wl,-mfoo + # but this is not reliable with gcc because gcc may use -mfoo to + # select a different linker, different libraries, etc, while + # -Wl,-mfoo simply passes -mfoo to the linker. + -m*) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + if test "$with_gcc" = "yes" ; then + compiler_flags="$compiler_flags $arg" + fi + continue + ;; + + -shrext) + prev=shrext + continue + ;; + + -no-fast-install) + fast_install=no + continue + ;; + + -no-install) + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) + # The PATH hackery in wrapper scripts is required on Windows + # in order for the loader to find any dlls it needs. + $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2 + $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2 + fast_install=no + ;; + *) no_install=yes ;; + esac + continue + ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -objectlist) + prev=objectlist + continue + ;; + + -o) prev=output ;; + + -precious-files-regex) + prev=precious_regex + continue + ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -R) + prev=xrpath + continue + ;; + + -R*) + dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + $echo "$modename: only absolute run-paths are allowed" 1>&2 + exit $EXIT_FAILURE + ;; + esac + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + continue + ;; + + -static) + # The effects of -static are defined in a previous loop. + # We used to do the same as -all-static on platforms that + # didn't have a PIC flag, but the assumption that the effects + # would be equivalent was wrong. It would break on at least + # Digital Unix and AIX. + continue + ;; + + -thread-safe) + thread_safe=yes + continue + ;; + + -version-info) + prev=vinfo + continue + ;; + -version-number) + prev=vinfo + vinfo_number=yes + continue + ;; + + -Wc,*) + args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'` + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + case $flag in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + flag="\"$flag\"" + ;; + esac + arg="$arg $wl$flag" + compiler_flags="$compiler_flags $flag" + done + IFS="$save_ifs" + arg=`$echo "X$arg" | $Xsed -e "s/^ //"` + ;; + + -Wl,*) + args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'` + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + case $flag in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + flag="\"$flag\"" + ;; + esac + arg="$arg $wl$flag" + compiler_flags="$compiler_flags $wl$flag" + linker_flags="$linker_flags $flag" + done + IFS="$save_ifs" + arg=`$echo "X$arg" | $Xsed -e "s/^ //"` + ;; + + -Xcompiler) + prev=xcompiler + continue + ;; + + -Xlinker) + prev=xlinker + continue + ;; + + -XCClinker) + prev=xcclinker + continue + ;; + + # Some other compiler flag. + -* | +*) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + ;; + + *.$objext) + # A standard object. + objs="$objs $arg" + ;; + + *.lo) + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + pic_object= + non_pic_object= + + # Read the .lo file + # If there is no directory component, then add one. + case $arg in + */* | *\\*) . $arg ;; + *) . ./$arg ;; + esac + + if test -z "$pic_object" || \ + test -z "$non_pic_object" || + test "$pic_object" = none && \ + test "$non_pic_object" = none; then + $echo "$modename: cannot find name of object for \`$arg'" 1>&2 + exit $EXIT_FAILURE + fi + + # Extract subdirectory from the argument. + xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$arg"; then + xdir= + else + xdir="$xdir/" + fi + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + dlfiles="$dlfiles $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles $pic_object" + prev= + fi + + # A PIC object. + libobjs="$libobjs $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + non_pic_objects="$non_pic_objects $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + fi + else + # Only an error if not doing a dry-run. + if test -z "$run"; then + $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 + exit $EXIT_FAILURE + else + # Dry-run case. + + # Extract subdirectory from the argument. + xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$arg"; then + xdir= + else + xdir="$xdir/" + fi + + pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` + non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` + libobjs="$libobjs $pic_object" + non_pic_objects="$non_pic_objects $non_pic_object" + fi + fi + ;; + + *.$libext) + # An archive. + deplibs="$deplibs $arg" + old_deplibs="$old_deplibs $arg" + continue + ;; + + *.la) + # A libtool-controlled library. + + if test "$prev" = dlfiles; then + # This library was specified with -dlopen. + dlfiles="$dlfiles $arg" + prev= + elif test "$prev" = dlprefiles; then + # The library was specified with -dlpreopen. + dlprefiles="$dlprefiles $arg" + prev= + else + deplibs="$deplibs $arg" + fi + continue + ;; + + # Some other compiler argument. + *) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + ;; + esac # arg + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + fi + done # argument parsing loop + + if test -n "$prev"; then + $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + fi + + oldlibs= + # calculate the name of the file, without its directory + outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` + libobjs_save="$libobjs" + + if test -n "$shlibpath_var"; then + # get the directories listed in $shlibpath_var + eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` + else + shlib_search_path= + fi + eval sys_lib_search_path=\"$sys_lib_search_path_spec\" + eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" + + output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` + if test "X$output_objdir" = "X$output"; then + output_objdir="$objdir" + else + output_objdir="$output_objdir/$objdir" + fi + # Create the object directory. + if test ! -d "$output_objdir"; then + $show "$mkdir $output_objdir" + $run $mkdir $output_objdir + status=$? + if test "$status" -ne 0 && test ! -d "$output_objdir"; then + exit $status + fi + fi + + # Determine the type of output + case $output in + "") + $echo "$modename: you must specify an output file" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + ;; + *.$libext) linkmode=oldlib ;; + *.lo | *.$objext) linkmode=obj ;; + *.la) linkmode=lib ;; + *) linkmode=prog ;; # Anything else should be a program. + esac + + case $host in + *cygwin* | *mingw* | *pw32*) + # don't eliminate duplications in $postdeps and $predeps + duplicate_compiler_generated_deps=yes + ;; + *) + duplicate_compiler_generated_deps=$duplicate_deps + ;; + esac + specialdeplibs= + + libs= + # Find all interdependent deplibs by searching for libraries + # that are linked more than once (e.g. -la -lb -la) + for deplib in $deplibs; do + if test "X$duplicate_deps" = "Xyes" ; then + case "$libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + libs="$libs $deplib" + done + + if test "$linkmode" = lib; then + libs="$predeps $libs $compiler_lib_search_path $postdeps" + + # Compute libraries that are listed more than once in $predeps + # $postdeps and mark them as special (i.e., whose duplicates are + # not to be eliminated). + pre_post_deps= + if test "X$duplicate_compiler_generated_deps" = "Xyes" ; then + for pre_post_dep in $predeps $postdeps; do + case "$pre_post_deps " in + *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; + esac + pre_post_deps="$pre_post_deps $pre_post_dep" + done + fi + pre_post_deps= + fi + + deplibs= + newdependency_libs= + newlib_search_path= + need_relink=no # whether we're linking any uninstalled libtool libraries + notinst_deplibs= # not-installed libtool libraries + notinst_path= # paths that contain not-installed libtool libraries + case $linkmode in + lib) + passes="conv link" + for file in $dlfiles $dlprefiles; do + case $file in + *.la) ;; + *) + $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2 + exit $EXIT_FAILURE + ;; + esac + done + ;; + prog) + compile_deplibs= + finalize_deplibs= + alldeplibs=no + newdlfiles= + newdlprefiles= + passes="conv scan dlopen dlpreopen link" + ;; + *) passes="conv" + ;; + esac + for pass in $passes; do + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan"; then + libs="$deplibs" + deplibs= + fi + if test "$linkmode" = prog; then + case $pass in + dlopen) libs="$dlfiles" ;; + dlpreopen) libs="$dlprefiles" ;; + link) + libs="$deplibs %DEPLIBS%" + test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" + ;; + esac + fi + if test "$pass" = dlopen; then + # Collect dlpreopened libraries + save_deplibs="$deplibs" + deplibs= + fi + for deplib in $libs; do + lib= + found=no + case $deplib in + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + fi + continue + ;; + -l*) + if test "$linkmode" != lib && test "$linkmode" != prog; then + $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2 + continue + fi + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + name=`$echo "X$deplib" | $Xsed -e 's/^-l//'` + for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do + for search_ext in .la $std_shrext .so .a; do + # Search the libtool library + lib="$searchdir/lib${name}${search_ext}" + if test -f "$lib"; then + if test "$search_ext" = ".la"; then + found=yes + else + found=no + fi + break 2 + fi + done + done + if test "$found" != yes; then + # deplib doesn't seem to be a libtool library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + else # deplib is a libtool library + # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, + # We need to do some special things here, and not later. + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $deplib "*) + if (${SED} -e '2q' $lib | + grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + library_names= + old_library= + case $lib in + */* | *\\*) . $lib ;; + *) . ./$lib ;; + esac + for l in $old_library $library_names; do + ll="$l" + done + if test "X$ll" = "X$old_library" ; then # only static version available + found=no + ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` + test "X$ladir" = "X$lib" && ladir="." + lib=$ladir/$old_library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + fi + ;; + *) ;; + esac + fi + fi + ;; # -l + -L*) + case $linkmode in + lib) + deplibs="$deplib $deplibs" + test "$pass" = conv && continue + newdependency_libs="$deplib $newdependency_libs" + newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` + ;; + prog) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + if test "$pass" = scan; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` + ;; + *) + $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2 + ;; + esac # linkmode + continue + ;; # -L + -R*) + if test "$pass" = link; then + dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'` + # Make sure the xrpath contains only unique directories. + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + fi + deplibs="$deplib $deplibs" + continue + ;; + *.la) lib="$deplib" ;; + *.$libext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + case $linkmode in + lib) + if test "$deplibs_check_method" != pass_all; then + $echo + $echo "*** Warning: Trying to link with static lib archive $deplib." + $echo "*** I have the capability to make that library automatically link in when" + $echo "*** you link to this library. But I can only do this if you have a" + $echo "*** shared version of the library, which you do not appear to have" + $echo "*** because the file extensions .$libext of this argument makes me believe" + $echo "*** that it is just a static archive that I should not used here." + else + $echo + $echo "*** Warning: Linking the shared library $output against the" + $echo "*** static library $deplib is not portable!" + deplibs="$deplib $deplibs" + fi + continue + ;; + prog) + if test "$pass" != link; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + continue + ;; + esac # linkmode + ;; # *.$libext + *.lo | *.$objext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + elif test "$linkmode" = prog; then + if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then + # If there is no dlopen support or we're linking statically, + # we need to preload. + newdlprefiles="$newdlprefiles $deplib" + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + newdlfiles="$newdlfiles $deplib" + fi + fi + continue + ;; + %DEPLIBS%) + alldeplibs=yes + continue + ;; + esac # case $deplib + if test "$found" = yes || test -f "$lib"; then : + else + $echo "$modename: cannot find the library \`$lib'" 1>&2 + exit $EXIT_FAILURE + fi + + # Check to see that this really is a libtool archive. + if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + else + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + exit $EXIT_FAILURE + fi + + ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` + test "X$ladir" = "X$lib" && ladir="." + + dlname= + dlopen= + dlpreopen= + libdir= + library_names= + old_library= + # If the library was installed with an old release of libtool, + # it will not redefine variables installed, or shouldnotlink + installed=yes + shouldnotlink=no + + # Read the .la file + case $lib in + */* | *\\*) . $lib ;; + *) . ./$lib ;; + esac + + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan" || + { test "$linkmode" != prog && test "$linkmode" != lib; }; then + test -n "$dlopen" && dlfiles="$dlfiles $dlopen" + test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" + fi + + if test "$pass" = conv; then + # Only check for convenience libraries + deplibs="$lib $deplibs" + if test -z "$libdir"; then + if test -z "$old_library"; then + $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 + exit $EXIT_FAILURE + fi + # It is a libtool convenience library, so add in its objects. + convenience="$convenience $ladir/$objdir/$old_library" + old_convenience="$old_convenience $ladir/$objdir/$old_library" + tmp_libs= + for deplib in $dependency_libs; do + deplibs="$deplib $deplibs" + if test "X$duplicate_deps" = "Xyes" ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done + elif test "$linkmode" != prog && test "$linkmode" != lib; then + $echo "$modename: \`$lib' is not a convenience library" 1>&2 + exit $EXIT_FAILURE + fi + continue + fi # $pass = conv + + + # Get the name of the library we link against. + linklib= + for l in $old_library $library_names; do + linklib="$l" + done + if test -z "$linklib"; then + $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 + exit $EXIT_FAILURE + fi + + # This library was specified with -dlopen. + if test "$pass" = dlopen; then + if test -z "$libdir"; then + $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2 + exit $EXIT_FAILURE + fi + if test -z "$dlname" || + test "$dlopen_support" != yes || + test "$build_libtool_libs" = no; then + # If there is no dlname, no dlopen support or we're linking + # statically, we need to preload. We also need to preload any + # dependent libraries so libltdl's deplib preloader doesn't + # bomb out in the load deplibs phase. + dlprefiles="$dlprefiles $lib $dependency_libs" + else + newdlfiles="$newdlfiles $lib" + fi + continue + fi # $pass = dlopen + + # We need an absolute path. + case $ladir in + [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; + *) + abs_ladir=`cd "$ladir" && pwd` + if test -z "$abs_ladir"; then + $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2 + $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 + abs_ladir="$ladir" + fi + ;; + esac + laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` + + # Find the relevant object directory and library name. + if test "X$installed" = Xyes; then + if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then + $echo "$modename: warning: library \`$lib' was moved." 1>&2 + dir="$ladir" + absdir="$abs_ladir" + libdir="$abs_ladir" + else + dir="$libdir" + absdir="$libdir" + fi + else + dir="$ladir/$objdir" + absdir="$abs_ladir/$objdir" + # Remove this search path later + notinst_path="$notinst_path $abs_ladir" + fi # $installed = yes + name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` + + # This library was specified with -dlpreopen. + if test "$pass" = dlpreopen; then + if test -z "$libdir"; then + $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2 + exit $EXIT_FAILURE + fi + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + newdlprefiles="$newdlprefiles $dir/$old_library" + # Otherwise, use the dlname, so that lt_dlopen finds it. + elif test -n "$dlname"; then + newdlprefiles="$newdlprefiles $dir/$dlname" + else + newdlprefiles="$newdlprefiles $dir/$linklib" + fi + fi # $pass = dlpreopen + + if test -z "$libdir"; then + # Link the convenience library + if test "$linkmode" = lib; then + deplibs="$dir/$old_library $deplibs" + elif test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$dir/$old_library $compile_deplibs" + finalize_deplibs="$dir/$old_library $finalize_deplibs" + else + deplibs="$lib $deplibs" # used for prog,scan pass + fi + continue + fi + + + if test "$linkmode" = prog && test "$pass" != link; then + newlib_search_path="$newlib_search_path $ladir" + deplibs="$lib $deplibs" + + linkalldeplibs=no + if test "$link_all_deplibs" != no || test -z "$library_names" || + test "$build_libtool_libs" = no; then + linkalldeplibs=yes + fi + + tmp_libs= + for deplib in $dependency_libs; do + case $deplib in + -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test + esac + # Need to link against all dependency_libs? + if test "$linkalldeplibs" = yes; then + deplibs="$deplib $deplibs" + else + # Need to hardcode shared library paths + # or/and link against static libraries + newdependency_libs="$deplib $newdependency_libs" + fi + if test "X$duplicate_deps" = "Xyes" ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done # for deplib + continue + fi # $linkmode = prog... + + if test "$linkmode,$pass" = "prog,link"; then + if test -n "$library_names" && + { test "$prefer_static_libs" = no || test -z "$old_library"; }; then + # We need to hardcode the library path + if test -n "$shlibpath_var"; then + # Make sure the rpath contains only unique directories. + case "$temp_rpath " in + *" $dir "*) ;; + *" $absdir "*) ;; + *) temp_rpath="$temp_rpath $dir" ;; + esac + fi + + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) compile_rpath="$compile_rpath $absdir" + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" + esac + ;; + esac + fi # $linkmode,$pass = prog,link... + + if test "$alldeplibs" = yes && + { test "$deplibs_check_method" = pass_all || + { test "$build_libtool_libs" = yes && + test -n "$library_names"; }; }; then + # We only need to search for static libraries + continue + fi + fi + + link_static=no # Whether the deplib will be linked statically + if test -n "$library_names" && + { test "$prefer_static_libs" = no || test -z "$old_library"; }; then + if test "$installed" = no; then + notinst_deplibs="$notinst_deplibs $lib" + need_relink=yes + fi + # This is a shared library + + # Warn about portability, can't link against -module's on + # some systems (darwin) + if test "$shouldnotlink" = yes && test "$pass" = link ; then + $echo + if test "$linkmode" = prog; then + $echo "*** Warning: Linking the executable $output against the loadable module" + else + $echo "*** Warning: Linking the shared library $output against the loadable module" + fi + $echo "*** $linklib is not portable!" + fi + if test "$linkmode" = lib && + test "$hardcode_into_libs" = yes; then + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) compile_rpath="$compile_rpath $absdir" + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" + esac + ;; + esac + fi + + if test -n "$old_archive_from_expsyms_cmds"; then + # figure out the soname + set dummy $library_names + realname="$2" + shift; shift + libname=`eval \\$echo \"$libname_spec\"` + # use dlname if we got it. it's perfectly good, no? + if test -n "$dlname"; then + soname="$dlname" + elif test -n "$soname_spec"; then + # bleh windows + case $host in + *cygwin* | mingw*) + major=`expr $current - $age` + versuffix="-$major" + ;; + esac + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + + # Make a new name for the extract_expsyms_cmds to use + soroot="$soname" + soname=`$echo $soroot | ${SED} -e 's/^.*\///'` + newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a" + + # If the library has no export list, then create one now + if test -f "$output_objdir/$soname-def"; then : + else + $show "extracting exported symbol list from \`$soname'" + save_ifs="$IFS"; IFS='~' + cmds=$extract_expsyms_cmds + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + + # Create $newlib + if test -f "$output_objdir/$newlib"; then :; else + $show "generating import library for \`$soname'" + save_ifs="$IFS"; IFS='~' + cmds=$old_archive_from_expsyms_cmds + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + # make sure the library variables are pointing to the new library + dir=$output_objdir + linklib=$newlib + fi # test -n "$old_archive_from_expsyms_cmds" + + if test "$linkmode" = prog || test "$mode" != relink; then + add_shlibpath= + add_dir= + add= + lib_linked=yes + case $hardcode_action in + immediate | unsupported) + if test "$hardcode_direct" = no; then + add="$dir/$linklib" + case $host in + *-*-sco3.2v5* ) add_dir="-L$dir" ;; + *-*-darwin* ) + # if the lib is a module then we can not link against + # it, someone is ignoring the new warnings I added + if /usr/bin/file -L $add 2> /dev/null | $EGREP "bundle" >/dev/null ; then + $echo "** Warning, lib $linklib is a module, not a shared library" + if test -z "$old_library" ; then + $echo + $echo "** And there doesn't seem to be a static archive available" + $echo "** The link will probably fail, sorry" + else + add="$dir/$old_library" + fi + fi + esac + elif test "$hardcode_minus_L" = no; then + case $host in + *-*-sunos*) add_shlibpath="$dir" ;; + esac + add_dir="-L$dir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = no; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + relink) + if test "$hardcode_direct" = yes; then + add="$dir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$dir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case "$libdir" in + [\\/]*) + add_dir="$add_dir -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + *) lib_linked=no ;; + esac + + if test "$lib_linked" != yes; then + $echo "$modename: configuration error: unsupported hardcode properties" + exit $EXIT_FAILURE + fi + + if test -n "$add_shlibpath"; then + case :$compile_shlibpath: in + *":$add_shlibpath:"*) ;; + *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; + esac + fi + if test "$linkmode" = prog; then + test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" + test -n "$add" && compile_deplibs="$add $compile_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + if test "$hardcode_direct" != yes && \ + test "$hardcode_minus_L" != yes && \ + test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; + esac + fi + fi + fi + + if test "$linkmode" = prog || test "$mode" = relink; then + add_shlibpath= + add_dir= + add= + # Finalize command for both is simple: just hardcode it. + if test "$hardcode_direct" = yes; then + add="$libdir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$libdir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; + esac + add="-l$name" + elif test "$hardcode_automatic" = yes; then + if test -n "$inst_prefix_dir" && + test -f "$inst_prefix_dir$libdir/$linklib" ; then + add="$inst_prefix_dir$libdir/$linklib" + else + add="$libdir/$linklib" + fi + else + # We cannot seem to hardcode it, guess we'll fake it. + add_dir="-L$libdir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case "$libdir" in + [\\/]*) + add_dir="$add_dir -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + fi + + if test "$linkmode" = prog; then + test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" + test -n "$add" && finalize_deplibs="$add $finalize_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + fi + fi + elif test "$linkmode" = prog; then + # Here we assume that one of hardcode_direct or hardcode_minus_L + # is not unsupported. This is valid on all known static and + # shared platforms. + if test "$hardcode_direct" != unsupported; then + test -n "$old_library" && linklib="$old_library" + compile_deplibs="$dir/$linklib $compile_deplibs" + finalize_deplibs="$dir/$linklib $finalize_deplibs" + else + compile_deplibs="-l$name -L$dir $compile_deplibs" + finalize_deplibs="-l$name -L$dir $finalize_deplibs" + fi + elif test "$build_libtool_libs" = yes; then + # Not a shared library + if test "$deplibs_check_method" != pass_all; then + # We're trying link a shared library against a static one + # but the system doesn't support it. + + # Just print a warning and add the library to dependency_libs so + # that the program can be linked against the static library. + $echo + $echo "*** Warning: This system can not link to static lib archive $lib." + $echo "*** I have the capability to make that library automatically link in when" + $echo "*** you link to this library. But I can only do this if you have a" + $echo "*** shared version of the library, which you do not appear to have." + if test "$module" = yes; then + $echo "*** But as you try to build a module library, libtool will still create " + $echo "*** a static module, that should work as long as the dlopening application" + $echo "*** is linked with the -dlopen flag to resolve symbols at runtime." + if test -z "$global_symbol_pipe"; then + $echo + $echo "*** However, this would only work if libtool was able to extract symbol" + $echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + $echo "*** not find such a program. So, this module is probably useless." + $echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + else + convenience="$convenience $dir/$old_library" + old_convenience="$old_convenience $dir/$old_library" + deplibs="$dir/$old_library $deplibs" + link_static=yes + fi + fi # link shared/static library? + + if test "$linkmode" = lib; then + if test -n "$dependency_libs" && + { test "$hardcode_into_libs" != yes || + test "$build_old_libs" = yes || + test "$link_static" = yes; }; then + # Extract -R from dependency_libs + temp_deplibs= + for libdir in $dependency_libs; do + case $libdir in + -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'` + case " $xrpath " in + *" $temp_xrpath "*) ;; + *) xrpath="$xrpath $temp_xrpath";; + esac;; + *) temp_deplibs="$temp_deplibs $libdir";; + esac + done + dependency_libs="$temp_deplibs" + fi + + newlib_search_path="$newlib_search_path $absdir" + # Link against this library + test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" + # ... and its dependency_libs + tmp_libs= + for deplib in $dependency_libs; do + newdependency_libs="$deplib $newdependency_libs" + if test "X$duplicate_deps" = "Xyes" ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done + + if test "$link_all_deplibs" != no; then + # Add the search paths of all dependency libraries + for deplib in $dependency_libs; do + case $deplib in + -L*) path="$deplib" ;; + *.la) + dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$deplib" && dir="." + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 + absdir="$dir" + fi + ;; + esac + if grep "^installed=no" $deplib > /dev/null; then + path="$absdir/$objdir" + else + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + if test -z "$libdir"; then + $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 + exit $EXIT_FAILURE + fi + if test "$absdir" != "$libdir"; then + $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2 + fi + path="$absdir" + fi + depdepl= + case $host in + *-*-darwin*) + # we do not want to link against static libs, + # but need to link against shared + eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` + if test -n "$deplibrary_names" ; then + for tmp in $deplibrary_names ; do + depdepl=$tmp + done + if test -f "$path/$depdepl" ; then + depdepl="$path/$depdepl" + fi + # do not add paths which are already there + case " $newlib_search_path " in + *" $path "*) ;; + *) newlib_search_path="$newlib_search_path $path";; + esac + fi + path="" + ;; + *) + path="-L$path" + ;; + esac + ;; + -l*) + case $host in + *-*-darwin*) + # Again, we only want to link against shared libraries + eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"` + for tmp in $newlib_search_path ; do + if test -f "$tmp/lib$tmp_libs.dylib" ; then + eval depdepl="$tmp/lib$tmp_libs.dylib" + break + fi + done + path="" + ;; + *) continue ;; + esac + ;; + *) continue ;; + esac + case " $deplibs " in + *" $depdepl "*) ;; + *) deplibs="$depdepl $deplibs" ;; + esac + case " $deplibs " in + *" $path "*) ;; + *) deplibs="$deplibs $path" ;; + esac + done + fi # link_all_deplibs != no + fi # linkmode = lib + done # for deplib in $libs + dependency_libs="$newdependency_libs" + if test "$pass" = dlpreopen; then + # Link the dlpreopened libraries before other libraries + for deplib in $save_deplibs; do + deplibs="$deplib $deplibs" + done + fi + if test "$pass" != dlopen; then + if test "$pass" != conv; then + # Make sure lib_search_path contains only unique directories. + lib_search_path= + for dir in $newlib_search_path; do + case "$lib_search_path " in + *" $dir "*) ;; + *) lib_search_path="$lib_search_path $dir" ;; + esac + done + newlib_search_path= + fi + + if test "$linkmode,$pass" != "prog,link"; then + vars="deplibs" + else + vars="compile_deplibs finalize_deplibs" + fi + for var in $vars dependency_libs; do + # Add libraries to $var in reverse order + eval tmp_libs=\"\$$var\" + new_libs= + for deplib in $tmp_libs; do + # FIXME: Pedantically, this is the right thing to do, so + # that some nasty dependency loop isn't accidentally + # broken: + #new_libs="$deplib $new_libs" + # Pragmatically, this seems to cause very few problems in + # practice: + case $deplib in + -L*) new_libs="$deplib $new_libs" ;; + -R*) ;; + *) + # And here is the reason: when a library appears more + # than once as an explicit dependence of a library, or + # is implicitly linked in more than once by the + # compiler, it is considered special, and multiple + # occurrences thereof are not removed. Compare this + # with having the same library being listed as a + # dependency of multiple other libraries: in this case, + # we know (pedantically, we assume) the library does not + # need to be listed more than once, so we keep only the + # last copy. This is not always right, but it is rare + # enough that we require users that really mean to play + # such unportable linking tricks to link the library + # using -Wl,-lname, so that libtool does not consider it + # for duplicate removal. + case " $specialdeplibs " in + *" $deplib "*) new_libs="$deplib $new_libs" ;; + *) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$deplib $new_libs" ;; + esac + ;; + esac + ;; + esac + done + tmp_libs= + for deplib in $new_libs; do + case $deplib in + -L*) + case " $tmp_libs " in + *" $deplib "*) ;; + *) tmp_libs="$tmp_libs $deplib" ;; + esac + ;; + *) tmp_libs="$tmp_libs $deplib" ;; + esac + done + eval $var=\"$tmp_libs\" + done # for var + fi + # Last step: remove runtime libs from dependency_libs + # (they stay in deplibs) + tmp_libs= + for i in $dependency_libs ; do + case " $predeps $postdeps $compiler_lib_search_path " in + *" $i "*) + i="" + ;; + esac + if test -n "$i" ; then + tmp_libs="$tmp_libs $i" + fi + done + dependency_libs=$tmp_libs + done # for pass + if test "$linkmode" = prog; then + dlfiles="$newdlfiles" + dlprefiles="$newdlprefiles" + fi + + case $linkmode in + oldlib) + if test -n "$deplibs"; then + $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 + fi + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 + fi + + if test -n "$rpath"; then + $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 + fi + + if test -n "$xrpath"; then + $echo "$modename: warning: \`-R' is ignored for archives" 1>&2 + fi + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for archives" 1>&2 + fi + + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 + fi + + # Now set the variables for building old libraries. + build_libtool_libs=no + oldlibs="$output" + objs="$objs$old_deplibs" + ;; + + lib) + # Make sure we only generate libraries of the form `libNAME.la'. + case $outputname in + lib*) + name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + ;; + *) + if test "$module" = no; then + $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + if test "$need_lib_prefix" != no; then + # Add the "lib" prefix for modules if required + name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + else + libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` + fi + ;; + esac + + if test -n "$objs"; then + if test "$deplibs_check_method" != pass_all; then + $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1 + exit $EXIT_FAILURE + else + $echo + $echo "*** Warning: Linking the shared library $output against the non-libtool" + $echo "*** objects $objs is not portable!" + libobjs="$libobjs $objs" + fi + fi + + if test "$dlself" != no; then + $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2 + fi + + set dummy $rpath + if test "$#" -gt 2; then + $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 + fi + install_libdir="$2" + + oldlibs= + if test -z "$rpath"; then + if test "$build_libtool_libs" = yes; then + # Building a libtool convenience library. + # Some compilers have problems with a `.al' extension so + # convenience libraries should have the same extension an + # archive normally would. + oldlibs="$output_objdir/$libname.$libext $oldlibs" + build_libtool_libs=convenience + build_old_libs=yes + fi + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 + fi + else + + # Parse the version information argument. + save_ifs="$IFS"; IFS=':' + set dummy $vinfo 0 0 0 + IFS="$save_ifs" + + if test -n "$8"; then + $echo "$modename: too many parameters to \`-version-info'" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # convert absolute version numbers to libtool ages + # this retains compatibility with .la files and attempts + # to make the code below a bit more comprehensible + + case $vinfo_number in + yes) + number_major="$2" + number_minor="$3" + number_revision="$4" + # + # There are really only two kinds -- those that + # use the current revision as the major version + # and those that subtract age and use age as + # a minor version. But, then there is irix + # which has an extra 1 added just for fun + # + case $version_type in + darwin|linux|osf|windows) + current=`expr $number_major + $number_minor` + age="$number_minor" + revision="$number_revision" + ;; + freebsd-aout|freebsd-elf|sunos) + current="$number_major" + revision="$number_minor" + age="0" + ;; + irix|nonstopux) + current=`expr $number_major + $number_minor - 1` + age="$number_minor" + revision="$number_minor" + ;; + esac + ;; + no) + current="$2" + revision="$3" + age="$4" + ;; + esac + + # Check that each of the things are valid numbers. + case $current in + 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;; + *) + $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + case $revision in + 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;; + *) + $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + case $age in + 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;; + *) + $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + if test "$age" -gt "$current"; then + $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit $EXIT_FAILURE + fi + + # Calculate the version variables. + major= + versuffix= + verstring= + case $version_type in + none) ;; + + darwin) + # Like Linux, but with the current version available in + # verstring for coding it into the library header + major=.`expr $current - $age` + versuffix="$major.$age.$revision" + # Darwin ld doesn't like 0 for these options... + minor_current=`expr $current + 1` + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + ;; + + freebsd-aout) + major=".$current" + versuffix=".$current.$revision"; + ;; + + freebsd-elf) + major=".$current" + versuffix=".$current"; + ;; + + irix | nonstopux) + major=`expr $current - $age + 1` + + case $version_type in + nonstopux) verstring_prefix=nonstopux ;; + *) verstring_prefix=sgi ;; + esac + verstring="$verstring_prefix$major.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$revision + while test "$loop" -ne 0; do + iface=`expr $revision - $loop` + loop=`expr $loop - 1` + verstring="$verstring_prefix$major.$iface:$verstring" + done + + # Before this point, $major must not contain `.'. + major=.$major + versuffix="$major.$revision" + ;; + + linux) + major=.`expr $current - $age` + versuffix="$major.$age.$revision" + ;; + + osf) + major=.`expr $current - $age` + versuffix=".$current.$age.$revision" + verstring="$current.$age.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$age + while test "$loop" -ne 0; do + iface=`expr $current - $loop` + loop=`expr $loop - 1` + verstring="$verstring:${iface}.0" + done + + # Make executables depend on our current version. + verstring="$verstring:${current}.0" + ;; + + sunos) + major=".$current" + versuffix=".$current.$revision" + ;; + + windows) + # Use '-' rather than '.', since we only want one + # extension on DOS 8.3 filesystems. + major=`expr $current - $age` + versuffix="-$major" + ;; + + *) + $echo "$modename: unknown library version type \`$version_type'" 1>&2 + $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit $EXIT_FAILURE + ;; + esac + + # Clear the version info if we defaulted, and they specified a release. + if test -z "$vinfo" && test -n "$release"; then + major= + case $version_type in + darwin) + # we can't check for "0.0" in archive_cmds due to quoting + # problems, so we reset it completely + verstring= + ;; + *) + verstring="0.0" + ;; + esac + if test "$need_version" = no; then + versuffix= + else + versuffix=".0.0" + fi + fi + + # Remove version info from name if versioning should be avoided + if test "$avoid_version" = yes && test "$need_version" = no; then + major= + versuffix= + verstring="" + fi + + # Check to see if the archive will have undefined symbols. + if test "$allow_undefined" = yes; then + if test "$allow_undefined_flag" = unsupported; then + $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 + build_libtool_libs=no + build_old_libs=yes + fi + else + # Don't allow undefined symbols. + allow_undefined_flag="$no_undefined_flag" + fi + fi + + if test "$mode" != relink; then + # Remove our outputs, but don't remove object files since they + # may have been created when compiling PIC objects. + removelist= + tempremovelist=`$echo "$output_objdir/*"` + for p in $tempremovelist; do + case $p in + *.$objext) + ;; + $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) + if test "X$precious_files_regex" != "X"; then + if echo $p | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 + then + continue + fi + fi + removelist="$removelist $p" + ;; + *) ;; + esac + done + if test -n "$removelist"; then + $show "${rm}r $removelist" + $run ${rm}r $removelist + fi + fi + + # Now set the variables for building old libraries. + if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then + oldlibs="$oldlibs $output_objdir/$libname.$libext" + + # Transform .lo files to .o files. + oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` + fi + + # Eliminate all temporary directories. + for path in $notinst_path; do + lib_search_path=`$echo "$lib_search_path " | ${SED} -e 's% $path % %g'` + deplibs=`$echo "$deplibs " | ${SED} -e 's% -L$path % %g'` + dependency_libs=`$echo "$dependency_libs " | ${SED} -e 's% -L$path % %g'` + done + + if test -n "$xrpath"; then + # If the user specified any rpath flags, then add them. + temp_xrpath= + for libdir in $xrpath; do + temp_xrpath="$temp_xrpath -R$libdir" + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" ;; + esac + done + if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then + dependency_libs="$temp_xrpath $dependency_libs" + fi + fi + + # Make sure dlfiles contains only unique files that won't be dlpreopened + old_dlfiles="$dlfiles" + dlfiles= + for lib in $old_dlfiles; do + case " $dlprefiles $dlfiles " in + *" $lib "*) ;; + *) dlfiles="$dlfiles $lib" ;; + esac + done + + # Make sure dlprefiles contains only unique files + old_dlprefiles="$dlprefiles" + dlprefiles= + for lib in $old_dlprefiles; do + case "$dlprefiles " in + *" $lib "*) ;; + *) dlprefiles="$dlprefiles $lib" ;; + esac + done + + if test "$build_libtool_libs" = yes; then + if test -n "$rpath"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*) + # these systems don't actually have a c library (as such)! + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C library is in the System framework + deplibs="$deplibs -framework System" + ;; + *-*-netbsd*) + # Don't link with libc until the a.out ld.so is fixed. + ;; + *-*-openbsd* | *-*-freebsd*) + # Do not include libc due to us having libc/libc_r. + test "X$arg" = "X-lc" && continue + ;; + *) + # Add libc to deplibs on all other systems if necessary. + if test "$build_libtool_need_lc" = "yes"; then + deplibs="$deplibs -lc" + fi + ;; + esac + fi + + # Transform deplibs into only deplibs that can be linked in shared. + name_save=$name + libname_save=$libname + release_save=$release + versuffix_save=$versuffix + major_save=$major + # I'm not sure if I'm treating the release correctly. I think + # release should show up in the -l (ie -lgmp5) so we don't want to + # add it in twice. Is that correct? + release="" + versuffix="" + major="" + newdeplibs= + droppeddeps=no + case $deplibs_check_method in + pass_all) + # Don't check for shared/static. Everything works. + # This might be a little naive. We might want to check + # whether the library exists or not. But this is on + # osf3 & osf4 and I'm not really sure... Just + # implementing what was already the behavior. + newdeplibs=$deplibs + ;; + test_compile) + # This code stresses the "libraries are programs" paradigm to its + # limits. Maybe even breaks it. We compile a program, linking it + # against the deplibs as a proxy for the library. Then we can check + # whether they linked in statically or dynamically with ldd. + $rm conftest.c + cat > conftest.c </dev/null` + for potent_lib in $potential_libs; do + # Follow soft links. + if ls -lLd "$potent_lib" 2>/dev/null \ + | grep " -> " >/dev/null; then + continue + fi + # The statement above tries to avoid entering an + # endless loop below, in case of cyclic links. + # We might still enter an endless loop, since a link + # loop can be closed while we follow links, + # but so what? + potlib="$potent_lib" + while test -h "$potlib" 2>/dev/null; do + potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` + case $potliblink in + [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; + *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; + esac + done + if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ + | ${SED} 10q \ + | $EGREP "$file_magic_regex" > /dev/null; then + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + $echo + $echo "*** Warning: linker path does not have real file for library $a_deplib." + $echo "*** I have the capability to make that library automatically link in when" + $echo "*** you link to this library. But I can only do this if you have a" + $echo "*** shared version of the library, which you do not appear to have" + $echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $echo "*** with $libname but no candidates were found. (...for file magic test)" + else + $echo "*** with $libname and none of the candidates passed a file format test" + $echo "*** using a file magic. Last file checked: $potlib" + fi + fi + else + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + fi + done # Gone through all deplibs. + ;; + match_pattern*) + set dummy $deplibs_check_method + match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` + for a_deplib in $deplibs; do + name="`expr $a_deplib : '-l\(.*\)'`" + # If $name is empty we are operating on a -L argument. + if test -n "$name" && test "$name" != "0"; then + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $a_deplib "*) + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + ;; + esac + fi + if test -n "$a_deplib" ; then + libname=`eval \\$echo \"$libname_spec\"` + for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do + potential_libs=`ls $i/$libname[.-]* 2>/dev/null` + for potent_lib in $potential_libs; do + potlib="$potent_lib" # see symlink-check above in file_magic test + if eval $echo \"$potent_lib\" 2>/dev/null \ + | ${SED} 10q \ + | $EGREP "$match_pattern_regex" > /dev/null; then + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + $echo + $echo "*** Warning: linker path does not have real file for library $a_deplib." + $echo "*** I have the capability to make that library automatically link in when" + $echo "*** you link to this library. But I can only do this if you have a" + $echo "*** shared version of the library, which you do not appear to have" + $echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $echo "*** with $libname but no candidates were found. (...for regex pattern test)" + else + $echo "*** with $libname and none of the candidates passed a file format test" + $echo "*** using a regex pattern. Last file checked: $potlib" + fi + fi + else + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + fi + done # Gone through all deplibs. + ;; + none | unknown | *) + newdeplibs="" + tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ + -e 's/ -[LR][^ ]*//g'` + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + for i in $predeps $postdeps ; do + # can't use Xsed below, because $i might contain '/' + tmp_deplibs=`$echo "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"` + done + fi + if $echo "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' \ + | grep . >/dev/null; then + $echo + if test "X$deplibs_check_method" = "Xnone"; then + $echo "*** Warning: inter-library dependencies are not supported in this platform." + else + $echo "*** Warning: inter-library dependencies are not known to be supported." + fi + $echo "*** All declared inter-library dependencies are being dropped." + droppeddeps=yes + fi + ;; + esac + versuffix=$versuffix_save + major=$major_save + release=$release_save + libname=$libname_save + name=$name_save + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'` + ;; + esac + + if test "$droppeddeps" = yes; then + if test "$module" = yes; then + $echo + $echo "*** Warning: libtool could not satisfy all declared inter-library" + $echo "*** dependencies of module $libname. Therefore, libtool will create" + $echo "*** a static module, that should work as long as the dlopening" + $echo "*** application is linked with the -dlopen flag." + if test -z "$global_symbol_pipe"; then + $echo + $echo "*** However, this would only work if libtool was able to extract symbol" + $echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + $echo "*** not find such a program. So, this module is probably useless." + $echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + else + $echo "*** The inter-library dependencies that have been dropped here will be" + $echo "*** automatically added whenever a program is linked with this library" + $echo "*** or is declared to -dlopen it." + + if test "$allow_undefined" = no; then + $echo + $echo "*** Since this library must not contain undefined symbols," + $echo "*** because either the platform does not support them or" + $echo "*** it was explicitly requested with -no-undefined," + $echo "*** libtool will only create a static version of it." + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + fi + fi + # Done checking deplibs! + deplibs=$newdeplibs + fi + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + + # Test again, we may have decided not to build it any more + if test "$build_libtool_libs" = yes; then + if test "$hardcode_into_libs" = yes; then + # Hardcode the library paths + hardcode_libdirs= + dep_rpath= + rpath="$finalize_rpath" + test "$mode" != relink && rpath="$compile_rpath$rpath" + for libdir in $rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + dep_rpath="$dep_rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + if test -n "$hardcode_libdir_flag_spec_ld"; then + eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" + else + eval dep_rpath=\"$hardcode_libdir_flag_spec\" + fi + fi + if test -n "$runpath_var" && test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" + done + eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" + fi + test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" + fi + + shlibpath="$finalize_shlibpath" + test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" + if test -n "$shlibpath"; then + eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" + fi + + # Get the real and link names of the library. + eval shared_ext=\"$shrext_cmds\" + eval library_names=\"$library_names_spec\" + set dummy $library_names + realname="$2" + shift; shift + + if test -n "$soname_spec"; then + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + if test -z "$dlname"; then + dlname=$soname + fi + + lib="$output_objdir/$realname" + for link + do + linknames="$linknames $link" + done + + # Use standard objects if they are pic + test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then + $show "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $run $rm $export_symbols + cmds=$export_symbols_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + if len=`expr "X$cmd" : ".*"` && + test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then + $show "$cmd" + $run eval "$cmd" || exit $? + skipped_export=false + else + # The command line is too long to execute in one step. + $show "using reloadable object file for export list..." + skipped_export=: + fi + done + IFS="$save_ifs" + if test -n "$export_symbols_regex"; then + $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"" + $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + $show "$mv \"${export_symbols}T\" \"$export_symbols\"" + $run eval '$mv "${export_symbols}T" "$export_symbols"' + fi + fi + fi + + if test -n "$export_symbols" && test -n "$include_expsyms"; then + $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' + fi + + tmp_deplibs= + for test_deplib in $deplibs; do + case " $convenience " in + *" $test_deplib "*) ;; + *) + tmp_deplibs="$tmp_deplibs $test_deplib" + ;; + esac + done + deplibs="$tmp_deplibs" + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + else + gentop="$output_objdir/${outputname}x" + $show "${rm}r $gentop" + $run ${rm}r "$gentop" + $show "$mkdir $gentop" + $run $mkdir "$gentop" + status=$? + if test "$status" -ne 0 && test ! -d "$gentop"; then + exit $status + fi + generated="$generated $gentop" + + for xlib in $convenience; do + # Extract the objects. + case $xlib in + [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; + *) xabs=`pwd`"/$xlib" ;; + esac + xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` + xdir="$gentop/$xlib" + + $show "${rm}r $xdir" + $run ${rm}r "$xdir" + $show "$mkdir $xdir" + $run $mkdir "$xdir" + status=$? + if test "$status" -ne 0 && test ! -d "$xdir"; then + exit $status + fi + # We will extract separately just the conflicting names and we will no + # longer touch any unique names. It is faster to leave these extract + # automatically by $AR in one run. + $show "(cd $xdir && $AR x $xabs)" + $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? + if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then + : + else + $echo "$modename: warning: object name conflicts; renaming object files" 1>&2 + $echo "$modename: warning: to ensure that they will not overwrite" 1>&2 + $AR t "$xabs" | sort | uniq -cd | while read -r count name + do + i=1 + while test "$i" -le "$count" + do + # Put our $i before any first dot (extension) + # Never overwrite any file + name_to="$name" + while test "X$name_to" = "X$name" || test -f "$xdir/$name_to" + do + name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"` + done + $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')" + $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $? + i=`expr $i + 1` + done + done + fi + + libobjs="$libobjs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` + done + fi + fi + + if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then + eval flag=\"$thread_safe_flag_spec\" + linker_flags="$linker_flags $flag" + fi + + # Make a backup of the uninstalled library when relinking + if test "$mode" = relink; then + $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $? + fi + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + eval test_cmds=\"$module_expsym_cmds\" + cmds=$module_expsym_cmds + else + eval test_cmds=\"$module_cmds\" + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + eval test_cmds=\"$archive_expsym_cmds\" + cmds=$archive_expsym_cmds + else + eval test_cmds=\"$archive_cmds\" + cmds=$archive_cmds + fi + fi + + if test "X$skipped_export" != "X:" && len=`expr "X$test_cmds" : ".*"` && + test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then + : + else + # The command line is too long to link in one step, link piecewise. + $echo "creating reloadable object files..." + + # Save the value of $output and $libobjs because we want to + # use them later. If we have whole_archive_flag_spec, we + # want to use save_libobjs as it was before + # whole_archive_flag_spec was expanded, because we can't + # assume the linker understands whole_archive_flag_spec. + # This may have to be revisited, in case too many + # convenience libraries get linked in and end up exceeding + # the spec. + if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + fi + save_output=$output + + # Clear the reloadable object creation command queue and + # initialize k to one. + test_cmds= + concat_cmds= + objlist= + delfiles= + last_robj= + k=1 + output=$output_objdir/$save_output-${k}.$objext + # Loop over the list of objects to be linked. + for obj in $save_libobjs + do + eval test_cmds=\"$reload_cmds $objlist $last_robj\" + if test "X$objlist" = X || + { len=`expr "X$test_cmds" : ".*"` && + test "$len" -le "$max_cmd_len"; }; then + objlist="$objlist $obj" + else + # The command $test_cmds is almost too long, add a + # command to the queue. + if test "$k" -eq 1 ; then + # The first file doesn't have a previous command to add. + eval concat_cmds=\"$reload_cmds $objlist $last_robj\" + else + # All subsequent reloadable object files will link in + # the last one created. + eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\" + fi + last_robj=$output_objdir/$save_output-${k}.$objext + k=`expr $k + 1` + output=$output_objdir/$save_output-${k}.$objext + objlist=$obj + len=1 + fi + done + # Handle the remaining objects by creating one last + # reloadable object file. All subsequent reloadable object + # files will link in the last one created. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" + + if ${skipped_export-false}; then + $show "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $run $rm $export_symbols + libobjs=$output + # Append the command to create the export file. + eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\" + fi + + # Set up a command to remove the reloadale object files + # after they are used. + i=0 + while test "$i" -lt "$k" + do + i=`expr $i + 1` + delfiles="$delfiles $output_objdir/$save_output-${i}.$objext" + done + + $echo "creating a temporary reloadable object file: $output" + + # Loop through the commands generated above and execute them. + save_ifs="$IFS"; IFS='~' + for cmd in $concat_cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + + libobjs=$output + # Restore the value of output. + output=$save_output + + if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + fi + # Expand the library linking commands again to reset the + # value of $libobjs for piecewise linking. + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + cmds=$module_expsym_cmds + else + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + cmds=$archive_expsym_cmds + else + cmds=$archive_cmds + fi + fi + + # Append the command to remove the reloadable object files + # to the just-reset $cmds. + eval cmds=\"\$cmds~\$rm $delfiles\" + fi + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $? + exit $EXIT_SUCCESS + fi + + # Create links to the real library. + for linkname in $linknames; do + if test "$realname" != "$linkname"; then + $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" + $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $? + fi + done + + # If -module or -export-dynamic was specified, set the dlname. + if test "$module" = yes || test "$export_dynamic" = yes; then + # On all known operating systems, these are identical. + dlname="$soname" + fi + fi + ;; + + obj) + if test -n "$deplibs"; then + $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 + fi + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 + fi + + if test -n "$rpath"; then + $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 + fi + + if test -n "$xrpath"; then + $echo "$modename: warning: \`-R' is ignored for objects" 1>&2 + fi + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 + fi + + case $output in + *.lo) + if test -n "$objs$old_deplibs"; then + $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 + exit $EXIT_FAILURE + fi + libobj="$output" + obj=`$echo "X$output" | $Xsed -e "$lo2o"` + ;; + *) + libobj= + obj="$output" + ;; + esac + + # Delete the old objects. + $run $rm $obj $libobj + + # Objects from convenience libraries. This assumes + # single-version convenience libraries. Whenever we create + # different ones for PIC/non-PIC, this we'll have to duplicate + # the extraction. + reload_conv_objs= + gentop= + # reload_cmds runs $LD directly, so let us get rid of + # -Wl from whole_archive_flag_spec + wl= + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\" + else + gentop="$output_objdir/${obj}x" + $show "${rm}r $gentop" + $run ${rm}r "$gentop" + $show "$mkdir $gentop" + $run $mkdir "$gentop" + status=$? + if test "$status" -ne 0 && test ! -d "$gentop"; then + exit $status + fi + generated="$generated $gentop" + + for xlib in $convenience; do + # Extract the objects. + case $xlib in + [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; + *) xabs=`pwd`"/$xlib" ;; + esac + xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` + xdir="$gentop/$xlib" + + $show "${rm}r $xdir" + $run ${rm}r "$xdir" + $show "$mkdir $xdir" + $run $mkdir "$xdir" + status=$? + if test "$status" -ne 0 && test ! -d "$xdir"; then + exit $status + fi + # We will extract separately just the conflicting names and we will no + # longer touch any unique names. It is faster to leave these extract + # automatically by $AR in one run. + $show "(cd $xdir && $AR x $xabs)" + $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? + if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then + : + else + $echo "$modename: warning: object name conflicts; renaming object files" 1>&2 + $echo "$modename: warning: to ensure that they will not overwrite" 1>&2 + $AR t "$xabs" | sort | uniq -cd | while read -r count name + do + i=1 + while test "$i" -le "$count" + do + # Put our $i before any first dot (extension) + # Never overwrite any file + name_to="$name" + while test "X$name_to" = "X$name" || test -f "$xdir/$name_to" + do + name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"` + done + $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')" + $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $? + i=`expr $i + 1` + done + done + fi + + reload_conv_objs="$reload_objs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` + done + fi + fi + + # Create the old-style object. + reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test + + output="$obj" + cmds=$reload_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + + # Exit if we aren't doing a library object file. + if test -z "$libobj"; then + if test -n "$gentop"; then + $show "${rm}r $gentop" + $run ${rm}r $gentop + fi + + exit $EXIT_SUCCESS + fi + + if test "$build_libtool_libs" != yes; then + if test -n "$gentop"; then + $show "${rm}r $gentop" + $run ${rm}r $gentop + fi + + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + # $show "echo timestamp > $libobj" + # $run eval "echo timestamp > $libobj" || exit $? + exit $EXIT_SUCCESS + fi + + if test -n "$pic_flag" || test "$pic_mode" != default; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs $reload_conv_objs" + output="$libobj" + cmds=$reload_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + + if test -n "$gentop"; then + $show "${rm}r $gentop" + $run ${rm}r $gentop + fi + + exit $EXIT_SUCCESS + ;; + + prog) + case $host in + *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;; + esac + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for programs" 1>&2 + fi + + if test "$preload" = yes; then + if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown && + test "$dlopen_self_static" = unknown; then + $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." + fi + fi + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'` + finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'` + ;; + esac + + case $host in + *darwin*) + # Don't allow lazy linking, it breaks C++ global constructors + if test "$tagname" = CXX ; then + compile_command="$compile_command ${wl}-bind_at_load" + finalize_command="$finalize_command ${wl}-bind_at_load" + fi + ;; + esac + + compile_command="$compile_command $compile_deplibs" + finalize_command="$finalize_command $finalize_deplibs" + + if test -n "$rpath$xrpath"; then + # If the user specified any rpath flags, then add them. + for libdir in $rpath $xrpath; do + # This is the magic to use -rpath. + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" ;; + esac + done + fi + + # Now hardcode the library paths + rpath= + hardcode_libdirs= + for libdir in $compile_rpath $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) + case :$dllsearchpath: in + *":$libdir:"*) ;; + *) dllsearchpath="$dllsearchpath:$libdir";; + esac + ;; + esac + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + compile_rpath="$rpath" + + rpath= + hardcode_libdirs= + for libdir in $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$finalize_perm_rpath " in + *" $libdir "*) ;; + *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + finalize_rpath="$rpath" + + if test -n "$libobjs" && test "$build_old_libs" = yes; then + # Transform all the library objects into standard objects. + compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + fi + + dlsyms= + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + if test -n "$NM" && test -n "$global_symbol_pipe"; then + dlsyms="${outputname}S.c" + else + $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 + fi + fi + + if test -n "$dlsyms"; then + case $dlsyms in + "") ;; + *.c) + # Discover the nlist of each of the dlfiles. + nlist="$output_objdir/${outputname}.nm" + + $show "$rm $nlist ${nlist}S ${nlist}T" + $run $rm "$nlist" "${nlist}S" "${nlist}T" + + # Parse the name list into a source file. + $show "creating $output_objdir/$dlsyms" + + test -z "$run" && $echo > "$output_objdir/$dlsyms" "\ +/* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ +/* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +/* Prevent the only kind of declaration conflicts we can make. */ +#define lt_preloaded_symbols some_other_symbol + +/* External symbol declarations for the compiler. */\ +" + + if test "$dlself" = yes; then + $show "generating symbol list for \`$output'" + + test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" + + # Add our own program objects to the symbol list. + progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + for arg in $progfiles; do + $show "extracting global C symbols from \`$arg'" + $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" + done + + if test -n "$exclude_expsyms"; then + $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' + $run eval '$mv "$nlist"T "$nlist"' + fi + + if test -n "$export_symbols_regex"; then + $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' + $run eval '$mv "$nlist"T "$nlist"' + fi + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + export_symbols="$output_objdir/$output.exp" + $run $rm $export_symbols + $run eval "${SED} -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + else + $run eval "${SED} -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"' + $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T' + $run eval 'mv "$nlist"T "$nlist"' + fi + fi + + for arg in $dlprefiles; do + $show "extracting global C symbols from \`$arg'" + name=`$echo "$arg" | ${SED} -e 's%^.*/%%'` + $run eval '$echo ": $name " >> "$nlist"' + $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" + done + + if test -z "$run"; then + # Make sure we have at least an empty file. + test -f "$nlist" || : > "$nlist" + + if test -n "$exclude_expsyms"; then + $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T + $mv "$nlist"T "$nlist" + fi + + # Try sorting and uniquifying the output. + if grep -v "^: " < "$nlist" | + if sort -k 3 /dev/null 2>&1; then + sort -k 3 + else + sort +2 + fi | + uniq > "$nlist"S; then + : + else + grep -v "^: " < "$nlist" > "$nlist"S + fi + + if test -f "$nlist"S; then + eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"' + else + $echo '/* NONE */' >> "$output_objdir/$dlsyms" + fi + + $echo >> "$output_objdir/$dlsyms" "\ + +#undef lt_preloaded_symbols + +#if defined (__STDC__) && __STDC__ +# define lt_ptr void * +#else +# define lt_ptr char * +# define const +#endif + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + lt_ptr address; +} +lt_preloaded_symbols[] = +{\ +" + + eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms" + + $echo >> "$output_objdir/$dlsyms" "\ + {0, (lt_ptr) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif\ +" + fi + + pic_flag_for_symtable= + case $host in + # compiling the symbol table file with pic_flag works around + # a FreeBSD bug that causes programs to crash when -lm is + # linked before any other PIC object. But we must not use + # pic_flag when linking with -static. The problem exists in + # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. + *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) + case "$compile_command " in + *" -static "*) ;; + *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";; + esac;; + *-*-hpux*) + case "$compile_command " in + *" -static "*) ;; + *) pic_flag_for_symtable=" $pic_flag";; + esac + esac + + # Now compile the dynamic symbol file. + $show "(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" + $run eval '(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? + + # Clean up the generated files. + $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" + $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" + + # Transform the symbol file into the correct name. + compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` + ;; + *) + $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 + exit $EXIT_FAILURE + ;; + esac + else + # We keep going just in case the user didn't refer to + # lt_preloaded_symbols. The linker will fail if global_symbol_pipe + # really was required. + + # Nullify the symbol file. + compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` + fi + + if test "$need_relink" = no || test "$build_libtool_libs" != yes; then + # Replace the output file specification. + compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` + link_command="$compile_command$compile_rpath" + + # We have no uninstalled library dependencies, so finalize right now. + $show "$link_command" + $run eval "$link_command" + status=$? + + # Delete the generated files. + if test -n "$dlsyms"; then + $show "$rm $output_objdir/${outputname}S.${objext}" + $run $rm "$output_objdir/${outputname}S.${objext}" + fi + + exit $status + fi + + if test -n "$shlibpath_var"; then + # We should set the shlibpath_var + rpath= + for dir in $temp_rpath; do + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) + # Absolute path. + rpath="$rpath$dir:" + ;; + *) + # Relative path: add a thisdir entry. + rpath="$rpath\$thisdir/$dir:" + ;; + esac + done + temp_rpath="$rpath" + fi + + if test -n "$compile_shlibpath$finalize_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi + + compile_var= + finalize_var= + if test -n "$runpath_var"; then + if test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" + done + compile_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + if test -n "$finalize_perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $finalize_perm_rpath; do + rpath="$rpath$dir:" + done + finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + fi + + if test "$no_install" = yes; then + # We don't need to create a wrapper script. + link_command="$compile_var$compile_command$compile_rpath" + # Replace the output file specification. + link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` + # Delete the old output file. + $run $rm $output + # Link the executable and exit + $show "$link_command" + $run eval "$link_command" || exit $? + exit $EXIT_SUCCESS + fi + + if test "$hardcode_action" = relink; then + # Fast installation is not supported + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + + $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 + $echo "$modename: \`$output' will be relinked during installation" 1>&2 + else + if test "$fast_install" != no; then + link_command="$finalize_var$compile_command$finalize_rpath" + if test "$fast_install" = yes; then + relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` + else + # fast_install is set to needless + relink_command= + fi + else + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + fi + fi + + # Replace the output file specification. + link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` + + # Delete the old output files. + $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname + + $show "$link_command" + $run eval "$link_command" || exit $? + + # Now create the wrapper script. + $show "creating $output" + + # Quote the relink command for shipping. + if test -n "$relink_command"; then + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` + relink_command="$var=\"$var_value\"; export $var; $relink_command" + fi + done + relink_command="(cd `pwd`; $relink_command)" + relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` + fi + + # Quote $echo for shipping. + if test "X$echo" = "X$SHELL $progpath --fallback-echo"; then + case $progpath in + [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; + *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; + esac + qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` + else + qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` + fi + + # Only actually do things if our run command is non-null. + if test -z "$run"; then + # win32 will think the script is a binary if it has + # a .exe suffix, so we strip it off here. + case $output in + *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;; + esac + # test for cygwin because mv fails w/o .exe extensions + case $host in + *cygwin*) + exeext=.exe + outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;; + *) exeext= ;; + esac + case $host in + *cygwin* | *mingw* ) + cwrappersource=`$echo ${objdir}/lt-${output}.c` + cwrapper=`$echo ${output}.exe` + $rm $cwrappersource $cwrapper + trap "$rm $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 + + cat > $cwrappersource <> $cwrappersource<<"EOF" +#include +#include +#include +#include +#include +#include + +#if defined(PATH_MAX) +# define LT_PATHMAX PATH_MAX +#elif defined(MAXPATHLEN) +# define LT_PATHMAX MAXPATHLEN +#else +# define LT_PATHMAX 1024 +#endif + +#ifndef DIR_SEPARATOR +#define DIR_SEPARATOR '/' +#endif + +#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ + defined (__OS2__) +#define HAVE_DOS_BASED_FILE_SYSTEM +#ifndef DIR_SEPARATOR_2 +#define DIR_SEPARATOR_2 '\\' +#endif +#endif + +#ifndef DIR_SEPARATOR_2 +# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) +#else /* DIR_SEPARATOR_2 */ +# define IS_DIR_SEPARATOR(ch) \ + (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) +#endif /* DIR_SEPARATOR_2 */ + +#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) +#define XFREE(stale) do { \ + if (stale) { free ((void *) stale); stale = 0; } \ +} while (0) + +const char *program_name = NULL; + +void * xmalloc (size_t num); +char * xstrdup (const char *string); +char * basename (const char *name); +char * fnqualify(const char *path); +char * strendzap(char *str, const char *pat); +void lt_fatal (const char *message, ...); + +int +main (int argc, char *argv[]) +{ + char **newargz; + int i; + + program_name = (char *) xstrdup ((char *) basename (argv[0])); + newargz = XMALLOC(char *, argc+2); +EOF + + cat >> $cwrappersource <> $cwrappersource <<"EOF" + newargz[1] = fnqualify(argv[0]); + /* we know the script has the same name, without the .exe */ + /* so make sure newargz[1] doesn't end in .exe */ + strendzap(newargz[1],".exe"); + for (i = 1; i < argc; i++) + newargz[i+1] = xstrdup(argv[i]); + newargz[argc+1] = NULL; +EOF + + cat >> $cwrappersource <> $cwrappersource <<"EOF" +} + +void * +xmalloc (size_t num) +{ + void * p = (void *) malloc (num); + if (!p) + lt_fatal ("Memory exhausted"); + + return p; +} + +char * +xstrdup (const char *string) +{ + return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL +; +} + +char * +basename (const char *name) +{ + const char *base; + +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + /* Skip over the disk name in MSDOS pathnames. */ + if (isalpha (name[0]) && name[1] == ':') + name += 2; +#endif + + for (base = name; *name; name++) + if (IS_DIR_SEPARATOR (*name)) + base = name + 1; + return (char *) base; +} + +char * +fnqualify(const char *path) +{ + size_t size; + char *p; + char tmp[LT_PATHMAX + 1]; + + assert(path != NULL); + + /* Is it qualified already? */ +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + if (isalpha (path[0]) && path[1] == ':') + return xstrdup (path); +#endif + if (IS_DIR_SEPARATOR (path[0])) + return xstrdup (path); + + /* prepend the current directory */ + /* doesn't handle '~' */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal ("getcwd failed"); + size = strlen(tmp) + 1 + strlen(path) + 1; /* +2 for '/' and '\0' */ + p = XMALLOC(char, size); + sprintf(p, "%s%c%s", tmp, DIR_SEPARATOR, path); + return p; +} + +char * +strendzap(char *str, const char *pat) +{ + size_t len, patlen; + + assert(str != NULL); + assert(pat != NULL); + + len = strlen(str); + patlen = strlen(pat); + + if (patlen <= len) + { + str += len - patlen; + if (strcmp(str, pat) == 0) + *str = '\0'; + } + return str; +} + +static void +lt_error_core (int exit_status, const char * mode, + const char * message, va_list ap) +{ + fprintf (stderr, "%s: %s: ", program_name, mode); + vfprintf (stderr, message, ap); + fprintf (stderr, ".\n"); + + if (exit_status >= 0) + exit (exit_status); +} + +void +lt_fatal (const char *message, ...) +{ + va_list ap; + va_start (ap, message); + lt_error_core (EXIT_FAILURE, "FATAL", message, ap); + va_end (ap); +} +EOF + # we should really use a build-platform specific compiler + # here, but OTOH, the wrappers (shell script and this C one) + # are only useful if you want to execute the "real" binary. + # Since the "real" binary is built for $host, then this + # wrapper might as well be built for $host, too. + $run $LTCC -s -o $cwrapper $cwrappersource + ;; + esac + $rm $output + trap "$rm $output; exit $EXIT_FAILURE" 1 2 15 + + $echo > $output "\ +#! $SHELL + +# $output - temporary wrapper script for $objdir/$outputname +# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='${SED} -e 1s/^X//' +sed_quote_subst='$sed_quote_subst' + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +if test \"\${CDPATH+set}\" = set; then CDPATH=:; export CDPATH; fi + +relink_command=\"$relink_command\" + +# This environment variable determines our operation mode. +if test \"\$libtool_install_magic\" = \"$magic\"; then + # install mode needs the following variable: + notinst_deplibs='$notinst_deplibs' +else + # When we are sourced in execute mode, \$file and \$echo are already set. + if test \"\$libtool_execute_magic\" != \"$magic\"; then + echo=\"$qecho\" + file=\"\$0\" + # Make sure echo works. + if test \"X\$1\" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift + elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then + # Yippee, \$echo works! + : + else + # Restart under the correct shell, and then maybe \$echo will work. + exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} + fi + fi\ +" + $echo >> $output "\ + + # Find the directory that this script lives in. + thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` + test \"x\$thisdir\" = \"x\$file\" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` + while test -n \"\$file\"; do + destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` + + # If there was a directory component, then change thisdir. + if test \"x\$destdir\" != \"x\$file\"; then + case \"\$destdir\" in + [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; + *) thisdir=\"\$thisdir/\$destdir\" ;; + esac + fi + + file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` + done + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" +" + + if test "$fast_install" = yes; then + $echo >> $output "\ + program=lt-'$outputname'$exeext + progdir=\"\$thisdir/$objdir\" + + if test ! -f \"\$progdir/\$program\" || \\ + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ + test \"X\$file\" != \"X\$progdir/\$program\"; }; then + + file=\"\$\$-\$program\" + + if test ! -d \"\$progdir\"; then + $mkdir \"\$progdir\" + else + $rm \"\$progdir/\$file\" + fi" + + $echo >> $output "\ + + # relink executable if necessary + if test -n \"\$relink_command\"; then + if relink_command_output=\`eval \$relink_command 2>&1\`; then : + else + $echo \"\$relink_command_output\" >&2 + $rm \"\$progdir/\$file\" + exit $EXIT_FAILURE + fi + fi + + $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || + { $rm \"\$progdir/\$program\"; + $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; } + $rm \"\$progdir/\$file\" + fi" + else + $echo >> $output "\ + program='$outputname' + progdir=\"\$thisdir/$objdir\" +" + fi + + $echo >> $output "\ + + if test -f \"\$progdir/\$program\"; then" + + # Export our shlibpath_var if we have one. + if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $echo >> $output "\ + # Add our own library path to $shlibpath_var + $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" + + # Some systems cannot cope with colon-terminated $shlibpath_var + # The second colon is a workaround for a bug in BeOS R4 sed + $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` + + export $shlibpath_var +" + fi + + # fixup the dll searchpath if we need to. + if test -n "$dllsearchpath"; then + $echo >> $output "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH +" + fi + + $echo >> $output "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. +" + case $host in + # Backslashes separate directories on plain windows + *-*-mingw | *-*-os2*) + $echo >> $output "\ + exec \$progdir\\\\\$program \${1+\"\$@\"} +" + ;; + + *) + $echo >> $output "\ + exec \$progdir/\$program \${1+\"\$@\"} +" + ;; + esac + $echo >> $output "\ + \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" + exit $EXIT_FAILURE + fi + else + # The program doesn't exist. + \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2 + \$echo \"This script is just a wrapper for \$program.\" 1>&2 + $echo \"See the $PACKAGE documentation for more information.\" 1>&2 + exit $EXIT_FAILURE + fi +fi\ +" + chmod +x $output + fi + exit $EXIT_SUCCESS + ;; + esac + + # See if we need to build an old-fashioned archive. + for oldlib in $oldlibs; do + + if test "$build_libtool_libs" = convenience; then + oldobjs="$libobjs_save" + addlibs="$convenience" + build_libtool_libs=no + else + if test "$build_libtool_libs" = module; then + oldobjs="$libobjs_save" + build_libtool_libs=no + else + oldobjs="$old_deplibs $non_pic_objects" + fi + addlibs="$old_convenience" + fi + + if test -n "$addlibs"; then + gentop="$output_objdir/${outputname}x" + $show "${rm}r $gentop" + $run ${rm}r "$gentop" + $show "$mkdir $gentop" + $run $mkdir "$gentop" + status=$? + if test "$status" -ne 0 && test ! -d "$gentop"; then + exit $status + fi + generated="$generated $gentop" + + # Add in members from convenience archives. + for xlib in $addlibs; do + # Extract the objects. + case $xlib in + [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; + *) xabs=`pwd`"/$xlib" ;; + esac + xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` + xdir="$gentop/$xlib" + + $show "${rm}r $xdir" + $run ${rm}r "$xdir" + $show "$mkdir $xdir" + $run $mkdir "$xdir" + status=$? + if test "$status" -ne 0 && test ! -d "$xdir"; then + exit $status + fi + # We will extract separately just the conflicting names and we will no + # longer touch any unique names. It is faster to leave these extract + # automatically by $AR in one run. + $show "(cd $xdir && $AR x $xabs)" + $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? + if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then + : + else + $echo "$modename: warning: object name conflicts; renaming object files" 1>&2 + $echo "$modename: warning: to ensure that they will not overwrite" 1>&2 + $AR t "$xabs" | sort | uniq -cd | while read -r count name + do + i=1 + while test "$i" -le "$count" + do + # Put our $i before any first dot (extension) + # Never overwrite any file + name_to="$name" + while test "X$name_to" = "X$name" || test -f "$xdir/$name_to" + do + name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"` + done + $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')" + $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $? + i=`expr $i + 1` + done + done + fi + + oldobjs="$oldobjs "`find $xdir -name \*.${objext} -print -o -name \*.lo -print | $NL2SP` + done + fi + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then + cmds=$old_archive_from_new_cmds + else + eval cmds=\"$old_archive_cmds\" + + if len=`expr "X$cmds" : ".*"` && + test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then + cmds=$old_archive_cmds + else + # the command line is too long to link in one step, link in parts + $echo "using piecewise archive linking..." + save_RANLIB=$RANLIB + RANLIB=: + objlist= + concat_cmds= + save_oldobjs=$oldobjs + # GNU ar 2.10+ was changed to match POSIX; thus no paths are + # encoded into archives. This makes 'ar r' malfunction in + # this piecewise linking case whenever conflicting object + # names appear in distinct ar calls; check, warn and compensate. + if (for obj in $save_oldobjs + do + $echo "X$obj" | $Xsed -e 's%^.*/%%' + done | sort | sort -uc >/dev/null 2>&1); then + : + else + $echo "$modename: warning: object name conflicts; overriding AR_FLAGS to 'cq'" 1>&2 + $echo "$modename: warning: to ensure that POSIX-compatible ar will work" 1>&2 + AR_FLAGS=cq + fi + # Is there a better way of finding the last object in the list? + for obj in $save_oldobjs + do + last_oldobj=$obj + done + for obj in $save_oldobjs + do + oldobjs="$objlist $obj" + objlist="$objlist $obj" + eval test_cmds=\"$old_archive_cmds\" + if len=`expr "X$test_cmds" : ".*"` && + test "$len" -le "$max_cmd_len"; then + : + else + # the above command should be used before it gets too long + oldobjs=$objlist + if test "$obj" = "$last_oldobj" ; then + RANLIB=$save_RANLIB + fi + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" + objlist= + fi + done + RANLIB=$save_RANLIB + oldobjs=$objlist + if test "X$oldobjs" = "X" ; then + eval cmds=\"\$concat_cmds\" + else + eval cmds=\"\$concat_cmds~\$old_archive_cmds\" + fi + fi + fi + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + eval cmd=\"$cmd\" + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + done + + if test -n "$generated"; then + $show "${rm}r$generated" + $run ${rm}r$generated + fi + + # Now create the libtool archive. + case $output in + *.la) + old_library= + test "$build_old_libs" = yes && old_library="$libname.$libext" + $show "creating $output" + + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` + relink_command="$var=\"$var_value\"; export $var; $relink_command" + fi + done + # Quote the link command for shipping. + relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" + relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` + if test "$hardcode_automatic" = yes ; then + relink_command= + fi + + + # Only create the output if not a dry run. + if test -z "$run"; then + for installed in no yes; do + if test "$installed" = yes; then + if test -z "$install_libdir"; then + break + fi + output="$output_objdir/$outputname"i + # Replace all uninstalled libtool libraries with the installed ones + newdependency_libs= + for deplib in $dependency_libs; do + case $deplib in + *.la) + name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'` + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + if test -z "$libdir"; then + $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 + exit $EXIT_FAILURE + fi + newdependency_libs="$newdependency_libs $libdir/$name" + ;; + *) newdependency_libs="$newdependency_libs $deplib" ;; + esac + done + dependency_libs="$newdependency_libs" + newdlfiles= + for lib in $dlfiles; do + name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + if test -z "$libdir"; then + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + exit $EXIT_FAILURE + fi + newdlfiles="$newdlfiles $libdir/$name" + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + if test -z "$libdir"; then + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + exit $EXIT_FAILURE + fi + newdlprefiles="$newdlprefiles $libdir/$name" + done + dlprefiles="$newdlprefiles" + else + newdlfiles= + for lib in $dlfiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + newdlfiles="$newdlfiles $abs" + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + newdlprefiles="$newdlprefiles $abs" + done + dlprefiles="$newdlprefiles" + fi + $rm $output + # place dlname in correct position for cygwin + tdlname=$dlname + case $host,$output,$installed,$module,$dlname in + *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; + esac + $echo > $output "\ +# $outputname - a libtool library file +# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='$tdlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Libraries that this one depends upon. +dependency_libs='$dependency_libs' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Is this an already installed library? +installed=$installed + +# Should we warn about portability when linking against -modules? +shouldnotlink=$module + +# Files to dlopen/dlpreopen +dlopen='$dlfiles' +dlpreopen='$dlprefiles' + +# Directory that this library needs to be installed in: +libdir='$install_libdir'" + if test "$installed" = no && test "$need_relink" = yes; then + $echo >> $output "\ +relink_command=\"$relink_command\"" + fi + done + fi + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" + $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $? + ;; + esac + exit $EXIT_SUCCESS + ;; + + # libtool install mode + install) + modename="$modename: install" + + # There may be an optional sh(1) argument at the beginning of + # install_prog (especially on Windows NT). + if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || + # Allow the use of GNU shtool's install command. + $echo "X$nonopt" | $Xsed | grep shtool > /dev/null; then + # Aesthetically quote it. + arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + install_prog="$arg " + arg="$1" + shift + else + install_prog= + arg="$nonopt" + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + install_prog="$install_prog$arg" + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir=no + stripme= + for arg + do + if test -n "$dest"; then + files="$files $dest" + dest="$arg" + continue + fi + + case $arg in + -d) isdir=yes ;; + -f) prev="-f" ;; + -g) prev="-g" ;; + -m) prev="-m" ;; + -o) prev="-o" ;; + -s) + stripme=" -s" + continue + ;; + -*) ;; + + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + prev= + else + dest="$arg" + continue + fi + ;; + esac + + # Aesthetically quote the argument. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + install_prog="$install_prog $arg" + done + + if test -z "$install_prog"; then + $echo "$modename: you must specify an install program" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + if test -n "$prev"; then + $echo "$modename: the \`$prev' option requires an argument" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + if test -z "$files"; then + if test -z "$dest"; then + $echo "$modename: no file or destination specified" 1>&2 + else + $echo "$modename: you must specify a destination" 1>&2 + fi + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Strip any trailing slash from the destination. + dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=yes + if test "$isdir" = yes; then + destdir="$dest" + destname= + else + destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` + test "X$destdir" = "X$dest" && destdir=. + destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` + + # Not a directory, so check to see that there is only one file specified. + set dummy $files + if test "$#" -gt 2; then + $echo "$modename: \`$dest' is not a directory" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + fi + case $destdir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + for file in $files; do + case $file in + *.lo) ;; + *) + $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + ;; + esac + done + ;; + esac + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do + + # Do each installation. + case $file in + *.$libext) + # Do the static libraries later. + staticlibs="$staticlibs $file" + ;; + + *.la) + # Check to see that this really is a libtool archive. + if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + else + $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + library_names= + old_library= + relink_command= + # If there is no directory component, then add one. + case $file in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) current_libdirs="$current_libdirs $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) future_libdirs="$future_libdirs $libdir" ;; + esac + fi + + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/ + test "X$dir" = "X$file/" && dir= + dir="$dir$objdir" + + if test -n "$relink_command"; then + # Determine the prefix the user has applied to our future dir. + inst_prefix_dir=`$echo "$destdir" | $SED "s%$libdir\$%%"` + + # Don't allow the user to place us outside of our expected + # location b/c this prevents finding dependent libraries that + # are installed to the same prefix. + # At present, this check doesn't affect windows .dll's that + # are installed into $libdir/../bin (currently, that works fine) + # but it's something to keep an eye on. + if test "$inst_prefix_dir" = "$destdir"; then + $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2 + exit $EXIT_FAILURE + fi + + if test -n "$inst_prefix_dir"; then + # Stick the inst_prefix_dir data into the link command. + relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` + else + relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%%"` + fi + + $echo "$modename: warning: relinking \`$file'" 1>&2 + $show "$relink_command" + if $run eval "$relink_command"; then : + else + $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 + exit $EXIT_FAILURE + fi + fi + + # See the names of the shared library. + set dummy $library_names + if test -n "$2"; then + realname="$2" + shift + shift + + srcname="$realname" + test -n "$relink_command" && srcname="$realname"T + + # Install the shared library and build the symlinks. + $show "$install_prog $dir/$srcname $destdir/$realname" + $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $? + if test -n "$stripme" && test -n "$striplib"; then + $show "$striplib $destdir/$realname" + $run eval "$striplib $destdir/$realname" || exit $? + fi + + if test "$#" -gt 0; then + # Delete the old symlinks, and create new ones. + for linkname + do + if test "$linkname" != "$realname"; then + $show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" + $run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" + fi + done + fi + + # Do each command in the postinstall commands. + lib="$destdir/$realname" + cmds=$postinstall_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + + # Install the pseudo-library for information purposes. + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + instname="$dir/$name"i + $show "$install_prog $instname $destdir/$name" + $run eval "$install_prog $instname $destdir/$name" || exit $? + + # Maybe install the static library, too. + test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" + ;; + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + destfile="$destdir/$destfile" + fi + + # Deduce the name of the destination old-style object file. + case $destfile in + *.lo) + staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` + ;; + *.$objext) + staticdest="$destfile" + destfile= + ;; + *) + $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + # Install the libtool object if requested. + if test -n "$destfile"; then + $show "$install_prog $file $destfile" + $run eval "$install_prog $file $destfile" || exit $? + fi + + # Install the old object if enabled. + if test "$build_old_libs" = yes; then + # Deduce the name of the old-style object file. + staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` + + $show "$install_prog $staticobj $staticdest" + $run eval "$install_prog \$staticobj \$staticdest" || exit $? + fi + exit $EXIT_SUCCESS + ;; + + *) + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + destfile="$destdir/$destfile" + fi + + # If the file is missing, and there is a .exe on the end, strip it + # because it is most likely a libtool script we actually want to + # install + stripped_ext="" + case $file in + *.exe) + if test ! -f "$file"; then + file=`$echo $file|${SED} 's,.exe$,,'` + stripped_ext=".exe" + fi + ;; + esac + + # Do a test to see if this is really a libtool program. + case $host in + *cygwin*|*mingw*) + wrapper=`$echo $file | ${SED} -e 's,.exe$,,'` + ;; + *) + wrapper=$file + ;; + esac + if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then + notinst_deplibs= + relink_command= + + # To insure that "foo" is sourced, and not "foo.exe", + # finese the cygwin/MSYS system by explicitly sourcing "foo." + # which disallows the automatic-append-.exe behavior. + case $build in + *cygwin* | *mingw*) wrapperdot=${wrapper}. ;; + *) wrapperdot=${wrapper} ;; + esac + # If there is no directory component, then add one. + case $file in + */* | *\\*) . ${wrapperdot} ;; + *) . ./${wrapperdot} ;; + esac + + # Check the variables that should have been set. + if test -z "$notinst_deplibs"; then + $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2 + exit $EXIT_FAILURE + fi + + finalize=yes + for lib in $notinst_deplibs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + # If there is no directory component, then add one. + case $lib in + */* | *\\*) . $lib ;; + *) . ./$lib ;; + esac + fi + libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test + if test -n "$libdir" && test ! -f "$libfile"; then + $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 + finalize=no + fi + done + + relink_command= + # To insure that "foo" is sourced, and not "foo.exe", + # finese the cygwin/MSYS system by explicitly sourcing "foo." + # which disallows the automatic-append-.exe behavior. + case $build in + *cygwin* | *mingw*) wrapperdot=${wrapper}. ;; + *) wrapperdot=${wrapper} ;; + esac + # If there is no directory component, then add one. + case $file in + */* | *\\*) . ${wrapperdot} ;; + *) . ./${wrapperdot} ;; + esac + + outputname= + if test "$fast_install" = no && test -n "$relink_command"; then + if test "$finalize" = yes && test -z "$run"; then + tmpdir="/tmp" + test -n "$TMPDIR" && tmpdir="$TMPDIR" + tmpdir="$tmpdir/libtool-$$" + save_umask=`umask` + umask 0077 + if $mkdir "$tmpdir"; then + umask $save_umask + else + umask $save_umask + $echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2 + continue + fi + file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'` + outputname="$tmpdir/$file" + # Replace the output file specification. + relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` + + $show "$relink_command" + if $run eval "$relink_command"; then : + else + $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 + ${rm}r "$tmpdir" + continue + fi + file="$outputname" + else + $echo "$modename: warning: cannot relink \`$file'" 1>&2 + fi + else + # Install the binary that we compiled earlier. + file=`$echo "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` + fi + fi + + # remove .exe since cygwin /usr/bin/install will append another + # one anyways + case $install_prog,$host in + */usr/bin/install*,*cygwin*) + case $file:$destfile in + *.exe:*.exe) + # this is ok + ;; + *.exe:*) + destfile=$destfile.exe + ;; + *:*.exe) + destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'` + ;; + esac + ;; + esac + $show "$install_prog$stripme $file $destfile" + $run eval "$install_prog\$stripme \$file \$destfile" || exit $? + test -n "$outputname" && ${rm}r "$tmpdir" + ;; + esac + done + + for file in $staticlibs; do + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + + # Set up the ranlib parameters. + oldlib="$destdir/$name" + + $show "$install_prog $file $oldlib" + $run eval "$install_prog \$file \$oldlib" || exit $? + + if test -n "$stripme" && test -n "$old_striplib"; then + $show "$old_striplib $oldlib" + $run eval "$old_striplib $oldlib" || exit $? + fi + + # Do each command in the postinstall commands. + cmds=$old_postinstall_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + done + + if test -n "$future_libdirs"; then + $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 + fi + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + test -n "$run" && current_libdirs=" -n$current_libdirs" + exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' + else + exit $EXIT_SUCCESS + fi + ;; + + # libtool finish mode + finish) + modename="$modename: finish" + libdirs="$nonopt" + admincmds= + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for dir + do + libdirs="$libdirs $dir" + done + + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + cmds=$finish_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || admincmds="$admincmds + $cmd" + done + IFS="$save_ifs" + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $run eval "$cmds" || admincmds="$admincmds + $cmds" + fi + done + fi + + # Exit here if they wanted silent mode. + test "$show" = : && exit $EXIT_SUCCESS + + $echo "----------------------------------------------------------------------" + $echo "Libraries have been installed in:" + for libdir in $libdirs; do + $echo " $libdir" + done + $echo + $echo "If you ever happen to want to link against installed libraries" + $echo "in a given directory, LIBDIR, you must either use libtool, and" + $echo "specify the full pathname of the library, or use the \`-LLIBDIR'" + $echo "flag during linking and do at least one of the following:" + if test -n "$shlibpath_var"; then + $echo " - add LIBDIR to the \`$shlibpath_var' environment variable" + $echo " during execution" + fi + if test -n "$runpath_var"; then + $echo " - add LIBDIR to the \`$runpath_var' environment variable" + $echo " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" + + $echo " - use the \`$flag' linker flag" + fi + if test -n "$admincmds"; then + $echo " - have your system administrator run these commands:$admincmds" + fi + if test -f /etc/ld.so.conf; then + $echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" + fi + $echo + $echo "See any operating system documentation about shared libraries for" + $echo "more information, such as the ld(1) and ld.so(8) manual pages." + $echo "----------------------------------------------------------------------" + exit $EXIT_SUCCESS + ;; + + # libtool execute mode + execute) + modename="$modename: execute" + + # The first argument is the command name. + cmd="$nonopt" + if test -z "$cmd"; then + $echo "$modename: you must specify a COMMAND" 1>&2 + $echo "$help" + exit $EXIT_FAILURE + fi + + # Handle -dlopen flags immediately. + for file in $execute_dlfiles; do + if test ! -f "$file"; then + $echo "$modename: \`$file' is not a file" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + dir= + case $file in + *.la) + # Check to see that this really is a libtool archive. + if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + else + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Read the libtool library. + dlname= + library_names= + + # If there is no directory component, then add one. + case $file in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" + continue + fi + + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$file" && dir=. + + if test -f "$dir/$objdir/$dlname"; then + dir="$dir/$objdir" + else + $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 + exit $EXIT_FAILURE + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$file" && dir=. + ;; + + *) + $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 + continue + ;; + esac + + # Get the absolute pathname. + absdir=`cd "$dir" && pwd` + test -n "$absdir" && dir="$absdir" + + # Now add the directory to shlibpath_var. + if eval "test -z \"\$$shlibpath_var\""; then + eval "$shlibpath_var=\"\$dir\"" + else + eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" + fi + done + + # This variable tells wrapper scripts just to set shlibpath_var + # rather than running their programs. + libtool_execute_magic="$magic" + + # Check if any of the arguments is a wrapper script. + args= + for file + do + case $file in + -*) ;; + *) + # Do a test to see if this is really a libtool program. + if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + # If there is no directory component, then add one. + case $file in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Transform arg to wrapped name. + file="$progdir/$program" + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` + args="$args \"$file\"" + done + + if test -z "$run"; then + if test -n "$shlibpath_var"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + fi + + # Restore saved environment variables + if test "${save_LC_ALL+set}" = set; then + LC_ALL="$save_LC_ALL"; export LC_ALL + fi + if test "${save_LANG+set}" = set; then + LANG="$save_LANG"; export LANG + fi + + # Now prepare to actually exec the command. + exec_cmd="\$cmd$args" + else + # Display what would be done. + if test -n "$shlibpath_var"; then + eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\"" + $echo "export $shlibpath_var" + fi + $echo "$cmd$args" + exit $EXIT_SUCCESS + fi + ;; + + # libtool clean and uninstall mode + clean | uninstall) + modename="$modename: $mode" + rm="$nonopt" + files= + rmforce= + exit_status=0 + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + for arg + do + case $arg in + -f) rm="$rm $arg"; rmforce=yes ;; + -*) rm="$rm $arg" ;; + *) files="$files $arg" ;; + esac + done + + if test -z "$rm"; then + $echo "$modename: you must specify an RM program" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + rmdirs= + + origobjdir="$objdir" + for file in $files; do + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + if test "X$dir" = "X$file"; then + dir=. + objdir="$origobjdir" + else + objdir="$dir/$origobjdir" + fi + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + test "$mode" = uninstall && objdir="$dir" + + # Remember objdir for removal later, being careful to avoid duplicates + if test "$mode" = clean; then + case " $rmdirs " in + *" $objdir "*) ;; + *) rmdirs="$rmdirs $objdir" ;; + esac + fi + + # Don't error if the file doesn't exist and rm -f was used. + if (test -L "$file") >/dev/null 2>&1 \ + || (test -h "$file") >/dev/null 2>&1 \ + || test -f "$file"; then + : + elif test -d "$file"; then + exit_status=1 + continue + elif test "$rmforce" = yes; then + continue + fi + + rmfiles="$file" + + case $name in + *.la) + # Possibly a libtool archive, so verify it. + if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + . $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + rmfiles="$rmfiles $objdir/$n" + done + test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" + test "$mode" = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" + + if test "$mode" = uninstall; then + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + cmds=$postuninstall_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" + if test "$?" -ne 0 && test "$rmforce" != yes; then + exit_status=1 + fi + done + IFS="$save_ifs" + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + cmds=$old_postuninstall_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" + if test "$?" -ne 0 && test "$rmforce" != yes; then + exit_status=1 + fi + done + IFS="$save_ifs" + fi + # FIXME: should reinstall the best remaining shared library. + fi + fi + ;; + + *.lo) + # Possibly a libtool object, so verify it. + if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + + # Read the .lo file + . $dir/$name + + # Add PIC object to the list of files to remove. + if test -n "$pic_object" \ + && test "$pic_object" != none; then + rmfiles="$rmfiles $dir/$pic_object" + fi + + # Add non-PIC object to the list of files to remove. + if test -n "$non_pic_object" \ + && test "$non_pic_object" != none; then + rmfiles="$rmfiles $dir/$non_pic_object" + fi + fi + ;; + + *) + if test "$mode" = clean ; then + noexename=$name + case $file in + *.exe) + file=`$echo $file|${SED} 's,.exe$,,'` + noexename=`$echo $name|${SED} 's,.exe$,,'` + # $file with .exe has already been added to rmfiles, + # add $file without .exe + rmfiles="$rmfiles $file" + ;; + esac + # Do a test to see if this is a libtool program. + if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + relink_command= + . $dir/$noexename + + # note $name still contains .exe if it was in $file originally + # as does the version of $file that was added into $rmfiles + rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" + if test "$fast_install" = yes && test -n "$relink_command"; then + rmfiles="$rmfiles $objdir/lt-$name" + fi + if test "X$noexename" != "X$name" ; then + rmfiles="$rmfiles $objdir/lt-${noexename}.c" + fi + fi + fi + ;; + esac + $show "$rm $rmfiles" + $run $rm $rmfiles || exit_status=1 + done + objdir="$origobjdir" + + # Try to remove the ${objdir}s in the directories where we deleted files + for dir in $rmdirs; do + if test -d "$dir"; then + $show "rmdir $dir" + $run rmdir $dir >/dev/null 2>&1 + fi + done + + exit $exit_status + ;; + + "") + $echo "$modename: you must specify a MODE" 1>&2 + $echo "$generic_help" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + if test -z "$exec_cmd"; then + $echo "$modename: invalid operation mode \`$mode'" 1>&2 + $echo "$generic_help" 1>&2 + exit $EXIT_FAILURE + fi +fi # test -z "$show_help" + +if test -n "$exec_cmd"; then + eval exec $exec_cmd + exit $EXIT_FAILURE +fi + +# We need to display help for each of the modes. +case $mode in +"") $echo \ +"Usage: $modename [OPTION]... [MODE-ARG]... + +Provide generalized library-building support services. + + --config show all configuration variables + --debug enable verbose shell tracing +-n, --dry-run display commands without modifying any files + --features display basic configuration information and exit + --finish same as \`--mode=finish' + --help display this help message and exit + --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] + --quiet same as \`--silent' + --silent don't print informational messages + --tag=TAG use configuration variables from tag TAG + --version print version information + +MODE must be one of the following: + + clean remove files from the build directory + compile compile a source file into a libtool object + execute automatically set library path, then run a program + finish complete the installation of libtool libraries + install install libraries or executables + link create a library or an executable + uninstall remove libraries from an installed directory + +MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for +a more detailed description of MODE. + +Report bugs to ." + exit $EXIT_SUCCESS + ;; + +clean) + $echo \ +"Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE... + +Remove files from the build directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, object or program, all the files associated +with it are deleted. Otherwise, only FILE itself is deleted using RM." + ;; + +compile) + $echo \ +"Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +This mode accepts the following additional options: + + -o OUTPUT-FILE set the output file name to OUTPUT-FILE + -prefer-pic try to building PIC objects only + -prefer-non-pic try to building non-PIC objects only + -static always build a \`.o' file suitable for static linking + +COMPILE-COMMAND is a command to be used in creating a \`standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix \`.c' with the +library object suffix, \`.lo'." + ;; + +execute) + $echo \ +"Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]... + +Automatically set library path, then run a program. + +This mode accepts the following additional options: + + -dlopen FILE add the directory containing FILE to the library path + +This mode sets the library path environment variable according to \`-dlopen' +flags. + +If any of the ARGS are libtool executable wrappers, then they are translated +into their corresponding uninstalled binary, and any of their required library +directories are added to the library path. + +Then, COMMAND is executed, with ARGS as arguments." + ;; + +finish) + $echo \ +"Usage: $modename [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges. Use +the \`--dry-run' option if you just want to see what would be executed." + ;; + +install) + $echo \ +"Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command. The first component should be +either the \`install' or \`cp' program. + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; + +link) + $echo \ +"Usage: $modename [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + + -all-static do not do any dynamic linking at all + -avoid-version do not add a version suffix if possible + -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime + -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -export-symbols SYMFILE + try to export only the symbols listed in SYMFILE + -export-symbols-regex REGEX + try to export only the symbols matching REGEX + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -module build a library that can dlopened + -no-fast-install disable the fast-install mode + -no-install link a not-installable executable + -no-undefined declare that a library does not refer to external symbols + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -objectlist FILE Use a list of object files found in FILE to specify objects + -precious-files-regex REGEX + don't remove output files matching REGEX + -release RELEASE specify package release information + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries + -static do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + +All other options (arguments beginning with \`-') are ignored. + +Every other argument is treated as a filename. Files ending in \`.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in \`.la', then a libtool library is created, +only library objects (\`.lo' files) may be specified, and \`-rpath' is +required, except when creating a convenience library. + +If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created +using \`ar' and \`ranlib', or on Windows using \`lib'. + +If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file +is created, otherwise an executable program is created." + ;; + +uninstall) + $echo \ +"Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM." + ;; + +*) + $echo "$modename: invalid operation mode \`$mode'" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + ;; +esac + +$echo +$echo "Try \`$modename --help' for more information about other modes." + +exit $EXIT_SUCCESS + +# The TAGs below are defined such that we never get into a situation +# in which we disable both kinds of libraries. Given conflicting +# choices, we go for a static library, that is the most portable, +# since we can't tell whether shared libraries were disabled because +# the user asked for that or because the platform doesn't support +# them. This is particularly important on AIX, because we don't +# support having both static and shared libraries enabled at the same +# time on that platform, so we default to a shared-only configuration. +# If a disable-shared tag is given, we'll fallback to a static-only +# configuration. But we'll never go from static-only to shared-only. + +# ### BEGIN LIBTOOL TAG CONFIG: disable-shared +build_libtool_libs=no +build_old_libs=yes +# ### END LIBTOOL TAG CONFIG: disable-shared + +# ### BEGIN LIBTOOL TAG CONFIG: disable-static +build_old_libs=`case $build_libtool_libs in yes) $echo no;; *) $echo yes;; esac` +# ### END LIBTOOL TAG CONFIG: disable-static + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: diff --git a/blib-1.1.7/missing b/blib-1.1.7/missing new file mode 100755 index 0000000..fc54c64 --- /dev/null +++ b/blib-1.1.7/missing @@ -0,0 +1,336 @@ +#! /bin/sh +# Common stub for a few missing GNU programs while installing. +# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003 Free Software Foundation, Inc. +# Originally by Fran,cois Pinard , 1996. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +if test $# -eq 0; then + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 +fi + +run=: + +# In the cases where this matters, `missing' is being run in the +# srcdir already. +if test -f configure.ac; then + configure_ac=configure.ac +else + configure_ac=configure.in +fi + +case "$1" in +--run) + # Try to run requested program, and just exit if it succeeds. + run= + shift + "$@" && exit 0 + ;; +esac + +# If it does not exist, or fails to run (possibly an outdated version), +# try to emulate it. +case "$1" in + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an +error status if there is no known handling for PROGRAM. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + --run try to run the given command, and emulate it if it fails + +Supported PROGRAM values: + aclocal touch file \`aclocal.m4' + autoconf touch file \`configure' + autoheader touch file \`config.h.in' + automake touch all \`Makefile.in' files + bison create \`y.tab.[ch]', if possible, from existing .[ch] + flex create \`lex.yy.c', if possible, from existing .c + help2man touch the output file + lex create \`lex.yy.c', if possible, from existing .c + makeinfo touch the output file + tar try tar, gnutar, gtar, then tar without non-portable flags + yacc create \`y.tab.[ch]', if possible, from existing .[ch]" + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing 0.4 - GNU automake" + ;; + + -*) + echo 1>&2 "$0: Unknown \`$1' option" + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 + ;; + + aclocal*) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`acinclude.m4' or \`${configure_ac}'. You might want + to install the \`Automake' and \`Perl' packages. Grab them from + any GNU archive site." + touch aclocal.m4 + ;; + + autoconf) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`${configure_ac}'. You might want to install the + \`Autoconf' and \`GNU m4' packages. Grab them from any GNU + archive site." + touch configure + ;; + + autoheader) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`acconfig.h' or \`${configure_ac}'. You might want + to install the \`Autoconf' and \`GNU m4' packages. Grab them + from any GNU archive site." + files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` + test -z "$files" && files="config.h" + touch_files= + for f in $files; do + case "$f" in + *:*) touch_files="$touch_files "`echo "$f" | + sed -e 's/^[^:]*://' -e 's/:.*//'`;; + *) touch_files="$touch_files $f.in";; + esac + done + touch $touch_files + ;; + + automake*) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. + You might want to install the \`Automake' and \`Perl' packages. + Grab them from any GNU archive site." + find . -type f -name Makefile.am -print | + sed 's/\.am$/.in/' | + while read f; do touch "$f"; done + ;; + + autom4te) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is needed, and you do not seem to have it handy on your + system. You might have modified some files without having the + proper tools for further handling them. + You can get \`$1' as part of \`Autoconf' from any GNU + archive site." + + file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` + test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` + if test -f "$file"; then + touch $file + else + test -z "$file" || exec >$file + echo "#! /bin/sh" + echo "# Created by GNU Automake missing as a replacement of" + echo "# $ $@" + echo "exit 0" + chmod +x $file + exit 1 + fi + ;; + + bison|yacc) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.y' file. You may need the \`Bison' package + in order for those modifications to take effect. You can get + \`Bison' from any GNU archive site." + rm -f y.tab.c y.tab.h + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.y) + SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.c + fi + SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.h + fi + ;; + esac + fi + if [ ! -f y.tab.h ]; then + echo >y.tab.h + fi + if [ ! -f y.tab.c ]; then + echo 'main() { return 0; }' >y.tab.c + fi + ;; + + lex|flex) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.l' file. You may need the \`Flex' package + in order for those modifications to take effect. You can get + \`Flex' from any GNU archive site." + rm -f lex.yy.c + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.l) + SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" lex.yy.c + fi + ;; + esac + fi + if [ ! -f lex.yy.c ]; then + echo 'main() { return 0; }' >lex.yy.c + fi + ;; + + help2man) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a dependency of a manual page. You may need the + \`Help2man' package in order for those modifications to take + effect. You can get \`Help2man' from any GNU archive site." + + file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` + if test -z "$file"; then + file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` + fi + if [ -f "$file" ]; then + touch $file + else + test -z "$file" || exec >$file + echo ".ab help2man is required to generate this page" + exit 1 + fi + ;; + + makeinfo) + if test -z "$run" && (makeinfo --version) > /dev/null 2>&1; then + # We have makeinfo, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.texi' or \`.texinfo' file, or any other file + indirectly affecting the aspect of the manual. The spurious + call might also be the consequence of using a buggy \`make' (AIX, + DU, IRIX). You might want to install the \`Texinfo' package or + the \`GNU make' package. Grab either from any GNU archive site." + file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` + if test -z "$file"; then + file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` + file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` + fi + touch $file + ;; + + tar) + shift + if test -n "$run"; then + echo 1>&2 "ERROR: \`tar' requires --run" + exit 1 + fi + + # We have already tried tar in the generic part. + # Look for gnutar/gtar before invocation to avoid ugly error + # messages. + if (gnutar --version > /dev/null 2>&1); then + gnutar "$@" && exit 0 + fi + if (gtar --version > /dev/null 2>&1); then + gtar "$@" && exit 0 + fi + firstarg="$1" + if shift; then + case "$firstarg" in + *o*) + firstarg=`echo "$firstarg" | sed s/o//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + case "$firstarg" in + *h*) + firstarg=`echo "$firstarg" | sed s/h//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + fi + + echo 1>&2 "\ +WARNING: I can't seem to be able to run \`tar' with the given arguments. + You may want to install GNU tar or Free paxutils, or check the + command line arguments." + exit 1 + ;; + + *) + echo 1>&2 "\ +WARNING: \`$1' is needed, and you do not seem to have it handy on your + system. You might have modified some files without having the + proper tools for further handling them. Check the \`README' file, + it often tells you about the needed prerequisites for installing + this package. You may also peek at any GNU archive site, in case + some other package would contain this missing \`$1' program." + exit 1 + ;; +esac + +exit 0 diff --git a/blib-1.1.7/mkinstalldirs b/blib-1.1.7/mkinstalldirs new file mode 100755 index 0000000..d2d5f21 --- /dev/null +++ b/blib-1.1.7/mkinstalldirs @@ -0,0 +1,111 @@ +#! /bin/sh +# mkinstalldirs --- make directory hierarchy +# Author: Noah Friedman +# Created: 1993-05-16 +# Public domain + +errstatus=0 +dirmode="" + +usage="\ +Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..." + +# process command line arguments +while test $# -gt 0 ; do + case $1 in + -h | --help | --h*) # -h for help + echo "$usage" 1>&2 + exit 0 + ;; + -m) # -m PERM arg + shift + test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } + dirmode=$1 + shift + ;; + --) # stop option processing + shift + break + ;; + -*) # unknown option + echo "$usage" 1>&2 + exit 1 + ;; + *) # first non-opt arg + break + ;; + esac +done + +for file +do + if test -d "$file"; then + shift + else + break + fi +done + +case $# in + 0) exit 0 ;; +esac + +case $dirmode in + '') + if mkdir -p -- . 2>/dev/null; then + echo "mkdir -p -- $*" + exec mkdir -p -- "$@" + fi + ;; + *) + if mkdir -m "$dirmode" -p -- . 2>/dev/null; then + echo "mkdir -m $dirmode -p -- $*" + exec mkdir -m "$dirmode" -p -- "$@" + fi + ;; +esac + +for file +do + set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` + shift + + pathcomp= + for d + do + pathcomp="$pathcomp$d" + case $pathcomp in + -*) pathcomp=./$pathcomp ;; + esac + + if test ! -d "$pathcomp"; then + echo "mkdir $pathcomp" + + mkdir "$pathcomp" || lasterr=$? + + if test ! -d "$pathcomp"; then + errstatus=$lasterr + else + if test ! -z "$dirmode"; then + echo "chmod $dirmode $pathcomp" + lasterr="" + chmod "$dirmode" "$pathcomp" || lasterr=$? + + if test ! -z "$lasterr"; then + errstatus=$lasterr + fi + fi + fi + fi + + pathcomp="$pathcomp/" + done +done + +exit $errstatus + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# End: +# mkinstalldirs ends here diff --git a/blib-1.1.7/modules/Makefile.am b/blib-1.1.7/modules/Makefile.am new file mode 100644 index 0000000..9fd726a --- /dev/null +++ b/blib-1.1.7/modules/Makefile.am @@ -0,0 +1,84 @@ +## Makefile.am for blib/modules +## Process this file with automake to produce Makefile.in + +libdir = @MODULEPATH@ + +AM_CPPFLAGS = \ + $(CFLAGS) \ + -DG_DISABLE_DEPRECATED + +INCLUDES = \ + -I$(top_srcdir) \ + @GLIB_CFLAGS@ + +if BUILD_MODULES +lib_LTLIBRARIES = \ + libbbreakout.la \ + libbclock.la \ + libbcountdown.la \ + libbdebug.la \ + libbdropout.la \ + libbfire.la \ + libbmatrix.la \ + libbpacman.la \ + libbpong.la \ + libbproxy.la \ + libbpushline.la \ + libbqix.la \ + libbretris.la \ + libbsnake.la \ + libbtetris.la \ + libbtext.la \ + libbxxo.la +endif + +libbbreakout_la_SOURCES = bbreakout.c +libbbreakout_la_LDFLAGS = -avoid-version -module + +libbclock_la_SOURCES = bclock.c digits.h +libbclock_la_LDFLAGS = -avoid-version -module + +libbcountdown_la_SOURCES = bcountdown.c digits.h +libbcountdown_la_LDFLAGS = -avoid-version -module + +libbdebug_la_SOURCES = bdebug.c digits.h +libbdebug_la_LDFLAGS = -avoid-version -module + +libbfire_la_SOURCES = bfire.c +libbfire_la_LDFLAGS = -avoid-version -module + +libbdropout_la_SOURCES = bdropout.c +libbdropout_la_LDFLAGS = -avoid-version -module + +libbmatrix_la_SOURCES = bmatrix.c +libbmatrix_la_LDFLAGS = -avoid-version -module + +libbpacman_la_SOURCES = bpacman.c +libbpacman_la_LDFLAGS = -avoid-version -module + +libbpong_la_SOURCES = bpong.c digits.h +libbpong_la_LDFLAGS = -avoid-version -module + +libbproxy_la_SOURCES = bproxy.c +libbproxy_la_LDFLAGS = -avoid-version -module + +libbpushline_la_SOURCES = bpushline.c +libbpushline_la_LDFLAGS = -avoid-version -module + +libbqix_la_SOURCES = bqix.c +libbqix_la_LDFLAGS = -avoid-version -module + +libbretris_la_SOURCES = bretris.c +libbretris_la_LDFLAGS = -avoid-version -module + +libbsnake_la_SOURCES = bsnake.c +libbsnake_la_LDFLAGS = -avoid-version -module + +libbtetris_la_SOURCES = btetris.c +libbtetris_la_LDFLAGS = -avoid-version -module + +libbtext_la_SOURCES = btext.c +libbtext_la_LDFLAGS = -avoid-version -module + +libbxxo_la_SOURCES = bxxo.c +libbxxo_la_LDFLAGS = -avoid-version -module diff --git a/blib-1.1.7/modules/Makefile.in b/blib-1.1.7/modules/Makefile.in new file mode 100644 index 0000000..950347d --- /dev/null +++ b/blib-1.1.7/modules/Makefile.in @@ -0,0 +1,680 @@ +# Makefile.in generated by automake 1.7.9 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = .. + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +AA_LIBS = @AA_LIBS@ +AA_VIEW_TYPE = @AA_VIEW_TYPE@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BLIB_BINARY_AGE = @BLIB_BINARY_AGE@ +BLIB_INTERFACE_AGE = @BLIB_INTERFACE_AGE@ +BLIB_MAJOR_VERSION = @BLIB_MAJOR_VERSION@ +BLIB_MICRO_VERSION = @BLIB_MICRO_VERSION@ +BLIB_MINOR_VERSION = @BLIB_MINOR_VERSION@ +BLIB_VERSION = @BLIB_VERSION@ +BUILD_MODULES_FALSE = @BUILD_MODULES_FALSE@ +BUILD_MODULES_TRUE = @BUILD_MODULES_TRUE@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIR = @DATADIR@ +DB2HTML = @DB2HTML@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DIRECTFB_CFLAGS = @DIRECTFB_CFLAGS@ +DIRECTFB_LIBS = @DIRECTFB_LIBS@ +DIRECTFB_VIEW_TYPE = @DIRECTFB_VIEW_TYPE@ +ECHO = @ECHO@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ENABLE_GTK_DOC_FALSE = @ENABLE_GTK_DOC_FALSE@ +ENABLE_GTK_DOC_TRUE = @ENABLE_GTK_DOC_TRUE@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ +GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ +GLIB_LIBS = @GLIB_LIBS@ +GLIB_MKENUMS = @GLIB_MKENUMS@ +GOBJECT_QUERY = @GOBJECT_QUERY@ +GTKDOC = @GTKDOC@ +GTK_CFLAGS = @GTK_CFLAGS@ +GTK_LIBS = @GTK_LIBS@ +GTK_VIEW_TYPE = @GTK_VIEW_TYPE@ +HAVE_AA_FALSE = @HAVE_AA_FALSE@ +HAVE_AA_TRUE = @HAVE_AA_TRUE@ +HAVE_DIRECTFB_FALSE = @HAVE_DIRECTFB_FALSE@ +HAVE_DIRECTFB_TRUE = @HAVE_DIRECTFB_TRUE@ +HAVE_DOCBOOK_FALSE = @HAVE_DOCBOOK_FALSE@ +HAVE_DOCBOOK_TRUE = @HAVE_DOCBOOK_TRUE@ +HAVE_GTK_DOC = @HAVE_GTK_DOC@ +HAVE_GTK_DOC_FALSE = @HAVE_GTK_DOC_FALSE@ +HAVE_GTK_DOC_TRUE = @HAVE_GTK_DOC_TRUE@ +HAVE_GTK_FALSE = @HAVE_GTK_FALSE@ +HAVE_GTK_TRUE = @HAVE_GTK_TRUE@ +HAVE_PIXBUF_FALSE = @HAVE_PIXBUF_FALSE@ +HAVE_PIXBUF_TRUE = @HAVE_PIXBUF_TRUE@ +HTML_DIR = @HTML_DIR@ +INCLUDEDIR = @INCLUDEDIR@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_AGE = @LT_AGE@ +LT_CURRENT = @LT_CURRENT@ +LT_RELEASE = @LT_RELEASE@ +LT_REVISION = @LT_REVISION@ +MAINT = @MAINT@ +MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ +MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ +MAKEINFO = @MAKEINFO@ +MODULEPATH = @MODULEPATH@ +OBJEXT = @OBJEXT@ +OS_WIN32_FALSE = @OS_WIN32_FALSE@ +OS_WIN32_TRUE = @OS_WIN32_TRUE@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PIXBUF_VIEW_TYPE = @PIXBUF_VIEW_TYPE@ +PKG_CONFIG = @PKG_CONFIG@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +THEMEPATH = @THEMEPATH@ +VERSION = @VERSION@ +WIN32_CFLAGS = @WIN32_CFLAGS@ +WIN32_LIBS = @WIN32_LIBS@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_F77 = @ac_ct_F77@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ + +libdir = @MODULEPATH@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +AM_CPPFLAGS = \ + $(CFLAGS) \ + -DG_DISABLE_DEPRECATED + + +INCLUDES = \ + -I$(top_srcdir) \ + @GLIB_CFLAGS@ + + +@BUILD_MODULES_TRUE@lib_LTLIBRARIES = \ +@BUILD_MODULES_TRUE@ libbbreakout.la \ +@BUILD_MODULES_TRUE@ libbclock.la \ +@BUILD_MODULES_TRUE@ libbcountdown.la \ +@BUILD_MODULES_TRUE@ libbdebug.la \ +@BUILD_MODULES_TRUE@ libbdropout.la \ +@BUILD_MODULES_TRUE@ libbfire.la \ +@BUILD_MODULES_TRUE@ libbmatrix.la \ +@BUILD_MODULES_TRUE@ libbpacman.la \ +@BUILD_MODULES_TRUE@ libbpong.la \ +@BUILD_MODULES_TRUE@ libbproxy.la \ +@BUILD_MODULES_TRUE@ libbpushline.la \ +@BUILD_MODULES_TRUE@ libbqix.la \ +@BUILD_MODULES_TRUE@ libbretris.la \ +@BUILD_MODULES_TRUE@ libbsnake.la \ +@BUILD_MODULES_TRUE@ libbtetris.la \ +@BUILD_MODULES_TRUE@ libbtext.la \ +@BUILD_MODULES_TRUE@ libbxxo.la + + +libbbreakout_la_SOURCES = bbreakout.c +libbbreakout_la_LDFLAGS = -avoid-version -module + +libbclock_la_SOURCES = bclock.c digits.h +libbclock_la_LDFLAGS = -avoid-version -module + +libbcountdown_la_SOURCES = bcountdown.c digits.h +libbcountdown_la_LDFLAGS = -avoid-version -module + +libbdebug_la_SOURCES = bdebug.c digits.h +libbdebug_la_LDFLAGS = -avoid-version -module + +libbfire_la_SOURCES = bfire.c +libbfire_la_LDFLAGS = -avoid-version -module + +libbdropout_la_SOURCES = bdropout.c +libbdropout_la_LDFLAGS = -avoid-version -module + +libbmatrix_la_SOURCES = bmatrix.c +libbmatrix_la_LDFLAGS = -avoid-version -module + +libbpacman_la_SOURCES = bpacman.c +libbpacman_la_LDFLAGS = -avoid-version -module + +libbpong_la_SOURCES = bpong.c digits.h +libbpong_la_LDFLAGS = -avoid-version -module + +libbproxy_la_SOURCES = bproxy.c +libbproxy_la_LDFLAGS = -avoid-version -module + +libbpushline_la_SOURCES = bpushline.c +libbpushline_la_LDFLAGS = -avoid-version -module + +libbqix_la_SOURCES = bqix.c +libbqix_la_LDFLAGS = -avoid-version -module + +libbretris_la_SOURCES = bretris.c +libbretris_la_LDFLAGS = -avoid-version -module + +libbsnake_la_SOURCES = bsnake.c +libbsnake_la_LDFLAGS = -avoid-version -module + +libbtetris_la_SOURCES = btetris.c +libbtetris_la_LDFLAGS = -avoid-version -module + +libbtext_la_SOURCES = btext.c +libbtext_la_LDFLAGS = -avoid-version -module + +libbxxo_la_SOURCES = bxxo.c +libbxxo_la_LDFLAGS = -avoid-version -module +subdir = modules +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +LTLIBRARIES = $(lib_LTLIBRARIES) + +libbbreakout_la_LIBADD = +am_libbbreakout_la_OBJECTS = bbreakout.lo +libbbreakout_la_OBJECTS = $(am_libbbreakout_la_OBJECTS) +libbclock_la_LIBADD = +am_libbclock_la_OBJECTS = bclock.lo +libbclock_la_OBJECTS = $(am_libbclock_la_OBJECTS) +libbcountdown_la_LIBADD = +am_libbcountdown_la_OBJECTS = bcountdown.lo +libbcountdown_la_OBJECTS = $(am_libbcountdown_la_OBJECTS) +libbdebug_la_LIBADD = +am_libbdebug_la_OBJECTS = bdebug.lo +libbdebug_la_OBJECTS = $(am_libbdebug_la_OBJECTS) +libbdropout_la_LIBADD = +am_libbdropout_la_OBJECTS = bdropout.lo +libbdropout_la_OBJECTS = $(am_libbdropout_la_OBJECTS) +libbfire_la_LIBADD = +am_libbfire_la_OBJECTS = bfire.lo +libbfire_la_OBJECTS = $(am_libbfire_la_OBJECTS) +libbmatrix_la_LIBADD = +am_libbmatrix_la_OBJECTS = bmatrix.lo +libbmatrix_la_OBJECTS = $(am_libbmatrix_la_OBJECTS) +libbpacman_la_LIBADD = +am_libbpacman_la_OBJECTS = bpacman.lo +libbpacman_la_OBJECTS = $(am_libbpacman_la_OBJECTS) +libbpong_la_LIBADD = +am_libbpong_la_OBJECTS = bpong.lo +libbpong_la_OBJECTS = $(am_libbpong_la_OBJECTS) +libbproxy_la_LIBADD = +am_libbproxy_la_OBJECTS = bproxy.lo +libbproxy_la_OBJECTS = $(am_libbproxy_la_OBJECTS) +libbpushline_la_LIBADD = +am_libbpushline_la_OBJECTS = bpushline.lo +libbpushline_la_OBJECTS = $(am_libbpushline_la_OBJECTS) +libbqix_la_LIBADD = +am_libbqix_la_OBJECTS = bqix.lo +libbqix_la_OBJECTS = $(am_libbqix_la_OBJECTS) +libbretris_la_LIBADD = +am_libbretris_la_OBJECTS = bretris.lo +libbretris_la_OBJECTS = $(am_libbretris_la_OBJECTS) +libbsnake_la_LIBADD = +am_libbsnake_la_OBJECTS = bsnake.lo +libbsnake_la_OBJECTS = $(am_libbsnake_la_OBJECTS) +libbtetris_la_LIBADD = +am_libbtetris_la_OBJECTS = btetris.lo +libbtetris_la_OBJECTS = $(am_libbtetris_la_OBJECTS) +libbtext_la_LIBADD = +am_libbtext_la_OBJECTS = btext.lo +libbtext_la_OBJECTS = $(am_libbtext_la_OBJECTS) +libbxxo_la_LIBADD = +am_libbxxo_la_OBJECTS = bxxo.lo +libbxxo_la_OBJECTS = $(am_libbxxo_la_OBJECTS) + +DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/bbreakout.Plo ./$(DEPDIR)/bclock.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/bcountdown.Plo ./$(DEPDIR)/bdebug.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/bdropout.Plo ./$(DEPDIR)/bfire.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/bmatrix.Plo ./$(DEPDIR)/bpacman.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/bpong.Plo ./$(DEPDIR)/bproxy.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/bpushline.Plo ./$(DEPDIR)/bqix.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/bretris.Plo ./$(DEPDIR)/bsnake.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/btetris.Plo ./$(DEPDIR)/btext.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/bxxo.Plo +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) \ + $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +DIST_SOURCES = $(libbbreakout_la_SOURCES) $(libbclock_la_SOURCES) \ + $(libbcountdown_la_SOURCES) $(libbdebug_la_SOURCES) \ + $(libbdropout_la_SOURCES) $(libbfire_la_SOURCES) \ + $(libbmatrix_la_SOURCES) $(libbpacman_la_SOURCES) \ + $(libbpong_la_SOURCES) $(libbproxy_la_SOURCES) \ + $(libbpushline_la_SOURCES) $(libbqix_la_SOURCES) \ + $(libbretris_la_SOURCES) $(libbsnake_la_SOURCES) \ + $(libbtetris_la_SOURCES) $(libbtext_la_SOURCES) \ + $(libbxxo_la_SOURCES) +DIST_COMMON = $(srcdir)/Makefile.in Makefile.am +SOURCES = $(libbbreakout_la_SOURCES) $(libbclock_la_SOURCES) $(libbcountdown_la_SOURCES) $(libbdebug_la_SOURCES) $(libbdropout_la_SOURCES) $(libbfire_la_SOURCES) $(libbmatrix_la_SOURCES) $(libbpacman_la_SOURCES) $(libbpong_la_SOURCES) $(libbproxy_la_SOURCES) $(libbpushline_la_SOURCES) $(libbqix_la_SOURCES) $(libbretris_la_SOURCES) $(libbsnake_la_SOURCES) $(libbtetris_la_SOURCES) $(libbtext_la_SOURCES) $(libbxxo_la_SOURCES) + +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu modules/Makefile +Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) +libLTLIBRARIES_INSTALL = $(INSTALL) +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(libdir) + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + f="`echo $$p | sed -e 's|^.*/||'`"; \ + echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(libdir)/$$f"; \ + $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(libdir)/$$f; \ + else :; fi; \ + done + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + p="`echo $$p | sed -e 's|^.*/||'`"; \ + echo " $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/$$p"; \ + $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/$$p; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" = "$$p" && dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +libbbreakout.la: $(libbbreakout_la_OBJECTS) $(libbbreakout_la_DEPENDENCIES) + $(LINK) -rpath $(libdir) $(libbbreakout_la_LDFLAGS) $(libbbreakout_la_OBJECTS) $(libbbreakout_la_LIBADD) $(LIBS) +libbclock.la: $(libbclock_la_OBJECTS) $(libbclock_la_DEPENDENCIES) + $(LINK) -rpath $(libdir) $(libbclock_la_LDFLAGS) $(libbclock_la_OBJECTS) $(libbclock_la_LIBADD) $(LIBS) +libbcountdown.la: $(libbcountdown_la_OBJECTS) $(libbcountdown_la_DEPENDENCIES) + $(LINK) -rpath $(libdir) $(libbcountdown_la_LDFLAGS) $(libbcountdown_la_OBJECTS) $(libbcountdown_la_LIBADD) $(LIBS) +libbdebug.la: $(libbdebug_la_OBJECTS) $(libbdebug_la_DEPENDENCIES) + $(LINK) -rpath $(libdir) $(libbdebug_la_LDFLAGS) $(libbdebug_la_OBJECTS) $(libbdebug_la_LIBADD) $(LIBS) +libbdropout.la: $(libbdropout_la_OBJECTS) $(libbdropout_la_DEPENDENCIES) + $(LINK) -rpath $(libdir) $(libbdropout_la_LDFLAGS) $(libbdropout_la_OBJECTS) $(libbdropout_la_LIBADD) $(LIBS) +libbfire.la: $(libbfire_la_OBJECTS) $(libbfire_la_DEPENDENCIES) + $(LINK) -rpath $(libdir) $(libbfire_la_LDFLAGS) $(libbfire_la_OBJECTS) $(libbfire_la_LIBADD) $(LIBS) +libbmatrix.la: $(libbmatrix_la_OBJECTS) $(libbmatrix_la_DEPENDENCIES) + $(LINK) -rpath $(libdir) $(libbmatrix_la_LDFLAGS) $(libbmatrix_la_OBJECTS) $(libbmatrix_la_LIBADD) $(LIBS) +libbpacman.la: $(libbpacman_la_OBJECTS) $(libbpacman_la_DEPENDENCIES) + $(LINK) -rpath $(libdir) $(libbpacman_la_LDFLAGS) $(libbpacman_la_OBJECTS) $(libbpacman_la_LIBADD) $(LIBS) +libbpong.la: $(libbpong_la_OBJECTS) $(libbpong_la_DEPENDENCIES) + $(LINK) -rpath $(libdir) $(libbpong_la_LDFLAGS) $(libbpong_la_OBJECTS) $(libbpong_la_LIBADD) $(LIBS) +libbproxy.la: $(libbproxy_la_OBJECTS) $(libbproxy_la_DEPENDENCIES) + $(LINK) -rpath $(libdir) $(libbproxy_la_LDFLAGS) $(libbproxy_la_OBJECTS) $(libbproxy_la_LIBADD) $(LIBS) +libbpushline.la: $(libbpushline_la_OBJECTS) $(libbpushline_la_DEPENDENCIES) + $(LINK) -rpath $(libdir) $(libbpushline_la_LDFLAGS) $(libbpushline_la_OBJECTS) $(libbpushline_la_LIBADD) $(LIBS) +libbqix.la: $(libbqix_la_OBJECTS) $(libbqix_la_DEPENDENCIES) + $(LINK) -rpath $(libdir) $(libbqix_la_LDFLAGS) $(libbqix_la_OBJECTS) $(libbqix_la_LIBADD) $(LIBS) +libbretris.la: $(libbretris_la_OBJECTS) $(libbretris_la_DEPENDENCIES) + $(LINK) -rpath $(libdir) $(libbretris_la_LDFLAGS) $(libbretris_la_OBJECTS) $(libbretris_la_LIBADD) $(LIBS) +libbsnake.la: $(libbsnake_la_OBJECTS) $(libbsnake_la_DEPENDENCIES) + $(LINK) -rpath $(libdir) $(libbsnake_la_LDFLAGS) $(libbsnake_la_OBJECTS) $(libbsnake_la_LIBADD) $(LIBS) +libbtetris.la: $(libbtetris_la_OBJECTS) $(libbtetris_la_DEPENDENCIES) + $(LINK) -rpath $(libdir) $(libbtetris_la_LDFLAGS) $(libbtetris_la_OBJECTS) $(libbtetris_la_LIBADD) $(LIBS) +libbtext.la: $(libbtext_la_OBJECTS) $(libbtext_la_DEPENDENCIES) + $(LINK) -rpath $(libdir) $(libbtext_la_LDFLAGS) $(libbtext_la_OBJECTS) $(libbtext_la_LIBADD) $(LIBS) +libbxxo.la: $(libbxxo_la_OBJECTS) $(libbxxo_la_DEPENDENCIES) + $(LINK) -rpath $(libdir) $(libbxxo_la_LDFLAGS) $(libbxxo_la_OBJECTS) $(libbxxo_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) core *.core + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bbreakout.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bclock.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bcountdown.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bdebug.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bdropout.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bfire.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bmatrix.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bpacman.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bpong.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bproxy.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bpushline.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bqix.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bretris.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bsnake.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/btetris.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/btext.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bxxo.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \ +@am__fastdepCC_TRUE@ -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \ +@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ +@am__fastdepCC_TRUE@ fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$< + +.c.obj: +@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \ +@am__fastdepCC_TRUE@ -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \ +@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ +@am__fastdepCC_TRUE@ fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi` + +.c.lo: +@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \ +@am__fastdepCC_TRUE@ -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; \ +@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ +@am__fastdepCC_TRUE@ fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool +uninstall-info-am: + +ETAGS = etags +ETAGSFLAGS = + +CTAGS = ctags +CTAGSFLAGS = + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)$$tags$$unique" \ + || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique + +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = .. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) + +installdirs: + $(mkinstalldirs) $(DESTDIR)$(libdir) +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-libtool distclean-tags + +dvi: dvi-am + +dvi-am: + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: install-libLTLIBRARIES + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am uninstall-libLTLIBRARIES + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libLTLIBRARIES clean-libtool ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am info info-am install \ + install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am \ + install-libLTLIBRARIES install-man install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-info-am \ + uninstall-libLTLIBRARIES + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/blib-1.1.7/modules/bbreakout.c b/blib-1.1.7/modules/bbreakout.c new file mode 100644 index 0000000..7ead092 --- /dev/null +++ b/blib-1.1.7/modules/bbreakout.c @@ -0,0 +1,795 @@ +/* BBreakout: Breakout module for Blinkenlights + * + * Copyright (c) 2002 1stein <1stein@1stein.no-ip.com> + * + * based on Test implementation for a BModule by the Blinkenlights Crew + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include +#include + +#include +#include + +#include + +#define BBreakoutVerMaj 1 +#define BBreakoutVerMin 0 +#define BBreakoutVerRev 0 + +//minimum size and color count of display +#define BBreakoutSizeXMin 18 +#define BBreakoutSizeYMin 15 +#define BBreakoutColorCntMin 4 +//minimum number of free pixel rows over player +#define BBreakoutFreeRowsMin 3 +//size of stones +#define BBreakoutStoneSizeX 3 +#define BBreakoutStoneSizeY 1 +//number of lives for player +#define BBreakoutLives 5 +//speed of game +#define BBreakoutTicks 120 +//number of ticks player is dead after missing a ball +#define BBreakoutDeadTime 10 + +#define BBreakoutAutoStart TRUE + +//the colors +#define BBreakoutColorEmpty( MaxColor ) (0) +#define BBreakoutColorStone1( MaxColor ) ((MaxColor) / 2) +#define BBreakoutColorStone2( MaxColor ) ((MaxColor) * 3 / 4) +#define BBreakoutColorStone3( MaxColor ) (MaxColor) +#define BBreakoutColorBall( MaxColor ) (MaxColor) +#define BBreakoutColorPlayerDead( MaxColor ) ((MaxColor) / 2) +#define BBreakoutColorPlayerDeadBlink( MaxColor ) ((MaxColor) / 4) +#define BBreakoutColorPlayerAlive( MaxColor ) ((MaxColor) * 3 / 4) + +#ifdef BREAKOUT_DEBUG +#define dbg_print g_print +#else +static inline void +dbg_print (char * Fmt, ...) +{ +} +#endif + +#define B_TYPE_BREAKOUT_MODULE (b_type_breakout_module) +#define B_BREAKOUT_MODULE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), B_TYPE_BREAKOUT_MODULE, BBreakoutModule)) +#define B_BREAKOUT_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), B_TYPE_BREAKOUT_MODULE, BBreakoutModuleClass)) +#define B_IS_BREAKOUT_MODULE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), B_TYPE_BREAKOUT_MODULE)) + +typedef struct _BBreakoutModule BBreakoutModule; +typedef struct _BBreakoutModuleClass BBreakoutModuleClass; + +struct _BBreakoutModule +{ + BModule parent_instance; + + int MaxColor; //maximum color value + int FreeRows; //number of free pixel rows over player + int StoneCntX, StoneCntY; //number of stones in field + int StoneSizeX, StoneSizeY; //size of stone area of game-field + int SizeX, SizeY; //size of game-field + int OfsX, OfsY; //offset of top left corner of game-field + int PlayerSizeX, PlayerPosY; //x-size and y-position of player + int PlayerPosXMax, PlayerStepX; //maximum x-position and x-step-size of player + int * * ppStones; //two-dimensional array with stones + int StoneCnt; //number of stones left in game + int Lives; //rest of player's lives + int DeadCnt; //number of ticks player is dead, 0 if player is alive + int PlayerPosX; //x-position of (left corner of) player + int BallActive; //!0 if ball is flying, 0 if ball is at player + int BallPosX, BallPosY; //position of ball (if ball is flying) + int BallDirX, BallDirY; //direction of ball (if ball is flying) + + int player_device_id; +}; + +struct _BBreakoutModuleClass +{ + BModuleClass parent_class; +}; +static GType b_breakout_module_get_type (GTypeModule *module); +static void b_breakout_module_class_init (BBreakoutModuleClass *klass); +static void b_breakout_module_init (BBreakoutModule *module); +static gboolean b_breakout_module_query (gint width, + gint height, + gint channels, + gint maxval); +static gboolean b_breakout_module_prepare (BModule *module, + GError **error); +static void b_breakout_module_relax (BModule *module); +static void b_breakout_module_start (BModule *module); +static void b_breakout_module_event (BModule *module, + BModuleEvent *event); +static gint b_breakout_module_tick (BModule *module); +static void b_breakout_module_describe (BModule *module, + const gchar **title, + const gchar **description, + const gchar **author); + + + +static GType b_type_breakout_module = 0; + + +G_MODULE_EXPORT gboolean +b_module_register (GTypeModule * module) +{ + b_breakout_module_get_type (module); + + return TRUE; +} + +GType +b_breakout_module_get_type (GTypeModule * module) +{ + if (!b_type_breakout_module) + { + static const GTypeInfo breakout_module_info = { + sizeof (BBreakoutModuleClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc) b_breakout_module_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (BBreakoutModule), + 0, /* n_preallocs */ + (GInstanceInitFunc) b_breakout_module_init, + }; + + /* !!!!!!!!! The name given in the next function MUST be unique! */ + + b_type_breakout_module = g_type_module_register_type (module, + B_TYPE_MODULE, + "BBreakout", + &breakout_module_info, + 0); + } + + return b_type_breakout_module; +} + +//output current picture +void +BBreakoutOutput (BBreakoutModule *pBreakoutModule) +{ + int OfsX, OfsY, X, Y, X1, Y1, Y2, Color; + + //empty the screen + b_module_fill ((BModule *) pBreakoutModule, + BBreakoutColorEmpty (pBreakoutModule->MaxColor)); + + //get offset + OfsX = pBreakoutModule->OfsX; + OfsY = pBreakoutModule->OfsY; + + //draw stones + for (Y = 0; Y < pBreakoutModule->StoneCntY; Y++) + { + for (X = 0; X < pBreakoutModule->StoneCntX; X++) + { + //stone there + if (pBreakoutModule->ppStones[Y][X] > 0) + { + //get position of stone + X1 = OfsX + X * BBreakoutStoneSizeX; + Y1 = OfsY + Y * BBreakoutStoneSizeY; + //get color + if (pBreakoutModule->ppStones[Y][X] == 1) + Color = BBreakoutColorStone1 (pBreakoutModule->MaxColor); + else if (pBreakoutModule->ppStones[Y][X] == 2) + Color = BBreakoutColorStone2 (pBreakoutModule->MaxColor); + else + Color = BBreakoutColorStone3 (pBreakoutModule->MaxColor); + //draw stone + for( Y2 = 0; Y2 < BBreakoutStoneSizeY; Y2++ ) + b_module_draw_line ((BModule *) pBreakoutModule, + X1, Y1 + Y2, + X1 + BBreakoutStoneSizeX - 1, Y1 + Y2, + Color); + } + } + } + + //get player color (dead or alive) + if (pBreakoutModule->DeadCnt > 0) + { + if (pBreakoutModule->DeadCnt & 1 ) + Color = BBreakoutColorPlayerDead (pBreakoutModule->MaxColor); + else + Color = BBreakoutColorPlayerDeadBlink (pBreakoutModule->MaxColor); + } + else + Color = BBreakoutColorPlayerAlive (pBreakoutModule->MaxColor); + //draw player + b_module_draw_line ((BModule *) pBreakoutModule, + OfsX + pBreakoutModule->PlayerPosX, OfsY + pBreakoutModule->PlayerPosY, + OfsX + pBreakoutModule->PlayerPosX + pBreakoutModule->PlayerSizeX - 1, OfsY + pBreakoutModule->PlayerPosY, + Color); + + //draw active ball + if (pBreakoutModule->BallActive) + { + b_module_draw_point ((BModule *) pBreakoutModule, + OfsX + pBreakoutModule->BallPosX, + OfsY + pBreakoutModule->BallPosY, + BBreakoutColorBall (pBreakoutModule->MaxColor)); + } + //draw ball at player + else + { + b_module_draw_point ((BModule *) pBreakoutModule, + OfsX + pBreakoutModule->PlayerPosX + pBreakoutModule->PlayerSizeX / 2, + OfsY + pBreakoutModule->PlayerPosY - 1, + BBreakoutColorBall (pBreakoutModule->MaxColor)); + } + + //update screen + b_module_paint ((BModule *) pBreakoutModule); +} + +//initialize player +void +BBreakoutPlayerInit (BBreakoutModule *pBreakoutModule) +{ + //player is alive + pBreakoutModule->DeadCnt = 0; + //set start position of player + pBreakoutModule->PlayerPosX = (pBreakoutModule->SizeX - pBreakoutModule->PlayerSizeX) / 2; + + if (BBreakoutAutoStart) + { + //set ball to active, set position and direction + pBreakoutModule->BallActive = 1; + pBreakoutModule->BallPosX = pBreakoutModule->PlayerPosX + pBreakoutModule->PlayerSizeX / 2; + pBreakoutModule->BallPosY = pBreakoutModule->PlayerPosY - 1; + pBreakoutModule->BallDirX = rand() % 1 ? -1 : 1; + pBreakoutModule->BallDirY = -1; + } + else + { + //ball is at player + pBreakoutModule->BallActive = 0; + } +} + +//start a new game +void +BBreakoutNewGame (BBreakoutModule *pBreakoutModule) +{ + int X, Y; + + //set stones to 2 or 3 hits in checkerboard-style + for (Y = 0; Y < pBreakoutModule->StoneCntY; Y++) + for (X = 0; X < pBreakoutModule->StoneCntX; X++) + if ((X + Y) & 1) + pBreakoutModule->ppStones[Y][X] = 2; + else + pBreakoutModule->ppStones[Y][X] = 3; + //make a free way around the field + for (Y = 2; Y < pBreakoutModule->StoneCntY - 1; Y++) + { + pBreakoutModule->ppStones[Y][0] = 0; + pBreakoutModule->ppStones[Y][pBreakoutModule->StoneCntX - 1] = 0; + } + for (X = 0; X < pBreakoutModule->StoneCntX; X++) + { + pBreakoutModule->ppStones[0][X] = 0; + pBreakoutModule->ppStones[1][X] = 0; + } + //put a hole into the upper center + for (Y = 4; Y < pBreakoutModule->StoneCntY * 2 / 3; Y++) + { + pBreakoutModule->ppStones[Y][(pBreakoutModule->StoneCntX - 1) / 2] = 0; + pBreakoutModule->ppStones[Y][(pBreakoutModule->StoneCntX) / 2] = 0; + } + + //count stones + pBreakoutModule->StoneCnt = 0; + for (Y = 0; Y < pBreakoutModule->StoneCntY; Y++) + for (X = 0; X < pBreakoutModule->StoneCntX; X++) + if (pBreakoutModule->ppStones[Y][X] > 0) + pBreakoutModule->StoneCnt++; + + dbg_print ("BBreakout: new game\n"); + + //initialize player + BBreakoutPlayerInit (pBreakoutModule); + + //output current picture + BBreakoutOutput (pBreakoutModule); +} + +//key-procedure +void +BBreakoutKey (BBreakoutModule *pBreakoutModule, + BModuleKey Key) +{ + //don't do anything if player is dead + if (pBreakoutModule->DeadCnt > 0) + return; + + switch (Key) + { + case B_KEY_1: + //shoot ball to the left + if (!pBreakoutModule->BallActive) + { + //set ball to active, set position and direction + pBreakoutModule->BallActive = 1; + pBreakoutModule->BallPosX = pBreakoutModule->PlayerPosX + pBreakoutModule->PlayerSizeX / 2; + pBreakoutModule->BallPosY = pBreakoutModule->PlayerPosY - 1; + pBreakoutModule->BallDirX = -1; + pBreakoutModule->BallDirY = -1; + } + break; + case B_KEY_3: + //shoot ball to the right + if (!pBreakoutModule->BallActive) + { + //set ball to active, set position and direction + pBreakoutModule->BallActive = 1; + pBreakoutModule->BallPosX = pBreakoutModule->PlayerPosX + pBreakoutModule->PlayerSizeX / 2; + pBreakoutModule->BallPosY = pBreakoutModule->PlayerPosY - 1; + pBreakoutModule->BallDirX = 1; + pBreakoutModule->BallDirY = -1; + } + break; + case B_KEY_4: + //move player one step left + pBreakoutModule->PlayerPosX -= pBreakoutModule->PlayerStepX; + if (pBreakoutModule->PlayerPosX < 0) + pBreakoutModule->PlayerPosX = 0; + break; + case B_KEY_6: + //move player one step right + pBreakoutModule->PlayerPosX += pBreakoutModule->PlayerStepX; + if (pBreakoutModule->PlayerPosX > pBreakoutModule->PlayerPosXMax) + pBreakoutModule->PlayerPosX = pBreakoutModule->PlayerPosXMax; + break; + case B_KEY_7: + //move player one pixel left + pBreakoutModule->PlayerPosX--;; + if (pBreakoutModule->PlayerPosX < 0) + pBreakoutModule->PlayerPosX = 0; + break; + case B_KEY_9: + //move player one pixel right + pBreakoutModule->PlayerPosX++; + if (pBreakoutModule->PlayerPosX > pBreakoutModule->PlayerPosXMax) + pBreakoutModule->PlayerPosX = pBreakoutModule->PlayerPosXMax; + break; + + default: + break; + } + + //output current picture + BBreakoutOutput (pBreakoutModule); +} + +//tick-procedure +//returns 1 if game over or 0 if game not over +int +BBreakoutTick (BBreakoutModule *pBreakoutModule) +{ + int X, Y, X1, Y1, X2, Y2; + + //player is dead + if (pBreakoutModule->DeadCnt >= 0) + { + //decrement dead counter + pBreakoutModule->DeadCnt--; + if (pBreakoutModule->DeadCnt == 0) + { + //player has life left + if (pBreakoutModule->Lives > 0) + { + dbg_print( "BBreakout: player is alive again - %d live(s) left\n", pBreakoutModule->Lives); + //initialize player + BBreakoutPlayerInit (pBreakoutModule); + } + + //game over + else + { + dbg_print( "BBreakout: player has no more lives left - game over\n"); + //request end of game + b_module_request_stop ((BModule *) pBreakoutModule); + //return game over + return 1; + } + } + + //output current picture + BBreakoutOutput (pBreakoutModule); + + //return game not over + return 0; + } //if (pBreakoutModule->DeadCnt >= 0) + + //ball ist active + if (pBreakoutModule->BallActive) + { + //bounce ball at left of game-field + if (pBreakoutModule->BallPosX <= 0 + && pBreakoutModule->BallDirX == -1) + pBreakoutModule->BallDirX = 1; + //bounce ball at right of game-field + if (pBreakoutModule->BallPosX >= pBreakoutModule->SizeX - 1 + && pBreakoutModule->BallDirX == 1) + pBreakoutModule->BallDirX = -1; + //bounce ball at top of game-field + if (pBreakoutModule->BallPosY <= 0 + && pBreakoutModule->BallDirY == -1) + pBreakoutModule->BallDirY = 1; + //bounce ball at bottom of game-field + if (pBreakoutModule->BallPosY >= pBreakoutModule->SizeY - 1 + && pBreakoutModule->BallDirY == 1) + pBreakoutModule->BallDirY = -1; + + //bounce ball at edges of stones + for (Y = 0; Y < pBreakoutModule->StoneCntY; Y++) + { + for (X = 0; X < pBreakoutModule->StoneCntX; X++) + { + //stone there + if (pBreakoutModule->ppStones[Y][X] > 0) + { + //get position (all 4 corners) of stone + X1 = X * BBreakoutStoneSizeX; + Y1 = Y * BBreakoutStoneSizeY; + X2 = X1 + BBreakoutStoneSizeX - 1; + Y2 = Y1 + BBreakoutStoneSizeY - 1; + //bounce ball at left edge of stone + if (pBreakoutModule->BallPosX == X1 - 1 + && pBreakoutModule->BallDirX == 1 + && pBreakoutModule->BallPosY >= Y1 + && pBreakoutModule->BallPosY <= Y2) + { + pBreakoutModule->BallDirX = -1; //bounce ball + pBreakoutModule->ppStones[Y][X]--; //stone has one hit less + if (pBreakoutModule->ppStones[Y][X] == 0) //stone is gone + pBreakoutModule->StoneCnt--; //one stone less + } + //bounce ball at right edge of stone + if (pBreakoutModule->BallPosX == X2 + 1 + && pBreakoutModule->BallDirX == -1 + && pBreakoutModule->BallPosY >= Y1 + && pBreakoutModule->BallPosY <= Y2) + { + pBreakoutModule->BallDirX = 1; //bounce ball + pBreakoutModule->ppStones[Y][X]--; //stone has one hit less + if (pBreakoutModule->ppStones[Y][X] == 0) //stone is gone + pBreakoutModule->StoneCnt--; //one stone less + } + //bounce ball at top edge of stone + if (pBreakoutModule->BallPosY == Y1 - 1 + && pBreakoutModule->BallDirY == 1 + && pBreakoutModule->BallPosX >= X1 + && pBreakoutModule->BallPosX <= X2) + { + pBreakoutModule->BallDirY = -1; //bounce ball + pBreakoutModule->ppStones[Y][X]--; //stone has one hit less + if (pBreakoutModule->ppStones[Y][X] == 0) //stone is gone + pBreakoutModule->StoneCnt--; //one stone less + } + //bounce ball at bottom edge of stone + if (pBreakoutModule->BallPosY == Y2 + 1 + && pBreakoutModule->BallDirY == -1 + && pBreakoutModule->BallPosX >= X1 + && pBreakoutModule->BallPosX <= X2) + { + pBreakoutModule->BallDirY = 1; //bounce ball + pBreakoutModule->ppStones[Y][X]--; //stone has one hit less + if (pBreakoutModule->ppStones[Y][X] == 0) //stone is gone + pBreakoutModule->StoneCnt--; //one stone less + } + } + } //for (X ... + } //for (Y ... + + //bounce ball at corners of stones + //(it is important to bounce at all stone edges first) + for (Y = 0; Y < pBreakoutModule->StoneCntY; Y++) + { + for (X = 0; X < pBreakoutModule->StoneCntX; X++) + { + //stone there + if (pBreakoutModule->ppStones[Y][X] > 0) + { + //get position (all 4 corners) of stone + X1 = X * BBreakoutStoneSizeX; + Y1 = Y * BBreakoutStoneSizeY; + X2 = X1 + BBreakoutStoneSizeX - 1; + Y2 = Y1 + BBreakoutStoneSizeY - 1; + //bounce ball at top-left corner of stone + if (pBreakoutModule->BallPosX == X1 - 1 + && pBreakoutModule->BallPosY == Y1 - 1 + && pBreakoutModule->BallDirX == 1 + && pBreakoutModule->BallDirY == 1) + { + pBreakoutModule->BallDirX = -1; //bounce ball + pBreakoutModule->BallDirY = -1; //bounce ball + pBreakoutModule->ppStones[Y][X]--; //stone has one hit less + if (pBreakoutModule->ppStones[Y][X] == 0) //stone is gone + pBreakoutModule->StoneCnt--; //one stone less + } + //bounce ball at top-right corner of stone + if (pBreakoutModule->BallPosX == X2 + 1 + && pBreakoutModule->BallPosY == Y1 - 1 + && pBreakoutModule->BallDirX == -1 + && pBreakoutModule->BallDirY == 1) + { + pBreakoutModule->BallDirX = 1; //bounce ball + pBreakoutModule->BallDirY = -1; //bounce ball + pBreakoutModule->ppStones[Y][X]--; //stone has one hit less + if (pBreakoutModule->ppStones[Y][X] == 0) //stone is gone + pBreakoutModule->StoneCnt--; //one stone less + } + //bounce ball at bottom-left corner of stone + if (pBreakoutModule->BallPosX == X1 - 1 + && pBreakoutModule->BallPosY == Y2 + 1 + && pBreakoutModule->BallDirX == 1 + && pBreakoutModule->BallDirY == -1) + { + pBreakoutModule->BallDirX = -1; //bounce ball + pBreakoutModule->BallDirY = 1; //bounce ball + pBreakoutModule->ppStones[Y][X]--; //stone has one hit less + if (pBreakoutModule->ppStones[Y][X] == 0) //stone is gone + pBreakoutModule->StoneCnt--; //one stone less + } + //bounce ball at bottom-right corner of stone + if (pBreakoutModule->BallPosX == X2 + 1 + && pBreakoutModule->BallPosY == Y2 + 1 + && pBreakoutModule->BallDirX == -1 + && pBreakoutModule->BallDirY == -1) + { + pBreakoutModule->BallDirX = 1; //bounce ball + pBreakoutModule->BallDirY = 1; //bounce ball + pBreakoutModule->ppStones[Y][X]--; //stone has one hit less + if (pBreakoutModule->ppStones[Y][X] == 0) //stone is gone + pBreakoutModule->StoneCnt--; //one stone less + } + } + } //for (X ... + } //for (Y ... + + //bounce ball at top edge of player + if (pBreakoutModule->BallPosY == pBreakoutModule->PlayerPosY - 1 + && pBreakoutModule->BallPosX >= pBreakoutModule->PlayerPosX + && pBreakoutModule->BallPosX <= pBreakoutModule->PlayerPosX + pBreakoutModule->PlayerSizeX - 1 + && pBreakoutModule->BallDirY == 1) + { + pBreakoutModule->BallDirY = -1; + } + //bounce ball at left corner of player + if (pBreakoutModule->BallPosX == pBreakoutModule->PlayerPosX - 1 + && pBreakoutModule->BallPosY == pBreakoutModule->PlayerPosY - 1 + && pBreakoutModule->BallDirX == 1 + && pBreakoutModule->BallDirY == 1) + { + pBreakoutModule->BallDirX = -1; + pBreakoutModule->BallDirY = -1; + } + //bounce ball at right corner of player + if (pBreakoutModule->BallPosX == pBreakoutModule->PlayerPosX + pBreakoutModule->PlayerSizeX + && pBreakoutModule->BallPosY == pBreakoutModule->PlayerPosY - 1 + && pBreakoutModule->BallDirX == -1 + && pBreakoutModule->BallDirY == 1) + { + pBreakoutModule->BallDirX = 1; + pBreakoutModule->BallDirY = -1; + } + + //move ball + pBreakoutModule->BallPosX += pBreakoutModule->BallDirX; + pBreakoutModule->BallPosY += pBreakoutModule->BallDirY; + + //all stones gone + if (pBreakoutModule->StoneCnt == 0) + { + dbg_print( "BBreakout: player has destroyed all stones - game over\n"); + //output current picture + BBreakoutOutput (pBreakoutModule); + //request end of game + b_module_request_stop ((BModule *) pBreakoutModule); + //return game over + return 1; + } + + //player missed ball + if( pBreakoutModule->BallPosY >= pBreakoutModule->PlayerPosY ) + { + //decrement player's lives + pBreakoutModule->Lives--; + dbg_print ("BBreakout: player missed the ball and died\n"); + //player is dead now + pBreakoutModule->DeadCnt = BBreakoutDeadTime; + } + } //if (pBreakoutModule->BallActive) + + //output current picture + BBreakoutOutput (pBreakoutModule); + + //return game not over + return 0; +} + +static void +b_breakout_module_class_init (BBreakoutModuleClass *klass) +{ + BModuleClass *module_class; + + module_class = B_MODULE_CLASS (klass); + + module_class->max_players = 1; + + module_class->query = b_breakout_module_query; + module_class->prepare = b_breakout_module_prepare; + module_class->relax = b_breakout_module_relax; + module_class->start = b_breakout_module_start; + module_class->event = b_breakout_module_event; + module_class->tick = b_breakout_module_tick; + module_class->describe = b_breakout_module_describe; +} + +static void +b_breakout_module_init (BBreakoutModule *breakout_module) +{ + breakout_module->player_device_id = -1; +} + +static gboolean +b_breakout_module_query (gint width, + gint height, + gint channels, + gint maxval) +{ + return (width >= BBreakoutSizeXMin && height >= BBreakoutSizeYMin + && channels == 1 && maxval + 1 >= BBreakoutColorCntMin); +} + +static gboolean +b_breakout_module_prepare (BModule *module, + GError **error) +{ + int SizePtrs, SizeRow, Size, Y; + char * Ptr; + + BBreakoutModule *breakout_module = B_BREAKOUT_MODULE (module); + + //initialize the module values that depend on the output device + breakout_module->MaxColor = module->maxval; //maximum color value + breakout_module->FreeRows = module->height * 2 / 5; //number of free rows over player + if (breakout_module->FreeRows < BBreakoutFreeRowsMin) + breakout_module->FreeRows = BBreakoutFreeRowsMin; + breakout_module->StoneCntX = module->width / BBreakoutStoneSizeX; //number of stones in field + breakout_module->StoneCntY = (module->height - breakout_module->FreeRows - 1) / BBreakoutStoneSizeY; + breakout_module->StoneSizeX = breakout_module->StoneCntX * BBreakoutStoneSizeX; //size of stone area of game-field + breakout_module->StoneSizeY = breakout_module->StoneCntY * BBreakoutStoneSizeY; + breakout_module->SizeX = breakout_module->StoneSizeX; //size of game field + breakout_module->SizeY = breakout_module->StoneSizeY + breakout_module->FreeRows + 1; + breakout_module->OfsX = (module->width - breakout_module->SizeX) / 2; //offset of top left corner of game-field + breakout_module->OfsY = (module->height - breakout_module->SizeY) / 2; + breakout_module->PlayerSizeX = breakout_module->SizeX / 3; //x-size and y-position of player + breakout_module->PlayerPosY = breakout_module->SizeY - 1; + breakout_module->PlayerPosXMax = breakout_module->SizeX - breakout_module->PlayerSizeX; //maximum x-position of player + breakout_module->PlayerStepX = breakout_module->PlayerSizeX / 2; //x-step-size of player + + //allocate needed memory + SizePtrs = breakout_module->StoneCntY * sizeof( int * ); //get needed size + SizeRow = breakout_module->StoneCntX * sizeof( int ); + Size = SizePtrs + breakout_module->StoneCntY * SizeRow; + Ptr = g_new (gchar, Size); + + breakout_module->ppStones = (int * *)Ptr; //remember pointer + for( Y = 0; Y < breakout_module->StoneCntY; Y++ ) //generate pointers to rows + breakout_module->ppStones[Y] = (int *)(Ptr + SizePtrs + Y * SizeRow); + + return TRUE; +} + +static void +b_breakout_module_relax (BModule *module) +{ + BBreakoutModule *breakout_module = B_BREAKOUT_MODULE (module); + + g_free( breakout_module->ppStones ); + breakout_module->ppStones = NULL; +} + +static void +b_breakout_module_start (BModule *module) +{ + //set player's lives + ((BBreakoutModule *)module)->Lives = BBreakoutLives; + + //start new game + BBreakoutNewGame ((BBreakoutModule *) module); + + //start the tick machinery + b_module_ticker_start (module, BBreakoutTicks); +} + +static void +b_breakout_module_event (BModule *module, + BModuleEvent *event) +{ + BBreakoutModule *breakout; + + breakout = B_BREAKOUT_MODULE (module); + + switch (event->type) + { + case B_EVENT_TYPE_KEY: + if (event->device_id == breakout->player_device_id) + BBreakoutKey (breakout, event->key); + break; + + case B_EVENT_TYPE_PLAYER_ENTERED: + if (breakout->player_device_id == -1) + { + breakout->player_device_id = event->device_id; + + module->num_players++; + } + break; + + case B_EVENT_TYPE_PLAYER_LEFT: + if (breakout->player_device_id == event->device_id) + { + breakout->player_device_id = -1; + + module->num_players--; + } + break; + + default: + break; + } +} + +static gint +b_breakout_module_tick (BModule *module) +{ + int GameOver; + + //call tick-procedure + GameOver = BBreakoutTick ((BBreakoutModule *) module); + + //we want to be called again in some milliseconds, if game is not over + if( GameOver ) + return 0; + else + return BBreakoutTicks; +} + +static void +b_breakout_module_describe (BModule *module, + const gchar **title, + const gchar **description, + const gchar **author) +{ + *title = "BBreakout"; + *description = "Breakout game"; + *author = "1stein"; +} diff --git a/blib-1.1.7/modules/bclock.c b/blib-1.1.7/modules/bclock.c new file mode 100644 index 0000000..af1c6ab --- /dev/null +++ b/blib-1.1.7/modules/bclock.c @@ -0,0 +1,373 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2002 The Blinkenlights Crew + * Daniel Mack + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include +#include +#include +#include +#include + +#include +#include + +#include + +#include "digits.h" + + +#define TIMEOUT 75 +#define DEFAULT_MODE CLOCK_MODE_DIGITAL + + +typedef enum +{ + CLOCK_MODE_DIGITAL, + CLOCK_MODE_ANALOG, + CLOCK_MODE_LAST +} BClockMode; + +enum +{ + PROP_0, + PROP_MODE +}; + + +#define B_TYPE_CLOCK_MODE (b_clock_mode_get_type ()) + +#define B_TYPE_CLOCK (b_type_clock) +#define B_CLOCK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), B_TYPE_CLOCK, BClock)) +#define B_CLOCK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), B_TYPE_CLOCK, BClockClass)) +#define B_IS_CLOCK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), B_TYPE_CLOCK)) + +typedef struct _BClock BClock; +typedef struct _BClockClass BClockClass; + +struct _BClock +{ + BModule parent_instance; + + guint epoche; + gint mode; + gboolean colon; +}; + +struct _BClockClass +{ + BModuleClass parent_class; +}; + +static GType b_clock_get_type (GTypeModule *module); + +static void b_clock_class_init (BClockClass *klass); +static void b_clock_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec); +static gboolean b_clock_query (gint width, + gint height, + gint channels, + gint maxval); +static gboolean b_clock_prepare (BModule *module, + GError **error); +static void b_clock_relax (BModule *module); +static void b_clock_start (BModule *module); +static gint b_clock_tick (BModule *module); +static void b_clock_describe (BModule *module, + const gchar **title, + const gchar **description, + const gchar **author); +static gboolean b_clock_gettime (BClock *clock); + + +static GType b_type_clock = 0; + + +static const GEnumValue clock_mode_enum_values[] = +{ + { CLOCK_MODE_DIGITAL, "digital", NULL }, + { CLOCK_MODE_ANALOG, "analog", NULL }, + { 0, NULL, NULL } +}; + +GType +b_clock_mode_get_type (void) +{ + static GType enum_type = 0; + + if (!enum_type) + enum_type = g_enum_register_static ("BClockMode", + clock_mode_enum_values); + + return enum_type; +} + +G_MODULE_EXPORT gboolean +b_module_register (GTypeModule *module) +{ + b_clock_get_type (module); + return TRUE; +} + +GType +b_clock_get_type (GTypeModule *module) +{ + if (!b_type_clock) + { + static const GTypeInfo clock_info = + { + sizeof (BClockClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc) b_clock_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (BClock), + 0, /* n_preallocs */ + NULL /* instance_init */ + }; + + b_type_clock = g_type_module_register_type (module, + B_TYPE_MODULE, "BClock", + &clock_info, 0); + } + + return b_type_clock; +} + +static void +b_clock_class_init (BClockClass *klass) +{ + GObjectClass *object_class; + BModuleClass *module_class; + GParamSpec *param_spec; + + object_class = G_OBJECT_CLASS (klass); + module_class = B_MODULE_CLASS (klass); + + object_class->set_property = b_clock_set_property; + + param_spec = g_param_spec_enum ("mode", NULL, + "Clock mode (analog/digital)", + B_TYPE_CLOCK_MODE, DEFAULT_MODE, + G_PARAM_CONSTRUCT | G_PARAM_WRITABLE); + g_object_class_install_property (object_class, PROP_MODE, param_spec); + + module_class->query = b_clock_query; + module_class->prepare = b_clock_prepare; + module_class->relax = b_clock_relax; + module_class->start = b_clock_start; + module_class->tick = b_clock_tick; + module_class->describe = b_clock_describe; +} + +static void +b_clock_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec) +{ + BClock *line = B_CLOCK (object); + + switch (property_id) + { + case PROP_MODE: + line->mode = g_value_get_enum (value); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static gboolean +b_clock_query (gint width, + gint height, + gint channels, + gint maxval) +{ + return (width > 0 && height > 3 && channels == 1 && maxval == 255); +} + +static gboolean +b_clock_prepare (BModule *module, + GError **error) +{ + return TRUE; +} + +static void +b_clock_relax (BModule *module) +{ +} + +static void +b_clock_start (BModule *module) +{ + b_clock_gettime (B_CLOCK (module)); + b_module_ticker_start (module, b_clock_tick (module)); +} + +static gboolean +b_clock_gettime (BClock *clock) +{ + struct timeval tv; + + gettimeofday (&tv, NULL); + + if (tv.tv_sec != clock->epoche) + { + clock->epoche = tv.tv_sec; + return TRUE; + } + + return FALSE; +} + +static gint +b_clock_tick (BModule *module) +{ + gint h, m, s; + BClock *clock = B_CLOCK (module); + const BFont *digits = &b_digits_3x5; + struct tm *tm; + + if (!b_clock_gettime (clock)) + return TIMEOUT; + + b_module_fill (module, 0); + + tm = localtime ((time_t *) &clock->epoche); + h = tm->tm_hour; + m = tm->tm_min; + s = tm->tm_sec; + + /* g_print ("%02d:%02d:%02d\n", h, m, s); */ + + switch (clock->mode) + { + case CLOCK_MODE_DIGITAL: + { + gchar *text; + gint len, i, n, x, y, x0, y0; + + if (module->width > 20) + { + text = g_strdup_printf ("%02d:%02d:%02d", h, m, s); + } + else + { + text = g_strdup_printf (clock->colon ? "%02d:%02d" : "%02d %02d", + h, m); + clock->colon = !clock->colon; + } + + len = strlen (text); + + x0 = 0; + y0 = module->height / 4; + + for (n = 0; n < len; n++) + { + for (i = 0; i < digits->num_digits && digits->digits_str[i] != text[n]; i++); + + if (len * digits->advance > module->width) + { + if (text[n-1] == ':' || text[n-1] == ' ') + x0--; + + if (text[n] == ':' || text[n] == ' ') + x0--; + } + + if (i < digits->num_digits) + for (x = 0; x < digits->width; x++) + for (y = 0; y < digits->height; y++) + if (digits->data[i][y * digits->width + x] != '0') + b_module_draw_point (module, + x0 + x, y0 + y, module->maxval); + + x0 += digits->advance; + } + g_free (text); + } + + break; + case CLOCK_MODE_ANALOG: + { + gint x0, y0, r, x, y, a; + + x0 = module->width / 2; + y0 = module->height / 2; + r = MIN (x0, y0 / module->aspect); + + for (a = 0; a < 360; a += 30) + { + x = cos (a/180.0 * G_PI) * r + x0 + 0.5; + y = (sin (a/180.0 * G_PI) * r) * module->aspect + y0 + 0.5; + + b_module_draw_point (module, x, y, 0x7f); + } + + /* 1st hand */ + a = h; + a += 45; + a *= 30; + x = cos (a/180.0 * G_PI) * (r - 4) + x0 + 0.5; + y = (sin (a/180.0 * G_PI) * (r - 4)) * module->aspect + y0 + 0.5; + b_module_draw_line (module, x0, y0, x, y, 0x80); + + /* 2nd hand */ + a = m; + a += 45; + a *= 6; + x = cos (a/180.0 * G_PI) * (r - 2) + x0 + 0.5; + y = (sin (a/180.0 * G_PI) * (r - 2)) * module->aspect + y0 + 0.5; + b_module_draw_line (module, x0, y0, x, y, 0xe0); + + + /* 3rd hand */ + a = s; + a += 9; + a *= 6; + x = cos (a/180.0 * G_PI) * (r - 1) + x0 + 0.5; + y = (sin (a/180.0 * G_PI) * (r - 1)) * module->aspect + y0 + 0.5; + b_module_draw_line (module, x0, y0, x, y, 0xff); + } + break; + } + + b_module_paint (module); + return TIMEOUT; +} + +static void +b_clock_describe (BModule *module, + const gchar **title, + const gchar **description, + const gchar **author) +{ + *title = "BClock"; + *description = "BKloppte BClock"; + *author = "Daniel Mack"; +} diff --git a/blib-1.1.7/modules/bcountdown.c b/blib-1.1.7/modules/bcountdown.c new file mode 100644 index 0000000..276de5f --- /dev/null +++ b/blib-1.1.7/modules/bcountdown.c @@ -0,0 +1,336 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2002 The Blinkenlights Crew + * Sven Neumann + * Daniel Mack + * + * Inspired by the great 2001 sylvester countdown on the HDL. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include +#include +#include +#include + +#include +#include + +#include + +#include "digits.h" + +#define B_TYPE_COUNTDOWN (b_type_countdown) +#define B_COUNTDOWN(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), B_TYPE_COUNTDOWN, BCountdown)) +#define B_COUNTDOWN_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), B_TYPE_COUNTDOWN, BCountdownClass)) +#define B_IS_COUNTDOWN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), B_TYPE_COUNTDOWN)) + +#define MAX_DIGITS 4 + +typedef struct _BCountdown BCountdown; +typedef struct _BCountdownClass BCountdownClass; + +struct _BCountdown +{ + BModule parent_instance; + + gchar last_digits[MAX_DIGITS]; + gchar last_font; + gchar last_number_of_digits; + + gint end; +}; + +struct _BCountdownClass +{ + BModuleClass parent_class; +}; + +enum +{ + PROP_0, + PROP_END +}; + + +static GType b_countdown_get_type (GTypeModule *module); +static void b_countdown_class_init (BCountdownClass *klass); +static void b_countdown_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec); +static gboolean b_countdown_query (gint width, + gint height, + gint channels, + gint maxval); +static gboolean b_countdown_prepare (BModule *module, + GError **error); +static void b_countdown_start (BModule *module); +static gint b_countdown_tick (BModule *module); +static void b_countdown_describe (BModule *module, + const gchar **title, + const gchar **description, + const gchar **author); + + +static BModuleClass * parent_class = NULL; +static GType b_type_countdown = 0; + + +G_MODULE_EXPORT gboolean +b_module_register (GTypeModule *module) +{ + b_countdown_get_type (module); + return TRUE; +} + +GType +b_countdown_get_type (GTypeModule *module) +{ + if (!b_type_countdown) + { + static const GTypeInfo countdown_info = + { + sizeof (BCountdownClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc) b_countdown_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (BCountdown), + 0, /* n_preallocs */ + NULL /* instance_init */ + }; + + b_type_countdown = g_type_module_register_type (module, + B_TYPE_MODULE, + "BCountdown", + &countdown_info, 0); + } + + return b_type_countdown; +} + +static void +b_countdown_class_init (BCountdownClass *klass) +{ + GObjectClass *object_class; + BModuleClass *module_class; + GParamSpec *param_spec; + + object_class = G_OBJECT_CLASS (klass); + module_class = B_MODULE_CLASS (klass); + + parent_class = g_type_class_peek_parent (klass); + + object_class->set_property = b_countdown_set_property; + + param_spec = g_param_spec_int ("end", NULL, + "When to end the countdown.", + 0, G_MAXINT, 0, + G_PARAM_CONSTRUCT | G_PARAM_WRITABLE); + g_object_class_install_property (object_class, PROP_END, param_spec); + + module_class->query = b_countdown_query; + module_class->prepare = b_countdown_prepare; + module_class->start = b_countdown_start; + module_class->tick = b_countdown_tick; + module_class->describe = b_countdown_describe; +} + +static void +b_countdown_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec) +{ + BCountdown *countdown = B_COUNTDOWN (object); + + switch (property_id) + { + case PROP_END: + countdown->end = g_value_get_int (value); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static gboolean +b_countdown_query (gint width, + gint height, + gint channels, + gint maxval) +{ + return (width > 17 && height > 7 && channels == 1 && maxval > 0); +} + +static gboolean +b_countdown_prepare (BModule *module, + GError **error) +{ + BCountdown *countdown = B_COUNTDOWN (module); + + if (countdown->end < 0) + { + g_set_error (error, 0, 0, "Invalid end time for countdown."); + return FALSE; + } + + return TRUE; +} + +static void +b_countdown_start (BModule *module) +{ + gint x; + + BCountdown *countdown = B_COUNTDOWN (module); + countdown->last_font = -1; + countdown->last_number_of_digits = -1; + + for (x = 0; x < MAX_DIGITS; x++) + { + countdown->last_digits[x] = -1; + } + + b_module_ticker_start (module, 1); +} + +static gint +b_countdown_tick (BModule *module) +{ + BCountdown *countdown = B_COUNTDOWN (module); + struct timeval tv; + gint x0, y0; + gint x, y; + gint n, d, i, f; + gint scrollstep; + gint scroll[MAX_DIGITS]; + gint new_digits[MAX_DIGITS]; + const BFont *fonts[] = { &b_digits_3x5, + &b_digits_5x7, + &b_digits_8x7 }; + + gettimeofday (&tv, NULL); + + n = countdown->end - tv.tv_sec; + + g_print ("BCountdown: %d\n", n); + + if (n <= 0 || n > 999) + { + b_module_request_stop (module); + return -1; + } + + for (d = 1, i = n; i > 9; d++) + i /= 10; + + for (f = (sizeof (fonts) / sizeof (fonts[0])) - 1; + module->width - ((d - 1) * fonts[f]->advance + fonts[f]->width) < 0; + f--) + { + if (f < 0) + { + b_module_request_stop (module); + return -1; + } + } + + for (i = 0; i < MAX_DIGITS; i++) + new_digits[i] = ' '; + + g_print ("using font #%d, w: %d h: %d a: %d\n", + f, fonts[f]->width, fonts[f]->height, fonts[f]->advance); + + if (countdown->last_font != f || + countdown->last_number_of_digits != d) + b_module_fill (module, 0); + + for (i = d; i > 0; i--) + { + new_digits[i] = n % 10; + scroll[i] = (countdown->last_digits[i] == -1) + || (countdown->last_digits[i] != new_digits[i]); + n /= 10; + } + + for (scrollstep = 0; scrollstep < module->height; scrollstep++) + { + x0 = module->width - fonts[f]->width; + y0 = module->height - fonts[f]->height; + + /* i'm too tired to think about a smart algorithm... */ + if (d == 1) + x0 = 4; + + for (i = d; i > 0; i--) + { + if (scroll[i]) + { + for (x = 0; x < fonts[f]->width; x++) + { + for (y = module->height; y > 0; y--) + { + module->buffer[(y-1) * module->width + x + x0] = + module->buffer[(y-2) * module->width + x + x0]? + (module->maxval/2):0; + } + module->buffer[x + x0] = 0; + + for (y = 0; y < fonts[f]->height; y++) + { + if (y + y0 <= scrollstep + 1) + b_module_draw_point (module, x0 + x, y0 + y + (scrollstep - module->height), + (fonts[f]->data[new_digits[i]][y * fonts[f]->width + x] != '0')? + module->maxval:0); + } + } + } + x0 -= fonts[f]->advance; + } + b_module_paint (module); + usleep (33 * 1000); + } + + for (x = 0; x < MAX_DIGITS; x++) + { + countdown->last_digits[x] = new_digits[x]; + } + + b_module_paint (module); + + countdown->last_font = f; + countdown->last_number_of_digits = d; + + gettimeofday (&tv, NULL); + return 1000 - (tv.tv_usec / 1000); + +} + +static void +b_countdown_describe (BModule *module, + const gchar **title, + const gchar **description, + const gchar **author) +{ + *title = "BCountdown"; + *description = "Countdown"; + *author = "Sven Neumann"; +} diff --git a/blib-1.1.7/modules/bdebug.c b/blib-1.1.7/modules/bdebug.c new file mode 100644 index 0000000..b2f1b40 --- /dev/null +++ b/blib-1.1.7/modules/bdebug.c @@ -0,0 +1,387 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2002 The Blinkenlights Crew + * Daniel Mack + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +/* Test implementation for a BModule as used in the Blinkenlights context. + * BModules are used to implement games, debug tools etc. + * You can basically use this skeleton, rename the functions and hack your + * code into the functions that contain all the g_print()s now. + */ + +#include + +#include +#include + +#include + +#include "digits.h" + + +#define B_TYPE_DEBUG (b_type_debug) +#define B_DEBUG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), B_TYPE_DEBUG, BDebug)) +#define B_DEBUG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), B_TYPE_DEBUG, BDebugClass)) +#define B_IS_DEBUG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), B_TYPE_DEBUG)) + +typedef struct _BDebug BDebug; +typedef struct _BDebugClass BDebugClass; + +struct _BDebug +{ + BModule parent_instance; + + gint x, y, val; + gboolean dimming; + gboolean runmode; +}; + +struct _BDebugClass +{ + BModuleClass parent_class; +}; + +static GType b_debug_get_type (GTypeModule *module); +static void b_debug_class_init (BDebugClass *klass); +static void b_debug_init (BDebug *debug); +static void b_debug_finalize (GObject *object); +static gboolean b_debug_query (gint width, + gint height, + gint channels, + gint maxval); +static gboolean b_debug_prepare (BModule *module, + GError **error); +static void b_debug_start (BModule *module); +static void b_debug_stop (BModule *module); +static void b_debug_event (BModule *module, + BModuleEvent *event); +static gint b_debug_tick (BModule *module); +static void b_debug_describe (BModule *module, + const gchar **title, + const gchar **description, + const gchar **author); + + +static BModuleClass * parent_class = NULL; +static GType b_type_debug = 0; + + +G_MODULE_EXPORT gboolean +b_module_register (GTypeModule *module) +{ + b_debug_get_type (module); + + return TRUE; +} + +GType +b_debug_get_type (GTypeModule *module) +{ + if (! b_type_debug) + { + static const GTypeInfo debug_info = + { + sizeof (BDebugClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc) b_debug_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (BDebug), + 0, /* n_preallocs */ + (GInstanceInitFunc) b_debug_init, + }; + + b_type_debug = g_type_module_register_type (module, + B_TYPE_MODULE, + "BDebug", + &debug_info, + 0); + } + + return b_type_debug; +} + +static void +b_debug_class_init (BDebugClass *klass) +{ + GObjectClass *object_class; + BModuleClass *module_class; + + object_class = G_OBJECT_CLASS (klass); + module_class = B_MODULE_CLASS (klass); + + parent_class = g_type_class_peek_parent (klass); + + object_class->finalize = b_debug_finalize; + + module_class->query = b_debug_query; + module_class->prepare = b_debug_prepare; + module_class->start = b_debug_start; + module_class->stop = b_debug_stop; + module_class->event = b_debug_event; + module_class->tick = b_debug_tick; + module_class->describe = b_debug_describe; +} + + +static void +paint_digits (BDebug *debug) +{ + gint x, y, y_off, x_off = 3, n; + gint foo[4]; + BModule *module = B_MODULE (debug); + BFont digits = b_digits_3x5; + + g_print ("BDebug: %02d %02d\n", debug->x, debug->y); + + if (module->width < 12 || module->height < 12) + return; + + if (debug->y < 9) + y_off = debug->y + 4; + else + y_off = debug->y - 8; + + foo[0] = ((module->height - debug->y) / 10); + foo[1] = ((module->height - debug->y) % 10); + foo[2] = ((debug->x + 1) / 10); + foo[3] = ((debug->x + 1) % 10); + + for (n = 0; n < 4; n++) + { + for (x = 0; x < digits.width; x++) + for (y = 0; y < digits.height; y++) + if (digits.data[foo[n]][y*digits.width + x] != '0') + b_module_draw_point (module, x + x_off, y + y_off, module->maxval); + + if (n == 1) + x_off += digits.advance; + + x_off += x+1; + } +} + +static void +b_debug_init (BDebug *debug) +{ +} + +static void +b_debug_finalize (GObject *object) +{ + G_OBJECT_CLASS (parent_class)->finalize (object); +} + +static gboolean +b_debug_query (gint width, + gint height, + gint channels, + gint maxval) +{ + return (width > 0 && height > 0 && channels == 1 && maxval > 0); +} + +static gboolean +b_debug_prepare (BModule *module, + GError **error) +{ + BDebug *debug = B_DEBUG (module); + + debug->x = module->width / 2; + debug->y = module->height / 2; + debug->val = module->maxval; + debug->dimming = FALSE; + debug->runmode = FALSE; + + return TRUE; +} + +static void +b_debug_start (BModule *module) +{ + BDebug *debug = B_DEBUG (module); + + b_module_draw_point (module, debug->x, debug->y, debug->val); + b_module_paint (module); +} + +static void +b_debug_stop (BModule *module) +{ + /* clear the screen */ + b_module_fill (module, 0); + b_module_paint (module); +} + +static void +b_debug_event (BModule *module, + BModuleEvent *event) +{ + BDebug *debug = B_DEBUG (module); + + switch (event->device_id) + { + case 0: + switch (event->type) + { + case B_EVENT_TYPE_KEY: + switch (event->key) + { + case B_KEY_1: + debug->x--; + case B_KEY_2: + debug->y--; + break; + + case B_KEY_7: + debug->y++; + case B_KEY_4: + debug->x--; + break; + + case B_KEY_3: + debug->y--; + case B_KEY_6: + debug->x++; + break; + + case B_KEY_9: + debug->x++; + case B_KEY_8: + debug->y++; + break; + + case B_KEY_0: + if (debug->runmode) + break; + + if (debug->dimming) + { + debug->dimming = FALSE; + b_module_ticker_stop (module); + } + else + { + debug->dimming = TRUE; + b_module_ticker_start (module, 1000); + } + break; + + case B_KEY_5: + debug->val += module->maxval/8; + if (debug->val > module->maxval) + debug->val = 0; + break; + + case B_KEY_HASH: + if (debug->dimming) + { + debug->dimming = FALSE; + b_module_ticker_stop (module); + } + + debug->val = module->maxval; + + if (debug->runmode) + { + debug->runmode = FALSE; + b_module_ticker_stop (module); + } + else + { + debug->runmode = TRUE; + b_module_ticker_start (module, 250); + } + break; + + case B_KEY_ASTERISK: + debug->val = module->maxval; + break; + + default: + break; + } + break; + default: + break; + } + case 1: + break; + } + + if (debug->x > module->width - 1) + { + debug->x = 0; + debug->y++; + } + + if (debug->y > module->height - 1) + debug->y = 0; + + if (debug->x < 0) + { + debug->x = module->width - 1; + debug->y--; + } + + if (debug->y < 0) + debug->y = module->height - 1; + + b_module_fill (module, 0); + b_module_draw_point (module, debug->x, debug->y, debug->val); + + paint_digits (debug); + + b_module_paint (module); +} + +static gint +b_debug_tick (BModule *module) +{ + BDebug *debug = B_DEBUG (module); + BModuleEvent ev; + + ev.device_id = 0; + ev.type = B_EVENT_TYPE_KEY; + + if (debug->dimming) + ev.key = B_KEY_5; + else if (debug->runmode) + ev.key = B_KEY_6; + + b_debug_event (module, &ev); + + if (debug->dimming) + return 1000; + else if (debug->runmode) + return 333; + + return 0; +} + +static void +b_debug_describe (BModule *module, + const gchar **title, + const gchar **description, + const gchar **author) +{ + *title = "BDebug"; + *description = "Blinkenlights Debug swiss army knife"; + *author = "Blinkenlights Crew"; +} diff --git a/blib-1.1.7/modules/bdropout.c b/blib-1.1.7/modules/bdropout.c new file mode 100644 index 0000000..2515369 --- /dev/null +++ b/blib-1.1.7/modules/bdropout.c @@ -0,0 +1,221 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2002 The Blinkenlights Crew + * Daniel Mack + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include + +#include +#include + +#include + +#include + +#define TIMEOUT 5 + +#define B_TYPE_DROPOUT (b_type_dropout) +#define B_DROPOUT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), B_TYPE_DROPOUT, BDropout)) +#define B_DROPOUT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), B_TYPE_DROPOUT, BDropoutClass)) +#define B_IS_DROPOUT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), B_TYPE_DROPOUT)) + +typedef struct _BDropout BDropout; +typedef struct _BDropoutClass BDropoutClass; + +struct _BDropout +{ + BModule parent_instance; + + gboolean *dropmap; + gint n; +}; + +struct _BDropoutClass +{ + BModuleClass parent_class; +}; + +static GType b_dropout_get_type (GTypeModule *module); + +static void b_dropout_class_init (BDropoutClass *klass); +static void b_dropout_init (BDropout *dropout); + +static gboolean b_dropout_query (gint width, + gint height, + gint channels, + gint maxval); +static gboolean b_dropout_prepare (BModule *module, + GError **error); +static void b_dropout_relax (BModule *module); +static void b_dropout_start (BModule *module); +static gint b_dropout_tick (BModule *module); +static void b_dropout_describe (BModule *module, + const gchar **title, + const gchar **description, + const gchar **author); + + +static GType b_type_dropout = 0; + + +G_MODULE_EXPORT gboolean +b_module_register (GTypeModule *module) +{ + b_dropout_get_type (module); + return TRUE; +} + +GType +b_dropout_get_type (GTypeModule *module) +{ + if (!b_type_dropout) + { + static const GTypeInfo dropout_info = + { + sizeof (BDropoutClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc) b_dropout_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (BDropout), + 0, /* n_preallocs */ + (GInstanceInitFunc) b_dropout_init, + }; + + b_type_dropout = g_type_module_register_type (module, + B_TYPE_MODULE, "BDropout", + &dropout_info, 0); + } + + return b_type_dropout; +} + +static void +b_dropout_class_init (BDropoutClass *klass) +{ + GObjectClass *object_class; + BModuleClass *module_class; + + object_class = G_OBJECT_CLASS (klass); + module_class = B_MODULE_CLASS (klass); + + module_class->query = b_dropout_query; + module_class->prepare = b_dropout_prepare; + module_class->relax = b_dropout_relax; + module_class->start = b_dropout_start; + module_class->tick = b_dropout_tick; + module_class->describe = b_dropout_describe; +} + +static void +b_dropout_init (BDropout *dropout) +{ +} + +static gboolean +b_dropout_query (gint width, + gint height, + gint channels, + gint maxval) +{ + return (width > 0 && height > 3 && channels == 1 && maxval == 255); +} + +static gboolean +b_dropout_prepare (BModule *module, + GError **error) +{ + BDropout *dropout = B_DROPOUT (module); + /* gint x, y; */ + + g_return_val_if_fail (module->height > 0, FALSE); + + /* HACK */ + /* + for (x=0; xwidth; x++) + for (y=0; yheight; y++) + b_module_draw_point (module, x, y, 0xff); + */ + + dropout->dropmap = g_new0 (gboolean, module->width * module->height); + dropout->n = 0; + + return TRUE; +} + +static void +b_dropout_relax (BModule *module) +{ + BDropout *dropout = B_DROPOUT (module); + + if (dropout->dropmap) + { + g_free (dropout->dropmap); + dropout->dropmap = NULL; + } +} + +static void +b_dropout_start (BModule *module) +{ + b_module_ticker_start (module, b_dropout_tick (module)); +} + +static gint +b_dropout_tick (BModule *module) +{ + BDropout *dropout = B_DROPOUT (module); + gint x, y, n; + + for (n = 0; n < 5; n++) + { + if (++dropout->n == module->width * module->height) + { + b_module_fill (module, 0); + b_module_paint (module); + b_module_request_stop (module); + return 0; + } + + do + { + x = random () % module->width; + y = random () % module->height; + } + while (dropout->dropmap[(y * module->width) + x]); + + dropout->dropmap[(y * module->width) + x] = TRUE; + b_module_draw_point (module, x, y, 0); + } + + b_module_paint (module); + + return TIMEOUT; +} + +static void +b_dropout_describe (BModule *module, + const gchar **title, + const gchar **description, + const gchar **author) +{ + *title = "BDropout"; + *description = "Dropout hack"; + *author = "Daniel Mack"; +} diff --git a/blib-1.1.7/modules/bfire.c b/blib-1.1.7/modules/bfire.c new file mode 100644 index 0000000..9d1050b --- /dev/null +++ b/blib-1.1.7/modules/bfire.c @@ -0,0 +1,286 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2002 The Blinkenlights Crew + * Sven Neumann + * + * Fire algorithm is based upon aafire which is distributed with aalib. + * + * dT8 8Tb + * dT 8 8 Tb + * dT 8 8 Tb + * + * dT 8 8 Tb + * dT 8 8 Tb + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include + +#include +#include + +#include + +#include + +#define MAXTABLE (256*5) +#define TIMEOUT 160 + +#define B_TYPE_FIRE (b_type_fire) +#define B_FIRE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), B_TYPE_FIRE, BFire)) +#define B_FIRE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), B_TYPE_FIRE, BFireClass)) +#define B_IS_FIRE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), B_TYPE_FIRE)) + +typedef struct _BFire BFire; +typedef struct _BFireClass BFireClass; + +struct _BFire +{ + BModule parent_instance; + + gboolean flames; + gint frames; + guint table[MAXTABLE]; +}; + +struct _BFireClass +{ + BModuleClass parent_class; +}; + +enum +{ + PROP_0, + PROP_FLAMES +}; + + +static GType b_fire_get_type (GTypeModule *module); + +static void b_fire_class_init (BFireClass *klass); +static void b_fire_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec); +static void b_fire_init (BFire *fire); + +static gboolean b_fire_query (gint width, + gint height, + gint channels, + gint maxval); +static gboolean b_fire_prepare (BModule *module, + GError **error); +static void b_fire_start (BModule *module); +static gint b_fire_tick (BModule *module); +static void b_fire_describe (BModule *module, + const gchar **title, + const gchar **description, + const gchar **author); + + +static GType b_type_fire = 0; + + +G_MODULE_EXPORT gboolean +b_module_register (GTypeModule *module) +{ + b_fire_get_type (module); + return TRUE; +} + +GType +b_fire_get_type (GTypeModule *module) +{ + if (!b_type_fire) + { + static const GTypeInfo fire_info = + { + sizeof (BFireClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc) b_fire_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (BFire), + 0, /* n_preallocs */ + (GInstanceInitFunc) b_fire_init, + }; + + b_type_fire = g_type_module_register_type (module, + B_TYPE_MODULE, "BFire", + &fire_info, 0); + } + + return b_type_fire; +} + +static void +b_fire_class_init (BFireClass *klass) +{ + GObjectClass *object_class; + BModuleClass *module_class; + GParamSpec *param_spec; + + object_class = G_OBJECT_CLASS (klass); + module_class = B_MODULE_CLASS (klass); + + object_class->set_property = b_fire_set_property; + + param_spec = g_param_spec_boolean ("flames", NULL, + "Whether to draw flames or not.", + TRUE, + G_PARAM_CONSTRUCT | G_PARAM_WRITABLE); + g_object_class_install_property (object_class, PROP_FLAMES, param_spec); + + module_class->query = b_fire_query; + module_class->prepare = b_fire_prepare; + module_class->start = b_fire_start; + module_class->tick = b_fire_tick; + module_class->describe = b_fire_describe; +} + +static void +b_fire_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec) +{ + BFire *fire = B_FIRE (object); + + switch (property_id) + { + case PROP_FLAMES: + fire->flames = g_value_get_boolean (value); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static void +b_fire_init (BFire *fire) +{ +} + +static gboolean +b_fire_query (gint width, + gint height, + gint channels, + gint maxval) +{ + return (width > 0 && height > 3 && channels == 1 && maxval == 255); +} + +static gboolean +b_fire_prepare (BModule *module, + GError **error) +{ + BFire *fire = B_FIRE (module); + guint i, p2; + gint minus; + + g_return_val_if_fail (module->height > 0, FALSE); + + minus = MAX (1, 500 / module->height); + + for (i = 0; i < MAXTABLE; i++) + { + if (i > minus) + { + p2 = (i - minus) / 5; + fire->table[i] = p2; + } + else + fire->table[i] = 0; + } + + return TRUE; +} + +static void +b_fire_start (BModule *module) +{ + B_FIRE (module)->frames = 0; + b_module_ticker_start (module, b_fire_tick (module)); +} + +static gint +b_fire_tick (BModule *module) +{ + BFire *fire = B_FIRE (module); + gint width = module->width; + gint height = module->height; + guchar *d; + guint i, r, last; + + if (fire->flames) + { + guint i1 = 1; + guint i2 = 4 * width + 1; + + for (i = 0, d = module->buffer + width * (height - 3); + i < width; + i1 += 4, i2 -= 4, d++, i++) + { + for (r = rand() % 6, last = 4 * (rand() % MIN (i1, MIN (i2, 64))); + r > 0 && i < width; + d++, r--, i1 += 4, i2 -= 4, i++) + { + d[0] = last; + last += rand() % 16 - 4; + d[width] = last; + last += rand() % 16 - 4; + d[2 * width] = last; + last += rand() % 16 - 4; + } + } + } + else if (++fire->frames >= 2 * height) + { + b_module_request_stop (module); + return 0; + } + + for (i = width * height, d = module->buffer; i > width * 2 + 1; d++, i--) + *d = fire->table[(d[width - 1] + d[width + 1] + d[width] + + d[2 * width - 1] + d[2 * width + 1])]; + + for ( ; i > width + 1; d++, i--) + *d = fire->table[(d[width - 1] + d[width + 1] + d[width] + + 2 * d[0])]; + + for ( ; i > 1; d++, i--) + *d = fire->table[d[- 1] + 3 * d[0] + d[1]]; + + *d = fire->table[2 * d[- 1] + 3 * d[0]]; + + b_module_paint (module); + + return TIMEOUT; +} + +static void +b_fire_describe (BModule *module, + const gchar **title, + const gchar **description, + const gchar **author) +{ + *title = "BFire"; + *description = "Fire hack"; + *author = "Sven Neumann"; +} diff --git a/blib-1.1.7/modules/bmatrix.c b/blib-1.1.7/modules/bmatrix.c new file mode 100644 index 0000000..f67cc07 --- /dev/null +++ b/blib-1.1.7/modules/bmatrix.c @@ -0,0 +1,757 @@ +/* bmatrix.c Matrix Module for blib + * + * Copyright (c) 2002 Simon Budig , + * 1999 Jamie Zawinski + * + * Inspired/Ripped off from the Matrix hack from the xscreensaver package. + * + * Due to the very hackish nature of this hack no warranties for the + * quality of the code are given. Sorry. + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation. No representations are made about the suitability of this + * software for any purpose. It is provided "as is" without express or + * implied warranty. + * + * Matrix -- simulate the text scrolls from the movie "The Matrix". + * + */ + +#include +#include + +#include +#include + +#include + + +#define TIMEOUT 60 +#define MATRIX_DENSITY 40 /* Average density of used pixels */ +#define MATRIX_INSERT "both" /* "top" "bottom" "both" */ +#define MATRIX_ACTION 0 /* special effects - flashing, errors, etc. */ +#define MATRIX_SPINNER 0 /* number of stationary flashing pixels */ + +/* Uncomment this for 2 pixels wide columns +#define MATRIX_WIDE + */ + +#define B_TYPE_MATRIX (b_type_matrix) +#define B_MATRIX(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), B_TYPE_MATRIX, BMatrix)) +#define B_MATRIX_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), B_TYPE_MATRIX, BMatrixClass)) +#define B_IS_MATRIX(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), B_TYPE_MATRIX)) + +typedef struct _BMatrix BMatrix; +typedef struct _BMatrixClass BMatrixClass; + +typedef struct _BMatrixCell BMatrixCell; +typedef struct _BMatrixFeeder BMatrixFeeder; + + +struct _BMatrixCell +{ + guint glyph : 8; + gint glow : 8; + guint changed : 1; + guint spinner : 1; +}; + +struct _BMatrixFeeder +{ + gint remaining; + gint throttle; + gint y; + gint failure; + gint fail_type; +}; + +struct _BMatrix +{ + BModule parent_instance; + + gint grid_width, grid_height; + gint flash_x, flash_y, flash_count; + gint failcount; + BMatrixCell *cells; + BMatrixFeeder *feeders; + gint action_p; + gint insert_top_p, insert_bottom_p; + gint density; + gint density_param; + + gint image_width, image_height; + gint nglyphs; +}; + +struct _BMatrixClass +{ + BModuleClass parent_class; +}; + +enum +{ + PROP_0, + PROP_LINES +}; + +static gint densitizer (BMatrix *state); +static void init_spinners (BMatrix *state); +static void draw_matrix (BMatrix *state); + + +static guchar intensities[] = +{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 3, 4, 5, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15 +}; + +static GType b_matrix_get_type (GTypeModule *module); +static void b_matrix_class_init (BMatrixClass *klass); +static gboolean b_matrix_query (gint width, + gint height, + gint channels, + gint maxval); +static gboolean b_matrix_prepare (BModule *module, + GError **error); +static void b_matrix_relax (BModule *module); +static void b_matrix_start (BModule *module); +static gint b_matrix_tick (BModule *module); +static void b_matrix_describe (BModule *module, + const gchar **title, + const gchar **description, + const gchar **author); + +static GType b_type_matrix = 0; + + +G_MODULE_EXPORT gboolean +b_module_register (GTypeModule *module) +{ + b_matrix_get_type (module); + return TRUE; +} + +GType +b_matrix_get_type (GTypeModule *module) +{ + if (!b_type_matrix) + { + static const GTypeInfo matrix_info = + { + sizeof (BMatrixClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc) b_matrix_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (BMatrix), + 0, /* n_preallocs */ + NULL /* instance_init */ + }; + + b_type_matrix = g_type_module_register_type (module, + B_TYPE_MODULE, "BMatrix", + &matrix_info, 0); + } + + return b_type_matrix; +} + +static void +b_matrix_class_init (BMatrixClass *klass) +{ + BModuleClass *module_class; + + module_class = B_MODULE_CLASS (klass); + + module_class->query = b_matrix_query; + module_class->prepare = b_matrix_prepare; + module_class->relax = b_matrix_relax; + module_class->start = b_matrix_start; + module_class->tick = b_matrix_tick; + module_class->describe = b_matrix_describe; +} + +static gboolean +b_matrix_query (gint width, + gint height, + gint channels, + gint maxval) +{ + return (width > 0 && height > 0 && maxval == 255 && channels == 1); +} + +static gboolean +b_matrix_prepare (BModule *module, + GError **error) +{ + BMatrix *state = B_MATRIX (module); + gchar *insert = NULL; + + state->nglyphs = 15; + +#ifdef MATRIX_WIDE + state->grid_width = (module->width + 1) / 3; +#else + state->grid_width = module->width; +#endif + state->grid_height = module->height; + + state->flash_count = -rand() % 1000; + + state->cells = g_new0 (BMatrixCell, state->grid_width * state->grid_height); + state->feeders = g_new0 (BMatrixFeeder, state->grid_width); + + state->density = MATRIX_DENSITY; + if (state->density < 0) state->density = 0; + if (state->density > 100) state->density = 100; + state->density_param = densitizer (state); + + insert = MATRIX_INSERT; + if (insert && !strcmp(insert, "top")) + { + state->insert_top_p = TRUE; + state->insert_bottom_p = FALSE; + } + else if (insert && !strcmp(insert, "bottom")) + { + state->insert_top_p = FALSE; + state->insert_bottom_p = TRUE; + } + else if (insert && !strcmp(insert, "both")) + { + state->insert_top_p = TRUE; + state->insert_bottom_p = TRUE; + } + else + { + /* if (insert && *insert) + fprintf (stderr, + "%s: `insert' must be `top', `bottom', or `both', not `%s'\n", + "bmatrix", insert); */ + state->insert_top_p = FALSE; + state->insert_bottom_p = TRUE; + } + + state->action_p = MATRIX_ACTION; + + init_spinners (state); + + return TRUE; +} + +static void +b_matrix_relax (BModule *module) +{ + BMatrix *matrix = B_MATRIX (module); + + if (matrix->cells) + { + g_free (matrix->cells); + matrix->cells = NULL; + } + if (matrix->feeders) + { + g_free (matrix->feeders); + matrix->feeders = NULL; + } +} + +static void +b_matrix_start (BModule *module) +{ + b_module_fill (module, 0); + b_module_ticker_start (module, TIMEOUT); +} + +static gint +b_matrix_tick (BModule *module) +{ + BMatrix *matrix = B_MATRIX (module); + + draw_matrix (matrix); + b_module_paint (module); + + return TIMEOUT; +} + +static void +b_matrix_describe (BModule *module, + const gchar **title, + const gchar **description, + const gchar **author) +{ + *title = "BMatrix"; + *description = "Matrix hack"; + *author = "Simon Budig, Jamie Zawinski"; +} + +static gint +densitizer (BMatrix *state) +{ + /* Horrid kludge that converts percentages (density of screen coverage) + to the parameter that actually controls this. I got this mapping + empirically, on a 1024x768 screen. Sue me. */ + /* Used to determine a reasonable starting value, xmatrix tries to + adjust this parameter while running. */ + if (state->density < 10) return 85; + else if (state->density < 15) return 60; + else if (state->density < 20) return 45; + else if (state->density < 25) return 25; + else if (state->density < 30) return 20; + else if (state->density < 35) return 15; + else if (state->density < 45) return 10; + else if (state->density < 50) return 8; + else if (state->density < 55) return 7; + else if (state->density < 65) return 5; + else if (state->density < 80) return 3; + else if (state->density < 90) return 2; + else return 1; +} + + +static void +init_spinners (BMatrix *state) +{ + gint i = MATRIX_SPINNER; + gint x, y; + BMatrixCell *cell; + + for (y = 0; y < state->grid_height; y++) + for (x = 0; x < state->grid_width; x++) + { + cell = &state->cells[state->grid_width * y + x]; + cell->spinner = 0; + } + + while (--i > 0) + { + x = rand() % state->grid_width; + y = rand() % state->grid_height; + cell = &state->cells[state->grid_width * y + x]; + cell->spinner = 1; + } +} + +static void +insert_glyph (BMatrix *state, gint glyph, gint x, gint y) +{ + gint bottom_feeder_p = (y >= 0); + BMatrixCell *from, *to; + + if (y >= state->grid_height) + return; + + if (bottom_feeder_p) + { + to = &state->cells[state->grid_width * y + x]; + } + else + { + for (y = state->grid_height-1; y > 0; y--) + { + from = &state->cells[state->grid_width * (y-1) + x]; + to = &state->cells[state->grid_width * y + x]; + to->glyph = from->glyph; + to->glow = from->glow; + to->changed = 1; + } + to = &state->cells[x]; + } + + to->glyph = glyph; + to->changed = 1; + + if (!to->glyph) + ; + else if (bottom_feeder_p) + to->glow = 1 + (rand() % 2); + else + to->glow = 0; +} + + +static void +feed_matrix (BMatrix *state) +{ + gint x; + + /* Update according to current feeders. */ + for (x = 0; x < state->grid_width; x++) + { + BMatrixFeeder *f = &state->feeders[x]; + + if (f->throttle) /* this is a delay tick, synced to frame. */ + { + f->throttle--; + } + else if (f->remaining > 0) /* how many items are in the pipe */ + { + gint g = (rand() % state->nglyphs) + 1; + insert_glyph (state, g, x, f->y); + f->remaining--; + if (f->y >= 0) /* bottom_feeder_p */ + f->y++; + } + else /* if pipe is empty, insert spaces */ + { + insert_glyph (state, 0, x, f->y); + if (f->y >= 0) /* bottom_feeder_p */ + f->y++; + } + + if ((rand() % 10) == 0) /* randly change throttle speed */ + { + f->throttle = ((rand() % 5) + (rand() % 5)); + } + } +} + + +static void +hack_matrix (BMatrix *state) +{ + gint x; + + /* Glow some characters. */ + if (!state->insert_bottom_p) + { + gint i = rand() % (state->grid_width / 2); + while (--i > 0) + { + gint x = rand() % state->grid_width; + gint y = rand() % state->grid_height; + BMatrixCell *cell = &state->cells[state->grid_width * y + x]; + if (cell->glyph && cell->glow == 0) + { + cell->glow = rand() % 10; + cell->changed = 1; + } + } + } + + /* Change some of the feeders. */ + + state->failcount = 0; + + for (x = 0; x < state->grid_width; x++) + { + BMatrixFeeder *f = &state->feeders[x]; + gint bottom_feeder_p; + + if (state->action_p) + /* failure of some columns is controlled by a counter: + f->failure == 0: normal operation, + f->failure < -1: flickering, will black out soon, + f->failure == -1: black out + f->failure > 1: still black out... + f->failure == 1: resuming operation + */ + { + if (f->failure != 0) + { + f->failure += (f->failure < 0 ? 1 : -1); + state->failcount++; + } + + if (f->failure < -1) + { + gint y; + gint r = rand() % 10; + BMatrixCell *cell; + f->fail_type = r > 2 ? 1 : 2; + if (f->fail_type == 2) + for (y=0; y < state->grid_height; y++) + { + cell = &state->cells[state->grid_width * y + x]; + if (cell->glyph) + { + cell->glow = 1; + cell->changed = 1; + } + } + } + + if (f->failure == -1) + { + f->failure += 150; /* This should be variable, but equal + for failing neighbours */ + f->fail_type = 1; + } + + if (f->failure == 1) + { + gint y; + BMatrixCell *cell; + + f->fail_type = 0; + for (y=0; y < state->grid_height; y++) + { + cell = &state->cells[state->grid_width * y + x]; + if (cell->glyph) + { + cell->glow = 1; + cell->changed = 1; + } + } + } + } + + if (f->remaining > 0) /* never change if pipe isn't empty */ + continue; + + /* if ((rand() % densitizer(state)) != 0) then change N% of the time */ + if ((rand() % state->density_param) != 0) /* then change N% of the time */ + continue; + + f->remaining = 3 + (rand() % state->grid_height); + f->throttle = ((rand() % 5) + (rand() % 5)); + + if ((rand() % 4) != 0) + f->remaining = 0; + + if (state->insert_top_p && state->insert_bottom_p) + bottom_feeder_p = (rand() & 1); + else + bottom_feeder_p = state->insert_bottom_p; + + if (bottom_feeder_p) + f->y = rand() % (state->grid_height / 2); + else + f->y = -1; + } + + if (state->action_p) + { + /* Some columns may fail - they typically infect their neighbours */ + gint failtimeout = (rand() % 12) + 3; + + if (!(rand() % 200) && state->failcount <= state->grid_width / 6) + { + gint w = rand() % (1 + state->grid_width / 12); + gint i; + + x = (rand() % state->grid_width); + + for (i = -w; i <= w ; i++) + { + if (x+i >= 0 && + x+i < state->grid_width && + !(state->feeders[x+i].failure)) + { + state->feeders[x+i].failure = + -failtimeout - w + (rand() % (abs(i/3)+1)); + } + } + } + + /* Sometimes a flash (expanding square of glowing glyphs) will appear. + state->flash_count < 0: Count up to next flash + state->flash_count >= 0: radius of flash + */ + if (state->flash_count <= state->grid_width + state->grid_height) + state->flash_count++; + else + state->flash_count = - 1000 + rand() % 800; + + if (state->flash_count == 0) + { + BMatrixCell *cell; + state->flash_x = rand() % state->grid_width; + state->flash_y = rand() % state->grid_height; + cell = + &state->cells[state->grid_width * state->flash_y + state->flash_x]; + if (cell->glyph && !(cell->glow > 0)) + { + cell->glow = 1; + cell->changed = 1; + } + } + + if (state->flash_count > 0) + { + BMatrixCell *cell; + gint j, k, x, y; + k = state->flash_count + state->flash_count / 4; + for (; state->flash_count < k; state->flash_count++) + { + for (j=0; j <= 2 * state->flash_count; j += 1) + { + x = state->flash_x - state->flash_count + j; + y = state->flash_y - state->flash_count; + if (x >= 0 && x < state->grid_width && y >= 0 && + y < state->grid_height) + { + cell = &state->cells[state->grid_width * y + x]; + if (cell->glyph) { cell->glow+=2; cell->changed = 1; } + } + y = state->flash_y + state->flash_count; + if (x >= 0 && x < state->grid_width && y >= 0 && + y < state->grid_height) + { + cell = &state->cells[state->grid_width * y + x]; + if (cell->glyph) { cell->glow+=2; cell->changed = 1; } + } + y = state->flash_y - state->flash_count + j; + x = state->flash_x - state->flash_count; + if (x >= 0 && x < state->grid_width && y >= 0 && + y < state->grid_height) + { + cell = &state->cells[state->grid_width * y + x]; + if (cell->glyph) { cell->glow+=2; cell->changed = 1; } + } + x = state->flash_x + state->flash_count; + if (x >= 0 && x < state->grid_width && y >= 0 && + y < state->grid_height) + { + cell = &state->cells[state->grid_width * y + x]; + if (cell->glyph) { cell->glow+=2; cell->changed = 1; } + } + } + } + } + } + + if (! (rand() % 500)) + init_spinners (state); +} + +static void +draw_matrix (BMatrix *state) +{ + gint x, y, i; + gint count = 0; + BModule *module = B_MODULE (state); + +# define WINDOW 25 + gint dens; + static gint ndens = 0; + static gint tdens = 0; + static gint *densities = NULL; + static gint *parameters = NULL; + static gint dens_sum, param_sum; + + feed_matrix (state); + hack_matrix (state); + + for (x = 0; x < state->grid_width; x++) + { + /* BMatrixFeeder *f = &(state->feeders[x]); */ + + for (y = 0; y < state->grid_height; y++) + { + BMatrixCell *cell = &state->cells[state->grid_width * y + x]; + + if (cell->glyph) + count++; + + if (!cell->changed) + continue; + +#ifdef MATRIX_WIDE + if (cell->glyph == 0) + { + b_module_draw_point (module, x*3, y, 0); + b_module_draw_point (module, x*3+1, y, 0); + } + else + { + b_module_draw_point (module, x*3, y, 17 * intensities[ + ((cell->glow > 0 || cell->spinner) ? + cell->glyph + 30 + : (cell->glow == 0 + ? cell->glyph + 15 + : cell->glyph)) -1]); + b_module_draw_point (module, x*3+1, y, 17 * intensities[ + ((cell->glow > 0 || cell->spinner) ? + cell->glyph + 30 + : (cell->glow == 0 + ? cell->glyph + 15 + : cell->glyph)) -1]); + } +#else + if (cell->glyph == 0) + { + b_module_draw_point (module, x, y, 0); + } + else + { + b_module_draw_point (module, x, y, 17 * intensities[ + ((cell->glow > 0 || cell->spinner) ? + cell->glyph + 30 + : (cell->glow == 0 + ? cell->glyph + 15 + : cell->glyph)) -1]); + } +#endif + + cell->changed = 0; + + if (cell->glow > 0) + { + cell->glow--; + cell->changed = 1; + } + else if (cell->glow < 0) + { + cell->glow++; + if (cell->glow == 0) + cell->glyph = 0; + cell->changed = 1; + } + + if (cell->spinner) + { + cell->glyph = rand() % state->nglyphs; + cell->changed = 1; + } + } + } + + /* Adjust density-parameter */ + dens = (100 * count) / (state->grid_width * state->grid_height); + + if (!densities) { + densities = g_new (gint, WINDOW); + for (i = 0; i < WINDOW; i++) densities[i] = state->density; + dens_sum = state->density * WINDOW; + } + if (!parameters) { + parameters = g_new (gint, WINDOW); + for (i = 0; i < WINDOW; i++) parameters[i] = state->density_param; + param_sum = state->density_param * WINDOW; + } + + /* collect the last WINDOW density/parameter values */ + + dens_sum -= densities [ndens % WINDOW]; + param_sum -= parameters [ndens % WINDOW]; + + densities [ndens % WINDOW] = dens; + parameters [ndens % WINDOW] = state->density_param; + + dens_sum += densities [ndens % WINDOW]; + param_sum += parameters [ndens % WINDOW]; + + tdens += dens; + ndens++; + + /* assume, that the average parameter results in the average density + * and adjust the parameter accordingly +- 1 */ + + if (dens_sum <= (state->density - 5) * WINDOW && + state->density_param > 1) + state->density_param = param_sum / WINDOW - 1; + + if (dens_sum >= (state->density + 5) * WINDOW) + state->density_param = param_sum / WINDOW + 2; + /* +2 to jump over the rounding error */ + +#if 0 + printf ("density: %d%% (%d%%), param: %d\n", + dens, (tdens / ndens), state->density_param); +#endif +} diff --git a/blib-1.1.7/modules/bpacman.c b/blib-1.1.7/modules/bpacman.c new file mode 100644 index 0000000..dbfbff8 --- /dev/null +++ b/blib-1.1.7/modules/bpacman.c @@ -0,0 +1,813 @@ +/* BPacman: Pacman module for Blinkenlights + * + * Copyright (c) 2002 1stein <1stein@1stein.no-ip.com> + * + * based on Test implementation for a BModule by the Blinkenlights Crew + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include +#include + +#include +#include + +#include + +#define BPacmanVerMaj 1 +#define BPacmanVerMin 0 +#define BPacmanVerRev 3 + +//minimum size and color count of display +#define BPacmanSizeXMin 25 +#define BPacmanSizeYMin 19 +#define BPacmanColorCntMin 4 +//number of lives for pacman +#define BPacmanLives 3 +//speed of game +#define BPacmanTicks 150 +//number of ticks pacman is dead after contact with monster +#define BPacmanDeadTime 10 +//position of eaten monsters +#define BPacmanMonsterNirvana -100 +//the colors +#define BPacmanColorEmpty( MaxColor ) (0) +#define BPacmanColorWall( MaxColor ) ((MaxColor) * 2 / 3) +#define BPacmanColorPoint( MaxColor ) ((MaxColor) / 3) +#define BPacmanColorPacmanDead( MaxColor ) ((MaxColor) / 2) +#define BPacmanColorPacmanAlive( MaxColor ) (MaxColor) +#define BPacmanColorMonsterDead( MaxColor ) ((MaxColor) / 2) +#define BPacmanColorMonsterAlive( MaxColor ) (MaxColor) +//start position and direction of pacman +#define BPacmanStartPosX -1 +#define BPacmanStartPosY 8 +#define BPacmanStartDirX 1 +#define BPacmanStartDirY 0 +//start positions and directions of monsters +#define BPacmanMonsterCnt 2 +#define BPacmanMonster0StartPosX 12 +#define BPacmanMonster0StartPosY -1 +#define BPacmanMonster0StartDirX 0 +#define BPacmanMonster0StartDirY 1 +#define BPacmanMonster1StartPosX 12 +#define BPacmanMonster1StartPosY 19 +#define BPacmanMonster1StartDirX 0 +#define BPacmanMonster1StartDirY -1 +//the walls of the game-field +int BPacmanWalls[BPacmanSizeYMin][BPacmanSizeXMin] = { + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, + {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, + {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, + {1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1}, + {1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1}, + {1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1}, + {0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0}, + {0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0}, + {0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0}, + {1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1}, + {1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1}, + {1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1}, + {1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1}, + {1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1}, + {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, + {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, + {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1} +}; +//the positions where changing direction is allowed +int BPacmanChDir[BPacmanSizeYMin][BPacmanSizeXMin] = { + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} +}; +//the points of the game-field +int BPacmanPoints[BPacmanSizeYMin][BPacmanSizeXMin] = { + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} +}; + +#ifdef PACMAN_DEBUG +#define dbg_print g_print +#else +static inline void +dbg_print (char * Fmt, ...) +{ +} +#endif + +#define B_TYPE_PACMAN_MODULE (b_type_pacman_module) +#define B_PACMAN_MODULE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), B_TYPE_PACMAN_MODULE, BPacmanModule)) +#define B_PACMAN_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), B_TYPE_PACMAN_MODULE, BPacmanModuleClass)) +#define B_IS_PACMAN_MODULE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), B_TYPE_PACMAN_MODULE)) + +typedef struct _BPacmanModule BPacmanModule; +typedef struct _BPacmanModuleClass BPacmanModuleClass; + +struct _BPacmanModule +{ + BModule parent_instance; + + int OfsX, OfsY; //offset of top left corner of game-field + int MaxColor; //maximum color value + int Points[BPacmanSizeYMin][BPacmanSizeXMin]; //points in game field + int PointsLeft; //numer of points left + int PosX, PosY, CurDirX, CurDirY, NextDirX, NextDirY; //position, current direction and next direction of pacman + int MouthOpen; //pacman's mouth state + int DeadCnt; //counter how long pacman is dead, 0 if not dead + int MonsterPosX[BPacmanMonsterCnt], MonsterPosY[BPacmanMonsterCnt]; //position of monsters + int MonsterDirX[BPacmanMonsterCnt], MonsterDirY[BPacmanMonsterCnt]; //direction of monsters + int MonstersDead; //!0 if monsters are dead + int Lives; //rest of pacman's lives + int player_device_id; +}; + +struct _BPacmanModuleClass +{ + BModuleClass parent_class; +}; + +static GType b_pacman_module_get_type (GTypeModule *module); +static void b_pacman_module_class_init (BPacmanModuleClass *klass); +static void b_pacman_module_init (BPacmanModule *test_module); +static gboolean b_pacman_module_query (gint width, + gint height, + gint channels, + gint maxval); +static gboolean b_pacman_module_prepare (BModule *module, + GError **error); +static void b_pacman_module_start (BModule *module); +static void b_pacman_module_event (BModule *module, + BModuleEvent *event); +static gint b_pacman_module_tick (BModule *module); +static void b_pacman_module_describe (BModule *module, + const gchar **title, + const gchar **description, + const gchar **author); + + +static GType b_type_pacman_module = 0; + + +G_MODULE_EXPORT gboolean +b_module_register (GTypeModule * module) +{ + b_pacman_module_get_type (module); + + return TRUE; +} + +GType +b_pacman_module_get_type (GTypeModule * module) +{ + if (!b_type_pacman_module) + { + static const GTypeInfo pacman_module_info = { + sizeof (BPacmanModuleClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc) b_pacman_module_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (BPacmanModule), + 0, /* n_preallocs */ + (GInstanceInitFunc) b_pacman_module_init, + }; + + /* !!!!!!!!! The name given in the next function MUST be unique! */ + + b_type_pacman_module = g_type_module_register_type (module, + B_TYPE_MODULE, + "BPacman", + &pacman_module_info, + 0); + } + + return b_type_pacman_module; +} + +//check a picel +//returns 1 if pixel in game field or 0 if it is not in game field +static inline int +BPacmanCheckPixel (int X, int Y) +{ + return (X >= 0 && X < BPacmanSizeXMin && Y >= 0 && Y < BPacmanSizeYMin); +} + +//check a position (for pacman or monster) +//returns 1 if position is free of walls or 0 if there is a wall at this position +int +BPacmanCheckPos (int X, int Y) +{ + int XX, YY; + + for (YY = -1; YY <= 1; YY++) + for (XX = -1; XX <= 1; XX++) + if (BPacmanCheckPixel (X + XX, Y + YY)) + if (BPacmanWalls[Y + YY][X + XX]) + return 0; + return 1; +} + +//output a pixel +void +BPacmanOutputPixel (BPacmanModule *pPacmanModule, int X, int Y, int Color) +{ + if (BPacmanCheckPixel (X, Y)) + b_module_draw_point ((BModule *) pPacmanModule, + X + pPacmanModule->OfsX, Y + pPacmanModule->OfsY, + Color); +} + +//output current picture +void +BPacmanOutput (BPacmanModule *pPacmanModule) +{ + int X, Y, I, Color; + + //empty the screen + b_module_fill ((BModule *) pPacmanModule, + BPacmanColorEmpty (pPacmanModule->MaxColor)); + + //put walls and points onto screen + for (Y = 0; Y < BPacmanSizeYMin; Y++) + { + for (X = 0; X < BPacmanSizeXMin; X++) + { + //wall + if (BPacmanWalls[Y][X]) + b_module_draw_point ((BModule *) pPacmanModule, + X + pPacmanModule->OfsX, + Y + pPacmanModule->OfsY, + BPacmanColorWall (pPacmanModule->MaxColor)); + //point + if (pPacmanModule->Points[Y][X]) + b_module_draw_point ((BModule *) pPacmanModule, + X + pPacmanModule->OfsX, + Y + pPacmanModule->OfsY, + BPacmanColorPoint (pPacmanModule->MaxColor)); + } + } + + //get pacman color (dead or alive) + if (pPacmanModule->DeadCnt > 0) + Color = BPacmanColorPacmanDead (pPacmanModule->MaxColor); + else + Color = BPacmanColorPacmanAlive (pPacmanModule->MaxColor); + //draw pacman + if (!pPacmanModule->MouthOpen) + BPacmanOutputPixel (pPacmanModule, pPacmanModule->PosX, + pPacmanModule->PosY, Color); + if (!pPacmanModule->MouthOpen || pPacmanModule->CurDirX != -1) + BPacmanOutputPixel (pPacmanModule, pPacmanModule->PosX - 1, + pPacmanModule->PosY, Color); + if (!pPacmanModule->MouthOpen || pPacmanModule->CurDirX != 1) + BPacmanOutputPixel (pPacmanModule, pPacmanModule->PosX + 1, + pPacmanModule->PosY, Color); + if (!pPacmanModule->MouthOpen || pPacmanModule->CurDirY != -1) + BPacmanOutputPixel (pPacmanModule, pPacmanModule->PosX, + pPacmanModule->PosY - 1, Color); + if (!pPacmanModule->MouthOpen || pPacmanModule->CurDirY != 1) + BPacmanOutputPixel (pPacmanModule, pPacmanModule->PosX, + pPacmanModule->PosY + 1, Color); + + //get monster color (dead or alive) + if (pPacmanModule->MonstersDead) + Color = BPacmanColorMonsterDead (pPacmanModule->MaxColor); + else + Color = BPacmanColorMonsterAlive (pPacmanModule->MaxColor); + //draw monsters + for (I = 0; I < BPacmanMonsterCnt; I++) + { + BPacmanOutputPixel (pPacmanModule, pPacmanModule->MonsterPosX[I], + pPacmanModule->MonsterPosY[I] - 1, Color); + BPacmanOutputPixel (pPacmanModule, pPacmanModule->MonsterPosX[I] - 1, + pPacmanModule->MonsterPosY[I], Color); + BPacmanOutputPixel (pPacmanModule, pPacmanModule->MonsterPosX[I], + pPacmanModule->MonsterPosY[I], Color); + BPacmanOutputPixel (pPacmanModule, pPacmanModule->MonsterPosX[I] + 1, + pPacmanModule->MonsterPosY[I], Color); + BPacmanOutputPixel (pPacmanModule, pPacmanModule->MonsterPosX[I] - 1, + pPacmanModule->MonsterPosY[I] + 1, Color); + BPacmanOutputPixel (pPacmanModule, pPacmanModule->MonsterPosX[I] + 1, + pPacmanModule->MonsterPosY[I] + 1, Color); + } + + //update screen + b_module_paint ((BModule *) pPacmanModule); +} + +//start a new game +void +BPacmanNewGame (BPacmanModule *pPacmanModule) +{ + int X, Y; + + //copy points into local points array and count them + pPacmanModule->PointsLeft = 0; + for (Y = 0; Y < BPacmanSizeYMin; Y++) + { + for (X = 0; X < BPacmanSizeXMin; X++) + { + pPacmanModule->Points[Y][X] = BPacmanPoints[Y][X]; + if (BPacmanPoints[Y][X]) + pPacmanModule->PointsLeft++; + } + } + + //set start position and direction of pacman + pPacmanModule->PosX = BPacmanStartPosX; + pPacmanModule->PosY = BPacmanStartPosY; + pPacmanModule->CurDirX = BPacmanStartDirX; + pPacmanModule->CurDirY = BPacmanStartDirY; + pPacmanModule->NextDirX = BPacmanStartDirX; + pPacmanModule->NextDirY = BPacmanStartDirY; + pPacmanModule->MouthOpen = 0; + pPacmanModule->DeadCnt = 0; + //set start position and direction of monsters + pPacmanModule->MonsterPosX[0] = BPacmanMonster0StartPosX; + pPacmanModule->MonsterPosY[0] = BPacmanMonster0StartPosY; + pPacmanModule->MonsterDirX[0] = BPacmanMonster0StartDirX; + pPacmanModule->MonsterDirY[0] = BPacmanMonster0StartDirY; + pPacmanModule->MonsterPosX[1] = BPacmanMonster1StartPosX; + pPacmanModule->MonsterPosY[1] = BPacmanMonster1StartPosY; + pPacmanModule->MonsterDirX[1] = BPacmanMonster1StartDirX; + pPacmanModule->MonsterDirY[1] = BPacmanMonster1StartDirY; + pPacmanModule->MonstersDead = 0; + + dbg_print ("BPacman: new game\n"); + + //output current picture + BPacmanOutput (pPacmanModule); +} + +//key-procedure +void +BPacmanKey (BPacmanModule *pPacmanModule, + BModuleKey Key) +{ + switch (Key) + { + case B_KEY_2: + //set pacman's next direction to upwards + pPacmanModule->NextDirX = 0; + pPacmanModule->NextDirY = -1; + break; + case B_KEY_4: + //set pacman's next direction to leftwards + pPacmanModule->NextDirX = -1; + pPacmanModule->NextDirY = 0; + break; + case B_KEY_6: + //set pacman's next direction to rightwards + pPacmanModule->NextDirX = 1; + pPacmanModule->NextDirY = 0; + break; + case B_KEY_8: + //set pacman's next direction to downwards + pPacmanModule->NextDirX = 0; + pPacmanModule->NextDirY = 1; + break; + + default: + break; + } + + //output current picture + BPacmanOutput (pPacmanModule); +} + +//tick-procedure +//returns 1 if game over or 0 if game not over +int +BPacmanTick (BPacmanModule *pPacmanModule) +{ + int X, Y, I, J, Left, Right, Up, Down, Cnt, DirX[4], DirY[4]; + + //toggle mouth state + pPacmanModule->MouthOpen = !pPacmanModule->MouthOpen; + + //mouth now open + if (pPacmanModule->MouthOpen) + { + //pacman is dead + if (pPacmanModule->DeadCnt > 0) + { + //decrement dead count + pPacmanModule->DeadCnt--; + if (pPacmanModule->DeadCnt == 0) + { + //another life + if( pPacmanModule->Lives > 0 ) + { + dbg_print( "BPacman: Pacman is alive again - %d live(s) left\n", pPacmanModule->Lives ); + } + //game over + else + { + dbg_print( "BPacman: Pacman has no lives left - game over\n" ); + //request end + b_module_request_stop( (BModule *)pPacmanModule ); + //do nothing else and return game over + return 1; + } + } + } + //pacman is alive + else + { + //pacman is at a position where changing direction is allowed + if (BPacmanCheckPixel (pPacmanModule->PosX, pPacmanModule->PosY)) + { + if (BPacmanChDir[pPacmanModule->PosY][pPacmanModule->PosX]) + { + //change direction to new one + pPacmanModule->CurDirX = pPacmanModule->NextDirX; + pPacmanModule->CurDirY = pPacmanModule->NextDirY; + } + } + + //get new position (move in current direction) + X = pPacmanModule->PosX + pPacmanModule->CurDirX; + Y = pPacmanModule->PosY + pPacmanModule->CurDirY; + //check if there is a wall at the new position + if (BPacmanCheckPos (X, Y)) + { + //set pacman to new position + pPacmanModule->PosX = X; + pPacmanModule->PosY = Y; + //wrap around + if (pPacmanModule->PosX < -1 && pPacmanModule->CurDirX < 0) + pPacmanModule->PosX = BPacmanSizeXMin; + if (pPacmanModule->PosX > BPacmanSizeXMin + && pPacmanModule->CurDirX > 0) + pPacmanModule->PosX = -1; + if (pPacmanModule->PosY < -1 && pPacmanModule->CurDirY < 0) + pPacmanModule->PosY = BPacmanSizeYMin; + if (pPacmanModule->PosY > BPacmanSizeYMin + && pPacmanModule->CurDirY > 0) + pPacmanModule->PosY = -1; + + //point at this position + if (BPacmanCheckPixel + (pPacmanModule->PosX, pPacmanModule->PosY)) + { + if (pPacmanModule-> + Points[pPacmanModule->PosY][pPacmanModule->PosX]) + { + //eat point + pPacmanModule->Points[pPacmanModule-> + PosY][pPacmanModule->PosX] = 0; + pPacmanModule->PointsLeft--; + //all points eaten + if (pPacmanModule->PointsLeft == 0) + { + //monsters are dead now + pPacmanModule->MonstersDead = 1; + } + } + } + } + } + + //monsters are alive + if (!pPacmanModule->MonstersDead) + { + //move monsters + for (I = 0; I < BPacmanMonsterCnt; I++) + { + //monster is at a position where changing direction is allowed + if (BPacmanCheckPixel + (pPacmanModule->MonsterPosX[I], + pPacmanModule->MonsterPosY[I])) + { + if (BPacmanChDir[pPacmanModule->MonsterPosY[I]] + [pPacmanModule->MonsterPosX[I]]) + { + //get possible directions + Left = + BPacmanCheckPos (pPacmanModule->MonsterPosX[I] - 1, + pPacmanModule->MonsterPosY[I]); + Right = + BPacmanCheckPos (pPacmanModule->MonsterPosX[I] + 1, + pPacmanModule->MonsterPosY[I]); + Up = + BPacmanCheckPos (pPacmanModule->MonsterPosX[I], + pPacmanModule->MonsterPosY[I] - 1); + Down = + BPacmanCheckPos (pPacmanModule->MonsterPosX[I], + pPacmanModule->MonsterPosY[I] + 1); + //count directions + Cnt = 0; + if (Left) + Cnt++; + if (Right) + Cnt++; + if (Up) + Cnt++; + if (Down) + Cnt++; + //more than one direction possible + if (Cnt > 1) + { + //exclude backward direction + if (pPacmanModule->MonsterDirX[I] == -1) + Right = 0; + if (pPacmanModule->MonsterDirX[I] == 1) + Left = 0; + if (pPacmanModule->MonsterDirY[I] == -1) + Down = 0; + if (pPacmanModule->MonsterDirY[I] == 1) + Up = 0; + } + //put possible directions into an array + Cnt = 0; + if (Left) + { + DirX[Cnt] = -1; + DirY[Cnt] = 0; + Cnt++; + } + if (Right) + { + DirX[Cnt] = 1; + DirY[Cnt] = 0; + Cnt++; + } + if (Up) + { + DirX[Cnt] = 0; + DirY[Cnt] = -1; + Cnt++; + } + if (Down) + { + DirX[Cnt] = 0; + DirY[Cnt] = 1; + Cnt++; + } + //change direction to new one + if (Cnt > 0) + { + J = rand () % Cnt; //select one of the possible directions per coincidence + pPacmanModule->MonsterDirX[I] = DirX[J]; + pPacmanModule->MonsterDirY[I] = DirY[J]; + } + } + } + + //get new position (move in current direction) + X = + pPacmanModule->MonsterPosX[I] + pPacmanModule->MonsterDirX[I]; + Y = + pPacmanModule->MonsterPosY[I] + pPacmanModule->MonsterDirY[I]; + //check if there is a wall at the new position + if (BPacmanCheckPos (X, Y)) + { + //set monster to new position + pPacmanModule->MonsterPosX[I] = X; + pPacmanModule->MonsterPosY[I] = Y; + //wrap around + if (pPacmanModule->MonsterPosX[I] < -1 + && pPacmanModule->MonsterDirX[I] < 0) + pPacmanModule->MonsterPosX[I] = BPacmanSizeXMin; + if (pPacmanModule->MonsterPosX[I] > BPacmanSizeXMin + && pPacmanModule->MonsterDirX[I] > 0) + pPacmanModule->MonsterPosX[I] = -1; + if (pPacmanModule->MonsterPosY[I] < -1 + && pPacmanModule->MonsterDirY[I] < 0) + pPacmanModule->MonsterPosY[I] = BPacmanSizeYMin; + if (pPacmanModule->MonsterPosY[I] > BPacmanSizeYMin + && pPacmanModule->MonsterDirY[I] > 0) + pPacmanModule->MonsterPosY[I] = -1; + } + } + } + } + + //check if monster kills pacman / pacman kills monster + for (I = 0; I < BPacmanMonsterCnt; I++) + { + //get distance + X = pPacmanModule->PosX - pPacmanModule->MonsterPosX[I]; + if (X < 0) + X = -X; + Y = pPacmanModule->PosY - pPacmanModule->MonsterPosY[I]; + if (Y < 0) + Y = -Y; + //monster kills pacman / pacman kills monster + if (X + Y < 4) + { + //pacman kills monster + if (pPacmanModule->MonstersDead) + { + //move monster out of sight + pPacmanModule->MonsterPosX[I] = BPacmanMonsterNirvana; + pPacmanModule->MonsterPosY[I] = BPacmanMonsterNirvana; + dbg_print ("BPacman: Pacman ate Monster\n"); + //check if all monsters are gone + for (J = 0; J < BPacmanMonsterCnt; J++) + if (pPacmanModule->MonsterPosX[J] != BPacmanMonsterNirvana + || pPacmanModule->MonsterPosY[J] != BPacmanMonsterNirvana) + break; + //all monsters are gone + if (J >= BPacmanMonsterCnt) + { + dbg_print ("BPacman: Pacman has won game\n"); + //start new game + BPacmanNewGame (pPacmanModule); + } + } + //monster kills pacman + else + { + //decrease number of lives + if( pPacmanModule->DeadCnt == 0 ) + { + pPacmanModule->Lives--; + dbg_print( "BPacman: Monster killed Pacman\n" ); + } + //pacman is dead for the next few steps + pPacmanModule->DeadCnt = BPacmanDeadTime; + } + } + } + + //output current picture + BPacmanOutput (pPacmanModule); + + //return game not over + return 0; +} + +static void +b_pacman_module_class_init (BPacmanModuleClass *klass) +{ + BModuleClass *module_class; + + module_class = B_MODULE_CLASS (klass); + + module_class->max_players = 1; + + module_class->query = b_pacman_module_query; + module_class->prepare = b_pacman_module_prepare; + module_class->start = b_pacman_module_start; + module_class->event = b_pacman_module_event; + module_class->tick = b_pacman_module_tick; + module_class->describe = b_pacman_module_describe; +} + +static void +b_pacman_module_init (BPacmanModule *pacman_module) +{ + pacman_module->player_device_id = -1; +} + +static gboolean +b_pacman_module_query (gint width, + gint height, + gint channels, + gint maxval) +{ + return (width >= BPacmanSizeXMin && height >= BPacmanSizeYMin + && channels == 1 && maxval + 1 >= BPacmanColorCntMin); +} + +static gboolean +b_pacman_module_prepare (BModule *module, + GError **error) +{ + BPacmanModule *pacman_module = B_PACMAN_MODULE (module); + + /* initialize the module values that depend on the output device */ + pacman_module->OfsX = (module->width - BPacmanSizeXMin) / 2; /* offset of top left corner of game-field */ + pacman_module->OfsY = (module->height - BPacmanSizeYMin) / 2; + pacman_module->MaxColor = module->maxval; /* maximum color value */ + + return TRUE; +} + +static void +b_pacman_module_start (BModule *module) +{ + /* set pacman's lives */ + ((BPacmanModule *)module)->Lives = BPacmanLives; + + /* start new game */ + BPacmanNewGame ((BPacmanModule *) module); + + /* start the tick machinery */ + b_module_ticker_start (module, BPacmanTicks); +} + +static void +b_pacman_module_event (BModule *module, + BModuleEvent *event) +{ + BPacmanModule *pacman; + + pacman = B_PACMAN_MODULE (module); + + switch (event->type) + { + case B_EVENT_TYPE_KEY: + if (event->device_id == pacman->player_device_id) + BPacmanKey (pacman, event->key); + break; + + case B_EVENT_TYPE_PLAYER_ENTERED: + if (pacman->player_device_id == -1) + { + pacman->player_device_id = event->device_id; + + module->num_players++; + } + break; + + case B_EVENT_TYPE_PLAYER_LEFT: + if (pacman->player_device_id == event->device_id) + { + pacman->player_device_id = -1; + + module->num_players--; + } + break; + + default: + break; + } +} + +static gint +b_pacman_module_tick (BModule *module) +{ + int GameOver; + + /* call tick-procedure */ + GameOver = BPacmanTick ((BPacmanModule *) module); + + /* we want to be called again in some milliseconds, if game is not over */ + if( GameOver ) + return 0; + else + return BPacmanTicks; +} + +static void +b_pacman_module_describe (BModule *module, + const gchar **title, + const gchar **description, + const gchar **author) +{ + *title = "BPacman"; + *description = "Pacman game"; + *author = "1stein"; +} diff --git a/blib-1.1.7/modules/bpong.c b/blib-1.1.7/modules/bpong.c new file mode 100644 index 0000000..c85e94b --- /dev/null +++ b/blib-1.1.7/modules/bpong.c @@ -0,0 +1,667 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2001-2002 Sven Neumann + * Michael Natterer + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include +#include + +#include + +#include + +#include "digits.h" + + +#define PONG_START_TIMEOUT 200 +#define COMPUTER_LOOSE_SPEEDUP 10 + + +typedef enum +{ + RIGHT, + LEFT +} XDirection; + +typedef enum +{ + UP, + DOWN +} YDirection; + + +typedef enum +{ + GAME_INIT, + LPLAYER_JOIN, + RPLAYER_JOIN, + GAME_OVER +} AnimType; + + +#define B_TYPE_PONG (b_type_pong) +#define B_PONG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), B_TYPE_PONG, BPong)) +#define B_PONG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), B_TYPE_PONG, BPongClass)) +#define B_IS_PONG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), B_TYPE_PONG)) +#define B_IS_PONG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), B_TYPE_PONG)) + +typedef struct _BPong BPong; +typedef struct _BPongClass BPongClass; + +struct _BPong +{ + BModule parent_instance; + + AnimType anim; + gint anim_steps; + + gint paddle_size; + + gint lpaddle; + gint rpaddle; + gint ball_x; + gint ball_y; + XDirection ball_xdir; + YDirection ball_ydir; + + gint lplayer_score; + gint rplayer_score; + + gint lplayer_device_id; + gint rplayer_device_id; + + gint timeout; +}; + +struct _BPongClass +{ + BModuleClass parent_class; +}; + + +static GType b_pong_get_type (GTypeModule *module); + +static void b_pong_class_init (BPongClass *klass); +static void b_pong_init (BPong *pong); + +static gboolean b_pong_query (gint width, + gint height, + gint channels, + gint maxval); +static gboolean b_pong_prepare (BModule *module, + GError **error); +static void b_pong_relax (BModule *module); +static void b_pong_start (BModule *module); +static void b_pong_stop (BModule *module); +static void b_pong_event (BModule *module, + BModuleEvent *event); +static gint b_pong_tick (BModule *module); +static void b_pong_describe (BModule *module, + const gchar **title, + const gchar **description, + const gchar **author); + +static void b_pong_init_game (BPong *pong); +static gint b_pong_move_ball (BPong *pong); +static void b_pong_computer_move (BPong *pong, + gint *paddle); +static gboolean b_pong_reflect (BPong *pong, + gint paddle); +static void b_pong_draw (BPong *pong, + gint lpaddle, + gint rpaddle, + gint ball_x, + gint ball_y); +static void b_pong_draw_scores (BPong *pong); + + +static GType b_type_pong = 0; + + +G_MODULE_EXPORT gboolean +b_module_register (GTypeModule *module) +{ + b_pong_get_type (module); + return TRUE; +} + +static GType +b_pong_get_type (GTypeModule *module) +{ + if (! b_type_pong) + { + static const GTypeInfo pong_info = + { + sizeof (BPongClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc) b_pong_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (BPong), + 0, /* n_preallocs */ + (GInstanceInitFunc) b_pong_init, + }; + + b_type_pong = g_type_module_register_type (module, + B_TYPE_MODULE, "BPong", + &pong_info, 0); + } + + return b_type_pong; +} + +static void +b_pong_class_init (BPongClass *klass) +{ + BModuleClass *module_class; + + module_class = B_MODULE_CLASS (klass); + + module_class->max_players = 2; + + module_class->query = b_pong_query; + module_class->prepare = b_pong_prepare; + module_class->relax = b_pong_relax; + module_class->start = b_pong_start; + module_class->stop = b_pong_stop; + module_class->event = b_pong_event; + module_class->tick = b_pong_tick; + module_class->describe = b_pong_describe; +} + +static void +b_pong_init (BPong *pong) +{ + pong->anim_steps = 0; + + pong->lplayer_device_id = -1; + pong->rplayer_device_id = -1; +} + +static gboolean +b_pong_query (gint width, + gint height, + gint channels, + gint maxval) +{ + return (width > 7 && height > 7 && channels == 1); +} + +static gboolean +b_pong_prepare (BModule *module, + GError **error) +{ + BPong *pong = B_PONG (module); + + pong->paddle_size = MAX (3, module->height / 4); + + return TRUE; +} + +static void +b_pong_relax (BModule *module) +{ +} + +static void +b_pong_start (BModule *module) +{ + BPong *pong = B_PONG (module); + + pong->lpaddle = pong->rpaddle = module->height / 2 - 1; + pong->lplayer_score = pong->rplayer_score = 0; + + b_pong_init_game (pong); + + pong->timeout = PONG_START_TIMEOUT; + + b_module_ticker_start (module, pong->timeout); +} + +static void +b_pong_stop (BModule *module) +{ + BPong *pong = B_PONG (module); + + pong->lplayer_device_id = -1; + pong->rplayer_device_id = -1; +} + +static void +b_pong_event (BModule *module, + BModuleEvent *event) +{ + BPong *pong = B_PONG (module); + + switch (event->type) + { + case B_EVENT_TYPE_KEY: + if (pong->anim_steps) + return; + + switch (event->key) + { + case B_KEY_1: + case B_KEY_2: + case B_KEY_3: + case B_KEY_4: + case B_KEY_5: + case B_KEY_6: + /* up */ + if (event->device_id == pong->lplayer_device_id) + { + pong->lpaddle = MAX (pong->lpaddle--, 0); + } + else if (event->device_id == pong->rplayer_device_id) + { + pong->rpaddle = MAX (pong->rpaddle--, 0); + } + break; + + case B_KEY_7: + case B_KEY_8: + case B_KEY_9: + case B_KEY_ASTERISK: + case B_KEY_0: + case B_KEY_HASH: + /* down */ + if (event->device_id == pong->lplayer_device_id) + { + pong->lpaddle = MIN (pong->lpaddle++, + module->height - pong->paddle_size); + } + else if (event->device_id == pong->rplayer_device_id) + { + pong->rpaddle = MIN (pong->rpaddle++, + module->height - pong->paddle_size); + } + break; + + default: + break; + } + break; + + case B_EVENT_TYPE_PLAYER_ENTERED: + if (pong->lplayer_device_id == -1) + { + pong->anim = LPLAYER_JOIN; + pong->anim_steps = 6; + pong->lplayer_device_id = event->device_id; + + module->num_players++; + } + else if (pong->rplayer_device_id == -1) + { + pong->anim = RPLAYER_JOIN; + pong->anim_steps = 6; + pong->rplayer_device_id = event->device_id; + + module->num_players++; + } + break; + + case B_EVENT_TYPE_PLAYER_LEFT: + if (pong->lplayer_device_id == event->device_id) + { + pong->lplayer_device_id = -1; + + module->num_players--; + } + else if (pong->rplayer_device_id == event->device_id) + { + pong->rplayer_device_id = -1; + + module->num_players--; + } + break; + + default: + break; + } +} + +static gint +b_pong_tick (BModule *module) +{ + BPong *pong = B_PONG (module); + + if (pong->anim_steps > 0) + { + pong->anim_steps--; + + switch (pong->anim) + { + case GAME_INIT: + b_pong_draw (pong, + pong->lpaddle, pong->rpaddle, + pong->anim_steps == 0 ? pong->ball_x : -1, + pong->anim_steps == 0 ? pong->ball_y : -1); + break; + case LPLAYER_JOIN: + b_pong_draw (pong, + (pong->anim_steps & 1) ? pong->lpaddle : -1, + pong->rpaddle, + -1, -1); + break; + case RPLAYER_JOIN: + b_pong_draw (pong, + pong->lpaddle, + (pong->anim_steps & 1) ? pong->rpaddle : -1, + -1, -1); + break; + case GAME_OVER: + b_pong_draw (pong, + pong->lpaddle, pong->rpaddle, + (pong->anim_steps & 1) ? pong->ball_x : -1, + (pong->anim_steps & 1) ? pong->ball_y : -1); + + if (pong->anim_steps == 0) + { + if ((pong->lplayer_score != pong->rplayer_score) && + (pong->lplayer_score >= 10 || pong->rplayer_score >= 10)) + { + b_module_request_stop (module); + return 0; + } + else + b_pong_init_game (pong); + } + + break; + } + } + else + { + switch (b_pong_move_ball (pong)) + { + case -1: + pong->lplayer_score++; + pong->anim_steps = 6; + pong->anim = GAME_OVER; + if (pong->lplayer_device_id == -1) /* computer lost */ + pong->timeout -= COMPUTER_LOOSE_SPEEDUP; + break; + + case 1: + pong->rplayer_score++; + pong->anim_steps = 6; + pong->anim = GAME_OVER; + if (pong->rplayer_device_id == -1) /* computer lost */ + pong->timeout -= COMPUTER_LOOSE_SPEEDUP; + break; + + case 0: + if (pong->lplayer_device_id == -1) + b_pong_computer_move (pong, &pong->lpaddle); + if (pong->rplayer_device_id == -1) + b_pong_computer_move (pong, &pong->rpaddle); + break; + } + + b_pong_draw (pong, + pong->lpaddle, pong->rpaddle, + pong->ball_x, pong->ball_y); + } + + return pong->timeout; +} + +static void +b_pong_describe (BModule *module, + const gchar **title, + const gchar **description, + const gchar **author) +{ + *title = "BPong"; + *description = "Pong game"; + *author = "Sven Neumann"; +} + +static void +b_pong_init_game (BPong *pong) +{ + BModule *module; + gint paddle; + gint foo; + + module = B_MODULE (pong); + + foo = rand (); + + if (foo & 0x1) + { + paddle = pong->lpaddle; + pong->ball_x = 0; + pong->ball_xdir = RIGHT; + } + else + { + paddle = pong->rpaddle; + pong->ball_x = module->width - 1; + pong->ball_xdir = LEFT; + } + + if ((foo & 0x2 && paddle != 0) || + paddle == module->height - pong->paddle_size) + { + pong->ball_y = 0; + pong->ball_ydir = DOWN; + } + else + { + pong->ball_y = module->height - 1; + pong->ball_ydir = UP; + } + + pong->anim = GAME_INIT; + pong->anim_steps = 4; +} + +static gint +b_pong_move_ball (BPong *pong) +{ + BModule *module = B_MODULE (pong); + + switch (pong->ball_xdir) + { + case RIGHT: + pong->ball_x++; + break; + case LEFT: + pong->ball_x--; + break; + } + switch (pong->ball_ydir) + { + case UP: + pong->ball_y--; + break; + case DOWN: + pong->ball_y++; + break; + } + + /* collision with walls ? */ + if (pong->ball_y < 0) + { + pong->ball_y = 1; + pong->ball_ydir = DOWN; + } + else if (pong->ball_y >= module->height) + { + pong->ball_y = module->height - 2; + pong->ball_ydir = UP; + } + + /* collision with left paddle or out ? */ + if (pong->ball_x == 0) + { + if (! b_pong_reflect (pong, pong->lpaddle)) + return 1; /* right wins */ + + pong->ball_x = 2; + pong->ball_xdir = RIGHT; + } + /* collision with right paddle or out ? */ + else if (pong->ball_x == module->width - 1) + { + if (! b_pong_reflect (pong, pong->rpaddle)) + return -1; /* left wins */ + pong->ball_x = module->width - pong->paddle_size; + pong->ball_xdir = LEFT; + } + + return 0; +} + +static void +b_pong_computer_move (BPong *pong, + gint *paddle) +{ + BModule *module = B_MODULE (pong); + + if (rand () & 1) + return; + + if (*paddle - pong->ball_y > -1) + (*paddle)--; + else if (*paddle - pong->ball_y < 1) + (*paddle)++; + + *paddle = CLAMP (*paddle, 0, module->height - pong->paddle_size); +} + +static gboolean +b_pong_reflect (BPong *pong, + gint paddle) +{ + gint d = pong->ball_y - paddle; + + switch (pong->ball_ydir) + { + case DOWN: /* we hit the paddle coming from the top */ + + if (d < 0) + return FALSE; + else if (d == 0) + { + pong->ball_ydir = UP; + pong->ball_y -= 2; + return TRUE; + } + else if (d <= pong->paddle_size) + return TRUE; + else + return FALSE; + + break; + + case UP: /* we hit the paddle coming from the bottom */ + + if (d < -1) + return FALSE; + else if (d < pong->paddle_size - 1) + return TRUE; + else if (d == pong->paddle_size - 1) + { + pong->ball_ydir = DOWN; + pong->ball_y += 2; + return TRUE; + } + else + return FALSE; + + break; + } + + return TRUE; +} + +static void +b_pong_draw (BPong *pong, + gint lpaddle, + gint rpaddle, + gint ball_x, + gint ball_y) +{ + BModule *module; + gint width; + gint height; + gint i; + + module = B_MODULE (pong); + + width = module->width; + height = module->height; + + b_module_fill (module, 0); + + if (lpaddle >= 0 && lpaddle <= height - pong->paddle_size) + for (i = 0; i < pong->paddle_size; i++) + b_module_draw_point (module, 0, lpaddle + i, module->maxval); + + if (rpaddle >= 0 && rpaddle <= height - pong->paddle_size) + for (i = 0; i < pong->paddle_size; i++) + b_module_draw_point (module, width - 1, rpaddle + i, module->maxval); + + if (ball_x >= 0 && ball_x < width && ball_y >= 0 && ball_y < height) + b_module_draw_point (module, ball_x, ball_y, module->maxval); + + if (pong->anim == GAME_OVER) + b_pong_draw_scores (pong); + + b_module_paint (module); +} + +static void +b_pong_draw_scores (BPong *pong) +{ + BModule *module; + gchar *text; + gint len; + gint x0, y0; + gint x, y; + gint n, i; + const BFont *digits = &b_digits_3x5; + + + module = B_MODULE (pong); + + text = g_strdup_printf ("%d:%d", pong->lplayer_score, pong->rplayer_score); + len = strlen (text); + + x0 = (module->width - len * digits->advance) / 2; + y0 = (module->height / 2) - 4; + + for (n = 0; n < len; n++) + { + for (i = 0; i < digits->num_digits && digits->digits_str[i] != text[n]; i++); + + if (i < digits->num_digits) + for (x = 0; x < digits->width; x++) + for (y = 0; y < digits->height; y++) + if (digits->data[i][y * digits->width + x] != '0') + b_module_draw_point (module, x0 + x, y0 + y, module->maxval); + + x0 += digits->advance; + } + + g_free (text); +} diff --git a/blib-1.1.7/modules/bproxy.c b/blib-1.1.7/modules/bproxy.c new file mode 100644 index 0000000..4fc9681 --- /dev/null +++ b/blib-1.1.7/modules/bproxy.c @@ -0,0 +1,295 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2002 The Blinkenlights Crew + * Daniel Mack + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include +#include + +#include +#include + +#include + + +#define B_TYPE_PROXY (b_type_proxy) +#define B_PROXY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), B_TYPE_PROXY, BProxy)) +#define B_PROXY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), B_TYPE_PROXY, BProxyClass)) +#define B_IS_PROXY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), B_TYPE_PROXY)) + +typedef struct _BProxy BProxy; +typedef struct _BProxyClass BProxyClass; + +struct _BProxy +{ + BModule parent_instance; + + BReceiver *receiver; + gint port; +}; + +struct _BProxyClass +{ + BModuleClass parent_class; +}; + +enum +{ + PROP_0, + PROP_PORT +}; + + +static GType b_proxy_get_type (GTypeModule *module); +static void b_proxy_class_init (BProxyClass *klass); +static void b_proxy_finalize (GObject *object); +static void b_proxy_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec); +static void b_proxy_init (BProxy *proxy); +static gboolean b_proxy_query (gint width, + gint height, + gint channels, + gint maxval); +static gboolean b_proxy_prepare (BModule *module, + GError **error); +static void b_proxy_relax (BModule *module); +static void b_proxy_start (BModule *module); +static void b_proxy_stop (BModule *module); +static void b_proxy_describe (BModule *module, + const gchar **title, + const gchar **description, + const gchar **author); + + +static BModuleClass * parent_class = NULL; +static GType b_type_proxy = 0; + +static gboolean +callback (BReceiver *rec, + BPacket *packet, + gpointer callback_data) +{ + BModule *module = B_MODULE (callback_data); + + if (packet->header.mcu_frame_h.width == module->width && + packet->header.mcu_frame_h.height == module->height && + packet->header.mcu_frame_h.channels == 1 && + packet->header.mcu_frame_h.maxval > 0) + { + gint max = packet->header.mcu_frame_h.maxval; + + if (max == 255) + { + memcpy (module->buffer, packet->data, + module->width * module->height); + } + else + { + gint bytes = module->width * module->height; + guchar *s = packet->data; + guchar *d = module->buffer; + + do + { + *d = ((gint) *s * 255) / max; + s++, d++; + } + while (--bytes); + } + + b_module_paint (module); + } + else + { + g_printerr ("BProxy: packet mismatch\n"); + } + + return TRUE; +} + +G_MODULE_EXPORT gboolean +b_module_register (GTypeModule *module) +{ + b_proxy_get_type (module); + return TRUE; +} + +GType +b_proxy_get_type (GTypeModule *module) +{ + if (!b_type_proxy) + { + static const GTypeInfo proxy_info = + { + sizeof (BProxyClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc) b_proxy_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (BProxy), + 0, /* n_preallocs */ + (GInstanceInitFunc) b_proxy_init, + }; + + b_type_proxy = g_type_module_register_type (module, + B_TYPE_MODULE, "BProxy", + &proxy_info, 0); + } + + return b_type_proxy; +} + +static void +b_proxy_class_init (BProxyClass *klass) +{ + GObjectClass *object_class; + BModuleClass *module_class; + GParamSpec *param_spec; + + object_class = G_OBJECT_CLASS (klass); + module_class = B_MODULE_CLASS (klass); + + parent_class = g_type_class_peek_parent (klass); + + object_class->finalize = b_proxy_finalize; + object_class->set_property = b_proxy_set_property; + + param_spec = g_param_spec_int ("port", NULL, + "IP Port to listen on.", + 1024, 65535, 4242, + G_PARAM_CONSTRUCT | G_PARAM_WRITABLE); + g_object_class_install_property (object_class, PROP_PORT, param_spec); + + module_class->query = b_proxy_query; + module_class->prepare = b_proxy_prepare; + module_class->relax = b_proxy_relax; + module_class->start = b_proxy_start; + module_class->stop = b_proxy_stop; + module_class->describe = b_proxy_describe; +} + +static void +b_proxy_finalize (GObject *object) +{ + BProxy *proxy = B_PROXY (object); + + if (proxy->receiver) + { + g_object_unref (proxy->receiver); + proxy->receiver = NULL; + } + + G_OBJECT_CLASS (parent_class)->finalize (object); +} + +static void +b_proxy_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec) +{ + BProxy *proxy = B_PROXY (object); + + switch (property_id) + { + case PROP_PORT: + g_return_if_fail (g_value_get_int (value) > 0); + proxy->port = g_value_get_int (value); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static void +b_proxy_init (BProxy *proxy) +{ +} + +static gboolean +b_proxy_query (gint width, + gint height, + gint channels, + gint maxval) +{ + return (width > 0 && height > 0 && channels == 1 && maxval == 255); +} + +static gboolean +b_proxy_prepare (BModule *module, + GError **error) +{ + BProxy *proxy = B_PROXY (module); + + proxy->receiver = b_receiver_new (callback, module); + + return TRUE; +} + +static void +b_proxy_relax (BModule *module) +{ + BProxy *proxy = B_PROXY (module); + + if (proxy->receiver) + { + g_object_unref (proxy->receiver); + proxy->receiver = NULL; + } +} + +static void +b_proxy_start (BModule *module) +{ + BProxy *proxy = B_PROXY (module); + + b_module_fill (module, 0); + b_module_paint (module); + + if (b_receiver_listen (proxy->receiver, proxy->port)) + { + g_printerr ("BProxy: listening on port %d\n", proxy->port); + } + else + { + g_printerr ("BProxy: can not listen on port %d, exiting\n", proxy->port); + b_module_stop (module); + } +} + +static void +b_proxy_stop (BModule *module) +{ + b_receiver_stop (B_PROXY (module)->receiver); +} + +static void +b_proxy_describe (BModule *module, + const gchar **title, + const gchar **description, + const gchar **author) +{ + *title = "BProxy"; + *description = "Generic network proxy"; + *author = "Daniel Mack"; +} diff --git a/blib-1.1.7/modules/bpushline.c b/blib-1.1.7/modules/bpushline.c new file mode 100644 index 0000000..1be8eac --- /dev/null +++ b/blib-1.1.7/modules/bpushline.c @@ -0,0 +1,344 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2002 The Blinkenlights Crew + * Daniel Mack + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include + +#include +#include + +#include + +#include + +#define TIMEOUT 75 + + +typedef enum +{ + DIR_FTTB, + DIR_FRTL, + DIR_FBTT, + DIR_FLTR, + DIR_LAST +} BPushlineDir; + +enum +{ + MODE_EAT +}; + +enum +{ + PROP_0, + PROP_DIR, +}; + + +#define DEFAULT_MODE MODE_EAT + +#define B_TYPE_PUSHLINE_DIR (b_pushline_dir_get_type ()) + +#define B_TYPE_PUSHLINE (b_type_pushline) +#define B_PUSHLINE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), B_TYPE_PUSHLINE, BPushline)) +#define B_PUSHLINE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), B_TYPE_PUSHLINE, BPushlineClass)) +#define B_IS_PUSHLINE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), B_TYPE_PUSHLINE)) + +typedef struct _BPushline BPushline; +typedef struct _BPushlineClass BPushlineClass; + +struct _BPushline +{ + BModule parent_instance; + + gint dir; + gint mode; + gint pos; +}; + +struct _BPushlineClass +{ + BModuleClass parent_class; +}; + +static GType b_pushline_get_type (GTypeModule *module); +static void b_pushline_class_init (BPushlineClass *klass); +static void b_pushline_init (BPushline *pushline); +static void b_pushline_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec); +static gboolean b_pushline_query (gint width, + gint height, + gint channels, + gint maxval); +static gboolean b_pushline_prepare (BModule *module, + GError **error); +static void b_pushline_relax (BModule *module); +static void b_pushline_start (BModule *module); +static gint b_pushline_tick (BModule *module); +static void b_pushline_describe (BModule *module, + const gchar **title, + const gchar **description, + const gchar **author); + + +static GType b_type_pushline = 0; + + +static const GEnumValue pushline_dir_enum_values[] = +{ + { DIR_FTTB, "top-to-bottom", NULL }, + { DIR_FRTL, "right-to-left", NULL }, + { DIR_FBTT, "bottom-to-top", NULL }, + { DIR_FLTR, "left-to-right", NULL }, + { 0, NULL, NULL } +}; + +GType +b_pushline_dir_get_type (void) +{ + static GType enum_type = 0; + + if (!enum_type) + enum_type = g_enum_register_static ("BPushlineDirection", + pushline_dir_enum_values); + + return enum_type; +} + +G_MODULE_EXPORT gboolean +b_module_register (GTypeModule *module) +{ + b_pushline_get_type (module); + return TRUE; +} + +GType +b_pushline_get_type (GTypeModule *module) +{ + if (!b_type_pushline) + { + static const GTypeInfo pushline_info = + { + sizeof (BPushlineClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc) b_pushline_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (BPushline), + 0, /* n_preallocs */ + (GInstanceInitFunc) b_pushline_init, + }; + + b_type_pushline = g_type_module_register_type (module, B_TYPE_MODULE, + "BPushline", + &pushline_info, 0); + } + + return b_type_pushline; +} + +static void +b_pushline_class_init (BPushlineClass *klass) +{ + GObjectClass *object_class; + BModuleClass *module_class; + GParamSpec *param_spec; + gint dir; + + dir = random () % DIR_LAST; + + object_class = G_OBJECT_CLASS (klass); + module_class = B_MODULE_CLASS (klass); + + object_class->set_property = b_pushline_set_property; + + param_spec = g_param_spec_enum ("direction", NULL, + "The direction the line moves.", + B_TYPE_PUSHLINE_DIR, dir, + G_PARAM_CONSTRUCT | G_PARAM_WRITABLE); + g_object_class_install_property (object_class, PROP_DIR, param_spec); + + module_class->query = b_pushline_query; + module_class->prepare = b_pushline_prepare; + module_class->relax = b_pushline_relax; + module_class->start = b_pushline_start; + module_class->tick = b_pushline_tick; + module_class->describe = b_pushline_describe; +} + +static void +b_pushline_init (BPushline *pushline) +{ + pushline->mode = DEFAULT_MODE; +} + +static void +b_pushline_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec) +{ + BPushline *line = B_PUSHLINE (object); + + switch (property_id) + { + case PROP_DIR: + line->dir = g_value_get_enum (value); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static gboolean +b_pushline_query (gint width, + gint height, + gint channels, + gint maxval) +{ + return (width > 0 && height > 3 && channels == 1 && maxval == 255); +} + +static gboolean +b_pushline_prepare (BModule *module, + GError **error) +{ + BPushline *pushline = B_PUSHLINE (module); + + switch (pushline->dir) + { + case DIR_FTTB: + pushline->pos = -1; + break; + case DIR_FRTL: + pushline->pos = module->width; + break; + case DIR_FBTT: + pushline->pos = module->height; + break; + case DIR_FLTR: + pushline->pos = -1; + break; + } + + return TRUE; +} + +static void +b_pushline_relax (BModule *module) +{ +} + +static void +b_pushline_start (BModule *module) +{ + b_module_ticker_start (module, b_pushline_tick (module)); +} + +static gint +b_pushline_tick (BModule *module) +{ + BPushline *pushline = B_PUSHLINE (module); + gint width = module->width; + gint height = module->height; + + switch (pushline->dir) + { + case DIR_FTTB: + pushline->pos++; + if (pushline->pos >= width) + goto stop; + + b_module_draw_line (module, + 0, pushline->pos, width - 1, pushline->pos, + module->maxval); + if (pushline->pos > 0) + b_module_draw_line (module, + 0, pushline->pos - 1, width - 1, pushline->pos - 1, + 0); + break; + + case DIR_FRTL: + pushline->pos--; + if (pushline->pos < 0) + goto stop; + + b_module_draw_line (module, + pushline->pos, 0, pushline->pos, height - 1, + module->maxval); + if (pushline->pos < width - 1) + b_module_draw_line (module, + pushline->pos + 1, 0, pushline->pos + 1, height -1, + 0); + break; + + case DIR_FBTT: + pushline->pos--; + if (pushline->pos < 0) + goto stop; + + b_module_draw_line (module, + 0, pushline->pos, width-1, pushline->pos, + module->maxval); + if (pushline->pos < height-1) + b_module_draw_line (module, + 0, pushline->pos + 1, width - 1, pushline->pos + 1, + 0); + break; + + case DIR_FLTR: + pushline->pos++; + if (pushline->pos > width) + goto stop; + b_module_draw_line (module, + pushline->pos, 0, pushline->pos, height - 1, + module->maxval); + if (pushline->pos > 0) + b_module_draw_line (module, + pushline->pos - 1, 0, pushline->pos - 1, height -1, + 0); + break; + } + + b_module_paint (module); + return TIMEOUT; + + stop: + b_module_fill (module, 0); + b_module_paint (module); + b_module_request_stop (module); + + return 0; +} + +static void +b_pushline_describe (BModule *module, + const gchar **title, + const gchar **description, + const gchar **author) +{ + *title = "BPushline"; + *description = "Pushline hack"; + *author = "Daniel Mack"; +} diff --git a/blib-1.1.7/modules/bqix.c b/blib-1.1.7/modules/bqix.c new file mode 100644 index 0000000..8b151fa --- /dev/null +++ b/blib-1.1.7/modules/bqix.c @@ -0,0 +1,347 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2002 The Blinkenlights Crew + * Sven Neumann + * + * Inspired by the Qix hack from the xscreensaver package. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include +#include + +#include +#include + +#include + + +#define TIMEOUT 60 + +#define SPREAD 100 /* prescaled! */ +#define SCALE 6 + + +#define B_TYPE_QIX (b_type_qix) +#define B_QIX(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), B_TYPE_QIX, BQix)) +#define B_QIX_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), B_TYPE_QIX, BQixClass)) +#define B_IS_QIX(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), B_TYPE_QIX)) + +typedef struct _BQix BQix; +typedef struct _BQixClass BQixClass; + +typedef struct _BQixLine BQixLine; + +struct _BQixLine +{ + struct { + gint x; + gint y; + gint dx; + gint dy; + } points[2]; +}; + +struct _BQix +{ + BModule parent_instance; + + gint max_lines; + + BQixLine *lines; + guchar *values; + gint nlines; + gint maxx; + gint maxy; +}; + +struct _BQixClass +{ + BModuleClass parent_class; +}; + +enum +{ + PROP_0, + PROP_LINES +}; + + +static GType b_qix_get_type (GTypeModule *module); +static void b_qix_class_init (BQixClass *klass); +static void b_qix_finalize (GObject *object); +static void b_qix_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec); +static void b_qix_init (BQix *qix); +static gboolean b_qix_query (gint width, + gint height, + gint channels, + gint maxval); +static gboolean b_qix_prepare (BModule *module, + GError **error); +static void b_qix_relax (BModule *module); +static void b_qix_start (BModule *module); +static gint b_qix_tick (BModule *module); +static void b_qix_describe (BModule *module, + const gchar **title, + const gchar **description, + const gchar **author); + + +static BModuleClass * parent_class = NULL; +static GType b_type_qix = 0; + + +G_MODULE_EXPORT gboolean +b_module_register (GTypeModule *module) +{ + b_qix_get_type (module); + return TRUE; +} + +GType +b_qix_get_type (GTypeModule *module) +{ + if (!b_type_qix) + { + static const GTypeInfo qix_info = + { + sizeof (BQixClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc) b_qix_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (BQix), + 0, /* n_preallocs */ + (GInstanceInitFunc) b_qix_init, + }; + + b_type_qix = g_type_module_register_type (module, + B_TYPE_MODULE, "BQix", + &qix_info, 0); + } + + return b_type_qix; +} + +static void +b_qix_class_init (BQixClass *klass) +{ + GObjectClass *object_class; + BModuleClass *module_class; + GParamSpec *param_spec; + + object_class = G_OBJECT_CLASS (klass); + module_class = B_MODULE_CLASS (klass); + + parent_class = g_type_class_peek_parent (klass); + + object_class->finalize = b_qix_finalize; + object_class->set_property = b_qix_set_property; + + param_spec = g_param_spec_int ("lines", NULL, + "The number of lines to draw.", + 1, 64, 5, + G_PARAM_CONSTRUCT | G_PARAM_WRITABLE); + g_object_class_install_property (object_class, PROP_LINES, param_spec); + + module_class->query = b_qix_query; + module_class->prepare = b_qix_prepare; + module_class->relax = b_qix_relax; + module_class->start = b_qix_start; + module_class->tick = b_qix_tick; + module_class->describe = b_qix_describe; +} + +static void +b_qix_finalize (GObject *object) +{ + BQix *qix = B_QIX (object); + + g_free (qix->lines); + g_free (qix->values); + + G_OBJECT_CLASS (parent_class)->finalize (object); +} + +static void +b_qix_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec) +{ + BQix *qix = B_QIX (object); + + switch (property_id) + { + case PROP_LINES: + g_return_if_fail (g_value_get_int (value) > 0); + qix->max_lines = g_value_get_int (value); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static void +b_qix_init (BQix *qix) +{ +} + +static gboolean +b_qix_query (gint width, + gint height, + gint channels, + gint maxval) +{ + return (width > 0 && height > 0 && channels == 1 && maxval > 0); +} + +static gboolean +b_qix_prepare (BModule *module, + GError **error) +{ + BQix *qix = B_QIX (module); + gint i, value; + gint xspread, yspread; + + if (qix->max_lines < 1) + { + g_set_error (error, 0, 0, "Qix module must have at least one line"); + return FALSE; + } + + qix->lines = g_new (BQixLine, 2 * qix->max_lines); + qix->values = g_new (guchar, qix->max_lines); + + if (module->aspect < 1.0) + { + xspread = SPREAD; + yspread = module->aspect * xspread; + } + else + { + yspread = SPREAD; + xspread = module->aspect * yspread; + } + + qix->maxx = (module->width << SCALE) - 1; + qix->maxy = (module->height << SCALE) - 1; + + qix->nlines = 1; + + for (i = 0; i < 2; i++) + { + qix->lines[0].points[i].x = rand () % qix->maxx; + qix->lines[0].points[i].y = rand () % qix->maxy; + qix->lines[0].points[i].dx = (rand () % (xspread + 1)) - (xspread / 2); + qix->lines[0].points[i].dy = (rand () % (yspread + 1)) - (yspread / 2); + } + + value = module->maxval / qix->max_lines; + + for (i = 0; i < qix->max_lines; i++) + qix->values[i] = module->maxval - i * value; + + return TRUE; +} + +static void +b_qix_relax (BModule *module) +{ + BQix *qix = B_QIX (module); + + if (qix->lines) + { + g_free (qix->lines); + qix->lines = NULL; + } + if (qix->values) + { + g_free (qix->values); + qix->values = NULL; + } +} + +static void +b_qix_start (BModule *module) +{ + b_module_ticker_start (module, TIMEOUT); +} + +static gint +b_qix_tick (BModule *module) +{ + BQix *qix = B_QIX (module); + BQixLine *line; + gint i; + + b_module_fill (module, 0); + +#define wiggle(point, delta, max) \ + point += delta; \ + if (point < 0) point = 0, delta = -delta, point += delta / 2; \ + else if (point > max) point = max, delta = -delta, point += delta / 2; + + for (i = qix->nlines - 1; i > 0; i--) + memcpy (qix->lines + i, qix->lines + i - 1, sizeof (BQixLine)); + + line = qix->lines; + + for (i = 0; i < 2; i++) + { + wiggle (line->points[i].x, line->points[i].dx, qix->maxx); + wiggle (line->points[i].y, line->points[i].dy, qix->maxy); + } + + i = qix->nlines - 1; + if (i % 2) + i--; + + for (; i >= 0; i -= 2) + { + line = qix->lines + i; + b_module_draw_line (module, + line->points[0].x >> SCALE, + line->points[0].y >> SCALE, + line->points[1].x >> SCALE, + line->points[1].y >> SCALE, + qix->values[i / 2]); + } + + b_module_paint (module); + + if (qix->nlines < 2 * qix->max_lines) + qix->nlines++; + + return TIMEOUT; +} + +static void +b_qix_describe (BModule *module, + const gchar **title, + const gchar **description, + const gchar **author) +{ + *title = "BQix"; + *description = "Qix hack"; + *author = "Sven Neumann"; +} diff --git a/blib-1.1.7/modules/bretris.c b/blib-1.1.7/modules/bretris.c new file mode 100644 index 0000000..42b63f8 --- /dev/null +++ b/blib-1.1.7/modules/bretris.c @@ -0,0 +1,701 @@ +/* BRetris: Tetris (from right to left) module for Blinkenlights + * + * Copyright (c) 2003 1stein <1stein@schuermans.info> + * + * based on Test implementation for a BModule by the Blinkenlights Crew + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include +#include + +#include +#include + +#include + +#define BRetrisVerMaj 1 +#define BRetrisVerMin 0 +#define BRetrisVerRev 2 + +//minimum size and color count of display +#define BRetrisSizeXMin 18 +#define BRetrisSizeYMin 8 +#define BRetrisMaxColorMin 1 +//speed of game (small number = fast) +#define BRetrisSpeedMin 500 +#define BRetrisSpeedMax 50 +#define BRetrisSpeedInc 7 //how fast to increase speed +#define BRetrisSpeedDrop 20 //speed for dropping stones +//the colors +#define BRetrisColorEmpty( MaxColor ) (0) +#define BRetrisColorActiveStone( MaxColor ) (MaxColor) +#define BRetrisColorStone( MaxColor ) ((MaxColor) * 3 / 4) +#define BRetrisColorRemoveStone( MaxColor ) (MaxColor) + +#define count( array ) (sizeof( (array) ) / sizeof( (array)[0] )) + +#ifdef RETRIS_DEBUG +#define dbg_print g_print +#else +#define dbg_print(fmt, ...) +#endif + +#define B_TYPE_RETRIS_MODULE (b_type_retris_module) +#define B_RETRIS_MODULE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), B_TYPE_RETRIS_MODULE, BRetrisModule)) +#define B_RETRIS_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), B_TYPE_RETRIS_MODULE, BRetrisModuleClass)) +#define B_IS_RETRIS_MODULE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), B_TYPE_RETRIS_MODULE)) + +typedef struct _BRetrisModule BRetrisModule; +typedef struct _BRetrisModuleClass BRetrisModuleClass; + + +struct _BRetrisModule +{ + BModule parent_instance; + + int SizeX, SizeY; //size of game-field + int MaxColor; //maximum color value + int PlayerId; //device id of the player + int Speed; //current speed + int * * ppStones; //two-dimensional array with stones [SizeX+4][SizeY] + int CurStone; //number of current stone, -1 if none + int CurX, CurY; //position of current stone + int CurRot; //rotation of current stone + int RemoveCol; //column being removed, -1 if none + int Dropping; //flag if dropping current stone +}; + +struct _BRetrisModuleClass +{ + BModuleClass parent_class; +}; + +static GType b_retris_module_get_type (GTypeModule *module); +static void b_retris_module_class_init (BRetrisModuleClass *klass); +static void b_retris_module_init (BRetrisModule *test_module); +static gboolean b_retris_module_query (gint width, + gint height, + gint channels, + gint maxval); +static gboolean b_retris_module_prepare (BModule *module, + GError **error); +static void b_retris_module_relax (BModule *module); +static void b_retris_module_start (BModule *module); +static void b_retris_module_event (BModule *module, + BModuleEvent *event); +static gint b_retris_module_tick (BModule *module); +static void b_retris_module_describe (BModule *module, + const gchar **title, + const gchar **description, + const gchar **author); + + +static GType b_type_retris_module = 0; + + +G_MODULE_EXPORT gboolean +b_module_register (GTypeModule * module) +{ + b_retris_module_get_type (module); + + return TRUE; +} + +GType +b_retris_module_get_type (GTypeModule * module) +{ + if (!b_type_retris_module) + { + static const GTypeInfo retris_module_info = { + sizeof (BRetrisModuleClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc) b_retris_module_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (BRetrisModule), + 0, /* n_preallocs */ + (GInstanceInitFunc) b_retris_module_init, + }; + + /* !!!!!!!!! The name given in the next function MUST be unique! */ + + b_type_retris_module = g_type_module_register_type (module, + B_TYPE_MODULE, + "BRetris", + &retris_module_info, + 0); + } + + return b_type_retris_module; +} + +//stones (always 4 lines with same stone in different rotation angles) +typedef struct sBRetrisStonePos +{ + int X, Y; +} stBRetrisStonePos; +typedef struct sBRetrisStoneRot +{ + stBRetrisStonePos Pos[4]; +} stBRetrisStoneRot; +typedef struct sBRetrisStone +{ + stBRetrisStoneRot Rot[4]; +} stBRetrisStone; +stBRetrisStone BRetrisStoneTable[] = +{ + { { { { { -2, 0 }, { -1, 0 }, { 0, 0 }, { 1, 0 } } }, //the I + { { { 0, -2 }, { 0, -1 }, { 0, 0 }, { 0, 1 } } }, + { { { -2, 0 }, { -1, 0 }, { 0, 0 }, { 1, 0 } } }, + { { { 0, -2 }, { 0, -1 }, { 0, 0 }, { 0, 1 } } } } }, + { { { { { 1, -1 }, { -1, 0 }, { 0, 0 }, { 1, 0 } } }, //the L + { { { 0, -1 }, { 0, 0 }, { 0, 1 }, { 1, 1 } } }, + { { { -1, 0 }, { 0, 0 }, { 1, 0 }, { -1, 1 } } }, + { { { -1, -1 }, { 0, -1 }, { 0, 0 }, { 0, 1 } } } } }, + { { { { { -1, -1 }, { -1, 0 }, { 0, 0 }, { 1, 0 } } }, //the J + { { { 0, -1 }, { 1, -1 }, { 0, 0 }, { 0, 1 } } }, + { { { -1, 0 }, { 0, 0 }, { 1, 0 }, { 1, 1 } } }, + { { { 0, -1 }, { 0, 0 }, { -1, 1 }, { 0, 1 } } } } }, + { { { { { 0, -1 }, { -1, 0 }, { 0, 0 }, { 0, 1 } } }, //the T + { { { 0, -1 }, { -1, 0 }, { 0, 0 }, { 1, 0 } } }, + { { { 0, -1 }, { 0, 0 }, { 1, 0 }, { 0, 1 } } }, + { { { -1, 0 }, { 0, 0 }, { 1, 0 }, { 0, 1 } } } } }, + { { { { { 0, -1 }, { 1, -1 }, { 0, 0 }, { 1, 0 } } }, //the block + { { { 0, -1 }, { 1, -1 }, { 0, 0 }, { 1, 0 } } }, + { { { 0, -1 }, { 1, -1 }, { 0, 0 }, { 1, 0 } } }, + { { { 0, -1 }, { 1, -1 }, { 0, 0 }, { 1, 0 } } } } }, + { { { { { 0, -1 }, { -1, 0 }, { 0, 0 }, { -1, 1 } } }, //the Z + { { { -1, -1 }, { 0, -1 }, { 0, 0 }, { 1, 0 } } }, + { { { 0, -1 }, { -1, 0 }, { 0, 0 }, { -1, 1 } } }, + { { { -1, -1 }, { 0, -1 }, { 0, 0 }, { 1, 0 } } } } }, + { { { { { -1, -1 }, { -1, 0 }, { 0, 0 }, { 0, 1 } } }, //the S + { { { 0, -1 }, { 1, -1 }, { -1, 0 }, { 0, 0 } } }, + { { { -1, -1 }, { -1, 0 }, { 0, 0 }, { 0, 1 } } }, + { { { 0, -1 }, { 1, -1 }, { -1, 0 }, { 0, 0 } } } } }, +}; + +//check if a stone fits at a position +//retuns true if stone fits +static int +BRetrisCheckStone (BRetrisModule *pRetrisModule, + int Stone, int PosX, int PosY, int Rot) +{ + stBRetrisStoneRot * pStoneRot; + stBRetrisStonePos * pStonePos; + int I, X, Y, SizeX, SizeY; + + //check if stone is available + if (Stone < 0 || Stone >= count (BRetrisStoneTable)) + return 0; + + //get size of stone array + SizeX = pRetrisModule->SizeX + 4; + SizeY = pRetrisModule->SizeY; + + //get pointer to stone rotation + pStoneRot = &BRetrisStoneTable[Stone] + .Rot[Rot & 3]; + + //all 4 positions + for (I = 0; I < 4; I++) + { + //get position + pStonePos = &pStoneRot->Pos[I]; + //get coordinates + X = PosX + pStonePos->X; + Y = PosY + pStonePos->Y; + //outside of array + if( X < 0 || X >= SizeX || Y < 0 || Y >= SizeY ) + return 0; + //position not free + if( pRetrisModule->ppStones[X][Y] ) + return 0; + } + + //stone fits + return 1; +} + +//deactivate stone +static void +BRetrisDeactivateStone (BRetrisModule *pRetrisModule) +{ + stBRetrisStoneRot * pStoneRot; + stBRetrisStonePos * pStonePos; + int I, X, Y, SizeX, SizeY; + + //check if stone is available + if (pRetrisModule->CurStone < 0 || pRetrisModule->CurStone >= count (BRetrisStoneTable)) + return; + + //get size of stone array + SizeX = pRetrisModule->SizeX + 4; + SizeY = pRetrisModule->SizeY; + + //get pointer to stone rotation + pStoneRot = &BRetrisStoneTable[pRetrisModule->CurStone] + .Rot[pRetrisModule->CurRot & 3]; + + //all 4 positions + for (I = 0; I < 4; I++) + { + //get position + pStonePos = &pStoneRot->Pos[I]; + //get coordinates + X = pRetrisModule->CurX + pStonePos->X; + Y = pRetrisModule->CurY + pStonePos->Y; + //put stone into stone array + if( X >= 0 && X < SizeX && Y >= 0 && Y < SizeY ) + pRetrisModule->ppStones[X][Y] = 1; + } +} + +//draw active stone +static void +BRetrisDrawStone (BRetrisModule *pRetrisModule) +{ + stBRetrisStoneRot * pStoneRot; + stBRetrisStonePos * pStonePos; + int I, X, Y, SizeX, SizeY; + + //check if stone is available + if (pRetrisModule->CurStone < 0 || pRetrisModule->CurStone >= count (BRetrisStoneTable)) + return; + + //get size of display + SizeX = pRetrisModule->SizeX; + SizeY = pRetrisModule->SizeY; + + //get pointer to stone rotation + pStoneRot = &BRetrisStoneTable[pRetrisModule->CurStone] + .Rot[pRetrisModule->CurRot & 3]; + + //all 4 positions + for (I = 0; I < 4; I++) + { + //get position + pStonePos = &pStoneRot->Pos[I]; + //get coordinates + X = pRetrisModule->CurX + pStonePos->X; + Y = pRetrisModule->CurY + pStonePos->Y; + //draw position + if( X >= 0 && X < SizeX && Y >= 0 && Y < SizeY ) + b_module_draw_point ((BModule *) pRetrisModule, + X, Y, + BRetrisColorActiveStone (pRetrisModule->MaxColor)); + } +} + +//output current picture +static void +BRetrisOutput (BRetrisModule *pRetrisModule) +{ + int X, Y; + + //empty the screen + b_module_fill ((BModule *) pRetrisModule, + BRetrisColorEmpty (pRetrisModule->MaxColor)); + + //draw stones + for (X = 0; X < pRetrisModule->SizeX; X++) + { + for (Y = 0; Y < pRetrisModule->SizeY; Y++) + { + if (pRetrisModule->ppStones[X][Y]) + { + if (X == pRetrisModule->RemoveCol) + b_module_draw_point ((BModule *) pRetrisModule, + X, Y, + BRetrisColorRemoveStone (pRetrisModule->MaxColor)); + else + b_module_draw_point ((BModule *) pRetrisModule, + X, Y, + BRetrisColorStone (pRetrisModule->MaxColor)); + } + } + } + + //draw active stone + BRetrisDrawStone (pRetrisModule); + + //update screen + b_module_paint ((BModule *) pRetrisModule); +} + +//start a new game +static void +BRetrisNewGame (BRetrisModule *pRetrisModule) +{ + int X, Y; + + //set speed to minimal + pRetrisModule->Speed = BRetrisSpeedMin; + + //remove all stones + for (X = 0; X < pRetrisModule->SizeX + 4; X++) + for (Y = 0; Y < pRetrisModule->SizeY; Y++) + pRetrisModule->ppStones[X][Y] = 0; + + //no current stone yet + pRetrisModule->CurStone = -1; + //no column ist being removed + pRetrisModule->RemoveCol = -1; + //no stone is being dropped + pRetrisModule->Dropping = 0; + + dbg_print ("BRetris: new game\n"); + + //output current picture + BRetrisOutput (pRetrisModule); +} + +//key-procedure +static void +BRetrisKey (BRetrisModule *pRetrisModule, + BModuleKey Key) +{ + switch (Key) + { + //move stone up + case B_KEY_2: + if (BRetrisCheckStone (pRetrisModule, + pRetrisModule->CurStone, + pRetrisModule->CurX, + pRetrisModule->CurY - 1, + pRetrisModule->CurRot)) + { + pRetrisModule->CurY--; + BRetrisOutput (pRetrisModule); + } + break; + + //rotate stone + case B_KEY_3: + case B_KEY_6: + if (BRetrisCheckStone (pRetrisModule, + pRetrisModule->CurStone, + pRetrisModule->CurX, + pRetrisModule->CurY, + (pRetrisModule->CurRot + 1) & 3)) + { + pRetrisModule->CurRot = (pRetrisModule->CurRot + 1) & 3; + BRetrisOutput (pRetrisModule); + } + break; + + //drop stone + case B_KEY_4: + pRetrisModule->Dropping = 1; //set flag for dropping stone + b_module_ticker_stop ((BModule *) pRetrisModule); //restart the tick machinery + b_module_ticker_start ((BModule *) pRetrisModule, BRetrisSpeedDrop); + break; + + //move stone down + case B_KEY_8: + if (BRetrisCheckStone (pRetrisModule, + pRetrisModule->CurStone, + pRetrisModule->CurX, + pRetrisModule->CurY + 1, + pRetrisModule->CurRot)) + { + pRetrisModule->CurY++; + BRetrisOutput (pRetrisModule); + } + break; + + //rotate stone in other direction + case B_KEY_9: + if (BRetrisCheckStone (pRetrisModule, + pRetrisModule->CurStone, + pRetrisModule->CurX, + pRetrisModule->CurY, + (pRetrisModule->CurRot + 3) & 3)) + { + pRetrisModule->CurRot = (pRetrisModule->CurRot + 3) & 3; + BRetrisOutput (pRetrisModule); + } + break; + + default: + break; + } +} + +//tick-procedure +//returns 1 if game over or 0 if game not over +static int +BRetrisTick (BRetrisModule *pRetrisModule) +{ + int X, Y; + + //dropping a stone + if (pRetrisModule->Dropping) + { + //move stone one down + if (BRetrisCheckStone (pRetrisModule, + pRetrisModule->CurStone, + pRetrisModule->CurX - 1, + pRetrisModule->CurY, + pRetrisModule->CurRot)) + pRetrisModule->CurX--; + //stone has hit ground + else + //stop dropping stone + pRetrisModule->Dropping = 0; + } //dropping a stone + + //not dropping a stone + else + { + //stone active + if (pRetrisModule->CurStone >= 0) + { + //move stone one down + if (BRetrisCheckStone (pRetrisModule, + pRetrisModule->CurStone, + pRetrisModule->CurX - 1, + pRetrisModule->CurY, + pRetrisModule->CurRot)) + pRetrisModule->CurX--; + //stone has hit ground + else + { + BRetrisDeactivateStone (pRetrisModule); //deactivate stone + pRetrisModule->CurStone = -1; //no current stone + dbg_print( "BRetris: stone hit ground\n" ); + } + } //stone active + + //no active stone + else + { + //column is being removed + if (pRetrisModule->RemoveCol >= 0) + { + //remove the column + for (X = pRetrisModule->RemoveCol; X < pRetrisModule->SizeX + 4 - 1; X++) + for (Y = 0; Y < pRetrisModule->SizeY; Y++) + pRetrisModule->ppStones[X][Y] = pRetrisModule->ppStones[X + 1][Y]; + dbg_print( "BRetris: column %d removed\n", pRetrisModule->RemoveCol ); + pRetrisModule->RemoveCol = -1; //no column is being removed + //increase speed + pRetrisModule->Speed = (pRetrisModule->Speed * (BRetrisSpeedInc - 1) + BRetrisSpeedMax) / BRetrisSpeedInc; + } //column is being removed + + //no column is being removed + else + { + //check for a column to remove + for (X = 0; X < pRetrisModule->SizeX + 4; X++) + { + for (Y = 0; Y < pRetrisModule->SizeY; Y++) + if (! pRetrisModule->ppStones[X][Y]) + break; + if (Y >= pRetrisModule->SizeY) //column is full + break; + } + + //found a column to remove + if (X < pRetrisModule->SizeX + 4) + { + pRetrisModule->RemoveCol = X; + dbg_print( "BRetris: column %d is full\n", pRetrisModule->RemoveCol ); + } + + //found no column to remove + else + { + //check game over + for (X = pRetrisModule->SizeX; X < pRetrisModule->SizeX + 4; X++) + for (Y = 0; Y < pRetrisModule->SizeY; Y++) + if (pRetrisModule->ppStones[X][Y]) + //found inactive stone right of display - game over + return 1; + + //create new stone + pRetrisModule->CurStone = rand( ) % count (BRetrisStoneTable); + pRetrisModule->CurX = pRetrisModule->SizeX + 2; + pRetrisModule->CurY = pRetrisModule->SizeY / 2; + pRetrisModule->CurRot = rand( ) & 3; + dbg_print( "BRetris: created new stone\n" ); + } //found no column to remove + } //no column is being removed + } //no active stone + } //not dropping a stone + + //output new picture + BRetrisOutput (pRetrisModule); + + //return game not over + return 0; +} + +static void +b_retris_module_class_init (BRetrisModuleClass *klass) +{ + BModuleClass *module_class; + + module_class = B_MODULE_CLASS (klass); + + module_class->query = b_retris_module_query; + module_class->prepare = b_retris_module_prepare; + module_class->relax = b_retris_module_relax; + module_class->start = b_retris_module_start; + module_class->event = b_retris_module_event; + module_class->tick = b_retris_module_tick; + module_class->describe = b_retris_module_describe; +} + +static void +b_retris_module_init (BRetrisModule *retris_module) +{ +} + +static gboolean +b_retris_module_query (gint width, + gint height, + gint channels, + gint maxval) +{ + return (width >= BRetrisSizeXMin && height >= BRetrisSizeYMin + && channels == 1 && maxval >= BRetrisMaxColorMin); +} + +static gboolean +b_retris_module_prepare (BModule *module, + GError **error) +{ + int SizePtrs, SizeCol, Size, X; + char * Ptr; + + BRetrisModule *pRetris_module = B_RETRIS_MODULE (module); + + //initialize the module values that depend on the output device + pRetris_module->SizeX = module->width; //size of game field + pRetris_module->SizeY = module->height; + pRetris_module->MaxColor = module->maxval; //maximum color value + pRetris_module->PlayerId = -1; //no plyer in game yet + + //allocate needed memory + SizePtrs = (pRetris_module->SizeX + 4) * sizeof( int * ); //get needed size + SizeCol = pRetris_module->SizeY * sizeof( int ); + Size = SizePtrs + (pRetris_module->SizeX + 4) * SizeCol; + Ptr = g_new (gchar, Size); + + pRetris_module->ppStones = (int * *)Ptr; //remember pointer + for( X = 0, Ptr += SizePtrs; X < pRetris_module->SizeX + 4; X++, Ptr += SizeCol ) //generate pointers to columns + pRetris_module->ppStones[X] = (int *)Ptr; + + return TRUE; +} + +static void +b_retris_module_relax (BModule *module) +{ + BRetrisModule *pRetris_module = B_RETRIS_MODULE (module); + + g_free (pRetris_module->ppStones); + pRetris_module->ppStones = NULL; +} + +static void +b_retris_module_start (BModule *module) +{ + //start new game + BRetrisNewGame ((BRetrisModule *) module); + + //start the tick machinery + b_module_ticker_start (module, BRetrisSpeedMin); +} + +static void +b_retris_module_event (BModule *module, + BModuleEvent *event) +{ + BRetrisModule *retris = B_RETRIS_MODULE (module); + + switch (event->type) + { + case B_EVENT_TYPE_KEY: + BRetrisKey (retris, event->key); + break; + + case B_EVENT_TYPE_PLAYER_ENTERED: + if (retris->PlayerId == -1) + { + retris->PlayerId = event->device_id; + module->num_players++; + } + break; + + case B_EVENT_TYPE_PLAYER_LEFT: + if (retris->PlayerId == event->device_id) + { + retris->PlayerId = -1; + module->num_players--; + } + break; + + default: + break; + } +} + +static gint +b_retris_module_tick (BModule *module) +{ + int GameOver; + + //call tick-procedure + GameOver = BRetrisTick ((BRetrisModule *) module); + + //game over + if( GameOver ) + { + dbg_print ("BRetris: requesting stop\n"); + //clear screen + b_module_fill (module, 0); + b_module_paint (module); + //request end of game + b_module_request_stop (module); + //we do not want to be called again + return 0; + } + + //dropping a stone at the moment + if (((BRetrisModule *) module)->Dropping) + //we want to be called again in very few milliseconds + return BRetrisSpeedDrop; + + //we want to be called again in some milliseconds + return ((BRetrisModule *) module)->Speed; +} + +static void +b_retris_module_describe (BModule *module, + const gchar **title, + const gchar **description, + const gchar **author) +{ + *title = "BRetris"; + *description = "Tetris game from right to left"; + *author = "1stein"; +} + diff --git a/blib-1.1.7/modules/bsnake.c b/blib-1.1.7/modules/bsnake.c new file mode 100644 index 0000000..84c2217 --- /dev/null +++ b/blib-1.1.7/modules/bsnake.c @@ -0,0 +1,578 @@ +/* BSnake: Snake module for Blinkenlights + * + * Copyright (c) 2003 1stein <1stein@schuermans.info> + * + * based on Test implementation for a BModule by the Blinkenlights Crew + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include +#include + +#include +#include + +#include + + +#define BSnakeVerMaj 1 +#define BSnakeVerMin 1 +#define BSnakeVerRev 2 +#define BSnakeVerTxt "1.1.2" + +//minimum size and color count of display +#define BSnakeSizeXMin 18 +#define BSnakeSizeYMin 8 +#define BSnakeMaxColorMin 1 +//initial and maximum length of the snake +#define BSnakeLenIni( Width, Height ) 3 +#define BSnakeLenMax( Width, Height ) ((Width) + (Height) + 3) +//time snake is dead after chrashing before game ends +#define BSnakeDeadTime 10 +#define BSnakeLives 3 +//initial and maximum speed of game (high number = slow) +#define BSnakeSpeedIni 500 +#define BSnakeSpeedMax 100 +//the colors +#define BSnakeColorEmpty( MaxColor ) (0) +#define BSnakeColorSnakeHead( MaxColor ) (MaxColor) +#define BSnakeColorSnakeBody( MaxColor ) ((MaxColor) * 2 / 3) +#define BSnakeColorMouse( MaxColor ) ((MaxColor) * 3 / 4) + +#ifdef SNAKE_DEBUG +#define dbg_print g_print +#else +#define dbg_print(fmt, ...) +#endif + +#define B_TYPE_SNAKE_MODULE (b_type_snake_module) +#define B_SNAKE_MODULE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), B_TYPE_SNAKE_MODULE, BSnakeModule)) +#define B_SNAKE_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), B_TYPE_SNAKE_MODULE, BSnakeModuleClass)) +#define B_IS_SNAKE_MODULE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), B_TYPE_SNAKE_MODULE)) + +typedef struct _BSnakeModule BSnakeModule; +typedef struct _BSnakeModuleClass BSnakeModuleClass; + +typedef struct sBSnakePoint +{ + int X, Y; +} stBSnakePoint; + +struct _BSnakeModule +{ + BModule parent_instance; + + int MaxColor; //maximum color value + stBSnakePoint Size; //size of game-field + int SnakeLenIni; //initial size of the snake + int SnakeLenMax; //maximum size of the snake + int PlayerId; //device id of the player + int SnakeLen; //current length of the snake + stBSnakePoint * pSnake; //array with fields of the snake (index 0 is head) + stBSnakePoint SnakeDir; //current direction of snake head + stBSnakePoint SnakeLastDir; //direction of the last step made by the snake + stBSnakePoint Mouse; //position of the current mouse to eat ({-1,-1} if no mouse) + int Speed; //current speed of game + int DeadCnt; //if > 0: snake has been dead for DeadCnt ticks + int Lives; // number of lives left +}; + +struct _BSnakeModuleClass +{ + BModuleClass parent_class; +}; + +static GType b_snake_module_get_type (GTypeModule *module); +static void b_snake_module_class_init (BSnakeModuleClass *klass); +static void b_snake_module_init (BSnakeModule *test_module); +static gboolean b_snake_module_query (gint width, + gint height, + gint channels, + gint maxval); +static gboolean b_snake_module_prepare (BModule *module, + GError **error); +static void b_snake_module_relax (BModule *module); +static void b_snake_module_start (BModule *module); +static void b_snake_module_event (BModule *module, + BModuleEvent *event); +static gint b_snake_module_tick (BModule *module); +static void b_snake_module_describe (BModule *module, + const gchar **title, + const gchar **description, + const gchar **author); + + +static GType b_type_snake_module = 0; + + +G_MODULE_EXPORT gboolean +b_module_register (GTypeModule * module) +{ + b_snake_module_get_type (module); + + return TRUE; +} + +GType +b_snake_module_get_type (GTypeModule * module) +{ + if (!b_type_snake_module) + { + static const GTypeInfo snake_module_info = { + sizeof (BSnakeModuleClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc) b_snake_module_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (BSnakeModule), + 0, /* n_preallocs */ + (GInstanceInitFunc) b_snake_module_init, + }; + + /* !!!!!!!!! The name given in the next function MUST be unique! */ + + b_type_snake_module = g_type_module_register_type (module, + B_TYPE_MODULE, + "BSnake", + &snake_module_info, + 0); + } + + return b_type_snake_module; +} + +//check if two points are equal +static int BSnakePointEqual( stBSnakePoint P1, stBSnakePoint P2 ) +{ + return P1.X == P2.X && P1.Y == P2.Y; +} + +//check if two points are near to each other (euclidian distance < 2) +static int BSnakePointNear( stBSnakePoint P1, stBSnakePoint P2 ) +{ + stBSnakePoint Delta; + Delta.X = P2.X - P1.X; + Delta.Y = P2.Y - P1.Y; + return Delta.X >= -1 && Delta.X <= 1 && Delta.Y >= -1 && Delta.Y <= 1; +} + +//output current picture +void +BSnakeOutput (BSnakeModule *pSnakeModule) +{ + int Color, I; + + //empty the screen + b_module_fill ((BModule *) pSnakeModule, + BSnakeColorEmpty (pSnakeModule->MaxColor)); + + //output nothing if not almost end of game + if( pSnakeModule->DeadCnt < BSnakeDeadTime ) + { + //let snake blink when dead + if( (pSnakeModule->DeadCnt & 1) == 0 ) + { + //draw snake + if( pSnakeModule->pSnake[0].X >= 0 //snake head + && pSnakeModule->pSnake[0].X < pSnakeModule->Size.X + && pSnakeModule->pSnake[0].Y >= 0 + && pSnakeModule->pSnake[0].Y < pSnakeModule->Size.Y ) + b_module_draw_point ((BModule *) pSnakeModule, + pSnakeModule->pSnake[0].X, + pSnakeModule->pSnake[0].Y, + BSnakeColorSnakeHead (pSnakeModule->MaxColor)); + Color = BSnakeColorSnakeBody (pSnakeModule->MaxColor); //snake body + for( I = 1; I < pSnakeModule->SnakeLen; I++ ) + if( pSnakeModule->pSnake[I].X >= 0 + && pSnakeModule->pSnake[I].X < pSnakeModule->Size.X + && pSnakeModule->pSnake[I].Y >= 0 + && pSnakeModule->pSnake[I].Y < pSnakeModule->Size.Y ) + b_module_draw_point ((BModule *) pSnakeModule, + pSnakeModule->pSnake[I].X, + pSnakeModule->pSnake[I].Y, + Color); + } + + //draw mouse + if( pSnakeModule->Mouse.X >= 0 + && pSnakeModule->Mouse.X < pSnakeModule->Size.X + && pSnakeModule->Mouse.Y >= 0 + && pSnakeModule->Mouse.Y < pSnakeModule->Size.Y ) + b_module_draw_point ((BModule *) pSnakeModule, + pSnakeModule->Mouse.X, + pSnakeModule->Mouse.Y, + BSnakeColorMouse (pSnakeModule->MaxColor)); + } + + //update screen + b_module_paint ((BModule *) pSnakeModule); +} + +//start a new game +void +BSnakeNewGame (BSnakeModule *pSnakeModule) +{ + int I; + + //initialize snake + pSnakeModule->SnakeLen = pSnakeModule->SnakeLenIni; //length of snake to initial size + switch( rand( ) % 4 ) //place snake head and set direction + { + case 0: //snake comes from top + pSnakeModule->SnakeDir.X = 0; + pSnakeModule->SnakeDir.Y = 1; + pSnakeModule->pSnake[0].X = rand( ) % pSnakeModule->Size.X; + pSnakeModule->pSnake[0].Y = 0; + break; + case 1: //snake comes from left + pSnakeModule->SnakeDir.X = 1; + pSnakeModule->SnakeDir.Y = 0; + pSnakeModule->pSnake[0].X = 0; + pSnakeModule->pSnake[0].Y = rand( ) % pSnakeModule->Size.Y; + break; + case 2: //snake comes from right + pSnakeModule->SnakeDir.X = -1; + pSnakeModule->SnakeDir.Y = 0; + pSnakeModule->pSnake[0].X = pSnakeModule->Size.X - 1; + pSnakeModule->pSnake[0].Y = rand( ) % pSnakeModule->Size.Y; + break; + case 3: //snake comes from bottom + pSnakeModule->SnakeDir.X = 0; + pSnakeModule->SnakeDir.Y = -1; + pSnakeModule->pSnake[0].X = rand( ) % pSnakeModule->Size.X; + pSnakeModule->pSnake[0].Y = pSnakeModule->Size.Y - 1; + break; + } + for( I = 1; I < pSnakeModule->SnakeLen; I++ ) //initialize body of snake + { + pSnakeModule->pSnake[I].X = pSnakeModule->pSnake[I-1].X + - pSnakeModule->SnakeDir.X; + pSnakeModule->pSnake[I].Y = pSnakeModule->pSnake[I-1].Y + - pSnakeModule->SnakeDir.Y; + } + pSnakeModule->SnakeLastDir = pSnakeModule->SnakeDir; //last step was in same direction + + //no mouse yet + pSnakeModule->Mouse.X = -1; + pSnakeModule->Mouse.Y = -1; + + //set speed to initial value + pSnakeModule->Speed = BSnakeSpeedIni; + + //snake is alive + pSnakeModule->DeadCnt = 0; + + dbg_print ("BSnake: new game\n"); + + //output current picture + BSnakeOutput (pSnakeModule); +} + +//key-procedure +void +BSnakeKey (BSnakeModule *pSnakeModule, + BModuleKey Key) +{ + switch (Key) + { + case B_KEY_2: //set snake direction to up + if( pSnakeModule->SnakeLastDir.Y < 1 ) //not if last step was down + { + pSnakeModule->SnakeDir.X = 0; + pSnakeModule->SnakeDir.Y = -1; + } + break; + case B_KEY_4: //set snake direction to left + if( pSnakeModule->SnakeLastDir.X < 1 ) //not if last step was right + { + pSnakeModule->SnakeDir.X = -1; + pSnakeModule->SnakeDir.Y = 0; + } + break; + case B_KEY_6: //set snake direction to right + if( pSnakeModule->SnakeLastDir.X > -1 ) //not if last step was left + { + pSnakeModule->SnakeDir.X = 1; + pSnakeModule->SnakeDir.Y = 0; + } + break; + case B_KEY_8: //set snake direction to down + if( pSnakeModule->SnakeLastDir.Y > -1 ) //not if last step was up + { + pSnakeModule->SnakeDir.X = 0; + pSnakeModule->SnakeDir.Y = 1; + } + break; + default: + break; + } +} + +//tick-procedure +//returns TRUE if game over or FALSE if game not over +gboolean +BSnakeTick (BSnakeModule *pSnakeModule) +{ + stBSnakePoint NewPos; + int I, Crash; + + //snake is dead + if( pSnakeModule->DeadCnt > 0 ) + { + //track time snake is dead + pSnakeModule->DeadCnt++; + + //output current picture + BSnakeOutput (pSnakeModule); + + //return game over when snake was dead long enough + return pSnakeModule->DeadCnt > BSnakeDeadTime; + } + + //get direction of snake head after next step + NewPos.X = pSnakeModule->pSnake[0].X + pSnakeModule->SnakeDir.X; + NewPos.Y = pSnakeModule->pSnake[0].Y + pSnakeModule->SnakeDir.Y; + + //no mouse available + if( pSnakeModule->Mouse.X < 0 || pSnakeModule->Mouse.Y < 0 ) + { + //generate new mouse + pSnakeModule->Mouse.X = rand( ) % pSnakeModule->Size.X; + pSnakeModule->Mouse.Y = rand( ) % pSnakeModule->Size.Y; + + //check if new mouse position is valid + //(i.e. not exactly at snake position and not directly next to snake) + if( BSnakePointNear( pSnakeModule->Mouse, NewPos ) ) + { + //remove mouse + pSnakeModule->Mouse.X = -1; + pSnakeModule->Mouse.Y = -1; + } + for( I = 0; I < pSnakeModule->SnakeLen; I++ ) + { + if( BSnakePointNear( pSnakeModule->Mouse, pSnakeModule->pSnake[I] ) ) + { + //remove mouse + pSnakeModule->Mouse.X = -1; + pSnakeModule->Mouse.Y = -1; + } + } + + if( pSnakeModule->Mouse.X >= 0 && pSnakeModule->Mouse.Y >= 0 ) + dbg_print ("BSnake: new mouse\n"); + } + + //snake eats mouse + if( pSnakeModule->Mouse.X >= 0 + && pSnakeModule->Mouse.Y >= 0 + && BSnakePointEqual( NewPos, pSnakeModule->Mouse ) ) + { + //remove mouse + pSnakeModule->Mouse.X = -1; + pSnakeModule->Mouse.Y = -1; + + //increase snake length + //(last field of snake body will be set when moving snake one step) + if( pSnakeModule->SnakeLen < pSnakeModule->SnakeLenMax ) + pSnakeModule->SnakeLen++; + + //increase game speed if snake already has got maximum length + //(this formula will not increase the speed above maximum speed) + else + pSnakeModule->Speed = (3 * pSnakeModule->Speed + BSnakeSpeedMax) / 4; + + dbg_print ("BSnake: snake ate mouse\n"); + } + + //check if snake crashes + Crash = 0; + if( NewPos.X < 0 //snake crashes into wall + || NewPos.Y < 0 + || NewPos.X >= pSnakeModule->Size.X + || NewPos.Y >= pSnakeModule->Size.Y ) + Crash = 1; + for( I = 0; I < pSnakeModule->SnakeLen - 1; I++ ) //snake crashes into its body + if( BSnakePointEqual( NewPos, pSnakeModule->pSnake[I] ) ) + Crash = 1; + + //snake crashes + if( Crash ) + { + //mark Snake as dead + pSnakeModule->DeadCnt = 1; + + dbg_print ("BSnake: snake crashed\n"); + } + + + //snake does not crash + else + { + //move snake one step + for( I = pSnakeModule->SnakeLen; I > 0; I-- ) + pSnakeModule->pSnake[I] = pSnakeModule->pSnake[I-1]; + pSnakeModule->pSnake[0] = NewPos; + //remember direction of last step + pSnakeModule->SnakeLastDir = pSnakeModule->SnakeDir; + } + + //output current picture + BSnakeOutput (pSnakeModule); + + //return game not over + return FALSE; +} + +static void +b_snake_module_class_init (BSnakeModuleClass *klass) +{ + BModuleClass *module_class; + + module_class = B_MODULE_CLASS (klass); + + module_class->query = b_snake_module_query; + module_class->prepare = b_snake_module_prepare; + module_class->relax = b_snake_module_relax; + module_class->start = b_snake_module_start; + module_class->event = b_snake_module_event; + module_class->tick = b_snake_module_tick; + module_class->describe = b_snake_module_describe; +} + +static void +b_snake_module_init (BSnakeModule *snake_module) +{ +} + +static gboolean +b_snake_module_query (gint width, + gint height, + gint channels, + gint maxval) +{ + return (width >= BSnakeSizeXMin && height >= BSnakeSizeYMin + && channels == 1 && maxval >= BSnakeMaxColorMin); +} + +static gboolean +b_snake_module_prepare (BModule *module, + GError **error) +{ + BSnakeModule *snake = B_SNAKE_MODULE (module); + + //initialize the module values that depend on the output device + snake->MaxColor = module->maxval; //maximum color value + snake->Size.X = module->width; //size of game field + snake->Size.Y = module->height; + snake->SnakeLenIni = BSnakeLenIni( module->width, module->height ); //initial size of the snake + snake->SnakeLenMax = BSnakeLenMax( module->width, module->height ); //initial size of the snake + snake->PlayerId = -1; //no player in game yet + + snake->pSnake = g_new (stBSnakePoint, snake->SnakeLenMax); + + return TRUE; +} + +static void +b_snake_module_relax (BModule *module) +{ + BSnakeModule *snake = B_SNAKE_MODULE (module); + + g_free (snake->pSnake); + snake->pSnake = NULL; +} + +static void +b_snake_module_start (BModule *module) +{ + BSnakeModule *snake = B_SNAKE_MODULE (module); + + snake->Lives = BSnakeLives; + BSnakeNewGame (snake); + + b_module_ticker_start (module, snake->Speed); +} + +static void +b_snake_module_event (BModule *module, + BModuleEvent *event) +{ + BSnakeModule *snake = B_SNAKE_MODULE (module); + + switch (event->type) + { + case B_EVENT_TYPE_KEY: + BSnakeKey (snake, event->key); + break; + + case B_EVENT_TYPE_PLAYER_ENTERED: + if (snake->PlayerId == -1) + { + snake->PlayerId = event->device_id; + module->num_players++; + } + break; + + case B_EVENT_TYPE_PLAYER_LEFT: + if (snake->PlayerId == event->device_id) + { + snake->PlayerId = -1; + module->num_players--; + } + break; + + default: + break; + } +} + +static gint +b_snake_module_tick (BModule *module) +{ + BSnakeModule *snake = B_SNAKE_MODULE (module); + gboolean GameOver; + + GameOver = BSnakeTick (snake); + + if( GameOver ) + { + snake->Lives--; + if( snake->Lives <= 0 ) + { + b_module_request_stop (module); //request end + return 0; + } + BSnakeNewGame (snake); + } + + //we want to be called again in some milliseconds, if game is not over + return (snake->Speed); +} + +static void +b_snake_module_describe (BModule *module, + const gchar **title, + const gchar **description, + const gchar **author) +{ + *title = "BSnake"; + *description = "Snake game "BSnakeVerTxt; + *author = "1stein <1stein@schuermans.info>"; +} + diff --git a/blib-1.1.7/modules/btetris.c b/blib-1.1.7/modules/btetris.c new file mode 100644 index 0000000..cfb4d0d --- /dev/null +++ b/blib-1.1.7/modules/btetris.c @@ -0,0 +1,878 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2002 The Blinkenlights Crew + * Daniel Mack + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include +#include +#include + +#include +#include + +#include + + +#define START_SPEED 600 +#define ACC_ON_STUCK 4 +#define FLASH_SPEED 55 +#define FALL_SPEED 50 +#define BOTTOM_OFFSET 0 /* we used a value of 2 for Arcade/Paris */ + +/* #define TETRIS_DEBUG 1 */ + + +#define B_TYPE_TETRIS (b_type_tetris) +#define B_TETRIS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), B_TYPE_TETRIS, BTetris)) +#define B_TETRIS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), B_TYPE_TETRIS, BTetrisClass)) +#define B_IS_TETRIS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), B_TYPE_TETRIS)) + +typedef struct _BTetris BTetris; +typedef struct _BTetrisClass BTetrisClass; + +struct _BTetris +{ + BModule parent_instance; + + gint x, y; + gint rotation; + guchar *field; + gint field_size; + gint speed; + gint tile; + gboolean game_over; + + gboolean *completed; + gint n_completed; + + gboolean falling; + + gboolean flash_state; + + gint player_device_id; +}; + +struct _BTetrisClass +{ + BModuleClass parent_class; +}; + +static GType b_tetris_get_type (GTypeModule *module); + + +static void b_tetris_class_init (BTetrisClass *klass); +static void b_tetris_init (BTetris *tetris); + +static gboolean b_tetris_query (gint width, + gint height, + gint channels, + gint maxval); +static gboolean b_tetris_prepare (BModule *module, + GError **error); +static void b_tetris_relax (BModule *module); +static void b_tetris_start (BModule *module); +static void b_tetris_stop (BModule *module); +static void b_tetris_event (BModule *module, + BModuleEvent *event); +static gint b_tetris_tick (BModule *module); +static void b_tetris_describe (BModule *module, + const gchar **title, + const gchar **description, + const gchar **author); + + +static GType b_type_tetris = 0; + +typedef struct _TetrisTile +{ + gchar data[4][16]; + guchar color; +} TetrisTile; + +static TetrisTile tile[] = +{ + { + { + { 0, 0, 0, 0, + 1, 1, 1, 1, + 0, 0, 0, 0, + 0, 0, 0, 0 }, + { 0, 1, 0, 0, + 0, 1, 0, 0, + 0, 1, 0, 0, + 0, 1, 0, 0 }, + { 0, 0, 0, 0, + 1, 1, 1, 1, + 0, 0, 0, 0, + 0, 0, 0, 0 }, + { 0, 1, 0, 0, + 0, 1, 0, 0, + 0, 1, 0, 0, + 0, 1, 0, 0 }, + }, + 0x77 + }, + { + { + { 1, 1, 0, 0, + 1, 1, 0, 0, + 0, 0, 0, 0, + 0, 0, 0, 0 }, + { 1, 1, 0, 0, + 1, 1, 0, 0, + 0, 0, 0, 0, + 0, 0, 0, 0 }, + { 1, 1, 0, 0, + 1, 1, 0, 0, + 0, 0, 0, 0, + 0, 0, 0, 0 }, + { 1, 1, 0, 0, + 1, 1, 0, 0, + 0, 0, 0, 0, + 0, 0, 0, 0 }, + }, + 0x99 + }, + { + { + { 1, 0, 0, 0, + 1, 1, 1, 0, + 0, 0, 0, 0, + 0, 0, 0, 0 }, + { 1, 1, 0, 0, + 1, 0, 0, 0, + 1, 0, 0, 0, + 0, 0, 0, 0 }, + { 1, 1, 1, 0, + 0, 0, 1, 0, + 0, 0, 0, 0, + 0, 0, 0, 0 }, + { 0, 1, 0, 0, + 0, 1, 0, 0, + 1, 1, 0, 0, + 0, 0, 0, 0 }, + }, + 0xbb + }, + { + { + { 0, 0, 1, 0, + 1, 1, 1, 0, + 0, 0, 0, 0, + 0, 0, 0, 0 }, + { 1, 0, 0, 0, + 1, 0, 0, 0, + 1, 1, 0, 0, + 0, 0, 0, 0 }, + { 1, 1, 1, 0, + 1, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, 0, 0 }, + { 1, 1, 0, 0, + 0, 1, 0, 0, + 0, 1, 0, 0, + 0, 0, 0, 0 }, + }, + 0xbb + }, + { + { + { 1, 1, 1, 0, + 0, 1, 0, 0, + 0, 0, 0, 0, + 0, 0, 0, 0 }, + { 0, 1, 0, 0, + 1, 1, 0, 0, + 0, 1, 0, 0, + 0, 0, 0, 0 }, + { 0, 1, 0, 0, + 1, 1, 1, 0, + 0, 0, 0, 0, + 0, 0, 0, 0 }, + { 1, 0, 0, 0, + 1, 1, 0, 0, + 1, 0, 0, 0, + 0, 0, 0, 0 }, + }, + 0xdd + }, + { + { + { 0, 1, 1, 0, + 1, 1, 0, 0, + 0, 0, 0, 0, + 0, 0, 0, 0 }, + { 1, 0, 0, 0, + 1, 1, 0, 0, + 0, 1, 0, 0, + 0, 0, 0, 0 }, + { 0, 1, 1, 0, + 1, 1, 0, 0, + 0, 0, 0, 0, + 0, 0, 0, 0 }, + { 1, 0, 0, 0, + 1, 1, 0, 0, + 0, 1, 0, 0, + 0, 0, 0, 0 }, + }, + 0xff + }, + { + { + { 1, 1, 0, 0, + 0, 1, 1, 0, + 0, 0, 0, 0, + 0, 0, 0, 0 }, + { 0, 1, 0, 0, + 1, 1, 0, 0, + 1, 0, 0, 0, + 0, 0, 0, 0 }, + { 1, 1, 0, 0, + 0, 1, 1, 0, + 0, 0, 0, 0, + 0, 0, 0, 0 }, + { 0, 1, 0, 0, + 1, 1, 0, 0, + 1, 0, 0, 0, + 0, 0, 0, 0 }, + }, + 0xff + } +}; + +static void +b_tetris_blend_down (BModule *module) +{ + gint x, y, v; + guchar *pixel; + + for (y = 0; y < module->height; y++) + for (v = 255; v >= 0; v -= 0xf) + { + for (x = 0; x < module->width; x++) + { + pixel = module->buffer + (y * module->width + x); + if (*pixel > v) + *pixel = v; + } + + b_module_paint (module); + usleep (5000); + } +} + +static gint +b_tetris_new_tile (void) +{ + return random () % (sizeof (tile) / sizeof (tile[0])); +} + +static gint +b_tetris_tile_width (gint tile_n, + gint rotation) +{ + gint x, y, w = 0; + + for (x = 0; x < 4; x++) + for (y = 0; y < 4; y++) + if (tile[tile_n].data[rotation][y*4+x]) + w = x + 1; + + return w; +} + +static gint +b_tetris_tile_height (gint tile_n, + gint rotation) +{ + gint x, y, h = 0; + + for (y = 0; y < 4; y++) + for (x = 0; x < 4; x++) + if (tile[tile_n].data[rotation][y*4+x]) + h = y + 1; + + return h; +} + +static gint +b_tetris_tile_left_offset (gint tile_n, + gint rotation) +{ + gint o = 4, x, y; + + for (y = 0; y < 4; y++) + for (x = 3; x >= 0; x--) + if (tile[tile_n].data[rotation][y*4+x]) + if (o > x) + o = x; + + return o; +} + +static void +b_tetris_paint (BModule *module) +{ + BTetris *tetris; + gchar *tile_data; + gint x, y; + gint tile_width, tile_height; + + tetris = B_TETRIS (module); + + memcpy (module->buffer, tetris->field, tetris->field_size); + + tile_data = tile[tetris->tile].data[tetris->rotation]; + tile_width = b_tetris_tile_width (tetris->tile, tetris->rotation); + tile_height = b_tetris_tile_height (tetris->tile, tetris->rotation); + +#ifdef TETRIS_DEBUG + g_print ("b_tetris_paint: %d x %d\n", tile_width, tile_height); +#endif + + if (tetris->n_completed == 0) + { + for (x = 0; x < tile_width; x++) + for (y = 0; y < tile_height; y++) + { + if (tile_data[y * 4 + x]) + { + guchar *data = (module->buffer + + module->width * (tetris->y + y) + + (tetris->x + x) * 2); + + data[0] = tile[tetris->tile].color; + data[1] = tile[tetris->tile].color; + } + } + } + + b_module_paint (module); +} + +static void +b_tetris_rotate (BModule *module, + gboolean clockwise) +{ + BTetris *tetris = B_TETRIS (module); + guchar *tile_data; + gint x, y; + gint tile_width, tile_height, tile_leftoff; + gint rotation; + + rotation = tetris->rotation; + + if (clockwise) + rotation += 2; + + rotation++; + rotation %= 4; + + tile_data = tile[tetris->tile].data[rotation]; + tile_width = b_tetris_tile_width (tetris->tile, rotation); + tile_height = b_tetris_tile_height (tetris->tile, rotation); + tile_leftoff = b_tetris_tile_left_offset (tetris->tile, rotation); + + + if (tetris->y + tile_height > module->height - BOTTOM_OFFSET) + return; + + /* check if rotated tile collides with s.th. */ + for (y = 0; y < tile_height; y++) + { + for (x = 0; x < tile_width; x++) + if (tile_data[y * 4 + x] && + tetris->field[module->width * + (tetris->y + tile_height) + (tetris->x + x) * 2]) + return; + } + + while (tetris->x + tile_width > module->width/2) + tetris->x--; + + while (tetris->x - tile_leftoff + 1 < 0) + tetris->x++; + + tetris->rotation = rotation; + b_tetris_paint (module); +} + +static gboolean +b_tetris_down (BModule *module) +{ + BTetris *tetris = B_TETRIS (module); + guchar *tile_data; + gboolean stuck = FALSE; + gint x, y; + gint tile_width, tile_height; + + tile_data = tile[tetris->tile].data[tetris->rotation]; + tile_width = b_tetris_tile_width (tetris->tile, tetris->rotation); + tile_height = b_tetris_tile_height (tetris->tile, tetris->rotation); + + if (tetris->y >= module->height - tile_height - BOTTOM_OFFSET) + { + stuck = TRUE; + } + else + { + for (x = 0; x < tile_width; x++) + for (y = 0; y < tile_height; y++) + if (tile_data[y * 4 + x] && + tetris->field[module->width * (tetris->y + y + 1) + + (tetris->x + x) * 2] != 0) + { + stuck = TRUE; + break; + } + } + + if (stuck) + { + if (tetris->y < 3) + tetris->game_over = TRUE; + + if (tetris->speed > 100) + tetris->speed -= ACC_ON_STUCK; + + for (x = 0; x < tile_width; x++) + for (y = 0; y < tile_height; y++) + { + if (tile_data[y * 4 + x]) + { + guchar *data; + + data = (tetris->field + + module->width * (tetris->y + y) + + 2 * (tetris->x + x)); + + data[0] = tile[tetris->tile].color; + data[1] = tile[tetris->tile].color; + } + } + + + /* check for completed rows */ + for (y = module->height-BOTTOM_OFFSET-1; y > 0; y--) + { + tetris->completed[y] = TRUE; + for (x = 0; x < module->width; x++) + { + if (tetris->field[module->width * y + x] == 0) + tetris->completed[y] = FALSE; + } + if (tetris->completed[y]) + tetris->n_completed++; + } + + if (tetris->n_completed) + tetris->n_completed = 5; + + /* select new tile and start over */ + tetris->y = 0; + tetris->x = module->width / 4 - 1; + tetris->rotation = 0; + tetris->tile = b_tetris_new_tile (); + } + else + { + tetris->y++; + } + + b_tetris_paint (module); + + return stuck; +} + +static void +b_tetris_left (BModule *module) +{ + BTetris *tetris = B_TETRIS (module); + gint x, y; + gint tile_width, tile_height; + guchar *tile_data; + + tile_data = tile[tetris->tile].data[tetris->rotation]; + tile_width = b_tetris_tile_width (tetris->tile, tetris->rotation); + tile_height = b_tetris_tile_height (tetris->tile, tetris->rotation); + + if (tetris->x + + b_tetris_tile_left_offset (tetris->tile, tetris->rotation) <= 0) + return; + + for (x = 0; x < tile_width+1; x++) + for (y = 0; y < tile_height; y++) + if (tile_data[y * 4 + x] && + tetris->field[module->width * (tetris->y + y) + + (tetris->x + x) * 2 - 1] != 0) + return; + + tetris->x--; + b_tetris_paint (module); +} + +static void +b_tetris_right (BModule *module) +{ + BTetris *tetris = B_TETRIS (module); + gint x, y; + gint tile_width, tile_height; + guchar *tile_data; + + tile_data = tile[tetris->tile].data[tetris->rotation]; + tile_width = b_tetris_tile_width (tetris->tile, tetris->rotation); + tile_height = b_tetris_tile_height (tetris->tile, tetris->rotation); + + if (tetris->x * 2 >= (module->width - + b_tetris_tile_width (tetris->tile, + tetris->rotation) * 2 - 1)) + return; + + for (x = 0; x < tile_width+1; x++) + for (y = 0; y < tile_height; y++) + if (tile_data[y * 4 + x] && + tetris->field[module->width * (tetris->y + y) + + (tetris->x + x + 1) * 2] != 0) + return; + + tetris->x++; + b_tetris_paint (module); +} + +G_MODULE_EXPORT gboolean +b_module_register (GTypeModule *module) +{ + b_tetris_get_type (module); + return TRUE; +} + +GType +b_tetris_get_type (GTypeModule *module) +{ + if (!b_type_tetris) + { + static const GTypeInfo tetris_info = + { + sizeof (BTetrisClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc) b_tetris_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (BTetris), + 0, /* n_preallocs */ + (GInstanceInitFunc) b_tetris_init, + }; + + b_type_tetris = g_type_module_register_type (module, + B_TYPE_MODULE, "BTetris", + &tetris_info, 0); + } + + return b_type_tetris; +} + +static void +b_tetris_class_init (BTetrisClass *klass) +{ + BModuleClass *module_class; + + module_class = B_MODULE_CLASS (klass); + + module_class->max_players = 1; + + module_class->query = b_tetris_query; + module_class->prepare = b_tetris_prepare; + module_class->relax = b_tetris_relax; + module_class->start = b_tetris_start; + module_class->stop = b_tetris_stop; + module_class->event = b_tetris_event; + module_class->tick = b_tetris_tick; + module_class->describe = b_tetris_describe; +} + +static void +b_tetris_init (BTetris *tetris) +{ + tetris->x = 0; + tetris->y = 0; + tetris->rotation = 0; + tetris->speed = START_SPEED; + tetris->tile = -1; + tetris->completed = NULL; + tetris->n_completed = 0; + tetris->player_device_id = -1; +} + +static gboolean +b_tetris_query (gint width, + gint height, + gint channels, + gint maxval) +{ +#ifdef TETRIS_DEBUG + g_print ("b_tetris_query\n"); +#endif + + return (width > 8 && height > 6 && channels == 1 && maxval == 255); +} + +static gboolean +b_tetris_prepare (BModule *module, + GError **error) +{ + BTetris *tetris = B_TETRIS (module); + +#ifdef TETRIS_DEBUG + g_print ("b_tetris_prepare\n"); +#endif + + tetris->field_size = module->width * module->height; + tetris->field = g_new0 (guchar, tetris->field_size); + tetris->completed = g_new0 (gboolean, module->width); + + return TRUE; +} + +static void +b_tetris_relax (BModule *module) +{ + BTetris *tetris = B_TETRIS (module); + +#ifdef TETRIS_DEBUG + g_print ("b_tetris_relax\n"); +#endif + + if (tetris->field) + { + g_free (tetris->field); + tetris->field = NULL; + } + + if (tetris->completed) + { + g_free (tetris->completed); + tetris->completed = NULL; + } +} + +static void +b_tetris_start (BModule *module) +{ + BTetris *tetris; + +#ifdef TETRIS_DEBUG + g_print ("b_tetris_start\n"); +#endif + + tetris = B_TETRIS (module); + + tetris->x = module->width / 4 - 1; + tetris->y = 0; + tetris->rotation = 0; + tetris->tile = b_tetris_new_tile (); + tetris->game_over = FALSE; + tetris->speed = START_SPEED; + +#ifdef TETRIS_DEBUG + g_print (" tetris tile: %d\n", tetris->tile); +#endif + + memset (tetris->field, 0, tetris->field_size); + memset (tetris->completed, 0, module->width); + + tetris->flash_state = FALSE; + tetris->n_completed = 0; + tetris->falling = FALSE; + + b_module_fill (module, 0); + b_module_ticker_start (module, 1000); +} + +static void +b_tetris_stop (BModule *module) +{ + BTetris *tetris; + +#ifdef TETRIS_DEBUG + g_print ("b_tetris_stop\n"); +#endif + + tetris = B_TETRIS (module); + + b_module_fill (module, 0); + b_module_paint (module); +} + +static void +b_tetris_event (BModule *module, + BModuleEvent *event) +{ + BTetris *tetris; + +#ifdef TETRIS_DEBUG + g_print ("b_tetris_event\n"); +#endif + + tetris = B_TETRIS (module); + if (tetris->falling) + return; + + switch (event->type) + { + case B_EVENT_TYPE_KEY: + if (event->device_id == tetris->player_device_id) + { + switch (event->key) + { + case B_KEY_4: + b_tetris_left (module); + break; + case B_KEY_5: + b_tetris_rotate (module, TRUE); + break; + case B_KEY_6: + b_tetris_right (module); + break; + case B_KEY_7: + b_tetris_rotate (module, TRUE); + break; + case B_KEY_8: + if (!b_tetris_down (module)) + tetris->falling = TRUE; + break; + case B_KEY_9: + b_tetris_rotate (module, FALSE); + break; + default: + break; + } + } + break; + + case B_EVENT_TYPE_PLAYER_ENTERED: + if (tetris->player_device_id == -1) + { +#ifdef TETRIS_DEBUG + g_print ("BTetris: player %d entered.\n", event->device_id); +#endif + tetris->player_device_id = event->device_id; + module->num_players++; + } + break; + + case B_EVENT_TYPE_PLAYER_LEFT: + if (tetris->player_device_id == event->device_id) + { + tetris->player_device_id = -1; + module->num_players--; + } + break; + + default: + break; + } +} + +static gint +b_tetris_tick (BModule *module) +{ + BTetris *tetris; + gint y, delta = 0; + +#ifdef TETRIS_DEBUG + g_print ("b_tetris_tick\n"); +#endif + + tetris = B_TETRIS (module); + + if (tetris->game_over) + { + b_tetris_blend_down (module); + b_module_request_stop (module); + return 0; + } + + if (tetris->falling) + { + if (b_tetris_down (module)) + { + tetris->falling = FALSE; + } + else + return FALL_SPEED; + } + + if (tetris->n_completed > 0) + { + /* flash completed rows */ + if (tetris->flash_state) + { + memcpy (module->buffer, tetris->field, tetris->field_size); + b_module_paint (module); + } + else + { + for (y = 0; y < module->height; y++) + if (tetris->completed[y]) + memset (module->buffer + module->width * y, 0, module->width); + + b_module_paint (module); + + /* finally remove completed rows */ + if (--tetris->n_completed == 0) + { + for (y = module->height - BOTTOM_OFFSET - 1; y >= 0; y--) + if (tetris->completed[y - delta]) + { + memmove (tetris->field + module->width, + tetris->field, + module->width * (y)); + delta++; + y++; + } + + memcpy (module->buffer, tetris->field, tetris->field_size); + b_module_paint (module); + memset (tetris->completed, 0, sizeof(gboolean) * module->height); + + return tetris->speed; + } + } + + tetris->flash_state = !(tetris->flash_state); + + return FLASH_SPEED; + } + + if (b_tetris_down (module)) /* if stuck */ + return b_tetris_tick (module); + + return tetris->speed; +} + +static void +b_tetris_describe (BModule *module, + const gchar **title, + const gchar **description, + const gchar **author) +{ + *title = "BTetris"; + *description = "Tetris game"; + *author = "Daniel Mack"; +} diff --git a/blib-1.1.7/modules/btext.c b/blib-1.1.7/modules/btext.c new file mode 100644 index 0000000..722ee1b --- /dev/null +++ b/blib-1.1.7/modules/btext.c @@ -0,0 +1,840 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2001-2002 The Blinkenlights Crew + * Michael Natterer + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include +#include + +#include + +#include + + +#define TEXT_TIMEOUT 200 +#define BLINK_TIMEOUT 200 +#define SCROLL_TIMEOUT 100 +#define CHAR_WIDTH 3 +#define CHAR_HEIGHT 5 +#define CHAR_ADVANCE 4 +#define LINE_ADVANCE 6 +#define BLINK_STEPS 4 + + +typedef struct _BChar BChar; + +struct _BChar +{ + gchar character; + gchar width; + guchar matrix[CHAR_WIDTH * CHAR_HEIGHT]; +}; + +static const BChar unknown_char = +{ + 0, 3, + { 1, 1, 1, + 1, 1, 1, + 1, 1, 1, + 1, 1, 1, + 1, 1, 1 + } +}; + +static const BChar chars[] = +{ + { '0', 3, + { 1, 1, 1, + 1, 0, 1, + 1, 0, 1, + 1, 0, 1, + 1, 1, 1 + } + }, + { '1', 3, + { 1, 1, 0, + 0, 1, 0, + 0, 1, 0, + 0, 1, 0, + 0, 1, 0 + } + }, + { '2', 3, + { 0, 1, 1, + 1, 0, 1, + 0, 0, 1, + 0, 1, 0, + 1, 1, 1 + } + }, + { '3', 3, + { 1, 1, 1, + 0, 0, 1, + 1, 1, 1, + 0, 0, 1, + 1, 1, 1 + } + }, + { '4', 3, + { 1, 0, 1, + 1, 0, 1, + 1, 1, 1, + 0, 0, 1, + 0, 0, 1 + } + }, + { '5', 3, + { 1, 1, 1, + 1, 0, 0, + 1, 1, 1, + 0, 0, 1, + 1, 1, 0 + } + }, + { '6', 3, + { 1, 1, 1, + 1, 0, 0, + 1, 1, 1, + 1, 0, 1, + 1, 1, 1 + } + }, + { '7', 3, + { 1, 1, 1, + 0, 0, 1, + 0, 1, 0, + 1, 0, 0, + 1, 0, 0 + } + }, + { '8', 3, + { 1, 1, 1, + 1, 0, 1, + 1, 1, 1, + 1, 0, 1, + 1, 1, 1 + } + }, + { '9', 3, + { 1, 1, 1, + 1, 0, 1, + 1, 1, 1, + 0, 0, 1, + 1, 1, 1 + } + }, + + { ':', 1, + { 0, 0, 0, + 1, 0, 0, + 0, 0, 0, + 1, 0, 0, + 0, 0, 0 + } + }, + { '.', 1, + { 0, 0, 0, + 0, 0, 0, + 0, 0, 0, + 0, 0, 0, + 1, 0, 0 + } + }, + + { 'A', 3, + { 1, 1, 1, + 1, 0, 1, + 1, 1, 1, + 1, 0, 1, + 1, 0, 1 + } + }, + { 'B', 3, + { 1, 1, 0, + 1, 0, 1, + 1, 1, 0, + 1, 0, 1, + 1, 1, 0 + } + }, + { 'C', 3, + { 1, 1, 1, + 1, 0, 0, + 1, 0, 0, + 1, 0, 0, + 1, 1, 1 + } + }, + { 'D', 3, + { 1, 1, 0, + 1, 0, 1, + 1, 0, 1, + 1, 0, 1, + 1, 1, 0 + } + }, + { 'E', 3, + { 1, 1, 1, + 1, 0, 0, + 1, 1, 0, + 1, 0, 0, + 1, 1, 1 + } + }, + { 'F', 3, + { 1, 1, 1, + 1, 0, 0, + 1, 1, 0, + 1, 0, 0, + 1, 0, 0 + } + }, + { 'G', 3, + { 1, 1, 1, + 1, 0, 0, + 1, 0, 1, + 1, 0, 1, + 1, 1, 1 + } + }, + { 'H', 3, + { 1, 0, 1, + 1, 0, 1, + 1, 1, 1, + 1, 0, 1, + 1, 0, 1 + } + }, + { 'I', 1, + { 1, 0, 0, + 1, 0, 0, + 1, 0, 0, + 1, 0, 0, + 1, 0, 0 + } + }, + { 'J', 3, + { 0, 0, 1, + 0, 0, 1, + 0, 0, 1, + 1, 0, 1, + 0, 1, 0 + } + }, + { 'K', 3, + { 1, 0, 1, + 1, 0, 1, + 1, 1, 0, + 1, 0, 1, + 1, 0, 1 + } + }, + { 'L', 3, + { 1, 0, 0, + 1, 0, 0, + 1, 0, 0, + 1, 0, 0, + 1, 1, 1 + } + }, + { 'M', 3, + { 1, 0, 1, + 1, 1, 1, + 1, 0, 1, + 1, 0, 1, + 1, 0, 1 + } + }, + { 'N', 3, + { 1, 1, 1, + 1, 0, 1, + 1, 0, 1, + 1, 0, 1, + 1, 0, 1 + } + }, + { 'O', 3, + { 0, 1, 0, + 1, 0, 1, + 1, 0, 1, + 1, 0, 1, + 0, 1, 0 + } + }, + { 'P', 3, + { 1, 1, 0, + 1, 0, 1, + 1, 1, 0, + 1, 0, 0, + 1, 0, 0 + } + }, + { 'Q', 3, + { 0, 1, 0, + 1, 0, 1, + 1, 0, 1, + 1, 0, 1, + 0, 1, 1 + } + }, + { 'R', 3, + { 1, 1, 0, + 1, 0, 1, + 1, 1, 0, + 1, 0, 1, + 1, 0, 1 + } + }, + { 'S', 3, + { 1, 1, 1, + 1, 0, 0, + 1, 1, 1, + 0, 0, 1, + 1, 1, 1 + } + }, + { 'T', 3, + { 1, 1, 1, + 0, 1, 0, + 0, 1, 0, + 0, 1, 0, + 0, 1, 0 + } + }, + { 'U', 3, + { 1, 0, 1, + 1, 0, 1, + 1, 0, 1, + 1, 0, 1, + 1, 1, 1 + } + }, + { 'V', 3, + { 1, 0, 1, + 1, 0, 1, + 1, 0, 1, + 1, 0, 1, + 0, 1, 0 + } + }, + { 'W', 3, + { 1, 0, 1, + 1, 0, 1, + 1, 0, 1, + 1, 1, 1, + 1, 0, 1 + } + }, + { 'X', 3, + { 1, 0, 1, + 1, 0, 1, + 0, 1, 0, + 1, 0, 1, + 1, 0, 1 + } + }, + { 'Y', 3, + { 1, 0, 1, + 1, 0, 1, + 0, 1, 0, + 0, 1, 0, + 0, 1, 0 + } + }, + { 'Z', 3, + { 1, 1, 1, + 0, 0, 1, + 0, 1, 0, + 1, 0, 0, + 1, 1, 1 + } + }, +}; + +typedef enum +{ + SCROLL_UP, + CURSOR_BLINK, + FINISH +} AnimType; + + +enum +{ + PROP_0, + PROP_STRING +}; + + +#define B_TYPE_TEXT (b_type_text) +#define B_TEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), B_TYPE_TEXT, BText)) +#define B_TEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), B_TYPE_TEXT, BTextClass)) +#define B_IS_TEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), B_TYPE_TEXT)) +#define B_IS_TEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), B_TYPE_TEXT)) + +typedef struct _BText BText; +typedef struct _BTextClass BTextClass; + +struct _BText +{ + BModule parent_instance; + + gchar *string; + gchar *cursor_pos; + + gint cursor_x; + gint cursor_y; + + guchar bg_color; + guchar fg_color; + + gint player_device_id; + + gint timeout; + + AnimType anim; + gint anim_steps; + + gint cursor_size; + + GRand *rand; +}; + +struct _BTextClass +{ + BModuleClass parent_class; +}; + + +static GType b_text_get_type (GTypeModule *module); + +static void b_text_class_init (BTextClass *klass); +static void b_text_init (BText *text); + +static void b_text_finalize (GObject *object); +static void b_text_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec); +static gboolean b_text_query (gint width, + gint height, + gint channels, + gint maxval); +static gboolean b_text_prepare (BModule *module, + GError **error); +static void b_text_relax (BModule *module); +static void b_text_start (BModule *module); +static void b_text_stop (BModule *module); +static void b_text_event (BModule *module, + BModuleEvent *event); +static gint b_text_tick (BModule *module); +static void b_text_describe (BModule *module, + const gchar **title, + const gchar **description, + const gchar **author); + + +static BModuleClass * parent_class = NULL; +static GType b_type_text = 0; + + +G_MODULE_EXPORT gboolean +b_module_register (GTypeModule *module) +{ + b_text_get_type (module); + return TRUE; +} + +static GType +b_text_get_type (GTypeModule *module) +{ + if (! b_type_text) + { + static const GTypeInfo text_info = + { + sizeof (BTextClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc) b_text_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (BText), + 0, /* n_preallocs */ + (GInstanceInitFunc) b_text_init, + }; + + b_type_text = g_type_module_register_type (module, + B_TYPE_MODULE, "BText", + &text_info, 0); + } + + return b_type_text; +} + +static void +b_text_class_init (BTextClass *klass) +{ + GObjectClass *object_class; + BModuleClass *module_class; + GParamSpec *param_spec; + + object_class = G_OBJECT_CLASS (klass); + module_class = B_MODULE_CLASS (klass); + + parent_class = g_type_class_peek_parent (klass); + + object_class->finalize = b_text_finalize; + object_class->set_property = b_text_set_property; + + param_spec = g_param_spec_string ("string", NULL, + "The string to draw.", + "blinken\nbis die\nkotze\nkommt", + G_PARAM_CONSTRUCT | G_PARAM_WRITABLE); + g_object_class_install_property (object_class, PROP_STRING, param_spec); + + module_class->max_players = 1; + + module_class->query = b_text_query; + module_class->prepare = b_text_prepare; + module_class->relax = b_text_relax; + module_class->start = b_text_start; + module_class->stop = b_text_stop; + module_class->event = b_text_event; + module_class->tick = b_text_tick; + module_class->describe = b_text_describe; +} + +static void +b_text_init (BText *text) +{ + text->string = NULL; + + text->anim_steps = 0; + text->player_device_id = -1; + + text->rand = g_rand_new (); +} + +static void +b_text_finalize (GObject *object) +{ + BText *text; + + text = B_TEXT (object); + + if (text->string) + { + g_free (text->string); + text->string = NULL; + } + + if (text->rand) + { + g_rand_free (text->rand); + text->rand = NULL; + } + + G_OBJECT_CLASS (parent_class)->finalize (object); +} + +static void +b_text_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec) +{ + BText *text; + + text = B_TEXT (object); + + switch (property_id) + { + case PROP_STRING: + g_free (text->string); + text->string = g_value_dup_string (value); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static gboolean +b_text_query (gint width, + gint height, + gint channels, + gint maxval) +{ + return (width >= 5 * CHAR_ADVANCE && + height >= 2 * LINE_ADVANCE && + channels == 1); +} + +static gboolean +b_text_prepare (BModule *module, + GError **error) +{ + BText *text; + + text = B_TEXT (module); + + text->bg_color = 0; + text->fg_color = module->maxval; + + text->cursor_size = CHAR_WIDTH; + + return TRUE; +} + +static void +b_text_relax (BModule *module) +{ +} + +static void +b_text_start (BModule *module) +{ + BText *text = B_TEXT (module); + + text->cursor_pos = text->string; + + text->cursor_x = 0; + text->cursor_y = 0; + + text->anim = CURSOR_BLINK; + text->anim_steps = BLINK_STEPS; + + text->timeout = TEXT_TIMEOUT; + + b_module_fill (module, text->bg_color); + + b_module_ticker_start (module, text->timeout); +} + +static void +b_text_stop (BModule *module) +{ + BText *text; + + text = B_TEXT (module); + + text->player_device_id = -1; +} + +static void +b_text_event (BModule *module, + BModuleEvent *event) +{ + BText *text; + + text = B_TEXT (module); + + switch (event->type) + { + case B_EVENT_TYPE_KEY: + if (text->anim_steps) + return; + + switch (event->key) + { + default: + break; + } + break; + + case B_EVENT_TYPE_PLAYER_ENTERED: + if (text->player_device_id == -1) + { + text->player_device_id = event->device_id; + + module->num_players++; + } + break; + + case B_EVENT_TYPE_PLAYER_LEFT: + if (text->player_device_id == event->device_id) + { + text->player_device_id = -1; + + module->num_players--; + } + break; + + default: + break; + } +} + +static gint +b_text_tick (BModule *module) +{ + BText *text; + + text = B_TEXT (module); + + if (text->anim_steps > 0) + { + text->anim_steps--; + + switch (text->anim) + { + case SCROLL_UP: + memmove (module->buffer, + module->buffer + module->width * module->channels, + module->width * (module->height - 1) * module->channels); + b_module_draw_line (module, + 0, module->height - 1, + module->width - 1, module->height - 1, + text->bg_color); + text->timeout = SCROLL_TIMEOUT; + + if (text->anim_steps == 0) + { + text->anim = CURSOR_BLINK; + text->anim_steps = BLINK_STEPS; + } + break; + + case CURSOR_BLINK: + case FINISH: + b_module_draw_line (module, + text->cursor_x, + text->cursor_y + CHAR_HEIGHT - 1, + text->cursor_x + text->cursor_size - 1, + text->cursor_y + CHAR_HEIGHT - 1, + text->anim_steps % 2 ? + text->fg_color : text->bg_color); + + if (text->anim == FINISH && text->anim_steps == 0) + { + b_module_request_stop (module); + return 0; + } + + text->timeout = BLINK_TIMEOUT; + break; + } + } + else + { + text->timeout = TEXT_TIMEOUT; + + if (text->cursor_pos && *text->cursor_pos) + { + gint advance = CHAR_WIDTH; + + b_module_draw_line (module, + text->cursor_x, + text->cursor_y + CHAR_HEIGHT - 1, + text->cursor_x + text->cursor_size - 1, + text->cursor_y + CHAR_HEIGHT - 1, + text->bg_color); + + if (! g_ascii_isspace (*text->cursor_pos)) + { + const BChar *bchar = &unknown_char; + gint i, x, y; + + for (i = 0; i < G_N_ELEMENTS (chars); i++) + { + if (chars[i].character == g_ascii_toupper (*text->cursor_pos)) + bchar = &chars[i]; + } + + for (x = 0; x < CHAR_WIDTH; x++) + for (y = 0; y < CHAR_HEIGHT; y++) + { + if (bchar->matrix[y * CHAR_WIDTH + x]) + b_module_draw_point (module, + text->cursor_x + x, + text->cursor_y + y, + text->fg_color); + else + b_module_draw_point (module, + text->cursor_x + x, + text->cursor_y + y, + text->bg_color); + } + + advance = bchar->width + 1; + } + + text->cursor_x += advance; + + if (*text->cursor_pos == '\n' || + (text->cursor_x + CHAR_WIDTH > module->width)) + { + text->cursor_pos++; + + /* no whitespace at the start of a line */ + if (g_ascii_isspace (*text->cursor_pos) && + (*text->cursor_pos != '\n' || + (text->cursor_x + CHAR_WIDTH > module->width))) + text->cursor_pos++; + + text->cursor_x = 0; + text->cursor_y += LINE_ADVANCE; + + text->anim = CURSOR_BLINK; + text->anim_steps = BLINK_STEPS; + } + else + { + text->cursor_pos++; + + if (g_rand_double (text->rand) > 0.5) + b_module_draw_line (module, + text->cursor_x, + text->cursor_y + CHAR_HEIGHT - 1, + text->cursor_x + text->cursor_size - 1, + text->cursor_y + CHAR_HEIGHT - 1, + text->fg_color); + } + + if (text->cursor_y + CHAR_HEIGHT > module->height) + { + text->cursor_y -= LINE_ADVANCE; + + text->anim = SCROLL_UP; + text->anim_steps = LINE_ADVANCE; + } + } + else + { + text->anim = FINISH; + text->anim_steps = BLINK_STEPS * 4; + text->timeout = BLINK_TIMEOUT; + } + } + + b_module_paint (module); + + return text->timeout; +} + +static void +b_text_describe (BModule *module, + const gchar **title, + const gchar **description, + const gchar **author) +{ + *title = "BText"; + *description = "Text display"; + *author = "Michael Natterer"; +} diff --git a/blib-1.1.7/modules/bxxo.c b/blib-1.1.7/modules/bxxo.c new file mode 100644 index 0000000..44d3dbd --- /dev/null +++ b/blib-1.1.7/modules/bxxo.c @@ -0,0 +1,957 @@ +/* Bxxo: tic-tac-toe module for Blinkenlights + * + * Copyright (c) 2003 1stein <1stein@schuermans.info> + * + * based on Test implementation for a BModule by the Blinkenlights Crew + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include +#include + +#include +#include + +#include + +#define BxxoVerMaj 1 +#define BxxoVerMin 0 +#define BxxoVerRev 0 + +//minimum size and color count of display +#define BxxoSizeXMin 12 +#define BxxoSizeYMin 8 +#define BxxoMaxColorMin 1 +//time player has to chose next field (in seconds) +#define BxxoChoseTime 9 +//time to blink winning line (in seconds) +#define BxxoWinTime 3 +//the colors +#define BxxoColorEmpty( MaxColor ) (0) +#define BxxoColorField( MaxColor ) ((MaxColor) * 3 / 5) +#define BxxoColorMark( MaxColor ) (MaxColor) +#define BxxoColorNumber( MaxColor ) (MaxColor) + +#ifdef XXO_DEBUG +#define dbg_print g_print +#else +#define dbg_print(fmt, ...) +#endif + +#define B_TYPE_XXO_MODULE (b_type_xxo_module) +#define B_XXO_MODULE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), B_TYPE_XXO_MODULE, BxxoModule)) +#define B_XXO_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), B_TYPE_XXO_MODULE, BxxoModuleClass)) +#define B_IS_XXO_MODULE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), B_TYPE_XXO_MODULE)) + +typedef struct _BxxoModule BxxoModule; +typedef struct _BxxoModuleClass BxxoModuleClass; + +struct _BxxoModule +{ + BModule parent_instance; + + int MaxColor; //maximum color value + int SizeX, SizeY; //size of game-field + int MarkX, MarkY; //size of a mark + int PlayerAvail[2]; //boolean flags if players are available + int PlayerId[2]; //id of player + int Field[3][3]; //game field: Field[Y][X], -1 = free, 0 = first player, 1 = second player + int Player; //number of player who has to chose a field next + int ChoseTime; //time to chose (seconds) + int Ticks; //tick counter (0.1 seconds) + int GameOver; //boolean value set if game over + int WinX, WinY, WinDX, WinDY; //variables indicating winning line + int WinTime; //time to let winning line blink (seconds) +}; + +struct _BxxoModuleClass +{ + BModuleClass parent_class; +}; + +static GType b_xxo_module_get_type (GTypeModule *module); +static void b_xxo_module_class_init (BxxoModuleClass *klass); +static void b_xxo_module_init (BxxoModule *test_module); +static gboolean b_xxo_module_query (gint width, + gint height, + gint channels, + gint maxval); +static gboolean b_xxo_module_prepare (BModule *module, + GError **error); +static void b_xxo_module_relax (BModule *module); +static void b_xxo_module_start (BModule *module); +static void b_xxo_module_event (BModule *module, + BModuleEvent *event); +static gint b_xxo_module_tick (BModule *module); +static void b_xxo_module_describe (BModule *module, + const gchar **title, + const gchar **description, + const gchar **author); + + +static GType b_type_xxo_module = 0; + +//output a player mark +static void BxxoOutMark (BxxoModule * pBxxoModule, + int StartX, int StartY, + int SizeX, int SizeY, + int Player) +{ + int X, Y, Con, Coff; + Con = BxxoColorMark (pBxxoModule->MaxColor); + Coff = BxxoColorEmpty (pBxxoModule->MaxColor); + for( Y = 0; Y < SizeY; Y++ ) + for( X = 0; X < SizeX; X++ ) + if( Player == 0 || (Player == 1 && ((X + Y) & 1) == 0) ) + b_module_draw_point ((BModule*)pBxxoModule, StartX + X, StartY + Y, + Con); + else + b_module_draw_point ((BModule*)pBxxoModule, StartX + X, StartY + Y, + Coff); +} + + +//output a number (0..9) (3x5 pixels) +const char BxxoNumbers[11][5][3] = +{ + { + {1,1,1}, + {1,0,1}, + {1,0,1}, + {1,0,1}, + {1,1,1} + }, + { + {0,0,1}, + {0,0,1}, + {0,0,1}, + {0,0,1}, + {0,0,1} + }, + { + {1,1,1}, + {0,0,1}, + {1,1,1}, + {1,0,0}, + {1,1,1} + }, + { + {1,1,1}, + {0,0,1}, + {1,1,1}, + {0,0,1}, + {1,1,1} + }, + { + {1,0,1}, + {1,0,1}, + {1,1,1}, + {0,0,1}, + {0,0,1} + }, + { + {1,1,1}, + {1,0,0}, + {1,1,1}, + {0,0,1}, + {1,1,1} + }, + { + {1,1,1}, + {1,0,0}, + {1,1,1}, + {1,0,1}, + {1,1,1} + }, + { + {1,1,1}, + {0,0,1}, + {0,0,1}, + {0,0,1}, + {0,0,1} + }, + { + {1,1,1}, + {1,0,1}, + {1,1,1}, + {1,0,1}, + {1,1,1} + }, + { + {1,1,1}, + {1,0,1}, + {1,1,1}, + {0,0,1}, + {1,1,1} + }, + { + {0,0,0}, + {0,0,0}, + {0,0,0}, + {0,0,0}, + {0,0,0} + } +}; +static void BxxoOutNumber (BxxoModule * pBxxoModule, + int X, int Y, + int N) +{ + int Con, Coff, XX, YY; + Con = BxxoColorNumber (pBxxoModule->MaxColor); + Coff = BxxoColorEmpty (pBxxoModule->MaxColor); + if (N > 9) N %= 10; + if (N < 0) N = 10; + for (YY = 0; YY < 5; YY++) + for (XX = 0; XX < 3; XX++) + b_module_draw_point ((BModule*)pBxxoModule, X + XX, Y + YY, + BxxoNumbers[N][YY][XX] ? Con : Coff ); +} + +//check if current player has won +static int BxxoWinCheck( BxxoModule * pBxxoModule ) +{ + int X, Y, Cnt; + //horizontal + for( Y = 0; Y < 3; Y++ ) + { + for( X = 0; X < 3; X++ ) + if( pBxxoModule->Field[Y][X] != pBxxoModule->Player ) + break; + if( X >= 3 ) + { + pBxxoModule->WinX = 0; + pBxxoModule->WinY = Y; + pBxxoModule->WinDX = 1; + pBxxoModule->WinDY = 0; + return 1; + } + } + //vertical + for( X = 0; X < 3; X++ ) + { + for( Y = 0; Y < 3; Y++ ) + if( pBxxoModule->Field[Y][X] != pBxxoModule->Player ) + break; + if( Y >= 3 ) + { + pBxxoModule->WinX = X; + pBxxoModule->WinY = 0; + pBxxoModule->WinDX = 0; + pBxxoModule->WinDY = 1; + return 1; + } + } + //diagonal + for( Y = 0, X = 0; Y < 3; Y++, X++ ) + if( pBxxoModule->Field[Y][X] != pBxxoModule->Player ) + break; + if( Y >= 3 ) + { + pBxxoModule->WinX = 0; + pBxxoModule->WinY = 0; + pBxxoModule->WinDX = 1; + pBxxoModule->WinDY = 1; + return 1; + } + //reverse diagonal + for( Y = 0, X = 2; Y < 3; Y++, X-- ) + if( pBxxoModule->Field[Y][X] != pBxxoModule->Player ) + break; + if( Y >= 3 ) + { + pBxxoModule->WinX = 2; + pBxxoModule->WinY = 0; + pBxxoModule->WinDX = -1; + pBxxoModule->WinDY = 1; + return 1; + } + //no more free fields + Cnt = 0; + for( Y = 0; Y < 3; Y++ ) + for( X = 0; X < 3; X++ ) + if( pBxxoModule->Field[Y][X] == -1 ) + Cnt++; + if( Cnt == 0 ) + { + pBxxoModule->WinX = -1; + pBxxoModule->WinY = -1; + pBxxoModule->WinDX = 0; + pBxxoModule->WinDY = 0; + return 1; + } + return 0; +} + +//chose a field for current player +static void BxxoModuleChose( BxxoModule * pBxxoModule, int * pX, int * pY ) +{ + int X, Y, Cnt, I; + + //try to win + + //horizontal + for( Y = 0; Y < 3; Y++ ) + { + if( pBxxoModule->Field[Y][0] == pBxxoModule->Player + && pBxxoModule->Field[Y][1] == pBxxoModule->Player + && pBxxoModule->Field[Y][2] == -1 ) + { + *pX = 2; + *pY = Y; + return; + } + if( pBxxoModule->Field[Y][0] == pBxxoModule->Player + && pBxxoModule->Field[Y][1] == -1 + && pBxxoModule->Field[Y][2] == pBxxoModule->Player ) + { + *pX = 1; + *pY = Y; + return; + } + if( pBxxoModule->Field[Y][0] == -1 + && pBxxoModule->Field[Y][1] == pBxxoModule->Player + && pBxxoModule->Field[Y][2] == pBxxoModule->Player ) + { + *pX = 0; + *pY = Y; + return; + } + } + //vertical + for( X = 0; X < 3; X++ ) + { + if( pBxxoModule->Field[0][X] == pBxxoModule->Player + && pBxxoModule->Field[1][X] == pBxxoModule->Player + && pBxxoModule->Field[2][X] == -1 ) + { + *pX = X; + *pY = 2; + return; + } + if( pBxxoModule->Field[0][X] == pBxxoModule->Player + && pBxxoModule->Field[1][X] == -1 + && pBxxoModule->Field[2][X] == pBxxoModule->Player ) + { + *pX = X; + *pY = 1; + return; + } + if( pBxxoModule->Field[0][X] == -1 + && pBxxoModule->Field[1][X] == pBxxoModule->Player + && pBxxoModule->Field[2][X] == pBxxoModule->Player ) + { + *pX = X; + *pY = 0; + return; + } + } + //diagonal + if( pBxxoModule->Field[0][0] == pBxxoModule->Player + && pBxxoModule->Field[1][1] == pBxxoModule->Player + && pBxxoModule->Field[2][2] == -1 ) + { + *pX = 2; + *pY = 2; + return; + } + if( pBxxoModule->Field[0][0] == pBxxoModule->Player + && pBxxoModule->Field[1][1] == -1 + && pBxxoModule->Field[2][2] == pBxxoModule->Player ) + { + *pX = 1; + *pY = 1; + return; + } + if( pBxxoModule->Field[0][0] == -1 + && pBxxoModule->Field[1][1] == pBxxoModule->Player + && pBxxoModule->Field[2][2] == pBxxoModule->Player ) + { + *pX = 0; + *pY = 0; + return; + } + //reverse diagonal + if( pBxxoModule->Field[0][2] == pBxxoModule->Player + && pBxxoModule->Field[1][1] == pBxxoModule->Player + && pBxxoModule->Field[2][0] == -1 ) + { + *pX = 0; + *pY = 2; + return; + } + if( pBxxoModule->Field[0][2] == pBxxoModule->Player + && pBxxoModule->Field[1][1] == -1 + && pBxxoModule->Field[2][0] == pBxxoModule->Player ) + { + *pX = 1; + *pY = 1; + return; + } + if( pBxxoModule->Field[0][2] == -1 + && pBxxoModule->Field[1][1] == pBxxoModule->Player + && pBxxoModule->Field[2][0] == pBxxoModule->Player ) + { + *pX = 2; + *pY = 0; + return; + } + + //no direct chance to win + + //try to block other player + + //horizontal + for( Y = 0; Y < 3; Y++ ) + { + if( pBxxoModule->Field[Y][0] == 1 - pBxxoModule->Player + && pBxxoModule->Field[Y][1] == 1 - pBxxoModule->Player + && pBxxoModule->Field[Y][2] == -1 ) + { + *pX = 2; + *pY = Y; + return; + } + if( pBxxoModule->Field[Y][0] == 1 - pBxxoModule->Player + && pBxxoModule->Field[Y][1] == -1 + && pBxxoModule->Field[Y][2] == 1 - pBxxoModule->Player ) + { + *pX = 1; + *pY = Y; + return; + } + if( pBxxoModule->Field[Y][0] == -1 + && pBxxoModule->Field[Y][1] == 1 - pBxxoModule->Player + && pBxxoModule->Field[Y][2] == 1 - pBxxoModule->Player ) + { + *pX = 0; + *pY = Y; + return; + } + } + //vertical + for( X = 0; X < 3; X++ ) + { + if( pBxxoModule->Field[0][X] == 1 - pBxxoModule->Player + && pBxxoModule->Field[1][X] == 1 - pBxxoModule->Player + && pBxxoModule->Field[2][X] == -1 ) + { + *pX = X; + *pY = 2; + return; + } + if( pBxxoModule->Field[0][X] == 1 - pBxxoModule->Player + && pBxxoModule->Field[1][X] == -1 + && pBxxoModule->Field[2][X] == 1 - pBxxoModule->Player ) + { + *pX = X; + *pY = 1; + return; + } + if( pBxxoModule->Field[0][X] == -1 + && pBxxoModule->Field[1][X] == 1 - pBxxoModule->Player + && pBxxoModule->Field[2][X] == 1 - pBxxoModule->Player ) + { + *pX = X; + *pY = 0; + return; + } + } + //diagonal + if( pBxxoModule->Field[0][0] == 1 - pBxxoModule->Player + && pBxxoModule->Field[1][1] == 1 - pBxxoModule->Player + && pBxxoModule->Field[2][2] == -1 ) + { + *pX = 2; + *pY = 2; + return; + } + if( pBxxoModule->Field[0][0] == 1 - pBxxoModule->Player + && pBxxoModule->Field[1][1] == -1 + && pBxxoModule->Field[2][2] == 1 - pBxxoModule->Player ) + { + *pX = 1; + *pY = 1; + return; + } + if( pBxxoModule->Field[0][0] == -1 + && pBxxoModule->Field[1][1] == 1 - pBxxoModule->Player + && pBxxoModule->Field[2][2] == 1 - pBxxoModule->Player ) + { + *pX = 0; + *pY = 0; + return; + } + //reverse diagonal + if( pBxxoModule->Field[0][2] == 1 - pBxxoModule->Player + && pBxxoModule->Field[1][1] == 1 - pBxxoModule->Player + && pBxxoModule->Field[2][0] == -1 ) + { + *pX = 0; + *pY = 2; + return; + } + if( pBxxoModule->Field[0][2] == 1 - pBxxoModule->Player + && pBxxoModule->Field[1][1] == -1 + && pBxxoModule->Field[2][0] == 1 - pBxxoModule->Player ) + { + *pX = 1; + *pY = 1; + return; + } + if( pBxxoModule->Field[0][2] == -1 + && pBxxoModule->Field[1][1] == 1 - pBxxoModule->Player + && pBxxoModule->Field[2][0] == 1 - pBxxoModule->Player ) + { + *pX = 2; + *pY = 0; + return; + } + + //no need to block other player + + //count free fields + Cnt = 0; + for( Y = 0; Y < 3; Y++ ) + for( X = 0; X < 3; X++ ) + if( pBxxoModule->Field[Y][X] == -1 ) + Cnt++; + //there is a free field + if( Cnt > 0 ) + { + //select a random one + I = rand( ) % Cnt; + //return the I-th free field + for( Y = 0; Y < 3; Y++ ) + for( X = 0; X < 3; X++ ) + if( pBxxoModule->Field[Y][X] == -1 ) + { + if( I == 0 ) + { + *pX = X; + *pY = Y; + return; + } + I--; + } + } + + //reaching this line should not occur + + //choose the middle field to be on the safe side and return indices within the field + *pX = 1; + *pY = 1; +} + +G_MODULE_EXPORT gboolean +b_module_register (GTypeModule * module) +{ + b_xxo_module_get_type (module); + + return TRUE; +} + +GType +b_xxo_module_get_type (GTypeModule * module) +{ + if (!b_type_xxo_module) + { + static const GTypeInfo xxo_module_info = { + sizeof (BxxoModuleClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc) b_xxo_module_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (BxxoModule), + 0, /* n_preallocs */ + (GInstanceInitFunc) b_xxo_module_init, + }; + + /* !!!!!!!!! The name given in the next function MUST be unique! */ + + b_type_xxo_module = g_type_module_register_type (module, + B_TYPE_MODULE, + "Bxxo", + &xxo_module_info, + 0); + } + + return b_type_xxo_module; +} + +static void +b_xxo_module_class_init (BxxoModuleClass *klass) +{ + BModuleClass *module_class; + + module_class = B_MODULE_CLASS (klass); + + module_class->query = b_xxo_module_query; + module_class->prepare = b_xxo_module_prepare; + module_class->relax = b_xxo_module_relax; + module_class->start = b_xxo_module_start; + module_class->event = b_xxo_module_event; + module_class->tick = b_xxo_module_tick; + module_class->describe = b_xxo_module_describe; +} + +static void +b_xxo_module_init (BxxoModule *pBxxoModule) +{ +} + +static gboolean +b_xxo_module_query (gint width, + gint height, + gint channels, + gint maxval) +{ + return (width >= BxxoSizeXMin && height >= BxxoSizeYMin + && channels == 1 && maxval >= BxxoMaxColorMin); +} + +static gboolean +b_xxo_module_prepare (BModule *module, + GError **error) +{ + BxxoModule *pBxxoModule = B_XXO_MODULE (module); + + //initialize the module values that depend on the output device + pBxxoModule->MaxColor = module->maxval; //maximum color value + pBxxoModule->SizeX = module->width; //size of game field + pBxxoModule->SizeY = module->height; + pBxxoModule->MarkX = (pBxxoModule->SizeX - 6) / 3; //size of a mark + pBxxoModule->MarkY = (pBxxoModule->SizeY - 2) / 3; + + return TRUE; +} + +static void +b_xxo_module_relax (BModule *module) +{ +} + +static void +b_xxo_module_start (BModule *module) +{ + BxxoModule *pBxxoModule = B_XXO_MODULE (module); + int X, Y; + + //no player available yet + pBxxoModule->PlayerAvail[0] = 0; + pBxxoModule->PlayerAvail[1] = 0; + //game field is empty + for( Y = 0; Y < 3; Y++ ) + for( X = 0; X < 3; X++ ) + pBxxoModule->Field[Y][X] = -1; + //player 1 starts + pBxxoModule->Player = 0; + pBxxoModule->ChoseTime = BxxoChoseTime; + //no ticks in current second yet + pBxxoModule->Ticks = 0; + //game not over + pBxxoModule->GameOver = 0; + + //initialize screen + b_module_fill ((BModule *) pBxxoModule, //empty the screen + BxxoColorEmpty (pBxxoModule->MaxColor)); + b_module_draw_line ((BModule *) pBxxoModule, //draw the field + pBxxoModule->MarkX, 0, + pBxxoModule->MarkX, pBxxoModule->SizeY - 1, + BxxoColorField (pBxxoModule->MaxColor)); + b_module_draw_line ((BModule *) pBxxoModule, + pBxxoModule->MarkX * 2 + 1, 0, + pBxxoModule->MarkX * 2 + 1, pBxxoModule->SizeY - 1, + BxxoColorField (pBxxoModule->MaxColor)); + b_module_draw_line ((BModule *) pBxxoModule, + 0, pBxxoModule->MarkY, + pBxxoModule->SizeX - 5, pBxxoModule->MarkY, + BxxoColorField (pBxxoModule->MaxColor)); + b_module_draw_line ((BModule *) pBxxoModule, + 0, pBxxoModule->MarkY * 2 + 1, + pBxxoModule->SizeX - 5, pBxxoModule->MarkY * 2 + 1, + BxxoColorField (pBxxoModule->MaxColor)); + BxxoOutNumber( pBxxoModule, pBxxoModule->SizeX - 3, pBxxoModule->SizeY - 5, + pBxxoModule->ChoseTime); + b_module_paint ((BModule *) pBxxoModule); //put image onto screen + + //start the tick machinery + b_module_ticker_start (module, 100); +} + +static void +b_xxo_module_event (BModule *module, + BModuleEvent *event) +{ + int I, X, Y; + + BxxoModule *pBxxoModule = B_XXO_MODULE (module); + + //ignore events if game over + if (pBxxoModule->GameOver) + return; + + //player entered + if (event->type == B_EVENT_TYPE_PLAYER_ENTERED) + { + //search for player not available + for (I = 0; I < 2; I++) + if (!pBxxoModule->PlayerAvail[I]) + break; + //found player + if( I < 2 ) + { + //player joins + pBxxoModule->PlayerAvail[I] = 1; + pBxxoModule->PlayerId[I] = event->device_id; + dbg_print ("Bxxo: player %d (dev_id %d) joined\n", I, event->device_id); + //show player indicator + if (I == pBxxoModule->Player) + { + BxxoOutMark (pBxxoModule, pBxxoModule->SizeX - 3, 0, 3, pBxxoModule->MarkY, I); + b_module_paint ((BModule *) pBxxoModule); //put image onto screen + } + } + } + + //player left + else if (event->type == B_EVENT_TYPE_PLAYER_LEFT) + { + //search for player with device-id + for (I = 0; I < 2; I++) + if (pBxxoModule->PlayerAvail[I] && pBxxoModule->PlayerId[I] == event->device_id) + break; + //found player + if (I < 2) + { + //player leaves + pBxxoModule->PlayerAvail[I] = 0; + dbg_print ("Bxxo: player %d (dev_id %d) left\n", I, event->device_id); + //remove player indicator + if (I == pBxxoModule->Player) + { + BxxoOutMark (pBxxoModule, pBxxoModule->SizeX - 3, 0, 3, pBxxoModule->MarkY, -1); + b_module_paint ((BModule *) pBxxoModule); //put image onto screen + } + } + } + + //key-event + else if (event->type == B_EVENT_TYPE_KEY) + { + //search for player with device-id + for (I = 0; I < 2; I++) + if (pBxxoModule->PlayerAvail[I] && pBxxoModule->PlayerId[I] == event->device_id) + break; + //found player + if (I < 2) + { + //get position from key + switch (event->key) + { + case B_KEY_1: X = 0; Y = 0; break; + case B_KEY_2: X = 1; Y = 0; break; + case B_KEY_3: X = 2; Y = 0; break; + case B_KEY_4: X = 0; Y = 1; break; + case B_KEY_5: X = 1; Y = 1; break; + case B_KEY_6: X = 2; Y = 1; break; + case B_KEY_7: X = 0; Y = 2; break; + case B_KEY_8: X = 1; Y = 2; break; + case B_KEY_9: X = 2; Y = 2; break; + default: X = -1; Y = -1; + } + //a valid key was pressed by the active player + if (X >= 0 && Y >= 0 && I == pBxxoModule->Player) + { + //check if position is still free + if (pBxxoModule->Field[Y][X] < 0) + { + dbg_print ("Bxxo: player %d (dev_id %d) chose field (%d,%d)\n", I, event->device_id, X, Y ); + //place mark + pBxxoModule->Field[Y][X] = I; + BxxoOutMark (pBxxoModule, + (pBxxoModule->MarkX + 1) * X, (pBxxoModule->MarkY + 1) * Y, + pBxxoModule->MarkX, pBxxoModule->MarkY, I); + //player has won + if( BxxoWinCheck( pBxxoModule ) ) + { + //game is over + pBxxoModule->GameOver = 1; + //start win time + pBxxoModule->ChoseTime = -1; + pBxxoModule->WinTime = BxxoWinTime; + //no ticks in current second yet + pBxxoModule->Ticks = 0; + } + //player has not won + else + { + //switch to other player + pBxxoModule->Player = 1 - pBxxoModule->Player; + pBxxoModule->ChoseTime = BxxoChoseTime; + //no ticks in current second yet + pBxxoModule->Ticks = 0; + } + + //update player indicator + if (pBxxoModule->PlayerAvail[pBxxoModule->Player]) + BxxoOutMark (pBxxoModule, pBxxoModule->SizeX - 3, 0, 3, pBxxoModule->MarkY, + pBxxoModule->Player); + else + BxxoOutMark (pBxxoModule, pBxxoModule->SizeX - 3, 0, 3, pBxxoModule->MarkY, + -1); + //show choose time + BxxoOutNumber( pBxxoModule, pBxxoModule->SizeX - 3, pBxxoModule->SizeY - 5, + pBxxoModule->ChoseTime); + //put image onto screen + b_module_paint ((BModule *) pBxxoModule); + } + } + } + } +} + +static gint +b_xxo_module_tick (BModule *module) +{ + BxxoModule *pBxxoModule = B_XXO_MODULE (module); + int X, Y, I; + + //game over - blink with winning line + if (pBxxoModule->GameOver && pBxxoModule->WinX >= 0 && pBxxoModule->WinY >= 0) + { + //off + if (pBxxoModule->Ticks == 0) + { + for( I = 0, X = pBxxoModule->WinX, Y = pBxxoModule->WinY; I < 3; I++, X += pBxxoModule->WinDX, Y += pBxxoModule->WinDY ) + BxxoOutMark (pBxxoModule, + (pBxxoModule->MarkX + 1) * X, (pBxxoModule->MarkY + 1) * Y, + pBxxoModule->MarkX, pBxxoModule->MarkY, + -1); + b_module_paint ((BModule *) pBxxoModule); + } + //on + if (pBxxoModule->Ticks == 5) + { + for( I = 0, X = pBxxoModule->WinX, Y = pBxxoModule->WinY; I < 3; I++, X += pBxxoModule->WinDX, Y += pBxxoModule->WinDY ) + BxxoOutMark (pBxxoModule, + (pBxxoModule->MarkX + 1) * X, (pBxxoModule->MarkY + 1) * Y, + pBxxoModule->MarkX, pBxxoModule->MarkY, + pBxxoModule->Player); + b_module_paint ((BModule *) pBxxoModule); + } + } //if (pBxxModule->GameOver ... + + //count ticks + pBxxoModule->Ticks++; + + //one second elapsed + if (pBxxoModule->Ticks >= 10) + { + pBxxoModule->Ticks = 0; + + //game over + if (pBxxoModule->GameOver) + { + //decrease win time + pBxxoModule->WinTime--; + + //win time reached zero + if (pBxxoModule->WinTime <= 0) + { + dbg_print ("Bxxo: requesting stop\n"); + //clear screen + b_module_fill (module, 0); + b_module_paint (module); + //request end of game + b_module_request_stop (module); + //we do not want to be called again + return 0; + } + } //game over + + //game not over + else + { + //decrease choose time + pBxxoModule->ChoseTime--; + + //choose time reached zero + if (pBxxoModule->ChoseTime <= 0) + { + //find position to place mark + BxxoModuleChose( pBxxoModule, &X, &Y ); + dbg_print ("Bxxo: computer chose field (%d,%d) for player %d\n", X, Y, pBxxoModule->Player ); + //place mark + pBxxoModule->Field[Y][X] = pBxxoModule->Player; + BxxoOutMark (pBxxoModule, + (pBxxoModule->MarkX + 1) * X, (pBxxoModule->MarkY + 1) * Y, + pBxxoModule->MarkX, pBxxoModule->MarkY, pBxxoModule->Player); + //player has won + if( BxxoWinCheck( pBxxoModule ) ) + { + //game is over + pBxxoModule->GameOver = 1; + //start win time + pBxxoModule->ChoseTime = -1; + pBxxoModule->WinTime = BxxoWinTime; + //no ticks in current second yet + pBxxoModule->Ticks = 0; + } + //player has not won + else + { + //switch to other player + pBxxoModule->Player = 1 - pBxxoModule->Player; + pBxxoModule->ChoseTime = BxxoChoseTime; + //no ticks in current second yet + pBxxoModule->Ticks = 0; + } + + //update player indicator + if (pBxxoModule->PlayerAvail[pBxxoModule->Player]) + BxxoOutMark (pBxxoModule, pBxxoModule->SizeX - 3, 0, 3, pBxxoModule->MarkY, + pBxxoModule->Player); + else + BxxoOutMark (pBxxoModule, pBxxoModule->SizeX - 3, 0, 3, pBxxoModule->MarkY, + -1); + } + + //show choose time + BxxoOutNumber( pBxxoModule, pBxxoModule->SizeX - 3, pBxxoModule->SizeY - 5, + pBxxoModule->ChoseTime); + //put image onto screen + b_module_paint ((BModule *) pBxxoModule); + } //game not over + } //one second elapsed + + //we want to be called again in 100 milliseconds + return 100; +} + +static void +b_xxo_module_describe (BModule *module, + const gchar **title, + const gchar **description, + const gchar **author) +{ + *title = "Bxxo"; + *description = "tic-tac-toe game"; + *author = "1stein"; +} + diff --git a/blib-1.1.7/modules/digits.h b/blib-1.1.7/modules/digits.h new file mode 100644 index 0000000..6fa35e3 --- /dev/null +++ b/blib-1.1.7/modules/digits.h @@ -0,0 +1,326 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2002 The Blinkenlights Crew + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __DIGITS_H__ +#define __DIGITS_H__ + + +typedef struct _BFont { + gint width, height, advance, num_digits; + + guchar *digits_str; + guchar *data[]; +} BFont; + + +static const BFont b_digits_3x5 = { + width: 3, + height: 5, + advance: 4, + num_digits: 12, + digits_str: "0123456789: ", + data: + { /* 0 */ + "111" + "101" + "101" + "101" + "111", + /* 1 */ + "010" + "010" + "010" + "010" + "010", + /* 2 */ + "111" + "001" + "111" + "100" + "111", + /* 3 */ + "111" + "001" + "111" + "001" + "111", + /* 4 */ + "101" + "101" + "111" + "001" + "001", + /* 5 */ + "111" + "100" + "111" + "001" + "111", + /* 6 */ + "111" + "100" + "111" + "101" + "111", + /* 7 */ + "111" + "001" + "010" + "100" + "100", + /* 8 */ + "111" + "101" + "111" + "101" + "111", + /* 9 */ + "111" + "101" + "111" + "001" + "111", + /* : */ + "000" + "010" + "000" + "010" + "000", + /* */ + "000" + "000" + "000" + "000" + "000" + } +}; + +static const BFont b_digits_5x7 = { + width: 5, + height: 7, + advance: 6, + num_digits: 12, + digits_str: "0123456789: ", + data: + { /* 0 */ + "01110" + "10001" + "10011" + "10101" + "11001" + "10001" + "01110", + /* 1 */ + "00100" + "01100" + "00100" + "00100" + "00100" + "00100" + "01110", + /* 2 */ + "01110" + "10001" + "00001" + "00010" + "00100" + "01000" + "11111", + /* 3 */ + "11111" + "00010" + "00100" + "00010" + "00001" + "10001" + "01110", + /* 4 */ + "00010" + "00110" + "01010" + "10010" + "11111" + "00010" + "00010", + /* 5 */ + "11111" + "10000" + "11110" + "00001" + "00001" + "10001" + "01110", + /* 6 */ + "00110" + "01000" + "10000" + "11110" + "10001" + "10001" + "01110", + /* 7 */ + "11111" + "10001" + "00001" + "00010" + "00100" + "00100" + "00100", + /* 8 */ + "01110" + "10001" + "10001" + "01110" + "10001" + "10001" + "01110", + /* 9 */ + "01110" + "10001" + "10001" + "01111" + "00001" + "00010" + "01100", + /* : */ + "00000" + "00000" + "00100" + "00000" + "00100" + "00000" + "00000", + /* */ + "00000" + "00000" + "00000" + "00000" + "00000" + "00000" + "00000" + } +}; + +static const BFont b_digits_8x7 = { + width: 8, + height: 7, + advance: 9, + num_digits: 12, + digits_str: "0123456789: ", + data: + { /* 0 */ + "01111110" + "11000111" + "11001011" + "11001011" + "11010011" + "11100011" + "01111110", + /* 1 */ + "00011100" + "01111100" + "00011100" + "00011100" + "00011100" + "00011100" + "00011100", + /* 2 */ + "00111100" + "11111110" + "00000110" + "00001110" + "00011100" + "01111000" + "11111111", + /* 3 */ + "01111110" + "11111111" + "00000111" + "00111111" + "00000111" + "11111111" + "01111110", + /* 4 */ + "00111111" + "01110111" + "11100111" + "11111111" + "00000111" + "00000111" + "00000111", + /* 5 */ + "11111111" + "11111111" + "11100000" + "11111110" + "00000111" + "01111111" + "11111110", + /* 6 */ + "01111110" + "11100111" + "11000000" + "11111110" + "11100111" + "11100111" + "01111110", + /* 7 */ + "11111111" + "11111111" + "00000111" + "00001110" + "00011100" + "00111000" + "01110000", + /* 8 */ + "00111100" + "11100111" + "11100111" + "01111110" + "11100111" + "11100111" + "00111100", + /* 9 */ + "01111110" + "11100111" + "11100111" + "01111111" + "00000011" + "11100111" + "01111110", + /* : */ + "00000000" + "00111000" + "00111000" + "00000000" + "00111000" + "00111000" + "00000000", + /* */ + "00000000" + "00000000" + "00000000" + "00000000" + "00000000" + "00000000" + "00000000" + } +}; + +#endif /* __DIGITS_H__ */ diff --git a/blib-1.1.7/test/Makefile.am b/blib-1.1.7/test/Makefile.am new file mode 100644 index 0000000..c64f0f4 --- /dev/null +++ b/blib-1.1.7/test/Makefile.am @@ -0,0 +1,55 @@ + +## Makefile.am for blib/test +## Process this file with automake to produce Makefile.in + +SUBDIRS = movies modules + +INCLUDES = -I$(top_srcdir) + +AM_CPPFLAGS = $(GLIB_CFLAGS) @GTK_CFLAGS@ + +if HAVE_GTK +gtk_test_programs=test-module +endif + +noinst_PROGRAMS = \ + test-movie-parser \ + test-movie-player \ + test-movie-writer \ + test-theme-parser \ + test-sender \ + test-receiver \ + test-module-scanner \ + $(gtk_test_programs) + +BLIB_LIBS = @GLIB_LIBS@ @WIN32_LIBS@ ../blib/libb.la + +test_movie_parser_SOURCES = test-movie-parser.c +test_movie_parser_LDADD = $(BLIB_LIBS) + +test_movie_player_SOURCES = test-movie-player.c +test_movie_player_LDADD = $(BLIB_LIBS) + +test_movie_writer_SOURCES = test-movie-writer.c +test_movie_writer_LDADD = $(BLIB_LIBS) + +test_theme_parser_SOURCES = test-theme-parser.c +test_theme_parser_LDADD = $(BLIB_LIBS) + +test_sender_SOURCES = test-sender.c +test_sender_LDADD = $(BLIB_LIBS) + +test_receiver_SOURCES = test-receiver.c +test_receiver_LDADD = $(BLIB_LIBS) + +test_module_scanner_SOURCES = test-module-scanner.c +test_module_scanner_LDADD = $(BLIB_LIBS) + +if HAVE_GTK +test_module_SOURCES = test-module.c +test_module_LDADD = @GTK_LIBS@ $(BLIB_LIBS) +endif + +TESTS = run-tests.sh + +EXTRA_DIST = $(TESTS) diff --git a/blib-1.1.7/test/Makefile.in b/blib-1.1.7/test/Makefile.in new file mode 100644 index 0000000..7208566 --- /dev/null +++ b/blib-1.1.7/test/Makefile.in @@ -0,0 +1,769 @@ +# Makefile.in generated by automake 1.7.9 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = .. + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +AA_LIBS = @AA_LIBS@ +AA_VIEW_TYPE = @AA_VIEW_TYPE@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BLIB_BINARY_AGE = @BLIB_BINARY_AGE@ +BLIB_INTERFACE_AGE = @BLIB_INTERFACE_AGE@ +BLIB_MAJOR_VERSION = @BLIB_MAJOR_VERSION@ +BLIB_MICRO_VERSION = @BLIB_MICRO_VERSION@ +BLIB_MINOR_VERSION = @BLIB_MINOR_VERSION@ +BLIB_VERSION = @BLIB_VERSION@ +BUILD_MODULES_FALSE = @BUILD_MODULES_FALSE@ +BUILD_MODULES_TRUE = @BUILD_MODULES_TRUE@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIR = @DATADIR@ +DB2HTML = @DB2HTML@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DIRECTFB_CFLAGS = @DIRECTFB_CFLAGS@ +DIRECTFB_LIBS = @DIRECTFB_LIBS@ +DIRECTFB_VIEW_TYPE = @DIRECTFB_VIEW_TYPE@ +ECHO = @ECHO@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ENABLE_GTK_DOC_FALSE = @ENABLE_GTK_DOC_FALSE@ +ENABLE_GTK_DOC_TRUE = @ENABLE_GTK_DOC_TRUE@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ +GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ +GLIB_LIBS = @GLIB_LIBS@ +GLIB_MKENUMS = @GLIB_MKENUMS@ +GOBJECT_QUERY = @GOBJECT_QUERY@ +GTKDOC = @GTKDOC@ +GTK_CFLAGS = @GTK_CFLAGS@ +GTK_LIBS = @GTK_LIBS@ +GTK_VIEW_TYPE = @GTK_VIEW_TYPE@ +HAVE_AA_FALSE = @HAVE_AA_FALSE@ +HAVE_AA_TRUE = @HAVE_AA_TRUE@ +HAVE_DIRECTFB_FALSE = @HAVE_DIRECTFB_FALSE@ +HAVE_DIRECTFB_TRUE = @HAVE_DIRECTFB_TRUE@ +HAVE_DOCBOOK_FALSE = @HAVE_DOCBOOK_FALSE@ +HAVE_DOCBOOK_TRUE = @HAVE_DOCBOOK_TRUE@ +HAVE_GTK_DOC = @HAVE_GTK_DOC@ +HAVE_GTK_DOC_FALSE = @HAVE_GTK_DOC_FALSE@ +HAVE_GTK_DOC_TRUE = @HAVE_GTK_DOC_TRUE@ +HAVE_GTK_FALSE = @HAVE_GTK_FALSE@ +HAVE_GTK_TRUE = @HAVE_GTK_TRUE@ +HAVE_PIXBUF_FALSE = @HAVE_PIXBUF_FALSE@ +HAVE_PIXBUF_TRUE = @HAVE_PIXBUF_TRUE@ +HTML_DIR = @HTML_DIR@ +INCLUDEDIR = @INCLUDEDIR@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_AGE = @LT_AGE@ +LT_CURRENT = @LT_CURRENT@ +LT_RELEASE = @LT_RELEASE@ +LT_REVISION = @LT_REVISION@ +MAINT = @MAINT@ +MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ +MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ +MAKEINFO = @MAKEINFO@ +MODULEPATH = @MODULEPATH@ +OBJEXT = @OBJEXT@ +OS_WIN32_FALSE = @OS_WIN32_FALSE@ +OS_WIN32_TRUE = @OS_WIN32_TRUE@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PIXBUF_VIEW_TYPE = @PIXBUF_VIEW_TYPE@ +PKG_CONFIG = @PKG_CONFIG@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +THEMEPATH = @THEMEPATH@ +VERSION = @VERSION@ +WIN32_CFLAGS = @WIN32_CFLAGS@ +WIN32_LIBS = @WIN32_LIBS@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_F77 = @ac_ct_F77@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +SUBDIRS = movies modules + +INCLUDES = -I$(top_srcdir) + +AM_CPPFLAGS = $(GLIB_CFLAGS) @GTK_CFLAGS@ + +@HAVE_GTK_TRUE@gtk_test_programs = test-module + +noinst_PROGRAMS = \ + test-movie-parser \ + test-movie-player \ + test-movie-writer \ + test-theme-parser \ + test-sender \ + test-receiver \ + test-module-scanner \ + $(gtk_test_programs) + + +BLIB_LIBS = @GLIB_LIBS@ @WIN32_LIBS@ ../blib/libb.la + +test_movie_parser_SOURCES = test-movie-parser.c +test_movie_parser_LDADD = $(BLIB_LIBS) + +test_movie_player_SOURCES = test-movie-player.c +test_movie_player_LDADD = $(BLIB_LIBS) + +test_movie_writer_SOURCES = test-movie-writer.c +test_movie_writer_LDADD = $(BLIB_LIBS) + +test_theme_parser_SOURCES = test-theme-parser.c +test_theme_parser_LDADD = $(BLIB_LIBS) + +test_sender_SOURCES = test-sender.c +test_sender_LDADD = $(BLIB_LIBS) + +test_receiver_SOURCES = test-receiver.c +test_receiver_LDADD = $(BLIB_LIBS) + +test_module_scanner_SOURCES = test-module-scanner.c +test_module_scanner_LDADD = $(BLIB_LIBS) + +@HAVE_GTK_TRUE@test_module_SOURCES = test-module.c +@HAVE_GTK_TRUE@test_module_LDADD = @GTK_LIBS@ $(BLIB_LIBS) + +TESTS = run-tests.sh + +EXTRA_DIST = $(TESTS) +subdir = test +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +@HAVE_GTK_TRUE@noinst_PROGRAMS = test-movie-parser$(EXEEXT) \ +@HAVE_GTK_TRUE@ test-movie-player$(EXEEXT) \ +@HAVE_GTK_TRUE@ test-movie-writer$(EXEEXT) \ +@HAVE_GTK_TRUE@ test-theme-parser$(EXEEXT) test-sender$(EXEEXT) \ +@HAVE_GTK_TRUE@ test-receiver$(EXEEXT) \ +@HAVE_GTK_TRUE@ test-module-scanner$(EXEEXT) \ +@HAVE_GTK_TRUE@ test-module$(EXEEXT) +@HAVE_GTK_FALSE@noinst_PROGRAMS = test-movie-parser$(EXEEXT) \ +@HAVE_GTK_FALSE@ test-movie-player$(EXEEXT) \ +@HAVE_GTK_FALSE@ test-movie-writer$(EXEEXT) \ +@HAVE_GTK_FALSE@ test-theme-parser$(EXEEXT) test-sender$(EXEEXT) \ +@HAVE_GTK_FALSE@ test-receiver$(EXEEXT) \ +@HAVE_GTK_FALSE@ test-module-scanner$(EXEEXT) +PROGRAMS = $(noinst_PROGRAMS) + +am__test_module_SOURCES_DIST = test-module.c +@HAVE_GTK_TRUE@am_test_module_OBJECTS = test-module.$(OBJEXT) +test_module_OBJECTS = $(am_test_module_OBJECTS) +@HAVE_GTK_TRUE@test_module_DEPENDENCIES = ../blib/libb.la +@HAVE_GTK_FALSE@test_module_DEPENDENCIES = +test_module_LDFLAGS = +am_test_module_scanner_OBJECTS = test-module-scanner.$(OBJEXT) +test_module_scanner_OBJECTS = $(am_test_module_scanner_OBJECTS) +test_module_scanner_DEPENDENCIES = ../blib/libb.la +test_module_scanner_LDFLAGS = +am_test_movie_parser_OBJECTS = test-movie-parser.$(OBJEXT) +test_movie_parser_OBJECTS = $(am_test_movie_parser_OBJECTS) +test_movie_parser_DEPENDENCIES = ../blib/libb.la +test_movie_parser_LDFLAGS = +am_test_movie_player_OBJECTS = test-movie-player.$(OBJEXT) +test_movie_player_OBJECTS = $(am_test_movie_player_OBJECTS) +test_movie_player_DEPENDENCIES = ../blib/libb.la +test_movie_player_LDFLAGS = +am_test_movie_writer_OBJECTS = test-movie-writer.$(OBJEXT) +test_movie_writer_OBJECTS = $(am_test_movie_writer_OBJECTS) +test_movie_writer_DEPENDENCIES = ../blib/libb.la +test_movie_writer_LDFLAGS = +am_test_receiver_OBJECTS = test-receiver.$(OBJEXT) +test_receiver_OBJECTS = $(am_test_receiver_OBJECTS) +test_receiver_DEPENDENCIES = ../blib/libb.la +test_receiver_LDFLAGS = +am_test_sender_OBJECTS = test-sender.$(OBJEXT) +test_sender_OBJECTS = $(am_test_sender_OBJECTS) +test_sender_DEPENDENCIES = ../blib/libb.la +test_sender_LDFLAGS = +am_test_theme_parser_OBJECTS = test-theme-parser.$(OBJEXT) +test_theme_parser_OBJECTS = $(am_test_theme_parser_OBJECTS) +test_theme_parser_DEPENDENCIES = ../blib/libb.la +test_theme_parser_LDFLAGS = + +DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/test-module-scanner.Po \ +@AMDEP_TRUE@ ./$(DEPDIR)/test-module.Po \ +@AMDEP_TRUE@ ./$(DEPDIR)/test-movie-parser.Po \ +@AMDEP_TRUE@ ./$(DEPDIR)/test-movie-player.Po \ +@AMDEP_TRUE@ ./$(DEPDIR)/test-movie-writer.Po \ +@AMDEP_TRUE@ ./$(DEPDIR)/test-receiver.Po \ +@AMDEP_TRUE@ ./$(DEPDIR)/test-sender.Po \ +@AMDEP_TRUE@ ./$(DEPDIR)/test-theme-parser.Po +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) \ + $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +DIST_SOURCES = $(am__test_module_SOURCES_DIST) \ + $(test_module_scanner_SOURCES) $(test_movie_parser_SOURCES) \ + $(test_movie_player_SOURCES) $(test_movie_writer_SOURCES) \ + $(test_receiver_SOURCES) $(test_sender_SOURCES) \ + $(test_theme_parser_SOURCES) + +RECURSIVE_TARGETS = info-recursive dvi-recursive pdf-recursive \ + ps-recursive install-info-recursive uninstall-info-recursive \ + all-recursive install-data-recursive install-exec-recursive \ + installdirs-recursive install-recursive uninstall-recursive \ + check-recursive installcheck-recursive +DIST_COMMON = $(srcdir)/Makefile.in Makefile.am +DIST_SUBDIRS = $(SUBDIRS) +SOURCES = $(test_module_SOURCES) $(test_module_scanner_SOURCES) $(test_movie_parser_SOURCES) $(test_movie_player_SOURCES) $(test_movie_writer_SOURCES) $(test_receiver_SOURCES) $(test_sender_SOURCES) $(test_theme_parser_SOURCES) + +all: all-recursive + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu test/Makefile +Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) + +clean-noinstPROGRAMS: + @list='$(noinst_PROGRAMS)'; for p in $$list; do \ + f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f $$p $$f"; \ + rm -f $$p $$f ; \ + done +test-module$(EXEEXT): $(test_module_OBJECTS) $(test_module_DEPENDENCIES) + @rm -f test-module$(EXEEXT) + $(LINK) $(test_module_LDFLAGS) $(test_module_OBJECTS) $(test_module_LDADD) $(LIBS) +test-module-scanner$(EXEEXT): $(test_module_scanner_OBJECTS) $(test_module_scanner_DEPENDENCIES) + @rm -f test-module-scanner$(EXEEXT) + $(LINK) $(test_module_scanner_LDFLAGS) $(test_module_scanner_OBJECTS) $(test_module_scanner_LDADD) $(LIBS) +test-movie-parser$(EXEEXT): $(test_movie_parser_OBJECTS) $(test_movie_parser_DEPENDENCIES) + @rm -f test-movie-parser$(EXEEXT) + $(LINK) $(test_movie_parser_LDFLAGS) $(test_movie_parser_OBJECTS) $(test_movie_parser_LDADD) $(LIBS) +test-movie-player$(EXEEXT): $(test_movie_player_OBJECTS) $(test_movie_player_DEPENDENCIES) + @rm -f test-movie-player$(EXEEXT) + $(LINK) $(test_movie_player_LDFLAGS) $(test_movie_player_OBJECTS) $(test_movie_player_LDADD) $(LIBS) +test-movie-writer$(EXEEXT): $(test_movie_writer_OBJECTS) $(test_movie_writer_DEPENDENCIES) + @rm -f test-movie-writer$(EXEEXT) + $(LINK) $(test_movie_writer_LDFLAGS) $(test_movie_writer_OBJECTS) $(test_movie_writer_LDADD) $(LIBS) +test-receiver$(EXEEXT): $(test_receiver_OBJECTS) $(test_receiver_DEPENDENCIES) + @rm -f test-receiver$(EXEEXT) + $(LINK) $(test_receiver_LDFLAGS) $(test_receiver_OBJECTS) $(test_receiver_LDADD) $(LIBS) +test-sender$(EXEEXT): $(test_sender_OBJECTS) $(test_sender_DEPENDENCIES) + @rm -f test-sender$(EXEEXT) + $(LINK) $(test_sender_LDFLAGS) $(test_sender_OBJECTS) $(test_sender_LDADD) $(LIBS) +test-theme-parser$(EXEEXT): $(test_theme_parser_OBJECTS) $(test_theme_parser_DEPENDENCIES) + @rm -f test-theme-parser$(EXEEXT) + $(LINK) $(test_theme_parser_LDFLAGS) $(test_theme_parser_OBJECTS) $(test_theme_parser_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) core *.core + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-module-scanner.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-module.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-movie-parser.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-movie-player.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-movie-writer.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-receiver.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-sender.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-theme-parser.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \ +@am__fastdepCC_TRUE@ -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \ +@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ +@am__fastdepCC_TRUE@ fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$< + +.c.obj: +@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \ +@am__fastdepCC_TRUE@ -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \ +@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ +@am__fastdepCC_TRUE@ fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi` + +.c.lo: +@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \ +@am__fastdepCC_TRUE@ -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; \ +@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ +@am__fastdepCC_TRUE@ fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool +uninstall-info-am: + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @set fnord $$MAKEFLAGS; amf=$$2; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +mostlyclean-recursive clean-recursive distclean-recursive \ +maintainer-clean-recursive: + @set fnord $$MAKEFLAGS; amf=$$2; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ETAGS = etags +ETAGSFLAGS = + +CTAGS = ctags +CTAGSFLAGS = + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if (etags --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + else \ + include_option=--include; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -f $$subdir/TAGS && \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)$$tags$$unique" \ + || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique + +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +check-TESTS: $(TESTS) + @failed=0; all=0; xfail=0; xpass=0; skip=0; \ + srcdir=$(srcdir); export srcdir; \ + list='$(TESTS)'; \ + if test -n "$$list"; then \ + for tst in $$list; do \ + if test -f ./$$tst; then dir=./; \ + elif test -f $$tst; then dir=; \ + else dir="$(srcdir)/"; fi; \ + if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *" $$tst "*) \ + xpass=`expr $$xpass + 1`; \ + failed=`expr $$failed + 1`; \ + echo "XPASS: $$tst"; \ + ;; \ + *) \ + echo "PASS: $$tst"; \ + ;; \ + esac; \ + elif test $$? -ne 77; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *" $$tst "*) \ + xfail=`expr $$xfail + 1`; \ + echo "XFAIL: $$tst"; \ + ;; \ + *) \ + failed=`expr $$failed + 1`; \ + echo "FAIL: $$tst"; \ + ;; \ + esac; \ + else \ + skip=`expr $$skip + 1`; \ + echo "SKIP: $$tst"; \ + fi; \ + done; \ + if test "$$failed" -eq 0; then \ + if test "$$xfail" -eq 0; then \ + banner="All $$all tests passed"; \ + else \ + banner="All $$all tests behaved as expected ($$xfail expected failures)"; \ + fi; \ + else \ + if test "$$xpass" -eq 0; then \ + banner="$$failed of $$all tests failed"; \ + else \ + banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \ + fi; \ + fi; \ + dashes="$$banner"; \ + skipped=""; \ + if test "$$skip" -ne 0; then \ + skipped="($$skip tests were not run)"; \ + test `echo "$$skipped" | wc -c` -gt `echo "$$banner" | wc -c` && \ + dashes="$$skipped"; \ + fi; \ + report=""; \ + if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ + report="Please report to $(PACKAGE_BUGREPORT)"; \ + test `echo "$$report" | wc -c` -gt `echo "$$banner" | wc -c` && \ + dashes="$$report"; \ + fi; \ + dashes=`echo "$$dashes" | sed s/./=/g`; \ + echo "$$dashes"; \ + echo "$$banner"; \ + test -n "$$skipped" && echo "$$skipped"; \ + test -n "$$report" && echo "$$report"; \ + echo "$$dashes"; \ + test "$$failed" -eq 0; \ + else :; fi +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = .. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d $(distdir)/$$subdir \ + || mkdir $(distdir)/$$subdir \ + || exit 1; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" \ + distdir=../$(distdir)/$$subdir \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-recursive +all-am: Makefile $(PROGRAMS) +installdirs: installdirs-recursive +installdirs-am: + +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ + mostlyclean-am + +distclean: distclean-recursive + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-libtool distclean-tags + +dvi: dvi-recursive + +dvi-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-recursive + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-info-am + +uninstall-info: uninstall-info-recursive + +.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-TESTS \ + check-am clean clean-generic clean-libtool clean-noinstPROGRAMS \ + clean-recursive ctags ctags-recursive distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-recursive distclean-tags distdir dvi dvi-am \ + dvi-recursive info info-am info-recursive install install-am \ + install-data install-data-am install-data-recursive \ + install-exec install-exec-am install-exec-recursive \ + install-info install-info-am install-info-recursive install-man \ + install-recursive install-strip installcheck installcheck-am \ + installdirs installdirs-am installdirs-recursive \ + maintainer-clean maintainer-clean-generic \ + maintainer-clean-recursive mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool mostlyclean-recursive \ + pdf pdf-am pdf-recursive ps ps-am ps-recursive tags \ + tags-recursive uninstall uninstall-am uninstall-info-am \ + uninstall-info-recursive uninstall-recursive + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/blib-1.1.7/test/modules/Makefile.am b/blib-1.1.7/test/modules/Makefile.am new file mode 100644 index 0000000..2feecc7 --- /dev/null +++ b/blib-1.1.7/test/modules/Makefile.am @@ -0,0 +1,10 @@ +## Makefile.am for blib/test/modules + +AM_CPPFLAGS = -DG_DISABLE_DEPRECATED + +INCLUDES = -I$(top_srcdir) @GLIB_CFLAGS@ + +noinst_LTLIBRARIES = libtest.la + +libtest_la_SOURCES = test.c +libtest_la_LDFLAGS = -avoid-version -module diff --git a/blib-1.1.7/test/modules/Makefile.in b/blib-1.1.7/test/modules/Makefile.in new file mode 100644 index 0000000..70e3604 --- /dev/null +++ b/blib-1.1.7/test/modules/Makefile.in @@ -0,0 +1,473 @@ +# Makefile.in generated by automake 1.7.9 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +AA_LIBS = @AA_LIBS@ +AA_VIEW_TYPE = @AA_VIEW_TYPE@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BLIB_BINARY_AGE = @BLIB_BINARY_AGE@ +BLIB_INTERFACE_AGE = @BLIB_INTERFACE_AGE@ +BLIB_MAJOR_VERSION = @BLIB_MAJOR_VERSION@ +BLIB_MICRO_VERSION = @BLIB_MICRO_VERSION@ +BLIB_MINOR_VERSION = @BLIB_MINOR_VERSION@ +BLIB_VERSION = @BLIB_VERSION@ +BUILD_MODULES_FALSE = @BUILD_MODULES_FALSE@ +BUILD_MODULES_TRUE = @BUILD_MODULES_TRUE@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIR = @DATADIR@ +DB2HTML = @DB2HTML@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DIRECTFB_CFLAGS = @DIRECTFB_CFLAGS@ +DIRECTFB_LIBS = @DIRECTFB_LIBS@ +DIRECTFB_VIEW_TYPE = @DIRECTFB_VIEW_TYPE@ +ECHO = @ECHO@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ENABLE_GTK_DOC_FALSE = @ENABLE_GTK_DOC_FALSE@ +ENABLE_GTK_DOC_TRUE = @ENABLE_GTK_DOC_TRUE@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ +GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ +GLIB_LIBS = @GLIB_LIBS@ +GLIB_MKENUMS = @GLIB_MKENUMS@ +GOBJECT_QUERY = @GOBJECT_QUERY@ +GTKDOC = @GTKDOC@ +GTK_CFLAGS = @GTK_CFLAGS@ +GTK_LIBS = @GTK_LIBS@ +GTK_VIEW_TYPE = @GTK_VIEW_TYPE@ +HAVE_AA_FALSE = @HAVE_AA_FALSE@ +HAVE_AA_TRUE = @HAVE_AA_TRUE@ +HAVE_DIRECTFB_FALSE = @HAVE_DIRECTFB_FALSE@ +HAVE_DIRECTFB_TRUE = @HAVE_DIRECTFB_TRUE@ +HAVE_DOCBOOK_FALSE = @HAVE_DOCBOOK_FALSE@ +HAVE_DOCBOOK_TRUE = @HAVE_DOCBOOK_TRUE@ +HAVE_GTK_DOC = @HAVE_GTK_DOC@ +HAVE_GTK_DOC_FALSE = @HAVE_GTK_DOC_FALSE@ +HAVE_GTK_DOC_TRUE = @HAVE_GTK_DOC_TRUE@ +HAVE_GTK_FALSE = @HAVE_GTK_FALSE@ +HAVE_GTK_TRUE = @HAVE_GTK_TRUE@ +HAVE_PIXBUF_FALSE = @HAVE_PIXBUF_FALSE@ +HAVE_PIXBUF_TRUE = @HAVE_PIXBUF_TRUE@ +HTML_DIR = @HTML_DIR@ +INCLUDEDIR = @INCLUDEDIR@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_AGE = @LT_AGE@ +LT_CURRENT = @LT_CURRENT@ +LT_RELEASE = @LT_RELEASE@ +LT_REVISION = @LT_REVISION@ +MAINT = @MAINT@ +MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ +MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ +MAKEINFO = @MAKEINFO@ +MODULEPATH = @MODULEPATH@ +OBJEXT = @OBJEXT@ +OS_WIN32_FALSE = @OS_WIN32_FALSE@ +OS_WIN32_TRUE = @OS_WIN32_TRUE@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PIXBUF_VIEW_TYPE = @PIXBUF_VIEW_TYPE@ +PKG_CONFIG = @PKG_CONFIG@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +THEMEPATH = @THEMEPATH@ +VERSION = @VERSION@ +WIN32_CFLAGS = @WIN32_CFLAGS@ +WIN32_LIBS = @WIN32_LIBS@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_F77 = @ac_ct_F77@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +AM_CPPFLAGS = -DG_DISABLE_DEPRECATED + +INCLUDES = -I$(top_srcdir) @GLIB_CFLAGS@ + +noinst_LTLIBRARIES = libtest.la + +libtest_la_SOURCES = test.c +libtest_la_LDFLAGS = -avoid-version -module +subdir = test/modules +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +LTLIBRARIES = $(noinst_LTLIBRARIES) + +libtest_la_LIBADD = +am_libtest_la_OBJECTS = test.lo +libtest_la_OBJECTS = $(am_libtest_la_OBJECTS) + +DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/test.Plo +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) \ + $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +DIST_SOURCES = $(libtest_la_SOURCES) +DIST_COMMON = $(srcdir)/Makefile.in Makefile.am +SOURCES = $(libtest_la_SOURCES) + +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu test/modules/Makefile +Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" = "$$p" && dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +libtest.la: $(libtest_la_OBJECTS) $(libtest_la_DEPENDENCIES) + $(LINK) $(libtest_la_LDFLAGS) $(libtest_la_OBJECTS) $(libtest_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) core *.core + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \ +@am__fastdepCC_TRUE@ -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \ +@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ +@am__fastdepCC_TRUE@ fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$< + +.c.obj: +@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \ +@am__fastdepCC_TRUE@ -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \ +@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ +@am__fastdepCC_TRUE@ fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi` + +.c.lo: +@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \ +@am__fastdepCC_TRUE@ -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; \ +@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ +@am__fastdepCC_TRUE@ fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool +uninstall-info-am: + +ETAGS = etags +ETAGSFLAGS = + +CTAGS = ctags +CTAGSFLAGS = + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)$$tags$$unique" \ + || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique + +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = ../.. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) + +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-libtool distclean-tags + +dvi: dvi-am + +dvi-am: + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLTLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am info info-am install \ + install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool pdf \ + pdf-am ps ps-am tags uninstall uninstall-am uninstall-info-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/blib-1.1.7/test/modules/test.c b/blib-1.1.7/test/modules/test.c new file mode 100644 index 0000000..58ad694 --- /dev/null +++ b/blib-1.1.7/test/modules/test.c @@ -0,0 +1,331 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (c) 2002 The Blinkenlights Crew + * Daniel Mack + * Michael Natterer + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +/* Test implementation for a BModule as used in the Blinkenlights context. + * BModules are used to implement games, debug tools etc. + * You can basically use this skeleton, rename the functions and hack your + * code into the functions that contain all the g_print()s now. + */ + +#include + +#include +#include + +#include + + +#define B_TYPE_TEST_MODULE (b_type_test_module) +#define B_TEST_MODULE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), B_TYPE_TEST_MODULE, BTestModule)) +#define B_TEST_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), B_TYPE_TEST_MODULE, BTestModuleClass)) +#define B_IS_TEST_MODULE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), B_TYPE_TEST_MODULE)) + +typedef struct _BTestModule BTestModule; +typedef struct _BTestModuleClass BTestModuleClass; + +struct _BTestModule +{ + BModule parent_instance; + + gint x, y; + gboolean on; +}; + +struct _BTestModuleClass +{ + BModuleClass parent_class; +}; + +static GType b_test_module_get_type (GTypeModule *module); +static void b_test_module_class_init (BTestModuleClass *klass); +static void b_test_module_init (BTestModule *test_module); +static void b_test_module_finalize (GObject *object); +static gboolean b_test_module_query (gint width, + gint height, + gint channels, + gint maxval); +static gboolean b_test_module_prepare (BModule *module, + GError **error); +static void b_test_module_relax (BModule *module); +static void b_test_module_start (BModule *module); +static void b_test_module_stop (BModule *module); +static void b_test_module_event (BModule *module, + BModuleEvent *event); +static gint b_test_module_tick (BModule *module); +static void b_test_module_describe (BModule *module, + const gchar **title, + const gchar **description, + const gchar **author); + + + +static BModuleClass * parent_class = NULL; +static GType b_type_test_module = 0; + + +G_MODULE_EXPORT gboolean +b_module_register (GTypeModule *module) +{ + b_test_module_get_type (module); + + return TRUE; +} + +GType +b_test_module_get_type (GTypeModule *module) +{ + if (! b_type_test_module) + { + static const GTypeInfo test_module_info = + { + sizeof (BTestModuleClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc) b_test_module_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (BTestModule), + 0, /* n_preallocs */ + (GInstanceInitFunc) b_test_module_init, + }; + + /* !!!!!!!!! The name given in the next function MUST be unique! */ + + b_type_test_module = g_type_module_register_type (module, + B_TYPE_MODULE, + "BTestModule", + &test_module_info, + 0); + } + + return b_type_test_module; +} + +static void +b_test_module_class_init (BTestModuleClass *klass) +{ + GObjectClass *object_class; + BModuleClass *module_class; + + object_class = G_OBJECT_CLASS (klass); + module_class = B_MODULE_CLASS (klass); + + parent_class = g_type_class_peek_parent (klass); + + object_class->finalize = b_test_module_finalize; + + module_class->query = b_test_module_query; + module_class->prepare = b_test_module_prepare; + module_class->relax = b_test_module_relax; + module_class->start = b_test_module_start; + module_class->stop = b_test_module_stop; + module_class->event = b_test_module_event; + module_class->tick = b_test_module_tick; + module_class->describe = b_test_module_describe; +} + +static void +b_test_module_init (BTestModule *test_module) +{ + /* the device-independant initialization can happen here */ + test_module->on = FALSE; +} + +static void +b_test_module_finalize (GObject *object) +{ + BTestModule *test_module = B_TEST_MODULE (object); + + /* if we had allocated any resources, we'd free them now */ + + /* just do something to please the compiler ... */ + test_module->on = FALSE; + + /* you MUST upchain here! */ + G_OBJECT_CLASS (parent_class)->finalize (object); +} + +static gboolean +b_test_module_query (gint width, + gint height, + gint channels, + gint maxval) +{ + return (width > 0 && height > 0 && channels == 1 && maxval > 0); +} + +static gboolean +b_test_module_prepare (BModule *module, + GError **error) +{ + BTestModule *test_module = B_TEST_MODULE (module); + + /* initialize the module values that depend on the output device */ + test_module->x = module->width / 2; + test_module->y = module->height / 2; + + return TRUE; +} + +static void +b_test_module_relax (BModule *module) +{ + g_print ("b_test_module_relax\n"); + + /* if we had allocated any resources in prepare, we'd free them now */ +} + +static void +b_test_module_start (BModule *module) +{ + g_print ("b_test_module_start\n"); + + /* clear the screen */ + b_module_fill (module, 0); + b_module_paint (module); + + /* start the tick machinery */ + b_module_ticker_start (module, 200); +} + +static void +b_test_module_stop (BModule *module) +{ + g_print ("b_test_module_stop\n"); + + /* clear the screen */ + b_module_fill (module, 0); + b_module_paint (module); +} + +static void +b_test_module_event (BModule *module, + BModuleEvent *event) +{ + BTestModule *test_module; + + g_print ("b_test_module_event\n"); + + test_module = B_TEST_MODULE (module); + + switch (event->device_id) + { + case 0: + switch (event->type) + { + case B_EVENT_TYPE_KEY: + switch (event->key) + { + case B_KEY_1: + if (test_module->x > 0) + test_module->x--; + case B_KEY_2: + if (test_module->y > 0) + test_module->y--; + break; + + case B_KEY_7: + if (test_module->y < module->height-1) + test_module->y++; + case B_KEY_4: + if (test_module->x > 0) + test_module->x--; + break; + + case B_KEY_3: + if (test_module->y > 0) + test_module->y--; + case B_KEY_6: + if (test_module->x < module->width-1) + test_module->x++; + break; + + case B_KEY_9: + if (test_module->x < module->width-1) + test_module->x++; + case B_KEY_8: + if (test_module->y < module->height-1) + test_module->y++; + break; + + case B_KEY_0: + test_module->x = module->width / 2; + test_module->y = module->height / 2; + break; + + default: + break; + } + break; + default: + /* other kinds of events should not occur */ + break; + } + case 1: + /* if this was a multiplayer game, you could dispatch events + from the other 'panel' here */ + break; + } + + /* fill the buffer with zeros */ + b_module_fill (module, 0); + + /* draw the point */ + if (test_module->on) + b_module_draw_point (module, + test_module->x, test_module->y, module->maxval); + + b_module_paint (module); +} + +static gint +b_test_module_tick (BModule *module) +{ + BTestModule *test_module; + + g_print ("b_test_module_tick\n"); + + test_module = B_TEST_MODULE (module); + + /* invert the state */ + test_module->on = (test_module->on == FALSE); + + /* draw the point */ + b_module_draw_point (module, + test_module->x, test_module->y, + test_module->on ? module->maxval : 0); + + b_module_paint (module); + + /* we want to be called again in 200 milliseconds */ + return 200; +} + +static void +b_test_module_describe (BModule *module, + const gchar **title, + const gchar **description, + const gchar **author) +{ + *title = "Test"; + *description = "Blib test module and code example"; + *author = "Blinkenlights Crew"; +} diff --git a/blib-1.1.7/test/movies/Makefile.am b/blib-1.1.7/test/movies/Makefile.am new file mode 100644 index 0000000..e3a8dbd --- /dev/null +++ b/blib-1.1.7/test/movies/Makefile.am @@ -0,0 +1,7 @@ +## Makefile.am for blib/test/movies +## Process this file with automake to produce Makefile.in + +EXTRA_DIST = \ + bushfire-test-16x3.gif \ + camel-18x8.blm \ + rain-26x20.bml diff --git a/blib-1.1.7/test/movies/Makefile.in b/blib-1.1.7/test/movies/Makefile.in new file mode 100644 index 0000000..587cea1 --- /dev/null +++ b/blib-1.1.7/test/movies/Makefile.in @@ -0,0 +1,344 @@ +# Makefile.in generated by automake 1.7.9 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +AA_LIBS = @AA_LIBS@ +AA_VIEW_TYPE = @AA_VIEW_TYPE@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BLIB_BINARY_AGE = @BLIB_BINARY_AGE@ +BLIB_INTERFACE_AGE = @BLIB_INTERFACE_AGE@ +BLIB_MAJOR_VERSION = @BLIB_MAJOR_VERSION@ +BLIB_MICRO_VERSION = @BLIB_MICRO_VERSION@ +BLIB_MINOR_VERSION = @BLIB_MINOR_VERSION@ +BLIB_VERSION = @BLIB_VERSION@ +BUILD_MODULES_FALSE = @BUILD_MODULES_FALSE@ +BUILD_MODULES_TRUE = @BUILD_MODULES_TRUE@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIR = @DATADIR@ +DB2HTML = @DB2HTML@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DIRECTFB_CFLAGS = @DIRECTFB_CFLAGS@ +DIRECTFB_LIBS = @DIRECTFB_LIBS@ +DIRECTFB_VIEW_TYPE = @DIRECTFB_VIEW_TYPE@ +ECHO = @ECHO@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ENABLE_GTK_DOC_FALSE = @ENABLE_GTK_DOC_FALSE@ +ENABLE_GTK_DOC_TRUE = @ENABLE_GTK_DOC_TRUE@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ +GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ +GLIB_LIBS = @GLIB_LIBS@ +GLIB_MKENUMS = @GLIB_MKENUMS@ +GOBJECT_QUERY = @GOBJECT_QUERY@ +GTKDOC = @GTKDOC@ +GTK_CFLAGS = @GTK_CFLAGS@ +GTK_LIBS = @GTK_LIBS@ +GTK_VIEW_TYPE = @GTK_VIEW_TYPE@ +HAVE_AA_FALSE = @HAVE_AA_FALSE@ +HAVE_AA_TRUE = @HAVE_AA_TRUE@ +HAVE_DIRECTFB_FALSE = @HAVE_DIRECTFB_FALSE@ +HAVE_DIRECTFB_TRUE = @HAVE_DIRECTFB_TRUE@ +HAVE_DOCBOOK_FALSE = @HAVE_DOCBOOK_FALSE@ +HAVE_DOCBOOK_TRUE = @HAVE_DOCBOOK_TRUE@ +HAVE_GTK_DOC = @HAVE_GTK_DOC@ +HAVE_GTK_DOC_FALSE = @HAVE_GTK_DOC_FALSE@ +HAVE_GTK_DOC_TRUE = @HAVE_GTK_DOC_TRUE@ +HAVE_GTK_FALSE = @HAVE_GTK_FALSE@ +HAVE_GTK_TRUE = @HAVE_GTK_TRUE@ +HAVE_PIXBUF_FALSE = @HAVE_PIXBUF_FALSE@ +HAVE_PIXBUF_TRUE = @HAVE_PIXBUF_TRUE@ +HTML_DIR = @HTML_DIR@ +INCLUDEDIR = @INCLUDEDIR@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_AGE = @LT_AGE@ +LT_CURRENT = @LT_CURRENT@ +LT_RELEASE = @LT_RELEASE@ +LT_REVISION = @LT_REVISION@ +MAINT = @MAINT@ +MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ +MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ +MAKEINFO = @MAKEINFO@ +MODULEPATH = @MODULEPATH@ +OBJEXT = @OBJEXT@ +OS_WIN32_FALSE = @OS_WIN32_FALSE@ +OS_WIN32_TRUE = @OS_WIN32_TRUE@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PIXBUF_VIEW_TYPE = @PIXBUF_VIEW_TYPE@ +PKG_CONFIG = @PKG_CONFIG@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +THEMEPATH = @THEMEPATH@ +VERSION = @VERSION@ +WIN32_CFLAGS = @WIN32_CFLAGS@ +WIN32_LIBS = @WIN32_LIBS@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_F77 = @ac_ct_F77@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +EXTRA_DIST = \ + bushfire-test-16x3.gif \ + camel-18x8.blm \ + rain-26x20.bml + +subdir = test/movies +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +DIST_SOURCES = +DIST_COMMON = $(srcdir)/Makefile.in Makefile.am +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu test/movies/Makefile +Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool +uninstall-info-am: +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = ../.. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile + +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-libtool + +dvi: dvi-am + +dvi-am: + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am info info-am install install-am install-data \ + install-data-am install-exec install-exec-am install-info \ + install-info-am install-man install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-info-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/blib-1.1.7/test/movies/bushfire-test-16x3.gif b/blib-1.1.7/test/movies/bushfire-test-16x3.gif new file mode 100644 index 0000000..876c889 Binary files /dev/null and b/blib-1.1.7/test/movies/bushfire-test-16x3.gif differ diff --git a/blib-1.1.7/test/movies/camel-18x8.blm b/blib-1.1.7/test/movies/camel-18x8.blm new file mode 100644 index 0000000..b90ceb0 --- /dev/null +++ b/blib-1.1.7/test/movies/camel-18x8.blm @@ -0,0 +1,419 @@ +# BlinkenLights Movie 18x8 +# name = camel +# description = aa +# creator = Blinkenpaint 2.4 +# author = christine jaschek +# width = 18 +# height = 8 +# loop = no +# duration = 8400 + +@200 +000100000000000000 +011110000000000000 +111011001100110000 +000001110011001000 +000001000000000100 +000000111111111010 +000000010000001000 +000000110000011000 + +@200 +000100000000000000 +011110000000000000 +111011001100110000 +000001110011001000 +000001000000000111 +000000111111111000 +000000010000001000 +000000110000011000 + +@200 +000100000000000000 +011110000000000000 +111011001100110000 +000001110011001000 +000001000000000100 +000000111111111010 +000000010000001000 +000000110000011000 + +@200 +000100000000000000 +011110000000000000 +111011001100110000 +000001110011001000 +000001000000000111 +000000111111111000 +000000010000001000 +000000110000011000 + +@200 +000100000000000000 +011110000000000000 +111011001100110000 +000001110011001000 +000001000000000100 +000000111111111010 +000000010000001000 +000000110000011000 + +@200 +000100000000000000 +011110000000000000 +111011001100110000 +000001110011001000 +000001000000000111 +000000111111111000 +000000010000001000 +000000110000011000 + +@200 +000100000000000000 +011110000000000000 +111011001100110000 +000001110011001000 +000001000000000100 +000000111111111010 +000000010000001000 +000000110000011000 + +@200 +000100000000000000 +011110000000000000 +111011001100110000 +000001110011001000 +000001000000000111 +000000111111111000 +000000010000001000 +000000110000011000 + +@200 +000100000000000000 +011110000000000000 +111011001100110000 +000001110011001000 +000001000000000100 +000000111111111010 +000000010000001000 +000000110000011000 + +@200 +001000000000000000 +111100000000000000 +110110011001100000 +000011100110010000 +000010000000001110 +000001111111110000 +000000100000010000 +000001100000110000 + +@200 +001000000000000000 +111100000000000000 +110110011001100000 +000011100110010000 +000010000000001110 +000001111111110100 +000000100000010000 +000001100000110000 + +@200 +001000000000000000 +111100000000000000 +110110011001100000 +000011100110010000 +000010000000001110 +000001111111110000 +000000100000010010 +000001100000110000 + +@200 +001000000000000000 +111100000000000000 +110110011001100000 +000011100110010000 +000010000000001110 +000001111111110100 +000000100000010000 +000001100000110001 + +@200 +001000000000000000 +111100000000000000 +110110011001100000 +000011100110010000 +000010000000001110 +000001111111110000 +000000100000010010 +000001100000110001 + +@200 +001000000000000000 +111100000000000000 +110110011001100000 +000011100110010000 +000010000000001110 +000001111111110000 +000000100000010000 +000001100000110011 + +@200 +001000000000000000 +111100000000000000 +110110011001100000 +000011100110010000 +000010000000001110 +000001111111110100 +000000100000010000 +000001100000110011 + +@200 +001000000000000000 +111100000000000000 +110110011001100000 +000011100110010000 +000010000000001110 +000001111111110000 +000000100000010010 +000001100000110011 + +@200 +001000000000000000 +111100000000000000 +110110011001100000 +000011100110010000 +000010000000001110 +000001111111110100 +000000100000010010 +000001100000110011 + +@200 +001000000000000000 +111100000000000000 +110110011001100000 +000011100110010000 +000010000000001110 +000001111111110000 +000000100000010110 +000001100000110011 + +@200 +001000000000000000 +111100000000000000 +110110011001100000 +000011100110010000 +000010000000001110 +000001111111110000 +000000100000010010 +000001100000110111 + +@200 +010000000000000000 +111000000000000000 +101100110011000000 +000111001100100000 +000100000000011100 +000011111111100000 +000000100001000010 +000001100011000111 + +@200 +100000000000000000 +110000000000000000 +011001100110000000 +001110011001000000 +001000000000111000 +000111111111000000 +000010000001000010 +000110000011000111 + +@200 +000000000000000000 +100000000000000000 +110011001100000000 +011100110010000000 +010000000001110000 +001111111110000000 +000010000100000010 +000110001100000111 + +@200 +000000000000000000 +000000000000000000 +100110011000000000 +111001100100000000 +100000000010000000 +011111111101000000 +001000000100000010 +011000001100000111 + +@200 +000000000000000000 +000000000000000000 +001100110000000000 +110011001000000000 +000000000100000000 +111111111010000000 +001000010000000010 +011000110000000111 + +@200 +000000000000000000 +000000000000000000 +011001100000000000 +100110010000000000 +000000001000000000 +111111110100000000 +100000010000000010 +100000110000000111 + +@200 +000000000000000000 +000000000000000000 +110011000000000000 +001100100000000000 +000000010000000000 +111111101000000000 +000001000000000010 +000011000000000111 + +@200 +000000000000000000 +000000000000000000 +100110000000000000 +011001000000000000 +000000100000000000 +111111010000000000 +000001000000000010 +000011000000000111 + +@200 +000000000000000000 +000000000000000000 +001100000000000000 +110010000000000000 +000001000000000000 +111110100000000000 +000100000000000010 +001100000000000111 + +@200 +000000000000000000 +000000000000000000 +011000000000000000 +100100000000000000 +000010000000000000 +111101000000000000 +000100000000000010 +001100000000000111 + +@200 +000000000000000000 +000000000000000000 +110000000000000000 +001000000000000000 +000100000000000000 +111010000000000000 +010000000000000010 +110000000000000111 + +@200 +000000000000000000 +000000000000000000 +100000000000000000 +010000000000000000 +001000000000000000 +110100000000000000 +010000000000000010 +110000000000000111 + +@200 +000000000000000000 +000000000000000000 +000000000000000000 +100000000000000000 +010000000000000000 +101000000000000000 +100000000000000010 +100000000000000111 + +@200 +000000000000000000 +000000000000000000 +000000000000000000 +000000000000000000 +100000000000000000 +010000000000000000 +000000000000000010 +000000000000000111 + +@200 +000000000000000000 +000000000000000000 +000000000000000000 +000000000000000000 +000000000000000000 +100000000000000000 +000000000000000010 +000000000000000111 + +@200 +000000000000000000 +000000000000000000 +000000000000000000 +000000000000000000 +000000000000000000 +000000000000000000 +000000000000000010 +000000000000000111 + +@200 +000000000000000000 +000000000000000000 +000000000000000000 +000000000000000000 +000000000000000000 +000000000000000000 +000000000000000010 +000000000000000111 + +@200 +000000000000000000 +000000000000000000 +000000000000000000 +000000000000000000 +000000000000000000 +000000000000000000 +000000000000000010 +000000000000000111 + +@200 +000000000000000000 +000000000000000000 +000000000000000000 +000000000000000000 +000000000000000000 +000000000000000000 +000000000000000010 +000000000000000111 + +@200 +000000000000000000 +000000000000000000 +000000000000000000 +000000000000000000 +000000000000000000 +000000000000000000 +000000000000000010 +000000000000000111 + +@400 +000000000000000000 +000000000000000000 +000000000000000000 +000000000000000000 +000000000000000000 +000000000000000000 +000000000000000000 +000000000000000000 diff --git a/blib-1.1.7/test/movies/rain-26x20.bml b/blib-1.1.7/test/movies/rain-26x20.bml new file mode 100644 index 0000000..b1a87cf --- /dev/null +++ b/blib-1.1.7/test/movies/rain-26x20.bml @@ -0,0 +1,429 @@ + + +
+ Raindrops + Falling raindrops + ArcadePaint 1.0.2 PC + Richard Gordon Faika + 2650 + +
+ + 00000000000377000000100000 + 00000002000000000000000000 + 00200024400000000000000000 + 00400244470000000000000000 + 00000027700000000000000000 + 00000000000000001000001000 + 00000000000010000000000000 + 00010000000000002000000000 + 00000000000000004000000000 + 00000000000000000000000000 + 00000000020000000000001000 + 00000000040000000000000000 + 00000000000000000000000000 + 00000000000000000000000000 + 00000000000010000000001000 + 00000000000000001000000020 + 00000000000000000000000040 + 00010000000000000000000000 + 00000000000000000000000000 + 00000000000000000000000000 + + + 00000000002444700000000000 + 00000000000377000000100000 + 00000000000000000000000000 + 00200002000000000000000000 + 00400024400000000000000000 + 00000244470000000000001000 + 00000027700010001000000000 + 00000000000000000000000000 + 00010000000000002000000000 + 00000000000000004000000000 + 00000000000000000000000000 + 00000000020000000000001000 + 00000000040000000000000000 + 00000000000000000000000000 + 00000000000000000000000000 + 00000000000010001000001000 + 00000000000000000000000020 + 00010000000000000000000040 + 00000000000000000000000000 + 00000000000000000000000000 + + + 00000000000244000000000020 + 00000000002444700000100000 + 00000000000377000000000000 + 00000000000000000000000000 + 00200000000000000000000000 + 00400000000000000000000000 + 00000000000000001000001000 + 00000002000010000000000000 + 00010024400000000000000000 + 00000244470000002000000000 + 00000027700000004000000000 + 00000000000000000000001000 + 00000000020000000000000000 + 00000000040000000000000000 + 00000000000000000000000000 + 00000000000010000000001000 + 00000000000000001000000000 + 00000000000000000000000020 + 00010000000000000000000040 + 00000000000000000000000000 + + + 00010000000020000000000040 + 00000000000244000000000000 + 00000000002444700000100000 + 00000000000377000000000000 + 00000000000000000000000000 + 00200000000000000000000000 + 00400000000000000000001000 + 00000000000010001000000000 + 00000000000000000000000000 + 00010000000000000000000000 + 00000000000000002000000000 + 00000000000000004000000000 + 00000002000000000000001000 + 00000024400000000000000000 + 00000244470000000000000000 + 00000027720000000000000000 + 00000000000010001000001000 + 00000000000000000000000000 + 00010000000000000000000020 + 00000000000000000000000040 + + + 00010000000000000000000020 + 00000000000000000000000040 + 00000000000020000000100000 + 00000000000244000000022000 + 00000000002444700000000000 + 00000000000377000000000000 + 00200000000000000000000000 + 00400000000000001000001000 + 00000000000010000000000000 + 00010000000000000000000000 + 00000000000000000000000000 + 00000000000000002000000000 + 00000000000000004000001000 + 00000000000000000000000000 + 00000000020000000000000000 + 00000000040000000000000000 + 00000000000010000000001000 + 00000002000000001000000000 + 00000024400000000000000000 + 00010244470000000000000000 + + + 00000010000000000003770000 + 00010000000000000000000020 + 00000000000000000000000040 + 00000000000000000000100000 + 00000000000020000000000000 + 00000000000244000000000000 + 00000000002444700000000000 + 00200000000377000000001000 + 00400000000010001000000000 + 00000000000000000000000000 + 00010000000000000000000000 + 00000000000000000000000000 + 00000000000000002000000000 + 00000000000000004000001000 + 00000000000000000000000000 + 00000000020000000000000000 + 00000000040000000000000000 + 00000000000010001000001000 + 00000000000000000000000000 + 00010002000000000000000000 + + + 00000010000000000002440000 + 00010000000000000024447000 + 00000000000000000002770020 + 00000000000000000000100040 + 00000000000000000000000000 + 00000000000000000000000000 + 00000000000020000000000000 + 00000000000244000000000000 + 00200000002444701000001000 + 00400000000277000000000000 + 00010000000000000000000000 + 00000000000000000000000000 + 00000000000000000000000000 + 00000000000000002000001000 + 00000000000000004000000000 + 00000000000000000000000000 + 00000000020000000000000000 + 00000000040010000000001000 + 00000000000000001000000000 + 00000000000000000000000000 + + + 00000000000010001000200000 + 00000000000000000002440000 + 00010000000000000022447000 + 00000000000000000002770020 + 00000000000000000000000040 + 00000000000000000000000000 + 00000000000000000000000000 + 00000000000000000000000000 + 00000000000010000000001000 + 00200000000020001000000000 + 00400000000244000000000000 + 00010000002444700000000000 + 00000000000277000000000000 + 00000000000000000000000000 + 00000000000000002000001000 + 00000000000000004000000000 + 00000000000000000000000000 + 00000000020000000000000000 + 00000000040010001000001000 + 00000000000000000000000000 + + + 00004770040010001000000000 + 00000000000000000000000000 + 00010000000000000000000000 + 00000000000000000000200000 + 00000000000000000002440020 + 00000000000000000022447040 + 00000000000000000002770000 + 00000000000000000000000000 + 00000000000000000000000000 + 00000000000010001000001000 + 00200000000000000000000000 + 00410000000000000000000000 + 00000000000020000000000000 + 00000000000244000000000000 + 00000000002444700000001000 + 00000000000277002000000000 + 00000000000000004000000000 + 00000000000000000000000000 + 00000000020010000000001000 + 00000000040000001000000000 + + + 00024447020000000000001000 + 00002770040010001000000000 + 00000000000000000000000000 + 00010000000000000000000000 + 00000000000000000000000000 + 00000000000000000000000020 + 00000000000000000000000040 + 00000000000000000000000000 + 00000000000000000000200000 + 00000000000010000002441000 + 00000000000000001024447000 + 00200000000000000002770000 + 00410000000000000000000000 + 00000000000000000000000000 + 00000000000000000000000000 + 00000000000000000000001000 + 00000000000000002000000000 + 00000000000000004000000000 + 00000000000020000000000000 + 00000000000244001000001000 + + + 00002440000000000000001000 + 00024447020010001000000000 + 00002770040000000000000000 + 00010000000000000000000000 + 00000000000000000000000000 + 00000000000000000000000000 + 00000000000000000000000020 + 00000000000000000000000040 + 00000000000000000000000000 + 00000000000000000000000000 + 00000000000010001000001000 + 00000000000000000000200000 + 00210000000000000002440000 + 00400000000000000024447000 + 00000000000000000002770000 + 00000000000000000000001000 + 00000000000000000000000000 + 00000000000000002000000000 + 00000000000000004000000000 + 00000000000000000000001000 + + + 00000000000000004000000000 + 00000000000000000000001000 + 00000000020010001000000000 + 00000000040000000000000000 + 00010200000000000000000000 + 00002440000000000000000000 + 00024447000000000000000000 + 00002770000000000000000020 + 00000000000000000000000040 + 00000000000000000000000000 + 00000000000010000000001000 + 00000000000000001000000000 + 00000000000000000000000000 + 00210000000000000000000000 + 00400000000000000000000000 + 00000000000000000000000000 + 00000000000000000000001000 + 00000000000000000000000000 + 00000000000000002000020000 + 00000000000000004000244000 + + + 00000000000000002000277000 + 00000000000000004000001000 + 00000000000010001000000000 + 00000000020000000000000000 + 00010000040000000000000000 + 00000000000000000000000000 + 00000000000000000000000000 + 00000200000000000000000000 + 00002440000000000000000020 + 00024447000000000000000040 + 00002770000000000000000000 + 00000000000010001000001000 + 00000000000000000000000000 + 00010000000000000000000000 + 00200000000000000000000000 + 00400000000000000000000000 + 00000000000000000000001000 + 00000000000000000000000000 + 00000000000000000000000000 + 00000000000000000000000000 + + + 01000000000000000002444700 + 00000000000000002000277000 + 00000000000000004000001000 + 00000000000010001000000000 + 00010000020000000000000000 + 00000000040000000000000000 + 00000000000000000000000000 + 00000000000000000000000000 + 00000000000000000000000000 + 00000000000000000000000020 + 00000200000000000000000040 + 00002440000010000000001000 + 00024447000000001000000000 + 00002770000000000000000000 + 00010000000000000000000000 + 00200000000000000000000000 + 00400000000000000000000000 + 00000000000000000000001000 + 00000000000000000000000000 + 00000000000000000000000000 + + + 01000000000000000000244000 + 00000000000000000002444700 + 00000000000000002000277000 + 00000000000010004000000000 + 00000000000000000000000000 + 00010000020000000000000000 + 00000000040000000000000000 + 00000000000000000000000000 + 00000000000000000000000000 + 00000000000000000000000000 + 00000000000000000000000020 + 00000000000000000000000040 + 00000000000010001000001000 + 00000000000000000000000000 + 00010200000000000000000000 + 00002440000000000000000000 + 00224447000000000000000000 + 00402770000000000000001000 + 00000000000000000000000000 + 00000000000000000000000000 + + + 00000000000000000000000000 + 01000000000000000000000000 + 00000000000000000000000000 + 00000000000000002000001000 + 00000000000010004000020000 + 00010000000000000000244000 + 00000000020000000002444700 + 00000000040000000000277000 + 00000000000000000000000000 + 00000000000000000000000000 + 00000000000000000000000000 + 00000000000000000000000020 + 00000000000010000000001040 + 00000000000000001000000000 + 00000000000000000000000000 + 00010000000000000000000000 + 00000000000000000000000000 + 00200000000000000000000000 + 00400000000000000000001000 + 00000000000000000000000000 + + + 00400027700000000000000000 + 01000000000000000000000000 + 00000000000000000000000000 + 00000000000000000000001000 + 00000000000010002000000000 + 00000000000000004000000000 + 00010000000000000000000000 + 00000000020000000000020000 + 00000000040000000000244000 + 00000000000000000002444700 + 00000000000000000000277000 + 00000000000000000000000000 + 00000000000000000000000020 + 00000000000010001000001040 + 00000000000000000000000000 + 00010000000000000000000000 + 00000000000000000000000000 + 00000000000000000000000000 + 00200000000000000000001000 + 00400000000000000000000000 + + + 00200244470000000000000000 + 00400027700000000000000000 + 01000000000000000000000000 + 00000000000000000000000000 + 00000000000000000000001000 + 00000000000010002000000000 + 00010000000000004000000000 + 00000000000000000000000000 + 00000000020000000000000000 + 00000000040000000000001000 + 00000000000000000000020000 + 00000000000000000000244000 + 00000000000000000002444700 + 00000000000010000000277020 + 00000000000000001000000040 + 00000000000000000000000000 + 00010000000000000000000000 + 00000000000000000000000000 + 00000000000000000000000000 + 00200000000000000000001000 + + + 00000024400000000000100000 + 00200244470000000000000000 + 00400027700000000000000000 + 01000000000000000000000000 + 00000000000000000000001000 + 00000000000010001000000000 + 00000000000000002000000000 + 00010000000000004000000000 + 00000000000000000000000000 + 00000000020000000000000000 + 00000000040000000000001000 + 00000000000000000000000000 + 00000000000000000000000000 + 00000000000000000000000000 + 00000000000010001000001020 + 00000000000000000000000040 + 00010000000000000000000000 + 00000000000000000000000000 + 00000000000000000000020000 + 00000000000000000000244000 + +
diff --git a/blib-1.1.7/test/run-tests.sh b/blib-1.1.7/test/run-tests.sh new file mode 100755 index 0000000..3964c29 --- /dev/null +++ b/blib-1.1.7/test/run-tests.sh @@ -0,0 +1,45 @@ +#!/bin/sh + +echo + +test -f test-movie-parser.c || { + echo "You must run this script in the tests directory." + echo + exit 1 +} + +if xmllint --version > /dev/null 2>&1; then + movie_dtd="../data/bml.dtd" +fi + +if test -x test-movie-parser; then + echo "Testing the movie parser ..." + for suffix in blm bml gif; do + for movie in movies/*.$suffix; do + test -f $movie && ./test-movie-parser $movie + done + done + echo +fi + +if test -x test-movie-writer; then + echo "Testing the movie writer ..." + for suffix in blm bml gif; do + for movie in movies/*.$suffix; do + if test -f $movie; then + for format in blm bml gif; do + if test $format = bml && test -n $movie_dtd; then + ./test-movie-writer $format $movie | \ + xmllint --noout --dtdvalid $movie_dtd - && \ + echo " ... and validated against $movie_dtd" + else + ./test-movie-writer $format $movie > /dev/null + fi + done + fi + done + done + echo +fi + +exit 0 diff --git a/blib-1.1.7/test/test-module-scanner.c b/blib-1.1.7/test/test-module-scanner.c new file mode 100644 index 0000000..4477290 --- /dev/null +++ b/blib-1.1.7/test/test-module-scanner.c @@ -0,0 +1,102 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (C) 2002 The Blinkenlights Crew + * Sven Neumann + * Daniel Mack + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include + +#include "blib/blib.h" + + +static void +print_info (GType type) +{ + GParamSpec **props; + GTypeClass *class; + gint n_props; + + class = g_type_class_ref (type); + + props = g_object_class_list_properties (G_OBJECT_CLASS (class), &n_props); + + g_print ("BModule subtype: %s\n\n", g_type_name (type)); + + if (! props) + { + g_print (" %s has no properties.\n", g_type_name (type)); + } + else + { + gint i; + + g_print (" %s has %d properties:\n", g_type_name (type), n_props); + + for (i = 0; i < n_props; i++) + { + GParamSpec *spec = props[i]; + + g_print (" name: %s\n", g_param_spec_get_name (spec)); + g_print (" blurb: %s\n", g_param_spec_get_blurb (spec)); + g_print (" type: %s\n", + g_type_name (G_PARAM_SPEC_VALUE_TYPE (spec))); + g_print ("\n"); + } + } + + g_free (props); + + g_type_class_unref (class); +} + +int +main (int argc, + char *argv[]) +{ + volatile GType movie_player_type; + const gchar *module_dir = "../modules"; + gint i; + + if (argc > 1) + module_dir = argv[1]; + + b_init (); + + /* load the builtin movie player */ + movie_player_type = B_TYPE_MOVIE_PLAYER; + g_print ("Registered the builtin BMoviePlayer module.\n"); + + g_print ("Scanning %s for loadable modules ... ", module_dir); + i = b_module_infos_scan_dir (argv[1]); + g_print ("registered %d modules\n", i); + + if (i > 0) + { + GType *child_types; + gint n_child_types; + + child_types = g_type_children (B_TYPE_MODULE, &n_child_types); + + for (i = 0; i < n_child_types; i++) + print_info (child_types[i]); + + g_free (child_types); + } + + return EXIT_SUCCESS; +} diff --git a/blib-1.1.7/test/test-module.c b/blib-1.1.7/test/test-module.c new file mode 100644 index 0000000..36bbda1 --- /dev/null +++ b/blib-1.1.7/test/test-module.c @@ -0,0 +1,401 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (C) 2002 The Blinkenlights Crew + * Sven Neumann + * Daniel Mack + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include +#include + +#define GTK_DISABLE_DEPRECATED + +#include + +#include "blib/blib.h" + +/* the HDL setup */ +#define WIDTH 18 +#define HEIGHT 8 +#define ASPECT 0.55 + + +static GtkWidget *main_window = NULL; +static GtkWidget *keys_table = NULL; +static GtkWidget *start_button = NULL; +static GtkWidget *stop_button = NULL; + + +static gboolean +paint (BModule *module, + guchar *buffer, + gpointer data) +{ + b_sender_send_frame (B_SENDER (data), buffer); + + return TRUE; +} + +static void +key_pressed (GObject *object, + gpointer data) +{ + BModuleEvent event; + + event.device_id = 0; + event.type = B_EVENT_TYPE_KEY; + event.key = GPOINTER_TO_INT (g_object_get_data (object, "keyval")); + + g_print ("KEY %d\n", event.key); + + b_module_event (B_MODULE (data), &event); +} + +static void +about_cb (GtkWidget *widget, + BModule *module) +{ + static GtkWidget *dialog = NULL; + + gchar *desc[3]; + GString *text; + gint i; + + if (dialog) + { + gtk_widget_destroy (dialog); + return; + } + + b_module_describe (module, desc, desc + 1, desc + 2); + + text = g_string_new (NULL); + + for (i = 0; i < 3; i++) + { + if (i == 0) + g_string_append_printf (text, + "" + "%s" + "", desc[0]); + else if (desc[i]) + g_string_append (text, desc[i]); + + g_string_append_c (text, '\n'); + + g_free (desc[i]); + } + + dialog = gtk_message_dialog_new (GTK_WINDOW (main_window), + GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE, + text->str); + + g_object_add_weak_pointer (G_OBJECT (dialog), (gpointer) &dialog); + + g_string_free (text, TRUE); + + gtk_dialog_set_has_separator (GTK_DIALOG (dialog), FALSE); + gtk_window_set_title (GTK_WINDOW (dialog), "About this Module"); + + gtk_label_set_use_markup (GTK_LABEL (GTK_MESSAGE_DIALOG (dialog)->label), + TRUE); + + g_signal_connect_swapped (G_OBJECT (dialog), "response", + G_CALLBACK (gtk_widget_destroy), dialog); + + gtk_widget_show (dialog); +} + +static void +start_cb (gpointer data) +{ + BModuleEvent ev; + + gtk_widget_set_sensitive (keys_table, TRUE); + gtk_widget_set_sensitive (start_button, FALSE); + gtk_widget_set_sensitive (stop_button, TRUE); + + g_print ("Telling module device 0 joined..."); + ev.device_id = 0; + ev.type = B_EVENT_TYPE_PLAYER_ENTERED; + b_module_event (B_MODULE (data), &ev); + g_print ("OK.\n"); + +} + +static void +stop_cb (gpointer data) +{ + gtk_widget_set_sensitive (keys_table, FALSE); + gtk_widget_set_sensitive (start_button, TRUE); + gtk_widget_set_sensitive (stop_button, FALSE); +} + +static void +dump_cb (GtkWidget *widget, + BModule *module) +{ + BMovie *movie; + GError *error = NULL; + + movie = g_object_new (B_TYPE_MOVIE_BML, "name", "Module Frame Dump", NULL); + + movie->width = module->width; + movie->height = module->height; + movie->channels = module->channels; + movie->maxval = module->maxval; + + /* eeque */ + movie->load_count = 1; + + b_movie_prepend_frame (movie, 1000, module->buffer); + + if (!b_movie_save (movie, stdout, &error)) + { + g_printerr ("Error writing to stdout: %s\n", error->message); + g_clear_error (&error); + } + + g_object_unref (movie); +} + +static void +setup_window (BModule *module) +{ + GtkWidget *main_vbox; + GtkWidget *vbox; + GtkWidget *button; + gint i; + gchar *key[] = { "_1", "_2", "_3", "_4", "_5", "_6", + "_7", "_8", "_9", "_*", "_0", "_#" }; + BModuleKey keyval[] = { B_KEY_1, + B_KEY_2, + B_KEY_3, + B_KEY_4, + B_KEY_5, + B_KEY_6, + B_KEY_7, + B_KEY_8, + B_KEY_9, + B_KEY_ASTERISK, + B_KEY_0, + B_KEY_HASH }; + + main_window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + + gtk_window_set_title (GTK_WINDOW (main_window), "Virtual Cellular Phone"); + + g_signal_connect (G_OBJECT (main_window), "destroy", + G_CALLBACK (gtk_main_quit), + NULL); + + main_vbox = gtk_vbox_new (FALSE, 3); + gtk_container_add (GTK_CONTAINER (main_window), main_vbox); + + button = gtk_button_new_with_mnemonic ("_About"); + g_signal_connect (G_OBJECT (button), "clicked", + G_CALLBACK (about_cb), module); + gtk_box_pack_start (GTK_BOX (main_vbox), button, FALSE, FALSE, 0); + + keys_table = gtk_table_new (4, 3, TRUE); + gtk_box_pack_start (GTK_BOX (main_vbox), keys_table, TRUE, TRUE, 0); + + for (i = 0; i < 12; i++) + { + GtkWidget *button = gtk_button_new_with_mnemonic (key[i]); + + gtk_misc_set_padding (GTK_MISC (GTK_BIN (button)->child), 8, 4); + + g_object_set_data (G_OBJECT (button), + "keyval", GINT_TO_POINTER (keyval[i])); + + g_signal_connect (G_OBJECT (button), "clicked", + G_CALLBACK (key_pressed), + module); + gtk_table_attach_defaults (GTK_TABLE (keys_table), button, + i%3, i%3 + 1, i/3, i/3 + 1); + } + + gtk_widget_set_sensitive (keys_table, FALSE); + + vbox = gtk_vbox_new (TRUE, 2); + gtk_box_pack_start (GTK_BOX (main_vbox), vbox, FALSE, FALSE, 0); + + start_button = gtk_button_new_with_mnemonic ("_Start"); + g_signal_connect_swapped (G_OBJECT (start_button), "clicked", + G_CALLBACK (b_module_start), module); + gtk_box_pack_start_defaults (GTK_BOX (vbox), start_button); + + stop_button = gtk_button_new_from_stock (GTK_STOCK_STOP); + g_signal_connect_swapped (G_OBJECT (stop_button), "clicked", + G_CALLBACK (b_module_stop), module); + gtk_box_pack_start_defaults (GTK_BOX (vbox), stop_button); + + button = gtk_button_new_with_mnemonic ("_Dump Frame"); + g_signal_connect (G_OBJECT (button), "clicked", + G_CALLBACK (dump_cb), module); + gtk_box_pack_start_defaults (GTK_BOX (vbox), button); + + gtk_widget_set_sensitive (stop_button, FALSE); + + gtk_widget_show_all (main_window); +} + +int +main (int argc, + char *argv[]) +{ + BModule *module; + BSender *sender; + GError *error = NULL; + GType type; + gint i; + gint nreceivers = 0; + + if (argc < 4) + { + g_printerr ("Usage: %s [|--property:=]+\n", argv[0]); + return EXIT_FAILURE; + } + + b_init (); + + gtk_init (&argc, &argv); + + i = b_module_infos_scan_dir (argv[1]); + g_print ("b_module_infos_scan_dir() returned %d\n", i); + + /* make sure (static) BMoviePlayer is correctly registered. */ + g_type_class_peek (B_TYPE_MOVIE_PLAYER); + + if (i > 0) + { + GType *child_types; + gint n_child_types; + + child_types = g_type_children (B_TYPE_MODULE, &n_child_types); + + for (i = 0; i < n_child_types; i++) + { + g_print ("Registered BModule subtype: %s\n", + g_type_name (child_types[i])); + } + + g_free (child_types); + } + + + g_print ("===================\n"); + g_print ("Getting type for '%s'\n", argv[2]); + + type = g_type_from_name (argv[2]); + if (!type) + { + g_print (" ...failed.\n"); + return EXIT_FAILURE; + } + g_print (" ...succeeded.\n"); + + + g_print ("Creating BSender, "); + sender = b_sender_new (); + + for (i = 3; i < argc; i++) { + if (strncmp(argv[i], "--", 2) == 0) + continue; + + b_sender_add_recipient (sender, -1, argv[i], MCU_LISTENER_PORT, NULL); + nreceivers ++; + } + + g_print (" added %d recipients.\n", nreceivers); + + b_sender_configure (sender, WIDTH, HEIGHT, 1, 255); + + + g_print ("Creating object of type '%s' ... ", argv[2]); + + module = b_module_new (type, WIDTH, HEIGHT, NULL, paint, sender, &error); + + if (! module) + { + g_print ("failed: %s\n", error->message); + return EXIT_FAILURE; + } + g_print ("OK.\n"); + + b_module_set_aspect (module, ASPECT); + + g_print ("Checking for module properties ...\n"); + for (i = 3; i < argc; i++) + { + const gchar *p = argv[i]; + gchar *value; + gchar buffer[128]; + + if (strncmp (p, "--property:", 11) != 0) + continue; + + strncpy (buffer, p + 11, 128); + value = strchr (buffer, '='); + if (value == NULL ) + { + g_print ("%s seems not to be a valid property argument, ignoring\n", + argv[i]); + continue; + } + + *value = 0; /* null-terminate key */ + value++; + + g_print ("Setting object property: \"%s\" = \"%s\"\n", buffer, value); + + if (!b_object_set_property (G_OBJECT (module), + buffer, value, NULL, &error)) + { + g_print ("Failed: %s\n", error->message); + g_clear_error (&error); + } + } + + g_print ("Preparing the module ... "); + + if (! b_module_prepare (module, &error)) + { + g_print ("failed: %s\n", error->message); + + g_object_unref (module); + + return EXIT_FAILURE; + } + g_print ("OK.\n"); + + + setup_window (module); + + g_signal_connect (G_OBJECT (module), "start", G_CALLBACK (start_cb), module); + g_signal_connect (G_OBJECT (module), "stop", G_CALLBACK (stop_cb), module); + + gtk_main (); + + g_print ("Quitting.\n"); + + g_object_unref (module); + + return EXIT_SUCCESS; +} diff --git a/blib-1.1.7/test/test-movie-parser.c b/blib-1.1.7/test/test-movie-parser.c new file mode 100644 index 0000000..f2f27af --- /dev/null +++ b/blib-1.1.7/test/test-movie-parser.c @@ -0,0 +1,74 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (C) 2002 The Blinkenlights Crew + * Sven Neumann + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include + +#include "blib/blib.h" +#include + +int +main (int argc, + char *argv[]) +{ + BMovie *movie; + GError *error = NULL; + + if (argc < 2) + { + g_printerr ("Usage: %s \n", argv[0]); + return EXIT_FAILURE; + } + + b_init (); + + if (strcmp (argv[1], "-")) + movie = b_movie_new_from_file (argv[1], TRUE, &error); + else + movie = b_movie_new_from_fd (0, &error); + + if (!movie) + { + g_return_val_if_fail (error != NULL, EXIT_FAILURE); + + g_printerr ("Error opening '%s': %s\n", argv[1], error->message); + g_error_free (error); + return EXIT_FAILURE; + } + + if (!b_movie_load (movie, &error)) + { + g_return_val_if_fail (error != NULL, EXIT_FAILURE); + + g_printerr ("Error parsing '%s': %s\n", + b_object_get_name (B_OBJECT (movie)), error->message); + g_error_free (error); + return EXIT_FAILURE; + } + + g_printerr ("successfully loaded '%s' (%dx%d) with %d frame(s)\n", + movie->title ? + movie->title : b_object_get_name (B_OBJECT (movie)), + movie->width, movie->height, + g_list_length (movie->frames)); + + g_object_unref (movie); + + return EXIT_SUCCESS; +} diff --git a/blib-1.1.7/test/test-movie-player.c b/blib-1.1.7/test/test-movie-player.c new file mode 100644 index 0000000..dc73f93 --- /dev/null +++ b/blib-1.1.7/test/test-movie-player.c @@ -0,0 +1,126 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (C) 2002 The Blinkenlights Crew + * Sven Neumann + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include + +#include "blib/blib.h" + + +static gboolean +paint (BModule *module, + guchar *buffer, + gpointer data) +{ + b_sender_send_frame (B_SENDER (data), buffer); + + return TRUE; +} + +int +main (int argc, + char *argv[]) +{ + GMainLoop *loop; + BModule *module; + BSender *sender; + BMovie *movie; + gint i; + GError *error = NULL; + + if (argc < 3) + { + g_print ("Usage: %s +\n", argv[0]); + return EXIT_FAILURE; + } + + b_init (); + + movie = b_movie_new_from_file (argv[1], TRUE, &error); + if (!movie) + { + g_print ("Error opening '%s': %s\n", argv[1], error->message); + g_error_free (error); + return EXIT_FAILURE; + } + + g_print ("Creating BSender, "); + sender = b_sender_new (); + + b_sender_configure (sender, + movie->width, movie->height, movie->channels, 255); + + for (i = 2; i < argc; i++) + b_sender_add_recipient (sender, -1, argv[i], MCU_LISTENER_PORT, NULL); + + g_print (" added %d recipients.\n", i - 2); + + g_print ("Creating a BMoviePlayer for '%s' ... ", + b_object_get_name (B_OBJECT (movie))); + + module = b_module_new (B_TYPE_MOVIE_PLAYER, + movie->width, movie->height, NULL, + paint, sender, + &error); + + g_object_unref (movie); + + if (!module) + { + g_print ("failed: %s\n", error->message); + + g_object_unref (sender); + return EXIT_FAILURE; + } + g_print ("OK.\n"); + + g_print ("Preparing the BMoviePlayer module ... "); + + g_object_set (G_OBJECT (module), "movie", argv[1], NULL); + + if (!b_module_prepare (module, &error)) + { + g_print ("failed: %s\n", error->message); + + g_object_unref (module); + g_object_unref (sender); + + return EXIT_FAILURE; + } + g_print ("OK.\n"); + + loop = g_main_loop_new (NULL, FALSE); + + g_signal_connect_swapped (G_OBJECT (module), "stop", + G_CALLBACK (g_main_loop_quit), loop); + + g_print ("Start playing ...\n"); + + b_module_start (module); + + g_main_loop_run (loop); + g_main_loop_unref (loop); + + g_print ("Movie finished, quitting.\n"); + + g_object_unref (module); + g_object_unref (sender); + + return EXIT_SUCCESS; +} diff --git a/blib-1.1.7/test/test-movie-writer.c b/blib-1.1.7/test/test-movie-writer.c new file mode 100644 index 0000000..eff12b9 --- /dev/null +++ b/blib-1.1.7/test/test-movie-writer.c @@ -0,0 +1,87 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (C) 2002 The Blinkenlights Crew + * Sven Neumann + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include +#include + +#include "blib/blib.h" + + +int +main (int argc, + char *argv[]) +{ + BMovie *movie; + GType type = G_TYPE_NONE; + GError *error = NULL; + + if (argc < 3) + { + g_printerr ("Usage: %s \n", argv[0]); + return EXIT_FAILURE; + } + + b_init (); + + if (g_strcasecmp (argv[1], "blm") == 0) + type = B_TYPE_MOVIE_BLM; + else if (g_strcasecmp (argv[1], "bml") == 0) + type = B_TYPE_MOVIE_BML; + else if (g_strcasecmp (argv[1], "gif") == 0) + type = B_TYPE_MOVIE_GIF; + else + g_printerr ("Unknown output format, " + "must be \"blm\", \"bml\" or \"gif\".\n"); + + if (!g_type_is_a (type, B_TYPE_MOVIE)) + return EXIT_FAILURE; + + if (strcmp (argv[2], "-")) + movie = b_movie_new_from_file (argv[2], FALSE, &error); + else + movie = b_movie_new_from_fd (0, &error); + + if (!movie) + { + g_return_val_if_fail (error != NULL, EXIT_FAILURE); + + g_printerr ("Error opening '%s': %s\n", argv[2], error->message); + g_error_free (error); + return EXIT_FAILURE; + } + + if (!b_movie_save_as (movie, type, stdout, &error)) + { + g_return_val_if_fail (error != NULL, EXIT_FAILURE); + + g_printerr ("Error writing '%s': %s\n", + b_object_get_name (B_OBJECT (movie)), error->message); + g_error_free (error); + return EXIT_FAILURE; + } + + g_printerr ("successfully wrote '%s' (%dx%d) as %s\n", + movie->title ? movie->title : b_object_get_name (B_OBJECT (movie)), + movie->width, movie->height, g_type_name (type)); + + g_object_unref (movie); + + return EXIT_SUCCESS; +} diff --git a/blib-1.1.7/test/test-receiver.c b/blib-1.1.7/test/test-receiver.c new file mode 100644 index 0000000..e5ac95c --- /dev/null +++ b/blib-1.1.7/test/test-receiver.c @@ -0,0 +1,76 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (C) 2002 The Blinkenlights Crew + * Sven Neumann + * Daniel Mack + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include + +#include "blib/blib.h" + + +static gboolean +callback (BReceiver *rec, + BPacket *packet, + gpointer callback_data) +{ + gint w, h; + + g_print ("\033[2J\033[H"); + g_print ("width %02d, height %02d, channels %02d, maxval %03d\n", + packet->header.mcu_frame_h.width, + packet->header.mcu_frame_h.height, + packet->header.mcu_frame_h.channels, + packet->header.mcu_frame_h.maxval); + + for (h = 0; h < packet->header.mcu_frame_h.height; h++) + { + for (w = 0; w < packet->header.mcu_frame_h.width; w++) + g_print ("%02x ", packet->data[h * packet->header.mcu_frame_h.width + w]); + g_print ("\n"); + } + + return TRUE; /* returning FALSE would stop reception of packets */ +} + +int +main (int argc, + char *argv[]) +{ + BReceiver *receiver; + GMainLoop *loop; + + b_init (); + + g_print ("creating receiver\n"); + receiver = b_receiver_new (callback, NULL); + g_assert (receiver); + + g_print ("making receiver listen\n"); + b_receiver_listen (receiver, 2323); + + g_print ("waiting for packets on port 2323, press ^C to stop\n"); + loop = g_main_loop_new (NULL, FALSE); + g_main_loop_run (loop); + g_main_loop_unref (loop); + loop = NULL; + + g_object_unref (receiver); + + return EXIT_SUCCESS; +} diff --git a/blib-1.1.7/test/test-sender.c b/blib-1.1.7/test/test-sender.c new file mode 100644 index 0000000..49b41dd --- /dev/null +++ b/blib-1.1.7/test/test-sender.c @@ -0,0 +1,67 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (C) 2002 The Blinkenlights Crew + * Sven Neumann + * Daniel Mack + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include + +#include "blib/blib.h" + +int +main (int argc, + char *argv[]) +{ + BSender *sender; + guchar *data; + GError *error = NULL; + gint i; + + if (argc < 2) + { + g_printerr ("Usage: %s +\n", argv[0]); + return EXIT_FAILURE; + } + + b_init (); + + sender = b_sender_new (); + g_assert (sender); + + for (i = 1; i < argc; i++) + { + if (!b_sender_add_recipient (sender, -1, + argv[i], MCU_LISTENER_PORT, &error)) + { + g_printerr (error->message); + return EXIT_FAILURE; + } + } + + b_sender_configure (sender, 26, 20, 1, 255); + + data = g_new (guchar, 20 * 26); + + for (i = 0; i < 5; i++) + b_sender_send_frame (sender, data); + + g_free (data); + g_object_unref (sender); + + return EXIT_SUCCESS; +} diff --git a/blib-1.1.7/test/test-theme-parser.c b/blib-1.1.7/test/test-theme-parser.c new file mode 100644 index 0000000..000ba56 --- /dev/null +++ b/blib-1.1.7/test/test-theme-parser.c @@ -0,0 +1,68 @@ +/* blib - Library of useful things to hack the Blinkenlights + * + * Copyright (C) 2002 The Blinkenlights Crew + * Sven Neumann + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include + +#include "blib/blib.h" + + +int +main (int argc, + char *argv[]) +{ + BTheme *theme; + GError *error = NULL; + + b_init (); + + if (argc < 2) + { + g_printerr ("Usage: %s \n", argv[0]); + return EXIT_FAILURE; + } + + theme = b_theme_new_from_file (argv[1], TRUE, &error); + + if (!theme) + { + g_return_val_if_fail (error != NULL, EXIT_FAILURE); + + g_printerr ("Error opening '%s': %s\n", argv[1], error->message); + g_error_free (error); + return EXIT_FAILURE; + } + + if (!b_theme_load (theme, &error)) + { + g_return_val_if_fail (error != NULL, EXIT_FAILURE); + + g_printerr ("Error parsing '%s': %s\n", + b_object_get_name (B_OBJECT (theme)), error->message); + g_error_free (error); + return EXIT_FAILURE; + } + + g_print ("successfully loaded '%s' (%dx%d)\n", + b_object_get_name (B_OBJECT (theme)), theme->width, theme->height); + + g_object_unref (theme); + + return EXIT_SUCCESS; +} diff --git a/blinkentools-2.9/AUTHORS b/blinkentools-2.9/AUTHORS new file mode 100644 index 0000000..f9c576c --- /dev/null +++ b/blinkentools-2.9/AUTHORS @@ -0,0 +1,9 @@ +Main Authors: + Sven Neumann + Daniel Mack + +HDL mode for gif2blm based on a patch from + Tino Schwarze + +HDL images for blm2gif taken by Dorit Guenter and Nadja Hannaske +and edited by Björn Barnekow. diff --git a/blinkentools-2.9/COPYING b/blinkentools-2.9/COPYING new file mode 100644 index 0000000..d60c31a --- /dev/null +++ b/blinkentools-2.9/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/blinkentools-2.9/ChangeLog b/blinkentools-2.9/ChangeLog new file mode 100644 index 0000000..a1318cb --- /dev/null +++ b/blinkentools-2.9/ChangeLog @@ -0,0 +1,932 @@ +2004-04-22 22:30 neo + + * ChangeLog: Really made 2.9 release. + +2004-04-22 22:29 neo + + * src/Makefile.am: fixed EXTRA_DIST + +2004-04-22 22:26 neo + + * ChangeLog: Made 2.9 release. + +2004-04-22 22:23 neo + + * NEWS, doc/blinkenproxy.1.in, src/blinkenproxy.c: document the + changed blinkenproxy command-line + +2004-04-14 20:16 neo + + * src/blinkenproxy.c: send the first heartbeat immidiately + +2004-04-14 18:59 neo + + * src/blinkenproxy.c: Use the new BProxyServer object. + +2004-04-14 05:17 neo + + * src/blinkenproxy.c: reverted last change, need to come up with a + proper fix + +2004-04-14 04:44 neo + + * src/blinkenproxy.c: don't bind the sender to an already used port + for no good reason + +2004-04-14 04:05 neo + + * src/blinkenproxy.c: only pull from an upstream proxy if there are + any clients + +2004-04-14 03:37 neo + + * src/blinkenproxy.c: Allow to specify a blinkenproxy host on the + command-line from which this blinkenproxy should request packages + from. + +2004-04-13 14:07 tim + + * src/.cvsignore: ignore .DS_Store + +2004-04-11 12:19 neo + + * src/b2image.c: Improved error handling for the case that the call + to link() failed. + +2004-04-09 01:10 neo + + * src/b2image.c: made the --format option mandatory when the tool + is called as b2image + +2004-04-09 00:59 neo + + * doc/b2image.1.in, scripts/b2avi, src/b2image.c, src/bplay.c: Made + the theme parameter for b2image optional. + +2004-04-08 23:12 neo + + * README, doc/b2image.1.in, src/b2image.c: renamed some + command-line options to make way for a --theme option + +2004-04-08 22:27 neo + + * doc/: Makefile.am, b2b.1.in, b2image.1.in: Install symlinks for + the alternative executable names. + +2004-04-08 13:41 neo + + * NEWS, src/b2image.c: fixed --type command-line option + +2004-04-08 13:30 tim + + * src/b2image.c: start numbering frames with 1 to be congruent to + BlinkenPaint an have it reflect the 'number of frames' for the + user + +2004-04-08 11:25 tim + + * src/b2image.c: change image count suffix to five digits because + it looks more professional ;) --- The Goddess Eris Prevails + +2004-04-08 11:23 tim + + * NEWS: update news for b2image + +2004-04-08 11:04 neo + + * src/b2image.c: Do actually parse the --type option and don't set + it to "image" when being called as "b2image". + +2004-04-08 10:58 tim + + * src/b2image.c: error message refered to unkown --theme option - + fixed + +2004-04-08 04:33 neo + + * configure.in, doc/.cvsignore, doc/Makefile.am, doc/b2b.1.in, + doc/b2image.1.in, doc/b2jpeg.1.in, doc/b2png.1.in, + src/.cvsignore, src/Makefile.am, src/b2image.c, src/b2jpeg.c, + src/b2png.c, src/bsnap.c: Combined b2png and b2jpeg into a single + binary b2image. + +2004-04-08 03:49 tim + + * doc/b2b.1.in: added --fps documentation + +2004-04-08 03:47 neo + + * doc/b2jpeg.1.in, doc/b2png.1.in, scripts/b2avi, src/Makefile.am, + src/b2jpeg.c, src/b2png.c, src/bsnap.c: Merged b2png.c and b2jpeg + into bsnap.c. Default not to create links, added --link option + and use it from b2avi. + +2004-04-08 03:36 tim + + * doc/b2b.1.in, src/b2b.c: change speed designation from + 'percentage' to 'factor' + +2004-04-08 02:28 neo + + * src/: b2jpeg.c, b2png.c: Create hardlinks for duplicate frames; + speeds up b2avi quite a bit. + +2004-04-08 01:44 tim + + * src/bmovie-mng.c: Changed tEXt element name from 'title' to + 'Title' as described in the MNG spec + +2004-04-07 20:25 neo + + * scripts/b2avi: minor improvements to the script + +2004-04-07 20:20 neo + + * ChangeLog, Makefile.am, doc/b2jpeg.1.in, doc/b2mng.1.in, + doc/b2png.1.in, doc/bsend.1.in, scripts/b2avi, src/b2jpeg.c, + src/b2png.c: Fixed bug in b2png and b2jpeg. Mention --verbose in + the man-pages. Added a simple shell script to create MPEG-4 AVI + files using blinkentools and mencoder. + +2004-04-07 19:25 neo + + * src/: b2jpeg.c, b2mng.c, b2png.c: document the --verbose + command-line option + +2004-04-07 19:06 neo + + * src/: b2jpeg.c, b2png.c: be verbose when --all and --verbose is + specified + +2004-04-07 18:47 neo + + * src/b2b.c: Added the new b2b option --fps. Allows to set a fixed + framerate. + +2004-04-07 18:44 neo + + * configure.in: output the blib version also + +2004-04-07 17:53 neo + + * configure.in, src/b2jpeg.c: Generate the b2jpeg man-page. + Corrected a minor problem with b2jpeg --all. + +2004-04-07 16:26 neo + + * NEWS, README, doc/.cvsignore, doc/Makefile.am, doc/b2jpeg.1.in, + doc/b2png.1.in, src/.cvsignore, src/Makefile.am, src/b2jpeg.c, + src/b2png.c, src/bmovie-mng.c: Changed b2png command-line + options. Added b2jpeg, basically a copy of b2png. + +2004-04-07 14:26 neo + + * doc/.cvsignore, src/b2png.c, src/bmovie-mng.c: Follow blib + changes. + +2004-04-07 01:54 neo + + * NEWS, README, configure.in, doc/.cvsignore, doc/Makefile.am, + doc/b2mng.1.in, doc/b2png.1.in, src/b2png.c: number frames + starting from 1 (?) added b2png man-page, updated NEWS and README + +2004-04-07 01:30 neo + + * src/b2png.c: Follow changes in BViewPixbuf. Added --all + command-line option to b2png. + +2004-04-07 00:19 neo + + * configure.in, src/.cvsignore, src/Makefile.am, src/b2png.c, + src/bmovie-mng.c: Depend on blib-1.1.7, use b_rectangle utilities + from bmovie-mng.c. Added rough prototype of b2png. + +2004-04-06 04:06 tim + + * doc/b2mng.1.in: typo fixed + +2004-04-06 03:46 neo + + * ChangeLog: Made 2.8 release. + +2004-04-06 03:19 tim + + * doc/b2mng.1.in: more highlighting for the command + +2004-04-06 03:11 neo + + * src/bmovie-mng.h: updated date in the header file + +2004-04-02 19:41 neo + + * NEWS, README, configure.in: Bumped version number to 2.8, updated + NEWS and README. + +2004-04-02 19:35 neo + + * doc/b2mng.1.in, src/b2mng.c, src/bmovie-mng.c, src/bmovie-mng.h: + Added --loops command-line option to b2mng similar to the bsend + options. + +2004-04-02 18:47 neo + + * configure.in, doc/.cvsignore, doc/Makefile.am, doc/b2b.1.in, + doc/b2mng.1.in: Added a manpage for b2mng. Mention b2mng(1) in + the b2b manpage. + +2004-04-02 17:47 neo + + * src/bmovie-mng.c: Clip the frame to the bounding box of changed + pixels and skip windows that fall completely outside the bounding + box. Makes a lot of our animations a good deal smaller. + +2004-04-01 12:48 neo + + * src/bmovie-mng.c: Store info about the loaded image and don't use + BASI/PAST if the loaded image is already a single window with + zero offsets. + +2004-04-01 12:25 neo + + * src/bmovie-mng.c: merged PNG and JNG parsers + +2004-04-01 11:48 neo + + * src/bmovie-mng.c: write an empty FRAM chunk when the delay does + _not_ change + +2004-03-31 23:19 neo + + * src/bmovie-mng.c: added support for JNG image data (w/o alpha + channel) + +2004-03-31 22:25 neo + + * src/bmovie-mng.c: use MNG_COLORTYPE_RGBA for more flexibility + +2004-03-31 19:45 neo + + * src/bmovie-mng.c: optimize using LOOP/ENDL + +2004-03-31 18:57 neo + + * src/bmovie-mng.c: prepare for optimizations using LOOP/ENDL, not + used yet + +2004-03-31 13:35 neo + + * src/bmovie-mng.c: Optimize the MNG file by doing the clipping + beforehand instead of doing it for each and every window. Cuts + down file-size quite a bit but seems to crash libmng :( + +2004-03-30 04:23 neo + + * src/b2mng.c: made the --verbose mode more verbose + +2004-03-30 04:13 neo + + * src/b2mng.c: added --verbose command-line option + +2004-03-30 04:01 neo + + * src/bmovie-mng.c: first working version :) + +2004-03-30 03:50 neo + + * src/bmovie-mng.c: redone large parts of BMovieMNG based on + suggestions by Gerard Juyn on mng-list + +2004-03-17 21:12 neo + + * src/bmovie-mng.c: corrected clipping parameters + +2004-03-17 12:55 neo + + * src/bmovie-mng.c: check PNG file signature before accessing PNG + chunks from a file + +2004-03-17 12:36 neo + + * src/bmovie-mng.c: Don't hide objects from the last frame. I don't + think it should be needed and at the moment, nothing is visible + anyway... + +2004-03-17 12:34 neo + + * src/bmovie-mng.c: better loop handling, don't start all from the + beginning + +2004-03-17 12:13 neo + + * src/bmovie-mng.c: further reduced file size by sorting before + compressing SHOW calls + +2004-03-17 02:30 neo + + * src/bmovie-mng.c: more cleanup before attempting a new + approach... + +2004-03-17 01:59 neo + + * src/bmovie-mng.c: minimal cleanup + +2004-03-17 01:30 neo + + * src/bmovie-mng.c: compress adjacent shows + +2004-03-17 00:37 neo + + * src/bmovie-mng.c: some fixes to the MNG header, don't specify a + wrong number of layers + +2004-03-17 00:30 neo + + * src/bmovie-mng.c: Don't set the background image invisible, + stupid! + +2004-03-17 00:25 neo + + * src/bmovie-mng.c: removed optimizations that only made the + created files larger :( + +2004-03-17 00:06 neo + + * configure.in: explicitely link zlib with libmng + +2004-03-16 23:57 neo + + * src/: b2mng.c, bmovie-mng.c: started to work on b2mng again ... + +2004-03-16 23:55 neo + + * src/b2b.c: fixed bug in short options string + +2004-03-10 00:10 neo + + * ChangeLog, NEWS, README: Make 2.7 release. + +2004-02-17 10:41 tim + + * doc/: b2b.1.in, blinkenproxy.1.in, bmultiplexer.1.in, bplay.1.in, + bsend.1.in: added home page link + +2004-02-17 09:21 tim + + * doc/.cvsignore: ignore more + +2004-02-17 08:57 tim + + * configure.in, doc/Makefile.am, doc/blinkenproxy.1.in, + doc/bmultiplexer.1.in: more man page updates + +2004-02-17 08:55 tim + + * .cvsignore: ignore mac stuff + +2004-02-17 06:07 tim + + * doc/bsend.1.in: typo fixed + +2004-02-17 04:24 tim + + * src/b2b.c: changed loop-hint options to x and X + +2004-02-17 04:21 tim + + * doc/: b2b.1.in, bplay.1.in, bsend.1.in: man page changes + +2004-02-17 03:46 neo + + * src/b2b.c: changed --loop command-line handling once more + +2004-02-17 03:30 neo + + * src/b2mng.c: removed leading newline from usage information + +2004-02-17 03:24 neo + + * src/: b2b.c, bplay.c, bsend.c: command-line cleanup + +2004-02-17 03:15 tim + + * Makefile.am, configure.in, doc/.cvsignore, doc/Makefile.am, + doc/b2b.1.in, doc/bplay.1.in, doc/bsend.1.in: new manual pages + +2004-02-17 03:14 neo + + * src/bsend.c: fixed implementation of loops + +2004-02-17 02:02 neo + + * ChangeLog, src/bsend.c: added speed and reverse command-line + arguments + +2004-02-17 01:50 neo + + * configure.in, src/bsend.c: Bumped version number to 2.7, depend + on blib-1.1.6. Set the BSender verbosity in bsend from the + command-line option. + +2004-02-17 01:44 neo + + * src/: b2b.c, b2mng.c, blinkenproxy.c, bplay.c, bsend.c: more + command-line cleanup + +2004-02-17 01:18 neo + + * src/: b2b.c, b2mng.c, blinkenproxy.c, bplay.c, bsend.c: + command-line options cleanup + +2004-02-16 23:23 neo + + * src/b2b.c: renamed --info to --meta to avoid a clash of the short + option with --invert + +2004-01-20 01:59 neo + + * ChangeLog, NEWS, README: Made 2.6 release. + +2004-01-07 21:11 neo + + * configure.in: bumped version to 2.6 + +2004-01-07 21:10 neo + + * src/bsend.c: On win32 use Sleep() instead of usleep(). + +2004-01-07 20:15 neo + + * src/bplay.c: same fix here + +2004-01-07 20:11 neo + + * src/blinkenproxy.c: moved variable inside the ifdefs so the code + compiles on win32 + +2004-01-06 23:49 neo + + * src/: blinkenproxy.c, bplay.c: Don't use UNIX signals on Win32. + +2003-12-31 04:14 neo + + * ChangeLog: Made 2.5 release. + +2003-12-31 04:13 neo + + * ChangeLog, NEWS, README, configure.in: Updates for the 2.5 + release. + +2003-12-31 03:42 neo + + * src/bplay.c: Install a signal handler to catch Ctrl-C and close + the aalib context. + +2003-12-31 03:30 neo + + * src/bplay.c: Implemented bplay --loop. + +2003-12-31 03:19 neo + + * configure.in, src/.cvsignore, src/Makefile.am, src/bplay.c: Added + a new tool named bplay, that plays movies on the console using + the new aa view. + +2003-12-25 21:10 neo + + * ChangeLog: Made 2.4 release. + +2003-12-25 21:09 neo + + * Makefile.am: Fixed EXTRA_DIST rule + +2003-12-25 21:05 neo + + * ChangeLog, Makefile.am, NEWS, README, configure.in: Added debian + files to EXTRA_DIST. Bumped the version to 2.4. Updated the + README and NEWS files. + +2003-12-25 20:40 neo + + * src/blinkenproxy.c: Cleaned up command-line handling. + +2003-12-25 19:38 neo + + * debian/: .cvsignore, changelog, control, copyright, dirs, docs, + rules: Added first draft of rules to build a debian package. + Needs more work. + +2003-12-24 00:41 neo + + * configure.in, src/blinkenproxy.c: Depend on blib-1.1.1. Check + the heartbeat protocol version. Sanity check values before + reconfiguring the sender. + +2003-12-22 13:46 neo + + * src/blinkenproxy.c: Print the number of clients when receiving + SIGUSR1. + +2003-12-22 13:38 neo + + * src/blinkenproxy.c: Fixed a stupid bug that caused clients to be + removed twice. Caused the proxy to crash pretty soon. + +2003-12-21 21:32 neo + + * ChangeLog: Made 2.3 (development) release. + +2003-12-21 20:41 neo + + * ChangeLog, NEWS, README, configure.in: Updates for the 2.3 + development release. + +2003-12-21 18:31 neo + + * src/blinkenproxy.c: Fixed a minor issue with the signal handler. + +2003-12-21 17:58 neo + + * src/blinkenproxy.c: Install a signal handler for SIGINT so you + can cleanly quit the proxy by pressing Ctrl-C. + +2003-12-21 17:49 neo + + * src/blinkenproxy.c: Need to create BSender before using it :-/ + Added some useful output and removed useless debugging stuff. + +2003-12-21 14:36 neo + + * src/blinkenproxy.c: Rewrote blinkenproxy: + + Keep a hash table of clients. For each client, register a timeout + that removes it after 12 * B_HEARTBEAT_INTERVAL. If a hearbeat + packet arrives, remove this timeout and set a new one. + +2003-12-21 13:53 neo + + * src/: b2b.c, b2mng.c, blinkenproxy.c, bsend.c: Made all tools + call b_init(), not g_type_init(). + +2003-12-21 13:43 neo + + * src/blinkenproxy.c: Follow BReceiver changes in blib. + +2003-12-21 12:12 neo + + * configure.in: We use the blib-1.1 API now, so depend on it. + +2003-12-21 12:09 neo + + * src/: blinkenproxy.c, bmultiplexer.c, bsend.c: Follow BSender API + change and pass -1 as source port. + +2003-12-19 23:48 neo + + * src/blinkenproxy.c: Check magic packet headers before accessing + the data. + +2003-12-19 03:32 neo + + * src/blinkenproxy.c: Follow blib API changes. + +2003-12-19 02:47 neo + + * configure.in: Removed unnecessary autoconf macro. + +2003-05-22 18:22 hannes + + * src/blinkenproxy.c: cleaned up code + +2003-05-21 02:02 hannes + + * src/: blinkenproxy.c, bmultiplexer.c: blinkenproxy + +2003-04-26 02:09 hannes + + * src/.cvsignore: added blinkenproxy + +2003-04-26 02:07 hannes + + * src/: Makefile.am, blinkenproxy.c: blinkenproxy + +2002-12-28 14:49 neo + + * ChangeLog: Made 2.2 release. + +2002-12-28 14:41 neo + + * NEWS, README: Updates for the 2.2. release. + +2002-12-28 03:20 neo + + * configure.in, src/Makefile.am, src/b2b.c: Allow to gamma adjust + movies using b2b --gamma . Requires blib >= 1.0.0. + +2002-12-27 19:05 neo + + * ChangeLog: Updated ChangeLog for 2.2 release. + +2002-12-27 15:30 neo + + * autogen.sh, configure.in, src/b2b.c, src/b2mng.c, src/bsend.c: + Warn if getopt_long is not available and mention that long + command-line options won't work. + +2002-12-08 16:25 neo + + * .cvsignore: updated .cvsignore for newer versions of automake + +2002-10-21 11:30 neo + + * NEWS, configure.in, src/bsend.c: bsend uses localhost if no host + is specified. Bumped version number to 2.2. + +2002-09-29 18:37 neo + + * ChangeLog: Made 2.1 Release. + +2002-09-29 18:34 neo + + * AUTHORS, README: updates + +2002-09-29 18:27 neo + + * ChangeLog, NEWS, configure.in, src/bmultiplexer.c: final touch + +2002-09-29 17:41 neo + + * src/b2b.c: Include number of frames in info output. + +2002-09-28 17:18 neo + + * src/b2b.c: improved output of --help + +2002-09-28 17:16 neo + + * src/b2b.c: Added --info command-line flag. + +2002-09-27 18:12 neo + + * NEWS, src/bmultiplexer.c: Use MCU_LISTENER_PORT as defined in + bprotocol.h. Updated NEWS. + +2002-09-27 18:06 neo + + * src/.cvsignore: shut up CVS + +2002-09-27 17:13 daniel + + * src/: fft.c, fft.h: wech. + +2002-09-27 16:58 daniel + + * configure.in: wech. + +2002-09-27 16:54 daniel + + * src/: Makefile.am, audio.c, audio.h, bsound.c, bsound.h, midi.c, + midi.h: removed bsound - will move to blinkenmedia + +2002-09-25 17:40 daniel + + * src/bmultiplexer.c: verbosity + +2002-09-25 17:36 daniel + + * src/: Makefile.am, bmultiplexer.c: added bmultiplex, a udp + multiplexer + +2002-09-23 13:17 neo + + * src/bsend.c: Use MCU_LISTENER_PORT as defined in + blib/bprotocol.h. + +2002-09-21 20:35 daniel + + * src/: bsound.c, bsound.h: started to rework bsound + +2002-09-19 19:26 neo + + * configure.in: Use AC_CHECK_LIB() to test for libesd. + +2002-09-19 14:12 neo + + * src/bsend.c: Ignore the movies loop flag. The new default is not + to loop; use --loop to loop the movie. + +2002-09-19 14:05 daniel + + * src/audio.c: fix + +2002-09-19 13:51 daniel + + * src/audio.c: fix + +2002-09-13 18:05 daniel + + * src/: audio.c, audio.h, bsound.c: more blinkensound + +2002-09-13 17:47 daniel + + * src/: audio.c, bsound.c: lots of work in bsound + +2002-09-10 15:51 neo + + * src/bsend.c: Changed output on error. + +2002-09-10 04:54 neo + + * README: typo + +2002-09-10 04:10 daniel + + * src/Makefile.am: -lm + +2002-09-10 04:08 daniel + + * configure.in, src/Makefile.am, src/audio.c: esd stuff + +2002-09-10 02:29 daniel + + * configure.in, src/.cvsignore, src/Makefile.am, src/audio.c, + src/audio.h, src/bsound.c, src/bsound.h, src/fft.c, src/fft.h, + src/midi.c, src/midi.h: copied sound stuff from old repository. + does not work at all, dont try this at home + +2002-09-09 17:00 daniel + + * src/: b2b.c, b2mng.c: include fixes + +2002-09-05 14:24 neo + + * configure.in, src/b2b.c, src/bsend.c: Use new parser functions + from blib. + +2002-09-04 18:41 neo + + * src/bsend.c: Better error reporting. + +2002-09-04 15:55 neo + + * src/bsend.c: Output more information about the movie that is + being played. + +2002-09-04 15:45 neo + + * src/bsend.c: Improved command-line handling. Allow to set/unset + the loop flag. Read from stdin when - is given as filename. Allow + to specify host:port. + +2002-09-04 05:27 neo + + * ChangeLog, README, configure.in: Made 0.5 release, depends on + blib >= 0.5. + +2002-09-04 04:08 neo + + * ChangeLog, NEWS, README, src/.cvsignore, src/Makefile.am, + src/bsend.c: Moved bsend utility from blinkensim to blinkentools. + +2002-09-03 17:36 neo + + * NEWS, src/bmovie-mng.c: misc minor changes + +2002-09-03 12:45 neo + + * src/bmovie-mng.c: Some code cleanup. + +2002-09-03 11:03 neo + + * ChangeLog, NEWS, README, src/Makefile.am, src/b2mng.c, + src/bmovie-mng.c, src/bmovie-mng.h: Moved MNG functions into a + seperate file. + +2002-09-03 02:35 neo + + * configure.in, src/b2b.c: Check for blib >= 0.4. When converting + from GIF to BML, default to bits = 4. + +2002-09-03 00:32 neo + + * README: Updated README. + +2002-09-03 00:25 neo + + * .cvsignore: shut up CVS + +2002-09-03 00:23 neo + + * src/b2b.c: Allow to set/unset the loop flag via --loop. + +2002-09-03 00:07 neo + + * src/b2mng.c: Added --loop command-line option to force looped + animations. + +2002-09-02 23:54 neo + + * src/b2mng.c: Improved b2mng. + +2002-09-02 22:42 neo + + * configure.in, src/.cvsignore, src/Makefile.am, src/b2mng.c: Added + first draft of b2mng. Still has timing problems and no theme + support. + +2002-09-02 22:03 daniel + + * src/: blm2gif.c, blmplay.c, gif2blm.c: included config.h in a + couple of files to make the old tools build again. + +2002-09-02 16:54 neo + + * src/b2b.c: Added a sanity checks so we catch the case that blib + doesn't set an error (which is a bug in blib of course). + +2002-09-02 12:33 neo + + * configure.in, src/b2b.c: Made support for long command-line + options optional. + +2002-08-30 16:16 neo + + * src/b2b.c: Added flip effect (unfortunately vertical flip is + broken in blib-0.3). + +2002-08-30 15:07 neo + + * src/b2b.c: Use the effects as provided by blib. + +2002-08-30 13:53 neo + + * configure.in, src/Makefile.am: Create symlinks b2blm, b2bml and + b2gif. + +2002-08-30 13:45 neo + + * configure.in, src/.cvsignore, src/Makefile.am, src/b2b.c: Bumped + version number to 2.0. Depend on blib >= 0.3. Added new tool b2b + which will replace the old ones. Left old code in place since it + doesn't collide and it has some special features not (yet) in + b2b. + +2002-01-31 13:35 tim + + * README: changed documentation on gif2blm --hdl feature + +2002-01-29 22:45 neo + + * AUTHORS, NEWS, README, src/Makefile.am, src/blm2gif.c, + src/gif2blm.c, src/hdl.h: Added --hdl mode to gif2blm based on a + patch by Tino Schwarze. Very cool feature ;-) + +2002-01-29 21:53 neo + + * NEWS, configure.in, src/.cvsignore, src/Makefile.am, + src/blm2gif.c, src/hdl-huge.h, src/hdl.h: Added --hdl-huge mode + to blm2gif. Bumped version number to 1.1. + +2001-11-29 17:19 neo + + * ChangeLog, NEWS, configure.in: Made 1.0 release. + +2001-11-21 19:55 neo + + * src/blmplay.c: Rewrote mysleep() function. Hopefully works better + on MacOS X now. + +2001-11-21 04:09 neo + + * ChangeLog, src/blmplay.c: 2001-11-21 Sven Neumann + + + * src/blmplay.c: improved frame timing. + +2001-11-21 02:34 neo + + * ChangeLog, NEWS, README, configure.in, src/.cvsignore, + src/Makefile.am, src/blm2gif.c, src/blmplay.c, src/blutils.c, + src/blutils.h: 2001-11-21 Sven Neumann + + * NEWS + * README + * configure.in: Made 0.9.2 release. + + * src/Makefile.am: + * src/blutils.[ch]: new files with common code to read + blm files. + + * src/blm2gif.c: use routine from blutils. + + * src/blmplay.c: new tool to play blm files on the text + console. + +2001-11-21 00:18 neo + + * .cvsignore, AUTHORS, ChangeLog, Makefile.am, NEWS, README, + autogen.sh, configure.in, src/.cvsignore, src/Makefile.am, + src/blm2gif.c, src/gif-load.c, src/gif-load.h, src/gif-save.c, + src/gif-save.h, src/gif2blm.c, src/hdl-large.h, src/hdl-medium.h, + src/hdl-small.h, src/hdl.h: Import of blinkentools version 0.9.1 + into CVS. + diff --git a/blinkentools-2.9/INSTALL b/blinkentools-2.9/INSTALL new file mode 100644 index 0000000..54caf7c --- /dev/null +++ b/blinkentools-2.9/INSTALL @@ -0,0 +1,229 @@ +Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software +Foundation, Inc. + + This file is free documentation; the Free Software Foundation gives +unlimited permission to copy, distribute and modify it. + +Basic Installation +================== + + These are generic installation instructions. + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, and a +file `config.log' containing compiler output (useful mainly for +debugging `configure'). + + It can also use an optional file (typically called `config.cache' +and enabled with `--cache-file=config.cache' or simply `-C') that saves +the results of its tests to speed up reconfiguring. (Caching is +disabled by default to prevent problems with accidental use of stale +cache files.) + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If you are using the cache, and at +some point `config.cache' contains results you don't want to keep, you +may remove or edit it. + + The file `configure.ac' (or `configure.in') is used to create +`configure' by a program called `autoconf'. You only need +`configure.ac' if you want to change it or regenerate `configure' using +a newer version of `autoconf'. + +The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. If you're + using `csh' on an old version of System V, you might need to type + `sh ./configure' instead to prevent `csh' from trying to execute + `configure' itself. + + Running `configure' takes awhile. While running, it prints some + messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Optionally, type `make check' to run any self-tests that come with + the package. + + 4. Type `make install' to install the programs and any data files and + documentation. + + 5. You can remove the program binaries and object files from the + source code directory by typing `make clean'. To also remove the + files that `configure' created (so you can compile the package for + a different kind of computer), type `make distclean'. There is + also a `make maintainer-clean' target, but that is intended mainly + for the package's developers. If you use it, you may have to get + all sorts of other programs in order to regenerate files that came + with the distribution. + +Compilers and Options +===================== + + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. Run `./configure --help' +for details on some of the pertinent environment variables. + + You can give `configure' initial values for configuration parameters +by setting variables in the command line or in the environment. Here +is an example: + + ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix + + *Note Defining Variables::, for more details. + +Compiling For Multiple Architectures +==================================== + + You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you must use a version of `make' that +supports the `VPATH' variable, such as GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. + + If you have to use a `make' that does not support the `VPATH' +variable, you have to compile the package for one architecture at a +time in the source code directory. After you have installed the +package for one architecture, use `make distclean' before reconfiguring +for another architecture. + +Installation Names +================== + + By default, `make install' will install the package's files in +`/usr/local/bin', `/usr/local/man', etc. You can specify an +installation prefix other than `/usr/local' by giving `configure' the +option `--prefix=PATH'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +give `configure' the option `--exec-prefix=PATH', the package will use +PATH as the prefix for installing programs and libraries. +Documentation and other data files will still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like `--bindir=PATH' to specify different values for particular +kinds of files. Run `configure --help' for a list of the directories +you can set and what kinds of files go in them. + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + +Optional Features +================= + + Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + +Specifying the System Type +========================== + + There may be some features `configure' cannot figure out +automatically, but needs to determine by the type of machine the package +will run on. Usually, assuming the package is built to be run on the +_same_ architectures, `configure' can figure that out, but if it prints +a message saying it cannot guess the machine type, give it the +`--build=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name which has the form: + + CPU-COMPANY-SYSTEM + +where SYSTEM can have one of these forms: + + OS KERNEL-OS + + See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the machine type. + + If you are _building_ compiler tools for cross-compiling, you should +use the `--target=TYPE' option to select the type of system they will +produce code for. + + If you want to _use_ a cross compiler, that generates code for a +platform different from the build platform, you should specify the +"host" platform (i.e., that on which the generated programs will +eventually be run) with `--host=TYPE'. + +Sharing Defaults +================ + + If you want to set default values for `configure' scripts to share, +you can create a site shell script called `config.site' that gives +default values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Defining Variables +================== + + Variables not defined in a site shell script can be set in the +environment passed to `configure'. However, some packages may run +configure again during the build, and the customized values of these +variables may be lost. In order to avoid this problem, you should set +them in the `configure' command line, using `VAR=value'. For example: + + ./configure CC=/usr/local2/bin/gcc + +will cause the specified gcc to be used as the C compiler (unless it is +overridden in the site shell script). + +`configure' Invocation +====================== + + `configure' recognizes the following options to control how it +operates. + +`--help' +`-h' + Print a summary of the options to `configure', and exit. + +`--version' +`-V' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`--cache-file=FILE' + Enable the cache: use and save the results of the tests in FILE, + traditionally `config.cache'. FILE defaults to `/dev/null' to + disable caching. + +`--config-cache' +`-C' + Alias for `--cache-file=config.cache'. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. To + suppress all normal output, redirect it to `/dev/null' (any error + messages will still be shown). + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`configure' also accepts some other, not widely useful, options. Run +`configure --help' for more details. + diff --git a/blinkentools-2.9/Makefile.am b/blinkentools-2.9/Makefile.am new file mode 100644 index 0000000..53f442a --- /dev/null +++ b/blinkentools-2.9/Makefile.am @@ -0,0 +1,13 @@ +## Makefile.am for blinkentools + +SUBDIRS = src doc + +EXTRA_DIST = \ + autogen.sh \ + debian/changelog \ + debian/control \ + debian/copyright \ + debian/dirs \ + debian/docs \ + debian/rules \ + scripts/b2avi diff --git a/blinkentools-2.9/Makefile.in b/blinkentools-2.9/Makefile.in new file mode 100644 index 0000000..25e3ae8 --- /dev/null +++ b/blinkentools-2.9/Makefile.in @@ -0,0 +1,543 @@ +# Makefile.in generated by automake 1.7.9 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = . + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +AA_CFLAGS = @AA_CFLAGS@ +AA_LIBS = @AA_LIBS@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BLIB_CFLAGS = @BLIB_CFLAGS@ +BLIB_LIBS = @BLIB_LIBS@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ENABLE_OLDTOOLS_FALSE = @ENABLE_OLDTOOLS_FALSE@ +ENABLE_OLDTOOLS_TRUE = @ENABLE_OLDTOOLS_TRUE@ +EXEEXT = @EXEEXT@ +HAVE_AA_FALSE = @HAVE_AA_FALSE@ +HAVE_AA_TRUE = @HAVE_AA_TRUE@ +HAVE_LIBMNG_FALSE = @HAVE_LIBMNG_FALSE@ +HAVE_LIBMNG_TRUE = @HAVE_LIBMNG_TRUE@ +HAVE_PIXBUF_FALSE = @HAVE_PIXBUF_FALSE@ +HAVE_PIXBUF_TRUE = @HAVE_PIXBUF_TRUE@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBMNG = @LIBMNG@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ +MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ +MAKEINFO = @MAKEINFO@ +OBJEXT = @OBJEXT@ +PACAKGE = @PACAKGE@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PIXBUF_CFLAGS = @PIXBUF_CFLAGS@ +PIXBUF_LIBS = @PIXBUF_LIBS@ +PKG_CONFIG = @PKG_CONFIG@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +bindir = @bindir@ +build_alias = @build_alias@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +SUBDIRS = src doc + +EXTRA_DIST = \ + autogen.sh \ + debian/changelog \ + debian/control \ + debian/copyright \ + debian/dirs \ + debian/docs \ + debian/rules \ + scripts/b2avi + +subdir = . +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = config.h +CONFIG_CLEAN_FILES = +DIST_SOURCES = + +RECURSIVE_TARGETS = info-recursive dvi-recursive pdf-recursive \ + ps-recursive install-info-recursive uninstall-info-recursive \ + all-recursive install-data-recursive install-exec-recursive \ + installdirs-recursive install-recursive uninstall-recursive \ + check-recursive installcheck-recursive +DIST_COMMON = README $(srcdir)/Makefile.in $(srcdir)/configure AUTHORS \ + COPYING ChangeLog INSTALL Makefile.am NEWS aclocal.m4 \ + config.guess config.h.in config.sub configure configure.in \ + depcomp install-sh missing mkinstalldirs +DIST_SUBDIRS = $(SUBDIRS) +all: config.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: + +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu Makefile +Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe) + +$(top_builddir)/config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck +$(srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES) + cd $(srcdir) && $(AUTOCONF) + +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ configure.in + cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) + +config.h: stamp-h1 + @if test ! -f $@; then \ + rm -f stamp-h1; \ + $(MAKE) stamp-h1; \ + else :; fi + +stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status config.h + +$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOHEADER) + touch $(srcdir)/config.h.in + +distclean-hdr: + -rm -f config.h stamp-h1 +uninstall-info-am: + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @set fnord $$MAKEFLAGS; amf=$$2; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +mostlyclean-recursive clean-recursive distclean-recursive \ +maintainer-clean-recursive: + @set fnord $$MAKEFLAGS; amf=$$2; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ETAGS = etags +ETAGSFLAGS = + +CTAGS = ctags +CTAGSFLAGS = + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique + +TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if (etags --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + else \ + include_option=--include; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -f $$subdir/TAGS && \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)$$tags$$unique" \ + || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique + +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = . +distdir = $(PACKAGE)-$(VERSION) + +am__remove_distdir = \ + { test ! -d $(distdir) \ + || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -fr $(distdir); }; } + +GZIP_ENV = --best +distuninstallcheck_listfiles = find . -type f -print +distcleancheck_listfiles = find . -type f -print + +distdir: $(DISTFILES) + $(am__remove_distdir) + mkdir $(distdir) + $(mkinstalldirs) $(distdir)/debian $(distdir)/doc $(distdir)/scripts + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d $(distdir)/$$subdir \ + || mkdir $(distdir)/$$subdir \ + || exit 1; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" \ + distdir=../$(distdir)/$$subdir \ + distdir) \ + || exit 1; \ + fi; \ + done + -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r $(distdir) +dist-gzip: distdir + $(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) + +dist dist-all: distdir + $(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + $(am__remove_distdir) + GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(AMTAR) xf - + chmod -R a-w $(distdir); chmod a+w $(distdir) + mkdir $(distdir)/_build + mkdir $(distdir)/_inst + chmod a-w $(distdir) + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && cd $(distdir)/_build \ + && ../configure --srcdir=.. --prefix="$$dc_install_base" \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && $(mkinstalldirs) "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist-gzip \ + && rm -f $(distdir).tar.gz \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck + $(am__remove_distdir) + @echo "$(distdir).tar.gz is ready for distribution" | \ + sed 'h;s/./=/g;p;x;p;x' +distuninstallcheck: + @cd $(distuninstallcheck_dir) \ + && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: check-recursive +all-am: Makefile config.h +installdirs: installdirs-recursive +installdirs-am: + +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-hdr distclean-tags + +dvi: dvi-recursive + +dvi-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-recursive + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-info-am + +uninstall-info: uninstall-info-recursive + +.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am clean \ + clean-generic clean-recursive ctags ctags-recursive dist \ + dist-all dist-gzip distcheck distclean distclean-generic \ + distclean-hdr distclean-recursive distclean-tags distcleancheck \ + distdir distuninstallcheck dvi dvi-am dvi-recursive info \ + info-am info-recursive install install-am install-data \ + install-data-am install-data-recursive install-exec \ + install-exec-am install-exec-recursive install-info \ + install-info-am install-info-recursive install-man \ + install-recursive install-strip installcheck installcheck-am \ + installdirs installdirs-am installdirs-recursive \ + maintainer-clean maintainer-clean-generic \ + maintainer-clean-recursive mostlyclean mostlyclean-generic \ + mostlyclean-recursive pdf pdf-am pdf-recursive ps ps-am \ + ps-recursive tags tags-recursive uninstall uninstall-am \ + uninstall-info-am uninstall-info-recursive uninstall-recursive + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/blinkentools-2.9/NEWS b/blinkentools-2.9/NEWS new file mode 100644 index 0000000..77579a9 --- /dev/null +++ b/blinkentools-2.9/NEWS @@ -0,0 +1,78 @@ +Version 2.9 +----------- +- Let blinkenproxy use the new BProxyServer object from blib. +- Allow hierachical blinkenproxies. +- Added --fps command-line option for b2b. +- Added new tool b2image, based on BViewPixbuf. + Allows creation of PNG, JPEG and BMP still image files. +- Added example script b2avi. Uses b2b, b2image and mencoder to create + MPEG-4 movies from Blinkenlights Movie files. + +Version 2.8 +----------- +- Implemented theme mode for b2mng, added b2mng man-page. + +Version 2.7 +----------- +- Cleaned up command-line options, added some new ones. +- Added manpages (so that you know what changed...) + +Version 2.6 +----------- +- Added Win32 port. + +Version 2.5 +----------- +- Added bplay, a text console movie player based on blib-aa. + +Version 2.4 +----------- +- Fixed some bugs in blinkenproxy. +- Added rules to build a debian package. + +Version 2.3 (development release using blib-1.1) +----------- +- Added blinkenproxy. + +Version 2.2 +----------- +- Added --gamma option to b2b. +- Made bsend send to localhost if no host is specified. + +Version 2.1 +----------- +- Added bmultiplexer. +- Improved bsend and b2b. + +Version 2.0 - the next generation blinkentools +---------------------------------------------- +- Added b2b, the swiss army knife of blinkenlights. +- Added a first prototype of b2mng. +- Added bsend, a simple movie sender that works nicely with blinkensim. +- Declared the old tools blm2gif, gif2blm and blmplay as obsolete. + You can still build them by passing --enable-oldtools to configure. + + +Version 1.1 +----------- +- Added --hdl-huge mode to blm2gif. +- Added --hdl mode to gif2blm based on a patch from + Tino Schwarze . + +Version 1.0 +----------- +- Fixed blmplay timing. +- Declared code as stable. + +Version 0.9.2 +------------- +- Added blmplay. +- Moved common code into blutils.[ch]. + +Version 0.9.1 +------------- +- Improved GIF optimization of blm2gif. Up to 40% smaller files. + +Version 0.9 +----------- +- Initial public release, contains blm2gif and gif2blm. diff --git a/blinkentools-2.9/README b/blinkentools-2.9/README new file mode 100644 index 0000000..52f70dd --- /dev/null +++ b/blinkentools-2.9/README @@ -0,0 +1,66 @@ +This is version 2.9 of blinkentools, the next generation set of +command-line utilities for Blinkenlights. + +Check out http://www.blinkenlights.de/ to learn more about the +Blinkenlights project. + +This release of blinkentools includes the following tools: + + b2b - a converter between the different formats for Blinkenlights movies. + It is best used thru one of its aliases: b2blm, b2bml and b2gif. + + b2mng - converts Blinkenlights movies to MNG files. + b2png - converts single Blinkenlights movie frames to PNG images. + b2jpeg - converts single Blinkenlights movie frames to JPEG images. + (these three tools use the same themes that blinkensim uses) + + blinkenproxy - an advanced multiplexer that acts as a server from which + clients can request a stream of Blinkenlights UDP packets + + bmultiplexer - forwards a stream of Blinkenlights UDP packets to multiple + recipients. + + bplay - shows Blinkenlights movies on the text console (needs aalib) + + bsend - reads Blinkenlights movies and sends them over the net using the + Blinkenlights network protocol. + +If you pass the --enable-oldtools option to configure, the following +obsoleted tools are built as well: + + blm2gif - creates animated GIFs from Blinkenlights movies + gif2blm - creates Blinkenlights movies from animated GIFs + blmplay - plays Blinkenlights movies to the text console + +More tools may be added in future releases. + + +The scripts directory holds a shell script called b2avi that uses b2b, +b2png and mencoder (from the mplayer package) to create a DivX4 from a +Blinkenlights movie. + + +blinkentools-2.9 depends on blib >= 1.1.7 and glib-2.0. The b2mng +utility depends on libmng-1.0 (the newer the better). You will also +need pkg-config in order to compile blinkentools. If you installed +blib into a different prefix than pkg-config, you may need to adapt +the PKG_CONFIG_PATH environment variable. See the pkg-config(1) +man-page. + +The file INSTALL has generic installation instructions. It all boils +down to calling './configure' in the toplevel dir, then 'make' followed +by 'make install'. + + +The code is released under the terms of the GNU General Public License +version 2 any later version. You will find a copy of this license in the +file COPYING. + + +Feel free to send questions, bug-reports, feature requests and patches +to the author Sven Neumann . + + +Have Blinkenfun, + + Sven Neumann diff --git a/blinkentools-2.9/aclocal.m4 b/blinkentools-2.9/aclocal.m4 new file mode 100644 index 0000000..d554219 --- /dev/null +++ b/blinkentools-2.9/aclocal.m4 @@ -0,0 +1,1066 @@ +# generated automatically by aclocal 1.7.9 -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002 +# Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +# Do all the work for Automake. -*- Autoconf -*- + +# This macro actually does too much some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 +# Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# serial 10 + +AC_PREREQ([2.54]) + +# Autoconf 2.50 wants to disallow AM_ names. We explicitly allow +# the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl + AC_REQUIRE([AC_PROG_INSTALL])dnl +# test to see if srcdir already configured +if test "`cd $srcdir && pwd`" != "`pwd`" && + test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) +AM_MISSING_PROG(AUTOCONF, autoconf) +AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) +AM_MISSING_PROG(AUTOHEADER, autoheader) +AM_MISSING_PROG(MAKEINFO, makeinfo) +AM_MISSING_PROG(AMTAR, tar) +AM_PROG_INSTALL_SH +AM_PROG_INSTALL_STRIP +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl + +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +]) +]) + + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $1 | $1:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) + +# Copyright 2002 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +AC_DEFUN([AM_AUTOMAKE_VERSION],[am__api_version="1.7"]) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION so it can be traced. +# This function is AC_REQUIREd by AC_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], + [AM_AUTOMAKE_VERSION([1.7.9])]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright 2001, 2002 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# serial 2 + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# ------------------------------ +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) + +# _AM_SET_OPTIONS(OPTIONS) +# ---------------------------------- +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# +# Check to make sure that the build environment is sane. +# + +# Copyright 1996, 1997, 2000, 2001 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# serial 3 + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftest.file +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftest.file` + fi + rm -f conftest.file + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT(yes)]) + +# -*- Autoconf -*- + + +# Copyright 1997, 1999, 2000, 2001 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# serial 3 + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it supports --run. +# If it does, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + AC_MSG_WARN([`missing' script is too old or missing]) +fi +]) + +# AM_AUX_DIR_EXPAND + +# Copyright 2001 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to +# `$srcdir', `$srcdir/..', or `$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is `.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +# Rely on autoconf to set up CDPATH properly. +AC_PREREQ([2.50]) + +AC_DEFUN([AM_AUX_DIR_EXPAND], [ +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` +]) + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. + +# Copyright 2001 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +install_sh=${install_sh-"$am_aux_dir/install-sh"} +AC_SUBST(install_sh)]) + +# AM_PROG_INSTALL_STRIP + +# Copyright 2001 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# One issue with vendor `install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in `make install-strip', and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be `maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# -*- Autoconf -*- +# Copyright (C) 2003 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# serial 1 + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# serial 5 -*- Autoconf -*- + +# Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + + +# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "GCJ", or "OBJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +ifelse([$1], CC, [depcc="$CC" am_compiler_list=], + [$1], CXX, [depcc="$CXX" am_compiler_list=], + [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + : > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + case $depmode in + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + none) break ;; + esac + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. + if depmode=$depmode \ + source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # (even with -Werror). So we grep stderr for any message + # that says an option was ignored. + if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE(dependency-tracking, +[ --disable-dependency-tracking Speeds up one-time builds + --enable-dependency-tracking Do not reject slow dependency extractors]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH]) +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +#serial 2 + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[for mf in $CONFIG_FILES; do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # So let's grep whole file. + if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + grep '^DEP_FILES *= *[[^ @%:@]]' < "$mf" > /dev/null || continue + # Extract the definition of DEP_FILES from the Makefile without + # running `make'. + DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"` + test -z "$DEPDIR" && continue + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n -e '/^U = / s///p' < "$mf"` + test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR" + # We invoke sed twice because it is the simplest approach to + # changing $(DEPDIR) to its actual value in the expansion. + for file in `sed -n -e ' + /^DEP_FILES = .*\\\\$/ { + s/^DEP_FILES = // + :loop + s/\\\\$// + p + n + /\\\\$/ b loop + p + } + /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done +done +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each `.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# serial 2 + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo done +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# We grep out `Entering directory' and `Leaving directory' +# messages which can occur if `w' ends up in MAKEFLAGS. +# In particular we don't look at `^make:' because GNU make might +# be invoked under some other name (usually "gmake"), in which +# case it prints its new name instead of `make'. +if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then + am__include=include + am__quote= + _am_result=GNU +fi +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then + am__include=.include + am__quote="\"" + _am_result=BSD + fi +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright 1997, 2000, 2001 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# serial 5 + +AC_PREREQ(2.52) + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE]) +AC_SUBST([$1_FALSE]) +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]) +fi])]) + +# Like AC_CONFIG_HEADER, but automatically create stamp file. -*- Autoconf -*- + +# Copyright 1996, 1997, 2000, 2001 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +AC_PREREQ([2.52]) + +# serial 6 + +# AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS. +AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) + +# Add --enable-maintainer-mode option to configure. +# From Jim Meyering + +# Copyright 1996, 1998, 2000, 2001, 2002 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# serial 2 + +AC_DEFUN([AM_MAINTAINER_MODE], +[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) + dnl maintainer-mode is disabled by default + AC_ARG_ENABLE(maintainer-mode, +[ --enable-maintainer-mode enable make rules and dependencies not useful + (and sometimes confusing) to the casual installer], + USE_MAINTAINER_MODE=$enableval, + USE_MAINTAINER_MODE=no) + AC_MSG_RESULT([$USE_MAINTAINER_MODE]) + AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes]) + MAINT=$MAINTAINER_MODE_TRUE + AC_SUBST(MAINT)dnl +] +) + +AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) + + +# Copyright 1996, 1997, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# serial 2 + +# @defmac AC_PROG_CC_STDC +# @maindex PROG_CC_STDC +# @ovindex CC +# If the C compiler in not in ANSI C mode by default, try to add an option +# to output variable @code{CC} to make it so. This macro tries various +# options that select ANSI C on some system or another. It considers the +# compiler to be in ANSI C mode if it handles function prototypes correctly. +# +# If you use this macro, you should check after calling it whether the C +# compiler has been set to accept ANSI C; if not, the shell variable +# @code{am_cv_prog_cc_stdc} is set to @samp{no}. If you wrote your source +# code in ANSI C, you can make an un-ANSIfied copy of it by using the +# program @code{ansi2knr}, which comes with Ghostscript. +# @end defmac + +AC_DEFUN([AM_PROG_CC_STDC], +[AC_REQUIRE([AC_PROG_CC]) +AC_BEFORE([$0], [AC_C_INLINE]) +AC_BEFORE([$0], [AC_C_CONST]) +dnl Force this before AC_PROG_CPP. Some cpp's, eg on HPUX, require +dnl a magic option to avoid problems with ANSI preprocessor commands +dnl like #elif. +dnl FIXME: can't do this because then AC_AIX won't work due to a +dnl circular dependency. +dnl AC_BEFORE([$0], [AC_PROG_CPP]) +AC_MSG_CHECKING([for ${CC-cc} option to accept ANSI C]) +AC_CACHE_VAL(am_cv_prog_cc_stdc, +[am_cv_prog_cc_stdc=no +ac_save_CC="$CC" +# Don't try gcc -ansi; that turns off useful extensions and +# breaks some systems' header files. +# AIX -qlanglvl=ansi +# Ultrix and OSF/1 -std1 +# HP-UX 10.20 and later -Ae +# HP-UX older versions -Aa -D_HPUX_SOURCE +# SVR4 -Xc -D__EXTENSIONS__ +for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + AC_TRY_COMPILE( +[#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +], [ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; +], +[am_cv_prog_cc_stdc="$ac_arg"; break]) +done +CC="$ac_save_CC" +]) +if test -z "$am_cv_prog_cc_stdc"; then + AC_MSG_RESULT([none needed]) +else + AC_MSG_RESULT([$am_cv_prog_cc_stdc]) +fi +case "x$am_cv_prog_cc_stdc" in + x|xno) ;; + *) CC="$CC $am_cv_prog_cc_stdc" ;; +esac +]) + +AU_DEFUN([fp_PROG_CC_STDC], [AM_PROG_CC_STDC]) + + +dnl PKG_CHECK_MODULES(GSTUFF, gtk+-2.0 >= 1.3 glib = 1.3.4, action-if, action-not) +dnl defines GSTUFF_LIBS, GSTUFF_CFLAGS, see pkg-config man page +dnl also defines GSTUFF_PKG_ERRORS on error +AC_DEFUN(PKG_CHECK_MODULES, [ + succeeded=no + + if test -z "$PKG_CONFIG"; then + AC_PATH_PROG(PKG_CONFIG, pkg-config, no) + fi + + if test "$PKG_CONFIG" = "no" ; then + echo "*** The pkg-config script could not be found. Make sure it is" + echo "*** in your path, or set the PKG_CONFIG environment variable" + echo "*** to the full path to pkg-config." + echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config." + else + PKG_CONFIG_MIN_VERSION=0.9.0 + if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then + AC_MSG_CHECKING(for $2) + + if $PKG_CONFIG --exists "$2" ; then + AC_MSG_RESULT(yes) + succeeded=yes + + AC_MSG_CHECKING($1_CFLAGS) + $1_CFLAGS=`$PKG_CONFIG --cflags "$2"` + AC_MSG_RESULT($$1_CFLAGS) + + AC_MSG_CHECKING($1_LIBS) + $1_LIBS=`$PKG_CONFIG --libs "$2"` + AC_MSG_RESULT($$1_LIBS) + else + $1_CFLAGS="" + $1_LIBS="" + ## If we have a custom action on failure, don't print errors, but + ## do set a variable so people can do so. + $1_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"` + ifelse([$4], ,echo $$1_PKG_ERRORS,) + fi + + AC_SUBST($1_CFLAGS) + AC_SUBST($1_LIBS) + else + echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer." + echo "*** See http://www.freedesktop.org/software/pkgconfig" + fi + fi + + if test $succeeded = yes; then + ifelse([$3], , :, [$3]) + else + ifelse([$4], , AC_MSG_ERROR([Library requirements ($2) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them.]), [$4]) + fi +]) + + + diff --git a/blinkentools-2.9/autogen.sh b/blinkentools-2.9/autogen.sh new file mode 100755 index 0000000..dcc1855 --- /dev/null +++ b/blinkentools-2.9/autogen.sh @@ -0,0 +1,113 @@ +#!/bin/sh +# Run this to generate all the initial makefiles, etc. + +srcdir=`dirname $0` +test -z "$srcdir" && srcdir=. + +ORIGDIR=`pwd` +cd $srcdir +PROJECT="the Blinkenlights commandline tools" +TEST_TYPE=-f +FILE=src/blm2gif.c + +DIE=0 + +(autoconf --version) < /dev/null > /dev/null 2>&1 || { + echo + echo "You must have autoconf installed to compile $PROJECT." + echo "Download the appropriate package for your distribution," + echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/" + DIE=1 +} + +(automake --version) < /dev/null > /dev/null 2>&1 || { + echo + echo "You must have automake installed to compile $PROJECT." + echo "Get ftp://ftp.cygnus.com/pub/home/tromey/automake-1.2d.tar.gz" + echo "(or a newer version if it is available)" + DIE=1 +} + +echo "I am testing that you have the required versions of autoconf, automake." +echo + +echo "Testing autoconf... " +VER=`autoconf --version | grep -iw autoconf | sed "s/.* \([0-9.]*\)[-a-z0-9]*$/\1/"` +if expr $VER \>= 2.13 >/dev/null; then + echo "looks OK." +else + echo "too old! (Need 2.13, have $VER)" + DIE=1 +fi + +echo "Testing automake... " +VER=`automake --version | grep automake | sed "s/.* \([0-9.]*\)[-a-z0-9]*$/\1/"` +if expr $VER \>= 1.4 >/dev/null; then + echo "looks OK." +else + echo "too old! (Need 1.4, have $VER)" + DIE=1 +fi + +echo + +if test "$DIE" -eq 1; then + exit 1 +fi + +test $TEST_TYPE $FILE || { + echo "You must run this script in the top-level $PROJECT directory" + exit 1 +} + +if test -z "$*"; then + echo "I am going to run ./configure with no arguments - if you wish " + echo "to pass any to it, please specify them on the $0 command line." +fi + +case $CC in +*xlc | *xlc\ * | *lcc | *lcc\ *) am_opt=--include-deps;; +esac + +if test -z "$ACLOCAL_FLAGS"; then + + acdir=`aclocal --print-ac-dir` + m4list="" + + for file in $m4list + do + if [ ! -f "$acdir/$file" ]; then + echo "WARNING: aclocal's directory is $acdir, but..." + echo " no file $acdir/$file" + echo " You may see fatal macro warnings below." + echo " If these files are installed in /some/dir, set the ACLOCAL_FLAGS " + echo " environment variable to \"-I /some/dir\", or install" + echo " $acdir/$file." + echo "" + fi + done +fi + +autogen_dirs="." + +for i in $autogen_dirs; do + echo "Processing $i..." + + cd $i + aclocal $ACLOCAL_FLAGS + + # optionally feature autoheader + if grep AM_CONFIG_HEADER configure.in >/dev/null ; then + (autoheader --version) < /dev/null > /dev/null 2>&1 && autoheader + fi + + automake --add-missing $am_opt + autoconf +done + +cd $ORIGDIR + +$srcdir/configure --enable-maintainer-mode "$@" + +echo +echo "Now type 'make' to compile $PROJECT." diff --git a/blinkentools-2.9/config.guess b/blinkentools-2.9/config.guess new file mode 100755 index 0000000..e8c6fc0 --- /dev/null +++ b/blinkentools-2.9/config.guess @@ -0,0 +1,1432 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003 Free Software Foundation, Inc. + +timestamp='2004-01-05' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Per Bothner . +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# The plan is that this can be called by configure scripts if you +# don't specify an explicit build system type. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit 0 ;; + --version | -v ) + echo "$version" ; exit 0 ;; + --help | --h* | -h ) + echo "$usage"; exit 0 ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep __ELF__ >/dev/null + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit 0 ;; + amiga:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + arc:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + hp300:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mac68k:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + macppc:OpenBSD:*:*) + echo powerpc-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvme68k:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvme88k:OpenBSD:*:*) + echo m88k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvmeppc:OpenBSD:*:*) + echo powerpc-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + pegasos:OpenBSD:*:*) + echo powerpc-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + pmax:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + sgi:OpenBSD:*:*) + echo mipseb-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + sun3:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + wgrisc:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + *:OpenBSD:*:*) + echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + alpha:OSF1:*:*) + if test $UNAME_RELEASE = "V4.0"; then + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + fi + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit 0 ;; + Alpha*:OpenVMS:*:*) + echo alpha-hp-vms + exit 0 ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit 0 ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit 0 ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit 0;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit 0 ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit 0 ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit 0 ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit 0 ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit 0;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit 0;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit 0 ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit 0 ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit 0 ;; + DRS?6000:UNIX_SV:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7 && exit 0 ;; + esac ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + i86pc:SunOS:5.*:*) + echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit 0 ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit 0 ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit 0 ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit 0 ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit 0 ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit 0 ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit 0 ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit 0 ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit 0 ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit 0 ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit 0 ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit 0 ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c \ + && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ + && exit 0 + echo mips-mips-riscos${UNAME_RELEASE} + exit 0 ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit 0 ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit 0 ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit 0 ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit 0 ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit 0 ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit 0 ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit 0 ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit 0 ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit 0 ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit 0 ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit 0 ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit 0 ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit 0 ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit 0 ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit 0 ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 + echo rs6000-ibm-aix3.2.5 + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit 0 ;; + *:AIX:*:[45]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit 0 ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit 0 ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit 0 ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit 0 ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit 0 ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit 0 ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit 0 ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit 0 ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + # avoid double evaluation of $set_cc_for_build + test -n "$CC_FOR_BUILD" || eval $set_cc_for_build + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit 0 ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit 0 ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 + echo unknown-hitachi-hiuxwe2 + exit 0 ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit 0 ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit 0 ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit 0 ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit 0 ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit 0 ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit 0 ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit 0 ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit 0 ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit 0 ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit 0 ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit 0 ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit 0 ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + *:UNICOS/mp:*:*) + echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit 0 ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit 0 ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit 0 ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit 0 ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit 0 ;; + *:FreeBSD:*:*) + # Determine whether the default compiler uses glibc. + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + #if __GLIBC__ >= 2 + LIBC=gnu + #else + LIBC= + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` + # GNU/KFreeBSD systems have a "k" prefix to indicate we are using + # FreeBSD's kernel, but not the complete OS. + case ${LIBC} in gnu) kernel_only='k' ;; esac + echo ${UNAME_MACHINE}-unknown-${kernel_only}freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC} + exit 0 ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit 0 ;; + i*:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit 0 ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit 0 ;; + x86:Interix*:[34]*) + echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//' + exit 0 ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit 0 ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit 0 ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit 0 ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit 0 ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit 0 ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + exit 0 ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit 0 ;; + arm*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + cris:Linux:*:*) + echo cris-axis-linux-gnu + exit 0 ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + mips:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips + #undef mipsel + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mipsel + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` + test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 + ;; + mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips64 + #undef mips64el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mips64el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips64 + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` + test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 + ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit 0 ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit 0 ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit 0 ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit 0 ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit 0 ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit 0 ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-gnu + exit 0 ;; + i*86:Linux:*:*) + # The BFD linker knows what the default object file format is, so + # first see if it will tell us. cd to the root directory to prevent + # problems with other programs or directories called `ld' in the path. + # Set LC_ALL=C to ensure ld outputs messages in English. + ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ + | sed -ne '/supported targets:/!d + s/[ ][ ]*/ /g + s/.*supported targets: *// + s/ .*// + p'` + case "$ld_supported_targets" in + elf32-i386) + TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" + ;; + a.out-i386-linux) + echo "${UNAME_MACHINE}-pc-linux-gnuaout" + exit 0 ;; + coff-i386) + echo "${UNAME_MACHINE}-pc-linux-gnucoff" + exit 0 ;; + "") + # Either a pre-BFD a.out linker (linux-gnuoldld) or + # one that does not give us useful --help. + echo "${UNAME_MACHINE}-pc-linux-gnuoldld" + exit 0 ;; + esac + # Determine whether the default compiler is a.out or elf + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + #ifdef __ELF__ + # ifdef __GLIBC__ + # if __GLIBC__ >= 2 + LIBC=gnu + # else + LIBC=gnulibc1 + # endif + # else + LIBC=gnulibc1 + # endif + #else + #ifdef __INTEL_COMPILER + LIBC=gnu + #else + LIBC=gnuaout + #endif + #endif + #ifdef __dietlibc__ + LIBC=dietlibc + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` + test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0 + test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 + ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit 0 ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit 0 ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit 0 ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit 0 ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit 0 ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit 0 ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit 0 ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit 0 ;; + i*86:*:5:[78]*) + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit 0 ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit 0 ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i386. + echo i386-pc-msdosdjgpp + exit 0 ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit 0 ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit 0 ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit 0 ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit 0 ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit 0 ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit 0 ;; + M68*:*:R3V[567]*:*) + test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && echo i486-ncr-sysv4.3${OS_REL} && exit 0 + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && echo i486-ncr-sysv4 && exit 0 ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit 0 ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit 0 ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit 0 ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit 0 ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit 0 ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit 0 ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit 0 ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit 0 ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit 0 ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit 0 ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit 0 ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit 0 ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit 0 ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit 0 ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit 0 ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit 0 ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit 0 ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit 0 ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit 0 ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit 0 ;; + *:Darwin:*:*) + case `uname -p` in + *86) UNAME_PROCESSOR=i686 ;; + powerpc) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit 0 ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit 0 ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit 0 ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit 0 ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit 0 ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit 0 ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit 0 ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit 0 ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit 0 ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit 0 ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit 0 ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit 0 ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit 0 ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit 0 ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit 0 ;; + *:DRAGONFLY:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly${UNAME_RELEASE} + exit 0 ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0 + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit 0 ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit 0 ;; + c34*) + echo c34-convex-bsd + exit 0 ;; + c38*) + echo c38-convex-bsd + exit 0 ;; + c4*) + echo c4-convex-bsd + exit 0 ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/blinkentools-2.9/config.h.in b/blinkentools-2.9/config.h.in new file mode 100644 index 0000000..3f4c425 --- /dev/null +++ b/blinkentools-2.9/config.h.in @@ -0,0 +1,55 @@ +/* config.h.in. Generated from configure.in by autoheader. */ + +/* Define to 1 if your libc has support for getopt_long(). */ +#undef HAVE_GETOPT_LONG + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Version number of package */ +#undef VERSION diff --git a/blinkentools-2.9/config.sub b/blinkentools-2.9/config.sub new file mode 100755 index 0000000..463186d --- /dev/null +++ b/blinkentools-2.9/config.sub @@ -0,0 +1,1537 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003 Free Software Foundation, Inc. + +timestamp='2004-01-05' + +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine. It does not imply ALL GNU software can. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit 0 ;; + --version | -v ) + echo "$version" ; exit 0 ;; + --help | --h* | -h ) + echo "$usage"; exit 0 ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit 0;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \ + kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis) + os= + basic_machine=$1 + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | m32r | m68000 | m68k | m88k | mcore \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64vr | mips64vrel \ + | mips64orion | mips64orionel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | msp430 \ + | ns16k | ns32k \ + | openrisc | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \ + | strongarm \ + | tahoe | thumb | tic4x | tic80 | tron \ + | v850 | v850e \ + | we32k \ + | x86 | xscale | xstormy16 | xtensa \ + | z8k) + basic_machine=$basic_machine-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* \ + | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ + | clipper-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | m32r-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | mcore-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | msp430-* \ + | none-* | np1-* | nv1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* \ + | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \ + | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tron-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \ + | xtensa-* \ + | ymp-* \ + | z8k-*) + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + crds | unos) + basic_machine=m68k-crds + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + mmix*) + basic_machine=mmix-knuth + os=-mmixware + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + nv1) + basic_machine=nv1-cray + os=-unicosmp + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + or32 | or32-*) + basic_machine=or32-unknown + os=-coff + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; + tic55x | c55x*) + basic_machine=tic55x-unknown + os=-coff + ;; + tic6x | c6x*) + basic_machine=tic6x-unknown + os=-coff + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparc | sparcv9 | sparcv9b) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -netbsd* | -openbsd* | -kfreebsd* | -freebsd* | -riscix* \ + | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -kaos*) + os=-kaos + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-ibm) + os=-aix + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit 0 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/blinkentools-2.9/configure b/blinkentools-2.9/configure new file mode 100755 index 0000000..4a8b80b --- /dev/null +++ b/blinkentools-2.9/configure @@ -0,0 +1,5777 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.59. +# +# Copyright (C) 2003 Free Software Foundation, Inc. +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then + set -o posix +fi +DUALCASE=1; export DUALCASE # for MKS sh + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# Work around bugs in pre-3.0 UWIN ksh. +$as_unset ENV MAIL MAILPATH +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)$' \| \ + . : '\(.\)' 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } + /^X\/\(\/\/\)$/{ s//\1/; q; } + /^X\/\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + + +# PATH needs CR, and LINENO needs CR and PATH. +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" || { + # Find who we are. Look in the path if we contain no path at all + # relative or not. + case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done + + ;; + esac + # We did not find ourselves, most probably we were run as `sh COMMAND' + # in which case we are not to be found in the path. + if test "x$as_myself" = x; then + as_myself=$0 + fi + if test ! -f "$as_myself"; then + { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 + { (exit 1); exit 1; }; } + fi + case $CONFIG_SHELL in + '') + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for as_base in sh bash ksh sh5; do + case $as_dir in + /*) + if ("$as_dir/$as_base" -c ' + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then + $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } + $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } + CONFIG_SHELL=$as_dir/$as_base + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$0" ${1+"$@"} + fi;; + esac + done +done +;; + esac + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line before each line; the second 'sed' does the real + # work. The second script uses 'N' to pair each line-number line + # with the numbered line, and appends trailing '-' during + # substitution so that $LINENO is not a special case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) + sed '=' <$as_myself | + sed ' + N + s,$,-, + : loop + s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + t loop + s,-$,, + s,^['$as_cr_digits']*\n,, + ' >$as_me.lineno && + chmod +x $as_me.lineno || + { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensible to this). + . ./$as_me.lineno + # Exit status is that of the last command. + exit +} + + +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ECHO_C=' +' ECHO_T=' ' ;; + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +esac + +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + # We could just check for DJGPP; but this test a) works b) is more generic + # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). + if test -f conf$$.exe; then + # Don't use ln at all; we don't have any links + as_ln_s='cp -p' + else + as_ln_s='ln -s' + fi +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.file + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_executable_p="test -f" + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +# IFS +# We need space, tab and new line, in precisely that order. +as_nl=' +' +IFS=" $as_nl" + +# CDPATH. +$as_unset CDPATH + + +# Name of the host. +# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +exec 6>&1 + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_config_libobj_dir=. +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} + +# Maximum number of lines to put in a shell here document. +# This variable seems obsolete. It should probably be removed, and +# only ac_max_sed_lines should be used. +: ${ac_max_here_lines=38} + +# Identity of this package. +PACKAGE_NAME= +PACKAGE_TARNAME= +PACKAGE_VERSION= +PACKAGE_STRING= +PACKAGE_BUGREPORT= + +ac_unique_file="src/b2b.c" +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#if HAVE_SYS_TYPES_H +# include +#endif +#if HAVE_SYS_STAT_H +# include +#endif +#if STDC_HEADERS +# include +# include +#else +# if HAVE_STDLIB_H +# include +# endif +#endif +#if HAVE_STRING_H +# if !STDC_HEADERS && HAVE_MEMORY_H +# include +# endif +# include +#endif +#if HAVE_STRINGS_H +# include +#endif +#if HAVE_INTTYPES_H +# include +#else +# if HAVE_STDINT_H +# include +# endif +#endif +#if HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO AMTAR install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM AWK SET_MAKE am__leading_dot MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE LN_S ENABLE_OLDTOOLS_TRUE ENABLE_OLDTOOLS_FALSE CPP EGREP PKG_CONFIG BLIB_CFLAGS BLIB_LIBS AA_CFLAGS AA_LIBS HAVE_AA_TRUE HAVE_AA_FALSE PIXBUF_CFLAGS PIXBUF_LIBS HAVE_PIXBUF_TRUE HAVE_PIXBUF_FALSE LIBMNG HAVE_LIBMNG_TRUE HAVE_LIBMNG_FALSE PACAKGE LIBOBJS LTLIBOBJS' +ac_subst_files='' + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datadir='${prefix}/share' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +libdir='${exec_prefix}/lib' +includedir='${prefix}/include' +oldincludedir='/usr/include' +infodir='${prefix}/info' +mandir='${prefix}/man' + +ac_prev= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval "$ac_prev=\$ac_option" + ac_prev= + continue + fi + + ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_option in + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad | --data | --dat | --da) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ + | --da=*) + datadir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/-/_/g'` + eval "enable_$ac_feature=no" ;; + + -enable-* | --enable-*) + ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/-/_/g'` + case $ac_option in + *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; + *) ac_optarg=yes ;; + esac + eval "enable_$ac_feature='$ac_optarg'" ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst \ + | --locals | --local | --loca | --loc | --lo) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* \ + | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package| sed 's/-/_/g'` + case $ac_option in + *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; + *) ac_optarg=yes ;; + esac + eval "with_$ac_package='$ac_optarg'" ;; + + -without-* | --without-*) + ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package | sed 's/-/_/g'` + eval "with_$ac_package=no" ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) { echo "$as_me: error: unrecognized option: $ac_option +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 + { (exit 1); exit 1; }; } + ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` + eval "$ac_envvar='$ac_optarg'" + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + { echo "$as_me: error: missing argument to $ac_option" >&2 + { (exit 1); exit 1; }; } +fi + +# Be sure to have absolute paths. +for ac_var in exec_prefix prefix +do + eval ac_val=$`echo $ac_var` + case $ac_val in + [\\/$]* | ?:[\\/]* | NONE | '' ) ;; + *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; };; + esac +done + +# Be sure to have absolute paths. +for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ + localstatedir libdir includedir oldincludedir infodir mandir +do + eval ac_val=$`echo $ac_var` + case $ac_val in + [\\/$]* | ?:[\\/]* ) ;; + *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; };; + esac +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used." >&2 + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then its parent. + ac_confdir=`(dirname "$0") 2>/dev/null || +$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$0" : 'X\(//\)[^/]' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$0" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r $srcdir/$ac_unique_file; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r $srcdir/$ac_unique_file; then + if test "$ac_srcdir_defaulted" = yes; then + { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 + { (exit 1); exit 1; }; } + else + { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 + { (exit 1); exit 1; }; } + fi +fi +(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || + { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 + { (exit 1); exit 1; }; } +srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` +ac_env_build_alias_set=${build_alias+set} +ac_env_build_alias_value=$build_alias +ac_cv_env_build_alias_set=${build_alias+set} +ac_cv_env_build_alias_value=$build_alias +ac_env_host_alias_set=${host_alias+set} +ac_env_host_alias_value=$host_alias +ac_cv_env_host_alias_set=${host_alias+set} +ac_cv_env_host_alias_value=$host_alias +ac_env_target_alias_set=${target_alias+set} +ac_env_target_alias_value=$target_alias +ac_cv_env_target_alias_set=${target_alias+set} +ac_cv_env_target_alias_value=$target_alias +ac_env_CC_set=${CC+set} +ac_env_CC_value=$CC +ac_cv_env_CC_set=${CC+set} +ac_cv_env_CC_value=$CC +ac_env_CFLAGS_set=${CFLAGS+set} +ac_env_CFLAGS_value=$CFLAGS +ac_cv_env_CFLAGS_set=${CFLAGS+set} +ac_cv_env_CFLAGS_value=$CFLAGS +ac_env_LDFLAGS_set=${LDFLAGS+set} +ac_env_LDFLAGS_value=$LDFLAGS +ac_cv_env_LDFLAGS_set=${LDFLAGS+set} +ac_cv_env_LDFLAGS_value=$LDFLAGS +ac_env_CPPFLAGS_set=${CPPFLAGS+set} +ac_env_CPPFLAGS_value=$CPPFLAGS +ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} +ac_cv_env_CPPFLAGS_value=$CPPFLAGS +ac_env_CPP_set=${CPP+set} +ac_env_CPP_value=$CPP +ac_cv_env_CPP_set=${CPP+set} +ac_cv_env_CPP_value=$CPP + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures this package to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +_ACEOF + + cat <<_ACEOF +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --datadir=DIR read-only architecture-independent data [PREFIX/share] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --infodir=DIR info documentation [PREFIX/info] + --mandir=DIR man documentation [PREFIX/man] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names +_ACEOF +fi + +if test -n "$ac_init_help"; then + + cat <<\_ACEOF + +Optional Features: + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-maintainer-mode enable make rules and dependencies not useful + (and sometimes confusing) to the casual installer + --disable-dependency-tracking Speeds up one-time builds + --enable-dependency-tracking Do not reject slow dependency extractors + --enable-oldtools build old-fashioned and obsoleted tools + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --without-libmng don't build apps that need libmng (b2mng) + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have + headers in a nonstandard directory + CPP C preprocessor + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +_ACEOF +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + ac_popdir=`pwd` + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d $ac_dir || continue + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac + +# Do not use `cd foo && pwd` to compute absolute paths, because +# the directories may not exist. +case `pwd` in +.) ac_abs_builddir="$ac_dir";; +*) + case "$ac_dir" in + .) ac_abs_builddir=`pwd`;; + [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; + *) ac_abs_builddir=`pwd`/"$ac_dir";; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_builddir=${ac_top_builddir}.;; +*) + case ${ac_top_builddir}. in + .) ac_abs_top_builddir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; + *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_srcdir=$ac_srcdir;; +*) + case $ac_srcdir in + .) ac_abs_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; + *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_srcdir=$ac_top_srcdir;; +*) + case $ac_top_srcdir in + .) ac_abs_top_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; + *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; + esac;; +esac + + cd $ac_dir + # Check for guested configure; otherwise get Cygnus style configure. + if test -f $ac_srcdir/configure.gnu; then + echo + $SHELL $ac_srcdir/configure.gnu --help=recursive + elif test -f $ac_srcdir/configure; then + echo + $SHELL $ac_srcdir/configure --help=recursive + elif test -f $ac_srcdir/configure.ac || + test -f $ac_srcdir/configure.in; then + echo + $ac_configure --help + else + echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi + cd "$ac_popdir" + done +fi + +test -n "$ac_init_help" && exit 0 +if $ac_init_version; then + cat <<\_ACEOF + +Copyright (C) 2003 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit 0 +fi +exec 5>config.log +cat >&5 <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by $as_me, which was +generated by GNU Autoconf 2.59. Invocation command line was + + $ $0 $@ + +_ACEOF +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +hostinfo = `(hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + echo "PATH: $as_dir" +done + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_sep= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) + ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; + 2) + ac_configure_args1="$ac_configure_args1 '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" + # Get rid of the leading space. + ac_sep=" " + ;; + esac + done +done +$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } +$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Be sure not to use single quotes in there, as some shells, +# such as our DU 5.0 friend, will then `close' the trap. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + cat <<\_ASBOX +## ---------------- ## +## Cache variables. ## +## ---------------- ## +_ASBOX + echo + # The following way of writing the cache mishandles newlines in values, +{ + (set) 2>&1 | + case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in + *ac_space=\ *) + sed -n \ + "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" + ;; + *) + sed -n \ + "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + ;; + esac; +} + echo + + cat <<\_ASBOX +## ----------------- ## +## Output variables. ## +## ----------------- ## +_ASBOX + echo + for ac_var in $ac_subst_vars + do + eval ac_val=$`echo $ac_var` + echo "$ac_var='"'"'$ac_val'"'"'" + done | sort + echo + + if test -n "$ac_subst_files"; then + cat <<\_ASBOX +## ------------- ## +## Output files. ## +## ------------- ## +_ASBOX + echo + for ac_var in $ac_subst_files + do + eval ac_val=$`echo $ac_var` + echo "$ac_var='"'"'$ac_val'"'"'" + done | sort + echo + fi + + if test -s confdefs.h; then + cat <<\_ASBOX +## ----------- ## +## confdefs.h. ## +## ----------- ## +_ASBOX + echo + sed "/^$/d" confdefs.h | sort + echo + fi + test "$ac_signal" != 0 && + echo "$as_me: caught signal $ac_signal" + echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core && + rm -rf conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status + ' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -rf conftest* confdefs.h +# AIX cpp loses on an empty file, so make sure it contains at least a newline. +echo >confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer explicitly selected file to automatically selected ones. +if test -z "$CONFIG_SITE"; then + if test "x$prefix" != xNONE; then + CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" + else + CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" + fi +fi +for ac_site_file in $CONFIG_SITE; do + if test -r "$ac_site_file"; then + { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 +echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special + # files actually), so we avoid doing that. + if test -f "$cache_file"; then + { echo "$as_me:$LINENO: loading cache $cache_file" >&5 +echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . $cache_file;; + *) . ./$cache_file;; + esac + fi +else + { echo "$as_me:$LINENO: creating cache $cache_file" >&5 +echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in `(set) 2>&1 | + sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val="\$ac_cv_env_${ac_var}_value" + eval ac_new_val="\$ac_env_${ac_var}_value" + case $ac_old_set,$ac_new_set in + set,) + { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 +echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 +echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 +echo "$as_me: former value: $ac_old_val" >&2;} + { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 +echo "$as_me: current value: $ac_new_val" >&2;} + ac_cache_corrupted=: + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) + ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 +echo "$as_me: error: changes in the environment can compromise the build" >&2;} + { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 +echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} + { (exit 1); exit 1; }; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + + + + + + + + + + + + + + + + + +PACKAGE=blinkentools +VERSION=2.9 + +am__api_version="1.7" +ac_aux_dir= +for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do + if test -f $ac_dir/install-sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f $ac_dir/install.sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f $ac_dir/shtool; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 +echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} + { (exit 1); exit 1; }; } +fi +ac_config_guess="$SHELL $ac_aux_dir/config.guess" +ac_config_sub="$SHELL $ac_aux_dir/config.sub" +ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 +echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 +if test -z "$INSTALL"; then +if test "${ac_cv_path_install+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in + ./ | .// | /cC/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + done + done + ;; +esac +done + + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. We don't cache a + # path for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the path is relative. + INSTALL=$ac_install_sh + fi +fi +echo "$as_me:$LINENO: result: $INSTALL" >&5 +echo "${ECHO_T}$INSTALL" >&6 + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +echo "$as_me:$LINENO: checking whether build environment is sane" >&5 +echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6 +# Just in case +sleep 1 +echo timestamp > conftest.file +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftest.file` + fi + rm -f conftest.file + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" >&5 +echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" >&2;} + { (exit 1); exit 1; }; } + fi + + test "$2" = conftest.file + ) +then + # Ok. + : +else + { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! +Check your system clock" >&5 +echo "$as_me: error: newly created file is older than distributed files! +Check your system clock" >&2;} + { (exit 1); exit 1; }; } +fi +echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 +test "$program_prefix" != NONE && + program_transform_name="s,^,$program_prefix,;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s,\$,$program_suffix,;$program_transform_name" +# Double any \ or $. echo might interpret backslashes. +# By default was `s,x,x', remove it if useless. +cat <<\_ACEOF >conftest.sed +s/[\\$]/&&/g;s/;s,x,x,$// +_ACEOF +program_transform_name=`echo $program_transform_name | sed -f conftest.sed` +rm conftest.sed + + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 +echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} +fi + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_AWK+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + echo "$as_me:$LINENO: result: $AWK" >&5 +echo "${ECHO_T}$AWK" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$AWK" && break +done + +echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 +set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` +if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.make <<\_ACEOF +all: + @echo 'ac_maketemp="$(MAKE)"' +_ACEOF +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` +if test -n "$ac_maketemp"; then + eval ac_cv_prog_make_${ac_make}_set=yes +else + eval ac_cv_prog_make_${ac_make}_set=no +fi +rm -f conftest.make +fi +if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + SET_MAKE= +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + + # test to see if srcdir already configured +if test "`cd $srcdir && pwd`" != "`pwd`" && + test -f $srcdir/config.status; then + { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 +echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} + { (exit 1); exit 1; }; } +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE=$PACKAGE + VERSION=$VERSION + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + + +AMTAR=${AMTAR-"${am_missing_run}tar"} + +install_sh=${install_sh-"$am_aux_dir/install-sh"} + +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + echo "$as_me:$LINENO: result: $STRIP" >&5 +echo "${ECHO_T}$STRIP" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 +echo "${ECHO_T}$ac_ct_STRIP" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + STRIP=$ac_ct_STRIP +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. + + + + + ac_config_headers="$ac_config_headers config.h" + + +echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5 +echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6 + # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given. +if test "${enable_maintainer_mode+set}" = set; then + enableval="$enable_maintainer_mode" + USE_MAINTAINER_MODE=$enableval +else + USE_MAINTAINER_MODE=no +fi; + echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5 +echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6 + + +if test $USE_MAINTAINER_MODE = yes; then + MAINTAINER_MODE_TRUE= + MAINTAINER_MODE_FALSE='#' +else + MAINTAINER_MODE_TRUE='#' + MAINTAINER_MODE_FALSE= +fi + + MAINT=$MAINTAINER_MODE_TRUE + + + +ACLOCAL="$ACLOCAL $ACLOCAL_FLAGS" + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + CC=$ac_ct_CC +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + CC=$ac_ct_CC +else + CC="$ac_cv_prog_CC" +fi + +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$ac_ct_CC" && break +done + + CC=$ac_ct_CC +fi + +fi + + +test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&5 +echo "$as_me: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } + +# Provide some information about the compiler. +echo "$as_me:$LINENO:" \ + "checking for C compiler version" >&5 +ac_compiler=`set X $ac_compile; echo $2` +{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 + (eval $ac_compiler --version &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 + (eval $ac_compiler -v &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 + (eval $ac_compiler -V &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 +echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6 +ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` +if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 + (eval $ac_link_default) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Find the output, starting from the most likely. This scheme is +# not robust to junk in `.', hence go to wildcards (a.*) only as a last +# resort. + +# Be careful to initialize this variable, since it used to be cached. +# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. +ac_cv_exeext= +# b.out is created by i960 compilers. +for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) + ;; + conftest.$ac_ext ) + # This is the source file. + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + # FIXME: I believe we export ac_cv_exeext for Libtool, + # but it would be cool to find out if it's true. Does anybody + # maintain Libtool? --akim. + export ac_cv_exeext + break;; + * ) + break;; + esac +done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { echo "$as_me:$LINENO: error: C compiler cannot create executables +See \`config.log' for more details." >&5 +echo "$as_me: error: C compiler cannot create executables +See \`config.log' for more details." >&2;} + { (exit 77); exit 77; }; } +fi + +ac_exeext=$ac_cv_exeext +echo "$as_me:$LINENO: result: $ac_file" >&5 +echo "${ECHO_T}$ac_file" >&6 + +# Check the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +echo "$as_me:$LINENO: checking whether the C compiler works" >&5 +echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 +# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 +# If not cross compiling, check that we can run a simple program. +if test "$cross_compiling" != yes; then + if { ac_try='./$ac_file' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { echo "$as_me:$LINENO: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } + fi + fi +fi +echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + +rm -f a.out a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +# Check the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 +echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 +echo "$as_me:$LINENO: result: $cross_compiling" >&5 +echo "${ECHO_T}$cross_compiling" >&6 + +echo "$as_me:$LINENO: checking for suffix of executables" >&5 +echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + export ac_cv_exeext + break;; + * ) break;; + esac +done +else + { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +rm -f conftest$ac_cv_exeext +echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 +echo "${ECHO_T}$ac_cv_exeext" >&6 + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +echo "$as_me:$LINENO: checking for suffix of object files" >&5 +echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 +if test "${ac_cv_objext+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 +echo "${ECHO_T}$ac_cv_objext" >&6 +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 +echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 +if test "${ac_cv_c_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_compiler_gnu=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_compiler_gnu=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 +echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 +GCC=`test $ac_compiler_gnu = yes && echo yes` +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +CFLAGS="-g" +echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 +echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 +if test "${ac_cv_prog_cc_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_prog_cc_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_prog_cc_g=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 +echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 +if test "${ac_cv_prog_cc_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_prog_cc_stdc=no +ac_save_CC=$CC +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std1 is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std1. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +# Don't try gcc -ansi; that turns off useful extensions and +# breaks some systems' header files. +# AIX -qlanglvl=ansi +# Ultrix and OSF/1 -std1 +# HP-UX 10.20 and later -Ae +# HP-UX older versions -Aa -D_HPUX_SOURCE +# SVR4 -Xc -D__EXTENSIONS__ +for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_prog_cc_stdc=$ac_arg +break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext +done +rm -f conftest.$ac_ext conftest.$ac_objext +CC=$ac_save_CC + +fi + +case "x$ac_cv_prog_cc_stdc" in + x|xno) + echo "$as_me:$LINENO: result: none needed" >&5 +echo "${ECHO_T}none needed" >&6 ;; + *) + echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 + CC="$CC $ac_cv_prog_cc_stdc" ;; +esac + +# Some people use a C++ compiler to compile C. Since we use `exit', +# in C++ we need to declare it. In case someone uses the same compiler +# for both compiling C and C++ we need to have the C++ compiler decide +# the declaration of exit, since it's the most demanding environment. +cat >conftest.$ac_ext <<_ACEOF +#ifndef __cplusplus + choke me +#endif +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + for ac_declaration in \ + '' \ + 'extern "C" void std::exit (int) throw (); using std::exit;' \ + 'extern "C" void std::exit (int); using std::exit;' \ + 'extern "C" void exit (int) throw ();' \ + 'extern "C" void exit (int);' \ + 'void exit (int);' +do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_declaration +#include +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +continue +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_declaration +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +done +rm -f conftest* +if test -n "$ac_declaration"; then + echo '#ifdef __cplusplus' >>confdefs.h + echo $ac_declaration >>confdefs.h + echo '#endif' >>confdefs.h +fi + +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +DEPDIR="${am__leading_dot}deps" + + ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo done +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 +echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6 +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# We grep out `Entering directory' and `Leaving directory' +# messages which can occur if `w' ends up in MAKEFLAGS. +# In particular we don't look at `^make:' because GNU make might +# be invoked under some other name (usually "gmake"), in which +# case it prints its new name instead of `make'. +if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then + am__include=include + am__quote= + _am_result=GNU +fi +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then + am__include=.include + am__quote="\"" + _am_result=BSD + fi +fi + + +echo "$as_me:$LINENO: result: $_am_result" >&5 +echo "${ECHO_T}$_am_result" >&6 +rm -f confinc confmf + +# Check whether --enable-dependency-tracking or --disable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then + enableval="$enable_dependency_tracking" + +fi; +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi + + +if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + + + +depcc="$CC" am_compiler_list= + +echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 +echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 +if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + : > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + case $depmode in + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + none) break ;; + esac + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. + if depmode=$depmode \ + source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # (even with -Werror). So we grep stderr for any message + # that says an option was ignored. + if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 +echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6 +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + + +if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + +echo "$as_me:$LINENO: checking whether ln -s works" >&5 +echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6 +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 +else + echo "$as_me:$LINENO: result: no, using $LN_S" >&5 +echo "${ECHO_T}no, using $LN_S" >&6 +fi + + + + + +echo "$as_me:$LINENO: checking for ${CC-cc} option to accept ANSI C" >&5 +echo $ECHO_N "checking for ${CC-cc} option to accept ANSI C... $ECHO_C" >&6 +if test "${am_cv_prog_cc_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + am_cv_prog_cc_stdc=no +ac_save_CC="$CC" +# Don't try gcc -ansi; that turns off useful extensions and +# breaks some systems' header files. +# AIX -qlanglvl=ansi +# Ultrix and OSF/1 -std1 +# HP-UX 10.20 and later -Ae +# HP-UX older versions -Aa -D_HPUX_SOURCE +# SVR4 -Xc -D__EXTENSIONS__ +for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; + +int +main () +{ + +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + am_cv_prog_cc_stdc="$ac_arg"; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +done +CC="$ac_save_CC" + +fi + +if test -z "$am_cv_prog_cc_stdc"; then + echo "$as_me:$LINENO: result: none needed" >&5 +echo "${ECHO_T}none needed" >&6 +else + echo "$as_me:$LINENO: result: $am_cv_prog_cc_stdc" >&5 +echo "${ECHO_T}$am_cv_prog_cc_stdc" >&6 +fi +case "x$am_cv_prog_cc_stdc" in + x|xno) ;; + *) CC="$CC $am_cv_prog_cc_stdc" ;; +esac + + + +if test "x$GCC" = "xyes"; then + case " $CFLAGS " in + *[\ \ ]-Wall[\ \ ]*) ;; + *) CFLAGS="$CFLAGS -Wall" ;; + esac +fi + + +# Check whether --enable-oldtools or --disable-oldtools was given. +if test "${enable_oldtools+set}" = set; then + enableval="$enable_oldtools" + +fi; + + +if test "x$enable_oldtools" = "xyes"; then + ENABLE_OLDTOOLS_TRUE= + ENABLE_OLDTOOLS_FALSE='#' +else + ENABLE_OLDTOOLS_TRUE='#' + ENABLE_OLDTOOLS_FALSE= +fi + + + +# Check for getopt_long +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 +echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test "${ac_cv_prog_CPP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether non-existent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +echo "$as_me:$LINENO: result: $CPP" >&5 +echo "${ECHO_T}$CPP" >&6 +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether non-existent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + : +else + { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&5 +echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +echo "$as_me:$LINENO: checking for egrep" >&5 +echo $ECHO_N "checking for egrep... $ECHO_C" >&6 +if test "${ac_cv_prog_egrep+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if echo a | (grep -E '(a|b)') >/dev/null 2>&1 + then ac_cv_prog_egrep='grep -E' + else ac_cv_prog_egrep='egrep' + fi +fi +echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 +echo "${ECHO_T}$ac_cv_prog_egrep" >&6 + EGREP=$ac_cv_prog_egrep + + +echo "$as_me:$LINENO: checking for ANSI C header files" >&5 +echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 +if test "${ac_cv_header_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_header_stdc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_header_stdc=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then + : +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + exit(2); + exit (0); +} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_header_stdc=no +fi +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +fi +fi +echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 +echo "${ECHO_T}$ac_cv_header_stdc" >&6 +if test $ac_cv_header_stdc = yes; then + +cat >>confdefs.h <<\_ACEOF +#define STDC_HEADERS 1 +_ACEOF + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. + + + + + + + + + +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_Header=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +eval "$as_ac_Header=no" +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +if test "${ac_cv_header_getopt_h+set}" = set; then + echo "$as_me:$LINENO: checking for getopt.h" >&5 +echo $ECHO_N "checking for getopt.h... $ECHO_C" >&6 +if test "${ac_cv_header_getopt_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: $ac_cv_header_getopt_h" >&5 +echo "${ECHO_T}$ac_cv_header_getopt_h" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking getopt.h usability" >&5 +echo $ECHO_N "checking getopt.h usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking getopt.h presence" >&5 +echo $ECHO_N "checking getopt.h presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: getopt.h: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: getopt.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: getopt.h: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: getopt.h: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: getopt.h: present but cannot be compiled" >&5 +echo "$as_me: WARNING: getopt.h: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: getopt.h: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: getopt.h: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: getopt.h: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: getopt.h: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: getopt.h: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: getopt.h: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: getopt.h: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: getopt.h: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: getopt.h: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: getopt.h: in the future, the compiler will take precedence" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------------ ## +## Report this to the AC_PACKAGE_NAME lists. ## +## ------------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for getopt.h" >&5 +echo $ECHO_N "checking for getopt.h... $ECHO_C" >&6 +if test "${ac_cv_header_getopt_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_header_getopt_h=$ac_header_preproc +fi +echo "$as_me:$LINENO: result: $ac_cv_header_getopt_h" >&5 +echo "${ECHO_T}$ac_cv_header_getopt_h" >&6 + +fi +if test $ac_cv_header_getopt_h = yes; then + echo "$as_me:$LINENO: checking for getopt_long" >&5 +echo $ECHO_N "checking for getopt_long... $ECHO_C" >&6 +if test "${ac_cv_func_getopt_long+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define getopt_long to an innocuous variant, in case declares getopt_long. + For example, HP-UX 11i declares gettimeofday. */ +#define getopt_long innocuous_getopt_long + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char getopt_long (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef getopt_long + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char getopt_long (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_getopt_long) || defined (__stub___getopt_long) +choke me +#else +char (*f) () = getopt_long; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != getopt_long; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_getopt_long=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_getopt_long=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_getopt_long" >&5 +echo "${ECHO_T}$ac_cv_func_getopt_long" >&6 +if test $ac_cv_func_getopt_long = yes; then + have_getopt_long=yes + +cat >>confdefs.h <<\_ACEOF +#define HAVE_GETOPT_LONG 1 +_ACEOF + +fi + +fi + + + +if test x$have_getopt_long != xyes; then + { echo "$as_me:$LINENO: WARNING: +*** Looks as if your libc doesn't have support for getopt_long(). *** +*** Long command-line options starting with two dashes won't work. *** +" >&5 +echo "$as_me: WARNING: +*** Looks as if your libc doesn't have support for getopt_long(). *** +*** Long command-line options starting with two dashes won't work. *** +" >&2;} +fi + + +# Check for blib + + succeeded=no + + if test -z "$PKG_CONFIG"; then + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_PKG_CONFIG+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no" + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG + +if test -n "$PKG_CONFIG"; then + echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5 +echo "${ECHO_T}$PKG_CONFIG" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + fi + + if test "$PKG_CONFIG" = "no" ; then + echo "*** The pkg-config script could not be found. Make sure it is" + echo "*** in your path, or set the PKG_CONFIG environment variable" + echo "*** to the full path to pkg-config." + echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config." + else + PKG_CONFIG_MIN_VERSION=0.9.0 + if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then + echo "$as_me:$LINENO: checking for blib >= 1.1.7" >&5 +echo $ECHO_N "checking for blib >= 1.1.7... $ECHO_C" >&6 + + if $PKG_CONFIG --exists "blib >= 1.1.7" ; then + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + succeeded=yes + + echo "$as_me:$LINENO: checking BLIB_CFLAGS" >&5 +echo $ECHO_N "checking BLIB_CFLAGS... $ECHO_C" >&6 + BLIB_CFLAGS=`$PKG_CONFIG --cflags "blib >= 1.1.7"` + echo "$as_me:$LINENO: result: $BLIB_CFLAGS" >&5 +echo "${ECHO_T}$BLIB_CFLAGS" >&6 + + echo "$as_me:$LINENO: checking BLIB_LIBS" >&5 +echo $ECHO_N "checking BLIB_LIBS... $ECHO_C" >&6 + BLIB_LIBS=`$PKG_CONFIG --libs "blib >= 1.1.7"` + echo "$as_me:$LINENO: result: $BLIB_LIBS" >&5 +echo "${ECHO_T}$BLIB_LIBS" >&6 + else + BLIB_CFLAGS="" + BLIB_LIBS="" + ## If we have a custom action on failure, don't print errors, but + ## do set a variable so people can do so. + BLIB_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "blib >= 1.1.7"` + echo $BLIB_PKG_ERRORS + fi + + + + else + echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer." + echo "*** See http://www.freedesktop.org/software/pkgconfig" + fi + fi + + if test $succeeded = yes; then + : + else + { { echo "$as_me:$LINENO: error: Library requirements (blib >= 1.1.7) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them." >&5 +echo "$as_me: error: Library requirements (blib >= 1.1.7) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them." >&2;} + { (exit 1); exit 1; }; } + fi + +BLIB_VERSION=`$PKG_CONFIG --modversion blib` + +# Check for blib-aa + + succeeded=no + + if test -z "$PKG_CONFIG"; then + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_PKG_CONFIG+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no" + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG + +if test -n "$PKG_CONFIG"; then + echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5 +echo "${ECHO_T}$PKG_CONFIG" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + fi + + if test "$PKG_CONFIG" = "no" ; then + echo "*** The pkg-config script could not be found. Make sure it is" + echo "*** in your path, or set the PKG_CONFIG environment variable" + echo "*** to the full path to pkg-config." + echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config." + else + PKG_CONFIG_MIN_VERSION=0.9.0 + if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then + echo "$as_me:$LINENO: checking for blib-aa = $BLIB_VERSION" >&5 +echo $ECHO_N "checking for blib-aa = $BLIB_VERSION... $ECHO_C" >&6 + + if $PKG_CONFIG --exists "blib-aa = $BLIB_VERSION" ; then + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + succeeded=yes + + echo "$as_me:$LINENO: checking AA_CFLAGS" >&5 +echo $ECHO_N "checking AA_CFLAGS... $ECHO_C" >&6 + AA_CFLAGS=`$PKG_CONFIG --cflags "blib-aa = $BLIB_VERSION"` + echo "$as_me:$LINENO: result: $AA_CFLAGS" >&5 +echo "${ECHO_T}$AA_CFLAGS" >&6 + + echo "$as_me:$LINENO: checking AA_LIBS" >&5 +echo $ECHO_N "checking AA_LIBS... $ECHO_C" >&6 + AA_LIBS=`$PKG_CONFIG --libs "blib-aa = $BLIB_VERSION"` + echo "$as_me:$LINENO: result: $AA_LIBS" >&5 +echo "${ECHO_T}$AA_LIBS" >&6 + else + AA_CFLAGS="" + AA_LIBS="" + ## If we have a custom action on failure, don't print errors, but + ## do set a variable so people can do so. + AA_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "blib-aa = $BLIB_VERSION"` + + fi + + + + else + echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer." + echo "*** See http://www.freedesktop.org/software/pkgconfig" + fi + fi + + if test $succeeded = yes; then + have_aa=yes + else + have_aa=no + fi + + + +if test $have_aa = "yes"; then + HAVE_AA_TRUE= + HAVE_AA_FALSE='#' +else + HAVE_AA_TRUE='#' + HAVE_AA_FALSE= +fi + + +# Check for blib-pixbuf + + succeeded=no + + if test -z "$PKG_CONFIG"; then + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_PKG_CONFIG+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no" + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG + +if test -n "$PKG_CONFIG"; then + echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5 +echo "${ECHO_T}$PKG_CONFIG" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + fi + + if test "$PKG_CONFIG" = "no" ; then + echo "*** The pkg-config script could not be found. Make sure it is" + echo "*** in your path, or set the PKG_CONFIG environment variable" + echo "*** to the full path to pkg-config." + echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config." + else + PKG_CONFIG_MIN_VERSION=0.9.0 + if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then + echo "$as_me:$LINENO: checking for blib-pixbuf = $BLIB_VERSION" >&5 +echo $ECHO_N "checking for blib-pixbuf = $BLIB_VERSION... $ECHO_C" >&6 + + if $PKG_CONFIG --exists "blib-pixbuf = $BLIB_VERSION" ; then + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + succeeded=yes + + echo "$as_me:$LINENO: checking PIXBUF_CFLAGS" >&5 +echo $ECHO_N "checking PIXBUF_CFLAGS... $ECHO_C" >&6 + PIXBUF_CFLAGS=`$PKG_CONFIG --cflags "blib-pixbuf = $BLIB_VERSION"` + echo "$as_me:$LINENO: result: $PIXBUF_CFLAGS" >&5 +echo "${ECHO_T}$PIXBUF_CFLAGS" >&6 + + echo "$as_me:$LINENO: checking PIXBUF_LIBS" >&5 +echo $ECHO_N "checking PIXBUF_LIBS... $ECHO_C" >&6 + PIXBUF_LIBS=`$PKG_CONFIG --libs "blib-pixbuf = $BLIB_VERSION"` + echo "$as_me:$LINENO: result: $PIXBUF_LIBS" >&5 +echo "${ECHO_T}$PIXBUF_LIBS" >&6 + else + PIXBUF_CFLAGS="" + PIXBUF_LIBS="" + ## If we have a custom action on failure, don't print errors, but + ## do set a variable so people can do so. + PIXBUF_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "blib-pixbuf = $BLIB_VERSION"` + + fi + + + + else + echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer." + echo "*** See http://www.freedesktop.org/software/pkgconfig" + fi + fi + + if test $succeeded = yes; then + have_pixbuf=yes + else + have_pixbuf=no + fi + + + +if test $have_pixbuf = "yes"; then + HAVE_PIXBUF_TRUE= + HAVE_PIXBUF_FALSE='#' +else + HAVE_PIXBUF_TRUE='#' + HAVE_PIXBUF_FALSE= +fi + + +# Check for libmng + +# Check whether --with-libmng or --without-libmng was given. +if test "${with_libmng+set}" = set; then + withval="$with_libmng" + +fi; +have_mng=no +if test x$with_libmng != xno && test -z "$LIBMNG"; then + echo "$as_me:$LINENO: checking for mng_create in -lmng" >&5 +echo $ECHO_N "checking for mng_create in -lmng... $ECHO_C" >&6 +if test "${ac_cv_lib_mng_mng_create+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lmng -lz -lm $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char mng_create (); +int +main () +{ +mng_create (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_mng_mng_create=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_mng_mng_create=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_mng_mng_create" >&5 +echo "${ECHO_T}$ac_cv_lib_mng_mng_create" >&6 +if test $ac_cv_lib_mng_mng_create = yes; then + if test "${ac_cv_header_libmng_h+set}" = set; then + echo "$as_me:$LINENO: checking for libmng.h" >&5 +echo $ECHO_N "checking for libmng.h... $ECHO_C" >&6 +if test "${ac_cv_header_libmng_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: $ac_cv_header_libmng_h" >&5 +echo "${ECHO_T}$ac_cv_header_libmng_h" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking libmng.h usability" >&5 +echo $ECHO_N "checking libmng.h usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking libmng.h presence" >&5 +echo $ECHO_N "checking libmng.h presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: libmng.h: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: libmng.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: libmng.h: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: libmng.h: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: libmng.h: present but cannot be compiled" >&5 +echo "$as_me: WARNING: libmng.h: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: libmng.h: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: libmng.h: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: libmng.h: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: libmng.h: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: libmng.h: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: libmng.h: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: libmng.h: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: libmng.h: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: libmng.h: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: libmng.h: in the future, the compiler will take precedence" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------------ ## +## Report this to the AC_PACKAGE_NAME lists. ## +## ------------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for libmng.h" >&5 +echo $ECHO_N "checking for libmng.h... $ECHO_C" >&6 +if test "${ac_cv_header_libmng_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_header_libmng_h=$ac_header_preproc +fi +echo "$as_me:$LINENO: result: $ac_cv_header_libmng_h" >&5 +echo "${ECHO_T}$ac_cv_header_libmng_h" >&6 + +fi +if test $ac_cv_header_libmng_h = yes; then + have_mng=yes +else + { echo "$as_me:$LINENO: WARNING: *** b2mng will not be built (MNG header not found) ***" >&5 +echo "$as_me: WARNING: *** b2mng will not be built (MNG header not found) ***" >&2;} +fi + + +else + { echo "$as_me:$LINENO: WARNING: *** b2mng will not be built (MNG library not found) ***" >&5 +echo "$as_me: WARNING: *** b2mng will not be built (MNG library not found) ***" >&2;} +fi + + echo "$as_me:$LINENO: result: $have_mng" >&5 +echo "${ECHO_T}$have_mng" >&6 + if test "$have_mng" = yes; then + LIBMNG="-lmng -lz" + fi +fi + + + + +if test "$have_mng" = yes; then + HAVE_LIBMNG_TRUE= + HAVE_LIBMNG_FALSE='#' +else + HAVE_LIBMNG_TRUE='#' + HAVE_LIBMNG_FALSE= +fi + + + + + + + + ac_config_files="$ac_config_files Makefile doc/Makefile doc/b2b.1 doc/b2image.1 doc/b2mng.1 doc/bsend.1 doc/bplay.1 doc/bmultiplexer.1 doc/blinkenproxy.1 src/Makefile" +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, don't put newlines in cache variables' values. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +{ + (set) 2>&1 | + case `(ac_space=' '; set | grep ac_space) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n \ + "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + ;; + esac; +} | + sed ' + t clear + : clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + : end' >>confcache +if diff $cache_file confcache >/dev/null 2>&1; then :; else + if test -w $cache_file; then + test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" + cat confcache >$cache_file + else + echo "not updating unwritable cache $cache_file" + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# VPATH may cause trouble with some makes, so we remove $(srcdir), +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/; +s/:*\${srcdir}:*/:/; +s/:*@srcdir@:*/:/; +s/^\([^=]*=[ ]*\):*/\1/; +s/:*$//; +s/^[^=]*=[ ]*$//; +}' +fi + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_i=`echo "$ac_i" | + sed 's/\$U\././;s/\.o$//;s/\.obj$//'` + # 2. Add them. + ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" + ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + +if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${ENABLE_OLDTOOLS_TRUE}" && test -z "${ENABLE_OLDTOOLS_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"ENABLE_OLDTOOLS\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"ENABLE_OLDTOOLS\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${HAVE_AA_TRUE}" && test -z "${HAVE_AA_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"HAVE_AA\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"HAVE_AA\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${HAVE_PIXBUF_TRUE}" && test -z "${HAVE_PIXBUF_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"HAVE_PIXBUF\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"HAVE_PIXBUF\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${HAVE_LIBMNG_TRUE}" && test -z "${HAVE_LIBMNG_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"HAVE_LIBMNG\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"HAVE_LIBMNG\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi + +: ${CONFIG_STATUS=./config.status} +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 +echo "$as_me: creating $CONFIG_STATUS" >&6;} +cat >$CONFIG_STATUS <<_ACEOF +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false +SHELL=\${CONFIG_SHELL-$SHELL} +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then + set -o posix +fi +DUALCASE=1; export DUALCASE # for MKS sh + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# Work around bugs in pre-3.0 UWIN ksh. +$as_unset ENV MAIL MAILPATH +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)$' \| \ + . : '\(.\)' 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } + /^X\/\(\/\/\)$/{ s//\1/; q; } + /^X\/\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + + +# PATH needs CR, and LINENO needs CR and PATH. +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" || { + # Find who we are. Look in the path if we contain no path at all + # relative or not. + case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done + + ;; + esac + # We did not find ourselves, most probably we were run as `sh COMMAND' + # in which case we are not to be found in the path. + if test "x$as_myself" = x; then + as_myself=$0 + fi + if test ! -f "$as_myself"; then + { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 +echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} + { (exit 1); exit 1; }; } + fi + case $CONFIG_SHELL in + '') + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for as_base in sh bash ksh sh5; do + case $as_dir in + /*) + if ("$as_dir/$as_base" -c ' + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then + $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } + $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } + CONFIG_SHELL=$as_dir/$as_base + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$0" ${1+"$@"} + fi;; + esac + done +done +;; + esac + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line before each line; the second 'sed' does the real + # work. The second script uses 'N' to pair each line-number line + # with the numbered line, and appends trailing '-' during + # substitution so that $LINENO is not a special case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) + sed '=' <$as_myself | + sed ' + N + s,$,-, + : loop + s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + t loop + s,-$,, + s,^['$as_cr_digits']*\n,, + ' >$as_me.lineno && + chmod +x $as_me.lineno || + { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 +echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensible to this). + . ./$as_me.lineno + # Exit status is that of the last command. + exit +} + + +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ECHO_C=' +' ECHO_T=' ' ;; + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +esac + +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + # We could just check for DJGPP; but this test a) works b) is more generic + # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). + if test -f conf$$.exe; then + # Don't use ln at all; we don't have any links + as_ln_s='cp -p' + else + as_ln_s='ln -s' + fi +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.file + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_executable_p="test -f" + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +# IFS +# We need space, tab and new line, in precisely that order. +as_nl=' +' +IFS=" $as_nl" + +# CDPATH. +$as_unset CDPATH + +exec 6>&1 + +# Open the log real soon, to keep \$[0] and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. Logging --version etc. is OK. +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX +} >&5 +cat >&5 <<_CSEOF + +This file was extended by $as_me, which was +generated by GNU Autoconf 2.59. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +_CSEOF +echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 +echo >&5 +_ACEOF + +# Files that config.status was made for. +if test -n "$ac_config_files"; then + echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_headers"; then + echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_links"; then + echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_commands"; then + echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS +fi + +cat >>$CONFIG_STATUS <<\_ACEOF + +ac_cs_usage="\ +\`$as_me' instantiates files from templates according to the +current configuration. + +Usage: $0 [OPTIONS] [FILE]... + + -h, --help print this help, then exit + -V, --version print version number, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to ." +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF +ac_cs_version="\\ +config.status +configured by $0, generated by GNU Autoconf 2.59, + with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" + +Copyright (C) 2003 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." +srcdir=$srcdir +INSTALL="$INSTALL" +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +# If no file are specified by the user, then we need to provide default +# value. By we need to know if files were specified by the user. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=*) + ac_option=`expr "x$1" : 'x\([^=]*\)='` + ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` + ac_shift=: + ;; + -*) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + *) # This is not an option, so the user has probably given explicit + # arguments. + ac_option=$1 + ac_need_defaults=false;; + esac + + case $ac_option in + # Handling of the options. +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --vers* | -V ) + echo "$ac_cs_version"; exit 0 ;; + --he | --h) + # Conflict between --help and --header + { { echo "$as_me:$LINENO: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&5 +echo "$as_me: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&2;} + { (exit 1); exit 1; }; };; + --help | --hel | -h ) + echo "$ac_cs_usage"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + CONFIG_FILES="$CONFIG_FILES $ac_optarg" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" + ac_need_defaults=false;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&5 +echo "$as_me: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&2;} + { (exit 1); exit 1; }; } ;; + + *) ac_config_targets="$ac_config_targets $1" ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF +if \$ac_cs_recheck; then + echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 + exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion +fi + +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF +# +# INIT-COMMANDS section. +# + +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + +_ACEOF + + + +cat >>$CONFIG_STATUS <<\_ACEOF +for ac_config_target in $ac_config_targets +do + case "$ac_config_target" in + # Handling of arguments. + "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "doc/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; + "doc/b2b.1" ) CONFIG_FILES="$CONFIG_FILES doc/b2b.1" ;; + "doc/b2image.1" ) CONFIG_FILES="$CONFIG_FILES doc/b2image.1" ;; + "doc/b2mng.1" ) CONFIG_FILES="$CONFIG_FILES doc/b2mng.1" ;; + "doc/bsend.1" ) CONFIG_FILES="$CONFIG_FILES doc/bsend.1" ;; + "doc/bplay.1" ) CONFIG_FILES="$CONFIG_FILES doc/bplay.1" ;; + "doc/bmultiplexer.1" ) CONFIG_FILES="$CONFIG_FILES doc/bmultiplexer.1" ;; + "doc/blinkenproxy.1" ) CONFIG_FILES="$CONFIG_FILES doc/blinkenproxy.1" ;; + "src/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; + "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; + *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 +echo "$as_me: error: invalid argument: $ac_config_target" >&2;} + { (exit 1); exit 1; }; };; + esac +done + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason to put it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Create a temporary directory, and hook for its removal unless debugging. +$debug || +{ + trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 + trap '{ (exit 1); exit 1; }' 1 2 13 15 +} + +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=./confstat$$-$RANDOM + (umask 077 && mkdir $tmp) +} || +{ + echo "$me: cannot create a temporary directory in ." >&2 + { (exit 1); exit 1; } +} + +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF + +# +# CONFIG_FILES section. +# + +# No need to generate the scripts if there are no CONFIG_FILES. +# This happens for instance when ./config.status config.h +if test -n "\$CONFIG_FILES"; then + # Protect against being on the right side of a sed subst in config.status. + sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; + s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF +s,@SHELL@,$SHELL,;t t +s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t +s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t +s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t +s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t +s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t +s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t +s,@exec_prefix@,$exec_prefix,;t t +s,@prefix@,$prefix,;t t +s,@program_transform_name@,$program_transform_name,;t t +s,@bindir@,$bindir,;t t +s,@sbindir@,$sbindir,;t t +s,@libexecdir@,$libexecdir,;t t +s,@datadir@,$datadir,;t t +s,@sysconfdir@,$sysconfdir,;t t +s,@sharedstatedir@,$sharedstatedir,;t t +s,@localstatedir@,$localstatedir,;t t +s,@libdir@,$libdir,;t t +s,@includedir@,$includedir,;t t +s,@oldincludedir@,$oldincludedir,;t t +s,@infodir@,$infodir,;t t +s,@mandir@,$mandir,;t t +s,@build_alias@,$build_alias,;t t +s,@host_alias@,$host_alias,;t t +s,@target_alias@,$target_alias,;t t +s,@DEFS@,$DEFS,;t t +s,@ECHO_C@,$ECHO_C,;t t +s,@ECHO_N@,$ECHO_N,;t t +s,@ECHO_T@,$ECHO_T,;t t +s,@LIBS@,$LIBS,;t t +s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t +s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t +s,@INSTALL_DATA@,$INSTALL_DATA,;t t +s,@CYGPATH_W@,$CYGPATH_W,;t t +s,@PACKAGE@,$PACKAGE,;t t +s,@VERSION@,$VERSION,;t t +s,@ACLOCAL@,$ACLOCAL,;t t +s,@AUTOCONF@,$AUTOCONF,;t t +s,@AUTOMAKE@,$AUTOMAKE,;t t +s,@AUTOHEADER@,$AUTOHEADER,;t t +s,@MAKEINFO@,$MAKEINFO,;t t +s,@AMTAR@,$AMTAR,;t t +s,@install_sh@,$install_sh,;t t +s,@STRIP@,$STRIP,;t t +s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t +s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t +s,@AWK@,$AWK,;t t +s,@SET_MAKE@,$SET_MAKE,;t t +s,@am__leading_dot@,$am__leading_dot,;t t +s,@MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t +s,@MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t +s,@MAINT@,$MAINT,;t t +s,@CC@,$CC,;t t +s,@CFLAGS@,$CFLAGS,;t t +s,@LDFLAGS@,$LDFLAGS,;t t +s,@CPPFLAGS@,$CPPFLAGS,;t t +s,@ac_ct_CC@,$ac_ct_CC,;t t +s,@EXEEXT@,$EXEEXT,;t t +s,@OBJEXT@,$OBJEXT,;t t +s,@DEPDIR@,$DEPDIR,;t t +s,@am__include@,$am__include,;t t +s,@am__quote@,$am__quote,;t t +s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t +s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t +s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t +s,@CCDEPMODE@,$CCDEPMODE,;t t +s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t +s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t +s,@LN_S@,$LN_S,;t t +s,@ENABLE_OLDTOOLS_TRUE@,$ENABLE_OLDTOOLS_TRUE,;t t +s,@ENABLE_OLDTOOLS_FALSE@,$ENABLE_OLDTOOLS_FALSE,;t t +s,@CPP@,$CPP,;t t +s,@EGREP@,$EGREP,;t t +s,@PKG_CONFIG@,$PKG_CONFIG,;t t +s,@BLIB_CFLAGS@,$BLIB_CFLAGS,;t t +s,@BLIB_LIBS@,$BLIB_LIBS,;t t +s,@AA_CFLAGS@,$AA_CFLAGS,;t t +s,@AA_LIBS@,$AA_LIBS,;t t +s,@HAVE_AA_TRUE@,$HAVE_AA_TRUE,;t t +s,@HAVE_AA_FALSE@,$HAVE_AA_FALSE,;t t +s,@PIXBUF_CFLAGS@,$PIXBUF_CFLAGS,;t t +s,@PIXBUF_LIBS@,$PIXBUF_LIBS,;t t +s,@HAVE_PIXBUF_TRUE@,$HAVE_PIXBUF_TRUE,;t t +s,@HAVE_PIXBUF_FALSE@,$HAVE_PIXBUF_FALSE,;t t +s,@LIBMNG@,$LIBMNG,;t t +s,@HAVE_LIBMNG_TRUE@,$HAVE_LIBMNG_TRUE,;t t +s,@HAVE_LIBMNG_FALSE@,$HAVE_LIBMNG_FALSE,;t t +s,@PACAKGE@,$PACAKGE,;t t +s,@LIBOBJS@,$LIBOBJS,;t t +s,@LTLIBOBJS@,$LTLIBOBJS,;t t +CEOF + +_ACEOF + + cat >>$CONFIG_STATUS <<\_ACEOF + # Split the substitutions into bite-sized pieces for seds with + # small command number limits, like on Digital OSF/1 and HP-UX. + ac_max_sed_lines=48 + ac_sed_frag=1 # Number of current file. + ac_beg=1 # First line for current file. + ac_end=$ac_max_sed_lines # Line after last line for current file. + ac_more_lines=: + ac_sed_cmds= + while $ac_more_lines; do + if test $ac_beg -gt 1; then + sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag + else + sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag + fi + if test ! -s $tmp/subs.frag; then + ac_more_lines=false + else + # The purpose of the label and of the branching condition is to + # speed up the sed processing (if there are no `@' at all, there + # is no need to browse any of the substitutions). + # These are the two extra sed commands mentioned above. + (echo ':t + /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed + if test -z "$ac_sed_cmds"; then + ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" + else + ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" + fi + ac_sed_frag=`expr $ac_sed_frag + 1` + ac_beg=$ac_end + ac_end=`expr $ac_end + $ac_max_sed_lines` + fi + done + if test -z "$ac_sed_cmds"; then + ac_sed_cmds=cat + fi +fi # test -n "$CONFIG_FILES" + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case $ac_file in + - | *:- | *:-:* ) # input from stdin + cat >$tmp/stdin + ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + * ) ac_file_in=$ac_file.in ;; + esac + + # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. + ac_dir=`(dirname "$ac_file") 2>/dev/null || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { if $as_mkdir_p; then + mkdir -p "$ac_dir" + else + as_dir="$ac_dir" + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; }; } + + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac + +# Do not use `cd foo && pwd` to compute absolute paths, because +# the directories may not exist. +case `pwd` in +.) ac_abs_builddir="$ac_dir";; +*) + case "$ac_dir" in + .) ac_abs_builddir=`pwd`;; + [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; + *) ac_abs_builddir=`pwd`/"$ac_dir";; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_builddir=${ac_top_builddir}.;; +*) + case ${ac_top_builddir}. in + .) ac_abs_top_builddir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; + *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_srcdir=$ac_srcdir;; +*) + case $ac_srcdir in + .) ac_abs_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; + *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_srcdir=$ac_top_srcdir;; +*) + case $ac_top_srcdir in + .) ac_abs_top_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; + *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; + esac;; +esac + + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_builddir$INSTALL ;; + esac + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + if test x"$ac_file" = x-; then + configure_input= + else + configure_input="$ac_file. " + fi + configure_input=$configure_input"Generated from `echo $ac_file_in | + sed 's,.*/,,'` by configure." + + # First look for the input files in the build tree, otherwise in the + # src tree. + ac_file_inputs=`IFS=: + for f in $ac_file_in; do + case $f in + -) echo $tmp/stdin ;; + [\\/$]*) + # Absolute (can't be DOS-style, as IFS=:) + test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + echo "$f";; + *) # Relative + if test -f "$f"; then + # Build tree + echo "$f" + elif test -f "$srcdir/$f"; then + # Source tree + echo "$srcdir/$f" + else + # /dev/null tree + { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + fi;; + esac + done` || { (exit 1); exit 1; } + + if test x"$ac_file" != x-; then + { echo "$as_me:$LINENO: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + rm -f "$ac_file" + fi +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF + sed "$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s,@configure_input@,$configure_input,;t t +s,@srcdir@,$ac_srcdir,;t t +s,@abs_srcdir@,$ac_abs_srcdir,;t t +s,@top_srcdir@,$ac_top_srcdir,;t t +s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t +s,@builddir@,$ac_builddir,;t t +s,@abs_builddir@,$ac_abs_builddir,;t t +s,@top_builddir@,$ac_top_builddir,;t t +s,@abs_top_builddir@,$ac_abs_top_builddir,;t t +s,@INSTALL@,$ac_INSTALL,;t t +" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out + rm -f $tmp/stdin + if test x"$ac_file" != x-; then + mv $tmp/out $ac_file + else + cat $tmp/out + rm -f $tmp/out + fi + +done +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF + +# +# CONFIG_HEADER section. +# + +# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where +# NAME is the cpp macro being defined and VALUE is the value it is being given. +# +# ac_d sets the value in "#define NAME VALUE" lines. +ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' +ac_dB='[ ].*$,\1#\2' +ac_dC=' ' +ac_dD=',;t' +# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". +ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +ac_uB='$,\1#\2define\3' +ac_uC=' ' +ac_uD=',;t' + +for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case $ac_file in + - | *:- | *:-:* ) # input from stdin + cat >$tmp/stdin + ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + * ) ac_file_in=$ac_file.in ;; + esac + + test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + + # First look for the input files in the build tree, otherwise in the + # src tree. + ac_file_inputs=`IFS=: + for f in $ac_file_in; do + case $f in + -) echo $tmp/stdin ;; + [\\/$]*) + # Absolute (can't be DOS-style, as IFS=:) + test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + # Do quote $f, to prevent DOS paths from being IFS'd. + echo "$f";; + *) # Relative + if test -f "$f"; then + # Build tree + echo "$f" + elif test -f "$srcdir/$f"; then + # Source tree + echo "$srcdir/$f" + else + # /dev/null tree + { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + fi;; + esac + done` || { (exit 1); exit 1; } + # Remove the trailing spaces. + sed 's/[ ]*$//' $ac_file_inputs >$tmp/in + +_ACEOF + +# Transform confdefs.h into two sed scripts, `conftest.defines' and +# `conftest.undefs', that substitutes the proper values into +# config.h.in to produce config.h. The first handles `#define' +# templates, and the second `#undef' templates. +# And first: Protect against being on the right side of a sed subst in +# config.status. Protect against being in an unquoted here document +# in config.status. +rm -f conftest.defines conftest.undefs +# Using a here document instead of a string reduces the quoting nightmare. +# Putting comments in sed scripts is not portable. +# +# `end' is used to avoid that the second main sed command (meant for +# 0-ary CPP macros) applies to n-ary macro definitions. +# See the Autoconf documentation for `clear'. +cat >confdef2sed.sed <<\_ACEOF +s/[\\&,]/\\&/g +s,[\\$`],\\&,g +t clear +: clear +s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp +t end +s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp +: end +_ACEOF +# If some macros were called several times there might be several times +# the same #defines, which is useless. Nevertheless, we may not want to +# sort them, since we want the *last* AC-DEFINE to be honored. +uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines +sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs +rm -f confdef2sed.sed + +# This sed command replaces #undef with comments. This is necessary, for +# example, in the case of _POSIX_SOURCE, which is predefined and required +# on some systems where configure will not decide to define it. +cat >>conftest.undefs <<\_ACEOF +s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, +_ACEOF + +# Break up conftest.defines because some shells have a limit on the size +# of here documents, and old seds have small limits too (100 cmds). +echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS +echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS +echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS +echo ' :' >>$CONFIG_STATUS +rm -f conftest.tail +while grep . conftest.defines >/dev/null +do + # Write a limited-size here document to $tmp/defines.sed. + echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS + # Speed up: don't consider the non `#define' lines. + echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS + # Work around the forget-to-reset-the-flag bug. + echo 't clr' >>$CONFIG_STATUS + echo ': clr' >>$CONFIG_STATUS + sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS + echo 'CEOF + sed -f $tmp/defines.sed $tmp/in >$tmp/out + rm -f $tmp/in + mv $tmp/out $tmp/in +' >>$CONFIG_STATUS + sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail + rm -f conftest.defines + mv conftest.tail conftest.defines +done +rm -f conftest.defines +echo ' fi # grep' >>$CONFIG_STATUS +echo >>$CONFIG_STATUS + +# Break up conftest.undefs because some shells have a limit on the size +# of here documents, and old seds have small limits too (100 cmds). +echo ' # Handle all the #undef templates' >>$CONFIG_STATUS +rm -f conftest.tail +while grep . conftest.undefs >/dev/null +do + # Write a limited-size here document to $tmp/undefs.sed. + echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS + # Speed up: don't consider the non `#undef' + echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS + # Work around the forget-to-reset-the-flag bug. + echo 't clr' >>$CONFIG_STATUS + echo ': clr' >>$CONFIG_STATUS + sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS + echo 'CEOF + sed -f $tmp/undefs.sed $tmp/in >$tmp/out + rm -f $tmp/in + mv $tmp/out $tmp/in +' >>$CONFIG_STATUS + sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail + rm -f conftest.undefs + mv conftest.tail conftest.undefs +done +rm -f conftest.undefs + +cat >>$CONFIG_STATUS <<\_ACEOF + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + if test x"$ac_file" = x-; then + echo "/* Generated by configure. */" >$tmp/config.h + else + echo "/* $ac_file. Generated by configure. */" >$tmp/config.h + fi + cat $tmp/in >>$tmp/config.h + rm -f $tmp/in + if test x"$ac_file" != x-; then + if diff $ac_file $tmp/config.h >/dev/null 2>&1; then + { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 +echo "$as_me: $ac_file is unchanged" >&6;} + else + ac_dir=`(dirname "$ac_file") 2>/dev/null || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { if $as_mkdir_p; then + mkdir -p "$ac_dir" + else + as_dir="$ac_dir" + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; }; } + + rm -f $ac_file + mv $tmp/config.h $ac_file + fi + else + cat $tmp/config.h + rm -f $tmp/config.h + fi +# Compute $ac_file's index in $config_headers. +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $ac_file | $ac_file:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null || +$as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X$ac_file : 'X\(//\)[^/]' \| \ + X$ac_file : 'X\(//\)$' \| \ + X$ac_file : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X$ac_file | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'`/stamp-h$_am_stamp_count +done +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF + +# +# CONFIG_COMMANDS section. +# +for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue + ac_dest=`echo "$ac_file" | sed 's,:.*,,'` + ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_dir=`(dirname "$ac_dest") 2>/dev/null || +$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_dest" : 'X\(//\)[^/]' \| \ + X"$ac_dest" : 'X\(//\)$' \| \ + X"$ac_dest" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$ac_dest" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { if $as_mkdir_p; then + mkdir -p "$ac_dir" + else + as_dir="$ac_dir" + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; }; } + + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac + +# Do not use `cd foo && pwd` to compute absolute paths, because +# the directories may not exist. +case `pwd` in +.) ac_abs_builddir="$ac_dir";; +*) + case "$ac_dir" in + .) ac_abs_builddir=`pwd`;; + [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; + *) ac_abs_builddir=`pwd`/"$ac_dir";; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_builddir=${ac_top_builddir}.;; +*) + case ${ac_top_builddir}. in + .) ac_abs_top_builddir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; + *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_srcdir=$ac_srcdir;; +*) + case $ac_srcdir in + .) ac_abs_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; + *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_srcdir=$ac_top_srcdir;; +*) + case $ac_top_srcdir in + .) ac_abs_top_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; + *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; + esac;; +esac + + + { echo "$as_me:$LINENO: executing $ac_dest commands" >&5 +echo "$as_me: executing $ac_dest commands" >&6;} + case $ac_dest in + depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # So let's grep whole file. + if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then + dirpart=`(dirname "$mf") 2>/dev/null || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + else + continue + fi + grep '^DEP_FILES *= *[^ #]' < "$mf" > /dev/null || continue + # Extract the definition of DEP_FILES from the Makefile without + # running `make'. + DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"` + test -z "$DEPDIR" && continue + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n -e '/^U = / s///p' < "$mf"` + test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR" + # We invoke sed twice because it is the simplest approach to + # changing $(DEPDIR) to its actual value in the expansion. + for file in `sed -n -e ' + /^DEP_FILES = .*\\\\$/ { + s/^DEP_FILES = // + :loop + s/\\\\$// + p + n + /\\\\$/ b loop + p + } + /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`(dirname "$file") 2>/dev/null || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { if $as_mkdir_p; then + mkdir -p $dirpart/$fdir + else + as_dir=$dirpart/$fdir + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5 +echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;} + { (exit 1); exit 1; }; }; } + + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done +done + ;; + esac +done +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF + +{ (exit 0); exit 0; } +_ACEOF +chmod +x $CONFIG_STATUS +ac_clean_files=$ac_clean_files_save + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || { (exit 1); exit 1; } +fi + + +echo "$as_me:$LINENO: result: +Build options: + Version $VERSION + blib version $BLIB_VERSION + Install prefix $prefix + +Tools: + b2b yes + b2image $have_pixbuf + b2mng $have_mng + blinkenproxy yes + bmultiplexer yes + bplay $have_aa + bsend yes +" >&5 +echo "${ECHO_T} +Build options: + Version $VERSION + blib version $BLIB_VERSION + Install prefix $prefix + +Tools: + b2b yes + b2image $have_pixbuf + b2mng $have_mng + blinkenproxy yes + bmultiplexer yes + bplay $have_aa + bsend yes +" >&6 diff --git a/blinkentools-2.9/configure.in b/blinkentools-2.9/configure.in new file mode 100644 index 0000000..2e4ba88 --- /dev/null +++ b/blinkentools-2.9/configure.in @@ -0,0 +1,114 @@ +AC_INIT(src/b2b.c) + +PACKAGE=blinkentools +VERSION=2.9 + +AM_INIT_AUTOMAKE($PACKAGE,$VERSION) + +AM_CONFIG_HEADER(config.h) + +AM_MAINTAINER_MODE + +ACLOCAL="$ACLOCAL $ACLOCAL_FLAGS" + +AC_PROG_CC +AC_PROG_LN_S +AM_PROG_CC_STDC + + +changequote(,)dnl +if test "x$GCC" = "xyes"; then + case " $CFLAGS " in + *[\ \ ]-Wall[\ \ ]*) ;; + *) CFLAGS="$CFLAGS -Wall" ;; + esac +fi +changequote([,])dnl + + +AC_ARG_ENABLE(oldtools, + [ --enable-oldtools build old-fashioned and obsoleted tools]) +AM_CONDITIONAL(ENABLE_OLDTOOLS, test "x$enable_oldtools" = "xyes") + + +# Check for getopt_long +AC_CHECK_HEADER(getopt.h, + [AC_CHECK_FUNC(getopt_long, + have_getopt_long=yes + AC_DEFINE(HAVE_GETOPT_LONG, 1, + [Define to 1 if your libc has support for getopt_long().]))]) + +if test x$have_getopt_long != xyes; then + AC_MSG_WARN([ +*** Looks as if your libc doesn't have support for getopt_long(). *** +*** Long command-line options starting with two dashes won't work. *** +]) +fi + + +# Check for blib +PKG_CHECK_MODULES(BLIB, blib >= 1.1.7) +BLIB_VERSION=`$PKG_CONFIG --modversion blib` + +# Check for blib-aa +PKG_CHECK_MODULES(AA, blib-aa = $BLIB_VERSION, + have_aa=yes, have_aa=no) +AM_CONDITIONAL(HAVE_AA, test $have_aa = "yes") + +# Check for blib-pixbuf +PKG_CHECK_MODULES(PIXBUF, blib-pixbuf = $BLIB_VERSION, + have_pixbuf=yes, have_pixbuf=no) +AM_CONDITIONAL(HAVE_PIXBUF, test $have_pixbuf = "yes") + +# Check for libmng +AC_ARG_WITH(libmng, [ --without-libmng don't build apps that need libmng (b2mng)]) +have_mng=no +if test x$with_libmng != xno && test -z "$LIBMNG"; then + AC_CHECK_LIB(mng, mng_create, + [AC_CHECK_HEADER(libmng.h, + have_mng=yes, + [AC_MSG_WARN(*** b2mng will not be built (MNG header not found) ***)])], + [AC_MSG_WARN(*** b2mng will not be built (MNG library not found) ***)], + -lz -lm) + AC_MSG_RESULT($have_mng) + if test "$have_mng" = yes; then + LIBMNG="-lmng -lz" + fi +fi + +AC_SUBST(LIBMNG) +AM_CONDITIONAL(HAVE_LIBMNG, test "$have_mng" = yes) + + +AC_SUBST(PACAKGE) +AC_SUBST(VERSION) + + +AC_OUTPUT([ +Makefile +doc/Makefile +doc/b2b.1 +doc/b2image.1 +doc/b2mng.1 +doc/bsend.1 +doc/bplay.1 +doc/bmultiplexer.1 +doc/blinkenproxy.1 +src/Makefile +]) + +AC_MSG_RESULT([ +Build options: + Version $VERSION + blib version $BLIB_VERSION + Install prefix $prefix + +Tools: + b2b yes + b2image $have_pixbuf + b2mng $have_mng + blinkenproxy yes + bmultiplexer yes + bplay $have_aa + bsend yes +]) diff --git a/blinkentools-2.9/debian/changelog b/blinkentools-2.9/debian/changelog new file mode 100644 index 0000000..5e3489d --- /dev/null +++ b/blinkentools-2.9/debian/changelog @@ -0,0 +1,5 @@ +blinkentools (2.3.0) unstable; urgency=low + + * unofficial debian packages + + -- Sven Neumann Tue, 23 Dec 2003 05:12:00 +0100 diff --git a/blinkentools-2.9/debian/control b/blinkentools-2.9/debian/control new file mode 100644 index 0000000..d9f9e89 --- /dev/null +++ b/blinkentools-2.9/debian/control @@ -0,0 +1,11 @@ +Source: blinkentools +Priority: optional +Maintainer: Sven Neumann +Build-Depends: debhelper (>> 3.0.0), autoconf +Standards-Version: 3.5.6 + +Package: blinkentools +Section: utils +Architecture: any +Depends: libblib +Description: command-line utilities for Blinkenlights diff --git a/blinkentools-2.9/debian/copyright b/blinkentools-2.9/debian/copyright new file mode 100644 index 0000000..2d02824 --- /dev/null +++ b/blinkentools-2.9/debian/copyright @@ -0,0 +1,29 @@ +This package was debianized by Sven Neumann +Mon Dec 22 20:22:42 CET 2003 + +It was downloaded from http://sven.gimp.org/blinkenlights + +Upstream Authors: + + Sven Neumann + Michael Natterer + Daniel Mack + +Copyright: + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +On Debian GNU/Linux systems, the complete text of the GNU General +Public License can be found in `/usr/share/common-licenses/GPL'. diff --git a/blinkentools-2.9/debian/dirs b/blinkentools-2.9/debian/dirs new file mode 100644 index 0000000..e772481 --- /dev/null +++ b/blinkentools-2.9/debian/dirs @@ -0,0 +1 @@ +usr/bin diff --git a/blinkentools-2.9/debian/docs b/blinkentools-2.9/debian/docs new file mode 100644 index 0000000..ba8894c --- /dev/null +++ b/blinkentools-2.9/debian/docs @@ -0,0 +1,2 @@ +README + diff --git a/blinkentools-2.9/debian/rules b/blinkentools-2.9/debian/rules new file mode 100755 index 0000000..95f77f4 --- /dev/null +++ b/blinkentools-2.9/debian/rules @@ -0,0 +1,89 @@ +#!/usr/bin/make -f + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + +# This is the debhelper compatability version to use. +export DH_COMPAT=3 + +DEVPACKAGE=$(shell dh_listpackages | grep -- -udeb.*dev$$) +VERSION=$(shell dpkg-parsechangelog | grep ^Version: | cut -d ' ' -f 2) +ARCH=$(shell dpkg --print-architecture) + + +configure: configure-dist + +configure-dist: $(BUILD_DIST)/configure-stamp + + +$(BUILD_DIST)/configure-stamp: + dh_testdir + + mkdir -p $(BUILD_DIST) + + cd $(BUILD_DIST) && \ + ../configure --prefix=/usr --disable-gtk-doc + + touch $@ + +build: build-dist + +build-dist: configure-dist $(BUILD_DIST)/build-stamp + +$(BUILD_DIST)/build-stamp: + dh_testdir + + $(MAKE) -C $(BUILD_DIST) + + touch $@ + +clean: + dh_testdir + dh_testroot + + -$(MAKE) distclean + -rm -f install-test-stamp + -rm -rf $(BUILD_DIST) + + dh_clean + +install: install-dist + +install-test: install-test-stamp +install-test-stamp: + dh_testdir + dh_testroot + dh_clean -k + dh_installdirs + + touch $@ + +install-dist: build-dist install-test + + $(MAKE) -C $(BUILD_DIST) install prefix=$(CURDIR)/debian/tmp/usr + +# Build architecture-independent files here. +binary-indep: build install +# We have nothing to do by default. + +# Build architecture-dependent files here. +binary-arch: build install + dh_testdir + dh_testroot + + dh_movefiles + dh_installdocs + dh_installchangelogs ChangeLog + dh_link + dh_strip + dh_compress + dh_fixperms + dh_makeshlibs + dh_installdeb + dh_shlibdeps + dh_gencontrol + dh_md5sums + dh_builddeb + +binary: binary-indep binary-arch +.PHONY: build clean binary-indep binary-arch binary install configure diff --git a/blinkentools-2.9/depcomp b/blinkentools-2.9/depcomp new file mode 100755 index 0000000..edb5d38 --- /dev/null +++ b/blinkentools-2.9/depcomp @@ -0,0 +1,479 @@ +#! /bin/sh + +# depcomp - compile a program generating dependencies as side-effects +# Copyright 1999, 2000, 2003 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Alexandre Oliva . + +if test -z "$depmode" || test -z "$source" || test -z "$object"; then + echo "depcomp: Variables source, object and depmode must be set" 1>&2 + exit 1 +fi +# `libtool' can also be set to `yes' or `no'. + +if test -z "$depfile"; then + base=`echo "$object" | sed -e 's,^.*/,,' -e 's,\.\([^.]*\)$,.P\1,'` + dir=`echo "$object" | sed 's,/.*$,/,'` + if test "$dir" = "$object"; then + dir= + fi + # FIXME: should be _deps on DOS. + depfile="$dir.deps/$base" +fi + +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# Some modes work just like other modes, but use different flags. We +# parameterize here, but still list the modes in the big case below, +# to make depend.m4 easier to write. Note that we *cannot* use a case +# here, because this file can only contain one case statement. +if test "$depmode" = hp; then + # HP compiler uses -M and no extra arg. + gccflag=-M + depmode=gcc +fi + +if test "$depmode" = dashXmstdout; then + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout +fi + +case "$depmode" in +gcc3) +## gcc 3 implements dependency tracking that does exactly what +## we want. Yay! Note: for some reason libtool 1.4 doesn't like +## it if -MD -MP comes after the -MF stuff. Hmm. + "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## There are various ways to get dependency output from gcc. Here's +## why we pick this rather obscure method: +## - Don't want to use -MD because we'd like the dependencies to end +## up in a subdir. Having to rename by hand is ugly. +## (We might end up doing this anyway to support other compilers.) +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like +## -MM, not -M (despite what the docs say). +## - Using -M directly means running the compiler twice (even worse +## than renaming). + if test -z "$gccflag"; then + gccflag=-MD, + fi + "$@" -Wp,"$gccflag$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz +## The second -e expression handles DOS-style file names with drive letters. + sed -e 's/^[^:]*: / /' \ + -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" +## This next piece of magic avoids the `deleted header file' problem. +## The problem is that when a header file which appears in a .P file +## is deleted, the dependency causes make to die (because there is +## typically no way to rebuild the header). We avoid this by adding +## dummy dependencies for each header file. Too bad gcc doesn't do +## this for us directly. + tr ' ' ' +' < "$tmpdepfile" | +## Some versions of gcc put a space before the `:'. On the theory +## that the space means something, we add a space to the output as +## well. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +sgi) + if test "$libtool" = yes; then + "$@" "-Wp,-MDupdate,$tmpdepfile" + else + "$@" -MDupdate "$tmpdepfile" + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + + if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files + echo "$object : \\" > "$depfile" + + # Clip off the initial element (the dependent). Don't try to be + # clever and replace this with sed code, as IRIX sed won't handle + # lines with more than a fixed number of characters (4096 in + # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; + # the IRIX cc adds comments like `#:fec' to the end of the + # dependency line. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ + tr ' +' ' ' >> $depfile + echo >> $depfile + + # The second pass generates a dummy entry for each header file. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> $depfile + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +aix) + # The C for AIX Compiler uses -M and outputs the dependencies + # in a .u file. In older versions, this file always lives in the + # current directory. Also, the AIX compiler puts `$object:' at the + # start of each line; $object doesn't have directory information. + # Version 6 uses the directory in both cases. + stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` + tmpdepfile="$stripped.u" + if test "$libtool" = yes; then + "$@" -Wc,-M + else + "$@" -M + fi + stat=$? + + if test -f "$tmpdepfile"; then : + else + stripped=`echo "$stripped" | sed 's,^.*/,,'` + tmpdepfile="$stripped.u" + fi + + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + + if test -f "$tmpdepfile"; then + outname="$stripped.o" + # Each line is of the form `foo.o: dependent.h'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" + sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +icc) + # Intel's C compiler understands `-MD -MF file'. However on + # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c + # ICC 7.0 will fill foo.d with something like + # foo.o: sub/foo.c + # foo.o: sub/foo.h + # which is wrong. We want: + # sub/foo.o: sub/foo.c + # sub/foo.o: sub/foo.h + # sub/foo.c: + # sub/foo.h: + # ICC 7.1 will output + # foo.o: sub/foo.c sub/foo.h + # and will wrap long lines using \ : + # foo.o: sub/foo.c ... \ + # sub/foo.h ... \ + # ... + + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each line is of the form `foo.o: dependent.h', + # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | + sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +tru64) + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in `foo.d' instead, so we check for that too. + # Subdirectories are respected. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + + if test "$libtool" = yes; then + tmpdepfile1="$dir.libs/$base.lo.d" + tmpdepfile2="$dir.libs/$base.d" + "$@" -Wc,-MD + else + tmpdepfile1="$dir$base.o.d" + tmpdepfile2="$dir$base.d" + "$@" -MD + fi + + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" + exit $stat + fi + + if test -f "$tmpdepfile1"; then + tmpdepfile="$tmpdepfile1" + else + tmpdepfile="$tmpdepfile2" + fi + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a tab and a space in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +#nosideeffect) + # This comment above is used by automake to tell side-effect + # dependency tracking mechanisms from slower ones. + +dashmstdout) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + test -z "$dashmflag" && dashmflag=-M + # Require at least two characters before searching for `:' + # in the target name. This is to cope with DOS-style filenames: + # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. + "$@" $dashmflag | + sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + tr ' ' ' +' < "$tmpdepfile" | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +dashXmstdout) + # This case only exists to satisfy depend.m4. It is never actually + # run, as this mode is specially recognized in the preamble. + exit 1 + ;; + +makedepend) + "$@" || exit $? + # Remove any Libtool call + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + # X makedepend + shift + cleared=no + for arg in "$@"; do + case $cleared in + no) + set ""; shift + cleared=yes ;; + esac + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift ;; + # Strip any option that makedepend may not understand. Remove + # the object too, otherwise makedepend will parse it as a source file. + -*|$object) + ;; + *) + set fnord "$@" "$arg"; shift ;; + esac + done + obj_suffix="`echo $object | sed 's/^.*\././'`" + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + sed '1,2d' "$tmpdepfile" | tr ' ' ' +' | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" "$tmpdepfile".bak + ;; + +cpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + "$@" -E | + sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | + sed '$ s: \\$::' > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + cat < "$tmpdepfile" >> "$depfile" + sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvisualcpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o, + # because we must use -o when running libtool. + "$@" || exit $? + IFS=" " + for arg + do + case "$arg" in + "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") + set fnord "$@" + shift + shift + ;; + *) + set fnord "$@" "$arg" + shift + shift + ;; + esac + done + "$@" -E | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" + echo " " >> "$depfile" + . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 diff --git a/blinkentools-2.9/doc/Makefile.am b/blinkentools-2.9/doc/Makefile.am new file mode 100644 index 0000000..5d87994 --- /dev/null +++ b/blinkentools-2.9/doc/Makefile.am @@ -0,0 +1,47 @@ +## Makefile.am for doc + +if HAVE_AA +bplay = bplay.1 +endif + +if HAVE_LIBMNG +b2mng = b2mng.1 +endif + +if HAVE_PIXBUF +b2image = b2image.1 +endif + +man_MANS = \ + b2b.1 \ + bsend.1 \ + bmultiplexer.1 \ + blinkenproxy.1 \ + $(b2image) \ + $(b2mng) \ + $(bplay) + + +install-data-hook: + cd $(DESTDIR)$(mandir)/man1; \ + for i in b2blm b2bml b2gif; do \ + rm -f $$i.1; \ + $(LN_S) b2b.1 $$i.1; \ + done +if HAVE_PIXBUF + cd $(DESTDIR)$(mandir)/man1; \ + for i in b2jpeg b2png; do \ + rm -f $$i.1; \ + $(LN_S) b2image.1 $$i.1; \ + done +endif + +uninstall-local: + for i in b2blm b2bml b2gif; do \ + rm -f $(DESTDIR)$(mandir)/man1/$$i.1; \ + done +if HAVE_PIXBUF + for i in b2jpeg b2png; do \ + rm -f $(DESTDIR)$(mandir)/man1/$$i.1; \ + done +endif diff --git a/blinkentools-2.9/doc/Makefile.in b/blinkentools-2.9/doc/Makefile.in new file mode 100644 index 0000000..1a23e15 --- /dev/null +++ b/blinkentools-2.9/doc/Makefile.in @@ -0,0 +1,374 @@ +# Makefile.in generated by automake 1.7.9 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = .. + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +AA_CFLAGS = @AA_CFLAGS@ +AA_LIBS = @AA_LIBS@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BLIB_CFLAGS = @BLIB_CFLAGS@ +BLIB_LIBS = @BLIB_LIBS@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ENABLE_OLDTOOLS_FALSE = @ENABLE_OLDTOOLS_FALSE@ +ENABLE_OLDTOOLS_TRUE = @ENABLE_OLDTOOLS_TRUE@ +EXEEXT = @EXEEXT@ +HAVE_AA_FALSE = @HAVE_AA_FALSE@ +HAVE_AA_TRUE = @HAVE_AA_TRUE@ +HAVE_LIBMNG_FALSE = @HAVE_LIBMNG_FALSE@ +HAVE_LIBMNG_TRUE = @HAVE_LIBMNG_TRUE@ +HAVE_PIXBUF_FALSE = @HAVE_PIXBUF_FALSE@ +HAVE_PIXBUF_TRUE = @HAVE_PIXBUF_TRUE@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBMNG = @LIBMNG@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ +MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ +MAKEINFO = @MAKEINFO@ +OBJEXT = @OBJEXT@ +PACAKGE = @PACAKGE@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PIXBUF_CFLAGS = @PIXBUF_CFLAGS@ +PIXBUF_LIBS = @PIXBUF_LIBS@ +PKG_CONFIG = @PKG_CONFIG@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +bindir = @bindir@ +build_alias = @build_alias@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +@HAVE_AA_TRUE@bplay = bplay.1 + +@HAVE_LIBMNG_TRUE@b2mng = b2mng.1 + +@HAVE_PIXBUF_TRUE@b2image = b2image.1 + +man_MANS = \ + b2b.1 \ + bsend.1 \ + bmultiplexer.1 \ + blinkenproxy.1 \ + $(b2image) \ + $(b2mng) \ + $(bplay) + +subdir = doc +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = b2b.1 b2image.1 b2mng.1 bsend.1 bplay.1 \ + bmultiplexer.1 blinkenproxy.1 +DIST_SOURCES = + +NROFF = nroff +MANS = $(man_MANS) +DIST_COMMON = $(srcdir)/Makefile.in Makefile.am b2b.1.in b2image.1.in \ + b2mng.1.in blinkenproxy.1.in bmultiplexer.1.in bplay.1.in \ + bsend.1.in +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu doc/Makefile +Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) +b2b.1: $(top_builddir)/config.status b2b.1.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +b2image.1: $(top_builddir)/config.status b2image.1.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +b2mng.1: $(top_builddir)/config.status b2mng.1.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +bsend.1: $(top_builddir)/config.status bsend.1.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +bplay.1: $(top_builddir)/config.status bplay.1.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +bmultiplexer.1: $(top_builddir)/config.status bmultiplexer.1.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +blinkenproxy.1: $(top_builddir)/config.status blinkenproxy.1.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +uninstall-info-am: + +man1dir = $(mandir)/man1 +install-man1: $(man1_MANS) $(man_MANS) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(man1dir) + @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ + l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ + for i in $$l2; do \ + case "$$i" in \ + *.1*) list="$$list $$i" ;; \ + esac; \ + done; \ + for i in $$list; do \ + if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ + else file=$$i; fi; \ + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ + case "$$ext" in \ + 1*) ;; \ + *) ext='1' ;; \ + esac; \ + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ + inst=`echo $$inst | sed -e 's/^.*\///'`; \ + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ + echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst"; \ + $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst; \ + done +uninstall-man1: + @$(NORMAL_UNINSTALL) + @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ + l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ + for i in $$l2; do \ + case "$$i" in \ + *.1*) list="$$list $$i" ;; \ + esac; \ + done; \ + for i in $$list; do \ + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ + case "$$ext" in \ + 1*) ;; \ + *) ext='1' ;; \ + esac; \ + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ + inst=`echo $$inst | sed -e 's/^.*\///'`; \ + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ + echo " rm -f $(DESTDIR)$(man1dir)/$$inst"; \ + rm -f $(DESTDIR)$(man1dir)/$$inst; \ + done +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = .. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(MANS) + +installdirs: + $(mkinstalldirs) $(DESTDIR)$(man1dir) +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +info: info-am + +info-am: + +install-data-am: install-man + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) install-data-hook + +install-exec-am: + +install-info: install-info-am + +install-man: install-man1 + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am uninstall-local uninstall-man + +uninstall-man: uninstall-man1 + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am info info-am install \ + install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-man1 install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \ + uninstall-am uninstall-info-am uninstall-local uninstall-man \ + uninstall-man1 + + +install-data-hook: + cd $(DESTDIR)$(mandir)/man1; \ + for i in b2blm b2bml b2gif; do \ + rm -f $$i.1; \ + $(LN_S) b2b.1 $$i.1; \ + done +@HAVE_PIXBUF_TRUE@ cd $(DESTDIR)$(mandir)/man1; \ +@HAVE_PIXBUF_TRUE@ for i in b2jpeg b2png; do \ +@HAVE_PIXBUF_TRUE@ rm -f $$i.1; \ +@HAVE_PIXBUF_TRUE@ $(LN_S) b2image.1 $$i.1; \ +@HAVE_PIXBUF_TRUE@ done + +uninstall-local: + for i in b2blm b2bml b2gif; do \ + rm -f $(DESTDIR)$(mandir)/man1/$$i.1; \ + done +@HAVE_PIXBUF_TRUE@ for i in b2jpeg b2png; do \ +@HAVE_PIXBUF_TRUE@ rm -f $(DESTDIR)$(mandir)/man1/$$i.1; \ +@HAVE_PIXBUF_TRUE@ done +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/blinkentools-2.9/doc/b2b.1.in b/blinkentools-2.9/doc/b2b.1.in new file mode 100644 index 0000000..72a8433 --- /dev/null +++ b/blinkentools-2.9/doc/b2b.1.in @@ -0,0 +1,135 @@ +.\" b2b man page +.\" +.\" Project Blinkenlights 2004 +.\" +.Dd February 24, 2004 +.Dt B2B 1 +.Os +.Sh NAME +.Nm b2b , +.Nm b2bml , +.Nm b2blm , +.Nm b2gif +.Nd convert Blinkenlights movies +.Sh SYNOPSIS +.Nm +.Op Fl options +.Op Ar filename +.Sh DESCRIPTION +.Nm +is designed to read, write and convert Blinkenlights movies in various +file formats. You can use it as a filter program reading movies in all +supported formats from standard input and writing it to standard output +in another format. The supported file types are BML, BLM and GIF. +.Nm +automatically detects the file type by looking at the incoming data. +.Pp +If +.Ar filename +is omitted, the data is read via standard input. The output is sent to +standard output unless an output file is given via the command line. +.Sh OPTIONS +The following options are recognized by b2b. +.Pp +.Bl -tag -width "--concatenate" -compact +.It Fl o Ar outfile +.It Fl -output Ar outfile +Send output to +.Ar outfile +instead of standard output. +.Pp +.It Fl t Ar [blm|bml|gif] +.It Fl -type Ar [blm|bml|gif] +Specifies output file type. If +.Nm +has been invoked as +.Nm b2bml , +.Nm b2blm , +or +.Nm b2gif +the corresdonding output format is assumed automatically. The option +can then be omitted. +.Pp +.It Fl b Ar number +.It Fl -bits Ar number +Specify movie resoultion in bits. +.Pp +.It Fl B Ar value +.It Fl -maxval Ar value +Specify maximum movie resolution in value +.Pp +.It Fl i +.It Fl -invert +Invert the file. This works for both monochrome and greyscale movies. +.Pp +.It Fl g Ar factor +.It Fl -gamma Ar factor +Change gamma value. +.Pp +.It Fl f +.It Fl -hflip +Flip the movie horizontally +.Pp +.It Fl F +.It Fl -vflip +Flip the movie vertically +.Pp +.It Fl r +.It Fl -reverse +Reverse playback of the file. +.Pp +.It Fl s Ar factor +.It Fl -speed Ar factor +Changes the playback speed of the file. Speed is stated as a factor relative +to the current playback speed. For example, a value of 0.5 slows down +playback of the movie to 50%. A value of 2 bumps playback speed to 200%. +.Pp +.It Fl c Ar frames-per-second +.It Fl -fps Ar frames-per-second +Reformats the movie to fixed-duration frames. The duration is defined by +.Ar frames-per-second +which specifies how many frames per seconds will be created. This option +can be used in combination with the single image converter +.Xr b2image +to create images for movie compression. +A low +.Fl frames-per-second +together with short frame durations in the source movie might skip certain +frames effectively removing them from the movie. +.Pp +.It Fl x +.It Fl -loop-hint +Generate a loop hint information in the output file. If the output file format +is GIF, a endlessly repeating GIF animation is created. In case of BLM and BML +a loop hint is included in the file. +.It Fl X +.It Fl -no-loop-hint +Generate a loop hint information in the output file. If the output file format +is GIF, a endlessly repeating GIF animation is created. In case of BLM and BML +a loop hint is included in the file. +.Ar number +times +.Pp +.It Fl m +.It Fl -meta +Display meta information of the file +.Pp +.It Fl ? +.It Fl -help +Display help +.Pp +.It Fl V +.It Fl -version +Display version number and quit immediately. +.El +.Sh AUTHOR +.An Sven Neumann Aq sven@gimp.org +.Sh SEE ALSO +Project Blinkenlights Home Page http://www.blinkenlights.de/ +.Pp +.Xr b2image 1 , +.Xr b2mng 1 , +.Xr bsend 1 , +.Xr blib 3 +.Sh DIAGNOSTICS +.Ex -std diff --git a/blinkentools-2.9/doc/b2image.1.in b/blinkentools-2.9/doc/b2image.1.in new file mode 100644 index 0000000..8901c12 --- /dev/null +++ b/blinkentools-2.9/doc/b2image.1.in @@ -0,0 +1,103 @@ +.\" b2image man page +.\" +.\" Project Blinkenlights 2004 +.\" +.Dd April 8, 2004 +.Dt B2IMAGE 1 +.Os +.Sh NAME +.Nm b2image , +.Nm b2jpeg , +.Nm b2png +.Nd renders an image from a Blinkenlights movie frame +.Sh SYNOPSIS +.Nm +.Op Fl options +.Op Ar filename +.Sh DESCRIPTION +.Nm +takes a Blinkenlights movie (in BML, BLM or GIF format) and creates an +image of a single frame. +.Nm +can also use blinkenthemes and create +the same output that blinkensim diplays. +.Nm +automatically detects the file type by looking at the incoming data. +.Pp +If +.Ar filename +is omitted, the data is read via standard input. The output is written to +the specified output file. +.Nm +can not (yet) write to stdout. +.Sh OPTIONS +The following options are recognized by +.Nm . +.Pp +.Bl -tag -width "--concatenate" -compact +.It Fl o Ar outfile +.It Fl -output Ar outfile +Send output to +.Ar outfile . +When the --all option is used, this value is used as a prefix for all +output files. +.Pp +.It Fl t Ar name +.It Fl -theme Ar name +Use the theme with the given +.Ar name . +Themes are searched in the blib themes directory or in the directories +specified in the B_THEME_PATH environment variable. +.Pp +.It Fl f Ar [png|jpeg] +.It Fl -format Ar [png|jpeg] +Specifies output file format. If +.Nm +has been invoked as +.Nm b2jpeg +or +.Nm b2png +the corresdonding output format is assumed automatically. The option +can then be omitted. +.Pp +.It Fl i +.It Fl -index Ar number +Create an image from the frame with the given index. Frames are numbered +starting with 1. If this options is omitted the first frame is used. +.Pp +.It Fl a +.It Fl -all +Create a numbered sequence of images from all frames in the movie. +.Pp +.It Fl q +.It Fl -quality Ar number +Controls the JPEG compression factor. This is a value between 0 and 100, +the default quality is 75. +.Pp +.It Fl l +.It Fl -link +Use hardlinks for duplicate frames. Saves time and disk space. +.Pp +.It Fl v +.It Fl -verbose +Be more verbose. +.Pp +.It Fl ? +.It Fl -help +Display help +.Pp +.It Fl V +.It Fl -version +Display version number and quit immediately. +.El +.Sh AUTHOR +.An Sven Neumann Aq sven@gimp.org +.Sh SEE ALSO +Project Blinkenlights Home Page http://www.blinkenlights.de/ +.Pp +.Xr b2b 1 , +.Xr b2mng 1 , +.Xr blinkensim 1 , +.Xr blib 3 +.Sh DIAGNOSTICS +.Ex -std diff --git a/blinkentools-2.9/doc/b2mng.1.in b/blinkentools-2.9/doc/b2mng.1.in new file mode 100644 index 0000000..89cbce7 --- /dev/null +++ b/blinkentools-2.9/doc/b2mng.1.in @@ -0,0 +1,81 @@ +.\" b2mng man page +.\" +.\" Project Blinkenlights 2004 +.\" +.Dd April 2, 2004 +.Dt B2MNG 1 +.Os +.Sh NAME +.Nm b2mng +.Nd convert Blinkenlights movies to MNG animations +.Sh SYNOPSIS +.Nm +.Op Fl options +.Op Ar filename +.Sh DESCRIPTION +.Nm +takes a Blinkenlights movie (in BML, BLM or GIF format) and creates a +MNG (Multiple-image Network Graphics) animation from it. By default +the generated animation is a simple grayscale movie where a pixel +represents a window. But +.Nm +can also use blinkenthemes and create +the same output that blinkensim diplays. +.Nm +automatically detects the file type by looking at the incoming data. +.Pp +If +.Ar filename +is omitted, the data is read via standard input. The output is sent to +standard output unless an output file is given via the command line. +.Sh OPTIONS +The following options are recognized by +.Nm . +.Pp +.Bl -tag -width "--concatenate" -compact +.It Fl o Ar outfile +.It Fl -output Ar outfile +Send output to +.Ar outfile +instead of standard output. +.Pp +.It Fl t Ar name +.It Fl -theme Ar name +Use the theme with the given +.Ar name . +Themes are searched in the blib themes directory or in the directories +specified in the B_THEME_PATH environment variable. +.Pp +.It Fl l +.It Fl -loop +Create an animation that loops forever. +.Pp +.It Fl L Ar number +.It Fl -loops Ar number +Create an animation that loops +.Ar number +times. +.Pp +.It Fl v +.It Fl -verbose +Be more verbose. +.Pp +.It Fl ? +.It Fl -help +Display help +.Pp +.It Fl V +.It Fl -version +Display version number and quit immediately. +.El +.Sh AUTHOR +.An Sven Neumann Aq sven@gimp.org +.Sh SEE ALSO +Project Blinkenlights Home Page http://www.blinkenlights.de/ +.Pp +.Xr b2b 1 , +.Xr b2png 1 , +.Xr blinkensim 1 , +.Xr blib 3 +.Sh DIAGNOSTICS +.Ex -std diff --git a/blinkentools-2.9/doc/blinkenproxy.1.in b/blinkentools-2.9/doc/blinkenproxy.1.in new file mode 100644 index 0000000..c0a5298 --- /dev/null +++ b/blinkentools-2.9/doc/blinkenproxy.1.in @@ -0,0 +1,78 @@ +.\" blinkenproxy man page +.\" +.\" Project Blinkenlights 2004 +.\" +.Dd April 22, 2004 +.Dt BLINKENPROXY 1 +.Os +.Sh NAME +.Nm blinkenproxy +.Nd redistribute Blinkenlights Protocol streams on request +.Sh SYNOPSIS +.Nm +.Op Fl options +.Op Ar hostname[:port] +.Op Ar receive-port +.Op Ar heartbeat-port +.Sh DESCRIPTION +.Nm +receives a Blinkenlights Protocol data stream and redistributes it to multiple hosts +on request. Any host that wants to receive a copy of the stream has to send a +Blinkenlights Protocol Heartbeat Packet at least once a minute. +.Nm +in return sends a copy of the data stream to the requesting host. +.Pp +Support for +.Nm +is built into +.Xr blinkensim 1 +to have the simulator receive a permanent stream from an unkown source via +.Nm +.Pp +.Nm +is similar to +.Xr bmultiplexer 1 +but does redistribution on-demand instead of explicitly. +.Pp +.Ar hostname[:port] +specifies an upstream blinkenproxy to request the stream from. +.Pp +.Ar receive-port +is the port where +.Nm +receives Blinkenlights Protocol data packets. If +.Ar receive-port +is omitted, the default port (2323) is used. Don't use this option if +you specified an upstream proxy already. +.Pp +.Ar heartbeat-port +is the port where +.Nm +waits for new requests to arrive. If +.Ar heartbeat-port +is omitted, the default port (4242) is used. +.Sh OPTIONS +The following options are recognized by +.Nm +. +.Bl -tag -width "--concatenate" -compact +.Pp +.It Fl ? +.It Fl -help +Display help +.Pp +.It Fl V +.It Fl -version +Display version number and quit immediately. +.El +.Sh AUTHOR +.An Sven Neumann Aq sven@gimp.org +.Sh SEE ALSO +Project Blinkenlights Home Page http://www.blinkenlights.de/ +.Pp +.Xr bmultiplexer 1 , +.Xr bsend 1 , +.Xr blinkensim 1 , +.Xr blib 3 +.Sh DIAGNOSTICS +.Ex -std diff --git a/blinkentools-2.9/doc/bmultiplexer.1.in b/blinkentools-2.9/doc/bmultiplexer.1.in new file mode 100644 index 0000000..969cdd8 --- /dev/null +++ b/blinkentools-2.9/doc/bmultiplexer.1.in @@ -0,0 +1,62 @@ +.\" bmultiplexer man page +.\" +.\" Project Blinkenlights 2004 +.\" +.Dd February 24, 2004 +.Dt BMULTIPLEXER 1 +.Os +.Sh NAME +.Nm bmultiplexer +.Nd receive Blinkenlights Protocol streams and forward them to multiple hosts +.Sh SYNOPSIS +.Nm +.Op Fl options +.Ar receive-port +.Ar host Ns Op : Ns port +.Ar ... +.Sh DESCRIPTION +.Nm +redistributes a Blinkenlights Protocol data stream to multiple hosts. Each +packet received is instantly passed to every host that is specified on the +command line. +.Pp +.Ar receive-port +is the UDP port where +.Nm +waits for Blinkenlights Protocol data packets to arrive. +If +.Ar port +is not specified, +.Ar receive-port +will be used for redistribution to the specified host. +.Pp +.Nm +is similar to +.Xr blinkenproxy 1 +but does redistribution explicity instead of on-demand. +.Sh OPTIONS +The following options are recognized by +.Nm +. +.Pp +.Bl -tag -width "--concatenate" -compact +.Pp +.It Fl ? +.It Fl -help +Display help +.Pp +.It Fl V +.It Fl -version +Display version number and quit immediately. +.El +.Sh AUTHOR +.An Daniel Mack Aq daniel@yoobay.net +.Sh SEE ALSO +Project Blinkenlights Home Page http://www.blinkenlights.de/ +.Pp +.Xr blinkenproxy 1 , +.Xr bsend 1 , +.Xr blinkensim 1 , +.Xr blib 3 +.Sh DIAGNOSTICS +.Ex -std diff --git a/blinkentools-2.9/doc/bplay.1.in b/blinkentools-2.9/doc/bplay.1.in new file mode 100644 index 0000000..ef30577 --- /dev/null +++ b/blinkentools-2.9/doc/bplay.1.in @@ -0,0 +1,54 @@ +.\" bplay man page +.\" +.\" Project Blinkenlights 2004 +.\" +.Dd February 24, 2004 +.Dt BPLAY 1 +.Os +.Sh NAME +.Nm bplay +.Nd playback Blinkenlights movies using AA-Lib +.Sh SYNOPSIS +.Nm +.Op Fl options +.Op Ar filename +.Sh DESCRIPTION +.Nm +is designed to read Blinkenlights movies in various file formats and +to play them back on the console using AA-Lib. +.Pp +.Nm +automatically detects the file type by looking at the incoming data. +.Pp +If +.Ar filename +is omitted, the data is read via standard input. The output is sent to +standard output unless an output file is given via the command line. +.Sh OPTIONS +The following options are recognized by b2b. +.Pp +.Bl -tag -width "--concatenate" -compact +.Pp +.It Fl l +.It Fl -loop +Loop the movie playback forever. +.Ar number +times. +.Pp +.It Fl ? +.It Fl -help +Display help +.Pp +.It Fl V +.It Fl -version +Display version number and quit immediately. +.El +.Sh AUTHOR +.An Sven Neumann Aq sven@gimp.org +.Sh SEE ALSO +Project Blinkenlights Home Page http://www.blinkenlights.de/ +.Pp +.Xr b2b 1 , +.Xr blib 3 +.Sh DIAGNOSTICS +.Ex -std diff --git a/blinkentools-2.9/doc/bsend.1.in b/blinkentools-2.9/doc/bsend.1.in new file mode 100644 index 0000000..56cc0d9 --- /dev/null +++ b/blinkentools-2.9/doc/bsend.1.in @@ -0,0 +1,104 @@ +.\" bsend man page +.\" +.\" Project Blinkenlights 2004 +.\" +.Dd February 24, 2004 +.Dt BSEND 1 +.Os +.Sh NAME +.Nm bsend +.Nd send Blinkenlights movies using the Blinkenlights Protocol +.Sh SYNOPSIS +.Nm +.Op Fl options +.Op Ar filename +.Sh DESCRIPTION +.Nm +is designed to read Blinkenlights movies in various file formats and +to send them to one or more hosts using the UDP-based Blinkenlights protocol. The +receiver could be Matrix Control Unit, the blinkensim Blinkenlights Simulator +or any other device or program compatible with the Blinkenlights Protocol. +.Pp +.Nm +automatically detects the file type by looking at the incoming data. +.Pp +If +.Ar filename +is omitted, the data is read via standard input. The output is sent to +standard output unless an output file is given via the command line. +.Sh OPTIONS +The following options are recognized by b2b. +.Pp +.Bl -tag -width "--concatenate" -compact +.It Fl h Xo +.Ar hostname : Ns Op port +.Xc +.It Fl -host Xo +.Ar hostname : Ns Op port +.Xc +Send movie to +.Ar hostname +at to port +.Ar port +If +.Ar port +is not specified, use the port number by the +.Fl -port +option. If no +.Fl -host +option is given, use localhost (127.0.0.1). If multiple +.Fl -host +options are given, send the data stream to all hosts at the same time. +.Pp +.It Fl p Ar port +.It Fl -port Ar port +Use +.Ar port +as the default port for all hosts given with the +.Fl -host +option. If no +.Fl -port +option is given and no ports are specified with a +.Fl -host +option, then use the default port value (2323). +.Pp +.It Fl s Ar percentage +.It Fl -speed Ar percentage +Changes the playback speed of the file. For example, a value of 50 slows down +playback to 50% speed. +.Pp +.It Fl r +.It Fl -reverse +Reverse playback of the file. +.Pp +.It Fl l +.It Fl -loop +Loop the movie playback forever. +.Pp +.It Fl L Ar number +.It Fl -loops Ar number +Loop the movie playback +.Ar number +times. +.Pp +.It Fl v +.It Fl -verbose +Be more verbose. +.Pp +.It Fl ? +.It Fl -help +Display help +.Pp +.It Fl V +.It Fl -version +Display version number and quit immediately. +.El +.Sh AUTHOR +.An Sven Neumann Aq sven@gimp.org +.Sh SEE ALSO +Project Blinkenlights Home Page http://www.blinkenlights.de/ +.Pp +.Xr b2b 1 , +.Xr blib 3 +.Sh DIAGNOSTICS +.Ex -std diff --git a/blinkentools-2.9/install-sh b/blinkentools-2.9/install-sh new file mode 100755 index 0000000..6ce63b9 --- /dev/null +++ b/blinkentools-2.9/install-sh @@ -0,0 +1,294 @@ +#!/bin/sh +# +# install - install a program, script, or datafile +# +# This originates from X11R5 (mit/util/scripts/install.sh), which was +# later released in X11R6 (xc/config/util/install.sh) with the +# following copyright and license. +# +# Copyright (C) 1994 X Consortium +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name of the X Consortium shall not +# be used in advertising or otherwise to promote the sale, use or other deal- +# ings in this Software without prior written authorization from the X Consor- +# tium. +# +# +# FSF changes to this file are in the public domain. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# `make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. It can only install one file at a time, a restriction +# shared with many OS's install programs. + + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit="${DOITPROG-}" + + +# put in absolute paths if you don't have them in your path; or use env. vars. + +mvprog="${MVPROG-mv}" +cpprog="${CPPROG-cp}" +chmodprog="${CHMODPROG-chmod}" +chownprog="${CHOWNPROG-chown}" +chgrpprog="${CHGRPPROG-chgrp}" +stripprog="${STRIPPROG-strip}" +rmprog="${RMPROG-rm}" +mkdirprog="${MKDIRPROG-mkdir}" + +transformbasename="" +transform_arg="" +instcmd="$mvprog" +chmodcmd="$chmodprog 0755" +chowncmd="" +chgrpcmd="" +stripcmd="" +rmcmd="$rmprog -f" +mvcmd="$mvprog" +src="" +dst="" +dir_arg="" + +while [ x"$1" != x ]; do + case $1 in + -c) instcmd=$cpprog + shift + continue;; + + -d) dir_arg=true + shift + continue;; + + -m) chmodcmd="$chmodprog $2" + shift + shift + continue;; + + -o) chowncmd="$chownprog $2" + shift + shift + continue;; + + -g) chgrpcmd="$chgrpprog $2" + shift + shift + continue;; + + -s) stripcmd=$stripprog + shift + continue;; + + -t=*) transformarg=`echo $1 | sed 's/-t=//'` + shift + continue;; + + -b=*) transformbasename=`echo $1 | sed 's/-b=//'` + shift + continue;; + + *) if [ x"$src" = x ] + then + src=$1 + else + # this colon is to work around a 386BSD /bin/sh bug + : + dst=$1 + fi + shift + continue;; + esac +done + +if [ x"$src" = x ] +then + echo "$0: no input file specified" >&2 + exit 1 +else + : +fi + +if [ x"$dir_arg" != x ]; then + dst=$src + src="" + + if [ -d "$dst" ]; then + instcmd=: + chmodcmd="" + else + instcmd=$mkdirprog + fi +else + +# Waiting for this to be detected by the "$instcmd $src $dsttmp" command +# might cause directories to be created, which would be especially bad +# if $src (and thus $dsttmp) contains '*'. + + if [ -f "$src" ] || [ -d "$src" ] + then + : + else + echo "$0: $src does not exist" >&2 + exit 1 + fi + + if [ x"$dst" = x ] + then + echo "$0: no destination specified" >&2 + exit 1 + else + : + fi + +# If destination is a directory, append the input filename; if your system +# does not like double slashes in filenames, you may need to add some logic + + if [ -d "$dst" ] + then + dst=$dst/`basename "$src"` + else + : + fi +fi + +## this sed command emulates the dirname command +dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` + +# Make sure that the destination directory exists. +# this part is taken from Noah Friedman's mkinstalldirs script + +# Skip lots of stat calls in the usual case. +if [ ! -d "$dstdir" ]; then +defaultIFS=' + ' +IFS="${IFS-$defaultIFS}" + +oIFS=$IFS +# Some sh's can't handle IFS=/ for some reason. +IFS='%' +set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` +IFS=$oIFS + +pathcomp='' + +while [ $# -ne 0 ] ; do + pathcomp=$pathcomp$1 + shift + + if [ ! -d "$pathcomp" ] ; + then + $mkdirprog "$pathcomp" + else + : + fi + + pathcomp=$pathcomp/ +done +fi + +if [ x"$dir_arg" != x ] +then + $doit $instcmd "$dst" && + + if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dst"; else : ; fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dst"; else : ; fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dst"; else : ; fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dst"; else : ; fi +else + +# If we're going to rename the final executable, determine the name now. + + if [ x"$transformarg" = x ] + then + dstfile=`basename "$dst"` + else + dstfile=`basename "$dst" $transformbasename | + sed $transformarg`$transformbasename + fi + +# don't allow the sed command to completely eliminate the filename + + if [ x"$dstfile" = x ] + then + dstfile=`basename "$dst"` + else + : + fi + +# Make a couple of temp file names in the proper directory. + + dsttmp=$dstdir/_inst.$$_ + rmtmp=$dstdir/_rm.$$_ + +# Trap to clean up temp files at exit. + + trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0 + trap '(exit $?); exit' 1 2 13 15 + +# Move or copy the file name to the temp name + + $doit $instcmd "$src" "$dsttmp" && + +# and set any options; do chmod last to preserve setuid bits + +# If any of these fail, we abort the whole thing. If we want to +# ignore errors from any of these, just make sure not to ignore +# errors from the above "$doit $instcmd $src $dsttmp" command. + + if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dsttmp"; else :;fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dsttmp"; else :;fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dsttmp"; else :;fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dsttmp"; else :;fi && + +# Now remove or move aside any old file at destination location. We try this +# two ways since rm can't unlink itself on some systems and the destination +# file might be busy for other reasons. In this case, the final cleanup +# might fail but the new file should still install successfully. + +{ + if [ -f "$dstdir/$dstfile" ] + then + $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null || + $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null || + { + echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 + (exit 1); exit + } + else + : + fi +} && + +# Now rename the file to the real destination. + + $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" + +fi && + +# The final little trick to "correctly" pass the exit status to the exit trap. + +{ + (exit 0); exit +} diff --git a/blinkentools-2.9/missing b/blinkentools-2.9/missing new file mode 100755 index 0000000..fc54c64 --- /dev/null +++ b/blinkentools-2.9/missing @@ -0,0 +1,336 @@ +#! /bin/sh +# Common stub for a few missing GNU programs while installing. +# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003 Free Software Foundation, Inc. +# Originally by Fran,cois Pinard , 1996. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +if test $# -eq 0; then + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 +fi + +run=: + +# In the cases where this matters, `missing' is being run in the +# srcdir already. +if test -f configure.ac; then + configure_ac=configure.ac +else + configure_ac=configure.in +fi + +case "$1" in +--run) + # Try to run requested program, and just exit if it succeeds. + run= + shift + "$@" && exit 0 + ;; +esac + +# If it does not exist, or fails to run (possibly an outdated version), +# try to emulate it. +case "$1" in + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an +error status if there is no known handling for PROGRAM. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + --run try to run the given command, and emulate it if it fails + +Supported PROGRAM values: + aclocal touch file \`aclocal.m4' + autoconf touch file \`configure' + autoheader touch file \`config.h.in' + automake touch all \`Makefile.in' files + bison create \`y.tab.[ch]', if possible, from existing .[ch] + flex create \`lex.yy.c', if possible, from existing .c + help2man touch the output file + lex create \`lex.yy.c', if possible, from existing .c + makeinfo touch the output file + tar try tar, gnutar, gtar, then tar without non-portable flags + yacc create \`y.tab.[ch]', if possible, from existing .[ch]" + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing 0.4 - GNU automake" + ;; + + -*) + echo 1>&2 "$0: Unknown \`$1' option" + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 + ;; + + aclocal*) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`acinclude.m4' or \`${configure_ac}'. You might want + to install the \`Automake' and \`Perl' packages. Grab them from + any GNU archive site." + touch aclocal.m4 + ;; + + autoconf) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`${configure_ac}'. You might want to install the + \`Autoconf' and \`GNU m4' packages. Grab them from any GNU + archive site." + touch configure + ;; + + autoheader) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`acconfig.h' or \`${configure_ac}'. You might want + to install the \`Autoconf' and \`GNU m4' packages. Grab them + from any GNU archive site." + files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` + test -z "$files" && files="config.h" + touch_files= + for f in $files; do + case "$f" in + *:*) touch_files="$touch_files "`echo "$f" | + sed -e 's/^[^:]*://' -e 's/:.*//'`;; + *) touch_files="$touch_files $f.in";; + esac + done + touch $touch_files + ;; + + automake*) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. + You might want to install the \`Automake' and \`Perl' packages. + Grab them from any GNU archive site." + find . -type f -name Makefile.am -print | + sed 's/\.am$/.in/' | + while read f; do touch "$f"; done + ;; + + autom4te) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is needed, and you do not seem to have it handy on your + system. You might have modified some files without having the + proper tools for further handling them. + You can get \`$1' as part of \`Autoconf' from any GNU + archive site." + + file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` + test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` + if test -f "$file"; then + touch $file + else + test -z "$file" || exec >$file + echo "#! /bin/sh" + echo "# Created by GNU Automake missing as a replacement of" + echo "# $ $@" + echo "exit 0" + chmod +x $file + exit 1 + fi + ;; + + bison|yacc) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.y' file. You may need the \`Bison' package + in order for those modifications to take effect. You can get + \`Bison' from any GNU archive site." + rm -f y.tab.c y.tab.h + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.y) + SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.c + fi + SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.h + fi + ;; + esac + fi + if [ ! -f y.tab.h ]; then + echo >y.tab.h + fi + if [ ! -f y.tab.c ]; then + echo 'main() { return 0; }' >y.tab.c + fi + ;; + + lex|flex) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.l' file. You may need the \`Flex' package + in order for those modifications to take effect. You can get + \`Flex' from any GNU archive site." + rm -f lex.yy.c + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.l) + SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" lex.yy.c + fi + ;; + esac + fi + if [ ! -f lex.yy.c ]; then + echo 'main() { return 0; }' >lex.yy.c + fi + ;; + + help2man) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a dependency of a manual page. You may need the + \`Help2man' package in order for those modifications to take + effect. You can get \`Help2man' from any GNU archive site." + + file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` + if test -z "$file"; then + file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` + fi + if [ -f "$file" ]; then + touch $file + else + test -z "$file" || exec >$file + echo ".ab help2man is required to generate this page" + exit 1 + fi + ;; + + makeinfo) + if test -z "$run" && (makeinfo --version) > /dev/null 2>&1; then + # We have makeinfo, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.texi' or \`.texinfo' file, or any other file + indirectly affecting the aspect of the manual. The spurious + call might also be the consequence of using a buggy \`make' (AIX, + DU, IRIX). You might want to install the \`Texinfo' package or + the \`GNU make' package. Grab either from any GNU archive site." + file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` + if test -z "$file"; then + file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` + file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` + fi + touch $file + ;; + + tar) + shift + if test -n "$run"; then + echo 1>&2 "ERROR: \`tar' requires --run" + exit 1 + fi + + # We have already tried tar in the generic part. + # Look for gnutar/gtar before invocation to avoid ugly error + # messages. + if (gnutar --version > /dev/null 2>&1); then + gnutar "$@" && exit 0 + fi + if (gtar --version > /dev/null 2>&1); then + gtar "$@" && exit 0 + fi + firstarg="$1" + if shift; then + case "$firstarg" in + *o*) + firstarg=`echo "$firstarg" | sed s/o//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + case "$firstarg" in + *h*) + firstarg=`echo "$firstarg" | sed s/h//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + fi + + echo 1>&2 "\ +WARNING: I can't seem to be able to run \`tar' with the given arguments. + You may want to install GNU tar or Free paxutils, or check the + command line arguments." + exit 1 + ;; + + *) + echo 1>&2 "\ +WARNING: \`$1' is needed, and you do not seem to have it handy on your + system. You might have modified some files without having the + proper tools for further handling them. Check the \`README' file, + it often tells you about the needed prerequisites for installing + this package. You may also peek at any GNU archive site, in case + some other package would contain this missing \`$1' program." + exit 1 + ;; +esac + +exit 0 diff --git a/blinkentools-2.9/mkinstalldirs b/blinkentools-2.9/mkinstalldirs new file mode 100755 index 0000000..d2d5f21 --- /dev/null +++ b/blinkentools-2.9/mkinstalldirs @@ -0,0 +1,111 @@ +#! /bin/sh +# mkinstalldirs --- make directory hierarchy +# Author: Noah Friedman +# Created: 1993-05-16 +# Public domain + +errstatus=0 +dirmode="" + +usage="\ +Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..." + +# process command line arguments +while test $# -gt 0 ; do + case $1 in + -h | --help | --h*) # -h for help + echo "$usage" 1>&2 + exit 0 + ;; + -m) # -m PERM arg + shift + test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } + dirmode=$1 + shift + ;; + --) # stop option processing + shift + break + ;; + -*) # unknown option + echo "$usage" 1>&2 + exit 1 + ;; + *) # first non-opt arg + break + ;; + esac +done + +for file +do + if test -d "$file"; then + shift + else + break + fi +done + +case $# in + 0) exit 0 ;; +esac + +case $dirmode in + '') + if mkdir -p -- . 2>/dev/null; then + echo "mkdir -p -- $*" + exec mkdir -p -- "$@" + fi + ;; + *) + if mkdir -m "$dirmode" -p -- . 2>/dev/null; then + echo "mkdir -m $dirmode -p -- $*" + exec mkdir -m "$dirmode" -p -- "$@" + fi + ;; +esac + +for file +do + set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` + shift + + pathcomp= + for d + do + pathcomp="$pathcomp$d" + case $pathcomp in + -*) pathcomp=./$pathcomp ;; + esac + + if test ! -d "$pathcomp"; then + echo "mkdir $pathcomp" + + mkdir "$pathcomp" || lasterr=$? + + if test ! -d "$pathcomp"; then + errstatus=$lasterr + else + if test ! -z "$dirmode"; then + echo "chmod $dirmode $pathcomp" + lasterr="" + chmod "$dirmode" "$pathcomp" || lasterr=$? + + if test ! -z "$lasterr"; then + errstatus=$lasterr + fi + fi + fi + fi + + pathcomp="$pathcomp/" + done +done + +exit $errstatus + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# End: +# mkinstalldirs ends here diff --git a/blinkentools-2.9/scripts/b2avi b/blinkentools-2.9/scripts/b2avi new file mode 100755 index 0000000..e568184 --- /dev/null +++ b/blinkentools-2.9/scripts/b2avi @@ -0,0 +1,37 @@ +#!/bin/sh +# +# Simple script to create an MPEG-4 from a Blinkenlights movie. +# Needs b2b, b2png and mencoder. +# +# Usage: b2avi + +theme=$1 +movie=$2 + +verbose="--verbose" +fps="25" +codec="-ovc lavc -lavcopts vcodec=mpeg4" + +output=`mktemp -t bmovieXXXXXX` + +(b2b --fps $fps $movie | \ + b2png $verbose --all --link --output $output --theme $theme) || exit -1 + +movie=`basename $movie .bml`.avi + +rm -f divx2pass.log + +echo "Encoding (pass 1)" +mencoder "mf://$output*.png" -mf fps=$fps -o $movie $codec:vpass=1 || exit -1 + +echo "Encoding (pass 2)" +mencoder "mf://$output*.png" -mf fps=$fps -o $movie $codec:vpass=2 || exit -1 + +echo "Wrote $movie" + +echo -n "Removing temporary files... " + +rm divx2pass.log +rm $output*.png + +echo "done" diff --git a/blinkentools-2.9/src/Makefile.am b/blinkentools-2.9/src/Makefile.am new file mode 100644 index 0000000..e368649 --- /dev/null +++ b/blinkentools-2.9/src/Makefile.am @@ -0,0 +1,100 @@ +## Makefile.am for blinkentools/src + +INCLUDES = \ + @BLIB_CFLAGS@ \ + @PIXBUF_CFLAGS@ \ + @AA_CFLAGS@ + +if HAVE_AA +aa_programs = bplay +endif + +if HAVE_LIBMNG +mng_programs = b2mng +endif + +if HAVE_PIXBUF +pixbuf_programs = b2image +endif + +if ENABLE_OLDTOOLS +oldtools = blm2gif blmplay gif2blm +endif + +bin_PROGRAMS = \ + b2b \ + bsend \ + bmultiplexer \ + blinkenproxy \ + $(aa_programs) \ + $(mng_programs) \ + $(pixbuf_programs) \ + $(oldtools) + +blutils_sources = blutils.h blutils.c + +blimage_sources = \ + hdl.h \ + hdl-small.h \ + hdl-medium.h \ + hdl-large.h \ + hdl-huge.h + +blm2gif_SOURCES = \ + blm2gif.c \ + gif-save.c \ + gif-save.h \ + $(blimage_sources) \ + $(blutils_sources) + +blmplay_SOURCES = \ + blmplay.c \ + $(blutils_sources) + +gif2blm_SOURCES = \ + gif2blm.c \ + gif-load.c \ + gif-load.h \ + $(blimage_sources) + +bmultiplexer_SOURCES = \ + bmultiplexer.c +bmultiplexer_LDADD = @BLIB_LIBS@ + +b2b_SOURCES = b2b.c +b2b_LDADD = @BLIB_LIBS@ -lm + +b2image_SOURCES = b2image.c +b2image_LDADD = @PIXBUF_LIBS@ + +b2mng_SOURCES = b2mng.c bmovie-mng.c bmovie-mng.h +b2mng_LDADD = @LIBMNG@ @BLIB_LIBS@ + +bsend_SOURCES = bsend.c +bsend_LDADD = @BLIB_LIBS@ + +bplay_SOURCES = bplay.c +bplay_LDADD = @AA_LIBS@ + +blinkenproxy_SOURCES = blinkenproxy.c +blinkenproxy_LDADD = @BLIB_LIBS@ + + +install-exec-hook: + cd $(DESTDIR)$(bindir) \ + && rm -f b2blm b2bml b2gif \ + && $(LN_S) b2b b2blm && $(LN_S) b2b b2bml && $(LN_S) b2b b2gif +if HAVE_PIXBUF + cd $(DESTDIR)$(bindir) \ + && rm -f b2jpeg b2png \ + && $(LN_S) b2image b2jpeg && $(LN_S) b2image b2png +endif + +uninstall-local: + rm -f $(DESTDIR)$(bindir)/b2blm \ + $(DESTDIR)$(bindir)/b2bml \ + $(DESTDIR)$(bindir)/b2gif +if HAVE_PIXBUF + rm -f $(DESTDIR)$(bindir)/b2jpeg\ + $(DESTDIR)$(bindir)/b2png +endif diff --git a/blinkentools-2.9/src/Makefile.in b/blinkentools-2.9/src/Makefile.in new file mode 100644 index 0000000..1f6cb3b --- /dev/null +++ b/blinkentools-2.9/src/Makefile.in @@ -0,0 +1,710 @@ +# Makefile.in generated by automake 1.7.9 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = .. + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +AA_CFLAGS = @AA_CFLAGS@ +AA_LIBS = @AA_LIBS@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BLIB_CFLAGS = @BLIB_CFLAGS@ +BLIB_LIBS = @BLIB_LIBS@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ENABLE_OLDTOOLS_FALSE = @ENABLE_OLDTOOLS_FALSE@ +ENABLE_OLDTOOLS_TRUE = @ENABLE_OLDTOOLS_TRUE@ +EXEEXT = @EXEEXT@ +HAVE_AA_FALSE = @HAVE_AA_FALSE@ +HAVE_AA_TRUE = @HAVE_AA_TRUE@ +HAVE_LIBMNG_FALSE = @HAVE_LIBMNG_FALSE@ +HAVE_LIBMNG_TRUE = @HAVE_LIBMNG_TRUE@ +HAVE_PIXBUF_FALSE = @HAVE_PIXBUF_FALSE@ +HAVE_PIXBUF_TRUE = @HAVE_PIXBUF_TRUE@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBMNG = @LIBMNG@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ +MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ +MAKEINFO = @MAKEINFO@ +OBJEXT = @OBJEXT@ +PACAKGE = @PACAKGE@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PIXBUF_CFLAGS = @PIXBUF_CFLAGS@ +PIXBUF_LIBS = @PIXBUF_LIBS@ +PKG_CONFIG = @PKG_CONFIG@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +bindir = @bindir@ +build_alias = @build_alias@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +INCLUDES = \ + @BLIB_CFLAGS@ \ + @PIXBUF_CFLAGS@ \ + @AA_CFLAGS@ + + +@HAVE_AA_TRUE@aa_programs = bplay + +@HAVE_LIBMNG_TRUE@mng_programs = b2mng + +@HAVE_PIXBUF_TRUE@pixbuf_programs = b2image + +@ENABLE_OLDTOOLS_TRUE@oldtools = blm2gif blmplay gif2blm + +bin_PROGRAMS = \ + b2b \ + bsend \ + bmultiplexer \ + blinkenproxy \ + $(aa_programs) \ + $(mng_programs) \ + $(pixbuf_programs) \ + $(oldtools) + + +blutils_sources = blutils.h blutils.c + +blimage_sources = \ + hdl.h \ + hdl-small.h \ + hdl-medium.h \ + hdl-large.h \ + hdl-huge.h + + +blm2gif_SOURCES = \ + blm2gif.c \ + gif-save.c \ + gif-save.h \ + $(blimage_sources) \ + $(blutils_sources) + + +blmplay_SOURCES = \ + blmplay.c \ + $(blutils_sources) + + +gif2blm_SOURCES = \ + gif2blm.c \ + gif-load.c \ + gif-load.h \ + $(blimage_sources) + + +bmultiplexer_SOURCES = \ + bmultiplexer.c + +bmultiplexer_LDADD = @BLIB_LIBS@ + +b2b_SOURCES = b2b.c +b2b_LDADD = @BLIB_LIBS@ -lm + +b2image_SOURCES = b2image.c +b2image_LDADD = @PIXBUF_LIBS@ + +b2mng_SOURCES = b2mng.c bmovie-mng.c bmovie-mng.h +b2mng_LDADD = @LIBMNG@ @BLIB_LIBS@ + +bsend_SOURCES = bsend.c +bsend_LDADD = @BLIB_LIBS@ + +bplay_SOURCES = bplay.c +bplay_LDADD = @AA_LIBS@ + +blinkenproxy_SOURCES = blinkenproxy.c +blinkenproxy_LDADD = @BLIB_LIBS@ +subdir = src +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +@ENABLE_OLDTOOLS_FALSE@@HAVE_AA_FALSE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_TRUE@bin_PROGRAMS = \ +@ENABLE_OLDTOOLS_FALSE@@HAVE_AA_FALSE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_TRUE@ b2b$(EXEEXT) \ +@ENABLE_OLDTOOLS_FALSE@@HAVE_AA_FALSE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_TRUE@ bsend$(EXEEXT) \ +@ENABLE_OLDTOOLS_FALSE@@HAVE_AA_FALSE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_TRUE@ bmultiplexer$(EXEEXT) \ +@ENABLE_OLDTOOLS_FALSE@@HAVE_AA_FALSE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_TRUE@ blinkenproxy$(EXEEXT) \ +@ENABLE_OLDTOOLS_FALSE@@HAVE_AA_FALSE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_TRUE@ b2image$(EXEEXT) +@ENABLE_OLDTOOLS_FALSE@@HAVE_AA_FALSE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_FALSE@bin_PROGRAMS = \ +@ENABLE_OLDTOOLS_FALSE@@HAVE_AA_FALSE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_FALSE@ b2b$(EXEEXT) \ +@ENABLE_OLDTOOLS_FALSE@@HAVE_AA_FALSE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_FALSE@ bsend$(EXEEXT) \ +@ENABLE_OLDTOOLS_FALSE@@HAVE_AA_FALSE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_FALSE@ bmultiplexer$(EXEEXT) \ +@ENABLE_OLDTOOLS_FALSE@@HAVE_AA_FALSE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_FALSE@ blinkenproxy$(EXEEXT) +@ENABLE_OLDTOOLS_FALSE@@HAVE_AA_FALSE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_TRUE@bin_PROGRAMS = \ +@ENABLE_OLDTOOLS_FALSE@@HAVE_AA_FALSE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_TRUE@ b2b$(EXEEXT) \ +@ENABLE_OLDTOOLS_FALSE@@HAVE_AA_FALSE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_TRUE@ bsend$(EXEEXT) \ +@ENABLE_OLDTOOLS_FALSE@@HAVE_AA_FALSE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_TRUE@ bmultiplexer$(EXEEXT) \ +@ENABLE_OLDTOOLS_FALSE@@HAVE_AA_FALSE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_TRUE@ blinkenproxy$(EXEEXT) \ +@ENABLE_OLDTOOLS_FALSE@@HAVE_AA_FALSE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_TRUE@ b2mng$(EXEEXT) \ +@ENABLE_OLDTOOLS_FALSE@@HAVE_AA_FALSE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_TRUE@ b2image$(EXEEXT) +@ENABLE_OLDTOOLS_FALSE@@HAVE_AA_FALSE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_FALSE@bin_PROGRAMS = \ +@ENABLE_OLDTOOLS_FALSE@@HAVE_AA_FALSE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_FALSE@ b2b$(EXEEXT) \ +@ENABLE_OLDTOOLS_FALSE@@HAVE_AA_FALSE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_FALSE@ bsend$(EXEEXT) \ +@ENABLE_OLDTOOLS_FALSE@@HAVE_AA_FALSE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_FALSE@ bmultiplexer$(EXEEXT) \ +@ENABLE_OLDTOOLS_FALSE@@HAVE_AA_FALSE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_FALSE@ blinkenproxy$(EXEEXT) \ +@ENABLE_OLDTOOLS_FALSE@@HAVE_AA_FALSE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_FALSE@ b2mng$(EXEEXT) +@ENABLE_OLDTOOLS_FALSE@@HAVE_AA_TRUE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_TRUE@bin_PROGRAMS = \ +@ENABLE_OLDTOOLS_FALSE@@HAVE_AA_TRUE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_TRUE@ b2b$(EXEEXT) \ +@ENABLE_OLDTOOLS_FALSE@@HAVE_AA_TRUE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_TRUE@ bsend$(EXEEXT) \ +@ENABLE_OLDTOOLS_FALSE@@HAVE_AA_TRUE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_TRUE@ bmultiplexer$(EXEEXT) \ +@ENABLE_OLDTOOLS_FALSE@@HAVE_AA_TRUE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_TRUE@ blinkenproxy$(EXEEXT) \ +@ENABLE_OLDTOOLS_FALSE@@HAVE_AA_TRUE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_TRUE@ bplay$(EXEEXT) \ +@ENABLE_OLDTOOLS_FALSE@@HAVE_AA_TRUE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_TRUE@ b2image$(EXEEXT) +@ENABLE_OLDTOOLS_FALSE@@HAVE_AA_TRUE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_FALSE@bin_PROGRAMS = \ +@ENABLE_OLDTOOLS_FALSE@@HAVE_AA_TRUE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_FALSE@ b2b$(EXEEXT) \ +@ENABLE_OLDTOOLS_FALSE@@HAVE_AA_TRUE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_FALSE@ bsend$(EXEEXT) \ +@ENABLE_OLDTOOLS_FALSE@@HAVE_AA_TRUE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_FALSE@ bmultiplexer$(EXEEXT) \ +@ENABLE_OLDTOOLS_FALSE@@HAVE_AA_TRUE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_FALSE@ blinkenproxy$(EXEEXT) \ +@ENABLE_OLDTOOLS_FALSE@@HAVE_AA_TRUE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_FALSE@ bplay$(EXEEXT) +@ENABLE_OLDTOOLS_FALSE@@HAVE_AA_TRUE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_TRUE@bin_PROGRAMS = \ +@ENABLE_OLDTOOLS_FALSE@@HAVE_AA_TRUE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_TRUE@ b2b$(EXEEXT) \ +@ENABLE_OLDTOOLS_FALSE@@HAVE_AA_TRUE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_TRUE@ bsend$(EXEEXT) \ +@ENABLE_OLDTOOLS_FALSE@@HAVE_AA_TRUE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_TRUE@ bmultiplexer$(EXEEXT) \ +@ENABLE_OLDTOOLS_FALSE@@HAVE_AA_TRUE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_TRUE@ blinkenproxy$(EXEEXT) \ +@ENABLE_OLDTOOLS_FALSE@@HAVE_AA_TRUE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_TRUE@ bplay$(EXEEXT) \ +@ENABLE_OLDTOOLS_FALSE@@HAVE_AA_TRUE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_TRUE@ b2mng$(EXEEXT) \ +@ENABLE_OLDTOOLS_FALSE@@HAVE_AA_TRUE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_TRUE@ b2image$(EXEEXT) +@ENABLE_OLDTOOLS_FALSE@@HAVE_AA_TRUE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_FALSE@bin_PROGRAMS = \ +@ENABLE_OLDTOOLS_FALSE@@HAVE_AA_TRUE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_FALSE@ b2b$(EXEEXT) \ +@ENABLE_OLDTOOLS_FALSE@@HAVE_AA_TRUE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_FALSE@ bsend$(EXEEXT) \ +@ENABLE_OLDTOOLS_FALSE@@HAVE_AA_TRUE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_FALSE@ bmultiplexer$(EXEEXT) \ +@ENABLE_OLDTOOLS_FALSE@@HAVE_AA_TRUE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_FALSE@ blinkenproxy$(EXEEXT) \ +@ENABLE_OLDTOOLS_FALSE@@HAVE_AA_TRUE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_FALSE@ bplay$(EXEEXT) \ +@ENABLE_OLDTOOLS_FALSE@@HAVE_AA_TRUE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_FALSE@ b2mng$(EXEEXT) +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_FALSE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_TRUE@bin_PROGRAMS = \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_FALSE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_TRUE@ b2b$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_FALSE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_TRUE@ bsend$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_FALSE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_TRUE@ bmultiplexer$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_FALSE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_TRUE@ blinkenproxy$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_FALSE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_TRUE@ b2image$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_FALSE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_TRUE@ blm2gif$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_FALSE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_TRUE@ blmplay$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_FALSE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_TRUE@ gif2blm$(EXEEXT) +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_FALSE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_FALSE@bin_PROGRAMS = \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_FALSE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_FALSE@ b2b$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_FALSE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_FALSE@ bsend$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_FALSE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_FALSE@ bmultiplexer$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_FALSE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_FALSE@ blinkenproxy$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_FALSE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_FALSE@ blm2gif$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_FALSE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_FALSE@ blmplay$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_FALSE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_FALSE@ gif2blm$(EXEEXT) +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_FALSE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_TRUE@bin_PROGRAMS = \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_FALSE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_TRUE@ b2b$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_FALSE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_TRUE@ bsend$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_FALSE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_TRUE@ bmultiplexer$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_FALSE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_TRUE@ blinkenproxy$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_FALSE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_TRUE@ b2mng$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_FALSE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_TRUE@ b2image$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_FALSE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_TRUE@ blm2gif$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_FALSE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_TRUE@ blmplay$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_FALSE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_TRUE@ gif2blm$(EXEEXT) +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_FALSE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_FALSE@bin_PROGRAMS = \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_FALSE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_FALSE@ b2b$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_FALSE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_FALSE@ bsend$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_FALSE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_FALSE@ bmultiplexer$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_FALSE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_FALSE@ blinkenproxy$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_FALSE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_FALSE@ b2mng$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_FALSE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_FALSE@ blm2gif$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_FALSE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_FALSE@ blmplay$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_FALSE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_FALSE@ gif2blm$(EXEEXT) +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_TRUE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_TRUE@bin_PROGRAMS = \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_TRUE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_TRUE@ b2b$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_TRUE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_TRUE@ bsend$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_TRUE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_TRUE@ bmultiplexer$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_TRUE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_TRUE@ blinkenproxy$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_TRUE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_TRUE@ bplay$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_TRUE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_TRUE@ b2image$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_TRUE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_TRUE@ blm2gif$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_TRUE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_TRUE@ blmplay$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_TRUE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_TRUE@ gif2blm$(EXEEXT) +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_TRUE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_FALSE@bin_PROGRAMS = \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_TRUE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_FALSE@ b2b$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_TRUE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_FALSE@ bsend$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_TRUE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_FALSE@ bmultiplexer$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_TRUE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_FALSE@ blinkenproxy$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_TRUE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_FALSE@ bplay$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_TRUE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_FALSE@ blm2gif$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_TRUE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_FALSE@ blmplay$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_TRUE@@HAVE_LIBMNG_FALSE@@HAVE_PIXBUF_FALSE@ gif2blm$(EXEEXT) +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_TRUE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_TRUE@bin_PROGRAMS = \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_TRUE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_TRUE@ b2b$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_TRUE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_TRUE@ bsend$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_TRUE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_TRUE@ bmultiplexer$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_TRUE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_TRUE@ blinkenproxy$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_TRUE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_TRUE@ bplay$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_TRUE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_TRUE@ b2mng$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_TRUE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_TRUE@ b2image$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_TRUE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_TRUE@ blm2gif$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_TRUE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_TRUE@ blmplay$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_TRUE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_TRUE@ gif2blm$(EXEEXT) +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_TRUE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_FALSE@bin_PROGRAMS = \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_TRUE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_FALSE@ b2b$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_TRUE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_FALSE@ bsend$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_TRUE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_FALSE@ bmultiplexer$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_TRUE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_FALSE@ blinkenproxy$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_TRUE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_FALSE@ bplay$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_TRUE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_FALSE@ b2mng$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_TRUE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_FALSE@ blm2gif$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_TRUE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_FALSE@ blmplay$(EXEEXT) \ +@ENABLE_OLDTOOLS_TRUE@@HAVE_AA_TRUE@@HAVE_LIBMNG_TRUE@@HAVE_PIXBUF_FALSE@ gif2blm$(EXEEXT) +PROGRAMS = $(bin_PROGRAMS) + +am_b2b_OBJECTS = b2b.$(OBJEXT) +b2b_OBJECTS = $(am_b2b_OBJECTS) +b2b_DEPENDENCIES = +b2b_LDFLAGS = +am_b2image_OBJECTS = b2image.$(OBJEXT) +b2image_OBJECTS = $(am_b2image_OBJECTS) +b2image_DEPENDENCIES = +b2image_LDFLAGS = +am_b2mng_OBJECTS = b2mng.$(OBJEXT) bmovie-mng.$(OBJEXT) +b2mng_OBJECTS = $(am_b2mng_OBJECTS) +b2mng_DEPENDENCIES = +b2mng_LDFLAGS = +am_blinkenproxy_OBJECTS = blinkenproxy.$(OBJEXT) +blinkenproxy_OBJECTS = $(am_blinkenproxy_OBJECTS) +blinkenproxy_DEPENDENCIES = +blinkenproxy_LDFLAGS = +am__objects_1 = +am__objects_2 = blutils.$(OBJEXT) +am_blm2gif_OBJECTS = blm2gif.$(OBJEXT) gif-save.$(OBJEXT) \ + $(am__objects_1) $(am__objects_2) +blm2gif_OBJECTS = $(am_blm2gif_OBJECTS) +blm2gif_LDADD = $(LDADD) +blm2gif_DEPENDENCIES = +blm2gif_LDFLAGS = +am_blmplay_OBJECTS = blmplay.$(OBJEXT) $(am__objects_2) +blmplay_OBJECTS = $(am_blmplay_OBJECTS) +blmplay_LDADD = $(LDADD) +blmplay_DEPENDENCIES = +blmplay_LDFLAGS = +am_bmultiplexer_OBJECTS = bmultiplexer.$(OBJEXT) +bmultiplexer_OBJECTS = $(am_bmultiplexer_OBJECTS) +bmultiplexer_DEPENDENCIES = +bmultiplexer_LDFLAGS = +am_bplay_OBJECTS = bplay.$(OBJEXT) +bplay_OBJECTS = $(am_bplay_OBJECTS) +bplay_DEPENDENCIES = +bplay_LDFLAGS = +am_bsend_OBJECTS = bsend.$(OBJEXT) +bsend_OBJECTS = $(am_bsend_OBJECTS) +bsend_DEPENDENCIES = +bsend_LDFLAGS = +am_gif2blm_OBJECTS = gif2blm.$(OBJEXT) gif-load.$(OBJEXT) \ + $(am__objects_1) +gif2blm_OBJECTS = $(am_gif2blm_OBJECTS) +gif2blm_LDADD = $(LDADD) +gif2blm_DEPENDENCIES = +gif2blm_LDFLAGS = + +DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/b2b.Po ./$(DEPDIR)/b2image.Po \ +@AMDEP_TRUE@ ./$(DEPDIR)/b2mng.Po ./$(DEPDIR)/blinkenproxy.Po \ +@AMDEP_TRUE@ ./$(DEPDIR)/blm2gif.Po ./$(DEPDIR)/blmplay.Po \ +@AMDEP_TRUE@ ./$(DEPDIR)/blutils.Po ./$(DEPDIR)/bmovie-mng.Po \ +@AMDEP_TRUE@ ./$(DEPDIR)/bmultiplexer.Po ./$(DEPDIR)/bplay.Po \ +@AMDEP_TRUE@ ./$(DEPDIR)/bsend.Po ./$(DEPDIR)/gif-load.Po \ +@AMDEP_TRUE@ ./$(DEPDIR)/gif-save.Po ./$(DEPDIR)/gif2blm.Po +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +DIST_SOURCES = $(b2b_SOURCES) $(b2image_SOURCES) $(b2mng_SOURCES) \ + $(blinkenproxy_SOURCES) $(blm2gif_SOURCES) $(blmplay_SOURCES) \ + $(bmultiplexer_SOURCES) $(bplay_SOURCES) $(bsend_SOURCES) \ + $(gif2blm_SOURCES) +DIST_COMMON = $(srcdir)/Makefile.in Makefile.am +SOURCES = $(b2b_SOURCES) $(b2image_SOURCES) $(b2mng_SOURCES) $(blinkenproxy_SOURCES) $(blm2gif_SOURCES) $(blmplay_SOURCES) $(bmultiplexer_SOURCES) $(bplay_SOURCES) $(bsend_SOURCES) $(gif2blm_SOURCES) + +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/Makefile +Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) +binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(bindir) + @list='$(bin_PROGRAMS)'; for p in $$list; do \ + p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ + if test -f $$p \ + ; then \ + f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ + echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) $$p $(DESTDIR)$(bindir)/$$f"; \ + $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) $$p $(DESTDIR)$(bindir)/$$f || exit 1; \ + else :; fi; \ + done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; for p in $$list; do \ + f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ + echo " rm -f $(DESTDIR)$(bindir)/$$f"; \ + rm -f $(DESTDIR)$(bindir)/$$f; \ + done + +clean-binPROGRAMS: + -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) +b2b$(EXEEXT): $(b2b_OBJECTS) $(b2b_DEPENDENCIES) + @rm -f b2b$(EXEEXT) + $(LINK) $(b2b_LDFLAGS) $(b2b_OBJECTS) $(b2b_LDADD) $(LIBS) +b2image$(EXEEXT): $(b2image_OBJECTS) $(b2image_DEPENDENCIES) + @rm -f b2image$(EXEEXT) + $(LINK) $(b2image_LDFLAGS) $(b2image_OBJECTS) $(b2image_LDADD) $(LIBS) +b2mng$(EXEEXT): $(b2mng_OBJECTS) $(b2mng_DEPENDENCIES) + @rm -f b2mng$(EXEEXT) + $(LINK) $(b2mng_LDFLAGS) $(b2mng_OBJECTS) $(b2mng_LDADD) $(LIBS) +blinkenproxy$(EXEEXT): $(blinkenproxy_OBJECTS) $(blinkenproxy_DEPENDENCIES) + @rm -f blinkenproxy$(EXEEXT) + $(LINK) $(blinkenproxy_LDFLAGS) $(blinkenproxy_OBJECTS) $(blinkenproxy_LDADD) $(LIBS) +blm2gif$(EXEEXT): $(blm2gif_OBJECTS) $(blm2gif_DEPENDENCIES) + @rm -f blm2gif$(EXEEXT) + $(LINK) $(blm2gif_LDFLAGS) $(blm2gif_OBJECTS) $(blm2gif_LDADD) $(LIBS) +blmplay$(EXEEXT): $(blmplay_OBJECTS) $(blmplay_DEPENDENCIES) + @rm -f blmplay$(EXEEXT) + $(LINK) $(blmplay_LDFLAGS) $(blmplay_OBJECTS) $(blmplay_LDADD) $(LIBS) +bmultiplexer$(EXEEXT): $(bmultiplexer_OBJECTS) $(bmultiplexer_DEPENDENCIES) + @rm -f bmultiplexer$(EXEEXT) + $(LINK) $(bmultiplexer_LDFLAGS) $(bmultiplexer_OBJECTS) $(bmultiplexer_LDADD) $(LIBS) +bplay$(EXEEXT): $(bplay_OBJECTS) $(bplay_DEPENDENCIES) + @rm -f bplay$(EXEEXT) + $(LINK) $(bplay_LDFLAGS) $(bplay_OBJECTS) $(bplay_LDADD) $(LIBS) +bsend$(EXEEXT): $(bsend_OBJECTS) $(bsend_DEPENDENCIES) + @rm -f bsend$(EXEEXT) + $(LINK) $(bsend_LDFLAGS) $(bsend_OBJECTS) $(bsend_LDADD) $(LIBS) +gif2blm$(EXEEXT): $(gif2blm_OBJECTS) $(gif2blm_DEPENDENCIES) + @rm -f gif2blm$(EXEEXT) + $(LINK) $(gif2blm_LDFLAGS) $(gif2blm_OBJECTS) $(gif2blm_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) core *.core + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/b2b.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/b2image.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/b2mng.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/blinkenproxy.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/blm2gif.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/blmplay.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/blutils.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bmovie-mng.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bmultiplexer.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bplay.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bsend.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gif-load.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gif-save.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gif2blm.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \ +@am__fastdepCC_TRUE@ -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \ +@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ +@am__fastdepCC_TRUE@ fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$< + +.c.obj: +@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \ +@am__fastdepCC_TRUE@ -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \ +@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ +@am__fastdepCC_TRUE@ fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi` +uninstall-info-am: + +ETAGS = etags +ETAGSFLAGS = + +CTAGS = ctags +CTAGSFLAGS = + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)$$tags$$unique" \ + || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique + +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = .. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) + +installdirs: + $(mkinstalldirs) $(DESTDIR)$(bindir) +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: install-binPROGRAMS + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) install-exec-hook + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS uninstall-info-am uninstall-local + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ + clean-generic ctags distclean distclean-compile \ + distclean-generic distclean-tags distdir dvi dvi-am info \ + info-am install install-am install-binPROGRAMS install-data \ + install-data-am install-exec install-exec-am install-info \ + install-info-am install-man install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ + uninstall-am uninstall-binPROGRAMS uninstall-info-am \ + uninstall-local + + +install-exec-hook: + cd $(DESTDIR)$(bindir) \ + && rm -f b2blm b2bml b2gif \ + && $(LN_S) b2b b2blm && $(LN_S) b2b b2bml && $(LN_S) b2b b2gif +@HAVE_PIXBUF_TRUE@ cd $(DESTDIR)$(bindir) \ +@HAVE_PIXBUF_TRUE@ && rm -f b2jpeg b2png \ +@HAVE_PIXBUF_TRUE@ && $(LN_S) b2image b2jpeg && $(LN_S) b2image b2png + +uninstall-local: + rm -f $(DESTDIR)$(bindir)/b2blm \ + $(DESTDIR)$(bindir)/b2bml \ + $(DESTDIR)$(bindir)/b2gif +@HAVE_PIXBUF_TRUE@ rm -f $(DESTDIR)$(bindir)/b2jpeg\ +@HAVE_PIXBUF_TRUE@ $(DESTDIR)$(bindir)/b2png +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/blinkentools-2.9/src/b2b.c b/blinkentools-2.9/src/b2b.c new file mode 100644 index 0000000..8f0e7ec --- /dev/null +++ b/blinkentools-2.9/src/b2b.c @@ -0,0 +1,431 @@ +/* b2b.c + * Converts between various formats for Blinkenlights movies. + * + * Copyright (C) 2001-2004 Sven Neumann + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include +#include +#include +#include +#include + +#include +#include + +#ifdef HAVE_GETOPT_LONG +#define _GNU_SOURCE +#include +#endif + +#include + + +#ifdef HAVE_GETOPT_LONG +static const struct option options[] = +{ + { "type", required_argument, NULL, 't' }, + { "output", required_argument, NULL, 'o' }, + { "bits", required_argument, NULL, 'b' }, + { "invert", no_argument, NULL, 'i' }, + { "gamma", required_argument, NULL, 'g' }, + { "hflip", no_argument, NULL, 'f' }, + { "vflip", no_argument, NULL, 'F' }, + { "reverse", no_argument, NULL, 'r' }, + { "speed", required_argument, NULL, 's' }, + { "fps", required_argument, NULL, 'c' }, + { "loop-hint", no_argument, NULL, 'x' }, + { "no-loop-hint", no_argument, NULL, 'X' }, + { "meta", no_argument, NULL, 'm' }, + { "help", no_argument, NULL, '?' }, + { "version", no_argument, NULL, 'V' }, + { NULL, 0, NULL, 0 } +}; +#endif + +static const gchar *option_str = "t:o:b:g:ifFrs:c:xXm?V"; + + +static void b_movie_apply_gamma (BMovie *movie, + gdouble gamma); +static void b_movie_set_fixed_framerate (BMovie *movie, + double fps); + +static void +usage (const gchar *name) +{ + g_printerr ("b2b - a format converter for Blinkenlights movies.\n"); + g_printerr ("Check http://www.blinkenlights.de/ for more information.\n\n"); + g_printerr ("Usage: %s [options] \n", name); + g_printerr ("Options:\n"); + g_printerr (" -o, --output write to file instead of stdout\n"); + g_printerr (" -t, --type [blm|bml|gif] specifies output type\n"); + g_printerr (" -b, --bits number of significant bits in output\n"); + g_printerr (" -i, --invert invert movie\n"); + g_printerr (" -g, --gamma gamma-adjust all frames\n"); + g_printerr (" -f, --hflip flip movie horizontally\n"); + g_printerr (" -F, --vflip flip movie vertically\n"); + g_printerr (" -x, --loop-hint set loop flag\n"); + g_printerr (" -X, --no-loop-hint unset loop flag\n"); + g_printerr (" -r, --reverse reverse movie\n"); + g_printerr (" -s, --speed adjust movie speed\n"); + g_printerr (" -c, --fps generate frames per second\n"); + g_printerr (" -m, --meta show info about the movie, don't convert it\n"); + g_printerr (" -?, --help output usage information\n"); + g_printerr (" -V, --version output version information\n"); + g_printerr ("\n"); + +#ifndef HAVE_GETOPT_LONG + g_printerr ("This version of b2b was compiled without support for long command-line\n"); + g_printerr ("options. Only the short, one-letter options will work.\n\n"); +#endif +} + +static GType +b2b_type_from_name (const gchar *name) +{ + if (g_ascii_strcasecmp (name, "blm") == 0) + return B_TYPE_MOVIE_BLM; + if (g_ascii_strcasecmp (name, "bml") == 0) + return B_TYPE_MOVIE_BML; + if (g_ascii_strcasecmp (name, "gif") == 0) + return B_TYPE_MOVIE_GIF; + + return G_TYPE_NONE; +} + +int +main (int argc, + char *argv[]) +{ + const gchar *filename = NULL; + const gchar *output = NULL; + FILE *stream = NULL; + BEffects *effects = NULL; + gboolean reverse = FALSE; + gboolean meta = FALSE; + gdouble gamma = 1.0; + gdouble speed = 1.0; + gdouble fps = 0.0; + gboolean success; + gint loop = -1; + gint bits = -1; + gint c; + BMovie *movie; + GType type = G_TYPE_NONE; + GError *error = NULL; + + b_init (); + +#ifdef HAVE_GETOPT_LONG + while ((c = getopt_long (argc, argv, option_str, options, NULL)) >= 0) +#else + while ((c = getopt (argc, argv, option_str)) >= 0) +#endif + { + switch (c) + { + case 't': + type = b2b_type_from_name (optarg); + if (type == G_TYPE_NONE) + { + usage (argv[0]); + return EXIT_FAILURE; + } + break; + + case 'o': + output = optarg; + break; + + case 'b': + if (! b_parse_int (optarg, &bits) || bits < 1 || bits > 8) + { + g_printerr ("Invalid argument (bits)\n"); + return EXIT_FAILURE; + } + break; + + case 'i': + if (! effects) + effects = b_effects_new (); + effects->invert = B_EFFECT_SCOPE_ALL; + break; + + case 'g': + if (! b_parse_double (optarg, &gamma) || gamma < 0.0) + { + g_printerr ("Invalid argument (gamma)\n"); + return EXIT_FAILURE; + } + break; + + case 'f': + if (! effects) + effects = b_effects_new (); + effects->hflip = B_EFFECT_SCOPE_ALL; + break; + + case 'F': + if (! effects) + effects = b_effects_new (); + effects->vflip = B_EFFECT_SCOPE_ALL; + break; + + case 'r': + reverse = TRUE; + break; + + case 's': + if (! b_parse_double (optarg, &speed) || speed < 0.0) + { + g_printerr ("Invalid argument (speed)\n"); + return EXIT_FAILURE; + } + break; + + case 'c': + if (! b_parse_double (optarg, &fps) || fps < 0.0) + { + g_printerr ("Invalid argument (fps)\n"); + return EXIT_FAILURE; + } + break; + + case 'l': + loop = FALSE; + break; + + case 'L': + loop = TRUE; + break; + + case 'm': + meta = TRUE; + break; + + case '?': + usage (argv[0]); + return EXIT_SUCCESS; + + case 'V': + g_printerr ("b2b (%s version %s)\n", PACKAGE, VERSION); + return EXIT_SUCCESS; + + default: + usage (argv[0]); + return EXIT_FAILURE; + } + } + + if (optind < argc) + filename = argv[optind]; + + if (type == G_TYPE_NONE) + { + gchar *basename = g_path_get_basename (argv[0]); + + if (strlen (basename) == 5) + type = b2b_type_from_name (basename + 2); + + g_free (basename); + } + + if (! meta) + { + if (output && *output) + { + if (type == G_TYPE_NONE) + { + gint len = strlen (output); + + if (len > 4 && output[len-4] == '.') + type = b2b_type_from_name (output + len - 3); + } + + stream = fopen (output, "w"); + } + else + { + stream = stdout; + } + + if (! stream) + { + g_printerr ("Can't write to '%s': %s", output, g_strerror (errno)); + return EXIT_FAILURE; + } + } + + if (! filename || (strcmp (filename, "-") == 0)) + { + movie = b_movie_new_from_fd (0, &error); + filename = ""; + } + else + { + movie = b_movie_new_from_file (filename, FALSE, &error); + } + + if (! movie) + { + g_return_val_if_fail (error != NULL, EXIT_FAILURE); + + g_printerr ("Error opening '%s': %s\n", filename, error->message); + return EXIT_FAILURE; + } + + if (bits > 0) + { + b_movie_normalize (movie, (1 << bits) - 1); + } + /* when converting from GIF to BML, default to bits = 4 */ + else if (B_IS_MOVIE_GIF (movie) && type == B_TYPE_MOVIE_BML) + { + b_movie_normalize (movie, (1 << 4) - 1); + } + + if (gamma != 1.0) + b_movie_apply_gamma (movie, gamma); + + if (effects || reverse || speed != 1.0) + b_movie_apply_effects (movie, effects, reverse, speed); + + if (loop != -1) + movie->loop = (loop != FALSE); + + if (meta) + { + const gchar *type_name = G_OBJECT_TYPE_NAME (G_OBJECT (movie)); + + if (strncmp (type_name, "BMovie", 6) == 0) + type_name += 6; + + g_print ("Blinkenlights Movie (%s) %dx%d " + "channels=%d maxval=%d frames=%d duration=%dms\n", type_name, + movie->width, movie->height, + movie->channels, movie->maxval, + movie->n_frames, movie->duration); + + success = TRUE; + } + else + { + if (fps > 0.0) + b_movie_set_fixed_framerate (movie, fps); + + if (type != G_TYPE_NONE) + success = b_movie_save_as (movie, type, stream, &error); + else + success = b_movie_save (movie, stream, &error); + + if (output && *output) + fclose (stream); + + if (! success) + { + g_return_val_if_fail (error != NULL, EXIT_FAILURE); + + g_printerr ("Error saving movie '%s': %s\n", + (movie->title ? + movie->title : b_object_get_name (B_OBJECT (movie))), + error->message); + } + } + + g_object_unref (movie); + + if (effects) + g_object_unref (effects); + + return success ? EXIT_SUCCESS : EXIT_FAILURE; +} + +static void +b_movie_apply_gamma (BMovie *movie, + gdouble gamma) +{ + gdouble ind; + guchar *map; + gint i; + + if (gamma == 0.0 || movie->maxval < 1) + return; + + map = g_new (guchar, movie->maxval + 1); + + gamma = 1.0 / gamma; + + for (i = 0; i <= movie->maxval; i++) + { + ind = (gdouble) i / (gdouble) movie->maxval; + map[i] = + (guchar) (gint) ((gdouble) movie->maxval * pow (ind, gamma) + 0.5); + } + + b_movie_apply_colormap (movie, map); + + g_free (map); +} + +static void +b_movie_set_fixed_framerate (BMovie *movie, + gdouble fps) +{ + GList *list = NULL; + GList *frames = NULL; + gint duration = (1000.0 / fps); + gint t; + + for (t = 0; t < movie->duration; t += duration) + { + list = b_movie_get_frame_at_time (movie, list, t); + + if (list) + { + BMovieFrame *frame = list->data; + + frames = g_list_prepend (frames, + g_memdup (frame->data, + movie->width * movie->height)); + } + } + + for (list = movie->frames; list; list = g_list_next (list)) + { + BMovieFrame *frame = list->data; + + g_free (frame->data); + g_free (frame); + } + + g_list_free (movie->frames); + + movie->duration = 0; + movie->n_frames = 0; + movie->frames = NULL; + + for (list = frames; list; list = list->next) + { + b_movie_prepend_frame (movie, duration, list->data); + g_free (list->data); + } + + g_list_free (frames); +} diff --git a/blinkentools-2.9/src/b2image.c b/blinkentools-2.9/src/b2image.c new file mode 100644 index 0000000..81deb02 --- /dev/null +++ b/blinkentools-2.9/src/b2image.c @@ -0,0 +1,478 @@ +/* b2image + * Renders an image from a Blinkenlights frame. + * + * Copyright (C) 2002-2004 Sven Neumann + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include +#include + +#include +#include +#include + +#ifdef HAVE_GETOPT_LONG +#define _GNU_SOURCE +#include +#endif + +#include +#include + + +#ifdef HAVE_GETOPT_LONG +static const struct option options[] = +{ + { "theme", required_argument, NULL, 't' }, + { "output", required_argument, NULL, 'o' }, + { "format", required_argument, NULL, 'f' }, + { "index", required_argument, NULL, 'i' }, + { "all", no_argument, NULL, 'a' }, + { "link", no_argument, NULL, 'l' }, + { "quality", required_argument, NULL, 'q' }, + { "verbose", no_argument, NULL, 'v' }, + { "help", no_argument, NULL, '?' }, + { "version", no_argument, NULL, 'V' }, + { NULL, 0, NULL, 0 } +}; +#endif + +static const gchar *option_str = "t:o:f:i:alq:v?V"; + +static void +usage (const gchar *name) +{ + g_printerr ("b2image - renders an image from a Blinkenlights frame.\n"); + g_printerr ("Check http://www.blinkenlights.de/ for more information.\n\n"); + g_printerr ("Usage: %s [options] \n", name); + g_printerr ("Options:\n"); + g_printerr (" -t, --theme specifies theme\n"); + g_printerr (" -o, --output write to file \n"); + g_printerr (" -f, --format [png|jpeg] specifies output file format\n"); + g_printerr (" -i, --index dump frame (default: 0)\n"); + g_printerr (" -a, --all dump all frame\n"); + g_printerr (" -l, --link link duplicate frames\n"); + g_printerr (" -q, --quality set JPEG quality (0-100)\n"); + g_printerr (" -v, --verbose be verbose\n"); + g_printerr (" -?, --help output usage information\n"); + g_printerr (" -V, --version output version information\n"); + g_printerr ("\n"); + +#ifndef HAVE_GETOPT_LONG + g_printerr ("This version of b2image was compiled without support for long command-line\n"); + g_printerr ("options. Only the short, one-letter options will work.\n\n"); +#endif +} + + +static BTheme * +load_theme (const gchar *name) +{ + BTheme *theme; + GError *error = NULL; + + g_return_val_if_fail (name != NULL, NULL); + + if (g_file_test (name, G_FILE_TEST_IS_REGULAR)) + { + theme = b_theme_new_from_file (name, TRUE, &error); + if (!theme) + { + g_printerr ("Error opening '%s': %s\n", name, error->message); + return NULL; + } + } + else + { + theme = b_themes_lookup_theme (name, NULL, &error); + if (!theme) + { + g_printerr ("\n%s\n", error->message); + g_printerr ("Fix your spelling or try setting the " + "B_THEME_PATH environment variable.\n"); + return NULL; + } + if (!b_theme_load (theme, &error)) + { + g_printerr ("Error loading theme '%s': %s\n", + b_object_get_name (B_OBJECT (theme)), error->message); + return NULL; + } + } + + return theme; +} + +/* copied from gdk-pixbuf-io.c */ +static void +collect_save_options (va_list opts, + gchar ***keys, + gchar ***vals) +{ + gchar *key; + gchar *val; + gchar *next; + gint count = 0; + + *keys = NULL; + *vals = NULL; + + next = va_arg (opts, gchar *); + while (next) + { + key = next; + val = va_arg (opts, gchar *); + + ++count; + + *keys = g_renew (gchar *, *keys, count + 1); + *vals = g_renew (gchar *, *vals, count + 1); + + (*keys)[count - 1] = g_strdup (key); + (*vals)[count - 1] = g_strdup (val); + + (*keys)[count] = NULL; + (*vals)[count] = NULL; + + next = va_arg (opts, gchar *); + } +} + +static gboolean +b_view_pixbuf_save_frame_v (BViewPixbuf *view, + BMovieFrame *frame, + const gchar *filename, + gboolean verbose, + const gchar *type, + gchar **option_keys, + gchar **option_values, + GError **error) +{ + const GdkPixbuf *pixbuf; + + if (! frame) + return TRUE; + + pixbuf = b_view_pixbuf_render (view, frame->data, NULL, error); + + if (pixbuf && + gdk_pixbuf_savev ((GdkPixbuf *) pixbuf, + filename, type, + option_keys, option_values, + error)) + { + if (verbose) + g_printerr ("Wrote %s\n", filename); + + return TRUE; + } + + return FALSE; +} + +static gboolean +b_view_pixbuf_save_frame (BViewPixbuf *view, + BMovieFrame *frame, + const gchar *filename, + const gchar *type, + gboolean verbose, + GError **error, + ...) +{ + gchar **keys = NULL; + gchar **values = NULL; + gboolean success; + va_list args; + + va_start (args, error); + collect_save_options (args, &keys, &values); + va_end (args); + + success = b_view_pixbuf_save_frame_v (view, + frame, filename, verbose, type, + keys, values, + error); + + g_strfreev (keys); + g_strfreev (values); + + return success; +} + +static gboolean +b_view_pixbuf_save_movie (BViewPixbuf *view, + BMovie *movie, + const gchar *basename, + const gchar *type, + gboolean hardlink, + gboolean verbose, + GError **error, + ...) +{ + static const gchar *last_data = NULL; + + gsize len = strlen (basename); + gchar *filename = g_alloca (len + 16 + strlen (type)); + gchar *oldname = g_alloca (len + 16 + strlen (type)); + gchar *suffix = filename + len; + gchar *oldfix = oldname + len; + gchar **keys = NULL; + gchar **values = NULL; + GList *list; + gint n; + va_list args; + + strcpy (filename, basename); + strcpy (oldname, basename); + + va_start (args, error); + collect_save_options (args, &keys, &values); + va_end (args); + + for (list = movie->frames, n = 1; list; list = list->next, n++) + { + BMovieFrame *frame = list->data; + + sprintf (suffix, ".%05d.%s", n, type); + + if (hardlink && + last_data && + memcmp (frame->data, last_data, movie->width * movie->height) == 0) + { + sprintf (oldfix, ".%05d.%s", n - 1, type); + + if (link (oldname, filename) != 0) + { + g_set_error (error, 0, 0, + "Could not create link for '%s': %s\n" + "Perhaps try again without the --link option.", + filename, g_strerror (errno)); + return FALSE; + } + } + else + { + if (! b_view_pixbuf_save_frame_v (view, + list->data, + filename, verbose, type, + keys, values, + error)) + return FALSE; + } + + last_data = frame->data; + } + + g_strfreev (keys); + g_strfreev (values); + + return TRUE; +} + +int +main (int argc, + char *argv[]) +{ + const gchar *movie_name = NULL; + const gchar *theme_name = NULL; + const gchar *output = NULL; + const gchar *quality = NULL; + const gchar *format = NULL; + gboolean success; + gboolean hardlink = FALSE; + gboolean verbose = FALSE; + gboolean all = FALSE; + gint index = 1; + gint c; + BViewPixbuf *view = NULL; + BMovie *movie; + BTheme *theme = NULL; + GError *error = NULL; + gchar *basename = g_path_get_basename (argv[0]); + + if (strcmp (basename, "b2image") && + strlen (basename) > 4 && + basename[0] == 'b' && basename[1] == '2') + { + format = basename + 2; + } + + b_init (); + +#ifdef HAVE_GETOPT_LONG + while ((c = getopt_long (argc, argv, option_str, options, NULL)) >= 0) +#else + while ((c = getopt (argc, argv, option_str)) >= 0) +#endif + { + switch (c) + { + case 't': + theme_name = optarg; + break; + + case 'o': + output = optarg; + break; + + case 'f': + format = optarg; + break; + + case 'i': + b_parse_int (optarg, &index); + break; + + case 'a': + all = TRUE; + break; + + case 'q': + quality = optarg; + break; + + case 'l': + hardlink = TRUE; + break; + + case 'v': + verbose = TRUE; + break; + + case '?': + usage (argv[0]); + return EXIT_SUCCESS; + + case 'V': + g_printerr ("b2mng (%s version %s)\n", PACKAGE, VERSION); + return EXIT_SUCCESS; + + default: + usage (argv[0]); + return EXIT_FAILURE; + } + } + + if (optind < argc) + movie_name = argv[optind]; + + if (! output) + { + g_printerr ("Need to specify an output file using the --output command-line option.\n"); + return EXIT_FAILURE; + } + + if (! format) + { + g_printerr ("Need to specify an output file format using the --format command-line option.\n"); + return EXIT_FAILURE; + } + + if (theme_name) + { + theme = load_theme (theme_name); + if (!theme) + return EXIT_FAILURE; + + if (verbose) + g_printerr ("Loaded theme '%s' (%dx%d, %d levels) at size %dx%d\n", + b_object_get_name (B_OBJECT (theme)), + theme->columns, theme->rows, theme->maxval + 1, + theme->width, theme->height); + } + + if (! movie_name || (strcmp (movie_name, "-") == 0)) + { + movie = b_movie_new_from_fd (0, &error); + movie_name = ""; + } + else + { + movie = b_movie_new_from_file (movie_name, FALSE, &error); + } + + if (! movie) + { + g_printerr ("Error opening '%s': %s\n", movie_name, error->message); + return EXIT_FAILURE; + } + + if (verbose) + g_printerr ("Loaded movie '%s' (%dx%d) maxval=%d (%d frames, %d.%d s)\n", + movie->title ? + movie->title : b_object_get_name (B_OBJECT (movie)), + movie->width, movie->height, movie->maxval, + movie->n_frames, + movie->duration / 1000, (movie->duration % 1000) / 10); + + b_movie_normalize (movie, 255); + + if (theme) + { + if (movie->width != theme->columns || movie->height != theme->rows) + { + g_printerr ("Movie and theme dimensions do not match!\n"); + return EXIT_FAILURE; + } + + view = b_view_pixbuf_new_theme (theme, FALSE, &error); + } + else + { + view = b_view_pixbuf_new (movie->height, movie->width, movie->channels, + &error); + } + + if (! view) + { + g_printerr ("%s\n", error->message); + return EXIT_FAILURE; + } + + if (all) + success = b_view_pixbuf_save_movie (view, + movie, + output, format, hardlink, verbose, + &error, + quality ? "quality" : NULL, quality, + NULL); + else + success = b_view_pixbuf_save_frame (view, + g_list_nth_data (movie->frames, + index - 1), + output, format, verbose, + &error, + quality ? "quality" : NULL, quality, + "quality", quality, + NULL); + + if (! success) + { + g_printerr ("Error saving movie '%s': %s\n", + (movie->title ? + movie->title : b_object_get_name (B_OBJECT (movie))), + error->message); + } + + g_object_unref (movie); + if (theme) + g_object_unref (theme); + + return success ? EXIT_SUCCESS : EXIT_FAILURE; +} diff --git a/blinkentools-2.9/src/b2mng.c b/blinkentools-2.9/src/b2mng.c new file mode 100644 index 0000000..75d356a --- /dev/null +++ b/blinkentools-2.9/src/b2mng.c @@ -0,0 +1,254 @@ +/* b2mng + * Creates MNG animations from Blinkenlights movies. + * + * Copyright (C) 2002-2004 Sven Neumann + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include +#include +#include + +#include +#include + +#ifdef HAVE_GETOPT_LONG +#define _GNU_SOURCE +#include +#endif + +#include + +#include "bmovie-mng.h" + + +#ifdef HAVE_GETOPT_LONG +static const struct option options[] = +{ + { "theme", required_argument, NULL, 't' }, + { "output", required_argument, NULL, 'o' }, + { "loop", no_argument, NULL, 'l' }, + { "loops", required_argument, NULL, 'L' }, + { "verbose", no_argument, NULL, 'v' }, + { "help", no_argument, NULL, '?' }, + { "version", no_argument, NULL, 'V' }, + { NULL, 0, NULL, 0 } +}; +#endif + +static const gchar *option_str = "t:o:lL:v?V"; + +static void +usage (const gchar *name) +{ + g_printerr ("b2mng - creates MNG animations from Blinkenlights movies.\n"); + g_printerr ("Check http://www.blinkenlights.de/ for more information.\n\n"); + g_printerr ("Usage: %s [options] \n", name); + g_printerr ("Options:\n"); + g_printerr (" -t, --theme specifies theme\n"); + g_printerr (" -o, --output write to file instead of stdout\n"); + g_printerr (" -l, --loop create endlessly looping animation\n"); + g_printerr (" -L, --loops loop animation as often as specified\n"); + g_printerr (" -v, --verbose be verbose\n"); + g_printerr (" -?, --help output usage information\n"); + g_printerr (" -v, --version output version information\n"); + g_printerr ("\n"); + +#ifndef HAVE_GETOPT_LONG + g_printerr ("This version of b2mng was compiled without support for long command-line\n"); + g_printerr ("options. Only the short, one-letter options will work.\n\n"); +#endif +} + + +static BTheme * +load_theme (const gchar *name) +{ + BTheme *theme; + GError *error = NULL; + + g_return_val_if_fail (name != NULL, NULL); + + if (g_file_test (name, G_FILE_TEST_IS_REGULAR)) + { + theme = b_theme_new_from_file (name, TRUE, &error); + if (!theme) + { + g_printerr ("Error opening '%s': %s\n", name, error->message); + return NULL; + } + } + else + { + theme = b_themes_lookup_theme (name, NULL, &error); + if (!theme) + { + g_printerr ("\n%s\n", error->message); + g_printerr ("Fix your spelling or try setting the " + "B_THEME_PATH environment variable.\n"); + return NULL; + } + if (!b_theme_load (theme, &error)) + { + g_printerr ("Error loading theme '%s': %s\n", + b_object_get_name (B_OBJECT (theme)), error->message); + return NULL; + } + } + + return theme; +} + +int +main (int argc, + char *argv[]) +{ + const gchar *movie_name = NULL; + const gchar *theme_name = NULL; + const gchar *output = NULL; + FILE *stream; + gboolean success; + gboolean verbose = FALSE; + gint loops = 1; + gint c; + BMovie *movie; + BTheme *theme = NULL; + GError *error = NULL; + + b_init (); + +#ifdef HAVE_GETOPT_LONG + while ((c = getopt_long (argc, argv, option_str, options, NULL)) >= 0) +#else + while ((c = getopt (argc, argv, option_str)) >= 0) +#endif + { + switch (c) + { + case 't': + theme_name = optarg; + break; + + case 'o': + output = optarg; + break; + + case 'l': + loops = -1; + break; + + case 'L': + b_parse_int (optarg, &loops); + break; + + case 'v': + verbose = TRUE; + break; + + case '?': + usage (argv[0]); + return EXIT_SUCCESS; + + case 'V': + g_printerr ("b2mng (%s version %s)\n", PACKAGE, VERSION); + return EXIT_SUCCESS; + + default: + usage (argv[0]); + return EXIT_FAILURE; + } + } + + if (optind < argc) + movie_name = argv[optind]; + + if (theme_name) + { + theme = load_theme (theme_name); + + if (!theme) + return EXIT_FAILURE; + + if (verbose) + g_printerr ("Loaded theme '%s' (%dx%d, %d levels) at size %dx%d\n", + b_object_get_name (B_OBJECT (theme)), + theme->columns, theme->rows, theme->maxval + 1, + theme->width, theme->height); + } + + if (output && *output) + stream = fopen (output, "w"); + else + stream = stdout; + + if (! stream) + { + g_printerr ("Can't write to '%s': %s", output, g_strerror (errno)); + return EXIT_FAILURE; + } + + if (! movie_name || (strcmp (movie_name, "-") == 0)) + { + movie = b_movie_new_from_fd (0, &error); + movie_name = ""; + } + else + { + movie = b_movie_new_from_file (movie_name, FALSE, &error); + } + + if (! movie) + { + g_printerr ("Error opening '%s': %s\n", movie_name, error->message); + return EXIT_FAILURE; + } + + if (verbose) + g_printerr ("Loaded movie '%s' (%dx%d) maxval=%d (%d frames, %d.%d s)\n", + movie->title ? + movie->title : b_object_get_name (B_OBJECT (movie)), + movie->width, movie->height, movie->maxval, + movie->n_frames, + movie->duration / 1000, (movie->duration % 1000) / 10); + + b_movie_normalize (movie, 255); + + success = b_movie_save_as_mng (movie, theme, stream, loops, &error); + + if (output && *output) + fclose (stream); + + if (success) + { + if (verbose) + g_printerr ("Successfully created MNG\n"); + } + else + { + g_printerr ("Error saving movie '%s': %s\n", + (movie->title ? + movie->title : b_object_get_name (B_OBJECT (movie))), + error->message); + } + + g_object_unref (movie); + if (theme) + g_object_unref (theme); + + return success ? EXIT_SUCCESS : EXIT_FAILURE; +} diff --git a/blinkentools-2.9/src/blinkenproxy.c b/blinkentools-2.9/src/blinkenproxy.c new file mode 100644 index 0000000..3a58e65 --- /dev/null +++ b/blinkentools-2.9/src/blinkenproxy.c @@ -0,0 +1,298 @@ +/* blinkenproxy - forwards Blinkenlights packets + * + * Copyright (c) 2003-2004 Hannes Mehnert + * Sven Neumann + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include +#include + +#ifdef HAVE_GETOPT_LONG +#define _GNU_SOURCE +#include +#endif + +#include + +#ifdef G_OS_WIN32 +#include +#else +#include +#include +#include +#include +#endif + + +#ifdef HAVE_GETOPT_LONG +static const struct option options[] = +{ + { "help", no_argument, NULL, '?' }, + { "version", no_argument, NULL, 'V' }, + { NULL, 0, NULL, 0 } +}; +#endif + +static const gchar *option_str = "?V"; + + +static BProxyServer *server = NULL; +static GMainLoop *loop = NULL; +static guint heartbeat = 0; + + +#define HEARTBEAT_TIMEOUT (B_HEARTBEAT_INTERVAL * 12) + + +static void +usage (const gchar *name) +{ + g_printerr ("\n"); + g_printerr ("blinkenproxy - forwards Blinkenlights package to its clients.\n"); + g_printerr ("Check http://www.blinkenlights.de/ for more information.\n\n"); + + g_printerr ("Usage: %s [options] [hostname[:port]|receive-port] [heartbeat-port]\n", name); + g_printerr ("Options:\n"); + g_printerr (" -?, --help output usage information\n"); + g_printerr (" -V, --version output version information\n"); + g_printerr ("\n"); +} + +static gboolean +frame_callback (BReceiver *receiver, + BPacket *packet, + gpointer data) +{ + BProxyServer *server = B_PROXY_SERVER (data); + + if (packet->header.mcu_frame_h.magic != MAGIC_MCU_FRAME) + return TRUE; + + b_proxy_server_send_packet (server, packet); + + return TRUE; +} + +static void +server_client_added (BProxyServer *server, + const gchar *host, + gint port, + BProxyClient *client) +{ + gint num = b_proxy_server_num_clients (server); + + g_print ("client added (%d): %s:%d\n", num, host, port); + + if (client && !heartbeat) + { + b_proxy_client_send_heartbeat (client); + + heartbeat = g_timeout_add (B_HEARTBEAT_INTERVAL, + (GSourceFunc) b_proxy_client_send_heartbeat, + client); + } +} + +static void +server_client_removed (BProxyServer *server, + const gchar *host, + gint port, + BProxyClient *client) +{ + gint num = b_proxy_server_num_clients (server); + + g_print ("client removed (%d): %s:%d\n", num, host, port); + + if (client && heartbeat && num == 0) + { + g_source_remove (heartbeat); + heartbeat = 0; + } +} + +#ifndef G_OS_WIN32 +static void +sigusr1_handler (gint signum) +{ + if (server) + g_print ("I have %u clients.\n", b_proxy_server_num_clients (server)); +} + +static void +sigint_handler (gint signum) +{ + sigset_t sigset; + + sigemptyset (&sigset); + sigprocmask (SIG_SETMASK, &sigset, NULL); + + g_print ("Received signal %d, exiting ...\n", signum); + + if (loop) + g_main_loop_quit (loop); +} +#endif /* !G_OS_WIN32 */ + + +int +main (int argc, + char *argv[]) +{ + BReceiver *receiver; + BProxyClient *client = NULL; + const gchar *host = NULL; + gint bml_port = MCU_LISTENER_PORT; + gint hb_port = B_HEARTBEAT_PORT; + gint c; + GError *error = NULL; + + g_printerr ("blinkenproxy version " VERSION "\n"); + + b_init (); + +#ifdef HAVE_GETOPT_LONG + while ((c = getopt_long (argc, argv, option_str, options, NULL)) >= 0) +#else + while ((c = getopt (argc, argv, option_str)) >= 0) +#endif + { + switch (c) + { + case '?': + usage (argv[0]); + return EXIT_SUCCESS; + + case 'V': + g_printerr ("blinkenproxy (%s version %s)\n", PACKAGE, VERSION); + return EXIT_SUCCESS; + + default: + usage (argv[0]); + return EXIT_FAILURE; + } + } + + switch (argc - optind) + { + case 0: + break; + + case 1: + b_parse_int (argv[optind], &bml_port) || (host = argv[optind]); + break; + + case 2: + b_parse_int (argv[optind], &bml_port) || (host = argv[optind]); + b_parse_int (argv[optind + 1], &hb_port); + break; + + default: + usage (argv[0]); + return EXIT_FAILURE; + } + + if (host) + { + gchar *name = g_strdup (host); + gchar *colon = strrchr (name, ':'); + + bml_port = B_HEARTBEAT_PORT; + + if (colon) + { + b_parse_int (colon + 1, &bml_port); + *colon = '\0'; + } + + host = name; + } + + server = b_proxy_server_new (hb_port, &error); + if (! server) + { + g_printerr ("Couldn't create proxy server: %s\n", error->message); + return EXIT_FAILURE; + } + + g_print ("Listening for client heartbeat on port %d.\n", hb_port); + + if (host) + { + g_print ("Forwarding stream from blinkenproxy at %s:%d\n", + host, bml_port); + + client = b_proxy_client_new (host, bml_port, -1, + frame_callback, server, + &error); + + if (! client) + { + g_printerr ("Couldn't setup proxy connection: %s\n", error->message); + return EXIT_FAILURE; + } + + receiver = B_RECEIVER (client); + } + else + { + receiver = b_receiver_new (frame_callback, server); + + if (! b_receiver_listen (receiver, bml_port)) + { + g_printerr ("Unable to listen on port %d!\n", bml_port); + return EXIT_FAILURE; + } + + g_print ("Listening for Blinkenlights packages on port %d.\n", bml_port); + } + + g_signal_connect (server, "client_added", + G_CALLBACK (server_client_added), + client); + g_signal_connect (server, "client_removed", + G_CALLBACK (server_client_removed), + client); + + loop = g_main_loop_new (NULL, FALSE); + +#ifndef G_OS_WIN32 + { + struct sigaction sa; + + /* handle SIGINT */ + sigfillset (&sa.sa_mask); + sa.sa_handler = sigint_handler; + sa.sa_flags = SA_RESTART; + sigaction (SIGINT, &sa, NULL); + + /* handle SIGUSR1 */ + sigfillset (&sa.sa_mask); + sa.sa_handler = sigusr1_handler; + sa.sa_flags = SA_RESTART; + sigaction (SIGUSR1, &sa, NULL); + } +#endif /* !G_OS_WIN32 */ + + g_main_loop_run (loop); + g_main_loop_unref (loop); + + g_object_unref (server); + + return EXIT_SUCCESS; +} diff --git a/blinkentools-2.9/src/blm2gif.c b/blinkentools-2.9/src/blm2gif.c new file mode 100644 index 0000000..d3af795 --- /dev/null +++ b/blinkentools-2.9/src/blm2gif.c @@ -0,0 +1,394 @@ +/* blm2gif.c + * Creates GIF animations from BlinkenLights movies. + * + * Copyright (C) 2001 Sven Neumann + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include +#include +#include +#include +#include +#include + +#include "blutils.h" +#include "gif-save.h" + +#include "hdl.h" + + +#ifndef FALSE +#define FALSE 0 +#define TRUE (!FALSE) +#endif + + +static void +write_image (FILE *gif, + unsigned char *data, + int pitch, + int left, + int top, + int width, + int height, + int delay, + HdlInfo *hdl) +{ + static char *image = NULL; + char *src, *dest; + int first = FALSE; + int i, x, y; + + /* if the frame is empty, create a dummy frame to keep the timing intact */ + if (width <= 0 || height <= 0) + { + left = top = 0; + width = height = 1; + } + + GIFEncodeGraphicControlExt (gif, DISPOSE_COMBINE, delay, TRUE, hdl->trans); + + if (!image) + { + image = malloc (hdl->width * hdl->height); + memcpy (image, hdl->off, hdl->width * hdl->height); + dest = image + hdl->width * (hdl->offy + top * hdl->dy); + first = TRUE; + } + else + { + dest = image; + } + + data += top * pitch; + + for (y = top; y < top + height; y++) + { + for (i = 0; i < hdl->dy; i++) + { + if (first) + dest += hdl->offx + left * hdl->dy; + + for (x = left; x < left + width; x++) + { + if (hdl->trans != -1 && (data[x] & 0x02) && !first) + { + memset (dest, hdl->trans, hdl->dx); + } + else + { + src = (data[x] & 0x1) ? hdl->on : hdl->off; + src += hdl->width * (hdl->offy + y * hdl->dy + i); + src += hdl->offx + x * hdl->dx; + + memcpy (dest, src, hdl->dx); + } + + dest += hdl->dx; + } + + if (first) + dest += hdl->width - (hdl->offx + x * hdl->dx); + } + + data += pitch; + } + + if (first) + GIFEncodeImageData (gif, hdl->width, hdl->height, hdl->cbits, 0, 0, image); + else + GIFEncodeImageData (gif, + width * hdl->dx, height * hdl->dy, hdl->cbits, + hdl->offx + left * hdl->dx, hdl->offy + top * hdl->dy, + image); +} + +int +main (int argc, + char *argv[]) +{ + unsigned char *data = NULL; + FILE *blm = NULL; + char *filename = NULL; + char *comment = NULL; + char buf[4096]; + int comment_len = 0; + int width, height; + int x1, x2, y1, y2; + int lc; + int line; + int len, i; + int duration; + int help; + int version; + int loop = -1; + + HdlInfo hdls[LAST_IMAGE] = + { + hdl_plain, + hdl_small, + hdl_medium, + hdl_large, + hdl_huge + }; + ImageType type = IMAGE_PLAIN; + HdlInfo *hdl; + + + for (i = 1, help = FALSE, version = FALSE; + i < argc && !help && !version; + i++) + { + if (strncmp (argv[i], "--", 2) == 0) + { + if (strcmp (argv[i], "--hdl-small") == 0) + type = IMAGE_HDL_SMALL; + else if (strcmp (argv[i], "--hdl") == 0 || + strcmp (argv[i], "--hdl-medium") == 0) + type = IMAGE_HDL_MEDIUM; + else if (strcmp (argv[i], "--hdl-large") == 0) + type = IMAGE_HDL_LARGE; + else if (strcmp (argv[i], "--hdl-huge") == 0) + type = IMAGE_HDL_HUGE; + else if (strcmp (argv[i], "--loop") == 0) + { + loop = 0; + if (i + 1 < argc && sscanf (argv[i+1], "%d", &loop) == 1) + i++; + } + else if (strcmp (argv[i], "--version") == 0) + version = TRUE; + else + help = TRUE; + } + else if (!filename) + filename = argv[i]; + } + + if (version) + { + fprintf (stderr, "blm2gif version %s\n", VERSION); + return 0; + } + + if (help || !filename) + { + fprintf (stderr, "\nblm2gif creates animated GIFs from Blinkenlights Movies.\n\n"); + fprintf (stderr, "Usage: blm2gif [options] \n\n"); + fprintf (stderr, "Options:\n"); + fprintf (stderr, " --hdl-small Haus des Lehrers (%dx%d).\n", + hdls[IMAGE_HDL_SMALL].width, hdls[IMAGE_HDL_SMALL].height); + fprintf (stderr, " --hdl-medium Haus des Lehrers (%dx%d).\n", + hdls[IMAGE_HDL_MEDIUM].width, hdls[IMAGE_HDL_MEDIUM].height); + fprintf (stderr, " --hdl-large Haus des Lehrers (%dx%d).\n", + hdls[IMAGE_HDL_LARGE].width, hdls[IMAGE_HDL_LARGE].height); + fprintf (stderr, " --hdl-huge Haus des Lehrers (%dx%d).\n", + hdls[IMAGE_HDL_HUGE].width, hdls[IMAGE_HDL_HUGE].height); + fprintf (stderr, " --loop [n] Loop (infinitely or as specified).\n"); + fprintf (stderr, " --help Output usage information.\n"); + fprintf (stderr, " --version Output version information.\n"); + fprintf (stderr, "\nCheck http://www.blinkenlights.de/ for more information.\n\n"); + + return (help ? 0 : -1); + } + + if (isatty (1)) + { + fprintf (stderr, "Not writing to : it's a terminal\n"); + return -1; + } + + if (strcmp (filename, "-") == 0) + blm = stdin; + else + blm = fopen (filename, "r"); + + if (!blm) + { + fprintf (stderr, "Can't open '%s': %s\n", filename, strerror (errno)); + return -1; + } + + lc = 1; + if (!bl_fgets (buf, sizeof (buf), blm) && lc++) + goto blerror; + + if (buf[0] != '#') + goto blerror; + + i = 1; + while (isspace (buf[i])) + i++; + + if (strncasecmp (buf + i, "BlinkenLights Movie", 19) != 0) + goto blerror; + + if (sscanf (buf + i + 19, "%dx%d", &width, &height) != 2) + { + fprintf (stderr, + "Blinkenlights files should declare width and height in the first line.\n" + "This one doesn't but I'll assume %d x %d and try to continue.\n", + BLINKEN_WIDTH, BLINKEN_HEIGHT); + + width = BLINKEN_WIDTH; + height = BLINKEN_HEIGHT; + } + + if (type != IMAGE_PLAIN && + ((width != BLINKEN_WIDTH) || (height != BLINKEN_HEIGHT))) + { + fprintf (stderr, "Sorry, HDL mode is only available for size %dx%d.\n", + BLINKEN_WIDTH, BLINKEN_HEIGHT); + return -1; + } + + hdl = &hdls[type]; + + if (type == IMAGE_PLAIN) + { + hdl->width = width; + hdl->height = height; + hdl->on = malloc (width * height); + memset (hdl->on, 1, width * height); + hdl->off = malloc (width * height); + memset (hdl->off, 0, width * height); + } + + GIFEncodeHeader (stdout, TRUE, + hdl->width, hdl->height, 0, hdl->cbits, hdl->colors); + + if (loop >= 0) + GIFEncodeLoopExt (stdout, loop); + + data = calloc (width * height, sizeof (unsigned char)); + + line = -1; + x1 = y1 = 0; + x2 = width; + y2 = height; + + while (bl_fgets (buf, sizeof (buf), blm) && lc++) + { + len = strlen (buf); + + if (len == 0) + continue; + + if (buf[0] == '#' && comment_len < 240) + { + len--; + if (comment_len + len > 240) + len = 240 - comment_len; + comment = realloc (comment, comment_len + len + 1); + strncpy (comment + comment_len, buf + 1, len); + comment_len += len; + continue; + } + + break; + } + + if (feof (blm)) + goto blerror; + + if (comment) + { + GIFEncodeCommentExt (stdout, comment); + free (comment); + } + + do + { + len = strlen (buf); + + if (len == 0) + continue; + + if (line == -1) + { + if (buf[0] == '@') + { + if (sscanf (buf+1, "%d", &duration) == 1 && duration > 0) + line = 0; + } + } + else + { + /* special case last line */ + if (feof (blm)) + len++; + + if (buf[0] == '@' || len - 1 < width) + { + fprintf (stderr, "Invalid frame, skipping (line %d).\n", lc); + line = -1; + } + else + { + unsigned char *dest = data + width * line; + + for (i = 0; i < width; i++, dest++) + { + unsigned char pixel = (buf[i] == '0' ? 0x0 : 0x1); + + if ((*dest & 0x01) == pixel) + { + *dest |= 0x02; + } + else + { + if (x1 > i) x1 = i; + if (x2 < i + 1) x2 = i + 1; + if (y1 > line) y1 = line; + if (y2 < line + 1) y2 = line + 1; + + *dest = pixel; + } + } + + if (++line == height) + { + write_image (stdout, data, width, + x1, y1, x2 - x1, y2 - y1, duration / 10, hdl); + + x1 = width; + y1 = height; + x2 = y2 = 0; + line = -1; + } + } + } + } + while (bl_fgets (buf, sizeof (buf), blm) && lc++); + + free (data); + fclose (blm); + GIFEncodeClose (stdout); + + return 0; + + blerror: + fprintf (stderr, "Error parsing BlinkenLights movie '%s' (line %d).\n", + filename, lc); + if (data) + free (data); + fclose (blm); + fclose (stdout); + return -1; +} diff --git a/blinkentools-2.9/src/blmplay.c b/blinkentools-2.9/src/blmplay.c new file mode 100644 index 0000000..da744b7 --- /dev/null +++ b/blinkentools-2.9/src/blmplay.c @@ -0,0 +1,149 @@ +/* blmplay.c + * Plays BlinkenLights movies on the text console. + * + * Copyright (C) 2001 Sven Neumann + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include +#include +#include +#include +#include +#include +#include + +#include "blutils.h" + +static void +mysleep (long pause) +{ + static struct timeval last = { 0, 0 }; + struct timeval now; + long expired; + + pause *= 1000; + + gettimeofday (&now, NULL); + if (last.tv_sec != 0) + expired = ((now.tv_sec - last.tv_sec) * 1000000 + + (now.tv_usec - last.tv_usec)); + else + expired = 0; + + if (pause - expired > 0) + usleep (pause - expired); + + gettimeofday (&last, NULL); +} + +int +main (int argc, + char *argv[]) +{ + FILE *blm = NULL; + char *filename = NULL; + char buf[4096]; + int lc; + int len, i; + int duration; + + if (argc != 2) + { + fprintf (stderr, "blmplay version %s\n", VERSION); + fprintf (stderr, "Usage: blmplay \n"); + return -1; + } + + filename = argv[1]; + + if (strcmp (filename, "-") == 0) + blm = stdin; + else + blm = fopen (filename, "r"); + + if (!blm) + { + fprintf (stderr, "Can't open '%s': %s\n", filename, strerror (errno)); + return -1; + } + + lc = 1; + if (!bl_fgets (buf, sizeof (buf), blm) && lc++) + goto blerror; + + if (buf[0] != '#') + goto blerror; + + i = 1; + while (isspace (buf[i])) + i++; + + if (strncasecmp (buf + i, "BlinkenLights Movie", 19) != 0) + goto blerror; + + while (bl_fgets (buf, sizeof (buf), blm) && lc++) + { + len = strlen (buf); + + if (len == 0) + continue; + + if (buf[0] == '#') + continue; + + if (buf[0] == '@') + { + fflush (stdout); + mysleep (duration); + + if (sscanf (buf+1, "%d", &duration) != 1 || duration < 0) + duration = 0; + + printf ("\033[2J\033[H"); + } + else + { + /* skip empty lines */ + for (i = 0; i < len; i++) + if (!isspace (buf[i])) + break; + if (i == len) + continue; + + /* special case last line */ + if (feof (blm)) + len++; + + for (i = 0; i < len - 1; i++) + putchar (buf[i] == '0' ? ' ' : '#'); + + putchar ('\n'); + } + } + + fclose (blm); + mysleep (duration); + return 0; + + blerror: + fprintf (stderr, "Error parsing BlinkenLights movie '%s' (line %d).\n", + filename, lc); + fclose (blm); + return -1; +} diff --git a/blinkentools-2.9/src/blutils.c b/blinkentools-2.9/src/blutils.c new file mode 100644 index 0000000..d1ccb28 --- /dev/null +++ b/blinkentools-2.9/src/blutils.c @@ -0,0 +1,59 @@ +/* blutils.c + * Common routines to handle BlinkenLights movies. + * + * Copyright (C) 2001 Sven Neumann + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include + +#include "blutils.h" + + +char * +bl_fgets (char *s, + int size, + FILE *stream) +{ + int i = 0; + int c = 0; + + if (!s || size < 2) + return NULL; + + while (i < size - 1) + { + c = fgetc (stream); + if (c == EOF || c == '\r') + break; + s[i++] = (char) c; + if (c == '\n') + break; + } + + if (c == '\r') + { + c = fgetc (stream); + if (c != '\n' && c != EOF) + ungetc (c, stream); + s[i++] = '\n'; + } + + if (i) + s[i++] = '\0'; + + return i > 0 ? s : NULL; +} diff --git a/blinkentools-2.9/src/blutils.h b/blinkentools-2.9/src/blutils.h new file mode 100644 index 0000000..005ae49 --- /dev/null +++ b/blinkentools-2.9/src/blutils.h @@ -0,0 +1,9 @@ +#ifndef __BLUTILS_H__ +#define __BLUTILS_H__ + +char * bl_fgets (char *buf, + int buf_size, + FILE *stream); + + +#endif /* __BLUTILS_H__ */ diff --git a/blinkentools-2.9/src/bmovie-mng.c b/blinkentools-2.9/src/bmovie-mng.c new file mode 100644 index 0000000..70c5303 --- /dev/null +++ b/blinkentools-2.9/src/bmovie-mng.c @@ -0,0 +1,878 @@ +/* b2mng + * Creates MNG animations from Blinkenlights movies. + * + * Copyright (C) 2002-2004 Sven Neumann + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include +#include +#include + +#include + +#define MNG_SUPPORT_WRITE +#define MNG_ACCESS_CHUNKS +#include + +#include + +#include "bmovie-mng.h" + + +typedef struct +{ + FILE *stream; +} UserData; + +static mng_bool +mng_cb_writedata (mng_handle hMNG, + mng_ptr pBuf, + mng_uint32 iSize, + mng_uint32 *iWritten) +{ + UserData *data = (UserData *) mng_get_userdata (hMNG); + + *iWritten = fwrite (pBuf, 1, iSize, data->stream); + + return MNG_TRUE; +} + +static mng_ptr +mng_cb_alloc (mng_size_t iSize) +{ + return (mng_ptr) g_malloc0 (iSize); +} + +static void +mng_cb_free (mng_ptr pPtr, + mng_size_t iSize) +{ + g_free (pPtr); +} + +static mng_bool +mng_cb_openstream (mng_handle hMNG) +{ + return MNG_TRUE; +} + +static mng_bool +mng_cb_closestream (mng_handle hMNG) +{ + return MNG_TRUE; +} + +static gpointer +zlib_compress_frame (const guchar *data, + gint width, + gint height, + gint rowstride, + gulong *len) +{ + static gchar *z_in = NULL; + static gchar *z_out = NULL; + static gulong z_len = 0; + gulong size; + gint row; + guchar *dest; + + size = (width + 1) * height; + + if (size > z_len) + { + z_len = size; + z_in = g_realloc (z_in, z_len); + z_out = g_realloc (z_out, z_len + 20); + } + + *len = z_len + 20; + + for (row = 0, dest = z_in; row < height; row++) + { + *dest = 0; /* zero filter-byte */ + dest++; + + memcpy (dest, data, width); + + data += rowstride; + dest += width; + } + + compress2 (z_out, len, z_in, z_len, Z_BEST_COMPRESSION); + + return z_out; +} + +static void +mng_put_simple_frame_data (mng_handle hMNG, + BMovie *movie, + BRectangle *rect, + const guchar *data) +{ + gpointer idat; + gulong len; + BRectangle area = { 0, 0, movie->width, movie->height }; + + if (rect) + area = *rect; + + if (area.w < 1 || area.h < 1) + return; + + mng_putchunk_defi (hMNG, + 0, + MNG_DONOTSHOW_VISIBLE, + MNG_ABSTRACT, + MNG_TRUE, area.x, area.y, + MNG_FALSE, 0, 0, 0, 0); + + if (mng_putchunk_ihdr (hMNG, + area.w, area.h, 8, MNG_COLORTYPE_GRAY, + MNG_COMPRESSION_DEFLATE, MNG_FILTER_ADAPTIVE, + MNG_INTERLACE_NONE)) + g_warning ("mng_putchunk_ihdr() failed"); + + idat = zlib_compress_frame (data + area.y * movie->width + area.x, + area.w, area.h, movie->width, &len); + + mng_putchunk_idat (hMNG, len, idat); + mng_putchunk_iend (hMNG); +} + +static void +mng_put_image_data (mng_handle hMNG, + FILE *file, + gint *width, + gint *height) +{ + guint32 chunksize; + guchar chunkname[9]; + guchar *chunkbuffer; + + while (! feof (file)) + { + chunkbuffer = NULL; + + if (fread (&chunksize, 1, 4, file) != 4) + break; + chunksize = g_ntohl (chunksize); + + if (fread (chunkname, 1, 4, file) != 4) + break; + chunkname[4] = 0; + + if (chunksize > 0) + { + chunkbuffer = g_new (guchar, chunksize); + + if (fread (chunkbuffer, 1, chunksize, file) != chunksize) + break; + } + + if (strncmp (chunkname, "IHDR", 4) == 0) + { + guint32 chunkwidth = g_ntohl (*((guint32 *) chunkbuffer)); + guint32 chunkheight = g_ntohl (*((guint32 *) chunkbuffer + 1)); + + mng_putchunk_ihdr (hMNG, + chunkwidth, chunkheight, + chunkbuffer[8], chunkbuffer[9], + chunkbuffer[10], chunkbuffer[11], + chunkbuffer[12]); + + if (width) *width = chunkwidth; + if (height) *height = chunkheight; + } + else if (strncmp (chunkname, "JHDR", 4) == 0) + { + guint32 chunkwidth = g_ntohl (*((guint32 *) chunkbuffer)); + guint32 chunkheight = g_ntohl (*((guint32 *) chunkbuffer + 1)); + + mng_putchunk_jhdr (hMNG, + chunkwidth, chunkheight, + chunkbuffer[8], chunkbuffer[9], + chunkbuffer[10], chunkbuffer[11], + 0, 0, 0, 0); + + if (width) *width = chunkwidth; + if (height) *height = chunkheight; + } + else if (strncmp (chunkname, "IDAT", 4) == 0) + { + mng_putchunk_idat (hMNG, + chunksize, chunkbuffer); + } + else if (strncmp (chunkname, "JDAT", 4) == 0) + { + mng_putchunk_jdat (hMNG, + chunksize, chunkbuffer); + } + else if (strncmp (chunkname, "JSEP", 4) == 0) + { + mng_putchunk_jsep (hMNG); + } + else if (strncmp (chunkname, "IEND", 4) == 0) + { + mng_putchunk_iend (hMNG); + } + else if (strncmp (chunkname, "PLTE", 4) == 0) + { + mng_putchunk_plte (hMNG, + chunksize / 3, (mng_palette8e *) chunkbuffer); + } + else if (strncmp (chunkname, "tRNS", 4) == 0) + { + mng_putchunk_trns (hMNG, + 0, 0, 3, chunksize, + (mng_uint8 *) chunkbuffer, 0, 0, 0, 0, + 0, + (mng_uint8 *) chunkbuffer); + } + + if (chunksize > 0) + g_free (chunkbuffer); + + /* read 4 bytes after the chunk */ + fread (chunkname, 1, 4, file); + } +} + +static gboolean +mng_put_image (mng_handle hMNG, + guint16 id, + const gchar *filename, + gboolean visible, + gint *width, + gint *height, + GError **error) +{ + FILE *file; + gchar buf[8]; + + g_return_val_if_fail (filename != NULL, FALSE); + g_return_val_if_fail (error == NULL || *error == NULL, FALSE); + + file = fopen (filename, "rb"); + + if (! file) + { + g_set_error (error, + G_FILE_ERROR, + g_file_error_from_errno (errno), + "Error reading file '%s': %s", + filename, g_strerror (errno)); + return FALSE; + } + + if (fread (buf, 1, 8, file) == 8 && + (strncmp (buf, "\211PNG\r\n\032\n", 8) == 0 || + strncmp (buf, "\213JNG\r\n\032\n", 8) == 0)) + { + mng_putchunk_defi (hMNG, + id, + (visible ? + MNG_DONOTSHOW_VISIBLE : MNG_DONOTSHOW_NOTVISIBLE), + MNG_ABSTRACT, + MNG_FALSE, 0, 0, + MNG_FALSE, 0, 0, 0, 0); + + mng_put_image_data (hMNG, file, width, height); + + fclose (file); + return TRUE; + } + else + { + g_set_error (error, 0, 0, "Unsupported fileformat in '%s'", filename); + + fclose (file); + return FALSE; + } +} + +static void +mng_put_loop (mng_handle hMNG, + gint loops) +{ + mng_putchunk_save (hMNG, MNG_TRUE, 0, 0); + + if (loops < 0) + mng_putchunk_term (hMNG, + MNG_TERMACTION_REPEAT, MNG_ITERACTION_LASTFRAME, + 0, 0x7fffffff); + else if (loops > 1) + mng_putchunk_term (hMNG, + MNG_TERMACTION_REPEAT, MNG_ITERACTION_LASTFRAME, + 0, loops); + else + mng_putchunk_term (hMNG, + MNG_TERMACTION_LASTFRAME, MNG_ITERACTION_LASTFRAME, + 0, 0); + + mng_putchunk_seek (hMNG, 0, MNG_NULL); +} + +static void +b_movie_mng_header (BMovie *movie, + BTheme *theme, + mng_handle hMNG) +{ + if (mng_putchunk_mhdr (hMNG, + theme ? theme->width : movie->width, + theme ? theme->height : movie->height, + 1000, + 0, + movie->n_frames, + movie->duration, + (MNG_SIMPLICITY_VALID | + MNG_SIMPLICITY_SIMPLEFEATURES | + MNG_SIMPLICITY_COMPLEXFEATURES | + MNG_SIMPLICITY_JNG))) + g_warning ("mng_putchunk_mhdr() failed"); + + mng_putchunk_text (hMNG, + 5, "Title", 19, "Blinkenlights Movie"); +} + +static void +b_movie_write_simple_mng (BMovie *movie, + gint loops, + mng_handle hMNG) +{ + GList *list = movie->frames; + BMovieFrame *frame = list->data; + gint delay = frame->duration; + + if (mng_putchunk_back (hMNG, + 0, 0, 0, MNG_BACKGROUNDCOLOR_MANDATORY, + 0, MNG_BACKGROUNDIMAGE_NOTILE)) + g_warning ("mng_putchunk_back() failed"); + + mng_put_loop (hMNG, loops); + + mng_putchunk_fram (hMNG, + MNG_FALSE, MNG_FRAMINGMODE_1, + 0, MNG_NULL, + MNG_CHANGEDELAY_DEFAULT, + MNG_CHANGETIMOUT_NO, + MNG_CHANGECLIPPING_NO, + MNG_CHANGESYNCID_NO, + delay, 0, 0, + 0, 0, 0, 0, + 0, 0); + mng_put_simple_frame_data (hMNG, movie, NULL, frame->data); + + for (list = list->next; list; list = list->next) + { + frame = list->data; + + if (frame->duration != delay) + { + delay = frame->duration; + + mng_putchunk_fram (hMNG, + MNG_FALSE, MNG_FRAMINGMODE_NOCHANGE, + 0, MNG_NULL, + MNG_CHANGEDELAY_DEFAULT, + MNG_CHANGETIMOUT_NO, + MNG_CHANGECLIPPING_NO, + MNG_CHANGESYNCID_NO, + delay, 0, 0, + 0, 0, 0, 0, + 0, 0); + } + + mng_put_simple_frame_data (hMNG, movie, NULL, frame->data); + } +} + +typedef struct +{ + guint id; + gint width; + gint height; +} Image; + +typedef struct +{ + guint image; + gint x; + gint y; + gint w; + gint h; +} Window; + +static guint +window_hash (const Window *window) +{ + return (g_int_hash (&window->image) + + g_int_hash (&window->x) + + g_int_hash (&window->y) + + g_int_hash (&window->w) + + g_int_hash (&window->h)); +} + +static gboolean +window_equal (const Window *a, + const Window *b) +{ + return (a->image == b->image && + a->x == b->x && + a->y == b->y && + a->w == b->w && + a->h == b->h); +} + +static Image * +load_image (mng_handle hMNG, + GHashTable *images, + guint *next_id, + const gchar *filename, + gboolean visible) +{ + Image *image = g_hash_table_lookup (images, filename); + + if (! image) + { + GError *error = NULL; + gint width = 0; + gint height = 0; + guint id = *next_id; + + if (! mng_put_image (hMNG, + id, filename, visible, &width, &height, &error)) + { + g_warning ("%s\n", error->message); + g_error_free (error); + return FALSE; + } + + image = g_new0 (Image, 1); + image->id = id; + image->width = width; + image->height = height; + + g_hash_table_insert (images, (gpointer) filename, image); + *next_id = id + 1; + } + + return image; +} + +static guint +load_window (mng_handle hMNG, + GHashTable *windows, + guint *next_id, + Image *image, + BWindow *window) +{ + Window win = { image->id, + window->src_x, + window->src_y, + window->rect.w, + window->rect.h }; + + guint id = GPOINTER_TO_UINT (g_hash_table_lookup (windows, &win)); + + if (! id) + { + if (win.x == 0 && + win.y == 0 && + win.w == image->width && + win.h == image->height) + { + id = image->id; + } + else + { + id = *next_id; + *next_id = id + 1; + + mng_putchunk_defi (hMNG, + id, + MNG_DONOTSHOW_NOTVISIBLE, + MNG_ABSTRACT, + MNG_FALSE, 0, 0, + MNG_FALSE, 0, 0, 0, 0); + + mng_putchunk_basi (hMNG, + win.w, win.h, + MNG_BITDEPTH_8, + MNG_COLORTYPE_RGBA, + MNG_COMPRESSION_DEFLATE, + MNG_FILTER_ADAPTIVE, + MNG_INTERLACE_NONE, + 0x0, 0x0, 0x0, 0x0, + MNG_VIEWABLE); + + mng_putchunk_iend (hMNG); + + mng_putchunk_past (hMNG, + id, + MNG_TARGET_ABSOLUTE, 0, 0, + 1); + mng_putchunk_past_src (hMNG, + 0, + image->id, + MNG_COMPOSITE_REPLACE, + MNG_ORIENTATION_SAME, + MNG_OFFSET_ABSOLUTE, - win.x, - win.y, + MNG_BOUNDARY_ABSOLUTE, 0, win.w, 0, win.h); + } + + g_hash_table_insert (windows, + g_memdup (&win, sizeof (Window)), + GUINT_TO_POINTER (id)); + } + + return id; +} + +static void +mng_load_theme_frame (mng_handle hMNG, + BTheme *theme, + GHashTable *images, + GHashTable *windows, + guint *next_id, + const guchar *frame_data) +{ + GList *list; + + for (list = theme->overlays; list; list = list->next) + { + BOverlay *overlay = list->data; + + if (overlay->image) + { + GList *iter; + Image *image; + guint value; + + image = load_image (hMNG, images, next_id, overlay->image, FALSE); + + for (iter = overlay->windows; iter; iter = iter->next) + { + BWindow *window = iter->data; + + value = frame_data[window->column + + window->row * theme->columns]; + + if (value) + { + window += (value * theme->maxval) / 256; + + load_window (hMNG, windows, next_id, image, window); + } + } + } + } +} + +static void +mng_put_window (mng_handle hMNG, + guint id, + gint x, + gint y, + gint repeat, + gint dx, + gint dy) +{ + mng_putchunk_move (hMNG, id, id, MNG_LOCATION_ABSOLUTE, x, y); + mng_putchunk_show (hMNG, MNG_FALSE, id, id, MNG_SHOWMODE_0); + + switch (repeat) + { + case 0: + return; + case 1: + break; + default: + mng_putchunk_loop (hMNG, 0, repeat, + MNG_TERMINATION_DETERMINISTIC_C, + 0, 0, 0, MNG_NULL); + break; + } + + mng_putchunk_move (hMNG, id, id, MNG_LOCATION_RELATIVE, dx, dy); + mng_putchunk_show (hMNG, MNG_FALSE, id, id, MNG_SHOWMODE_0); + + if (repeat > 1) + mng_putchunk_endl (hMNG, 0); +} + +static void +mng_put_theme_frame (mng_handle hMNG, + BTheme *theme, + GHashTable *images, + GHashTable *windows, + const guchar *frame_data, + BRectangle *clip) +{ + GList *list; + GList *iter; + + for (list = theme->overlays; list; list = list->next) + { + BOverlay *overlay = list->data; + Image *image = NULL; + Window last_win = { 0, 0, 0, 0, 0 }; + gint x = 0; + gint y = 0; + gint dx = 0; + gint dy = 0; + gint repeat = 0; + guint id; + + if (overlay->image) + image = g_hash_table_lookup (images, overlay->image); + + if (! image) + continue; + + for (iter = overlay->windows; iter; iter = iter->next) + { + BWindow *window = iter->data; + guint value = frame_data[window->column + + window->row * theme->columns]; + + window += (value * theme->maxval) / 256; + + if (value) + { + Window win = { image->id, + window->src_x, window->src_y, + window->rect.w, window->rect.h }; + + if (clip && ! b_rectangle_intersect (&window->rect, clip, NULL)) + continue; + + if (window_equal (&win, &last_win)) + { + if (repeat) + { + if ((window->rect.x - x == (repeat + 1) * dx) && + (window->rect.y - y == (repeat + 1) * dy)) + { + repeat++; + continue; + } + } + else + { + dx = window->rect.x - x; + dy = window->rect.y - y; + + repeat++; + continue; + } + } + + if (last_win.image) + { + id = GPOINTER_TO_UINT (g_hash_table_lookup (windows, + &last_win)); + mng_put_window (hMNG, id, x, y, repeat, dx, dy); + + repeat = 0; + } + + memcpy (&last_win, &win, sizeof (Window)); + + x = window->rect.x; + y = window->rect.y; + } + } + + if (last_win.image) + { + id = GPOINTER_TO_UINT (g_hash_table_lookup (windows, &last_win)); + mng_put_window (hMNG, id, x, y, repeat, dx, dy); + } + } +} + +static void +b_movie_write_themed_mng (BMovie *movie, + BTheme *theme, + gint loops, + mng_handle hMNG) +{ + GHashTable *images; + GHashTable *windows; + GList *list; + BMovieFrame *frame; + BRectangle prev_clip = { 0, 0, theme->width, theme->height }; + guint8 mandatory = MNG_BACKGROUNDCOLOR_MANDATORY; + guint id = 0; + guint next_id = 1; + + images = g_hash_table_new (g_str_hash, g_str_equal); + + if (theme->bg_image) + { + Image *image = load_image (hMNG, + images, &next_id, theme->bg_image, TRUE); + if (image) + { + id = image->id; + mandatory |= MNG_BACKGROUNDIMAGE_MANDATORY; + } + } + + if (mng_putchunk_back (hMNG, + ((theme->bg_color.r << 8) | theme->bg_color.r), + ((theme->bg_color.g << 8) | theme->bg_color.g), + ((theme->bg_color.b << 8) | theme->bg_color.b), + mandatory, id, MNG_BACKGROUNDIMAGE_NOTILE)) + g_warning ("mng_putchunk_back() failed"); + + windows = g_hash_table_new ((GHashFunc) window_hash, + (GEqualFunc) window_equal); + + for (list = movie->frames; list; list = list->next) + { + frame = list->data; + + mng_load_theme_frame (hMNG, + theme, images, windows, &next_id, frame->data); + } + + mng_put_loop (hMNG, loops); + + list = movie->frames; + frame = list->data; + + mng_putchunk_fram (hMNG, + MNG_FALSE, + MNG_FRAMINGMODE_4, + 0, MNG_NULL, + MNG_CHANGEDELAY_DEFAULT, + MNG_CHANGETIMOUT_NO, + MNG_CHANGECLIPPING_NO, + MNG_CHANGESYNCID_NO, + frame->duration, 0, + MNG_BOUNDARY_ABSOLUTE, 0, 0, 0, 0, + 0, 0); + mng_put_theme_frame (hMNG, theme, images, windows, frame->data, NULL); + + for (list = list->next; list; list = list->next) + { + BMovieFrame *prev_frame; + BRectangle clip; + gboolean delay_changed; + gboolean clip_changed; + + prev_frame = list->prev->data; + frame = list->data; + + b_theme_frame_diff_boundary (theme, + prev_frame->data, frame->data, &clip); + + delay_changed = prev_frame->duration != frame->duration; + clip_changed = (clip.x != prev_clip.x || clip.y != prev_clip.y || + clip.w != prev_clip.w || clip.h != prev_clip.h); + + mng_putchunk_fram (hMNG, + !delay_changed && !clip_changed, + MNG_FRAMINGMODE_NOCHANGE, + 0, MNG_NULL, + (delay_changed ? + MNG_CHANGEDELAY_DEFAULT : MNG_CHANGEDELAY_NO), + MNG_CHANGETIMOUT_NO, + (clip_changed ? + MNG_CHANGECLIPPING_DEFAULT : MNG_CHANGECLIPPING_NO), + MNG_CHANGESYNCID_NO, + frame->duration, 0, + MNG_BOUNDARY_ABSOLUTE, + clip.x, clip.x + clip.w, clip.y, clip.y + clip.h, + 0, 0); + mng_put_theme_frame (hMNG, theme, images, windows, frame->data, &clip); + + prev_clip = clip; + } +} + +gboolean +b_movie_save_as_mng (BMovie *movie, + BTheme *theme, + FILE *stream, + gint loops, + GError **error) +{ + mng_handle hMNG; + UserData data; + + g_return_val_if_fail (B_IS_MOVIE (movie), FALSE); + g_return_val_if_fail (theme == NULL || B_IS_THEME (theme), FALSE); + g_return_val_if_fail (stream != NULL, FALSE); + g_return_val_if_fail (error == NULL || *error == NULL, FALSE); + + if (theme && theme->channels != 1) + { + g_set_error (error, 0, 0, + "Sorry, themes with channel != 1 are not (yet) supported."); + return FALSE; + } + + if (theme && + (movie->width != theme->columns || movie->height != theme->rows)) + { + g_set_error (error, 0, 0, + "Movie and theme dimensions do not match."); + return FALSE; + } + + data.stream = stream; + + hMNG = mng_initialize ((mng_ptr) &data, mng_cb_alloc, mng_cb_free, MNG_NULL); + if (! hMNG) + goto error; + + if (mng_setcb_openstream (hMNG, mng_cb_openstream) || + mng_setcb_closestream (hMNG, mng_cb_closestream) || + mng_setcb_writedata (hMNG, mng_cb_writedata)) + goto error; + + if (mng_create (hMNG)) + goto error; + + b_movie_mng_header (movie, theme, hMNG); + + if (movie->frames) + { + if (theme) + b_movie_write_themed_mng (movie, theme, loops, hMNG); + else + b_movie_write_simple_mng (movie, loops, hMNG); + } + + if (mng_putchunk_mend (hMNG)) + goto error; + + if (mng_write (hMNG)) + goto error; + + mng_cleanup (&hMNG); + + return TRUE; + + error: + g_set_error (error, 0, 0, "Unexpected problems creating the MNG."); + return FALSE; +} diff --git a/blinkentools-2.9/src/bmovie-mng.h b/blinkentools-2.9/src/bmovie-mng.h new file mode 100644 index 0000000..89f7584 --- /dev/null +++ b/blinkentools-2.9/src/bmovie-mng.h @@ -0,0 +1,30 @@ +/* b2mng + * Creates MNG animations from Blinkenlights movies. + * + * Copyright (C) 2002-2004 Sven Neumann + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __B_MOVIE_MNG_H__ +#define __B_MOVIE_MNG_H__ + +gboolean b_movie_save_as_mng (BMovie *movie, + BTheme *theme, + FILE *stream, + gint loops, + GError **error); + +#endif /* __BLUTILS_H__ */ diff --git a/blinkentools-2.9/src/bmultiplexer.c b/blinkentools-2.9/src/bmultiplexer.c new file mode 100644 index 0000000..0d51d0c --- /dev/null +++ b/blinkentools-2.9/src/bmultiplexer.c @@ -0,0 +1,128 @@ +/* bmultiplex - receive udp packets and forward them to multiple hosts + * + * Copyright (C) 2002 The Blinkenlights Crew + * Daniel Mack + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include +#include + +#include "blib/blib.h" + +#define HASH 0 + +static gint width = -1; +static gint height = -1; +static gint channels = -1; +static gint maxval = -1; + + +static gboolean +callback (BReceiver *rec, + BPacket *packet, + gpointer callback_data) +{ + BSender *sender = B_SENDER (callback_data); + + if (packet->header.mcu_frame_h.width != width || + packet->header.mcu_frame_h.height != height || + packet->header.mcu_frame_h.channels != channels || + packet->header.mcu_frame_h.maxval != maxval) + { + width = packet->header.mcu_frame_h.width; + height = packet->header.mcu_frame_h.height; + channels = packet->header.mcu_frame_h.channels; + maxval = packet->header.mcu_frame_h.maxval; + + b_sender_configure (sender, width, height, channels, maxval); + } + +#ifdef HASH + g_print ("#"); +#endif + + b_sender_send_frame (sender, packet->data); + + return TRUE; +} + + +int +main (int argc, + char *argv[]) +{ + BSender *sender; + BReceiver *receiver; + GError *error = NULL; + gint i, port, listen_port; + gchar *colon; + GMainLoop *main_loop; + + if (argc < 3) + { + g_printerr ("bmultiplexer (%s version %s)\n\n", PACKAGE, VERSION); + g_printerr ("Usage: %s +\n", argv[0]); + return EXIT_FAILURE; + } + + b_init (); + + sender = b_sender_new (); + g_assert (sender); + + receiver = b_receiver_new (callback, sender); + + if (!b_parse_int (argv[1], &listen_port)) + { + g_printerr ("Invalid listen port: '%s'\n", argv[1]); + return EXIT_FAILURE; + } + + if (!b_receiver_listen (receiver, listen_port)) + { + g_printerr ("Unable to make receiver listen on port %d!\n", listen_port); + return EXIT_FAILURE; + } + + for (i = 2; i < argc; i++) + { + port = MCU_LISTENER_PORT; + + if ((colon = strchr (argv[i], ':')) != NULL) + { + *colon = '\0'; + colon++; + b_parse_int (colon, &port); + } + if (!b_sender_add_recipient (sender, -1, argv[i], port, &error)) + { + g_printerr (error->message); + return EXIT_FAILURE; + } + } + + g_print ("Waiting for udp packets arriving on port %d ...\n", listen_port); + + main_loop = g_main_loop_new (NULL, FALSE); + g_main_loop_run (main_loop); + + g_object_unref (sender); + + return EXIT_SUCCESS; +} diff --git a/blinkentools-2.9/src/bplay.c b/blinkentools-2.9/src/bplay.c new file mode 100644 index 0000000..820fa9c --- /dev/null +++ b/blinkentools-2.9/src/bplay.c @@ -0,0 +1,235 @@ +/* bplay - plays Blinkenlights movie files on the console + * + * Copyright (c) 2001-2003 Sven Neumann + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include +#include + +#include + +#ifdef HAVE_GETOPT_LONG +#define _GNU_SOURCE +#include +#endif + +#include +#include + +#ifndef G_OS_WIN32 +#include +#endif + +#ifdef HAVE_GETOPT_LONG +static const struct option options[] = +{ + { "loop", no_argument, NULL, 'l' }, + { "help", no_argument, NULL, '?' }, + { "version", no_argument, NULL, 'V' }, + { NULL, 0, NULL, 0 } +}; +#endif + +static const gchar *option_str = "l?V"; + +static GMainLoop *main_loop = NULL; + + +static void +usage (const gchar *name) +{ + g_printerr ("bplay - plays Blinkenlights movies on the text console.\n"); + g_printerr ("Check http://www.blinkenlights.de/ for more information.\n\n"); + g_printerr ("Usage: %s [options] \n", + name); + g_printerr ("Options:\n"); + g_printerr (" -l, --loop repeat the movie in an endless loop\n"); + g_printerr (" -?, --help output usage information\n"); + g_printerr (" -V, --version output version information\n"); + g_printerr ("\n"); + +#ifndef HAVE_GETOPT_LONG + g_printerr ("This version of bplay was compiled without support for long command-line\n"); + g_printerr ("options. Only the short, one-letter options will work.\n\n"); +#endif +} + +static gboolean +paint (BModule *module, + guchar *buffer, + gpointer data) +{ + b_view_aa_update (B_VIEW_AA (data), buffer); + + return TRUE; +} + +#ifndef G_OS_WIN32 +static void +sigint_handler (gint signum) +{ + sigset_t sigset; + + sigemptyset (&sigset); + sigprocmask (SIG_SETMASK, &sigset, NULL); + + if (main_loop) + g_main_loop_quit (main_loop); +} +#endif + +int +main (int argc, + char *argv[]) +{ + BModule *module; + BMovie *movie; + BViewAA *view; + aa_context *context; + const gchar *filename; + GError *error = NULL; + gboolean loop = FALSE; + gint c; + + b_init (); + +#ifdef HAVE_GETOPT_LONG + while ((c = getopt_long (argc, argv, option_str, options, NULL)) >= 0) +#else + while ((c = getopt (argc, argv, option_str)) >= 0) +#endif + { + switch (c) + { + case 'l': + loop = TRUE; + break; + + case '?': + usage (argv[0]); + return EXIT_SUCCESS; + + case 'V': + g_printerr ("bplay (%s version %s)\n", PACKAGE, VERSION); + return EXIT_SUCCESS; + + default: + usage (argv[0]); + return EXIT_FAILURE; + } + } + + if (argc - optind < 1) + { + usage (argv[0]); + return EXIT_FAILURE; + } + + filename = argv[optind]; + + if (strcmp (filename, "-") == 0) + { + filename = ""; + movie = b_movie_new_from_fd (0, &error); + } + else + { + movie = b_movie_new_from_file (filename, FALSE, &error); + } + + if (!movie) + { + g_printerr ("Error opening '%s': %s\n", filename, error->message); + return EXIT_FAILURE; + } + + context = aa_autoinit (&aa_defparams); + if (!context) + { + g_printerr ("Error creating an aalib context\n"); + return EXIT_FAILURE; + } + + aa_hidecursor (context); + aa_autoinitkbd (context, 0); + aa_resizehandler (context, (void *) aa_resize); + + view = b_view_aa_new (context, + movie->height, movie->width, movie->channels, &error); + if (!context) + { + g_printerr ("%s\n", error->message); + return EXIT_FAILURE; + } + + module = b_module_new (B_TYPE_MOVIE_PLAYER, + movie->width, movie->height, NULL, + paint, view, + &error); + + if (!module) + { + g_printerr ("%s\n", error->message); + return EXIT_FAILURE; + } + + g_object_set (module, "movie", filename, NULL); + + /* hack! there should be an API to do this */ + B_MOVIE_PLAYER (module)->movie = movie; + module->ready = TRUE; + + main_loop = g_main_loop_new (NULL, FALSE); + + if (loop) + { + g_signal_connect (G_OBJECT (module), "stop", + G_CALLBACK (b_module_start), + NULL); + } + else + { + g_signal_connect_swapped (G_OBJECT (module), "stop", + G_CALLBACK (g_main_loop_quit), + main_loop); + } + +#ifndef G_OS_WIN32 + { + struct sigaction sa; + + /* handle SIGINT */ + sigfillset (&sa.sa_mask); + sa.sa_handler = sigint_handler; + sa.sa_flags = SA_RESTART; + sigaction (SIGINT, &sa, NULL); + } +#endif + + b_module_start (module); + + g_main_loop_run (main_loop); + + g_main_loop_unref (main_loop); + g_object_unref (module); + aa_close (context); + g_object_unref (view); + + return EXIT_SUCCESS; +} diff --git a/blinkentools-2.9/src/bsend.c b/blinkentools-2.9/src/bsend.c new file mode 100644 index 0000000..a16c3fe --- /dev/null +++ b/blinkentools-2.9/src/bsend.c @@ -0,0 +1,263 @@ +/* bsend - plays Blinkenlights movie files over the net + * + * Copyright (c) 2001-2002 Sven Neumann + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include +#include +#include + +#ifdef HAVE_GETOPT_LONG +#define _GNU_SOURCE +#include +#endif + +#include + +#ifdef G_OS_WIN32 +#include +#endif + + +#ifdef HAVE_GETOPT_LONG +static const struct option options[] = +{ + { "host", required_argument, NULL, 'h' }, + { "port", required_argument, NULL, 'p' }, + { "loop", no_argument, NULL, 'l' }, + { "loops", required_argument, NULL, 'L' }, + { "reverse", no_argument, NULL, 'r' }, + { "speed", required_argument, NULL, 's' }, + { "verbose", no_argument, NULL, 'v' }, + { "help", no_argument, NULL, '?' }, + { "version", no_argument, NULL, 'V' }, + { NULL, 0, NULL, 0 } +}; +#endif + +static const gchar *option_str = "h:p:lL:rs:v?V"; + + +static void +usage (const gchar *name) +{ + g_printerr ("\n"); + g_printerr ("bsend - reads Blinkenlights movies and sends them over the net.\n"); + g_printerr ("Check http://www.blinkenlights.de/ for more information.\n\n"); + g_printerr ("Usage: %s [options] ...\n", + name); + g_printerr ("Options:\n"); + g_printerr (" -h, --host [:port] destination host\n"); + g_printerr (" -p, --port default destination port\n"); + g_printerr (" -r, --reverse play movie backwards\n"); + g_printerr (" -l, --loop repeat the movie in an endless loop\n"); + g_printerr (" -L, --loops repeat the movie as often as specified\n"); + g_printerr (" -s, --speed adjust movie speed\n"); + g_printerr (" -v, --verbose be verbose\n"); + g_printerr (" -?, --help output usage information\n"); + g_printerr (" -V, --version output version information\n"); + g_printerr ("\n"); + +#ifndef HAVE_GETOPT_LONG + g_printerr ("This version of bsend was compiled without support for long command-line\n"); + g_printerr ("options. Only the short, one-letter options will work.\n\n"); +#endif +} + + +int +main (int argc, + char *argv[]) +{ + BSender *sender; + BMovie *movie; + const gchar *hostname = NULL; + gint default_port = MCU_LISTENER_PORT; + GError *error = NULL; + gdouble speed = 1.0; + gint loops = 1; + gboolean reverse = FALSE; + gboolean verbose = FALSE; + gint n = 0; + gint i, c; + + b_init (); + + sender = b_sender_new (); + +#ifdef HAVE_GETOPT_LONG + while ((c = getopt_long (argc, argv, option_str, options, NULL)) >= 0) +#else + while ((c = getopt (argc, argv, option_str)) >= 0) +#endif + { + switch (c) + { + case 'h': + { + gchar *colon; + gint port = default_port; + + hostname = optarg; + + if ((colon = strchr (optarg, ':')) != NULL) + { + *colon = '\0'; + colon++; + b_parse_int (colon, &port); + } + + if (b_sender_add_recipient (sender, -1, optarg, port, &error)) + { + n++; + } + else + { + g_printerr (error->message); + return EXIT_FAILURE; + } + } + + case 'p': + b_parse_int (optarg, &default_port); + break; + + case 'l': + loops = -1; + break; + + case 'L': + b_parse_int (optarg, &loops); + break; + + case 'r': + reverse = TRUE; + break; + + case 's': + if (!b_parse_double (optarg, &speed) || speed < 0.0) + { + g_printerr ("Invalid argument (speed)\n"); + return EXIT_FAILURE; + } + break; + + case 'v': + verbose = TRUE; + break; + + case '?': + usage (argv[0]); + return EXIT_SUCCESS; + + case 'V': + g_printerr ("bsend (%s version %s)\n", PACKAGE, VERSION); + return EXIT_SUCCESS; + + default: + usage (argv[0]); + return EXIT_FAILURE; + } + } + + b_sender_set_verbose (sender, verbose); + + if (! hostname) + { + if (verbose) + g_print ("No host specified, using localhost.\n"); + + if (b_sender_add_recipient (sender, -1, + "localhost", MCU_LISTENER_PORT, NULL)) + n++; + } + + if (! n) + { + g_printerr ("All hosts failed, exiting\n"); + g_object_unref (sender); + return EXIT_FAILURE; + } + + for (n = 0; n == 0 || optind < argc; n++, optind++) + { + const gchar *filename = optind < argc ? argv[optind] : NULL; + + if ((n== 0 && ! filename) || strcmp (filename, "-") == 0) + { + movie = b_movie_new_from_fd (0, &error); + filename = ""; + } + else + { + movie = b_movie_new_from_file (filename, FALSE, &error); + } + + if (! movie) + { + g_printerr ("Error opening '%s': %s\n", filename, error->message); + g_clear_error (&error); + continue; + } + + if (reverse || speed != 1.0) + { + BEffects *effects = b_effects_new (); + + b_movie_apply_effects (movie, effects, reverse, speed); + + g_object_unref (effects); + } + + if (verbose) + g_print ("Loaded '%s' (%dx%d) channels=%d maxval=%d (%d frames, %d.%d s)\n", + movie->title ? movie->title : b_object_get_name (B_OBJECT (movie)), + movie->width, movie->height, movie->channels, movie->maxval, + movie->n_frames, + movie->duration / 1000, (movie->duration % 1000) / 10); + + b_sender_configure (sender, + movie->width, movie->height, + movie->channels, movie->maxval); + + for (i = 0; loops < 0 || i < loops; i++) + { + GList *list; + + for (list = movie->frames; list; list = list->next) + { + BMovieFrame *frame = list->data; + + b_sender_send_frame (sender, frame->data); + +#ifdef G_OS_WIN32 + Sleep (frame->duration); +#else + usleep (frame->duration * 1000); +#endif + } + } + + g_object_unref (movie); + } + + g_object_unref (sender); + + return EXIT_SUCCESS; +} diff --git a/blinkentools-2.9/src/gif-load.c b/blinkentools-2.9/src/gif-load.c new file mode 100644 index 0000000..8680eb0 --- /dev/null +++ b/blinkentools-2.9/src/gif-load.c @@ -0,0 +1,602 @@ +/* GIF loading routines stripped out of the GIF loading filter for The GIMP. + * + * Modified for blinkentools by Sven Neumann + * + * GIMP plug-in written by Adam D. Moss + * + * Based around original GIF code by David Koblas. + * + * This filter uses code taken from the "giftopnm" and "ppmtogif" programs + * which are part of the "netpbm" package. + * + * + * "The Graphics Interchange Format(c) is the Copyright property of + * CompuServe Incorporated. GIF(sm) is a Service Mark property of + * CompuServe Incorporated." + */ + +/* Copyright notice for code which this plugin was long ago derived from */ +/* +-------------------------------------------------------------------+ */ +/* | Copyright 1990, 1991, 1993, David Koblas. (koblas@netcom.com) | */ +/* | Permission to use, copy, modify, and distribute this software | */ +/* | and its documentation for any purpose and without fee is hereby | */ +/* | granted, provided that the above copyright notice appear in all | */ +/* | copies and that both that copyright notice and this permission | */ +/* | notice appear in supporting documentation. This software is | */ +/* | provided "as is" without express or implied warranty. | */ +/* +-------------------------------------------------------------------+ */ + +#include +#include +#include + +#include "gif-load.h" + + +#define MAX_LZW_BITS 12 + +#define INTERLACE 0x40 +#define LOCALCOLORMAP 0x80 +#define BitSet(byte, bit) (((byte) & (bit)) == (bit)) + +#define ReadOK(file,buffer,len) (fread(buffer, len, 1, file) != 0) +#define LM_to_uint(a,b) (((b)<<8)|(a)) + + +static int ReadColorMap (FILE *fd, + int number, + unsigned char *buffer); +static int GetDataBlock (FILE *fd, + unsigned char *buf); +static int GetCode (FILE *fd, + int code_size, + int flag); +static int LZWReadByte (FILE *fd, + int flag, + int input_code_size); + + +int +GIFDecodeHeader (FILE *fd, + int *Width, + int *Height, + int *Background, + int *colors, + unsigned char **cmap) +{ + int AspectRatio; + unsigned char buf[16]; + char version[4]; + + if (!ReadOK (fd, buf, 6)) + { + fprintf (stderr, "GIF: error reading magic number\n"); + return 0; + } + + if (strncmp ((char *) buf, "GIF", 3) != 0) + { + fprintf (stderr, "GIF: not a GIF file\n"); + return 0; + } + + strncpy (version, (char *) buf + 3, 3); + version[3] = '\0'; + + if ((strcmp (version, "87a") != 0) && (strcmp (version, "89a") != 0)) + { + fprintf (stderr, "GIF: bad version number, not '87a' or '89a'\n"); + return 0; + } + + if (!ReadOK (fd, buf, 7)) + { + fprintf (stderr, "GIF: failed to read screen descriptor\n"); + return 0; + } + + *Width = LM_to_uint (buf[0], buf[1]); + *Height = LM_to_uint (buf[2], buf[3]); + *colors = 2 << (buf[4] & 0x07); + if (Background) + *Background = buf[5]; + + AspectRatio = buf[6]; + if (AspectRatio != 0 && AspectRatio != 49) + fprintf (stderr, "GIF: warning - non-square pixels\n"); + + *cmap = NULL; + + if (BitSet (buf[4], LOCALCOLORMAP)) + { + unsigned char *colormap; + + colormap = calloc (3 * *colors, 1); + + /* Global Colormap */ + if (!ReadColorMap (fd, *colors, colormap)) + { + fprintf (stderr, "GIF: error reading global colormap\n"); + free (colormap); + return 0; + } + + *cmap = colormap; + } + + return 1; +} + +int +GIFDecodeRecordType (FILE *fd, + GIFRecordType *type) +{ + unsigned char c; + + if (!ReadOK (fd, &c, 1)) + { + fprintf (stderr, "GIF: EOF / read error on image data\n"); + return 0; + } + + switch (c) + { + case ',': + *type = IMAGE; + return 1; + + case '!': + if (!ReadOK (fd, &c, 1)) + { + fprintf (stderr, "GIF: EOF / read error on extension function code\n"); + return 0; + } + + switch (c) + { + case 0xf9: + *type = GRAPHIC_CONTROL_EXTENSION; + break; + case 0xfe: + *type = COMMENT_EXTENSION; + break; + case 0x01: /* PLAINTEXT_EXTENSION */ + case 0xff: /* APPLICATION_EXTENSION */ + *type = UNKNOWN_EXTENSION; + break; + default: + return 0; + } + + return 1; + + case ';': + *type = TERMINATOR; + return 1; + + default: + fprintf (stderr, "GIF: bogus character 0x%02x, ignoring\n", c); + return GIFDecodeRecordType (fd, type); + } + + return 0; +} + +int +GIFDecodeImage (FILE *fd, + int *Width, + int *Height, + int *offx, + int *offy, + int *colors, + unsigned char **cmap, + unsigned char *data) +{ + unsigned char buf[16]; + unsigned char c; + unsigned char *dest; + int local_cmap; + int interlace; + int v; + int width, height; + int xpos = 0, ypos = 0, pass = 0; + + if (!ReadOK (fd, buf, 9)) + { + fprintf (stderr, "GIF: couldn't read image data\n"); + return 0; + } + + *colors = 0; + *cmap = NULL; + + local_cmap = BitSet (buf[8], LOCALCOLORMAP); + + if (local_cmap) + { + unsigned char *colormap; + + *colors = 2 << (buf[8] & 0x07); + colormap = calloc (3 * *colors, 1); + + if (!ReadColorMap (fd, *colors, colormap)) + { + free (colormap); + fprintf (stderr, "GIF: error reading global colormap\n"); + return 0; + } + + *cmap = colormap; + } + + *Width = width = LM_to_uint (buf[4], buf[5]); + *Height = height = LM_to_uint (buf[6], buf[7]); + *offx = LM_to_uint (buf[0], buf[1]); + *offy = LM_to_uint (buf[2], buf[3]); + + interlace = BitSet (buf[8], INTERLACE); + + if (!ReadOK (fd, &c, 1)) + { + fprintf (stderr, "GIF: EOF / read error on image data\n"); + goto error; + } + + if (LZWReadByte (fd, 1, c) < 0) + { + fprintf (stderr, "GIF: error while reading\n"); + goto error; + } + + while ((v = LZWReadByte (fd, 0, c)) >= 0) + { + dest = data + (ypos * width) + xpos; + *dest = (unsigned char) v; + + xpos++; + if (xpos == width) + { + xpos = 0; + if (interlace) + { + switch (pass) + { + case 0: + case 1: + ypos += 8; + break; + case 2: + ypos += 4; + break; + case 3: + ypos += 2; + break; + } + + if (ypos >= height) + { + pass++; + switch (pass) + { + case 1: + ypos = 4; + break; + case 2: + ypos = 2; + break; + case 3: + ypos = 1; + break; + default: + goto fini; + } + } + } + else + { + ypos++; + } + } + if (ypos >= height) + break; + } + + fini: + if (LZWReadByte (fd, 0, c) >= 0) + fprintf (stderr, "GIF: too much input data, ignoring extra...\n"); + + return 1; + + error: + if (*cmap) + free (*cmap); + *cmap = NULL; + return 0; +} + +int +GIFDecodeGraphicControlExt (FILE *fd, + GIFDisposeType *Disposal, + int *Delay, + int *Transparent) +{ + unsigned char buf[256]; + + if (GetDataBlock (fd, buf) < 4) + return 0; + + *Disposal = (buf[0] >> 2) & 0x7; + *Delay = LM_to_uint (buf[1], buf[2]); + + if ((buf[0] & 0x1) != 0) + *Transparent = buf[3]; + else + *Transparent = -1; + + while (GetDataBlock (fd, buf) > 0) + ; + + return 1; +} + +int +GIFDecodeCommentExt (FILE *fd, + char **comment) +{ + char buf[256]; + int comment_len; + int len; + + *comment = NULL; + comment_len = 0; + + while ((len = GetDataBlock (fd, (unsigned char *) buf)) > 0) + { + *comment = realloc (*comment, comment_len + len + 1); + strncpy (*comment + comment_len, buf, len); + comment_len += len; + } + + return 1; +} + +void +GIFDecodeUnknownExt (FILE *fd) +{ + char buf[256]; + + while (GetDataBlock (fd, buf) > 0) + ; +} + +static int +ReadColorMap (FILE *fd, + int number, + unsigned char *cmap) +{ + int i; + unsigned char rgb[3]; + + for (i = 0; i < number; ++i) + { + if (!ReadOK (fd, rgb, sizeof (rgb))) + { + fprintf (stderr, "GIF: bad colormap\n"); + return 0; + } + + *cmap++ = rgb[0]; + *cmap++ = rgb[1]; + *cmap++ = rgb[2]; + } + + return 1; +} + + +int ZeroDataBlock = 0; + +static int +GetDataBlock (FILE *fd, + unsigned char *buf) +{ + unsigned char count; + + if (!ReadOK (fd, &count, 1)) + { + fprintf (stderr, "GIF: error in getting DataBlock size\n"); + return -1; + } + + ZeroDataBlock = count == 0; + + if ((count != 0) && (!ReadOK (fd, buf, count))) + { + fprintf (stderr, "GIF: error in reading DataBlock\n"); + return -1; + } + + return count; +} + +static int +GetCode (FILE *fd, + int code_size, + int flag) +{ + static unsigned char buf[280]; + static int curbit, lastbit, done, last_byte; + int i, j, ret; + unsigned char count; + + if (flag) + { + curbit = 0; + lastbit = 0; + done = 0; + last_byte = 2; + return 0; + } + + if ((curbit + code_size) >= lastbit) + { + if (done) + { + if (curbit >= lastbit) + fprintf (stderr, "GIF: ran off the end of my bits\n"); + + return -1; + } + + buf[0] = buf[last_byte - 2]; + buf[1] = buf[last_byte - 1]; + + if ((count = GetDataBlock (fd, &buf[2])) <= 0) + done = 1; + + last_byte = 2 + count; + curbit = (curbit - lastbit) + 16; + lastbit = (2 + count) * 8; + } + + ret = 0; + for (i = curbit, j = 0; j < code_size; ++i, ++j) + ret |= ((buf[i / 8] & (1 << (i % 8))) != 0) << j; + + curbit += code_size; + + return ret; +} + +static int +LZWReadByte (FILE *fd, + int flag, + int input_code_size) +{ + static int fresh = 0; + int code, incode; + static int code_size, set_code_size; + static int max_code, max_code_size; + static int firstcode, oldcode; + static int clear_code, end_code; + static int table[2][(1 << MAX_LZW_BITS)]; + static int stack[(1 << (MAX_LZW_BITS)) * 2], *sp; + register int i; + + if (flag) + { + set_code_size = input_code_size; + code_size = set_code_size + 1; + clear_code = 1 << set_code_size; + end_code = clear_code + 1; + max_code_size = 2 * clear_code; + max_code = clear_code + 2; + + GetCode (fd, 0, 1); + + fresh = 1; + + for (i = 0; i < clear_code; ++i) + { + table[0][i] = 0; + table[1][i] = i; + } + for (; i < (1 << MAX_LZW_BITS); ++i) + table[0][i] = table[1][0] = 0; + + sp = stack; + + return 0; + } + else if (fresh) + { + fresh = 0; + do + { + firstcode = oldcode = + GetCode (fd, code_size, 0); + } + while (firstcode == clear_code); + return firstcode; + } + + if (sp > stack) + return *--sp; + + while ((code = GetCode (fd, code_size, 0)) >= 0) + { + if (code == clear_code) + { + for (i = 0; i < clear_code; ++i) + { + table[0][i] = 0; + table[1][i] = i; + } + for (; i < (1 << MAX_LZW_BITS); ++i) + table[0][i] = table[1][i] = 0; + code_size = set_code_size + 1; + max_code_size = 2 * clear_code; + max_code = clear_code + 2; + sp = stack; + firstcode = oldcode = + GetCode (fd, code_size, 0); + return firstcode; + } + else if (code == end_code) + { + int count; + unsigned char buf[260]; + + if (ZeroDataBlock) + return -2; + + while ((count = GetDataBlock (fd, buf)) > 0) + ; + + if (count != 0) + fprintf (stderr, + "GIF: missing EOD in data stream (common occurence)"); + return -2; + } + + incode = code; + + if (code >= max_code) + { + *sp++ = firstcode; + code = oldcode; + } + + while (code >= clear_code) + { + *sp++ = table[1][code]; + if (code == table[0][code]) + { + fprintf (stderr, "GIF: circular table entry BIG ERROR\n"); + return -2; + } + code = table[0][code]; + } + + *sp++ = firstcode = table[1][code]; + + if ((code = max_code) < (1 << MAX_LZW_BITS)) + { + table[0][code] = oldcode; + table[1][code] = firstcode; + ++max_code; + if ((max_code >= max_code_size) && + (max_code_size < (1 << MAX_LZW_BITS))) + { + max_code_size *= 2; + ++code_size; + } + } + + oldcode = incode; + + if (sp > stack) + return *--sp; + } + return code; +} diff --git a/blinkentools-2.9/src/gif-load.h b/blinkentools-2.9/src/gif-load.h new file mode 100644 index 0000000..c371951 --- /dev/null +++ b/blinkentools-2.9/src/gif-load.h @@ -0,0 +1,73 @@ +/* GIF loading routines stripped out of the GIF loading filter for The GIMP. + * + * Modified for blinkentools by Sven Neumann + * + * GIMP plug-in written by Adam D. Moss + * + * Based around original GIF code by David Koblas. + * + * This filter uses code taken from the "giftopnm" and "ppmtogif" programs + * which are part of the "netpbm" package. + * + * "The Graphics Interchange Format(c) is the Copyright property of + * CompuServe Incorporated. GIF(sm) is a Service Mark property of + * CompuServe Incorporated." + */ + +/* Copyright notice for code which this plugin was long ago derived from */ +/* +-------------------------------------------------------------------+ */ +/* | Copyright 1990, 1991, 1993, David Koblas. (koblas@netcom.com) | */ +/* | Permission to use, copy, modify, and distribute this software | */ +/* | and its documentation for any purpose and without fee is hereby | */ +/* | granted, provided that the above copyright notice appear in all | */ +/* | copies and that both that copyright notice and this permission | */ +/* | notice appear in supporting documentation. This software is | */ +/* | provided "as is" without express or implied warranty. | */ +/* +-------------------------------------------------------------------+ */ + +#ifndef __GIF_LOAD_H__ +#define __GIF_LOAD_H__ + + +typedef enum +{ + DISPOSE_UNSPECIFIED, + DISPOSE_COMBINE, + DISPOSE_REPLACE +} GIFDisposeType; + +typedef enum +{ + IMAGE, + GRAPHIC_CONTROL_EXTENSION, + COMMENT_EXTENSION, + UNKNOWN_EXTENSION, + TERMINATOR +} GIFRecordType; + +int GIFDecodeHeader (FILE *fd, + int *Width, + int *Height, + int *Background, + int *colors, + unsigned char **cmap); +int GIFDecodeRecordType (FILE *fd, + GIFRecordType *type); +int GIFDecodeImage (FILE *fd, + int *Width, + int *Height, + int *offx, + int *offy, + int *colors, + unsigned char **cmap, + unsigned char *data); +int GIFDecodeGraphicControlExt (FILE *fd, + GIFDisposeType *Disposal, + int *Delay, + int *Transparent); +int GIFDecodeCommentExt (FILE *fd, + char **comment); +void GIFDecodeUnknownExt (FILE *fd); + + +#endif /* __GIF_LOAD_H__ */ diff --git a/blinkentools-2.9/src/gif-save.c b/blinkentools-2.9/src/gif-save.c new file mode 100644 index 0000000..ffd604c --- /dev/null +++ b/blinkentools-2.9/src/gif-save.c @@ -0,0 +1,720 @@ +/* GIF savinging routines stripped out of the GIF saving filter for The GIMP. + * + * Modified for blinkentools by Sven Neumann + * + * GIMP plug-in written by Adam D. Moss + * + * Based around original GIF code by David Koblas. + * + * This filter uses code taken from the "giftopnm" and "ppmtogif" programs + * which are part of the "netpbm" package. + * + * "The Graphics Interchange Format(c) is the Copyright property of + * CompuServe Incorporated. GIF(sm) is a Service Mark property of + * CompuServe Incorporated." + */ + +/* Copyright notice for code which this plugin was long ago derived from */ +/* +-------------------------------------------------------------------+ */ +/* | Copyright 1990, 1991, 1993, David Koblas. (koblas@netcom.com) | */ +/* | Permission to use, copy, modify, and distribute this software | */ +/* | and its documentation for any purpose and without fee is hereby | */ +/* | granted, provided that the above copyright notice appear in all | */ +/* | copies and that both that copyright notice and this permission | */ +/* | notice appear in supporting documentation. This software is | */ +/* | provided "as is" without express or implied warranty. | */ +/* +-------------------------------------------------------------------+ */ + + +#include +#include +#include +#include + +#include "gif-save.h" + + +static int GIFNextPixel (void); + +/* + * a code_int must be able to hold 2**BITS values of type int, and also -1 + */ +typedef int code_int; +typedef long int count_int; + + +unsigned char *pixels; + +static void Putword (int, FILE *); +static void compress (int, FILE *); +static void output (code_int); +static void cl_block (void); +static void cl_hash (count_int); +static void writeerr (void); +static void char_init (void); +static void char_out (int); +static void flush_char (void); + + +static long CountDown; + +/* + * Return the next pixel from the image + */ +int +GIFNextPixel (void) +{ + if (CountDown == 0) + return EOF; + + --CountDown; + + return *pixels++; +} + +/* public */ + +void +GIFEncodeHeader (FILE *fp, + int gif89, + int Width, + int Height, + int Background, + int BitsPerPixel, + char *cmap) +{ + int B; + int Resolution; + int ColorMapSize; + int i; + + ColorMapSize = 1 << BitsPerPixel; + + Resolution = BitsPerPixel; + + /* + * Write the Magic header + */ + fwrite (gif89 ? "GIF89a" : "GIF87a", 1, 6, fp); + + /* + * Write out the screen width and height + */ + Putword (Width, fp); + Putword (Height, fp); + + /* + * Indicate that there is a global colour map + */ + B = 0x80; /* Yes, there is a color map */ + + /* + * OR in the resolution + */ + B |= (Resolution - 1) << 5; + + /* + * OR in the Bits per Pixel + */ + B |= (BitsPerPixel - 1); + + /* + * Write it out + */ + fputc (B, fp); + + /* + * Write out the Background colour + */ + fputc (Background, fp); + + /* + * Byte of 0's (future expansion) + */ + fputc (0, fp); + + /* + * Write out the Global Colour Map + */ + for (i = 0; i < 3 * ColorMapSize; i++) + fputc (cmap[i], fp); +} + +void +GIFEncodeGraphicControlExt (FILE *fp, + GIFDisposeType Disposal, + int Delay, + int Animation, + int Transparent) +{ + /* + * Write out extension for transparent colour index, if necessary. + */ + if ( (Transparent >= 0) || (Animation) ) + { + /* Extension Introducer - fixed. */ + fputc ('!', fp); + /* Graphic Control Label - fixed. */ + fputc (0xf9, fp); + /* Block Size - fixed. */ + fputc (4, fp); + + /* Packed Fields - XXXdddut (d=disposal, u=userInput, t=transFlag) */ + /* s8421 */ + fputc ( ((Transparent >= 0) ? 0x01 : 0x00) /* TRANSPARENCY */ + + /* DISPOSAL */ + | (Animation ? (Disposal << 2) : 0x00), + /* 0x03 or 0x01 build frames cumulatively */ + /* 0x02 clears frame before drawing */ + /* 0x00 'don't care' */ + + fp); + + fputc (Delay & 255, fp); + fputc ((Delay>>8) & 255, fp); + + fputc (Transparent, fp); + fputc (0, fp); + } +} + +void +GIFEncodeImageData (FILE *fp, + int Width, + int Height, + int BitsPerPixel, + int offset_x, + int offset_y, + char *data) +{ + int Resolution; + int ColorMapSize; + int InitCodeSize; + + ColorMapSize = 1 << BitsPerPixel; + + Resolution = BitsPerPixel; + + /* + * Calculate number of bits we are expecting + */ + CountDown = (long) Width * (long) Height; + pixels = data; + + /* + * The initial code size + */ + if (BitsPerPixel <= 1) + InitCodeSize = 2; + else + InitCodeSize = BitsPerPixel; + + /* + * Write an Image separator + */ + fputc (',', fp); + + /* + * Write the Image header + */ + Putword (offset_x, fp); + Putword (offset_y, fp); + Putword (Width, fp); + Putword (Height, fp); + + /* no interlacing */ + fputc (0x0, fp); + + /* + * Write out the initial code size + */ + fputc (InitCodeSize, fp); + + /* + * Go and actually compress the data + */ + compress (InitCodeSize + 1, fp); + + /* + * Write out a Zero-length packet (to end the series) + */ + fputc (0x0, fp); +} + +void +GIFEncodeClose (FILE *fp) +{ + /* + * Write the GIF file terminator + */ + fputc (';', fp); + + /* + * And close the file + */ + fclose (fp); +} + +void +GIFEncodeLoopExt (FILE *fp, + int num_loops) +{ + fputc(0x21,fp); + fputc(0xff,fp); + fputc(0x0b,fp); + fputs("NETSCAPE2.0",fp); + fputc(0x03,fp); + fputc(0x01,fp); + Putword(num_loops,fp); + fputc(0x00,fp); + + /* NOTE: num_loops==0 means 'loop infinitely' */ +} + + +void +GIFEncodeCommentExt (FILE *fp, + char *comment) +{ + if (!comment || !*comment) + return; + + if (strlen(comment)>240) + { + fprintf (stderr, + "GIF: warning: comment too large - comment block not written.\n"); + return; + } + + fputc(0x21,fp); + fputc(0xfe,fp); + fputc(strlen(comment),fp); + fputs((const char *)comment,fp); + fputc(0x00,fp); +} + + + +/* + * Write out a word to the GIF file + */ +static void +Putword (int w, + FILE *fp) +{ + fputc (w & 0xff, fp); + fputc ((w / 256) & 0xff, fp); +} + + +/*************************************************************************** + * + * GIFCOMPR.C - GIF Image compression routines + * + * Lempel-Ziv compression based on 'compress'. GIF modifications by + * David Rowley (mgardi@watdcsu.waterloo.edu) + * + ***************************************************************************/ + +/* + * General DEFINEs + */ + +#define GIF_BITS 12 + +#define HSIZE 5003 /* 80% occupancy */ + +#ifdef NO_UCHAR +typedef char char_type; +#else /*NO_UCHAR */ +typedef unsigned char char_type; +#endif /*NO_UCHAR */ + +/* + + * GIF Image compression - modified 'compress' + * + * Based on: compress.c - File compression ala IEEE Computer, June 1984. + * + * By Authors: Spencer W. Thomas (decvax!harpo!utah-cs!utah-gr!thomas) + * Jim McKie (decvax!mcvax!jim) + * Steve Davies (decvax!vax135!petsd!peora!srd) + * Ken Turkowski (decvax!decwrl!turtlevax!ken) + * James A. Woods (decvax!ihnp4!ames!jaw) + * Joe Orost (decvax!vax135!petsd!joe) + * + */ +#include + +#define ARGVAL() (*++(*argv) || (--argc && *++argv)) + +static int n_bits; /* number of bits/code */ +static int maxbits = GIF_BITS; /* user settable max # bits/code */ +static code_int maxcode; /* maximum code, given n_bits */ +static code_int maxmaxcode = (code_int) 1 << GIF_BITS; /* should NEVER generate this code */ +#ifdef COMPATIBLE /* But wrong! */ +#define MAXCODE(Mn_bits) ((code_int) 1 << (Mn_bits) - 1) +#else /*COMPATIBLE */ +#define MAXCODE(Mn_bits) (((code_int) 1 << (Mn_bits)) - 1) +#endif /*COMPATIBLE */ + +static count_int htab[HSIZE]; +static unsigned short codetab[HSIZE]; +#define HashTabOf(i) htab[i] +#define CodeTabOf(i) codetab[i] + +const code_int hsize = HSIZE; /* the original reason for this being + variable was "for dynamic table sizing", + but since it was never actually changed + I made it const --Adam. */ + +/* + * To save much memory, we overlay the table used by compress() with those + * used by decompress(). The tab_prefix table is the same size and type + * as the codetab. The tab_suffix table needs 2**GIF_BITS characters. We + * get this from the beginning of htab. The output stack uses the rest + * of htab, and contains characters. There is plenty of room for any + * possible stack (stack used to be 8000 characters). + */ + +#define tab_prefixof(i) CodeTabOf(i) +#define tab_suffixof(i) ((char_type*)(htab))[i] +#define de_stack ((char_type*)&tab_suffixof((code_int)1< 0) + goto probe; + nomatch: + output ((code_int) ent); + ++out_count; + ent = c; + + if (free_ent < maxmaxcode) + { + CodeTabOf (i) = free_ent++; /* code -> hashtable */ + HashTabOf (i) = fcode; + } + else + cl_block (); + } + /* + * Put out the final code. + */ + output ((code_int) ent); + ++out_count; + output ((code_int) EOFCode); +} + +/***************************************************************** + * TAG( output ) + * + * Output the given code. + * Inputs: + * code: A n_bits-bit integer. If == -1, then EOF. This assumes + * that n_bits =< (long)wordsize - 1. + * Outputs: + * Outputs code to the file. + * Assumptions: + * Chars are 8 bits long. + * Algorithm: + * Maintain a GIF_BITS character long buffer (so that 8 codes will + * fit in it exactly). Use the VAX insv instruction to insert each + * code in turn. When the buffer fills up empty it and start over. + */ + +static void +output (code_int code) +{ + cur_accum &= masks[cur_bits]; + + if (cur_bits > 0) + cur_accum |= ((long) code << cur_bits); + else + cur_accum = code; + + cur_bits += n_bits; + + while (cur_bits >= 8) + { + char_out ((unsigned int) (cur_accum & 0xff)); + cur_accum >>= 8; + cur_bits -= 8; + } + + /* + * If the next entry is going to be too big for the code size, + * then increase it, if possible. + */ + if (free_ent > maxcode || clear_flg) + { + if (clear_flg) + { + + maxcode = MAXCODE (n_bits = g_init_bits); + clear_flg = 0; + + } + else + { + + ++n_bits; + if (n_bits == maxbits) + maxcode = maxmaxcode; + else + maxcode = MAXCODE (n_bits); + } + } + + if (code == EOFCode) + { + /* + * At EOF, write the rest of the buffer. + */ + while (cur_bits > 0) + { + char_out ((unsigned int) (cur_accum & 0xff)); + cur_accum >>= 8; + cur_bits -= 8; + } + + flush_char (); + + fflush (g_outfile); + + if (ferror (g_outfile)) + writeerr (); + } +} + +/* + * Clear out the hash table + */ +static void +cl_block () /* table clear for block compress */ +{ + + cl_hash ((count_int) hsize); + free_ent = ClearCode + 2; + clear_flg = 1; + + output ((code_int) ClearCode); +} + +static void +cl_hash (register count_int hsize) /* reset code table */ +{ + + register count_int *htab_p = htab + hsize; + + register long i; + register long m1 = -1; + + i = hsize - 16; + do + { /* might use Sys V memset(3) here */ + *(htab_p - 16) = m1; + *(htab_p - 15) = m1; + *(htab_p - 14) = m1; + *(htab_p - 13) = m1; + *(htab_p - 12) = m1; + *(htab_p - 11) = m1; + *(htab_p - 10) = m1; + *(htab_p - 9) = m1; + *(htab_p - 8) = m1; + *(htab_p - 7) = m1; + *(htab_p - 6) = m1; + *(htab_p - 5) = m1; + *(htab_p - 4) = m1; + *(htab_p - 3) = m1; + *(htab_p - 2) = m1; + *(htab_p - 1) = m1; + htab_p -= 16; + } + while ((i -= 16) >= 0); + + for (i += 16; i > 0; --i) + *--htab_p = m1; +} + +static void +writeerr () +{ + fprintf (stderr, "GIF: error writing output file\n"); + return; +} + +/****************************************************************************** + * + * GIF Specific routines + * + ******************************************************************************/ + +/* + * Number of characters so far in this 'packet' + */ +static int a_count; + +/* + * Set up the 'byte output' routine + */ +static void +char_init () +{ + a_count = 0; +} + +/* + * Define the storage for the packet accumulator + */ +static char accum[256]; + +/* + * Add a character to the end of the current packet, and if it is 254 + * characters, flush the packet to disk. + */ +static void +char_out (int c) +{ + accum[a_count++] = c; + if (a_count >= 254) + flush_char (); +} + +/* + * Flush the packet to disk, and reset the accumulator + */ +static void +flush_char (void) +{ + if (a_count > 0) + { + fputc (a_count, g_outfile); + fwrite (accum, 1, a_count, g_outfile); + a_count = 0; + } +} diff --git a/blinkentools-2.9/src/gif-save.h b/blinkentools-2.9/src/gif-save.h new file mode 100644 index 0000000..335f542 --- /dev/null +++ b/blinkentools-2.9/src/gif-save.h @@ -0,0 +1,65 @@ +/* GIF savinging routines stripped out of the GIF saving filter for The GIMP. + * + * Modified for blinkentools by Sven Neumann + * + * GIMP plug-in written by Adam D. Moss + * + * Based around original GIF code by David Koblas. + * + * This filter uses code taken from the "giftopnm" and "ppmtogif" programs + * which are part of the "netpbm" package. + * + * "The Graphics Interchange Format(c) is the Copyright property of + * CompuServe Incorporated. GIF(sm) is a Service Mark property of + * CompuServe Incorporated." + */ + +/* Copyright notice for code which this plugin was long ago derived from */ +/* +-------------------------------------------------------------------+ */ +/* | Copyright 1990, 1991, 1993, David Koblas. (koblas@netcom.com) | */ +/* | Permission to use, copy, modify, and distribute this software | */ +/* | and its documentation for any purpose and without fee is hereby | */ +/* | granted, provided that the above copyright notice appear in all | */ +/* | copies and that both that copyright notice and this permission | */ +/* | notice appear in supporting documentation. This software is | */ +/* | provided "as is" without express or implied warranty. | */ +/* +-------------------------------------------------------------------+ */ + +#ifndef __GIF_SAVE_H__ +#define __GIF_SAVE_H__ + + +typedef enum +{ + DISPOSE_UNSPECIFIED, + DISPOSE_COMBINE, + DISPOSE_REPLACE +} GIFDisposeType; + +void GIFEncodeHeader (FILE *fp, + int gif89, + int Width, + int Height, + int Background, + int BitsPerPixel, + char *cmap); +void GIFEncodeGraphicControlExt (FILE *fp, + GIFDisposeType Disposal, + int Delay, + int Animation, + int Transparent); +void GIFEncodeImageData (FILE *fp, + int Width, + int Height, + int BitsPerPixel, + int offset_x, + int offset_y, + char *data); +void GIFEncodeClose (FILE *fp); +void GIFEncodeCommentExt (FILE *fp, + char *comment); +void GIFEncodeLoopExt (FILE *fp, + int num_loops); + + +#endif /* __GIF_SAVE_H__ */ diff --git a/blinkentools-2.9/src/gif2blm.c b/blinkentools-2.9/src/gif2blm.c new file mode 100644 index 0000000..6a50904 --- /dev/null +++ b/blinkentools-2.9/src/gif2blm.c @@ -0,0 +1,325 @@ +/* gif2blm.c + * Converts GIF animations to BlinkenLights movies. + * + * Copyright (C) 2001 Sven Neumann + * Enhanced by Tino Schwarze + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include +#include +#include + +#include "gif-load.h" +#include "hdl.h" + + +#ifndef FALSE +#define FALSE 0 +#define TRUE (!FALSE) +#endif + +#define DEFAULT_DELAY 10 /* 1/100 sec */ + + +int +main (int argc, + char *argv[]) +{ + FILE *gif; + GIFRecordType type; + unsigned char *image; + unsigned char *frame; + unsigned char *cmap; + char *data; + char *filename = NULL; + int i; + int help; + int version; + int width, height, colors; + int delay, transparent; + int invert = FALSE; + int hdl_mode = FALSE; + GIFDisposeType disposal; + HdlInfo hdls[LAST_IMAGE] = + { + hdl_plain, + hdl_small, + hdl_medium, + hdl_large, + hdl_huge + }; + HdlInfo *hdl = NULL; + int dx, dy; + int offx, offy; + int bl_width, bl_height; + + disposal = DISPOSE_COMBINE; + transparent = -1; + delay = DEFAULT_DELAY; + + for (i = 1, help = FALSE, version = FALSE; + i < argc && !help && !version; + i++) + { + if (strncmp (argv[i], "--", 2) == 0) + { + if (strcmp (argv[i], "--invert") == 0) + invert = TRUE; + else if (strcmp (argv[i], "--hdl") == 0) + hdl_mode = TRUE; + else if (strcmp (argv[i], "--version") == 0) + version = TRUE; + else + help = TRUE; + } + else if (!filename) + filename = argv[i]; + } + + if (version) + { + fprintf (stderr, "gif2blm version %s\n", VERSION); + return 0; + } + + if (help || !filename) + { + fprintf (stderr, "\ngif2blm creates Blinkenlights Movies from animated GIFs.\n\n"); + fprintf (stderr, "Usage: gif2blm [options] \n\n"); + fprintf (stderr, "Options:\n"); + fprintf (stderr, " --invert Invert output.\n"); + fprintf (stderr, " --hdl Use HDL images as input.\n"); + fprintf (stderr, " --help Output usage information.\n"); + fprintf (stderr, " --version Output version information.\n"); + fprintf (stderr, "\nCheck http://www.blinkenlights.de/ for more information.\n\n"); + + return (help ? 0 : -1); + } + + if (strcmp (filename, "-") == 0) + gif = stdin; + else + gif = fopen (filename, "rb"); + + if (!gif) + { + fprintf (stderr, "Error opening GIF file '%s'\n", filename); + return -1; + } + + if (!GIFDecodeHeader (gif, &width, &height, NULL, &colors, &cmap)) + return -1; + + if (hdl_mode) + { + for (i = 1; i < LAST_IMAGE; i++) + { + if ((width == hdls[i].width) && (height == hdls[i].height)) + hdl = &hdls[i]; + } + + if (hdl == NULL) + { + fprintf (stderr, + "Error: The hdl mode only understand pictures created by blm2gif.\n"); + fprintf (stderr, "The following resolutions are supported:\n"); + for (i = 1; i < LAST_IMAGE; i++) + fprintf (stderr, "%d x %d\n", hdls[i].width, hdls[i].height); + + return -1; + } + + bl_width = BLINKEN_WIDTH; + bl_height = BLINKEN_HEIGHT; + dx = hdl->dx; + dy = hdl->dy; + offx = hdl->offx; + offy = hdl->offy; + } + else + { + bl_width = width; + bl_height = height; + dx = 1; + dy = 1; + offx = 0; + offy = 0; + } + + printf ("# BlinkenLights Movie %dx%d\n", bl_width, bl_height); + + data = malloc (bl_width * bl_height); + memset (data, (invert ? '1' : '0'), bl_width * bl_height); + + image = calloc (width * height, 1); + frame = malloc (width * height); + + while (GIFDecodeRecordType (gif, &type)) + { + switch (type) + { + case GRAPHIC_CONTROL_EXTENSION: + if (!GIFDecodeGraphicControlExt (gif, + &disposal, &delay, &transparent)) + return -1; + break; + + case IMAGE: + { + unsigned char *lcmap, *effective_cmap; + unsigned char *src, *win_src; + unsigned char *img_dest; + char *dest; + unsigned char value; + unsigned char *cme; + int x, y, xw, yw; + int frame_width, frame_height; + int left, top; + int lcolors; + int trans; + int sum, count; + + if (!GIFDecodeImage (gif, + &frame_width, &frame_height, &left, &top, + &lcolors, &lcmap, frame)) + return -1; + + if (lcmap) + effective_cmap = lcmap; + else + effective_cmap = cmap; + + src = frame; + img_dest = image + top*width + left; + + /* merge last frame with new (possibly combined) frame */ + for (y = 0; y < frame_height; y++) + { + for (x = 0; x < frame_width; x++, src++) + { + value = *src; + + trans = (transparent > -1) && (value == transparent); + + switch (disposal) + { + case DISPOSE_COMBINE: + if (!trans) + img_dest[x] = value; + break; + default: + img_dest[x] = value; + break; + } + } + img_dest += width; + } + + src = image + offy*width + offx; + dest = data; + + /* now figure out the black and white patterns */ + for (y = 0; y < bl_height; y++) + { + for (x = 0; x < bl_width; x++, dest++) + { + sum = count = 0; + + win_src = src + x*dx; + + /* sum up intensities of whole window */ + for (yw = 0; yw < dy; yw++) + { + for (xw = 0; xw < dx; xw++) + { + /* only count non-transparent pixels */ + if ((transparent < 0) || (win_src[xw] != transparent)) + { + /* calc address of colormap entry */ + cme = effective_cmap + (int)win_src[xw]*3; + sum += cme[0] * 30 + cme[1] * 59 + cme[2] * 11; + count++; + } + + } + win_src += width; + } + + /* we consider all transparent as black */ + if (count == 0) + *dest = (invert ? '1' : '0' ); + else + *dest = ((sum/count/100) < 50 ? (invert ? '1' : '0') : (invert ? '0' : '1')); + + } + + src += dy * width; + } + + printf ("\n@%d\n", delay * 10); + + dest = data; + for (y = 0; y < bl_height; y++) + { + for (x = 0; x < bl_width; x++, dest++) + putchar (*dest); + putchar ('\n'); + } + + if (lcmap) + free (lcmap); + } + break; + + case COMMENT_EXTENSION: + { + char *comment; + int len; + + if (!GIFDecodeCommentExt (gif, &comment)) + return -1; + + if (comment && (len = strlen (comment)) > 0) + { + putchar ('#'); + for (i = 0; i < len; i++) + { + putchar (comment[i]); + if (comment[i] == '\n' && i+1 < len) + putchar ('#'); + } + free (comment); + putchar ('\n'); + } + } + break; + + case UNKNOWN_EXTENSION: + GIFDecodeUnknownExt (gif); + break; + + case TERMINATOR: + fclose (gif); + return 0; + } + } + + fprintf (stderr, "GIFDecodeRecordType() failed\n"); + return -1; +} diff --git a/blinkentools-2.9/src/hdl-huge.h b/blinkentools-2.9/src/hdl-huge.h new file mode 100644 index 0000000..3fa5ede --- /dev/null +++ b/blinkentools-2.9/src/hdl-huge.h @@ -0,0 +1,31378 @@ +#include "hdl.h" + +static char hdl_huge_colors[256][3] = { + { 2, 2, 3}, + { 23,119, 13}, + { 18, 86, 11}, + { 30, 42,147}, + { 31, 42,141}, + { 96, 6, 7}, + {211,181, 58}, + { 12, 16,112}, + { 9, 9, 60}, + {172,162,126}, + { 61, 8, 9}, + {201,119, 5}, + { 7, 6, 43}, + {168,117,101}, + { 41, 15, 15}, + { 50, 48, 86}, + { 41, 54,149}, + { 6, 6, 36}, + { 98, 82, 62}, + {162,136, 97}, + { 48, 39, 72}, + {107, 88, 88}, + { 29, 9, 13}, + {158,133, 99}, + { 43, 21, 44}, + { 68, 69,161}, + { 4, 2, 27}, + {178,176,150}, + {130, 98, 86}, + { 42, 34, 70}, + {154,102,103}, + { 86, 45, 37}, + {225,219,206}, + {105, 81,108}, + { 37, 30, 69}, + { 35, 19, 47}, + { 60, 71,158}, + { 22, 8, 12}, + { 87, 67,105}, + { 94, 90,170}, + { 16, 15, 14}, + {121, 55, 38}, + { 4, 2, 22}, + {132,104, 96}, + { 32, 26, 68}, + {222,200,154}, + { 32, 20, 36}, + { 27, 24, 49}, + { 54, 40, 46}, + { 17, 16, 90}, + { 15, 5, 9}, + {175,156,143}, + {174,163,148}, + {218,201,163}, + { 51, 54,155}, + { 87, 61, 80}, + { 5, 4, 18}, + { 41, 50,132}, + {106,102,171}, + { 24, 17, 47}, + {224,158,100}, + { 22, 2, 38}, + {111, 53, 31}, + { 53, 60,155}, + { 26, 22, 67}, + {166,140,104}, + {131,111,154}, + { 16, 15, 80}, + { 45, 48,152}, + { 33, 46,142}, + {246,218,141}, + { 80, 79,164}, + {117, 92,111}, + { 57, 26, 16}, + { 88, 81,167}, + { 22, 13, 28}, + {174,162,163}, + {183,176,177}, + { 4, 3, 14}, + { 99, 67, 49}, + { 30, 42,132}, + { 34,120, 26}, + {173, 21, 10}, + {118,116,180}, + { 56, 25, 43}, + {208,207,184}, + {149,128,117}, + {111, 98, 90}, + {103, 85,163}, + { 98, 98,171}, + {201,154,104}, + { 18, 2, 42}, + { 42, 24, 14}, + {160, 88, 27}, + { 10, 5, 6}, + { 16, 15, 36}, + { 49, 53,142}, + { 18, 12, 28}, + {232,205,137}, + { 20, 18, 66}, + { 95, 81,168}, + { 16, 12, 74}, + { 86, 73,157}, + { 87, 56, 66}, + { 31, 23, 24}, + { 55, 66,156}, + {149,145,194}, + {170,158,130}, + {113,110,178}, + { 14, 10, 52}, + {236,188,126}, + { 15, 9, 36}, + { 20, 88, 18}, + { 86, 19, 21}, + { 81, 91,166}, + {247,254,251}, + {206,143, 16}, + {246,250,242}, + {169,151,121}, + {102,102,170}, + { 66, 74,158}, + { 37, 50,147}, + { 3, 3, 10}, + { 87, 54, 35}, + { 14, 71, 14}, + { 40, 46,140}, + { 14, 9, 28}, + {100, 91,161}, + {209,168,108}, + { 68, 49, 64}, + { 72, 31, 36}, + {124, 26, 27}, + { 8, 10, 38}, + { 72, 62,121}, + {117, 98,157}, + { 61, 41, 64}, + {158,153,193}, + { 68, 41, 17}, + {127, 90, 54}, + { 16, 11, 70}, + { 88, 86,168}, + { 9, 14, 49}, + { 36, 29, 48}, + {107, 94,159}, + { 76, 86,164}, + { 27, 26,100}, + {168,138,142}, + {180,174,189}, + {176,169,185}, + {162,137,145}, + { 8, 10, 45}, + { 67, 55, 98}, + { 47, 45,127}, + {110, 98,169}, + { 66, 30, 66}, + { 62, 62,158}, + {138, 94, 97}, + {192,199,217}, + { 34, 30,104}, + {110,103,165}, + {202, 65, 8}, + {132,129,184}, + { 6, 2, 4}, + { 18, 9, 22}, + { 30, 15, 11}, + {221,194,132}, + { 10, 10, 28}, + {100, 57, 34}, + { 66, 32, 35}, + { 96, 86,169}, + {214,190,146}, + { 46, 40,100}, + { 45, 39, 49}, + { 70, 58, 47}, + { 37, 43,150}, + {110, 32, 38}, + {149,142,178}, + { 54, 32, 44}, + { 54, 26, 58}, + {158,131,137}, + { 12, 58, 10}, + { 96,103,204}, + { 15, 14, 62}, + { 6, 7, 22}, + {110,102,171}, + {182,176,124}, + { 66, 58,120}, + { 10, 6, 36}, + { 99, 90,171}, + {184,188,212}, + { 44, 36, 33}, + { 41, 54,140}, + { 36, 34,100}, + {200,210,212}, + {223,207,179}, + {199,148, 85}, + { 23, 87, 22}, + {112, 73,101}, + {190,174,134}, + { 29, 38,129}, + { 24, 16, 36}, + {106, 66, 80}, + { 35, 44,133}, + { 22, 15, 17}, + {214,178,119}, + { 38, 42,141}, + { 72, 29, 16}, + {100, 94,171}, + { 45, 59,152}, + { 41, 17, 36}, + { 58, 61,158}, + { 14, 10, 60}, + { 15, 10, 12}, + { 45, 48,162}, + { 29, 26, 94}, + { 9, 10, 14}, + {132, 67, 40}, + { 62, 66,161}, + {106, 93,170}, + { 5, 6, 28}, + {112, 71, 51}, + { 6, 6, 4}, + { 68, 41, 46}, + { 44, 29, 47}, + { 18, 14, 46}, + { 33, 30, 97}, + { 42, 26, 32}, + { 10, 10, 18}, + { 83, 53, 56}, + { 66, 50, 81}, + {200,129, 68}, + {218,190,122}, + {176,167,171}, + { 84, 35, 29}, + { 37, 37,124}, + { 21, 22, 93}, + {103, 98,170}, + {114, 66, 31}, + { 39, 50,139}, + { 14, 9, 22}, + {112,106,177}, + { 29, 16, 25}, + {126, 90, 98}, + { 9, 10, 54}, + { 68, 80,161}, + { 62, 54,119}, + { 10, 10, 7}, + {128,114,207}, + { 74, 74,163}, + {101, 44, 29}, + {141,123,111}, + { 72, 50, 40}, + {136,137,227}, + { 57, 34, 61}, + { 14, 15, 48}, + {255,255,255} + }; +static char hdl_huge_on[] = { + 213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, + 213,213,213,68,213,213,68,213,213,68,213,68,68,213,68,68, + 68,68,68,68,68,68,68,68,68,68,125,68,68,68,68,68, + 68,68,125,68,68,125,68,68,125,68,68,68,68,68,68,68, + 68,68,68,125,68,68,213,213,174,121,213,174,213,213,213,213, + 213,213,213,213,213,213,174,213,213,213,213,213,213,213,174,213, + 213,213,213,174,213,152,213,205,205,213,213,213,205,213,68,174, + 213,205,68,205,68,125,213,68,125,213,125,213,125,213,68,125, + 174,213,125,213,174,125,68,125,125,174,174,213,125,68,125,125, + 125,68,125,174,68,125,125,125,68,174,205,174,205,68,205,125, + 68,68,68,205,125,68,68,205,213,68,125,68,125,125,125,68, + 205,205,205,174,125,174,205,125,174,205,125,205,125,205,125,125, + 205,205,125,125,125,205,125,125,125,125,125,125,4,205,202,205, + 202,205,205,205,125,202,205,205,152,205,202,205,202,202,125,202, + 205,202,202,234,205,205,202,205,202,234,125,205,202,234,205,205, + 205,202,205,202,234,202,234,202,205,234,205,202,80,69,205,80, + 202,205,80,80,205,205,202,80,205,80,205,80,80,234,234,205, + 4,145,80,205,80,202,69,80,205,69,80,80,80,199,234,234, + 80,80,202,80,205,80,80,4,80,199,80,80,80,80,80,80, + 80,80,80,80,80,80,80,80,80,202,80,80,80,80,80,80, + 80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80, + 80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80, + 80,80,80,80,80,69,80,80,80,80,80,80,80,80,80,80, + 80,80,80,80,4,80,80,4,80,80,80,80,80,80,80,80, + 80,80,69,80,69,80,69,80,69,80,80,69,80,69,80,80, + 80,80,80,69,69,80,69,80,69,80,69,80,202,69,202,202, + 202,80,69,202,202,69,202,202,202,69,202,202,238,202,69,69, + 238,69,202,238,238,238,238,238,202,121,202,238,57,69,69,191, + 69,69,191,69,191,69,191,69,191,80,238,202,69,202,202,238, + 238,69,238,69,69,69,69,80,69,69,69,69,69,69,80,69, + 69,69,69,69,69,69,69,69,69,69,69,69,80,69,69,69, + 69,69,69,69,69,69,80,69,69,69,69,69,80,69,69,69, + 3,3,69,3,69,3,69,80,69,3,80,69,3,3,3,3, + 3,3,3,3,3,3,199,3,3,3,3,3,3,3,3,3, + 3,3,199,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4, + 213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, + 213,68,68,213,213,68,213,213,125,213,125,213,213,125,213,213, + 125,174,213,125,213,174,174,174,174,174,68,213,125,68,213,121, + 68,68,213,174,125,213,125,68,68,68,68,68,96,54,96,68, + 68,68,68,68,213,125,174,213,121,213,213,16,213,16,213,213, + 213,213,213,213,174,213,213,174,213,213,213,213,213,213,213,174, + 213,174,213,213,213,174,213,213,213,68,205,68,68,213,205,213, + 68,68,213,68,213,68,213,174,68,213,174,125,213,125,174,68, + 68,68,174,125,213,125,213,174,68,68,68,125,68,174,68,68, + 68,125,68,125,125,174,213,205,205,68,68,68,68,205,68,68, + 125,125,125,68,68,205,125,68,125,125,68,125,125,68,125,205, + 68,125,125,125,205,125,125,205,205,125,205,125,205,125,125,125, + 125,125,125,125,205,125,205,205,69,125,125,205,125,125,125,202, + 152,202,125,125,205,205,205,205,205,234,202,205,205,202,205,202, + 125,205,205,125,202,205,202,205,205,205,202,80,205,125,202,202, + 202,205,80,205,202,205,202,202,80,202,80,205,202,202,80,202, + 202,205,202,202,202,205,80,205,234,202,80,234,205,4,80,4, + 4,235,80,205,80,80,80,80,202,80,205,80,205,80,69,69, + 205,80,80,234,80,234,234,4,234,4,199,80,80,80,80,80, + 80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80, + 80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80, + 202,205,80,202,80,80,80,80,80,80,80,80,80,80,80,80, + 80,80,80,80,80,80,80,80,80,205,80,205,80,202,125,80, + 125,80,202,205,80,202,202,205,80,80,205,80,80,4,80,4, + 80,4,80,80,80,80,80,80,80,80,69,69,80,69,69,69, + 69,80,121,80,80,69,80,202,80,202,69,202,202,202,202,69, + 202,202,202,202,202,202,238,202,238,238,238,238,202,238,202,69, + 202,121,57,202,69,238,202,121,238,238,69,57,69,191,69,57, + 238,238,69,57,69,238,202,238,238,238,69,238,202,121,238,69, + 238,69,69,121,69,69,69,69,121,69,69,69,69,69,69,69, + 69,69,69,69,69,69,69,69,69,80,69,69,69,69,69,69, + 69,69,69,69,69,69,69,80,69,69,3,69,69,69,69,80, + 69,80,69,80,69,3,69,3,69,3,69,80,3,80,3,3, + 80,3,3,3,3,3,3,3,3,199,3,3,3,3,3,3, + 3,3,199,3,3,3,3,199,3,3,3,3,3,3,3,3, + 3,3,3,3,3,69,3,69,3,3,69,4,3,69,69,69, + 213,213,213,213,213,213,213,213,213,213,213,68,213,68,213,68, + 213,213,213,68,174,213,68,213,213,213,174,213,125,213,125,213, + 213,213,125,213,213,68,213,213,213,68,125,213,68,125,213,68, + 68,121,68,213,68,121,213,68,125,68,96,68,68,68,68,68, + 68,68,68,125,213,213,68,213,213,125,213,16,213,54,213,213, + 213,213,213,213,213,213,213,213,174,213,213,68,213,213,213,213, + 213,213,205,213,213,68,68,125,213,68,213,213,68,68,213,68, + 174,68,68,125,68,125,213,68,68,68,213,68,121,213,213,125, + 213,68,205,213,174,125,68,125,213,125,68,125,68,125,125,68, + 125,68,205,68,68,205,68,68,125,125,125,125,68,125,125,68, + 68,68,125,125,68,68,125,68,125,125,68,205,205,205,68,205, + 125,125,68,125,205,68,125,68,205,125,125,125,125,125,125,125, + 125,125,4,125,125,125,125,125,205,205,125,205,125,4,125,125, + 125,80,205,125,202,152,80,205,125,205,205,152,205,205,152,80, + 205,202,80,205,125,202,205,202,125,202,152,80,80,202,234,205, + 234,205,205,202,80,80,202,234,80,205,202,234,202,234,205,234, + 80,202,234,205,80,202,80,202,202,234,202,80,205,202,205,80, + 80,235,202,80,205,80,205,80,80,202,80,202,202,80,80,80, + 202,202,202,205,80,80,205,69,80,80,80,202,80,80,80,80, + 80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80, + 80,80,80,80,80,80,80,80,80,80,80,80,171,80,202,80, + 202,202,80,205,205,80,205,80,205,80,205,80,125,80,205,205, + 202,125,80,202,80,202,202,202,202,202,202,202,80,80,202,80, + 80,80,202,80,202,80,80,80,202,80,205,202,125,80,205,202, + 202,80,202,80,69,69,69,202,69,80,80,202,80,80,80,80, + 238,80,80,238,80,202,202,69,202,202,238,202,69,238,202,238, + 238,69,238,238,238,80,238,80,69,202,69,238,69,57,121,238, + 202,238,121,238,202,238,202,238,69,57,238,69,57,69,57,69, + 69,57,69,238,57,69,238,202,238,238,238,121,202,238,69,69, + 57,69,69,69,238,69,69,191,69,69,69,69,69,69,69,69, + 69,69,69,69,69,69,69,69,3,69,69,80,69,69,80,69, + 69,69,69,69,69,3,69,69,69,80,69,3,69,3,3,69, + 3,69,3,69,80,69,80,69,3,69,3,69,3,80,3,3, + 3,80,3,3,3,3,3,3,3,199,3,199,3,3,3,3, + 3,3,3,3,3,3,3,3,3,199,3,3,3,199,3,3, + 3,3,3,69,3,4,3,69,4,3,69,4,3,3,3,69, + 213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, + 213,121,213,213,213,125,213,213,174,213,213,213,213,213,174,213, + 125,213,68,213,125,213,68,125,213,174,68,68,213,68,68,68, + 68,68,213,125,68,213,125,213,68,68,68,16,16,54,68,68, + 125,68,213,68,68,125,68,205,68,68,125,68,96,54,16,213, + 174,213,213,213,213,213,213,213,213,213,68,213,213,68,68,213, + 152,213,213,205,68,68,213,213,68,213,68,174,68,213,205,68, + 213,68,213,68,213,68,68,213,125,213,125,68,68,68,125,213, + 125,68,68,205,68,68,68,68,125,68,174,68,68,68,174,68, + 68,125,68,125,125,68,125,125,205,68,205,68,68,205,68,125, + 125,125,68,68,205,205,68,125,68,205,125,68,152,68,125,125, + 68,205,205,152,68,205,205,205,125,205,125,125,125,125,125,125, + 125,125,125,125,125,125,125,205,125,125,125,125,205,125,125,125, + 4,152,125,205,125,205,205,125,205,205,125,205,202,125,205,205, + 125,205,202,205,80,152,125,205,80,205,80,152,205,205,125,80, + 125,205,80,205,202,205,205,202,202,202,202,205,202,205,80,125, + 234,202,202,80,205,234,202,80,205,202,202,202,80,202,205,205, + 80,99,202,202,80,202,80,80,202,80,202,80,80,202,80,202, + 80,80,202,80,202,202,80,199,202,205,202,80,80,202,80,202, + 80,80,80,171,80,202,80,80,80,171,80,202,80,202,80,202, + 80,202,202,202,80,202,80,80,171,80,202,80,80,80,202,80, + 202,202,202,202,80,202,80,202,80,202,80,202,80,80,80,202, + 80,80,80,202,202,80,80,202,80,202,80,80,202,205,202,202, + 202,202,80,125,80,202,202,202,202,80,202,80,80,80,202,202, + 202,202,202,202,80,80,80,202,202,80,238,80,238,80,238,80, + 69,80,202,80,238,202,202,202,202,69,202,238,80,202,69,202, + 202,238,202,69,202,238,69,57,69,57,202,69,238,202,202,69, + 238,202,238,202,238,238,238,69,238,238,69,57,238,238,202,57, + 69,57,69,69,238,238,202,238,69,238,69,238,238,69,238,238, + 238,69,191,69,69,238,69,69,69,69,121,69,69,121,69,69, + 121,69,69,69,69,69,69,69,69,69,69,3,69,69,69,69, + 69,69,69,69,69,69,80,69,69,69,69,80,69,69,3,80, + 69,80,69,3,69,3,69,3,3,69,3,69,3,3,80,3, + 3,3,80,3,3,3,3,3,3,3,199,3,3,3,3,199, + 3,3,3,3,199,3,3,3,3,3,3,199,3,3,3,3, + 3,3,3,3,80,3,4,4,4,4,3,69,4,4,4,3, + 213,213,213,213,213,213,213,213,213,213,68,213,213,174,213,174, + 213,213,68,213,213,68,213,68,174,205,213,205,68,213,125,213, + 68,174,68,68,213,68,213,68,213,213,125,68,68,68,174,68, + 68,125,213,68,68,68,125,68,125,68,68,68,54,68,68,68, + 213,125,68,68,68,213,68,68,174,68,68,213,68,68,96,213, + 213,213,213,213,213,213,213,213,213,213,125,213,213,213,213,213, + 174,213,213,174,213,205,68,205,68,205,213,68,205,213,213,205, + 213,125,213,125,68,125,68,68,68,68,213,68,68,68,125,68, + 205,174,68,68,174,205,68,68,174,68,125,174,125,68,125,68, + 125,68,68,68,125,68,68,68,68,68,125,68,68,125,205,68, + 68,125,68,68,68,152,68,152,125,68,68,125,125,68,152,205, + 125,68,205,205,68,152,125,68,125,205,125,125,125,125,125,125, + 125,125,125,125,125,125,125,125,125,4,125,125,125,205,205,125, + 125,69,202,205,125,125,205,125,125,205,125,125,205,125,125,202, + 205,152,202,205,205,80,205,205,205,152,4,80,205,80,205,205, + 80,152,205,202,202,202,202,202,202,202,205,202,202,202,234,80, + 205,202,202,202,202,205,202,205,80,202,234,205,202,80,202,202, + 202,235,205,202,234,234,205,202,202,202,202,202,202,202,202,202, + 202,80,202,202,202,234,205,80,80,80,202,202,80,202,234,202, + 202,202,202,80,202,171,80,202,202,202,80,80,80,171,80,202, + 80,80,80,171,202,80,80,202,80,80,202,202,80,202,202,80, + 202,80,80,202,80,202,80,202,80,202,80,202,202,202,202,202, + 202,202,202,80,202,202,80,202,202,202,202,202,202,202,80,202, + 202,202,80,202,80,80,80,202,80,202,202,202,202,202,202,69, + 202,202,202,125,202,202,202,202,80,202,80,69,202,202,80,69, + 202,238,80,202,80,238,80,238,69,202,80,238,202,238,238,202, + 202,69,202,238,202,69,202,238,202,238,69,202,238,238,57,238, + 238,69,238,238,238,238,238,238,238,238,238,202,238,238,238,238, + 238,238,191,202,238,238,238,238,202,238,202,238,238,69,202,121, + 238,69,69,238,69,191,69,191,69,238,69,69,121,69,69,69, + 69,121,69,69,69,69,69,69,69,80,69,69,69,69,69,69, + 69,69,69,69,80,69,69,80,69,69,3,69,69,80,3,69, + 3,80,3,69,80,69,80,69,80,3,3,69,80,3,3,3, + 80,3,3,3,3,3,3,3,3,3,3,3,3,3,199,3, + 3,3,3,3,3,3,199,3,3,3,3,3,3,3,3,80, + 3,80,3,3,80,3,4,69,4,4,4,69,3,69,4,4, + 213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, + 213,125,213,213,68,213,68,213,213,213,68,213,213,68,213,68, + 213,68,213,68,68,68,68,68,68,213,68,68,174,68,68,174, + 213,68,68,174,68,68,68,68,68,68,68,54,68,96,16,68, + 68,68,68,68,68,125,68,68,68,68,68,96,54,54,68,54, + 68,213,213,213,213,213,213,213,213,213,213,68,68,68,213,152, + 213,213,68,213,213,213,213,213,213,213,68,213,213,68,68,213, + 68,213,68,68,213,68,68,213,125,213,205,68,213,68,68,213, + 68,68,68,68,68,68,213,125,68,68,213,68,68,68,174,68, + 68,125,68,125,68,68,125,125,125,68,68,125,68,68,68,152, + 68,68,152,68,68,125,125,125,68,152,125,125,68,125,125,68, + 205,205,125,125,205,125,68,205,205,125,125,125,205,125,205,125, + 125,125,125,205,125,125,125,125,125,125,125,125,125,125,125,125, + 125,205,125,125,205,205,152,205,205,125,205,202,125,202,205,205, + 125,205,125,125,125,125,152,125,125,4,152,202,125,152,202,202, + 205,80,202,202,202,202,202,205,234,202,202,205,234,202,125,202, + 205,234,202,202,202,202,202,202,205,202,202,202,202,202,205,202, + 202,99,125,205,125,202,202,202,202,202,202,202,202,202,202,202, + 202,202,205,234,202,202,202,80,202,202,80,234,202,202,80,202, + 234,202,80,202,80,69,171,80,202,80,202,202,202,202,202,80, + 202,202,80,202,80,171,80,80,80,171,80,80,202,80,202,80, + 202,80,202,202,202,202,202,80,202,80,202,80,80,202,202,202, + 80,202,171,202,202,80,202,80,202,202,202,202,202,202,202,202, + 202,202,202,202,202,202,202,202,202,202,80,202,202,202,202,80, + 202,202,202,80,202,202,202,69,238,202,202,80,202,202,80,202, + 202,80,238,80,238,80,202,80,238,238,69,202,238,69,80,238, + 238,238,238,202,238,238,238,202,238,202,238,57,69,69,69,202, + 238,238,238,202,69,238,238,238,238,238,238,69,238,69,238,69, + 238,238,202,191,69,238,121,238,238,121,238,238,238,238,191,202, + 238,69,191,69,191,80,69,69,69,69,121,69,121,69,121,69, + 69,121,69,69,69,69,69,69,69,69,69,69,80,69,69,69, + 69,80,69,69,69,3,69,3,69,69,69,80,69,69,80,69, + 80,69,80,3,69,3,69,3,69,80,69,3,3,3,80,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,199,3,199,3,3,3,3,3,3,3,3,3,3,80,3, + 3,3,80,3,69,4,4,3,69,4,69,3,69,4,3,69, + 213,213,54,213,213,213,213,213,213,213,213,213,213,213,213,213, + 213,213,213,121,213,213,68,68,68,213,68,68,213,68,68,68, + 213,125,213,68,213,68,68,68,68,125,213,68,213,68,68,125, + 213,68,68,68,174,68,68,68,68,68,68,54,68,68,68,68, + 68,213,125,213,68,68,68,68,68,68,68,68,96,54,68,213, + 68,213,213,213,213,213,213,213,68,213,174,213,213,213,213,213, + 213,213,152,213,68,68,68,68,68,68,68,68,213,68,68,68, + 205,213,68,68,68,68,125,213,125,213,125,68,68,68,68,68, + 68,68,205,213,68,125,68,68,68,205,68,68,205,68,68,125, + 68,125,68,125,68,68,68,68,125,125,68,125,68,125,125,125, + 68,125,125,125,238,68,125,125,125,68,68,125,68,205,125,68, + 57,68,125,68,125,205,68,152,125,125,125,125,205,125,125,125, + 125,125,125,205,205,205,125,125,125,125,125,205,125,125,205,205, + 152,69,205,125,202,205,125,202,205,202,205,205,205,125,125,80, + 125,205,205,205,205,125,80,205,125,125,125,202,80,125,125,152, + 125,202,205,152,205,202,202,202,205,202,202,202,205,80,202,202, + 202,205,202,202,152,234,205,202,202,202,202,234,205,80,202,202, + 69,99,202,80,202,202,202,234,205,202,152,234,205,202,152,234, + 205,202,202,205,202,202,202,202,80,202,202,205,202,202,202,202, + 202,234,202,234,80,80,80,80,202,80,80,80,202,80,202,80, + 80,202,171,80,80,205,202,202,69,80,80,202,80,171,80,202, + 80,202,202,202,202,202,202,202,202,202,80,202,202,202,202,202, + 202,202,69,80,202,202,202,202,202,202,202,202,202,202,202,202, + 202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202, + 202,202,202,202,202,238,202,202,80,238,80,238,80,80,238,80, + 238,80,202,69,238,238,69,80,202,69,57,80,238,238,202,202, + 202,80,238,202,80,69,238,238,238,202,238,238,238,57,57,69, + 202,238,238,238,238,238,238,238,238,238,238,238,238,238,191,238, + 238,191,238,191,238,238,238,238,121,238,238,69,238,202,191,238, + 238,202,238,80,191,238,69,69,238,69,121,69,121,69,69,69, + 69,69,69,121,69,69,69,69,69,69,69,69,69,69,80,69, + 69,69,69,80,69,69,80,69,80,69,69,69,69,3,3,80, + 69,3,3,69,80,69,3,69,3,69,3,69,80,3,3,3, + 80,3,3,80,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,80,3,3,3,80, + 80,3,3,3,69,3,4,3,69,3,3,4,4,69,3,4, + 54,54,213,213,213,213,213,213,213,213,213,213,213,213,213,213, + 213,68,213,213,213,68,213,213,174,68,213,213,68,68,213,213, + 68,213,68,213,68,213,125,213,213,213,125,68,68,68,213,68, + 68,68,68,68,68,213,125,68,68,68,96,68,54,54,68,68, + 213,68,213,125,68,68,125,68,68,68,68,54,68,54,96,54, + 68,68,213,213,213,213,213,213,213,213,213,213,68,213,213,152, + 213,213,213,213,213,68,213,68,68,213,68,68,68,68,213,213, + 213,68,68,68,68,213,213,68,213,68,68,213,125,68,68,68, + 68,68,68,68,68,68,68,68,125,68,68,68,68,68,68,68, + 68,68,125,68,125,68,68,68,68,68,68,68,125,68,68,68, + 125,68,68,68,68,68,68,68,68,68,125,68,125,68,125,152, + 125,152,68,205,205,125,205,125,68,68,205,68,125,68,205,125, + 125,125,68,125,68,125,205,125,125,125,125,125,202,125,125,125, + 69,152,125,80,125,125,205,125,202,152,202,125,125,205,205,152, + 205,202,125,202,125,4,152,125,202,205,69,152,202,205,80,202, + 125,202,205,202,202,205,152,202,205,202,202,125,80,152,205,80, + 152,202,205,205,80,125,80,234,152,202,202,202,152,202,202,125, + 80,235,125,202,202,205,152,202,202,205,80,202,202,205,80,202, + 202,202,202,202,202,152,202,202,202,202,202,80,152,202,202,202, + 205,202,202,202,202,202,202,202,202,202,202,202,202,202,80,202, + 202,80,202,202,202,80,80,80,80,202,202,202,80,202,202,80, + 202,80,80,202,202,80,202,202,80,80,171,80,80,202,202,202, + 202,202,80,202,202,202,202,202,202,202,202,202,202,202,202,202, + 202,202,202,202,202,202,202,202,202,202,202,202,69,202,202,202, + 69,238,202,202,202,80,202,202,69,202,80,202,238,80,202,69, + 80,202,238,80,80,202,238,202,202,69,202,69,202,202,69,238, + 238,238,69,57,238,69,238,80,238,238,238,202,69,69,238,238, + 238,238,238,238,69,238,238,69,191,69,238,238,238,238,238,238, + 238,238,238,238,69,238,69,191,238,238,202,238,121,191,238,238, + 238,238,238,238,238,69,238,69,121,69,121,69,121,121,69,121, + 69,69,69,69,121,69,69,69,69,69,69,69,80,69,69,69, + 80,69,69,69,80,69,69,69,3,69,69,3,69,69,3,69, + 3,80,80,69,3,69,3,69,3,69,3,69,3,3,80,3, + 3,3,3,3,3,3,3,3,3,3,3,80,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,80,3,3, + 3,80,3,80,3,69,69,4,3,4,4,4,3,4,4,4, + 213,213,54,213,213,213,213,213,213,213,213,213,213,213,213,213, + 213,213,68,68,213,68,213,213,213,152,213,213,68,68,68,68, + 68,68,68,68,68,213,68,68,68,213,213,125,213,68,68,68, + 68,68,68,68,125,213,68,68,68,68,96,68,68,54,68,68, + 68,68,68,213,68,213,68,68,68,68,125,54,68,54,68,54, + 213,68,213,213,213,213,213,213,68,213,68,213,213,213,213,213, + 213,152,213,68,68,68,213,68,68,213,68,213,68,68,68,68, + 68,68,68,68,125,68,68,68,68,68,125,213,68,205,68,68, + 205,68,68,68,68,125,68,68,68,68,205,68,125,68,125,125, + 68,68,68,68,125,68,125,68,125,125,68,68,68,68,125,68, + 238,68,68,68,125,68,125,152,125,68,152,68,125,68,238,68, + 125,125,152,238,68,57,125,125,125,125,125,68,125,125,125,125, + 125,125,125,125,125,152,125,57,125,125,125,125,125,125,125,125, + 125,205,125,125,125,125,125,125,125,125,125,125,202,125,125,125, + 125,80,125,205,125,125,202,125,125,125,125,125,125,152,125,80, + 152,125,202,205,202,202,205,202,152,205,80,152,80,125,202,125, + 205,202,202,202,125,202,125,205,205,202,202,80,205,202,202,125, + 202,99,57,125,80,202,125,202,202,152,202,205,202,202,152,205, + 152,202,202,202,202,202,202,202,202,152,202,202,202,202,152,80, + 202,202,202,202,202,202,202,80,202,202,202,80,202,202,171,202, + 202,202,202,234,205,202,202,202,202,202,80,202,202,202,202,202, + 202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202, + 202,202,202,202,80,202,202,202,202,202,202,202,202,57,202,202, + 202,202,202,202,202,202,202,202,57,202,202,202,202,202,57,202, + 80,202,238,238,202,238,202,238,80,238,202,80,238,238,80,238, + 238,80,238,238,202,202,202,238,69,57,69,238,69,238,202,80, + 238,69,238,238,238,202,238,69,238,202,238,238,238,202,238,238, + 69,202,238,238,238,238,238,238,69,191,238,69,238,69,57,121, + 69,69,238,191,191,121,69,191,69,191,238,121,238,202,121,238, + 238,238,238,80,191,238,238,69,238,238,238,121,69,121,121,69, + 121,121,69,69,69,121,69,69,69,69,69,69,69,69,69,69, + 69,69,3,69,69,69,80,69,69,69,80,69,69,80,69,80, + 69,3,3,80,3,80,69,80,69,80,69,80,3,80,3,3, + 3,80,3,3,3,80,3,80,3,3,3,3,80,3,3,3, + 3,3,3,3,3,80,3,3,3,80,3,80,3,69,69,69, + 3,3,69,3,4,3,69,3,4,69,4,4,3,4,4,3, + 213,54,213,54,54,213,54,213,213,54,54,213,213,213,213,213, + 68,213,213,213,213,213,68,213,213,213,213,68,68,213,68,213, + 68,213,68,213,68,68,213,213,68,68,68,68,68,68,68,68, + 68,68,68,68,68,68,68,68,68,68,68,54,63,68,54,68, + 68,68,68,68,68,68,68,68,68,68,68,54,96,68,208,68, + 54,213,68,213,213,213,213,213,213,213,213,213,213,68,68,213, + 213,213,213,213,213,68,68,68,213,68,213,68,213,68,68,68, + 213,213,174,213,68,68,68,68,68,213,68,68,68,68,68,68, + 68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68, + 125,68,238,238,68,125,68,68,68,68,152,68,125,125,152,68, + 68,152,68,68,57,68,68,238,68,68,238,125,152,68,68,125, + 125,125,57,68,68,125,152,68,68,238,152,125,125,125,125,125, + 125,125,152,125,125,238,125,125,125,125,125,125,125,125,125,125, + 205,125,125,205,205,125,205,125,125,125,205,205,125,202,125,125, + 69,152,205,125,125,125,125,125,125,205,205,202,202,125,125,125, + 202,202,125,152,202,205,152,205,80,125,125,80,152,80,152,80, + 125,80,152,202,205,202,202,80,202,202,205,152,202,202,205,202, + 121,235,125,202,152,202,202,205,205,202,202,202,152,205,202,202, + 202,202,152,202,152,202,202,152,202,202,80,152,202,202,202,205, + 171,202,205,171,205,171,202,152,80,152,80,152,80,202,202,80, + 202,202,202,202,202,152,80,152,80,171,202,202,202,202,80,202, + 202,202,202,202,202,202,80,202,80,202,202,202,202,202,202,202, + 202,202,202,202,202,202,202,202,202,202,238,202,202,80,57,202, + 57,202,202,57,202,202,57,202,80,57,202,202,238,202,202,202, + 202,238,202,202,238,80,238,202,57,202,238,69,202,202,69,202, + 202,69,80,202,238,238,238,80,238,202,238,80,238,202,238,238, + 80,238,238,80,238,238,238,238,80,238,121,238,202,57,69,238, + 238,238,238,238,238,202,238,238,191,202,57,191,69,191,69,191, + 191,191,69,69,69,191,121,238,121,191,191,238,238,238,238,238, + 238,238,238,238,238,69,191,69,238,69,121,238,69,121,69,121, + 69,69,121,69,69,69,69,121,69,69,69,69,69,69,69,80, + 69,69,69,3,69,69,69,80,69,69,69,80,69,69,69,3, + 3,69,3,80,69,3,3,69,3,69,3,3,3,3,3,80, + 3,3,80,3,3,3,3,3,80,3,80,3,3,3,3,3, + 80,3,3,80,3,3,3,80,3,3,69,3,69,3,3,3, + 69,69,3,69,80,3,4,69,69,3,3,4,4,4,4,4, + 213,54,213,213,54,213,54,54,213,213,54,54,213,54,213,213, + 213,68,213,68,68,213,68,213,68,68,213,213,68,213,68,213, + 68,213,68,213,68,125,213,68,213,213,68,68,68,68,68,68, + 68,213,68,68,68,68,68,68,68,96,54,68,54,68,68,68, + 68,213,68,68,68,68,68,68,68,54,68,16,54,68,63,68, + 54,54,54,213,213,213,213,68,213,68,213,68,213,213,68,213, + 68,68,68,68,213,68,213,68,68,68,68,68,68,68,213,68, + 68,213,68,68,68,68,68,68,68,68,68,68,68,68,68,68, + 68,68,68,68,68,68,68,68,68,68,68,68,125,68,68,68, + 68,68,68,68,68,68,125,68,68,238,68,68,68,68,68,68, + 238,68,68,68,152,125,68,57,68,68,68,238,68,125,68,68, + 68,125,125,125,68,238,125,125,152,125,68,125,57,68,152,125, + 125,125,68,125,125,125,125,125,125,125,125,125,125,125,125,125, + 125,125,125,125,125,125,125,202,125,125,125,125,125,125,125,125, + 125,125,202,205,125,202,205,125,202,125,125,202,125,202,125,125, + 202,205,202,205,125,202,205,202,202,205,152,69,125,125,125,205, + 152,80,205,125,202,152,125,202,152,80,205,202,205,202,202,205, + 202,99,202,125,205,125,202,202,152,125,125,202,125,202,125,202, + 152,80,202,202,202,152,202,202,152,202,202,202,152,205,202,202, + 205,202,202,202,202,125,80,202,202,202,202,202,202,202,202,202, + 202,202,202,202,80,202,202,202,202,80,202,202,80,202,202,202, + 202,202,57,202,202,202,202,202,202,202,202,202,202,202,202,80, + 202,202,202,202,202,57,202,57,202,202,202,238,202,80,202,202, + 202,57,80,57,202,202,202,202,202,202,57,80,238,202,238,238, + 202,202,202,202,238,202,202,202,80,202,238,57,69,57,238,69, + 57,69,238,202,202,202,238,202,238,80,238,202,238,80,238,69, + 57,202,238,202,238,202,238,238,238,238,238,238,121,238,69,238, + 238,238,238,238,238,238,238,238,191,238,238,191,57,69,57,69, + 238,191,191,191,191,191,121,191,69,69,121,69,121,238,238,238, + 238,238,238,69,57,238,238,191,69,191,69,238,121,69,121,69, + 121,121,69,121,121,69,69,69,69,69,69,69,69,69,69,69, + 69,69,69,69,69,69,3,69,69,3,69,69,69,80,69,69, + 80,80,3,3,80,69,80,69,80,69,80,3,69,80,3,3, + 3,3,3,3,3,3,3,3,3,3,3,80,69,80,3,3, + 80,3,3,3,80,3,3,80,69,3,80,3,80,3,80,3, + 80,3,3,69,69,69,4,3,4,69,69,4,4,4,4,3, + 54,213,54,54,213,54,54,213,54,54,213,213,54,213,54,213, + 54,213,68,213,213,68,213,68,213,213,68,68,213,68,68,68, + 68,68,68,68,213,68,68,68,68,68,68,68,68,213,68,68, + 213,125,68,68,68,68,68,68,54,68,68,96,54,54,54,68, + 68,68,68,68,68,68,68,68,68,68,68,68,54,54,68,54, + 68,213,213,54,54,213,54,213,54,213,68,213,68,68,213,68, + 213,213,213,213,68,213,68,213,213,68,213,68,213,68,68,68, + 68,68,68,68,68,213,68,68,68,68,68,68,68,68,68,96, + 68,68,68,68,68,68,57,68,68,68,68,68,213,238,68,68, + 68,68,68,68,68,57,68,68,125,68,68,68,68,238,125,68, + 68,68,125,68,238,68,68,68,68,152,68,68,125,68,152,238, + 57,68,125,152,125,68,125,68,125,238,125,152,68,125,57,68, + 68,125,125,152,68,125,152,125,125,125,152,125,125,125,152,125, + 125,152,125,125,125,125,125,125,125,125,125,125,125,205,125,125, + 205,125,125,125,205,125,125,205,125,125,202,238,238,202,125,125, + 57,202,152,125,80,152,125,152,205,202,125,125,202,202,202,69, + 202,152,125,202,152,125,80,205,80,152,202,152,125,152,202,125, + 238,235,125,125,202,202,202,125,202,202,202,125,202,152,202,125, + 202,125,152,202,205,202,202,125,202,125,152,202,202,202,152,202, + 202,205,202,125,202,80,152,202,202,152,80,152,202,202,152,205, + 171,202,152,202,202,152,202,202,202,202,202,202,202,202,202,202, + 57,202,80,202,202,202,202,202,57,80,57,202,202,202,57,202, + 202,57,202,202,202,80,69,80,57,80,202,80,57,202,57,202, + 238,202,202,202,57,202,238,238,202,238,202,202,202,238,202,202, + 202,238,238,202,202,202,238,238,238,238,202,80,238,202,80,238, + 202,238,202,69,238,238,202,238,80,57,69,238,202,238,80,238, + 202,238,238,238,202,238,80,238,238,202,80,238,57,238,238,238, + 238,202,238,69,238,238,238,238,238,238,69,238,57,69,238,191, + 69,121,69,191,69,69,191,69,191,191,191,121,191,69,238,238, + 238,238,238,191,69,238,69,238,191,69,238,121,238,69,121,69, + 69,191,69,121,69,69,69,69,69,121,69,69,69,69,69,69, + 69,69,69,69,69,69,69,69,69,69,69,3,69,69,69,80, + 69,3,80,69,3,3,3,69,3,69,3,80,3,3,3,80, + 3,3,80,3,80,3,3,80,3,80,3,3,3,69,80,3, + 3,3,80,3,3,69,3,3,69,3,69,3,3,69,69,69, + 3,69,69,3,4,3,4,4,4,4,3,69,69,4,3,69, + 54,54,54,54,54,213,208,213,54,54,54,213,54,213,54,213, + 213,54,213,68,213,54,213,68,213,54,54,68,213,213,213,213, + 68,213,68,68,68,68,213,68,68,213,68,68,68,68,68,68, + 68,213,68,68,68,68,68,68,68,68,54,54,96,54,54,68, + 68,68,68,68,68,68,68,68,68,68,54,68,54,63,54,54, + 96,54,213,54,54,213,54,213,213,54,213,213,213,54,213,68, + 213,54,68,54,68,54,68,54,213,68,68,68,68,68,213,68, + 68,68,213,68,68,68,213,68,68,68,68,68,68,68,68,68, + 68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68, + 152,68,57,68,68,68,152,68,68,125,68,152,68,68,125,68, + 57,96,68,68,68,152,68,152,238,125,68,152,68,238,68,68, + 57,68,238,68,125,152,125,238,68,125,125,125,68,125,125,125, + 57,125,125,125,68,238,68,125,125,125,125,125,125,125,125,125, + 125,125,125,125,125,125,125,125,125,125,125,202,57,125,152,238, + 125,125,125,125,125,125,125,202,125,57,202,125,57,125,202,125, + 57,125,202,125,205,80,205,125,125,202,205,202,152,202,125,125, + 125,202,125,125,80,152,125,152,202,202,125,202,202,57,125,125, + 202,235,202,57,125,152,202,152,125,202,205,202,202,125,80,152, + 202,202,202,152,125,202,202,152,202,202,202,152,202,125,202,152, + 202,152,202,152,125,202,202,171,202,202,202,202,202,202,202,202, + 205,80,202,202,202,202,202,152,202,202,202,202,152,202,202,80, + 202,202,202,202,202,202,57,80,202,202,202,57,80,202,202,57, + 80,202,57,202,202,202,202,202,202,57,202,202,57,202,57,80, + 202,57,202,202,202,202,202,57,80,202,57,202,202,202,202,57, + 202,202,238,202,238,202,202,202,202,238,57,69,57,69,57,69, + 202,238,238,202,202,202,238,238,202,238,80,238,202,57,57,238, + 238,202,238,69,238,238,238,202,191,238,69,202,238,69,69,238, + 238,69,57,238,238,238,238,238,238,191,238,238,191,238,238,191, + 191,238,69,191,238,238,191,238,69,191,238,69,191,69,238,69, + 69,69,238,238,238,191,238,202,191,238,69,238,121,121,121,121, + 69,191,69,121,121,121,69,69,121,69,69,69,121,69,69,69, + 69,69,69,69,69,69,69,69,69,69,69,69,69,3,69,69, + 3,3,69,80,69,69,80,69,3,69,3,69,80,80,3,3, + 80,3,3,3,3,3,3,3,3,3,80,69,3,3,3,3, + 80,3,3,80,69,3,80,69,3,3,80,3,3,3,3,80, + 3,3,80,3,4,3,4,69,3,3,3,3,4,69,4,4, + 54,213,54,54,213,63,213,54,213,54,54,54,54,213,54,213, + 54,213,68,213,68,213,68,213,68,213,213,213,68,68,68,68, + 213,54,68,68,213,68,68,54,68,68,68,213,68,213,68,213, + 68,68,68,68,96,68,68,68,68,16,96,68,54,68,96,54, + 213,68,54,68,68,68,96,68,68,54,68,54,54,96,54,54, + 68,213,54,213,213,213,54,213,213,213,68,68,68,213,68,213, + 213,68,213,54,213,68,213,68,54,68,213,68,213,68,54,68, + 213,68,68,213,68,68,68,68,213,68,68,68,68,68,68,68, + 68,68,96,68,96,68,68,68,96,57,68,68,68,68,68,68, + 238,68,68,57,68,68,238,68,68,68,68,68,152,68,68,96, + 68,68,68,57,68,68,68,68,68,68,68,68,125,68,68,152, + 68,57,68,125,68,121,152,68,125,68,68,125,125,68,238,152, + 68,68,238,68,125,125,125,68,57,238,125,152,125,125,57,125, + 125,57,125,125,125,125,125,125,152,125,125,57,125,202,125,125, + 125,125,125,125,125,125,125,57,202,125,125,125,125,125,125,125, + 125,202,125,125,202,152,202,202,125,125,202,125,125,202,125,202, + 125,202,125,80,125,125,80,125,125,125,202,125,125,202,202,202, + 57,235,57,202,125,238,125,202,125,57,125,57,57,57,202,125, + 202,152,202,202,202,202,125,57,202,152,125,202,202,202,57,202, + 125,57,202,202,202,152,125,125,202,152,57,152,202,152,202,202, + 202,152,202,152,202,202,152,80,202,152,202,202,202,202,202,152, + 202,202,57,202,57,202,80,202,57,80,202,80,57,80,202,202, + 202,202,202,202,57,202,57,80,57,202,238,80,202,202,202,69, + 238,202,238,202,238,202,202,202,69,57,80,57,202,238,238,202, + 80,238,202,57,202,202,238,238,69,57,202,69,57,238,80,57, + 69,202,202,238,238,238,202,202,69,238,238,202,238,238,202,238, + 202,238,238,238,238,238,69,57,69,238,238,191,202,57,238,238, + 57,238,238,238,202,69,238,238,238,238,238,238,202,57,69,69, + 57,191,191,69,238,191,57,238,191,57,191,191,238,191,238,238, + 238,191,202,238,238,238,202,191,80,238,238,238,69,238,238,69, + 191,69,69,121,69,121,69,121,69,69,69,69,69,69,69,69, + 69,69,69,69,69,69,69,69,69,69,69,80,69,69,80,69, + 69,80,3,69,80,69,3,69,80,69,80,69,69,69,80,3, + 69,80,3,80,3,69,3,3,69,3,3,69,3,69,80,3, + 69,69,3,3,69,3,69,3,3,80,3,3,80,3,3,69, + 80,3,3,4,4,4,3,4,4,4,4,4,4,4,3,69, + 54,54,54,54,213,54,54,54,213,213,213,213,54,213,213,213, + 54,213,213,54,213,54,213,213,68,54,54,68,54,213,54,54, + 213,54,54,54,54,54,68,54,68,54,68,54,68,68,68,68, + 68,54,68,68,68,96,68,68,68,68,54,54,63,54,54,54, + 68,68,54,68,54,68,54,68,68,96,68,68,54,54,54,63, + 54,54,54,54,54,213,54,213,54,213,54,213,54,213,68,54, + 213,68,54,68,54,68,213,68,54,54,68,54,54,68,54,54, + 54,68,54,68,54,68,213,68,68,54,68,96,68,68,68,68, + 68,68,68,68,68,96,68,68,68,68,96,68,68,68,68,68, + 68,68,68,68,68,68,68,125,68,57,238,68,68,68,68,96, + 68,96,68,68,68,57,68,57,96,152,238,96,68,57,238,68, + 68,57,57,68,152,238,68,57,152,125,57,68,125,152,125,125, + 125,152,125,152,125,68,125,152,125,68,238,68,57,68,152,125, + 125,57,125,125,125,125,125,125,125,238,125,125,57,238,125,125, + 57,125,125,125,125,125,125,57,125,202,125,202,125,202,125,202, + 125,202,125,57,125,125,125,202,202,125,202,205,57,125,125,125, + 57,80,152,69,125,202,125,202,202,202,125,202,202,152,238,125, + 202,64,238,238,202,125,125,202,125,202,202,202,125,57,125,57, + 202,152,57,152,57,125,202,57,125,202,152,57,125,202,57,125, + 202,57,57,125,57,202,57,202,202,202,202,57,125,202,125,202, + 202,202,202,202,152,202,202,202,202,202,152,202,202,152,202,202, + 57,202,57,202,238,202,57,202,57,57,69,202,57,57,202,57, + 57,80,57,202,57,80,202,202,202,202,57,202,57,202,57,202, + 202,202,57,202,57,69,202,57,202,57,202,57,80,202,57,238, + 202,57,69,238,238,202,202,57,202,238,57,69,57,69,57,69, + 57,69,202,202,202,238,238,238,202,238,69,238,202,238,69,57, + 238,202,238,238,238,238,238,238,57,238,69,57,238,121,202,238, + 238,238,238,191,238,238,202,238,238,238,238,191,238,191,191,57, + 238,238,191,191,69,238,238,69,238,69,57,238,238,238,69,238, + 202,191,238,238,80,191,238,238,238,69,69,238,69,238,69,238, + 69,191,69,238,121,69,121,69,121,69,69,69,121,69,69,121, + 69,69,69,69,69,69,69,69,69,69,69,69,69,3,69,69, + 3,69,3,3,69,80,69,3,69,3,69,69,3,69,3,3, + 3,69,3,3,3,3,69,3,80,3,69,3,69,3,3,80, + 69,3,80,69,3,3,3,80,3,69,80,3,3,3,3,3, + 3,69,69,69,3,4,3,3,4,4,3,69,3,4,3,69, + 54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,213, + 54,213,68,213,68,213,54,68,213,213,213,54,213,54,68,68, + 68,213,68,68,213,68,213,213,213,54,68,68,54,68,54,54, + 68,68,68,68,54,68,68,96,68,54,68,54,96,54,96,68, + 54,68,68,54,68,54,68,96,68,68,54,96,54,54,96,54, + 68,54,213,54,54,213,54,213,213,213,213,213,213,213,54,213, + 213,54,213,213,54,213,54,213,68,213,54,68,68,68,213,68, + 213,54,68,68,54,68,54,96,213,68,68,54,68,96,68,68, + 68,68,54,68,96,68,96,68,96,68,68,96,238,96,68,68, + 57,68,96,68,57,68,68,68,68,68,68,68,57,68,125,68, + 68,68,96,68,68,96,68,68,68,68,96,57,68,68,68,152, + 68,68,152,68,238,68,125,68,238,68,152,125,68,125,238,68, + 68,238,68,121,152,125,238,125,68,125,125,125,68,125,238,238, + 152,125,125,57,152,125,125,125,125,125,125,238,125,125,57,57, + 202,125,125,125,125,125,125,125,125,57,125,125,125,57,125,125, + 125,57,125,125,202,125,125,202,125,125,57,125,202,125,125,202, + 125,57,202,152,125,57,125,57,125,152,202,125,125,57,202,238, + 238,235,125,125,202,202,125,152,125,57,125,152,202,202,202,202, + 125,57,202,125,202,202,152,202,202,202,125,202,202,152,202,202, + 125,202,202,57,202,57,125,57,57,125,57,80,202,152,202,202, + 152,125,152,202,202,202,202,152,202,57,202,202,202,57,202,152, + 80,202,202,202,202,57,202,202,202,202,69,57,80,80,57,80, + 202,57,202,202,202,152,202,202,57,69,202,238,202,57,57,80, + 238,57,80,57,202,57,57,80,57,202,238,202,57,238,202,202, + 238,202,238,202,202,57,238,80,238,202,80,191,80,238,80,238, + 238,238,238,69,57,238,80,238,238,202,57,202,238,57,238,238, + 202,238,238,238,202,238,238,238,238,57,238,238,238,238,191,69, + 238,69,57,238,238,69,238,238,238,238,238,238,238,238,238,238, + 238,57,69,57,191,238,238,191,57,69,238,238,202,238,238,238, + 191,202,238,238,238,69,238,69,191,69,191,69,191,69,238,202, + 191,69,121,69,121,69,121,69,69,69,69,121,69,69,121,69, + 69,69,69,69,69,69,69,69,69,69,69,80,69,69,3,69, + 80,69,80,69,3,69,80,69,80,69,80,69,69,3,69,80, + 3,69,80,3,3,80,3,3,3,3,69,3,80,69,3,3, + 3,69,3,3,69,69,3,69,3,3,69,80,3,80,3,80, + 69,3,3,3,80,3,4,4,4,69,4,3,4,69,4,3, + 54,54,54,54,54,54,54,54,54,54,213,54,213,213,54,213, + 54,213,213,213,68,213,54,213,54,54,213,68,213,213,54,68, + 68,213,68,68,68,54,68,54,68,54,68,96,213,68,68,54, + 68,54,68,68,54,54,68,54,68,96,68,54,54,54,54,68, + 54,68,68,68,68,54,54,54,96,68,54,68,96,54,54,63, + 68,54,54,213,54,54,213,54,54,213,68,245,213,213,213,54, + 213,213,54,213,68,68,54,213,68,213,68,54,68,68,54,68, + 68,54,68,68,68,68,54,68,68,54,68,68,54,68,96,54, + 54,68,54,68,68,68,96,68,96,68,68,68,68,68,96,68, + 68,238,68,68,96,68,96,68,68,68,96,68,68,68,68,96, + 68,68,96,96,68,96,68,57,96,238,68,68,57,96,191,68, + 57,68,68,68,57,68,152,68,57,238,68,57,68,68,57,57, + 68,125,152,238,68,68,57,125,152,68,125,125,152,125,68,125, + 68,152,125,238,68,125,125,125,125,125,125,125,125,125,125,57, + 57,125,125,125,57,125,125,125,125,125,57,125,202,125,125,202, + 125,125,202,57,125,125,57,125,202,125,202,152,202,125,202,125, + 125,57,125,202,125,125,202,125,57,202,125,202,202,202,202,125, + 202,235,191,152,57,125,238,202,125,202,57,152,125,57,152,238, + 202,125,238,202,202,57,125,57,57,125,152,57,202,57,57,125, + 202,57,202,57,202,202,202,202,202,202,57,202,57,125,57,125, + 202,57,125,152,125,202,202,57,202,152,202,57,202,202,57,202, + 202,57,57,202,202,202,57,202,202,202,202,202,57,80,202,202, + 202,202,57,80,57,202,202,202,57,57,202,57,80,202,238,202, + 202,57,202,202,202,80,57,80,238,202,57,202,80,57,238,202, + 238,202,238,57,202,238,57,238,57,57,202,57,57,238,57,238, + 57,238,238,202,202,238,202,57,238,238,238,238,202,69,202,57, + 238,238,202,191,238,69,191,238,238,238,238,238,202,238,238,202, + 191,238,69,191,191,191,238,238,238,238,238,238,238,238,238,238, + 238,191,57,238,69,238,238,238,191,238,238,238,238,238,238,238, + 191,238,69,238,238,80,238,80,238,202,238,202,69,191,69,69, + 238,191,69,238,69,121,69,69,121,69,69,69,69,69,69,69, + 69,69,69,69,69,69,69,69,69,69,69,69,69,80,69,80, + 69,69,69,80,69,3,69,3,3,3,80,69,3,69,3,69, + 3,69,3,69,69,3,3,80,3,3,69,3,69,3,80,3, + 69,3,80,69,80,3,3,69,80,3,3,3,3,80,3,3, + 80,3,80,3,3,4,69,3,3,69,69,69,3,69,4,4, + 54,54,54,54,54,54,54,54,54,54,54,54,54,54,213,54, + 213,54,68,54,54,213,54,213,68,54,68,54,68,54,213,54, + 54,54,54,54,54,68,54,54,213,54,213,68,54,96,68,68, + 54,68,54,54,68,68,96,213,96,54,54,68,54,54,54,54, + 68,54,68,54,54,16,96,68,54,54,68,96,54,54,54,54, + 54,54,54,54,213,54,54,213,54,213,54,213,54,68,213,54, + 68,54,213,54,213,213,54,68,54,68,54,213,54,54,213,54, + 54,68,54,68,54,68,68,54,213,96,213,54,68,54,68,96, + 68,96,68,96,54,96,68,54,68,96,96,96,68,96,68,68, + 96,68,96,96,68,68,68,57,68,68,238,68,68,96,57,68, + 68,68,68,68,68,238,96,96,68,96,96,96,68,68,68,96, + 57,68,57,57,68,68,238,57,68,68,57,68,238,152,68,68, + 125,68,238,68,57,125,68,152,57,125,152,68,238,68,125,57, + 125,68,152,125,125,152,57,57,125,57,152,125,125,125,125,152, + 125,57,125,57,125,125,57,125,125,125,125,57,57,125,125,57, + 125,125,125,125,57,202,125,125,57,125,238,57,202,125,57,125, + 125,202,125,125,125,202,125,202,125,57,125,125,152,57,152,57, + 191,235,202,57,125,202,125,202,125,57,202,57,125,125,57,202, + 238,57,202,57,57,202,202,125,202,202,57,125,57,202,202,238, + 57,202,238,202,57,238,57,57,57,57,152,57,202,202,202,125, + 57,202,125,202,202,57,57,125,202,57,57,202,152,57,202,57, + 57,202,202,57,57,57,202,57,57,57,202,57,202,57,57,57, + 202,238,202,57,202,57,57,57,202,80,57,238,57,57,202,57, + 57,202,57,57,57,238,202,57,202,238,202,57,69,57,202,238, + 202,57,238,57,69,57,238,80,57,238,57,69,57,238,57,238, + 202,202,238,238,238,238,238,238,238,69,57,69,57,238,238,238, + 238,238,191,202,238,69,57,69,238,238,238,238,191,57,238,191, + 238,57,191,57,238,238,238,238,238,238,238,238,238,238,238,238, + 238,238,238,57,191,191,238,238,238,238,238,238,238,238,238,69, + 69,238,238,238,191,69,238,191,69,238,238,69,191,80,191,69, + 238,69,69,121,69,121,69,69,121,69,121,69,69,69,69,69, + 69,69,121,69,69,69,69,69,69,69,80,69,69,3,69,69, + 3,69,69,69,69,80,69,80,80,69,3,80,69,80,69,80, + 69,3,69,80,3,69,3,3,80,3,3,80,3,80,3,3, + 80,3,69,3,3,80,3,3,3,3,69,69,3,3,80,3, + 3,3,3,80,3,69,4,69,4,4,4,3,4,4,3,69, + 54,54,54,54,54,210,54,54,54,54,54,54,213,54,54,213, + 54,54,213,54,213,54,213,54,213,54,213,54,213,68,213,68, + 68,68,213,68,54,68,68,54,68,54,68,54,213,54,68,68, + 68,68,68,54,54,54,54,16,54,68,96,68,96,54,54,54, + 68,54,68,68,213,213,54,68,96,16,54,68,54,96,54,63, + 54,54,54,213,54,54,213,54,213,54,54,213,54,213,54,213, + 68,68,54,54,68,54,213,68,54,213,68,213,68,54,213,68, + 54,68,54,68,54,68,96,68,54,68,54,68,68,54,68,54, + 68,96,213,68,68,54,68,68,68,68,68,96,68,96,54,68, + 96,68,68,96,96,68,96,96,68,68,68,68,68,96,68,96, + 96,68,96,96,68,68,68,96,68,68,57,96,68,96,68,68, + 57,96,68,68,57,96,68,68,57,57,152,68,238,68,57,57, + 57,68,57,68,57,125,238,125,68,57,125,125,125,152,125,125, + 57,238,68,57,238,68,68,152,125,125,125,125,152,125,125,125, + 125,57,125,125,125,125,57,125,57,125,125,152,238,57,125,125, + 125,57,125,125,57,125,57,125,125,125,125,57,57,125,125,125, + 125,125,125,202,152,202,57,125,202,125,202,57,69,57,202,238, + 202,47,121,202,57,125,57,125,202,152,69,57,125,202,125,202, + 202,238,125,202,152,57,125,202,57,125,202,125,152,125,202,202, + 57,202,238,125,202,202,125,152,202,57,202,57,57,152,202,202, + 202,202,57,57,125,202,125,152,202,202,152,125,202,57,202,202, + 57,238,202,202,238,57,202,202,202,57,202,57,202,202,202,57, + 202,57,202,57,202,202,202,57,238,202,202,202,202,238,202,202, + 238,80,202,80,202,57,202,238,80,57,57,57,202,238,202,57, + 202,202,238,57,202,57,69,57,202,238,238,57,238,202,238,238, + 238,202,57,238,202,238,202,202,238,202,57,238,238,238,202,202, + 57,69,57,238,238,238,191,57,69,57,238,238,238,238,238,238, + 238,238,69,57,238,238,57,238,238,238,238,238,238,238,238,238, + 191,191,238,238,238,238,238,238,238,238,238,238,238,69,238,57, + 202,238,238,238,238,238,69,238,238,69,238,202,238,202,238,238, + 69,238,69,238,69,121,69,69,69,69,69,69,69,69,69,69, + 69,69,69,69,69,69,69,69,69,3,69,69,69,69,80,80, + 69,69,3,69,3,80,3,69,3,80,3,69,3,69,3,69, + 3,69,3,69,3,80,3,69,3,69,3,69,3,3,80,69, + 3,3,80,3,3,69,80,3,80,3,80,3,80,3,3,80, + 80,3,69,3,4,3,80,69,3,4,4,4,4,69,3,4, + 54,155,54,210,54,210,54,54,155,213,54,54,54,54,213,54, + 213,54,213,54,213,54,54,213,54,213,54,213,54,54,54,54, + 213,54,68,54,68,54,213,54,54,68,54,96,68,54,54,213, + 54,54,54,68,68,213,96,68,68,54,54,54,54,96,54,54, + 54,68,54,54,54,96,54,54,54,54,68,54,54,54,54,54, + 54,54,54,54,54,213,54,54,213,54,213,54,54,54,54,213, + 54,213,54,213,54,213,54,68,213,54,54,54,54,68,54,54, + 213,54,54,213,54,213,54,54,68,54,68,54,54,68,54,96, + 54,54,54,96,16,68,16,54,16,54,54,68,68,68,68,68, + 68,96,68,68,68,96,68,68,96,96,68,96,68,68,96,68, + 238,96,68,57,96,96,96,68,96,57,68,68,96,152,68,152, + 96,68,57,68,68,152,57,68,68,68,238,57,68,57,68,68, + 152,57,68,152,68,68,68,57,125,68,57,68,68,238,125,152, + 125,125,125,152,125,125,125,238,125,125,152,57,238,57,238,125, + 152,125,125,57,57,125,125,57,125,57,125,57,125,125,57,57, + 57,125,125,125,125,125,125,125,125,125,125,125,125,125,202,125, + 57,125,125,57,238,57,125,125,125,238,57,125,125,125,57,191, + 158,254,238,57,125,125,202,125,238,57,152,202,125,57,57,57, + 57,202,57,57,57,202,125,57,125,202,152,202,57,125,57,57, + 202,57,202,238,57,238,57,57,57,202,57,202,125,125,57,152, + 57,57,125,152,202,152,202,57,125,152,202,125,202,125,57,57, + 202,202,57,57,202,202,57,57,238,57,57,202,57,57,238,238, + 238,238,57,69,57,57,57,202,202,57,238,57,238,202,238,57, + 202,57,238,57,69,238,57,57,69,238,202,202,57,238,57,238, + 57,238,80,238,57,202,238,202,57,57,238,202,202,238,202,238, + 57,238,238,202,57,202,238,57,238,191,202,238,202,238,238,238, + 202,238,238,238,57,238,80,238,191,191,238,238,238,57,69,238, + 238,57,238,191,191,191,238,238,121,238,191,238,238,238,238,238, + 238,238,191,238,238,238,238,238,121,238,238,238,238,191,121,238, + 238,238,238,202,121,238,238,238,69,238,238,238,238,69,238,238, + 238,238,69,238,69,121,69,69,121,69,69,69,69,69,69,69, + 69,69,69,69,69,69,69,69,69,69,69,80,69,69,69,3, + 69,69,80,69,69,3,80,3,69,3,80,69,80,69,3,69, + 3,69,80,69,3,3,80,69,3,80,3,69,80,69,3,3, + 69,69,3,80,3,3,3,69,69,3,3,3,3,80,3,3, + 3,80,3,69,4,3,69,3,4,3,69,69,3,4,4,4, + 54,54,210,54,54,54,54,54,54,54,54,54,54,54,54,54, + 54,54,54,213,54,213,54,213,54,213,54,68,213,68,213,54, + 213,54,213,54,68,54,68,54,54,213,54,54,213,54,54,68, + 68,68,54,54,96,213,54,54,96,54,16,54,54,54,54,54, + 54,68,68,68,54,68,54,54,16,54,54,16,54,16,54,54, + 54,54,54,54,54,54,54,213,54,54,213,54,213,213,54,213, + 54,213,54,213,96,54,54,68,54,68,68,68,54,68,54,68, + 54,68,54,54,68,54,213,54,68,54,68,68,54,54,68,54, + 68,96,213,54,54,68,68,68,68,68,54,16,96,68,96,68, + 68,54,96,16,68,68,96,68,68,96,68,96,68,68,96,54, + 68,96,68,96,68,191,96,238,96,96,96,68,96,68,96,68, + 68,152,96,96,191,68,96,57,96,152,68,57,68,96,152,238, + 68,68,57,68,57,152,68,57,68,152,68,57,152,68,238,125, + 68,152,238,68,152,125,68,68,57,238,68,68,152,68,152,238, + 68,57,125,125,238,125,125,125,125,57,125,57,238,125,125,125, + 125,57,57,125,125,125,202,57,125,202,57,125,202,57,125,125, + 57,57,125,125,125,125,125,202,152,125,125,125,152,202,125,16, + 235,235,57,125,125,152,125,125,125,57,57,125,152,202,125,57, + 57,125,125,57,57,57,202,125,57,57,238,57,238,202,238,57, + 125,57,202,57,238,202,125,125,57,125,57,125,57,202,57,125, + 125,202,125,57,238,238,202,57,57,57,238,57,202,57,57,238, + 238,238,238,238,238,202,238,238,202,238,238,202,57,238,202,57, + 202,238,57,202,57,238,238,57,202,202,238,202,57,238,57,238, + 238,238,57,238,202,57,80,191,57,57,238,238,202,238,80,238, + 57,238,202,57,238,238,238,57,238,238,57,191,238,191,57,238, + 57,238,57,238,238,238,238,202,238,57,238,238,202,238,238,238, + 238,238,238,238,69,191,191,57,69,57,238,238,238,191,57,238, + 191,191,69,57,69,191,191,191,191,238,238,238,191,238,191,69, + 191,238,191,238,238,238,238,238,238,238,238,238,238,238,238,238, + 69,238,238,238,238,238,238,238,238,238,238,69,191,238,80,238, + 238,69,191,69,238,69,69,121,69,80,69,69,69,69,69,69, + 69,69,69,69,69,69,69,69,69,69,69,69,69,3,69,69, + 80,69,3,69,80,69,69,80,69,3,69,3,69,80,69,80, + 3,3,69,3,3,3,3,3,3,69,3,80,69,3,3,69, + 3,3,3,80,3,80,3,3,3,80,80,69,69,3,80,4, + 3,4,3,69,69,3,4,69,69,3,3,4,3,4,4,3, + 54,155,54,155,54,54,155,54,54,54,54,54,54,54,54,213, + 54,213,54,54,54,213,54,54,54,54,213,54,54,54,54,68, + 54,54,54,213,54,54,213,54,54,68,54,68,54,68,54,54, + 54,54,54,68,54,54,96,54,68,54,68,54,54,63,54,54, + 54,54,54,54,54,54,54,54,213,96,54,68,54,54,54,54, + 54,54,54,54,54,54,54,54,54,213,54,54,54,213,54,54, + 54,213,54,54,213,54,213,54,213,54,54,54,68,54,54,54, + 54,213,54,68,54,54,54,68,54,68,54,54,54,68,54,68, + 54,54,96,68,96,54,96,54,54,96,68,68,68,96,54,96, + 96,68,68,68,96,54,68,54,68,68,96,68,54,96,68,68, + 96,54,96,68,96,68,96,54,68,96,96,96,68,96,57,68, + 96,68,68,68,68,96,57,68,238,96,96,57,68,125,68,96, + 57,57,68,57,68,238,152,68,238,57,125,68,238,57,68,57, + 68,238,152,68,238,57,125,125,125,152,125,125,125,125,57,125, + 125,125,57,57,125,57,125,238,152,238,57,125,125,57,57,57, + 57,125,125,57,57,125,57,125,57,57,152,125,57,152,57,125, + 125,125,125,125,57,57,125,57,57,125,125,125,57,57,125,96, + 141,235,238,57,57,57,125,202,125,125,125,57,125,57,125,125, + 202,125,125,202,152,125,57,57,125,125,125,125,125,57,202,125, + 57,125,57,202,125,57,57,57,202,57,152,125,125,57,202,125, + 202,57,238,202,202,202,57,125,57,57,202,57,57,238,57,238, + 57,238,202,57,238,57,57,202,191,202,57,238,57,202,191,202, + 238,57,202,57,238,202,238,57,57,57,80,57,238,202,202,57, + 80,238,202,57,238,57,238,202,80,238,57,202,57,57,69,57, + 238,238,57,238,57,202,238,238,202,69,57,80,57,238,238,238, + 238,238,238,238,57,69,238,238,202,238,202,238,191,238,191,238, + 238,238,238,57,191,238,238,57,191,238,238,238,191,57,238,238, + 238,57,191,191,191,191,238,57,238,191,238,191,238,191,57,191, + 238,191,238,191,238,238,238,238,121,191,238,238,238,238,238,238, + 238,238,238,238,238,69,238,238,57,69,238,57,69,238,238,238, + 69,191,80,238,69,238,69,69,69,69,69,69,69,69,69,69, + 69,69,69,69,69,69,69,69,69,69,69,69,69,69,80,69, + 3,69,80,69,69,3,69,3,69,80,69,3,69,3,80,69, + 80,3,80,3,80,3,69,80,3,80,69,3,3,69,3,80, + 3,80,3,69,3,3,80,3,69,69,3,4,3,4,3,3, + 69,3,69,80,3,3,69,3,4,4,4,4,4,4,4,4, + 54,54,155,54,54,155,213,155,54,155,213,155,213,54,54,54, + 54,54,213,54,54,54,213,54,213,54,213,54,213,54,54,213, + 54,213,54,213,54,68,54,54,213,54,54,54,54,68,54,213, + 54,68,54,213,54,54,68,54,68,54,68,96,54,54,96,54, + 54,54,96,54,54,96,54,63,54,54,63,54,54,54,54,54, + 54,54,54,54,54,54,54,54,54,54,213,54,54,54,213,54, + 54,54,213,54,213,54,54,54,213,54,54,54,213,54,213,54, + 54,54,54,68,54,68,54,54,54,68,54,68,54,54,16,96, + 213,96,54,68,96,54,96,68,54,54,54,54,68,68,54,54, + 16,54,54,68,96,96,68,96,96,68,96,68,68,96,96,96, + 238,54,96,96,96,96,68,208,68,96,68,96,96,68,96,68, + 96,152,68,57,68,68,96,68,68,57,96,96,57,96,125,68, + 68,57,68,57,68,57,68,152,68,57,68,57,68,57,68,57, + 68,238,125,68,152,68,152,68,57,68,68,57,68,125,68,152, + 68,125,125,57,152,68,152,238,68,68,96,96,68,68,68,68, + 96,96,238,57,96,68,57,238,68,96,191,57,16,238,96,57, + 238,57,96,57,238,191,68,238,16,191,57,238,68,191,96,208, + 80,235,57,125,125,57,57,57,125,125,202,57,125,57,125,57, + 57,57,57,57,125,125,125,202,57,57,57,125,202,57,57,125, + 57,57,57,57,57,125,202,96,202,57,57,125,152,57,57,57, + 152,57,238,57,57,57,57,202,57,57,57,238,57,238,57,57, + 202,191,57,238,238,238,57,202,191,57,57,57,191,202,191,57, + 202,191,57,238,57,57,57,238,238,238,57,202,191,57,57,238, + 57,238,202,238,202,57,238,57,57,202,191,57,202,191,57,202, + 238,57,202,238,238,238,202,191,57,57,238,57,238,238,238,238, + 57,57,202,238,238,238,238,57,238,191,57,238,191,238,191,238, + 57,238,238,69,57,69,191,57,121,191,191,191,191,191,191,191, + 191,191,191,191,191,191,191,191,191,191,191,191,191,191,208,191, + 191,191,191,191,208,191,191,208,191,191,191,16,16,208,208,191, + 191,16,191,191,191,16,121,191,16,191,191,16,191,191,121,191, + 121,238,238,69,191,69,69,191,69,69,69,69,69,69,69,69, + 69,69,69,69,69,69,69,69,69,69,69,69,80,69,69,80, + 69,3,80,69,69,80,69,3,69,3,69,80,80,69,3,3, + 80,69,3,3,3,3,3,3,69,3,3,80,69,3,3,69, + 3,69,3,69,80,3,3,3,3,69,3,69,69,69,69,3, + 69,3,69,3,80,3,4,3,4,4,69,4,4,4,4,3, + 54,155,54,155,54,54,155,54,54,54,54,54,155,54,54,54, + 54,54,54,213,54,54,54,54,213,54,54,213,54,213,54,54, + 213,54,54,54,54,54,54,213,54,213,54,68,54,54,68,63, + 68,54,54,96,54,68,54,96,54,54,96,54,68,54,63,54, + 54,68,54,68,54,54,54,54,54,68,54,54,54,54,54,54, + 54,54,54,54,54,54,54,54,54,54,54,213,54,54,54,213, + 54,213,54,54,54,54,54,213,54,213,54,213,54,54,213,54, + 213,54,68,54,54,54,68,54,68,63,68,54,54,54,54,54, + 54,16,54,54,213,96,213,96,68,96,96,16,54,96,68,68, + 96,68,68,16,54,68,54,54,68,54,68,96,96,54,68,68, + 96,213,16,96,54,96,96,96,96,96,96,96,68,96,96,96, + 68,57,68,96,96,96,152,96,68,96,68,68,96,57,68,152, + 96,57,96,68,57,68,57,68,57,68,96,57,68,152,68,152, + 57,68,57,125,57,68,238,152,57,57,57,68,57,68,152,57, + 68,57,57,68,238,57,125,57,125,125,80,202,238,202,57,238, + 202,69,57,125,202,202,125,125,202,202,202,125,125,205,69,125, + 69,125,202,125,125,202,57,125,202,205,125,125,202,69,69,16, + 57,235,57,57,57,125,57,125,57,57,57,125,57,125,57,57, + 125,125,125,202,57,57,125,57,152,125,125,57,57,57,125,125, + 125,57,57,57,125,57,57,57,57,57,125,238,57,57,125,57, + 57,125,57,238,57,125,125,57,125,57,202,57,57,238,238,57, + 191,238,57,57,238,57,57,191,57,57,57,57,57,191,57,57, + 191,57,238,238,57,238,57,238,57,57,57,191,238,238,202,238, + 57,57,238,57,191,238,57,238,57,191,202,238,191,202,238,57, + 238,238,57,238,57,57,57,238,57,238,238,191,57,191,238,238, + 238,238,191,238,191,238,191,57,238,238,57,238,238,69,57,191, + 69,57,57,191,191,191,69,191,191,69,80,80,121,69,69,191, + 69,69,191,121,238,238,238,121,80,121,121,121,69,191,80,238, + 80,69,121,69,80,69,69,69,69,69,80,80,80,80,80,80, + 80,80,80,80,80,80,69,69,80,69,121,69,69,69,238,80, + 80,238,238,69,202,191,69,202,69,69,69,121,69,69,69,121, + 69,69,69,69,69,69,69,69,69,69,69,69,3,69,69,69, + 3,69,3,80,69,80,69,3,80,80,3,69,3,80,3,80, + 3,3,3,80,3,80,3,80,3,69,3,3,69,3,69,80, + 69,80,3,3,69,69,69,3,80,3,80,3,4,3,80,3, + 80,3,3,69,69,4,4,4,69,3,3,69,69,4,3,69, + 54,155,54,155,54,155,213,155,54,155,213,54,54,54,54,54, + 54,213,54,54,54,213,54,54,54,54,54,54,54,213,54,54, + 54,68,54,68,54,213,54,54,54,54,54,68,54,54,68,54, + 54,54,16,68,208,54,54,16,68,54,54,54,96,54,54,54, + 63,54,208,54,96,54,96,54,63,54,54,54,63,54,54,54, + 54,54,54,54,54,54,54,54,54,213,54,54,54,213,54,54, + 54,54,54,213,54,213,54,54,54,54,54,54,68,54,54,54, + 54,68,54,96,54,54,68,63,68,54,54,96,68,54,68,54, + 68,54,54,96,54,54,54,54,54,54,213,96,54,16,54,68, + 54,96,96,68,96,96,16,54,238,54,68,54,68,96,54,96, + 54,68,54,96,68,96,68,96,54,16,96,96,96,68,68,96, + 96,96,68,152,68,68,57,96,152,152,96,68,152,96,68,57, + 96,68,96,57,68,57,96,68,57,152,68,96,238,57,238,68, + 152,68,57,68,57,68,191,68,68,152,68,152,57,238,125,125, + 152,68,125,152,68,57,68,57,68,192,17,187,132,122,17,150, + 187,187,132,219,166,132,219,166,166,166,132,227,183,187,166,187, + 187,166,132,17,187,219,219,187,166,219,219,166,17,166,183,158, + 202,141,238,57,57,125,57,125,152,57,57,125,57,125,125,57, + 57,57,57,152,125,57,57,57,238,57,125,57,125,57,57,57, + 125,57,57,57,57,57,57,57,57,57,57,57,125,57,57,57, + 238,57,57,125,57,57,57,57,57,57,57,57,57,57,238,57, + 238,57,238,57,57,57,238,57,238,191,57,57,57,57,57,57, + 57,57,57,238,57,57,191,57,238,57,238,57,57,191,57,57, + 191,57,238,57,57,238,57,238,238,191,57,57,191,57,57,238, + 57,57,238,238,57,57,238,191,238,191,57,191,69,191,57,238, + 191,238,191,238,57,238,191,191,57,191,238,191,191,191,238,191, + 191,191,238,57,191,191,191,191,191,56,183,132,219,215,219,183, + 132,183,183,219,183,219,219,183,183,183,183,183,132,132,132,219, + 183,183,183,183,219,215,56,56,183,215,183,219,219,42,183,26, + 219,219,219,183,132,183,219,219,219,219,219,122,219,132,215,0, + 199,191,69,69,238,69,57,238,69,238,69,80,121,69,69,69, + 69,69,69,69,69,69,69,69,69,69,80,69,69,69,80,69, + 69,80,3,3,3,3,80,69,3,80,69,80,3,69,3,80, + 3,80,3,3,69,3,3,80,3,3,80,69,3,80,3,3, + 3,3,80,3,3,80,69,3,3,69,3,3,69,3,4,3, + 4,80,3,3,69,69,4,4,69,3,3,3,4,69,4,4, + 155,155,155,54,155,54,155,54,155,54,54,155,54,155,54,54, + 54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54, + 213,54,54,54,54,54,54,68,54,68,54,63,54,54,63,54, + 54,54,54,63,54,54,54,54,54,54,54,54,54,54,96,54, + 96,54,54,54,54,54,54,54,54,54,54,54,54,54,210,210, + 210,54,54,155,54,155,54,54,54,54,54,54,54,54,54,54, + 54,54,54,54,54,54,54,213,54,213,54,54,54,54,213,54, + 54,54,54,54,54,54,63,68,63,54,54,54,208,54,54,96, + 63,68,54,208,68,54,96,16,54,68,54,54,68,54,96,54, + 96,54,213,96,54,68,213,96,54,68,96,68,96,68,68,54, + 96,54,16,54,96,96,96,96,68,96,68,54,96,96,96,96, + 68,68,96,68,96,96,96,68,96,96,68,68,96,68,96,57, + 68,96,57,68,96,96,57,57,68,96,68,152,68,152,68,57, + 68,57,57,68,96,57,68,57,57,68,125,238,57,68,57,68, + 57,68,57,238,125,152,68,152,57,80,182,67,211,12,99,99, + 99,182,67,67,99,182,67,99,67,99,67,67,182,182,67,67, + 99,99,182,182,99,182,109,67,182,67,99,67,141,211,109,235, + 80,99,68,125,125,57,125,238,57,125,57,57,125,57,57,125, + 125,125,57,57,57,57,57,57,125,125,57,152,57,125,57,125, + 57,57,57,57,57,57,57,57,125,57,57,57,57,57,125,57, + 57,57,125,57,125,125,125,125,125,57,57,57,57,57,57,57, + 57,191,125,191,191,57,238,57,57,238,238,238,57,57,238,57, + 238,57,57,191,57,191,57,238,191,57,57,57,191,57,57,57, + 57,191,191,57,57,238,57,57,57,57,57,238,57,57,191,57, + 57,191,57,191,57,191,57,57,191,69,191,57,191,57,191,191, + 57,238,238,191,191,191,238,238,191,238,191,57,191,57,191,191, + 191,57,191,191,191,57,57,208,80,26,17,141,243,8,243,67, + 243,211,141,8,182,182,243,67,12,243,49,141,243,12,243,182, + 182,182,182,182,8,67,182,182,182,139,243,182,67,49,49,49, + 67,182,141,67,182,67,211,8,139,243,8,243,17,8,8,26, + 80,121,238,238,202,238,202,80,238,80,69,69,69,69,69,69, + 69,69,69,69,69,69,69,69,69,69,69,69,80,69,69,80, + 3,3,80,80,69,3,3,69,80,3,69,3,80,3,80,3, + 3,3,80,3,80,3,3,3,80,69,3,3,69,69,69,80, + 3,69,3,3,69,3,3,69,3,4,4,69,4,69,69,3, + 69,4,4,3,3,3,3,3,4,4,4,4,4,4,3,69, + 210,210,210,155,54,155,54,54,54,54,155,213,54,54,54,54, + 155,54,54,54,54,54,213,54,54,54,54,54,54,213,54,54, + 54,54,54,213,54,54,54,54,54,54,54,54,54,54,96,54, + 54,54,54,68,54,54,54,54,96,16,54,16,68,63,54,54, + 54,54,54,54,54,208,63,54,54,54,54,54,63,54,54,54, + 210,210,54,54,54,54,54,54,54,54,54,54,54,54,54,213, + 213,54,54,54,213,54,54,54,54,54,213,54,68,54,54,54, + 54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,68, + 54,54,54,54,96,54,54,68,63,96,54,96,68,96,54,96, + 96,54,96,96,54,54,68,96,54,54,16,54,96,96,68,96, + 96,68,54,96,208,54,54,208,54,96,96,16,96,96,68,208, + 96,68,96,68,68,68,96,68,57,96,96,57,96,96,152,68, + 57,96,96,152,68,68,68,68,57,68,191,68,96,68,152,57, + 68,152,68,125,68,152,68,68,96,57,68,152,68,57,57,68, + 152,68,57,68,57,238,57,68,152,192,182,67,182,243,49,67, + 49,67,224,99,99,67,67,182,139,67,67,67,182,99,182,182, + 67,67,99,67,182,67,224,67,109,67,99,67,99,49,182,219, + 80,235,191,57,152,57,57,57,57,125,125,57,57,152,57,57, + 57,152,57,57,57,57,57,57,57,57,57,68,57,57,57,125, + 152,57,96,57,96,57,57,191,57,57,57,57,57,191,57,57, + 57,191,57,57,57,57,191,191,57,57,57,57,57,57,57,191, + 96,80,199,191,191,57,191,191,57,191,191,57,238,191,191,57, + 191,191,57,191,57,191,191,57,191,57,57,57,57,191,57,191, + 192,80,191,191,191,191,57,238,238,191,238,57,238,238,57,191, + 57,191,57,191,57,57,238,191,191,57,191,191,191,191,191,191, + 191,191,57,191,238,191,191,191,191,191,191,57,191,57,238,57, + 191,191,191,57,191,191,191,208,235,219,182,8,183,12,42,12, + 219,12,150,150,12,17,219,243,219,141,243,182,12,12,12,8, + 141,8,8,141,12,182,243,12,243,67,67,49,132,12,17,17, + 182,8,243,8,141,141,182,8,243,17,67,8,26,8,182,12, + 69,121,191,69,238,121,238,69,238,238,69,69,121,69,69,69, + 69,69,69,69,69,69,69,69,69,69,69,69,69,3,69,69, + 69,3,69,80,3,80,80,3,69,80,3,80,69,80,3,80, + 3,3,80,3,69,3,80,3,3,3,80,3,3,3,69,69, + 3,69,80,3,69,3,80,69,3,69,3,69,3,3,69,3, + 69,3,4,4,80,3,4,3,4,4,3,69,3,4,3,69, + 210,155,54,155,54,155,155,54,155,54,54,210,54,210,54,54, + 54,54,54,54,54,54,63,54,54,54,54,54,213,54,54,54, + 213,54,54,54,54,54,54,54,54,54,54,96,54,54,54,54, + 96,54,213,208,54,16,54,54,54,54,54,54,63,68,208,54, + 54,54,54,54,54,54,54,63,63,63,63,54,54,210,54,210, + 54,54,54,210,54,155,54,155,54,54,54,54,54,54,54,54, + 63,54,54,54,54,54,54,54,54,54,54,54,63,54,213,54, + 213,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54, + 54,54,54,54,68,54,54,54,68,54,68,54,54,54,68,54, + 54,96,54,68,96,54,54,16,54,68,54,68,16,54,96,54, + 96,54,96,208,54,96,96,96,96,96,96,68,96,96,96,96, + 96,96,96,96,96,96,57,68,96,96,96,96,68,68,96,96, + 96,68,68,96,57,96,96,96,68,57,96,96,57,68,57,68, + 96,68,57,96,96,57,125,254,192,68,96,68,68,152,96,57, + 68,57,68,57,68,68,57,68,57,199,182,49,182,211,235,99, + 67,99,67,49,99,67,99,49,99,99,99,99,99,67,49,99, + 99,235,67,182,99,182,8,49,91,235,235,67,182,235,182,42, + 121,145,63,96,208,96,68,54,96,96,96,96,68,16,96,96, + 96,16,96,96,96,68,96,96,96,96,191,96,96,68,96,96, + 208,96,191,96,96,96,208,96,208,96,96,96,63,96,96,96, + 96,96,96,96,96,96,96,96,96,96,96,96,96,208,208,208, + 63,202,199,105,208,191,96,208,208,191,191,208,191,191,191,191, + 191,191,208,208,208,208,191,208,191,208,191,208,208,191,208,105, + 199,191,105,191,191,208,208,191,208,191,191,208,208,191,208,191, + 208,191,208,191,208,191,208,191,191,191,208,191,191,191,191,191, + 191,191,191,191,191,191,191,191,191,191,191,208,191,208,208,208, + 208,191,191,208,191,208,208,105,139,8,67,49,67,211,67,139, + 67,67,99,67,8,67,182,67,67,211,211,49,182,141,67,67, + 67,67,67,8,139,8,67,182,67,67,49,141,0,0,0,122, + 8,8,67,49,101,182,67,67,26,139,7,182,17,12,12,12, + 208,208,16,16,16,16,121,16,121,121,191,121,191,191,121,121, + 16,121,121,121,121,121,121,69,121,121,121,121,121,69,69,80, + 69,3,69,3,80,69,3,80,3,69,80,3,3,3,80,3, + 80,3,3,3,80,3,3,80,3,3,3,80,80,3,3,80, + 3,3,69,69,4,3,3,4,3,4,4,3,69,4,80,3, + 3,69,69,80,3,3,4,4,4,69,4,3,4,69,4,3, + 210,54,155,155,155,54,155,54,155,54,155,54,54,54,54,54, + 54,54,54,54,54,54,213,54,54,54,54,63,54,54,54,63, + 54,54,54,54,54,54,54,54,54,54,54,54,54,208,54,54, + 54,63,68,54,54,54,54,54,54,54,54,54,54,54,54,54, + 54,54,208,54,54,54,54,54,54,54,63,54,54,210,54,63, + 210,210,54,210,54,54,54,54,54,54,54,54,54,54,54,54, + 54,54,213,63,54,213,54,54,54,54,213,54,54,54,54,63, + 54,54,54,54,54,63,54,54,96,54,54,16,54,54,16,54, + 68,54,54,16,54,68,96,54,96,63,54,96,54,96,68,54, + 16,68,96,54,96,54,68,54,96,68,54,68,68,96,16,63, + 96,54,68,96,208,96,54,96,208,54,54,96,96,16,96,96, + 96,96,96,68,96,96,96,68,68,57,96,96,96,96,96,96, + 54,96,96,96,68,68,57,96,68,57,68,96,96,68,96,57, + 96,68,57,125,68,208,215,0,95,68,191,57,238,68,57,57, + 152,152,57,57,57,57,191,238,57,202,187,49,182,67,49,99, + 67,67,67,67,235,49,49,99,49,49,145,67,99,49,67,67, + 67,99,67,49,49,99,99,235,12,99,49,99,49,99,139,0, + 121,145,191,121,121,191,238,69,238,238,238,57,57,121,238,238, + 238,238,238,69,57,69,69,238,121,238,238,121,57,69,202,202, + 202,125,238,121,191,57,202,202,191,121,191,238,69,238,121,202, + 202,121,238,238,121,202,57,121,238,238,238,191,238,57,238,191, + 191,80,225,69,57,69,80,57,57,202,57,57,69,57,69,57, + 57,57,80,57,80,57,57,57,69,69,80,80,57,57,69,238, + 199,238,191,69,57,80,57,57,57,57,80,80,57,80,202,80, + 57,80,57,80,57,80,57,69,57,80,69,69,69,57,69,57, + 69,57,69,69,69,69,57,80,69,80,80,80,80,80,80,199, + 199,80,80,80,80,80,80,238,26,12,150,243,243,150,243,12, + 150,243,243,141,8,243,243,8,141,17,243,8,12,12,243,243, + 243,243,243,12,141,243,243,150,141,211,211,17,0,0,0,0, + 12,243,243,243,12,12,8,141,122,12,26,26,26,12,12,12, + 69,69,80,199,225,199,145,80,80,199,199,80,80,80,80,80, + 199,80,80,199,199,199,199,80,199,199,199,80,199,199,80,69, + 80,69,80,69,3,80,3,69,80,3,3,80,69,80,3,3, + 3,80,80,3,3,3,3,3,80,3,3,3,69,3,80,3, + 80,3,3,80,3,4,4,69,4,69,80,4,69,3,69,4, + 4,3,3,3,80,69,3,4,3,69,69,69,3,69,4,4, + 155,155,210,155,210,155,155,54,155,54,155,54,210,54,210,54, + 54,54,54,54,54,54,210,54,54,54,54,54,54,213,54,54, + 54,213,54,54,54,54,54,54,54,213,208,54,54,54,54,54, + 63,68,63,54,54,54,54,54,54,54,54,54,63,54,63,63, + 54,63,54,63,54,63,63,63,63,63,54,63,63,54,210,54, + 54,54,210,54,210,210,210,155,54,54,54,54,54,54,210,54, + 54,54,54,54,54,54,54,54,54,54,63,54,54,54,54,54, + 54,54,54,54,68,54,54,54,208,68,54,54,54,54,63,54, + 208,54,54,54,54,54,208,54,16,54,54,54,68,54,54,54, + 68,96,54,96,54,68,63,68,54,54,54,54,54,54,68,54, + 208,68,54,54,68,208,54,96,54,96,96,54,96,96,68,96, + 96,96,57,96,68,68,96,96,96,96,68,68,96,238,96,152, + 254,99,254,254,59,141,254,141,59,141,95,141,166,141,141,111, + 141,141,95,254,254,132,219,183,187,141,254,254,254,254,224,182, + 254,254,254,111,109,111,111,132,111,111,166,111,187,187,111,109, + 187,224,111,109,183,187,109,132,187,219,26,111,187,187,132,111, + 187,12,111,219,224,150,12,132,187,183,254,187,132,109,150,17, + 150,132,141,246,141,187,219,166,132,166,150,132,166,187,132,132, + 17,132,17,215,132,166,166,132,183,132,166,187,166,187,166,111, + 166,132,183,215,219,219,183,215,221,221,42,183,221,219,219,215, + 56,122,183,183,219,166,219,219,219,132,132,17,132,132,215,56, + 215,183,221,132,215,215,215,215,56,215,56,56,215,183,215,183, + 219,215,215,183,183,215,215,215,215,215,215,215,183,215,215,215, + 215,132,215,215,183,183,215,219,215,219,215,215,183,215,215,215, + 183,215,183,215,183,215,0,215,215,215,215,215,215,215,215,183, + 215,56,215,215,215,215,215,215,215,215,183,215,215,221,221,215, + 215,221,221,221,221,221,219,17,187,254,109,111,150,111,109,254, + 109,211,187,187,12,150,150,150,187,132,187,109,150,109,12,187, + 150,150,109,109,12,211,12,109,187,150,141,139,109,8,211,109, + 211,187,243,150,243,109,109,12,211,150,243,243,243,243,243,12, + 132,56,42,42,219,219,221,42,122,221,56,183,183,183,219,183, + 183,221,219,183,183,219,183,219,219,219,219,26,122,215,3,69, + 3,69,3,80,69,3,3,80,69,80,80,3,69,3,80,80, + 3,3,3,80,3,80,3,3,3,80,3,80,3,3,3,3, + 3,80,3,4,69,3,80,3,3,4,3,3,3,69,4,69, + 4,4,69,4,3,4,4,69,4,4,4,3,4,4,3,69, + 155,210,155,54,155,54,210,54,210,54,54,210,54,210,54,54, + 54,54,54,54,54,54,54,54,54,54,54,63,63,54,54,54, + 63,54,54,54,54,54,54,63,63,54,54,54,54,63,54,54, + 63,54,63,54,54,54,54,54,63,54,54,54,63,54,54,63, + 54,54,54,63,54,54,54,54,54,63,54,54,63,63,63,210, + 210,54,210,54,54,54,54,210,210,54,54,54,54,54,54,54, + 54,210,213,54,210,54,54,54,54,213,54,54,54,54,54,54, + 54,54,63,63,54,54,54,54,63,68,54,63,54,54,54,54, + 96,54,54,96,54,54,54,54,54,54,54,208,54,96,54,63, + 54,54,16,54,63,68,54,96,96,54,96,96,96,54,96,54, + 63,96,54,208,96,96,96,68,54,96,96,96,54,96,96,96, + 96,54,96,96,96,96,96,68,57,96,96,96,96,96,208,96, + 56,122,243,243,187,122,182,26,109,219,12,17,109,211,182,187, + 139,17,26,254,187,42,67,67,182,122,42,26,26,91,182,109, + 211,139,109,12,182,182,67,182,182,211,67,99,182,49,182,99, + 67,235,99,99,17,17,211,150,139,109,219,182,182,67,99,49, + 99,235,182,26,64,235,99,99,182,42,99,182,99,182,99,49, + 99,211,99,187,150,109,67,99,67,111,12,99,67,67,182,67, + 99,182,182,211,12,182,139,182,243,182,182,99,182,67,224,67, + 99,182,182,182,139,99,182,99,139,132,26,182,8,99,49,99, + 67,254,139,182,211,182,182,182,139,211,182,211,182,99,150,182, + 17,109,99,182,182,67,182,182,182,99,182,211,139,182,182,182, + 99,67,182,182,211,182,67,182,99,182,182,99,67,182,99,243, + 99,141,182,182,141,99,8,211,182,8,182,182,182,67,139,182, + 67,182,182,182,211,182,141,67,243,182,243,211,182,182,182,182, + 182,182,99,99,67,182,182,182,182,182,67,182,211,182,139,211, + 182,8,67,67,182,99,182,243,139,99,235,99,99,67,67,99, + 67,182,49,49,67,99,67,67,235,99,67,182,67,99,49,67, + 67,182,49,99,67,99,49,99,182,67,182,49,99,67,182,67, + 67,211,49,182,67,67,67,182,182,99,99,67,67,182,67,182, + 141,182,182,67,243,67,141,67,67,182,182,182,141,182,67,182, + 67,182,141,67,182,141,67,182,182,182,182,67,17,12,69,69, + 69,3,3,69,80,69,69,3,3,3,80,80,80,69,3,3, + 80,3,3,80,69,3,80,3,3,3,3,3,69,80,3,69, + 3,4,4,4,69,69,3,4,3,69,69,80,4,69,3,4, + 4,4,4,69,3,69,3,69,3,4,4,4,4,69,3,4, + 155,210,155,155,155,155,54,210,155,54,54,210,54,54,54,54, + 210,54,210,54,54,54,54,210,54,54,54,54,54,54,54,54, + 54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54, + 54,54,54,63,54,63,54,63,54,63,63,210,54,63,63,63, + 63,63,63,54,54,210,63,63,63,54,210,210,54,210,54,210, + 54,210,54,210,210,155,210,54,54,54,210,54,54,54,54,54, + 54,54,210,54,54,54,54,54,54,54,63,54,54,54,54,54, + 54,54,54,54,54,54,54,54,54,63,54,54,54,54,54,54, + 54,54,54,54,54,54,96,54,54,96,54,54,54,208,54,96, + 54,96,54,96,96,54,96,54,54,96,54,54,54,96,54,96, + 96,54,96,54,54,54,96,63,54,96,96,54,96,208,54,96, + 54,96,96,96,96,96,68,96,96,96,96,96,96,68,96,96, + 219,243,139,99,211,26,49,182,182,182,211,211,211,182,243,109, + 182,243,26,243,99,182,12,12,141,91,26,67,243,219,12,150, + 150,182,182,187,182,182,235,67,211,67,99,139,99,99,99,182, + 182,211,99,67,12,26,182,67,182,182,182,139,67,182,182,67, + 182,99,139,42,8,235,235,99,109,42,17,109,67,26,182,254, + 67,99,211,67,26,26,64,182,109,187,26,99,139,59,59,67, + 99,224,67,182,99,182,182,211,109,139,67,139,59,182,99,182, + 182,243,64,182,99,211,219,67,67,99,132,219,67,99,182,99, + 99,67,182,99,99,67,182,182,182,182,99,182,211,17,243,182, + 26,141,99,182,99,109,219,150,67,99,182,182,182,182,99,182, + 182,182,182,99,243,99,182,182,67,182,182,243,99,99,243,254, + 109,67,182,182,182,182,182,182,182,182,211,182,182,182,224,182, + 109,109,211,182,141,182,211,182,254,67,141,99,67,182,182,211, + 182,182,182,182,99,8,243,243,99,182,109,182,141,182,182,141, + 182,182,254,67,182,182,182,109,109,182,67,141,182,99,211,211, + 182,150,109,99,211,12,182,99,139,243,150,150,182,141,99,182, + 139,67,182,182,182,8,67,182,150,211,211,99,182,8,243,211, + 182,243,211,211,182,141,182,243,17,8,67,8,182,182,8,8, + 182,67,8,141,8,182,243,182,8,67,8,8,67,141,67,141, + 67,67,182,8,67,182,182,8,8,141,67,8,17,12,69,69, + 69,80,3,80,3,80,80,80,80,3,3,3,80,3,69,80, + 3,69,3,3,3,3,3,80,3,80,69,80,3,3,80,3, + 69,69,69,80,3,3,80,69,80,3,4,4,3,3,69,69, + 69,69,69,4,3,3,69,4,4,3,69,69,3,4,4,4, + 155,155,155,210,210,210,155,54,155,54,155,54,210,54,54,54, + 54,54,210,54,210,54,54,54,54,54,54,54,54,54,54,54, + 54,54,54,54,54,54,54,54,54,63,54,63,54,63,54,63, + 54,54,54,54,54,63,54,54,63,54,54,210,210,210,63,210, + 54,54,210,210,54,54,210,54,210,54,54,210,54,210,63,210, + 210,210,54,54,210,210,210,210,155,54,54,155,54,54,210,54, + 54,54,54,54,54,54,54,54,54,54,54,63,54,54,63,54, + 63,54,54,54,63,54,54,54,54,54,54,54,54,54,96,54, + 208,54,54,208,54,63,54,54,54,96,54,54,54,54,54,96, + 208,54,54,54,96,54,54,54,54,16,96,96,54,68,54,54, + 63,63,54,96,54,63,96,96,208,54,96,96,96,96,96,68, + 96,54,96,96,96,96,96,96,96,96,96,96,96,96,54,208, + 219,67,67,141,211,182,99,182,67,139,182,182,182,67,182,211, + 99,182,211,67,139,99,211,67,182,219,109,109,183,219,182,99, + 12,17,150,150,67,211,224,132,211,67,182,8,211,8,182,182, + 182,211,211,182,109,109,64,99,99,139,182,182,67,182,99,64, + 99,235,187,187,162,42,254,26,187,99,109,109,99,187,211,12, + 211,99,109,59,187,67,67,64,99,111,224,214,182,49,99,99, + 99,67,182,59,99,67,99,109,182,109,99,64,67,64,99,99, + 99,26,99,211,182,182,182,99,99,49,99,182,182,99,182,182, + 99,99,99,67,109,182,187,182,99,67,182,182,99,99,111,67, + 12,182,67,211,182,182,224,111,67,99,182,182,99,182,235,182, + 99,182,182,99,67,99,99,99,99,182,254,182,99,182,211,182, + 182,99,99,109,254,182,182,67,182,99,109,182,99,99,59,99, + 182,182,182,67,182,182,182,182,182,182,182,182,99,182,211,182, + 182,211,182,211,99,182,150,17,182,99,211,182,99,12,182,99, + 182,211,182,182,254,67,182,182,211,182,67,254,182,182,182,182, + 182,182,211,182,211,243,8,182,254,243,211,182,182,182,182,182, + 182,67,182,67,182,182,67,211,67,182,211,211,182,211,182,182, + 182,182,182,211,182,139,67,8,8,8,67,67,67,182,182,211, + 182,67,8,182,67,139,182,67,182,182,182,8,182,8,67,8, + 67,8,67,139,182,67,182,141,101,8,8,243,12,12,69,3, + 3,80,69,3,3,3,3,3,80,80,3,80,3,80,3,80, + 69,80,80,69,80,3,3,3,3,3,69,3,69,3,4,4, + 4,3,3,3,80,3,3,69,3,80,3,69,69,80,3,80, + 3,3,3,69,80,4,3,69,69,3,3,4,3,4,4,3, + 217,210,155,155,210,155,210,155,54,155,54,155,54,155,155,210, + 210,54,54,54,54,54,54,210,54,210,54,54,54,54,54,54, + 54,54,63,54,54,63,54,63,63,54,54,54,63,54,63,54, + 54,63,54,63,63,54,63,210,54,210,210,210,54,210,210,63, + 155,210,54,63,210,210,210,210,54,210,210,54,210,210,54,210, + 54,210,210,210,54,210,210,54,155,54,210,54,54,210,54,54, + 54,54,54,54,54,54,54,54,63,54,54,54,54,54,54,63, + 54,54,54,63,54,54,63,54,54,208,54,54,54,54,54,63, + 54,63,54,54,54,54,54,54,54,208,54,96,54,96,54,63, + 54,54,96,54,208,54,96,96,54,54,208,96,208,208,96,54, + 96,54,54,54,96,54,54,96,54,96,96,63,54,96,208,63, + 96,96,208,96,96,96,96,96,54,16,96,96,208,96,208,54, + 78,26,42,0,150,182,8,182,99,99,182,99,182,139,182,182, + 109,99,182,67,99,99,182,67,150,42,99,235,224,67,99,99, + 99,150,99,99,254,99,187,182,182,111,211,99,254,109,182,99, + 182,182,182,99,67,67,235,99,67,99,67,99,182,99,235,139, + 109,26,78,187,26,187,187,187,187,211,221,187,139,182,99,99, + 235,182,99,182,59,67,44,67,99,182,139,64,109,139,64,99, + 99,99,99,67,99,67,59,182,99,182,109,187,99,99,67,182, + 99,141,182,99,99,182,99,150,17,99,99,67,224,139,59,187, + 109,99,187,111,99,224,109,111,182,111,132,182,182,67,99,99, + 99,109,67,59,182,182,67,99,99,59,109,109,182,224,182,182, + 182,182,182,182,182,182,99,182,182,99,211,182,99,99,182,67, + 99,99,182,254,12,99,182,111,99,99,182,59,182,182,67,99, + 224,99,182,59,99,99,182,99,182,182,182,67,139,182,182,224, + 182,182,182,182,182,99,182,182,109,254,182,182,182,182,182,182, + 224,182,99,109,122,224,182,182,224,109,139,182,182,182,211,182, + 67,182,182,182,99,99,109,182,182,211,182,243,224,182,182,224, + 182,182,254,139,99,182,243,42,182,182,182,182,182,182,8,211, + 182,182,182,182,211,182,8,182,99,182,141,26,17,182,139,182, + 182,182,182,182,8,182,182,141,67,67,182,182,8,182,211,182, + 211,182,141,182,8,8,8,8,8,182,182,8,12,12,69,69, + 69,3,69,80,3,80,80,80,3,3,80,3,80,3,69,3, + 80,3,3,69,3,80,3,80,69,80,3,69,4,69,3,4, + 3,3,4,4,3,80,3,3,3,3,69,3,3,69,69,69, + 3,80,3,4,3,3,69,3,4,4,4,4,4,4,4,4, + 217,210,155,155,155,210,210,155,210,210,54,155,54,54,54,54, + 210,210,54,210,54,210,54,210,54,54,210,210,54,54,54,54, + 210,54,63,54,54,210,54,54,63,63,54,54,54,54,63,63, + 54,63,54,54,63,63,63,210,210,210,54,210,210,210,210,63, + 210,210,210,54,210,54,210,210,63,63,210,54,210,210,210,210, + 210,54,210,210,54,210,210,54,210,54,210,54,54,54,210,54, + 210,210,54,210,54,54,54,54,54,210,54,210,54,54,54,54, + 63,63,54,54,63,54,54,54,54,63,54,54,54,63,54,54, + 54,63,54,54,54,54,96,54,54,54,54,54,54,54,54,68, + 54,208,54,54,63,54,54,54,54,54,54,54,54,63,96,54, + 54,54,54,54,54,54,54,54,96,54,96,54,96,54,96,54, + 96,54,208,96,208,96,96,96,96,96,96,96,96,96,210,210, + 215,99,211,109,211,254,211,99,235,67,67,139,67,99,67,182, + 211,182,99,235,235,67,67,99,99,12,182,67,211,99,235,64, + 67,49,64,139,211,235,109,182,12,42,12,67,99,99,49,99, + 99,99,99,99,99,64,235,224,111,99,67,99,99,214,109,78, + 187,187,187,187,132,187,12,141,12,187,182,224,99,109,139,182, + 182,219,187,26,187,187,187,26,187,219,26,211,26,78,211,235, + 59,67,64,67,99,99,235,99,214,64,26,42,211,64,139,99, + 64,99,99,99,235,187,26,17,26,182,109,67,219,187,182,42, + 26,150,132,219,182,187,17,187,132,187,49,235,99,219,99,211, + 99,99,99,49,99,109,182,109,64,211,67,99,99,67,99,235, + 64,182,182,182,109,182,99,235,99,99,150,182,67,99,99,64, + 67,64,67,211,109,214,99,99,64,99,99,99,67,64,67,109, + 187,99,49,99,99,99,67,99,99,99,182,99,99,99,99,99, + 99,99,99,182,99,67,187,150,99,67,67,99,99,150,182,12, + 99,235,109,211,26,42,139,99,99,99,49,224,99,49,67,99, + 99,182,67,67,67,67,187,67,67,182,182,67,67,99,49,99, + 67,67,99,211,139,99,17,42,99,67,99,67,211,99,49,99, + 49,182,67,182,67,99,67,67,182,67,99,42,187,67,182,139, + 67,67,67,67,67,49,67,67,49,67,67,67,67,49,67,67, + 182,67,67,67,67,67,67,67,67,8,49,17,182,243,16,121, + 3,69,3,69,80,3,3,3,80,3,3,80,3,80,80,3, + 69,80,3,80,3,3,69,3,3,3,80,3,3,4,4,69, + 3,69,3,69,3,4,4,69,69,80,3,80,3,3,3,69, + 3,69,3,69,3,4,4,3,4,4,69,4,4,4,4,3, + 155,217,155,210,210,210,210,210,54,210,210,210,155,54,210,54, + 54,54,210,54,54,54,54,54,54,210,54,54,54,210,210,63, + 54,63,54,210,63,54,54,54,54,54,54,63,63,63,54,54, + 63,54,54,210,54,54,210,210,54,210,155,210,210,210,210,210, + 210,210,210,210,210,210,63,210,54,210,210,210,54,210,210,54, + 210,155,54,210,210,210,155,210,54,210,54,210,54,210,54,210, + 54,54,210,54,210,210,54,210,63,54,63,54,210,63,63,63, + 54,54,54,54,54,54,63,63,54,54,54,208,54,54,54,54, + 54,54,63,54,54,54,54,63,54,54,63,54,208,54,54,63, + 208,54,96,54,96,63,96,96,54,54,96,54,96,96,63,54, + 210,245,63,54,63,245,63,54,63,96,54,96,63,96,96,96, + 54,96,96,54,68,96,96,96,96,96,96,68,96,96,63,191, + 219,109,49,182,182,243,219,139,64,67,111,109,182,109,67,99, + 235,211,211,187,182,132,182,109,182,183,187,67,182,211,139,99, + 187,224,235,59,150,211,99,109,150,132,187,67,99,145,64,109, + 67,67,235,99,109,91,139,182,187,99,67,211,64,224,111,12, + 243,8,109,12,12,243,150,12,243,17,254,99,64,111,243,182, + 166,26,12,109,12,150,132,150,187,211,150,187,109,187,109,139, + 182,187,67,64,182,224,8,99,67,64,12,187,109,111,219,211, + 49,64,235,182,67,111,187,150,166,111,111,182,26,150,187,8, + 12,187,12,12,166,12,8,12,150,187,254,182,254,219,12,187, + 26,67,67,99,64,182,111,17,99,219,99,99,182,150,64,67, + 49,99,99,17,8,99,182,99,182,99,182,99,109,187,182,187, + 12,99,182,109,12,99,49,99,49,99,99,182,182,99,59,99, + 78,109,99,211,64,99,67,99,235,224,109,139,99,235,99,67, + 67,99,67,99,99,187,26,187,99,99,99,235,64,26,182,150, + 99,99,166,17,132,187,150,49,49,235,99,26,109,109,235,99, + 111,162,67,182,67,99,182,99,49,182,182,182,49,182,187,12, + 99,99,49,150,17,67,12,12,235,49,139,211,17,243,182,182, + 182,8,99,141,67,182,67,141,8,211,67,139,182,67,211,182, + 99,67,67,182,182,99,67,141,67,219,49,99,67,67,182,67, + 182,67,67,182,243,132,12,67,67,182,8,141,8,8,69,80, + 69,80,69,80,3,80,3,80,3,80,3,3,80,3,3,80, + 69,69,3,69,80,3,3,80,3,69,3,4,4,69,4,3, + 69,4,4,4,69,69,80,3,4,3,4,4,3,3,80,3, + 69,4,4,4,69,4,4,4,69,3,3,69,69,4,3,69, + 155,210,217,210,155,210,210,210,210,54,210,54,210,210,54,210, + 54,54,54,210,54,210,54,54,54,54,210,54,54,54,54,63, + 54,210,54,54,63,63,210,54,63,63,54,54,54,210,63,54, + 63,63,54,210,210,54,210,210,210,210,210,210,210,210,210,155, + 210,210,210,210,210,210,210,210,210,210,54,155,210,210,210,210, + 210,210,54,155,210,54,210,155,210,54,54,54,54,54,54,54, + 54,54,54,54,54,210,54,54,210,54,63,54,54,54,54,63, + 54,63,63,54,63,54,54,63,54,63,54,63,54,63,54,54, + 54,54,63,63,63,54,54,54,54,54,54,54,63,96,54,54, + 96,63,54,54,96,63,54,54,54,63,54,63,54,54,245,54, + 63,54,63,245,63,54,54,54,63,245,54,54,96,210,54,54, + 245,54,96,63,96,54,96,208,96,63,96,208,63,54,211,7, + 235,49,235,7,49,7,49,7,49,49,49,67,139,67,49,67, + 67,67,211,139,49,49,49,101,49,101,8,101,49,49,49,235, + 7,67,7,49,49,49,49,7,8,67,7,49,7,7,49,49, + 49,49,49,7,49,67,67,8,7,49,139,49,7,67,67,49, + 67,49,67,49,139,8,7,49,49,49,7,49,7,49,235,7, + 7,235,7,49,49,49,49,49,49,49,67,49,49,49,7,49, + 235,49,67,7,67,67,67,49,67,101,49,139,67,139,67,67, + 8,49,67,49,49,49,49,67,67,49,49,49,101,49,67,182, + 235,49,49,7,49,49,235,7,235,7,235,7,7,235,7,7, + 67,49,49,7,49,7,49,7,7,7,49,7,49,7,49,49, + 7,7,67,49,235,7,7,49,7,7,49,7,49,49,67,7, + 67,67,67,67,49,7,49,49,49,101,7,49,49,7,49,49, + 67,7,182,49,49,49,49,67,101,7,67,101,101,7,139,67, + 67,7,67,139,101,7,12,101,7,139,101,8,7,67,7,139, + 49,8,7,8,101,8,49,67,101,101,7,7,67,67,7,7, + 7,49,49,101,49,49,49,67,7,67,7,7,49,7,7,7, + 7,67,8,101,101,67,8,101,8,8,8,8,8,101,8,8, + 8,7,8,8,101,8,101,8,7,8,8,67,8,7,8,7, + 7,101,7,7,7,8,7,7,67,8,8,8,8,141,8,8, + 8,8,8,7,7,7,7,7,7,7,7,7,7,7,7,8, + 121,3,69,3,69,3,80,3,3,80,69,80,3,80,3,69, + 3,69,3,3,69,3,3,3,80,3,69,3,80,3,4,4, + 3,69,4,4,3,69,3,4,4,69,69,3,69,3,80,3, + 80,3,80,3,69,69,4,4,69,3,3,3,4,69,4,4, + 217,217,210,217,210,210,210,155,210,210,210,210,210,54,210,54, + 210,210,210,54,210,54,210,210,54,210,54,54,210,54,210,54, + 63,54,54,210,54,54,54,63,54,54,54,63,210,54,54,210, + 63,54,210,54,63,210,63,210,210,210,155,155,155,155,155,210, + 155,210,210,210,210,210,210,210,210,210,155,210,210,210,210,210, + 155,210,155,210,210,155,210,54,210,210,210,210,54,210,210,54, + 210,210,54,210,54,54,54,210,54,54,54,54,210,63,63,54, + 63,54,54,63,54,54,63,54,63,54,54,54,63,54,63,54, + 63,54,54,54,54,63,54,63,63,63,54,63,54,63,63,54, + 63,54,54,63,54,96,54,96,63,54,245,54,54,54,54,54, + 96,54,54,54,54,54,63,54,54,96,63,54,63,245,54,54, + 54,96,54,96,54,96,63,96,96,96,63,96,54,155,243,8, + 67,49,67,49,49,67,49,67,67,49,7,8,12,67,67,8, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,150,150,243,12,17,243,12,26,12,150,150,12,12,12,12, + 12,12,12,17,12,12,26,12,17,12,12,26,12,12,12,12, + 17,17,150,243,12,26,12,150,12,17,150,150,8,12,8,12, + 12,26,12,12,12,26,26,12,26,17,8,17,150,150,12,26, + 12,17,26,26,26,12,26,26,26,26,26,12,17,219,17,26, + 26,26,26,219,219,17,26,26,26,17,150,26,219,12,26,12, + 12,243,150,12,8,150,12,150,12,150,12,243,150,17,219,219, + 26,17,26,219,132,219,17,26,219,26,219,219,219,17,219,132, + 219,132,12,12,17,132,17,219,26,166,219,42,17,219,219,26, + 219,17,26,17,26,42,26,26,26,42,26,17,26,26,17,17, + 219,219,12,17,12,12,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,12,26,17,26,26,26,12, + 26,26,26,26,12,26,150,8,26,17,219,12,12,12,12,12, + 12,12,12,12,12,12,12,12,26,150,17,150,12,12,12,12, + 12,12,12,12,26,12,12,12,243,26,8,150,12,12,12,12, + 26,8,12,12,8,8,12,12,12,12,26,8,150,12,243,12, + 12,12,17,12,12,150,12,12,26,26,12,26,12,12,12,12, + 12,26,26,26,12,12,12,12,26,8,12,26,12,26,42,7, + 121,69,80,69,80,69,80,69,3,69,80,3,69,3,80,69, + 80,69,69,80,69,3,80,69,3,69,3,4,4,3,4,4, + 4,4,3,3,4,3,4,3,3,3,3,3,80,3,3,3, + 3,3,69,4,80,4,3,3,4,4,4,4,4,4,3,69, + 155,155,155,217,210,155,210,155,210,210,210,210,210,54,210,54, + 54,54,54,54,54,210,54,210,54,210,54,54,54,54,210,54, + 210,210,54,63,210,54,54,63,63,63,54,54,210,210,63,54, + 210,54,210,210,210,210,210,210,210,210,155,155,155,155,155,155, + 155,155,210,210,210,155,210,155,155,210,210,210,210,155,155,210, + 210,210,155,155,210,155,155,210,210,210,54,210,210,54,210,54, + 54,54,54,210,54,210,54,63,210,210,210,54,54,54,63,54, + 63,54,54,63,63,54,63,54,63,63,54,54,63,54,63,54, + 63,54,54,54,54,63,54,54,54,63,54,54,54,54,54,54, + 63,245,54,63,63,54,63,54,54,54,54,54,54,63,96,210, + 63,63,210,63,63,245,63,245,63,54,245,54,96,54,63,96, + 63,96,54,96,54,96,96,208,96,96,96,96,63,210,192,122, + 26,26,219,12,8,0,12,0,0,0,0,0,0,0,0,0, + 0,0,122,122,122,42,26,42,122,0,0,0,0,0,0,0, + 0,0,0,0,0,122,122,219,42,0,0,0,0,0,122,122, + 122,0,0,0,0,0,122,122,26,42,0,122,0,0,0,0, + 0,0,0,0,0,0,0,122,122,42,42,0,0,122,0,0, + 122,122,122,0,0,122,122,122,122,122,26,42,0,0,0,122, + 122,0,0,122,122,0,122,122,122,122,42,26,42,0,0,0, + 0,0,0,122,0,0,0,0,122,0,122,122,26,42,0,122, + 0,0,0,0,0,0,0,0,0,0,0,0,122,26,122,0, + 122,0,0,0,0,0,0,0,0,0,0,0,122,122,42,42, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,122,26, + 42,0,0,0,0,0,0,0,0,0,0,0,0,0,0,122, + 42,42,0,0,0,0,122,0,0,0,122,0,0,0,0,0, + 122,26,42,0,0,0,0,0,122,122,122,0,0,0,0,122, + 42,42,219,26,122,122,122,0,0,122,0,0,0,0,0,0, + 0,42,122,26,42,0,122,0,0,0,0,0,0,0,0,0, + 122,122,122,42,26,26,122,122,0,122,0,122,122,122,122,122, + 122,122,122,42,122,26,26,122,122,122,122,122,122,122,0,0, + 122,0,0,0,0,122,26,42,122,42,122,122,122,122,122,122, + 122,122,122,122,0,0,122,219,26,26,12,12,12,26,26,3, + 121,3,69,3,69,3,69,80,69,3,69,80,3,69,69,3, + 69,80,3,69,80,69,3,3,80,3,3,4,4,4,4,4, + 4,69,4,69,4,69,69,69,3,80,4,3,80,3,80,4, + 69,3,3,4,3,69,4,3,4,4,3,69,3,4,3,69, + 217,217,217,210,217,217,217,210,210,210,210,210,210,210,54,210, + 210,210,210,210,210,54,210,54,210,54,210,210,210,54,54,54, + 63,54,210,54,54,210,210,54,210,54,63,63,63,54,54,210, + 63,210,54,210,54,210,210,210,210,155,210,155,155,210,210,210, + 210,155,155,155,155,155,155,210,155,155,155,155,155,155,155,155, + 155,155,155,155,155,155,155,210,210,210,210,54,210,54,210,54, + 210,210,210,54,210,54,210,54,63,54,54,54,210,210,54,63, + 54,63,63,54,54,210,54,63,54,54,63,63,54,63,54,63, + 54,63,63,63,63,54,54,63,54,54,54,63,63,54,63,210, + 54,63,245,54,54,210,245,54,63,63,245,63,63,54,63,54, + 245,54,54,54,54,63,54,63,54,54,96,63,54,63,96,54, + 245,63,96,63,63,96,63,96,96,96,63,96,96,210,68,12, + 8,8,101,8,12,17,8,0,14,216,41,62,62,62,62,62, + 62,62,62,62,62,59,219,17,0,14,216,41,62,62,62,62, + 62,62,62,62,62,41,75,26,17,0,14,216,62,41,62,249, + 62,62,62,62,62,62,41,75,26,17,0,14,216,41,62,62, + 62,62,62,62,62,62,62,41,75,26,26,122,14,216,41,62, + 62,249,62,62,62,62,62,62,41,75,26,17,0,14,216,41, + 62,62,62,62,62,62,62,62,62,41,75,26,17,0,14,216, + 62,41,62,249,62,62,62,62,62,62,41,139,219,17,0,14, + 216,41,62,62,62,62,62,62,62,62,62,41,75,26,17,0, + 14,216,41,62,62,62,62,62,62,62,62,62,41,75,26,17, + 0,14,216,41,62,62,62,62,62,62,62,62,62,41,75,26, + 17,0,14,216,41,62,62,249,62,62,62,62,62,62,41,75, + 26,26,122,14,216,41,62,62,249,62,62,62,62,62,62,41, + 75,26,17,0,14,216,41,62,62,249,62,62,62,62,62,62, + 41,139,26,26,122,14,216,41,62,62,62,62,62,62,62,62, + 62,41,75,26,17,0,14,216,41,62,62,62,62,62,62,62, + 62,62,41,75,26,17,0,14,216,41,62,62,249,62,62,62, + 62,62,62,41,139,26,17,0,14,216,41,62,62,249,62,62, + 62,62,62,62,41,75,26,17,0,14,216,41,62,62,249,62, + 62,62,62,62,62,41,139,26,12,12,8,8,7,7,12,69, + 69,69,69,80,69,80,69,3,69,3,69,69,80,3,69,80, + 69,69,3,69,3,3,69,3,3,80,69,4,4,4,69,4, + 3,4,4,4,3,3,80,4,4,3,80,3,3,3,3,3, + 4,3,69,69,80,3,69,4,4,69,4,3,4,69,4,3, + 155,155,217,217,210,210,210,155,210,210,210,210,54,210,210,54, + 54,54,54,54,210,54,210,54,54,54,54,54,210,210,210,54, + 210,54,210,63,54,54,210,54,210,54,54,54,210,210,54,210, + 54,155,210,210,210,210,210,210,210,155,210,210,155,217,217,155, + 210,155,155,210,210,155,155,210,217,155,155,155,217,155,155,155, + 155,155,155,217,210,155,155,210,210,210,210,210,210,54,210,210, + 54,54,54,54,54,54,210,54,210,210,210,54,54,210,54,210, + 54,63,210,210,54,210,54,210,63,54,54,63,54,63,54,63, + 54,54,54,54,63,210,54,63,63,63,245,54,210,54,54,54, + 54,63,54,54,54,54,63,54,54,63,54,54,245,54,63,63, + 210,54,186,210,54,54,54,63,63,63,54,63,245,54,63,54, + 54,63,96,96,63,96,54,63,96,96,245,63,96,63,63,12, + 7,7,7,7,12,67,8,26,233,110,195,90,90,195,90,90, + 90,90,90,90,60,154,26,8,42,233,110,195,90,90,195,90, + 90,90,128,90,195,60,154,12,12,42,233,110,195,90,90,195, + 195,90,90,128,90,195,60,154,12,12,26,233,110,195,90,90, + 195,195,90,90,128,90,195,60,154,12,12,42,233,110,195,90, + 90,195,195,90,90,90,90,195,60,154,12,12,42,233,110,195, + 90,90,195,195,90,90,90,90,195,60,154,12,12,42,233,110, + 195,90,90,90,195,90,90,90,90,195,60,154,26,12,42,233, + 110,195,90,90,195,195,90,90,90,90,195,60,154,12,8,42, + 233,110,195,90,90,195,195,90,90,90,90,195,60,154,26,8, + 42,233,110,195,90,90,195,195,90,90,90,90,195,60,154,26, + 243,42,233,110,195,90,90,90,195,90,90,90,90,195,60,154, + 12,8,42,233,110,195,90,90,90,195,90,90,90,90,195,60, + 154,12,12,42,233,110,195,90,90,90,195,90,90,90,90,90, + 60,130,12,8,42,233,110,195,90,90,195,195,90,90,128,90, + 195,60,154,12,12,42,233,110,195,90,90,195,195,90,90,90, + 90,195,60,154,12,8,42,233,110,195,90,90,90,195,90,90, + 90,90,195,60,154,26,8,42,233,110,195,90,90,90,195,90, + 90,90,90,195,60,154,12,12,42,233,110,195,90,90,90,195, + 90,90,90,90,195,60,154,26,8,12,7,8,7,8,8,3, + 69,3,69,69,3,69,80,69,80,3,80,3,69,80,3,69, + 3,3,69,80,80,3,80,3,3,3,3,69,3,3,4,4, + 4,3,4,4,4,3,4,69,3,4,3,4,80,69,69,80, + 69,3,3,3,3,4,3,4,3,69,69,69,3,69,4,4, + 217,217,155,210,217,217,217,210,210,63,210,210,155,54,210,210, + 210,54,210,210,54,210,210,210,210,210,210,210,54,63,54,210, + 63,63,54,210,63,210,54,210,210,210,210,210,63,210,210,210, + 210,210,210,210,210,210,210,155,217,210,155,217,217,210,155,217, + 217,217,155,155,155,210,217,217,210,217,217,217,155,217,217,217, + 217,217,217,155,217,217,155,155,155,210,210,210,210,210,210,210, + 54,210,210,210,54,210,63,210,54,54,54,63,210,63,210,54, + 210,210,54,63,63,54,210,63,54,210,210,54,210,54,210,210, + 63,63,63,210,210,54,210,245,54,54,54,210,245,210,54,63, + 63,54,63,63,63,63,54,54,54,54,210,54,63,63,54,54, + 63,63,54,63,186,63,210,245,54,245,63,54,54,63,54,245, + 63,245,63,63,63,186,63,96,63,54,63,96,63,210,54,12, + 8,67,67,7,12,8,8,122,168,128,23,23,23,23,23,19, + 65,65,19,19,195,178,12,187,122,168,128,23,23,23,86,23, + 19,19,65,23,19,195,178,12,109,122,168,128,23,23,23,23, + 23,19,19,65,19,19,195,178,12,109,122,168,128,23,23,179, + 23,23,19,19,65,19,19,195,178,12,109,122,168,128,23,23, + 23,23,23,19,65,65,19,19,195,178,12,109,122,168,128,23, + 23,23,23,23,19,65,65,19,19,90,178,12,109,122,168,128, + 23,23,23,23,23,19,65,65,19,19,195,178,150,109,122,168, + 128,23,23,23,23,23,19,65,65,19,19,195,178,12,187,122, + 168,128,23,23,23,23,23,19,65,65,19,19,90,178,12,187, + 122,168,128,23,23,23,23,23,19,65,65,19,19,90,178,12, + 187,122,168,128,23,23,23,23,23,19,65,65,19,19,195,178, + 12,187,122,168,128,23,23,23,23,23,19,65,65,65,19,195, + 178,12,109,122,168,128,23,23,23,23,23,19,65,65,19,23, + 195,178,12,187,122,168,128,23,23,179,23,23,19,19,65,19, + 19,195,178,12,109,122,168,128,23,23,23,23,23,19,65,65, + 19,19,195,178,12,187,122,168,128,23,23,23,23,23,19,65, + 65,19,19,195,178,12,187,122,168,128,23,23,23,23,23,19, + 65,65,19,19,195,178,12,109,122,168,128,23,23,23,23,23, + 19,65,65,19,19,195,178,12,8,26,7,8,8,8,12,69, + 121,80,69,69,80,69,3,80,3,69,3,3,69,3,80,69, + 80,69,3,3,3,69,69,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,3,69,4,69,3,3,3,69, + 4,4,80,69,4,4,69,69,4,4,4,3,4,4,3,69, + 155,217,36,155,210,210,210,155,155,210,210,210,210,210,210,54, + 210,210,54,210,54,54,210,54,54,63,54,210,54,210,63,54, + 210,210,63,54,63,210,63,54,54,210,54,210,54,210,210,210, + 210,210,155,210,155,217,217,210,217,217,155,210,217,155,155,155, + 210,217,217,217,217,210,155,217,155,217,217,217,217,217,217,217, + 217,217,217,217,217,217,155,155,155,155,210,210,210,210,210,210, + 210,54,210,210,54,54,54,210,63,63,210,54,63,54,210,54, + 54,63,54,54,210,63,54,210,54,54,210,54,210,54,54,54, + 210,54,54,54,210,54,63,210,210,210,54,63,54,210,54,245, + 210,54,54,245,54,63,186,210,54,54,63,54,54,245,210,54, + 210,210,54,54,210,54,63,210,63,54,210,63,245,63,63,54, + 63,54,54,96,54,96,63,96,63,96,96,96,54,63,63,12, + 7,67,8,7,132,243,8,122,233,204,19,19,23,19,65,65, + 118,65,19,65,90,84,150,211,122,233,204,19,19,65,65,65, + 65,65,65,19,65,90,84,12,243,122,233,204,19,65,65,65, + 149,65,65,65,19,65,90,178,12,243,122,233,204,19,65,19, + 19,65,65,65,65,19,65,60,178,17,243,122,233,204,19,65, + 65,65,149,65,118,65,19,65,90,84,12,243,122,233,128,19, + 19,23,65,65,65,118,65,19,19,195,178,12,243,122,233,204, + 19,19,19,65,65,65,118,65,19,65,60,24,12,243,122,233, + 204,19,19,65,65,65,65,118,65,19,65,60,178,17,8,122, + 233,128,19,19,65,65,65,65,118,65,19,19,90,84,150,8, + 122,233,204,19,19,65,65,65,65,118,65,19,19,90,84,150, + 8,122,233,204,19,19,19,65,65,65,118,65,19,65,60,178, + 17,8,122,233,204,19,19,19,65,65,65,118,65,19,65,90, + 178,17,243,122,233,204,19,19,19,65,65,65,118,65,19,65, + 90,178,150,243,122,233,128,19,65,19,19,146,65,65,65,19, + 65,60,178,17,243,122,233,204,19,19,23,65,65,65,118,65, + 19,65,90,178,132,8,122,233,204,19,19,19,65,65,65,118, + 65,19,65,60,178,132,8,122,233,204,19,19,19,65,65,65, + 118,65,19,65,90,178,12,243,122,233,204,19,19,19,65,65, + 65,118,65,19,65,60,178,17,8,12,8,7,8,7,8,3, + 121,3,69,69,69,80,69,69,80,69,80,80,3,3,69,3, + 69,3,80,69,3,80,3,3,4,4,3,69,4,205,4,3, + 4,3,3,3,4,3,3,4,3,4,4,69,3,4,4,3, + 69,3,3,4,3,4,3,4,3,4,4,4,4,69,3,4, + 217,217,217,217,217,210,210,210,155,210,210,210,155,54,210,210, + 210,54,210,210,210,210,210,210,210,210,210,63,210,54,210,54, + 210,54,210,210,210,54,210,210,210,63,210,210,210,210,210,155, + 210,210,210,210,210,210,210,217,155,210,217,217,155,217,217,217, + 217,210,210,210,155,217,210,155,217,155,155,217,155,217,217,217, + 217,25,217,25,25,217,217,217,217,155,155,155,155,155,210,210, + 210,210,210,63,210,210,210,63,210,54,54,210,54,210,63,63, + 63,63,210,210,54,210,210,63,210,210,54,210,54,210,210,210, + 210,54,210,210,210,210,54,210,54,54,210,54,210,54,210,210, + 54,210,54,210,210,54,63,96,210,186,54,210,210,63,54,186, + 54,63,210,63,54,63,63,54,210,63,54,54,63,54,54,63, + 54,245,63,63,63,63,96,63,245,63,63,96,63,210,54,12, + 8,67,67,101,12,12,8,122,31,204,118,118,118,51,118,118, + 118,118,65,65,128,84,26,8,122,31,204,118,118,118,118,118, + 118,118,118,118,65,128,84,17,211,0,31,170,118,118,118,118, + 51,118,118,118,118,65,128,84,219,211,122,31,204,118,118,118, + 118,118,51,118,118,65,65,128,84,17,211,122,31,170,118,118, + 118,118,118,118,118,118,118,65,128,84,17,211,122,31,170,118, + 118,118,118,118,118,118,118,118,65,128,84,219,211,122,31,204, + 118,118,118,118,118,118,118,118,118,65,128,178,219,211,122,31, + 204,118,118,118,118,118,118,118,118,65,19,128,84,17,211,122, + 31,170,118,118,118,118,118,118,118,118,118,65,128,178,26,211, + 122,31,204,118,118,118,118,118,118,118,118,118,65,128,178,26, + 182,0,31,170,118,118,118,118,118,118,118,118,118,65,128,84, + 17,211,122,31,170,118,118,118,118,118,118,118,118,118,65,128, + 84,17,211,122,31,204,118,118,118,118,118,118,118,118,118,65, + 128,84,26,211,122,31,170,118,118,118,118,118,118,118,118,118, + 19,128,84,17,211,122,31,204,118,118,118,118,118,118,118,118, + 118,65,128,84,26,211,122,31,204,118,118,118,118,118,118,118, + 118,118,65,128,84,26,211,122,31,204,118,118,118,118,118,118, + 118,118,118,65,128,84,219,211,122,31,204,118,118,118,118,118, + 118,118,118,118,19,128,178,26,139,12,8,7,8,8,12,121, + 69,69,3,69,69,69,3,69,69,69,69,3,69,80,69,3, + 80,69,3,80,3,3,69,4,4,4,4,4,4,69,4,3, + 4,4,4,4,4,4,4,69,3,69,80,3,69,4,3,69, + 3,69,4,3,69,4,4,69,4,3,69,69,3,4,4,4, + 155,155,217,155,217,217,155,210,155,210,210,210,210,210,210,210, + 210,63,63,210,63,63,63,63,63,54,210,63,210,63,210,63, + 210,63,54,63,210,63,54,210,210,63,63,210,210,210,210,210, + 155,155,217,217,217,217,155,217,217,155,217,217,217,210,210,155, + 217,217,217,217,210,217,217,210,217,217,217,217,217,217,217,25, + 155,155,155,155,217,25,155,155,217,217,217,155,210,155,210,210, + 210,63,210,210,63,63,210,210,210,210,63,210,63,54,54,210, + 54,210,54,210,63,54,210,54,63,210,54,210,54,210,210,54, + 210,210,54,54,210,210,210,210,210,210,210,54,210,54,54,210, + 210,63,54,54,63,54,210,54,63,54,54,96,54,210,63,210, + 210,54,186,210,63,245,210,63,245,210,63,54,63,63,245,63, + 63,54,54,63,245,63,96,63,96,63,186,54,96,63,63,12, + 8,7,8,7,26,12,8,42,123,53,118,51,51,52,51,52, + 51,52,51,118,128,178,12,8,122,123,45,51,51,51,52,76, + 52,51,52,118,118,128,84,12,8,122,249,53,118,51,51,107, + 52,52,51,52,118,118,128,84,26,8,122,123,53,118,51,107, + 76,51,52,51,52,118,118,128,84,26,8,122,249,53,118,51, + 107,52,52,51,51,51,118,118,128,84,26,8,122,249,53,51, + 51,107,76,76,51,107,51,107,118,128,84,12,8,122,123,45, + 51,51,107,76,52,51,51,107,118,118,128,84,17,8,122,123, + 53,118,51,51,52,76,107,51,52,107,118,128,84,17,8,122, + 249,53,51,51,51,52,76,51,107,51,118,118,128,84,12,8, + 122,123,45,51,51,51,52,76,107,51,51,118,118,128,84,26, + 8,122,249,53,118,51,51,52,51,107,51,107,118,118,128,84, + 12,243,122,249,53,118,51,51,52,51,107,51,51,118,118,128, + 84,12,8,122,123,53,118,51,51,52,51,51,107,52,118,118, + 128,84,12,8,122,249,53,118,107,107,52,52,76,107,107,51, + 118,128,84,26,8,42,123,53,118,51,51,52,76,107,51,51, + 118,118,128,178,12,8,122,123,45,51,51,107,76,52,51,51, + 107,118,118,128,178,17,8,122,123,45,51,51,107,76,52,51, + 51,51,118,118,128,84,26,8,122,123,45,51,51,107,76,52, + 51,51,107,51,118,128,84,26,8,12,8,7,8,8,8,3, + 121,69,69,69,80,69,69,69,3,69,80,69,3,69,3,69, + 80,3,3,80,3,80,3,4,4,205,205,4,4,69,69,69, + 4,205,4,4,69,4,4,4,3,3,69,3,69,69,3,4, + 4,4,69,4,4,4,4,69,69,3,3,4,3,4,4,3, + 217,217,217,217,155,155,155,155,210,155,210,210,210,210,210,63, + 210,54,210,63,210,54,210,210,63,210,210,54,210,210,210,54, + 63,210,210,210,54,210,210,63,63,210,210,210,210,210,210,155, + 210,217,155,217,217,217,217,217,217,217,155,217,155,217,217,217, + 217,155,217,155,217,217,210,217,217,217,217,217,25,217,217,217, + 217,25,217,25,217,217,217,217,217,155,155,217,217,155,217,210, + 210,210,210,63,210,210,63,63,210,210,210,54,210,210,210,210, + 210,63,210,54,63,210,63,210,54,63,210,210,210,54,210,210, + 54,210,210,210,54,210,210,54,210,54,210,210,210,210,210,54, + 54,210,63,210,245,63,54,63,63,63,210,210,63,54,63,54, + 210,210,210,63,210,210,54,210,63,63,54,186,54,210,63,54, + 54,186,54,54,63,63,63,245,63,96,208,63,210,210,63,12, + 8,8,8,101,12,26,8,122,123,53,107,76,107,76,232,76, + 52,9,51,51,204,84,26,211,122,123,53,107,51,51,76,76, + 76,52,51,51,107,204,84,26,8,0,123,53,52,51,51,76, + 76,76,52,51,51,107,204,178,17,211,122,123,53,52,51,76, + 76,232,76,76,52,52,9,204,178,17,8,122,123,53,107,51, + 76,76,76,232,52,52,52,107,204,178,17,8,122,123,53,107, + 76,51,76,76,232,51,52,51,107,204,84,26,211,42,123,53, + 107,51,76,76,76,232,76,52,9,107,204,178,26,211,78,123, + 53,76,107,76,76,76,232,76,52,51,107,204,178,26,8,122, + 123,53,107,107,76,76,76,232,51,52,9,51,204,84,26,211, + 122,123,53,107,76,107,76,76,76,76,52,9,51,204,178,17, + 8,122,123,53,107,51,76,76,232,232,76,52,52,107,204,178, + 26,8,122,123,53,107,51,76,76,232,232,52,52,52,107,204, + 178,26,243,78,123,53,52,51,76,76,232,232,52,51,51,107, + 204,178,26,243,0,123,53,52,51,76,76,76,232,51,52,107, + 107,204,178,17,8,162,123,53,52,76,76,76,76,76,76,52, + 9,51,204,84,26,211,42,123,53,107,76,51,76,76,232,76, + 52,107,107,204,84,26,211,122,123,53,107,51,76,76,76,232, + 52,52,52,107,204,178,17,211,42,123,53,107,76,51,76,76, + 232,52,52,107,107,204,178,12,8,12,8,7,8,7,12,69, + 69,69,69,69,69,3,69,69,69,69,69,69,80,69,3,80, + 69,3,69,69,4,3,4,4,69,3,3,4,4,4,4,4, + 4,3,205,4,4,4,3,69,3,69,3,69,4,4,4,4, + 3,69,4,3,4,69,3,4,4,4,4,4,4,4,4,4, + 217,217,217,217,217,217,155,155,210,217,210,210,210,63,210,210, + 210,210,210,54,210,210,54,210,54,210,210,210,210,54,210,210, + 210,54,210,210,210,210,210,210,210,210,210,210,217,217,217,217, + 210,217,155,217,217,217,155,155,217,217,155,217,217,217,217,155, + 217,155,217,217,155,217,217,217,217,155,25,155,25,155,25,217, + 25,217,25,25,25,217,217,155,217,217,217,155,217,155,155,155, + 155,210,210,210,210,210,210,63,63,210,210,210,54,210,54,63, + 210,210,210,210,210,210,210,210,210,54,210,54,210,210,210,210, + 210,210,210,63,210,63,210,210,210,210,54,210,54,210,210,210, + 210,54,63,210,54,210,245,210,54,63,245,210,63,245,210,63, + 63,63,210,54,63,63,63,245,210,63,63,210,54,54,186,210, + 63,210,63,245,63,96,63,54,63,245,54,96,63,210,210,12, + 8,7,8,7,26,12,8,122,123,194,76,76,76,76,232,232, + 76,76,52,9,204,154,219,8,122,123,53,232,76,76,76,232, + 232,232,76,52,52,204,154,132,243,122,123,85,52,232,76,76, + 232,232,232,76,52,52,204,84,17,243,122,123,53,232,76,76, + 76,232,148,76,51,51,52,204,84,17,243,122,123,85,76,76, + 76,76,232,232,76,51,52,52,204,84,12,243,122,123,85,76, + 76,76,76,232,148,232,76,52,52,204,154,219,243,122,123,53, + 76,76,76,76,232,232,76,51,76,9,204,168,17,8,122,123, + 53,76,76,76,76,232,232,76,76,52,9,204,154,219,243,122, + 123,85,76,76,76,76,232,148,232,51,52,52,204,168,12,8, + 122,123,85,51,76,76,76,232,232,232,51,52,9,204,84,187, + 243,122,123,85,232,76,76,76,232,232,76,76,52,9,204,168, + 12,243,122,123,85,232,76,76,76,232,232,76,51,52,9,204, + 168,12,8,122,123,53,232,76,76,76,232,232,232,76,52,9, + 204,168,12,8,0,123,53,232,76,76,76,232,148,76,76,51, + 52,204,84,150,243,122,123,53,76,76,76,232,232,232,232,51, + 52,9,204,154,219,243,122,123,53,76,76,76,76,232,232,76, + 76,52,9,204,154,17,8,122,123,53,76,76,76,76,232,232, + 76,51,52,52,204,84,17,243,122,123,53,76,76,76,76,232, + 232,76,76,52,52,204,84,12,8,12,8,8,8,8,8,3, + 121,69,69,80,69,69,69,69,69,69,69,3,69,80,69,3, + 80,3,80,3,80,3,4,4,4,4,69,4,4,69,4,69, + 69,4,4,205,4,4,4,69,80,3,4,3,3,3,4,4, + 4,4,4,4,3,4,3,4,4,4,69,4,4,4,4,3, + 25,217,217,217,217,155,217,155,155,210,155,217,210,210,210,210, + 210,210,210,210,54,210,210,210,210,210,63,63,63,210,210,210, + 63,155,54,210,63,63,210,210,210,210,210,217,210,210,210,210, + 217,155,217,155,155,217,217,217,217,217,217,217,155,217,155,217, + 217,217,217,155,217,217,155,155,25,217,217,25,25,217,25,25, + 25,25,25,155,25,217,25,217,217,217,155,217,155,217,217,217, + 155,155,155,155,210,210,210,210,210,210,210,210,210,63,210,210, + 63,63,210,210,54,210,210,54,210,210,54,210,210,210,210,210, + 54,210,210,210,63,63,63,63,210,210,210,210,210,63,54,210, + 186,210,63,63,210,210,210,210,54,210,63,54,210,210,54,210, + 210,186,210,210,186,54,210,63,210,186,63,63,210,210,63,63, + 63,54,210,63,63,63,186,63,63,63,186,63,63,63,54,12, + 8,8,8,101,12,26,8,42,167,85,76,76,148,148,232,148, + 148,232,52,52,204,168,17,109,42,167,85,76,76,148,148,232, + 148,232,232,52,52,204,168,26,243,122,167,194,76,76,148,148, + 232,148,232,232,52,52,204,168,26,109,42,167,85,76,76,148, + 148,232,148,148,148,52,52,204,168,17,243,122,167,194,76,76, + 232,148,232,148,148,148,52,52,204,168,17,109,122,167,194,76, + 232,148,148,232,148,232,232,52,52,204,168,17,109,42,167,85, + 76,76,232,148,232,148,148,232,52,232,204,154,26,109,42,167, + 85,76,76,232,148,232,148,148,232,76,52,204,168,17,243,122, + 167,194,76,76,232,148,232,148,232,148,52,52,204,168,17,243, + 122,167,194,232,76,232,148,232,148,232,148,52,232,204,168,17, + 109,122,167,194,76,76,148,232,232,148,232,232,76,52,204,154, + 26,243,122,167,194,76,76,232,148,232,148,148,232,52,232,204, + 154,26,109,42,167,85,76,76,232,232,232,148,232,232,52,232, + 204,168,17,109,42,167,85,76,76,148,148,232,148,232,232,52, + 52,204,168,26,109,42,167,194,76,76,148,232,232,148,232,148, + 76,52,204,168,17,109,42,167,85,76,76,148,148,232,148,232, + 232,52,232,204,168,17,109,42,167,85,76,76,232,232,232,148, + 148,148,52,52,204,168,17,109,42,167,85,76,76,148,148,232, + 148,232,232,52,52,204,168,26,8,12,7,8,7,8,12,69, + 69,69,69,69,69,69,80,69,69,69,69,3,80,3,3,69, + 3,69,3,4,3,69,4,4,69,69,4,69,4,4,4,4, + 4,4,69,4,69,69,3,4,3,4,3,69,4,69,69,4, + 3,3,4,3,4,4,4,3,69,3,3,69,69,4,3,69, + 217,25,25,155,217,217,217,217,155,217,210,155,155,155,210,210, + 210,210,210,155,210,210,210,210,63,210,210,210,210,210,210,54, + 210,210,210,210,54,210,210,210,210,155,210,210,217,217,217,155, + 217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217, + 217,217,217,217,217,217,217,217,25,217,217,25,25,25,217,217, + 25,217,25,217,25,155,25,217,25,217,217,25,217,217,155,217, + 155,155,155,155,155,155,155,210,210,210,210,210,210,210,210,210, + 210,63,210,210,210,210,210,210,54,155,210,210,54,210,210,210, + 210,210,54,210,210,245,210,210,54,210,63,210,210,186,210,63, + 210,54,210,54,63,54,210,210,210,54,155,210,54,210,63,63, + 210,210,210,63,210,210,54,63,63,210,63,186,63,63,63,245, + 210,63,54,63,63,63,96,63,96,63,63,96,63,210,63,12, + 8,101,8,8,12,12,8,122,237,32,232,232,148,148,148,148, + 148,148,232,232,231,168,17,243,122,220,32,232,232,148,148,148, + 147,148,148,232,232,231,222,26,8,122,237,32,232,232,148,148, + 148,147,148,148,232,232,231,222,17,243,122,237,32,232,148,148, + 148,148,148,148,27,232,232,231,168,17,243,122,237,32,232,148, + 148,148,148,148,148,232,232,232,231,168,17,243,122,237,32,76, + 148,148,148,148,148,232,148,232,232,231,168,17,243,122,220,32, + 232,148,148,148,148,148,148,148,52,232,231,222,219,243,122,220, + 32,232,148,148,148,148,148,232,148,232,232,231,168,17,243,122, + 237,32,232,148,148,148,148,148,148,148,232,232,231,168,17,243, + 122,237,32,232,148,148,148,148,148,148,148,52,232,231,168,17, + 243,122,237,32,232,232,148,148,148,148,232,148,232,232,231,222, + 26,8,122,237,32,232,232,148,148,148,148,148,148,52,232,231, + 222,219,243,122,237,32,232,148,148,148,148,148,232,148,52,232, + 231,168,17,243,122,220,32,232,232,148,148,148,147,232,147,232, + 232,231,222,26,243,122,237,32,232,232,148,148,148,148,148,232, + 232,232,231,168,219,243,122,220,32,232,232,148,148,148,147,232, + 148,52,232,231,168,219,243,122,220,32,232,148,148,148,148,148, + 148,232,232,232,231,168,17,243,122,220,32,232,232,148,148,148, + 148,232,148,232,232,231,222,26,8,12,8,8,8,8,8,3, + 121,69,69,69,80,69,69,69,80,69,80,69,69,80,69,3, + 69,80,69,3,4,69,69,3,4,69,4,69,69,69,4,4, + 69,4,69,4,4,69,4,69,69,69,3,4,4,4,3,4, + 4,4,4,3,69,4,4,3,69,4,3,3,4,69,4,4, + 25,155,25,217,217,155,217,155,217,210,155,210,210,210,210,210, + 210,210,210,210,54,210,210,63,210,210,210,210,210,210,210,155, + 210,210,210,210,210,210,210,210,210,210,155,217,210,155,217,217, + 155,155,217,217,155,217,217,155,217,217,217,217,217,217,155,155, + 155,155,25,155,25,25,25,217,25,155,25,25,217,25,25,25, + 25,25,25,25,25,25,155,25,217,25,217,217,217,217,217,155, + 217,210,210,155,210,210,210,155,210,210,210,210,210,210,63,210, + 54,210,63,210,63,210,54,210,210,210,210,210,155,210,210,63, + 210,210,210,210,210,210,210,63,210,63,210,210,210,210,54,210, + 210,186,210,210,186,63,210,54,210,63,54,63,63,210,245,210, + 63,63,210,155,210,186,210,210,210,210,210,210,63,63,210,63, + 63,186,210,210,245,63,63,63,210,96,63,63,210,210,63,12, + 8,8,8,8,12,12,8,42,138,117,193,193,157,157,189,189, + 157,193,193,32,70,228,219,109,122,138,117,193,157,157,157,189, + 189,157,193,193,32,70,31,17,109,122,138,117,193,157,157,157, + 189,189,157,193,193,32,70,31,26,211,122,138,117,193,157,157, + 157,189,189,157,157,193,32,70,228,26,109,42,138,117,193,193, + 157,157,189,189,157,193,193,32,70,228,26,211,122,138,117,193, + 193,157,157,189,189,157,193,193,32,70,228,219,109,122,138,117, + 193,193,157,157,189,189,157,193,193,32,70,31,26,109,122,138, + 117,193,193,157,157,189,189,157,193,193,32,70,228,26,109,42, + 138,117,193,193,157,157,189,189,157,193,193,32,70,228,26,211, + 0,21,117,193,193,157,157,189,189,157,193,193,32,70,228,26, + 109,42,138,117,193,193,157,157,189,157,189,193,193,32,70,31, + 17,109,42,138,117,193,193,157,157,189,189,157,193,193,32,70, + 31,26,109,42,138,117,193,193,157,157,189,189,157,193,193,32, + 70,228,219,109,0,138,117,193,193,157,157,189,189,189,193,193, + 32,70,31,17,109,42,138,117,193,193,157,157,189,189,157,193, + 193,32,70,228,219,109,122,138,117,193,157,157,157,189,189,157, + 193,193,32,70,228,219,109,122,138,117,193,193,157,157,189,189, + 157,193,193,32,70,228,219,109,122,138,117,193,193,157,157,189, + 189,157,193,193,32,70,31,26,8,12,7,8,7,8,12,69, + 69,69,69,69,69,69,3,69,69,69,69,69,69,69,69,69, + 69,69,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,69,4,4,69,4,80,3,3,80,4,69,4,3,4,4, + 4,4,4,4,3,3,4,4,4,4,4,4,4,4,3,69, + 25,217,25,25,217,217,25,217,217,217,210,155,210,155,210,210, + 210,210,210,155,210,210,210,210,210,54,210,210,210,54,210,210, + 210,210,210,210,210,210,210,155,210,210,210,155,217,210,155,217, + 217,155,155,217,217,217,217,155,217,155,217,155,217,217,217,25, + 217,155,25,155,155,217,25,217,25,217,25,25,25,25,25,25, + 25,25,25,217,25,25,217,25,217,25,25,217,25,217,217,217, + 217,217,210,217,155,155,210,155,155,210,210,210,210,210,210,210, + 210,210,210,210,210,210,155,210,210,54,155,210,210,210,210,210, + 210,210,210,210,210,210,210,210,210,210,210,210,210,155,210,210, + 63,210,210,63,210,210,63,186,210,210,210,210,63,210,210,210, + 155,63,63,210,210,210,210,186,210,210,63,186,210,63,155,63, + 63,63,63,210,210,186,210,96,186,63,245,63,63,155,210,8, + 8,7,8,8,12,26,8,122,226,87,21,21,156,30,86,13, + 30,242,18,33,18,75,26,12,122,226,87,21,72,242,30,13, + 13,30,242,18,18,18,59,26,8,122,226,87,21,87,156,43, + 13,13,30,242,21,18,18,59,26,8,0,226,87,21,87,156, + 43,13,13,30,242,18,33,18,200,26,8,0,226,87,18,72, + 242,30,13,13,30,242,21,18,18,59,26,8,122,226,87,18, + 72,242,30,13,13,30,242,18,18,18,75,26,8,0,226,87, + 21,21,156,30,86,13,30,242,21,18,18,59,26,12,122,92, + 87,21,21,156,30,86,13,30,242,18,18,18,59,26,12,122, + 226,87,18,72,242,30,86,13,30,242,21,18,79,47,26,8, + 0,73,87,21,21,156,30,86,13,30,242,21,18,18,59,26, + 12,122,226,87,21,21,242,30,13,13,30,72,18,18,18,59, + 17,12,122,226,87,21,21,156,30,86,13,30,242,21,18,18, + 59,26,8,0,226,87,18,72,242,30,86,13,30,242,21,18, + 79,59,26,8,0,226,87,18,72,242,30,86,13,30,242,18, + 33,18,59,26,12,122,226,87,18,21,156,30,86,13,30,242, + 18,18,18,200,26,8,0,226,87,21,72,156,43,13,13,30, + 242,18,33,18,75,26,8,122,226,87,18,72,242,30,86,13, + 30,242,21,18,18,200,26,12,122,226,87,21,21,156,30,86, + 13,30,242,18,33,18,59,12,8,26,8,8,8,8,8,69, + 121,69,69,69,80,69,69,69,3,69,69,69,69,69,3,80, + 3,69,69,69,3,4,69,69,69,69,4,4,69,69,69,4, + 4,69,4,4,3,69,3,4,4,3,4,4,4,4,4,3, + 69,69,4,4,4,4,4,4,4,4,3,69,3,4,3,69, + 25,25,25,217,25,25,217,155,155,155,217,210,155,210,155,155, + 155,210,210,155,210,210,210,210,210,155,210,210,210,155,210,210, + 210,210,210,155,210,210,210,210,217,217,155,217,155,217,217,217, + 217,217,217,217,155,155,217,217,155,217,217,217,25,217,25,217, + 155,25,217,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,155,25,217,25,217,217,25,217,25,25,217, + 217,155,217,155,210,210,217,217,217,210,155,210,210,210,210,210, + 210,210,210,210,210,210,210,210,210,155,210,210,210,210,210,210, + 210,210,210,210,63,210,210,210,186,210,210,155,210,210,210,210, + 155,63,63,210,54,210,210,210,63,63,210,186,210,63,63,210, + 186,155,155,155,210,210,210,210,63,155,210,210,210,186,63,155, + 210,155,63,210,210,63,210,63,210,210,63,54,210,210,63,12, + 8,8,8,101,12,26,8,0,203,86,250,86,179,146,118,51, + 149,86,86,250,28,109,12,211,0,203,86,86,86,179,149,51, + 51,149,86,86,250,28,111,12,243,0,40,179,250,86,179,146, + 146,51,149,86,250,250,28,111,17,243,0,40,23,250,86,179, + 146,136,51,146,86,86,250,28,111,17,243,0,203,179,250,86, + 179,149,51,51,149,86,250,250,28,111,17,243,0,40,23,250, + 86,179,149,51,51,149,86,86,250,28,111,12,243,0,203,86, + 250,86,179,146,146,118,149,86,250,250,28,111,12,211,0,203, + 86,250,86,179,146,118,51,149,86,86,250,28,111,12,211,0, + 40,179,250,86,149,146,118,51,146,86,250,250,28,111,187,243, + 0,40,86,250,86,149,146,146,51,146,86,250,250,28,111,12, + 211,0,40,179,250,86,149,149,146,51,146,86,86,250,28,111, + 26,211,0,40,86,250,86,179,146,146,118,149,86,250,250,28, + 111,17,243,0,203,179,250,86,149,146,146,51,149,86,250,250, + 28,111,17,243,0,203,179,250,86,149,149,51,51,146,86,86, + 250,28,111,12,211,0,40,179,250,86,149,146,146,51,146,86, + 86,250,28,111,17,243,0,203,23,250,86,179,146,136,51,149, + 86,250,250,28,109,17,243,0,203,179,250,86,149,146,146,118, + 149,86,250,250,28,111,12,211,0,203,86,250,86,179,146,146, + 118,149,86,86,250,28,187,12,8,12,8,7,8,8,12,121, + 69,69,69,69,69,80,69,69,80,69,69,69,69,69,69,69, + 69,69,4,4,69,69,4,4,4,4,69,69,4,4,4,69, + 3,4,69,4,69,3,69,69,4,4,4,3,4,4,4,4, + 3,4,4,4,205,4,4,4,4,69,4,3,4,69,4,3, + 25,217,25,25,217,25,25,217,217,155,155,155,217,217,210,155, + 155,155,155,210,210,155,210,210,210,210,210,210,210,210,210,155, + 210,210,210,210,210,210,210,210,210,217,155,210,155,155,155,155, + 155,217,155,217,217,217,217,217,25,155,25,155,217,217,155,25, + 155,25,155,217,25,155,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,217,25,25,25, + 217,217,217,217,217,210,210,210,217,217,155,155,155,210,155,210, + 210,210,155,210,155,155,210,155,210,210,210,210,210,210,210,210, + 186,210,210,155,210,210,210,210,210,210,210,210,210,210,210,210, + 210,210,186,210,210,63,63,210,210,54,210,210,210,245,210,155, + 155,155,155,155,155,155,155,210,186,210,155,210,210,155,63,155, + 186,63,186,210,210,245,210,186,210,245,155,186,210,155,155,26, + 8,8,8,8,12,122,8,0,40,32,157,189,189,189,189,147, + 189,189,157,85,128,61,56,243,0,40,32,157,189,189,189,189, + 147,189,189,157,85,128,61,42,243,0,40,32,157,189,189,189, + 189,189,189,189,157,85,128,61,26,243,0,40,32,157,189,189, + 189,189,189,189,189,157,85,128,61,42,243,0,40,32,157,189, + 189,189,189,189,189,189,157,85,128,61,42,243,0,95,32,157, + 189,189,189,189,189,189,189,157,85,128,61,26,243,0,40,32, + 157,189,189,189,189,189,189,189,157,85,128,61,219,243,0,40, + 32,157,189,189,189,189,147,189,189,157,85,128,61,219,243,0, + 40,32,157,189,189,189,189,147,189,189,157,85,128,61,26,243, + 0,40,32,157,189,189,189,189,189,189,189,157,85,128,61,219, + 243,0,40,32,157,189,189,189,189,189,189,189,157,85,128,61, + 219,243,0,40,32,157,189,189,189,189,189,189,189,157,85,128, + 61,26,243,0,40,32,157,189,189,189,189,189,189,189,157,85, + 204,61,42,243,0,40,32,157,189,189,189,189,147,189,189,157, + 85,128,61,183,243,0,40,32,157,189,189,189,189,189,189,189, + 157,85,128,61,26,243,0,40,32,157,189,189,189,189,189,189, + 189,157,85,128,61,42,243,0,40,32,157,189,189,189,189,189, + 189,189,157,85,128,61,219,243,0,40,32,157,189,189,189,189, + 189,189,189,157,85,204,91,26,8,8,8,8,8,7,8,3, + 121,69,69,69,3,69,69,69,69,3,69,69,69,69,69,80, + 3,3,69,4,4,69,4,4,69,3,3,69,69,69,4,69, + 69,4,4,4,4,4,4,3,4,4,4,4,69,4,4,4, + 4,4,205,4,4,205,4,4,3,69,69,69,3,69,4,4, + 25,25,25,217,25,217,25,25,217,217,217,217,155,210,155,155, + 155,155,155,155,210,155,155,155,155,155,210,155,210,210,155,210, + 155,155,155,155,155,155,217,155,155,210,217,217,155,217,210,217, + 217,155,217,25,217,155,25,217,155,217,155,25,155,217,25,217, + 25,155,25,25,217,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,217,25,25,25,25,25,25,217,217, + 217,155,155,217,217,217,217,217,210,210,217,210,155,155,210,155, + 155,155,210,155,210,210,155,155,210,210,210,210,210,155,210,155, + 210,210,186,210,155,155,155,210,155,155,210,210,210,155,155,210, + 155,210,210,210,186,210,210,186,210,210,210,210,210,210,210,155, + 155,155,155,155,155,155,155,155,155,155,155,186,155,210,186,63, + 155,155,210,186,210,210,210,210,210,210,210,210,210,155,210,12, + 8,141,8,8,12,0,8,0,40,45,232,76,76,148,148,77, + 148,232,52,185,195,91,122,109,0,40,45,52,232,148,76,148, + 147,148,232,52,27,230,91,78,211,0,40,45,52,232,148,148, + 148,147,148,232,52,27,195,91,162,211,0,40,45,52,232,232, + 232,232,147,148,232,52,27,195,91,78,211,0,40,53,52,232, + 148,76,148,148,148,232,52,27,195,91,162,109,0,40,45,232, + 232,148,76,148,148,148,232,76,198,195,91,162,109,0,40,53, + 52,232,148,148,148,147,148,232,52,27,195,91,122,211,0,40, + 45,232,76,76,148,148,147,148,232,52,27,230,91,122,109,0, + 40,45,232,76,76,76,148,147,148,148,52,27,195,91,122,211, + 0,40,53,52,76,232,148,148,148,148,232,52,198,195,91,122, + 109,0,40,53,52,76,148,148,148,148,148,232,52,27,230,91, + 122,211,0,40,53,52,232,148,148,148,147,148,232,52,27,195, + 91,162,211,0,40,45,52,76,232,148,148,147,148,148,52,27, + 230,91,162,211,0,40,53,52,76,76,76,148,147,148,232,52, + 27,195,91,122,109,0,40,45,232,76,232,148,148,148,148,232, + 52,27,230,91,162,211,0,40,45,232,76,148,76,76,147,148, + 232,52,185,195,91,162,211,0,40,45,52,76,148,148,148,147, + 148,232,52,27,230,91,122,109,0,40,53,52,232,148,148,148, + 147,148,148,52,27,230,91,42,139,12,8,7,8,8,12,121, + 69,69,69,69,69,69,3,69,69,69,69,69,69,69,3,69, + 69,69,4,69,69,4,69,69,3,4,4,4,4,4,69,4, + 4,3,69,4,69,4,3,4,4,4,4,3,174,4,4,174, + 4,69,3,205,69,4,4,69,4,4,4,3,4,4,3,69, + 25,25,25,25,25,217,217,25,217,217,217,217,217,217,155,155, + 155,155,155,155,155,155,155,210,155,155,155,155,155,155,155,155, + 155,210,155,155,210,155,217,217,217,210,217,217,155,217,210,155, + 217,217,155,155,25,155,155,217,155,25,155,217,25,155,217,217, + 25,217,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,217,25,25,25,217,25,217,25,25,25,25,25,217, + 217,217,217,155,155,155,155,217,217,210,217,210,210,155,210,210, + 210,155,210,155,155,210,210,155,155,155,210,155,155,210,210,210, + 155,155,210,210,210,210,210,210,210,210,105,210,210,210,210,210, + 155,210,210,210,210,210,210,210,210,63,63,210,210,210,210,210, + 155,155,155,155,155,155,155,155,155,155,210,210,155,210,210,155, + 186,210,210,210,155,210,63,186,210,63,186,210,210,155,155,12, + 8,8,8,8,12,42,8,0,40,170,52,76,232,148,148,147, + 147,76,232,198,230,26,26,243,0,40,170,52,52,148,148,147, + 147,147,76,27,198,230,26,26,243,0,40,170,52,52,232,232, + 148,147,148,76,232,198,230,26,26,243,0,212,170,9,76,232, + 148,148,147,147,76,232,198,230,26,42,243,0,40,231,52,52, + 232,232,148,148,148,76,232,198,230,26,26,8,0,212,170,9, + 52,232,232,148,148,148,76,232,185,230,26,26,8,0,40,170, + 52,52,232,232,147,148,147,76,232,198,230,26,26,243,0,40, + 170,52,76,232,148,147,148,147,76,27,198,230,26,26,243,0, + 40,204,27,76,148,148,147,147,148,76,232,198,230,26,42,243, + 0,212,170,52,232,232,232,148,147,147,76,232,198,230,26,26, + 243,0,40,170,52,232,232,148,147,147,147,76,27,198,230,26, + 26,211,0,212,170,52,76,232,232,148,147,148,76,232,198,230, + 26,26,243,0,40,170,52,232,232,232,148,147,148,76,27,198, + 230,26,26,243,0,40,170,52,232,148,148,147,147,147,76,232, + 198,230,26,26,243,0,40,170,52,232,232,232,148,147,148,76, + 27,198,230,26,26,8,0,212,170,52,52,148,148,147,148,147, + 76,232,198,230,26,26,243,0,40,170,52,232,232,232,147,148, + 147,76,27,198,230,26,26,243,0,40,170,52,76,232,232,148, + 147,148,76,27,185,230,26,26,8,12,8,8,8,8,8,3, + 121,69,69,69,69,69,69,69,80,69,69,80,69,69,80,69, + 3,69,69,69,69,4,4,4,69,69,69,69,69,4,69,4, + 69,4,69,4,4,69,69,69,4,174,4,4,4,69,3,4, + 205,4,3,4,69,69,4,69,3,3,4,4,4,69,3,4, + 248,25,120,248,120,25,25,217,25,217,217,217,155,155,217,155, + 155,155,155,155,217,217,217,155,155,155,155,217,155,210,217,210, + 210,217,217,217,217,217,155,210,155,217,155,217,217,217,217,217, + 155,155,217,217,217,217,25,217,217,155,25,217,155,25,155,25, + 217,25,155,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 217,217,217,217,217,217,217,217,217,217,217,217,217,210,155,217, + 217,210,155,210,210,155,155,105,155,155,155,155,155,155,155,217, + 210,155,155,210,210,210,210,210,210,155,155,217,210,210,155,210, + 210,210,210,63,210,210,210,210,210,186,210,210,210,186,155,155, + 155,155,155,186,155,155,155,210,155,210,155,155,186,155,210,210, + 210,155,155,186,155,186,210,210,155,155,155,63,210,155,210,12, + 8,8,8,8,17,42,8,0,212,98,45,45,53,194,194,194, + 194,45,53,165,230,91,122,187,0,212,98,165,45,53,194,194, + 194,194,45,53,165,230,91,162,187,0,212,98,165,45,53,194, + 194,194,194,45,45,165,230,91,162,187,0,203,98,165,45,53, + 53,194,194,194,45,45,165,230,91,162,187,0,212,98,165,45, + 194,53,32,194,194,98,45,165,230,91,78,187,0,40,98,165, + 45,53,194,194,194,32,45,53,165,230,91,122,187,0,37,98, + 165,45,53,194,194,194,194,98,45,165,230,91,122,187,0,212, + 98,45,45,53,194,194,194,194,45,53,165,230,91,122,187,0, + 212,98,165,45,53,194,194,194,32,98,45,165,230,91,78,187, + 0,203,98,165,45,53,194,194,194,194,45,194,231,230,91,122, + 187,0,212,98,165,45,53,53,194,194,194,45,53,165,230,91, + 0,12,0,203,98,165,45,53,194,194,194,194,98,45,165,230, + 91,162,187,0,212,98,165,45,45,194,194,194,194,45,53,165, + 230,91,122,187,0,37,98,165,45,53,53,194,194,194,45,45, + 165,230,91,122,187,0,212,98,165,45,45,194,194,194,32,45, + 53,165,230,91,122,187,0,203,98,165,45,45,194,194,194,194, + 45,53,165,230,91,78,187,0,212,98,165,45,45,194,194,194, + 194,45,53,165,230,91,122,187,0,212,98,165,45,53,194,194, + 194,194,45,53,110,230,91,42,8,12,8,7,8,8,8,121, + 69,69,69,69,69,69,69,69,3,69,69,69,80,69,69,69, + 69,4,3,4,69,69,69,69,69,69,3,4,4,69,69,69, + 69,69,4,69,69,4,4,4,3,4,4,4,4,4,4,4, + 3,69,69,4,4,3,4,4,4,4,69,69,3,4,4,4, + 25,25,25,25,25,217,25,25,217,217,217,217,217,217,217,217, + 155,155,155,155,210,210,217,217,217,217,210,217,217,155,217,217, + 155,155,217,217,155,217,217,217,155,217,155,155,217,217,217,217, + 217,217,25,217,217,217,25,217,25,217,25,217,25,217,25,155, + 25,25,25,25,25,25,25,25,25,25,248,248,25,248,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,155,25, + 25,155,217,217,217,217,217,217,217,217,217,217,217,217,210,210, + 217,217,217,217,217,217,155,210,155,155,155,155,155,210,210,155, + 210,155,155,155,155,105,210,210,105,210,210,155,210,210,155,155, + 105,217,155,155,155,210,186,210,155,155,155,155,210,210,155,155, + 155,217,217,155,155,155,217,155,155,217,155,155,155,155,155,155, + 155,155,210,155,210,155,155,186,210,210,186,210,155,217,155,12, + 8,8,67,8,12,26,12,0,162,31,251,123,167,79,79,79, + 79,167,123,123,168,26,26,211,0,162,251,251,123,123,79,79, + 79,79,167,123,173,206,12,42,211,0,162,31,251,123,123,79, + 79,220,79,167,123,123,168,187,26,8,0,162,251,123,123,79, + 79,79,79,79,167,123,123,168,187,26,211,0,162,251,251,123, + 167,79,79,79,79,167,123,228,206,17,42,211,0,162,251,123, + 123,167,55,79,79,79,167,123,228,73,187,26,211,221,0,251, + 123,123,167,79,79,79,79,167,123,251,206,187,42,211,0,162, + 31,251,123,167,79,79,79,79,167,167,228,73,12,42,211,0, + 162,31,251,123,167,55,79,79,167,167,123,228,206,17,42,211, + 0,162,251,123,123,167,79,79,79,79,167,123,123,168,26,26, + 8,162,162,251,251,123,167,79,79,79,79,167,123,173,168,187, + 26,211,0,162,251,123,123,167,79,79,79,79,79,123,228,206, + 12,26,211,0,162,251,123,123,167,79,79,220,79,167,123,228, + 73,187,26,211,221,0,251,123,123,79,103,79,79,79,167,123, + 123,168,26,26,211,0,162,251,251,123,167,79,79,79,167,167, + 167,228,168,187,42,211,0,162,251,123,123,123,79,79,220,79, + 167,123,228,206,17,42,211,0,162,251,123,123,167,79,79,79, + 79,167,167,228,73,187,26,211,0,162,251,123,123,167,79,79, + 220,79,167,55,123,73,91,42,8,12,8,7,8,8,8,69, + 121,69,69,69,69,69,69,69,69,69,80,69,69,3,80,69, + 69,69,69,4,69,4,69,4,4,69,69,69,69,69,4,4, + 4,69,4,69,69,69,69,69,3,4,4,174,4,174,4,4, + 4,4,4,69,4,4,69,69,69,4,3,4,3,4,4,3, + 248,25,25,25,120,25,217,25,25,25,25,217,217,155,217,155, + 217,217,217,217,217,217,217,210,210,217,217,217,217,217,217,217, + 217,217,217,217,217,217,217,217,217,217,217,217,217,217,155,25, + 217,25,217,155,25,155,25,217,217,217,217,25,217,25,217,25, + 25,217,25,25,25,25,25,25,248,248,25,25,25,25,25,248, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,217,217,217,217,217,217,217,155,217,217,217,155,217,217, + 155,210,210,217,210,210,155,217,210,155,155,155,155,217,155,155, + 217,155,155,210,155,155,155,217,155,155,210,210,217,155,155,155, + 155,155,210,210,210,155,210,155,155,210,186,155,155,155,210,133, + 217,155,155,217,217,210,133,155,217,155,155,217,186,155,155,155, + 155,155,155,155,155,155,210,210,210,155,105,186,155,155,210,12, + 8,8,8,8,219,12,219,0,0,0,0,0,0,0,0,0, + 0,0,0,0,26,132,42,243,0,0,0,0,0,0,0,0, + 0,0,0,162,0,219,187,42,243,0,0,0,0,0,0,0, + 0,0,0,0,0,0,26,17,26,187,0,0,0,0,0,0, + 0,0,0,0,0,0,0,26,17,42,243,0,0,162,0,0, + 0,0,0,0,0,0,0,0,219,17,219,12,0,0,0,0, + 0,0,162,162,0,0,0,0,0,219,187,219,12,0,0,0, + 0,0,0,0,0,0,0,0,0,0,219,17,26,12,0,0, + 0,0,0,0,0,0,0,0,0,0,0,219,187,42,243,0, + 0,0,0,0,0,0,0,0,0,0,0,0,219,187,26,12, + 0,0,0,0,0,0,0,0,0,0,0,0,0,26,132,26, + 187,0,0,0,0,0,0,0,0,0,0,0,162,0,26,187, + 42,12,0,0,0,0,0,0,0,0,0,0,0,0,0,219, + 17,42,243,0,0,0,0,0,0,0,0,0,0,0,0,0, + 219,187,42,150,0,0,0,0,0,0,0,0,0,0,0,0, + 0,26,132,42,243,0,0,162,0,0,0,0,0,0,0,0, + 0,0,26,17,219,243,0,0,0,0,0,0,0,0,0,0, + 0,0,0,219,187,42,243,0,0,0,0,0,0,0,162,0, + 0,0,0,0,219,187,26,12,0,0,0,0,0,0,0,0, + 0,0,0,0,0,219,150,26,8,12,8,7,8,7,8,69, + 121,69,69,69,69,69,69,69,69,69,69,3,69,69,69,69, + 69,69,69,69,4,69,4,69,69,4,4,69,69,69,69,69, + 69,69,69,4,4,4,4,4,3,69,4,4,4,4,69,4, + 69,4,69,4,4,69,4,4,4,3,4,4,4,4,4,4, + 248,248,120,25,248,25,217,25,25,155,25,217,217,217,217,217, + 217,155,155,217,217,155,217,217,155,217,217,217,217,217,217,217, + 217,217,217,25,155,25,155,217,217,217,25,217,25,217,217,25, + 217,217,25,25,25,217,25,25,25,25,217,25,25,155,25,25, + 25,25,25,25,25,25,248,25,25,248,25,248,25,248,25,25, + 248,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 155,25,25,217,217,25,155,217,25,155,217,217,217,155,155,217, + 217,217,155,217,217,217,210,217,217,155,155,217,155,217,217,155, + 155,155,217,217,155,217,155,155,155,155,217,155,155,155,155,155, + 155,217,155,155,155,217,155,155,155,155,155,155,186,155,210,155, + 25,155,133,155,217,155,217,155,155,155,155,217,155,155,217,155, + 155,133,155,217,155,155,186,217,186,155,105,210,155,217,155,26, + 8,8,8,8,12,12,17,42,26,26,26,26,26,122,26,17, + 219,219,219,219,187,132,42,17,42,26,26,26,26,26,42,26, + 17,219,219,219,26,17,132,42,17,42,17,26,26,26,42,42, + 26,219,219,219,219,219,17,132,219,12,42,26,26,26,26,42, + 42,26,219,219,219,219,219,17,132,42,17,42,26,26,26,26, + 42,42,26,219,219,219,219,26,17,219,219,17,42,26,26,219, + 26,42,122,26,17,219,219,219,219,17,219,219,17,42,26,26, + 26,26,26,42,26,219,17,219,219,26,17,132,219,17,42,26, + 26,26,26,26,42,26,17,219,219,219,219,17,132,42,17,42, + 17,26,219,26,42,42,26,219,219,219,219,26,219,132,219,17, + 42,26,26,26,26,42,42,26,17,219,219,219,219,17,132,183, + 12,42,26,26,219,26,26,42,26,17,219,219,219,219,17,132, + 219,17,42,26,26,26,26,26,42,26,219,219,219,219,26,17, + 132,42,17,42,26,26,26,26,42,42,26,219,219,219,219,219, + 17,132,26,17,42,26,26,26,26,42,42,219,219,219,219,219, + 219,17,132,42,17,42,26,26,26,26,42,42,26,17,219,219, + 219,219,219,219,42,17,42,26,26,26,26,42,42,26,219,219, + 219,219,26,17,132,42,17,42,26,26,26,26,26,42,26,17, + 219,219,219,219,17,132,183,187,42,26,26,26,26,26,42,26, + 219,219,219,219,219,219,17,26,12,26,7,8,8,8,8,121, + 69,69,69,69,69,80,69,69,69,69,69,69,80,69,69,3, + 3,69,69,69,69,69,69,4,69,69,69,69,69,69,69,4, + 4,69,69,69,69,69,69,69,3,4,69,4,69,4,69,4, + 69,4,69,69,4,4,3,4,69,4,69,4,4,4,4,3, + 25,25,120,248,25,25,25,155,25,25,25,217,25,217,217,25, + 217,217,25,155,217,217,217,217,217,217,217,217,217,217,217,25, + 217,25,25,217,25,217,25,25,217,25,217,155,25,25,25,155, + 25,25,25,25,217,25,25,217,155,25,25,25,25,25,25,25, + 25,25,25,25,248,25,25,25,248,25,248,248,25,248,25,25, + 25,248,25,25,25,25,25,25,25,25,25,25,25,25,25,217, + 25,217,155,25,25,217,25,25,155,25,25,217,217,217,217,217, + 217,217,217,217,155,217,217,155,210,217,217,155,217,155,155,155, + 217,217,155,155,155,155,133,217,217,217,210,155,105,217,105,133, + 217,155,217,155,155,155,155,217,155,155,155,155,155,155,155,133, + 155,217,217,217,155,217,155,133,217,217,155,155,155,155,133,155, + 155,155,210,133,155,155,217,155,105,155,155,155,155,217,217,12, + 8,8,8,141,17,12,12,26,243,12,150,17,219,12,12,243, + 150,150,12,12,17,219,42,187,26,243,12,150,17,219,17,12, + 243,150,150,12,12,12,219,42,187,26,150,12,150,219,219,17, + 17,8,150,150,12,17,17,219,26,187,26,243,12,150,219,219, + 17,17,8,150,150,12,17,17,219,42,12,26,150,12,150,17, + 219,17,12,8,150,150,12,17,187,17,42,12,26,243,12,17, + 17,219,12,12,243,243,150,12,12,12,17,42,12,26,243,12, + 150,17,219,17,12,243,150,150,12,12,17,219,42,12,26,243, + 12,150,17,219,17,12,243,150,150,150,17,17,17,42,187,26, + 150,12,17,219,219,17,17,8,150,150,12,12,12,219,42,12, + 26,243,12,150,17,219,17,17,243,150,150,12,17,187,17,26, + 187,26,243,12,17,17,219,17,17,243,150,150,12,17,17,219, + 26,187,26,243,12,150,17,219,17,12,8,12,150,12,17,17, + 219,42,187,26,243,12,150,17,219,17,12,8,150,150,150,17, + 12,219,42,12,26,243,12,150,219,219,17,17,8,150,150,12, + 17,187,219,42,187,26,243,12,150,17,219,17,12,243,150,150, + 150,17,12,17,26,187,26,243,12,150,219,219,17,17,8,150, + 150,12,17,17,219,42,187,26,243,12,150,17,219,17,17,243, + 150,150,150,12,17,219,26,12,26,243,12,150,17,219,17,17, + 8,150,150,12,12,12,17,26,12,12,8,7,7,8,8,121, + 69,69,69,69,69,69,69,69,69,69,80,69,69,69,80,69, + 69,3,69,69,69,69,69,69,4,69,3,3,69,69,69,69, + 69,69,69,69,69,69,4,4,69,4,3,69,4,4,4,4, + 4,4,4,4,4,4,69,4,4,69,3,69,69,4,3,69, + 248,25,248,120,248,120,25,25,25,155,155,25,217,25,217,217, + 25,155,25,155,217,217,217,217,217,25,155,25,217,25,25,25, + 217,217,25,25,217,217,217,25,217,25,217,25,155,217,25,25, + 217,25,217,25,25,25,25,25,25,25,25,217,25,25,25,25, + 25,25,25,25,248,25,248,25,248,25,248,25,248,248,25,248, + 25,248,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,217,217,25,155,217,25,217,217,155,217,217,217,155,155, + 217,155,155,217,155,217,217,217,217,155,217,217,217,217,217,217, + 155,155,155,217,217,217,155,155,217,217,105,133,155,155,217,155, + 155,133,217,217,217,217,155,155,155,155,155,155,155,155,155,217, + 217,25,155,133,217,133,217,217,25,155,217,133,217,217,217,155, + 217,217,155,155,155,155,186,217,217,186,210,210,155,217,217,12, + 8,8,8,8,12,12,8,219,150,17,17,17,219,17,26,243, + 150,150,17,17,12,17,26,243,219,150,17,17,17,17,17,26, + 243,150,150,150,219,12,17,26,150,219,150,17,12,17,17,17, + 17,243,150,150,12,17,12,219,26,243,219,150,17,17,17,17, + 17,17,243,150,150,12,17,12,219,26,243,219,150,12,219,17, + 17,17,17,243,150,150,150,17,17,17,26,243,219,150,12,17, + 17,219,17,26,150,150,150,17,17,17,17,26,150,219,150,17, + 17,17,17,17,26,243,150,150,150,17,12,219,26,150,219,150, + 17,17,17,17,17,26,243,12,12,12,17,17,17,26,150,26, + 150,12,17,17,17,17,17,243,150,150,150,219,12,17,26,150, + 219,150,17,17,17,17,17,26,243,150,150,12,17,17,219,26, + 243,219,150,12,17,17,17,17,26,243,150,150,12,17,12,219, + 26,243,219,150,17,17,17,17,17,17,243,12,150,150,17,12, + 17,26,243,219,150,17,17,17,17,17,17,150,150,150,12,219, + 12,219,26,150,219,150,17,17,17,132,17,17,243,150,150,12, + 17,12,17,26,243,219,150,17,17,17,17,17,17,243,12,12, + 12,17,17,219,26,243,219,150,17,12,17,17,17,17,243,150, + 150,150,17,12,17,26,243,219,150,17,17,17,17,17,26,243, + 12,12,17,12,17,219,26,243,219,150,17,17,17,17,17,17, + 243,12,150,17,17,17,17,26,12,12,8,8,8,8,8,121, + 121,69,69,69,69,69,69,69,69,69,69,3,69,3,69,69, + 69,4,125,69,69,69,69,69,3,69,69,69,69,69,69,69, + 69,69,174,69,174,69,69,4,69,4,4,69,69,4,69,4, + 69,69,69,3,69,4,69,4,3,4,3,3,4,69,4,4, + 120,248,25,25,25,25,25,25,25,25,25,25,217,217,25,217, + 25,155,25,217,217,217,217,217,217,155,25,217,25,217,217,217, + 25,25,25,217,25,25,25,217,25,217,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,248,25,25,25,248,25,248,248,248,248,25,248,25,248,248, + 25,25,248,25,248,25,25,248,25,25,25,25,25,25,25,217, + 25,217,25,25,217,25,25,25,25,25,25,25,217,217,217,217, + 217,217,217,217,217,217,217,217,155,217,217,155,217,155,25,217, + 133,217,217,217,155,155,217,217,155,217,217,217,217,217,155,217, + 217,217,155,155,155,155,133,155,155,155,155,25,155,155,155,25, + 133,155,217,217,217,36,217,133,217,217,155,217,217,155,133,217, + 155,133,217,217,217,155,105,186,155,217,217,155,155,217,155,12, + 8,8,8,141,17,12,150,219,17,17,132,17,12,150,219,150, + 12,17,150,17,17,219,219,109,219,12,17,132,17,150,150,219, + 150,12,17,17,132,17,187,26,109,26,12,17,132,17,132,150, + 26,150,17,17,150,17,17,187,26,109,219,12,17,132,17,132, + 150,26,150,17,17,150,17,17,187,219,109,219,17,17,132,17, + 132,150,26,150,17,17,12,17,17,187,26,109,219,17,17,132, + 17,17,150,17,150,17,17,150,132,17,187,26,109,219,17,17, + 132,17,150,150,219,150,17,132,17,17,17,187,26,109,219,17, + 17,132,17,150,150,219,150,150,150,150,132,17,17,219,109,219, + 12,17,132,17,132,150,219,150,12,17,17,17,17,187,26,109, + 219,17,17,132,17,150,150,219,12,17,17,150,17,17,187,219, + 109,219,17,132,132,17,150,150,219,150,17,17,150,17,17,187, + 26,109,219,17,17,132,17,132,150,26,150,150,17,17,132,17, + 187,26,109,219,17,17,132,17,132,150,26,150,12,17,150,132, + 17,187,26,109,219,12,17,132,17,17,12,26,150,17,17,150, + 17,17,219,26,109,219,17,17,132,17,132,150,219,150,150,150, + 150,17,17,187,26,109,219,12,17,132,17,132,150,26,150,17, + 17,12,17,17,219,219,109,219,17,17,132,17,150,150,219,150, + 150,150,150,132,12,187,219,109,219,17,17,132,17,132,150,26, + 150,150,17,150,17,17,12,26,8,12,8,7,8,7,8,121, + 69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69, + 69,69,69,69,121,69,125,69,69,69,69,69,121,69,69,69, + 69,69,69,69,69,3,4,3,4,69,4,4,4,69,4,69, + 4,4,4,69,4,69,3,69,4,4,4,4,4,4,3,69, + 25,248,248,248,25,248,25,25,25,25,25,25,25,217,25,217, + 217,217,25,217,217,25,217,217,25,217,155,25,25,25,25,217, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,248,248,25,25,25,25,25,25,25,25,25, + 25,248,25,25,248,25,25,248,248,25,248,248,248,248,25,248, + 25,248,25,25,25,248,25,25,248,25,25,25,25,25,25,25, + 25,25,217,25,25,217,25,25,25,155,25,25,155,25,217,217, + 217,217,217,217,217,217,25,217,217,155,217,155,217,155,155,217, + 217,25,155,133,217,155,217,217,133,155,217,217,155,217,217,217, + 155,217,133,217,155,217,25,155,155,133,155,155,155,155,155,217, + 25,155,25,155,25,25,36,217,133,217,217,217,217,217,217,217, + 217,155,155,133,217,133,105,217,217,217,186,155,133,217,217,26, + 8,8,8,101,12,12,8,219,150,17,132,219,17,12,26,150, + 150,17,12,219,12,187,26,243,219,150,17,132,219,17,12,26, + 150,150,150,17,17,17,132,26,243,219,150,17,132,219,17,150, + 26,150,150,17,150,219,12,132,26,243,219,12,17,132,219,17, + 150,26,150,150,17,150,219,12,187,26,243,219,12,17,132,219, + 17,150,26,150,150,150,150,219,12,132,26,243,219,150,17,132, + 17,12,17,26,150,150,17,17,17,17,132,26,211,219,12,17, + 132,219,17,12,26,150,17,150,150,219,12,132,26,211,219,12, + 17,132,219,17,12,26,150,219,17,17,17,17,187,26,243,219, + 150,17,132,219,17,12,26,150,150,132,150,17,17,132,26,211, + 219,12,17,132,219,17,12,219,150,150,17,12,17,17,187,26, + 109,219,12,17,132,219,17,12,26,150,150,17,150,17,17,132, + 26,243,219,12,17,132,219,12,150,219,17,150,150,17,17,17, + 132,26,243,219,12,17,132,219,17,150,26,150,150,17,17,17, + 12,132,26,211,219,12,17,132,219,17,150,26,150,150,17,12, + 219,187,150,26,243,219,150,17,132,219,17,12,26,150,219,17, + 150,17,17,132,26,243,219,12,17,132,219,17,150,26,150,150, + 150,150,219,187,187,26,243,219,12,17,132,219,17,12,26,150, + 219,17,17,219,12,187,26,243,219,12,17,132,219,17,150,26, + 12,150,17,12,17,17,150,26,211,12,8,8,8,8,8,121, + 121,69,69,69,69,69,69,69,69,69,80,69,69,69,69,69, + 69,69,125,69,121,69,69,69,69,69,69,69,69,69,69,3, + 69,69,69,69,69,69,69,69,4,69,69,4,4,69,4,4, + 4,69,69,69,4,69,3,69,69,69,69,69,3,4,3,69, + 248,25,248,25,248,25,248,25,25,25,217,25,25,25,217,25, + 25,25,217,217,25,217,217,25,155,25,25,25,217,25,25,25, + 217,25,25,25,25,217,25,25,25,155,25,25,217,25,25,25, + 25,25,248,25,25,25,25,248,25,25,248,25,25,25,248,25, + 25,25,248,25,248,248,25,248,25,248,248,248,25,248,25,248, + 25,25,248,25,248,25,248,25,248,25,248,25,25,25,25,25, + 155,25,25,25,25,25,155,25,25,25,25,25,25,217,217,217, + 217,217,217,217,217,25,155,25,217,25,217,133,25,25,217,25, + 155,25,217,36,25,133,155,217,217,217,217,217,25,217,133,217, + 25,217,217,133,25,155,155,25,25,155,25,155,25,25,25,25, + 25,25,25,25,133,217,25,217,25,217,217,133,217,217,217,133, + 217,133,217,217,217,217,133,105,186,217,217,155,217,217,155,12, + 8,8,8,8,26,12,12,26,12,17,17,150,150,132,219,150, + 219,150,150,17,132,150,26,109,42,12,132,17,17,150,132,219, + 150,17,17,12,17,132,150,26,211,26,12,132,17,17,150,17, + 219,150,219,150,12,17,132,150,26,109,26,150,17,17,17,150, + 17,219,150,17,150,17,17,132,150,26,211,26,150,17,17,17, + 150,219,219,150,17,17,17,17,166,132,26,211,26,12,17,219, + 150,132,132,219,12,17,150,12,17,132,150,26,109,26,150,17, + 17,17,150,132,219,12,150,17,12,17,132,150,26,243,26,150, + 17,17,17,150,132,219,12,150,150,17,17,132,150,26,211,26, + 12,17,17,17,150,132,219,150,17,12,17,17,132,150,26,243, + 26,150,17,17,17,150,132,219,150,219,150,150,17,17,150,26, + 243,26,150,132,17,17,132,150,219,150,219,150,17,17,132,150, + 26,211,26,150,17,17,17,132,219,219,150,17,17,12,17,132, + 150,26,211,26,150,17,17,17,150,17,219,150,17,150,12,17, + 132,150,26,243,26,150,17,17,17,132,17,219,150,17,150,150, + 17,132,132,26,211,26,12,17,17,17,150,17,219,12,150,150, + 17,17,132,150,26,109,42,150,132,17,17,150,17,219,150,219, + 12,17,17,132,150,26,211,26,150,17,17,17,150,132,219,12, + 132,150,12,17,17,150,26,211,26,150,17,17,17,150,17,219, + 150,219,150,132,132,132,150,26,8,12,8,8,7,8,8,191, + 69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69, + 69,69,69,69,69,69,69,69,174,69,69,69,121,121,69,69, + 69,69,69,69,69,3,69,4,69,4,3,69,3,4,69,69, + 69,3,4,4,69,69,69,4,4,4,3,4,4,69,4,3, + 248,25,248,25,248,25,25,248,25,25,25,25,25,25,217,217, + 217,25,217,217,25,217,25,217,25,155,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,248,25,248,25,248,25,248,248,25,248,248,25,25,25,248, + 25,25,248,25,25,248,248,248,248,248,25,248,248,248,25,248, + 25,248,25,25,25,248,25,248,25,248,25,248,25,25,25,25, + 25,25,25,25,25,25,25,25,155,25,25,25,25,25,25,25, + 217,25,217,25,155,25,25,217,25,217,25,217,217,25,133,217, + 25,155,25,155,36,25,25,217,217,25,155,133,217,25,217,25, + 155,25,217,25,25,25,155,155,25,155,25,133,155,155,133,25, + 133,25,155,25,217,217,133,36,25,133,36,25,25,133,36,25, + 217,217,217,133,155,217,217,217,217,217,217,217,217,25,217,26, + 7,141,8,101,26,150,8,26,150,17,17,17,17,17,26,150, + 17,132,17,219,26,150,26,211,26,12,219,17,17,17,17,26, + 150,132,132,17,219,26,150,219,109,26,17,17,17,17,150,17, + 26,150,17,132,17,219,26,132,26,109,26,150,17,17,17,132, + 17,26,150,219,150,17,219,26,132,26,211,26,150,17,17,17, + 150,17,26,150,132,150,132,219,26,150,26,211,219,150,132,17, + 17,17,17,219,150,17,132,132,17,26,132,26,109,26,150,219, + 17,17,17,17,219,12,132,132,17,219,26,132,26,109,26,150, + 17,17,17,17,17,219,12,17,150,17,17,219,150,26,109,219, + 150,17,17,17,17,17,26,150,132,150,17,219,26,132,26,109, + 26,150,219,17,17,17,17,26,150,17,132,17,132,26,150,26, + 109,26,12,17,17,17,17,17,26,150,17,150,17,17,26,132, + 26,211,26,150,17,17,17,150,17,219,150,132,132,17,219,26, + 132,26,109,26,150,17,17,17,132,17,26,150,17,132,17,219, + 26,132,26,109,26,150,132,150,17,150,17,26,150,219,150,17, + 219,26,150,26,109,26,150,17,17,17,150,219,219,12,219,150, + 132,219,26,150,26,211,26,17,17,17,17,132,17,26,150,132, + 150,12,219,26,150,26,109,26,150,219,17,17,17,17,219,12, + 17,132,17,132,26,132,26,109,26,150,17,17,17,132,17,219, + 150,17,150,219,17,26,150,26,8,12,8,7,8,8,8,121, + 121,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69, + 69,121,69,69,121,125,121,69,69,69,69,69,69,121,121,121, + 121,69,69,69,69,4,69,4,4,4,4,69,69,4,3,4, + 69,69,69,4,4,4,125,69,69,69,69,69,3,69,4,4, + 248,248,248,248,248,248,25,25,25,25,25,25,25,25,25,25, + 25,155,25,25,25,25,155,25,155,25,25,25,25,25,25,25, + 25,25,248,25,25,248,25,25,25,25,25,25,25,25,25,25, + 25,25,248,25,248,248,248,25,25,248,25,25,25,25,248,25, + 25,248,25,248,248,248,248,25,248,248,248,248,25,248,248,248, + 248,25,248,248,25,248,25,248,25,248,25,248,25,248,25,25, + 25,25,25,217,25,25,25,25,25,25,25,217,25,155,25,217, + 25,25,25,25,25,217,25,155,25,25,217,25,25,217,217,25, + 155,25,217,25,25,155,217,133,25,25,217,25,25,217,133,217, + 25,155,25,155,155,133,25,25,25,155,25,217,25,25,217,25, + 217,217,25,217,25,25,25,25,217,217,25,155,217,25,155,155, + 25,25,217,25,25,133,217,217,133,217,217,155,155,25,217,26, + 8,8,8,101,219,12,243,219,12,219,17,17,150,150,219,12, + 132,12,132,17,17,187,17,243,219,12,17,150,17,150,132,219, + 12,17,12,150,219,17,187,26,243,219,12,17,150,17,17,132, + 219,12,132,12,150,219,17,187,17,243,42,12,17,150,17,17, + 150,219,12,132,12,150,219,17,187,219,243,42,12,17,150,17, + 17,132,219,12,17,12,17,17,17,187,219,243,42,17,17,17, + 17,150,150,219,12,132,12,17,219,17,187,17,243,26,12,17, + 150,17,150,150,219,150,219,12,150,219,17,187,17,243,42,12, + 219,150,17,150,150,42,150,132,17,132,17,26,187,219,243,42, + 12,17,150,17,150,132,219,12,17,17,150,219,17,187,17,243, + 42,12,17,150,17,150,150,219,12,132,17,150,219,17,187,17, + 211,42,12,219,150,17,150,150,219,12,132,17,132,219,17,187, + 219,243,42,12,17,150,17,17,12,26,12,219,12,150,219,17, + 187,219,243,42,12,17,150,17,17,132,219,12,132,17,150,17, + 17,187,17,243,42,12,219,17,12,219,150,219,12,132,17,150, + 17,17,187,219,243,219,12,219,150,17,132,132,26,150,132,17, + 12,219,17,187,219,109,42,12,17,150,17,17,150,219,12,17, + 17,150,219,17,187,219,243,26,12,17,150,17,150,150,26,150, + 132,17,132,219,17,187,219,243,42,12,219,150,17,17,150,42, + 12,132,12,12,219,187,12,26,8,12,8,7,8,8,8,191, + 69,69,69,69,69,69,69,121,69,69,69,69,69,69,69,69, + 69,69,69,174,69,69,69,69,69,69,121,125,69,69,69,69, + 69,69,69,69,69,69,69,69,69,4,69,4,4,69,69,69, + 4,4,4,69,125,69,69,69,69,174,69,69,69,4,3,69, + 248,248,248,248,248,25,248,25,248,25,25,25,25,25,25,25, + 25,25,155,25,155,25,25,25,155,25,25,217,25,25,25,25, + 25,25,25,25,248,25,25,248,25,248,25,25,25,248,25,248, + 25,25,248,25,248,25,248,248,25,248,248,248,248,25,248,248, + 25,248,25,248,25,248,248,248,248,248,248,248,248,25,25,25, + 25,248,25,248,25,248,248,25,248,25,248,25,25,248,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,155,25, + 155,217,25,155,25,25,25,217,25,155,25,155,25,25,217,25, + 25,25,25,155,25,25,217,217,217,25,217,217,25,25,217,25, + 25,25,217,25,217,25,155,155,25,155,25,155,155,25,155,25, + 25,25,25,133,217,25,217,133,25,25,133,217,217,25,25,133, + 25,133,217,217,25,217,217,217,217,133,36,133,217,25,217,12, + 101,101,8,7,42,12,12,26,17,17,12,17,150,219,219,132, + 219,12,132,219,17,187,42,187,219,17,219,12,17,150,219,219, + 132,132,17,150,219,17,150,42,187,219,17,219,12,150,150,219, + 219,132,132,17,17,17,17,187,26,150,42,17,219,12,150,150, + 219,219,132,132,17,132,219,17,187,26,150,42,17,219,12,150, + 150,219,219,132,132,17,17,17,17,187,26,12,42,12,17,12, + 17,150,219,219,132,132,17,17,17,17,187,26,150,26,17,219, + 12,17,150,219,219,150,132,17,17,17,17,187,26,150,26,17, + 219,12,17,150,132,219,132,132,17,132,219,17,187,26,12,42, + 17,219,12,17,150,219,219,132,132,17,17,17,17,187,26,150, + 26,17,219,12,17,17,219,219,150,17,17,17,219,17,187,42, + 150,219,17,219,12,17,150,219,219,132,132,17,17,17,17,187, + 26,150,42,17,219,12,150,150,219,219,150,132,17,132,219,17, + 187,26,150,42,17,219,12,150,150,219,219,132,132,17,132,219, + 17,187,26,150,26,17,17,150,150,150,219,219,132,17,17,132, + 219,17,187,26,187,26,17,219,12,12,150,132,219,132,132,17, + 150,219,17,187,26,150,219,17,219,12,150,150,219,219,132,132, + 17,132,219,17,12,26,150,26,17,219,12,17,150,132,219,132, + 132,17,17,219,17,187,26,150,26,17,219,12,150,150,219,219, + 132,219,17,17,17,17,150,26,8,26,8,8,8,8,8,121, + 121,69,69,69,121,69,121,69,69,69,69,69,69,69,69,69, + 69,69,121,69,69,69,121,69,69,69,121,121,69,69,69,69, + 121,121,69,69,4,4,4,3,69,4,69,69,4,4,4,69, + 69,69,69,69,69,3,4,69,69,69,3,3,4,69,3,4, + 248,248,248,248,248,248,248,248,25,25,248,120,25,25,25,25, + 25,25,25,25,25,25,25,25,25,155,25,25,25,25,25,25, + 25,248,25,248,25,25,248,25,248,25,248,25,25,25,25,248, + 25,25,248,25,25,248,248,248,248,248,25,248,248,248,25,248, + 248,25,248,25,248,248,248,248,248,248,248,248,248,248,248,25, + 248,248,25,248,248,25,248,248,248,25,248,248,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,133,25, + 155,25,25,25,155,25,217,25,25,217,25,25,25,217,25,25, + 133,155,25,25,25,25,25,25,25,25,25,25,25,25,133,25, + 25,25,120,25,25,25,25,25,25,217,25,25,133,25,25,25, + 217,25,133,217,155,25,133,217,217,36,217,217,217,25,217,26, + 8,8,150,8,26,26,219,219,219,219,17,17,26,17,219,17, + 17,17,219,219,17,17,26,150,42,17,26,17,12,26,17,219, + 17,17,17,219,219,17,187,26,150,42,17,26,17,17,26,17, + 219,17,17,219,132,219,17,12,26,150,219,17,26,17,17,26, + 17,219,17,17,17,219,219,17,12,42,150,219,17,26,17,17, + 26,17,219,17,17,17,132,219,17,12,26,150,219,26,219,17, + 17,26,17,219,219,17,17,132,219,17,12,42,150,219,17,26, + 17,17,26,17,26,219,17,17,132,219,17,12,26,150,219,17, + 26,17,17,26,26,26,17,17,17,219,219,17,150,26,150,219, + 17,26,17,12,26,17,219,17,17,219,132,219,12,17,26,150, + 219,17,26,17,17,12,17,219,17,17,17,219,219,17,17,26, + 150,42,17,26,17,17,26,17,219,17,17,17,132,219,17,17, + 26,150,219,17,26,17,219,17,17,219,219,17,17,219,219,17, + 12,26,150,219,17,26,17,17,26,17,219,17,17,17,219,219, + 17,12,26,150,219,26,26,26,17,26,17,219,17,17,17,219, + 219,17,12,26,150,219,17,26,17,17,26,26,26,17,17,17, + 219,219,12,12,26,150,42,17,26,17,17,26,17,219,17,17, + 17,219,219,17,187,26,132,219,17,26,17,17,26,26,26,219, + 12,17,219,219,17,12,26,150,219,17,26,17,17,26,17,219, + 17,12,219,132,219,12,187,26,8,12,8,7,7,8,8,16, + 191,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69, + 69,121,69,69,121,174,69,69,69,69,69,69,69,69,69,69, + 69,69,69,69,69,69,69,69,4,69,4,4,69,69,69,69, + 3,69,69,69,69,69,69,69,69,69,69,69,69,69,4,4, + 248,25,248,248,248,248,248,25,248,25,25,248,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,248,25,248,25,248,25,248,25,25,248,25,248,25,248, + 25,248,25,248,25,25,248,25,248,248,25,248,25,248,25,25, + 248,25,248,248,25,248,248,248,248,248,248,25,248,25,248,248, + 25,248,248,248,25,248,248,25,248,248,25,248,25,248,25,248, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,155,25,25,25,25,25,155,25,25,25,217,25,25,25,25, + 25,217,133,25,25,25,133,25,25,133,25,25,25,25,25,25, + 25,25,25,133,25,25,133,25,25,25,155,25,25,25,25,25, + 25,25,25,25,133,25,25,25,25,217,25,25,217,25,217,25, + 217,25,25,25,133,217,25,133,25,217,25,133,217,25,217,122, + 26,17,26,26,42,26,122,122,42,122,122,0,122,42,122,122, + 122,122,0,122,42,42,42,187,122,122,122,122,0,122,42,122, + 122,122,122,122,122,42,42,42,187,122,42,122,122,0,122,42, + 122,122,122,122,0,122,42,78,42,187,0,42,122,122,0,122, + 42,0,122,122,122,122,122,42,42,42,187,0,42,122,122,0, + 122,42,122,122,122,122,0,122,42,78,183,187,122,122,122,122, + 0,122,42,122,122,122,122,0,122,42,42,42,187,0,42,122, + 122,0,122,42,122,122,122,122,0,122,42,42,42,187,0,42, + 122,122,0,122,219,122,122,42,122,122,122,42,42,183,187,0, + 42,122,122,0,122,42,122,122,122,122,0,0,183,42,42,187, + 0,122,122,122,0,122,42,0,122,42,122,122,122,42,42,42, + 187,122,42,122,122,0,122,42,122,122,122,122,0,122,42,42, + 42,187,0,42,122,122,0,122,42,122,122,42,122,122,122,42, + 42,42,187,0,42,122,122,0,42,42,0,122,122,122,122,122, + 42,42,42,187,122,42,122,122,0,122,42,122,122,122,122,122, + 122,42,42,42,187,122,122,122,122,0,122,219,122,122,122,122, + 0,0,183,42,42,187,122,42,122,122,0,122,42,0,122,42, + 122,122,122,42,42,42,187,0,42,122,122,0,122,219,122,122, + 42,122,122,122,42,42,42,187,0,42,122,122,0,122,42,122, + 122,122,122,0,122,42,42,26,187,42,26,26,122,26,12,121, + 69,121,69,69,69,69,69,69,69,69,69,69,69,69,69,69, + 69,69,69,69,121,121,121,69,69,69,69,121,121,121,121,125, + 69,69,69,69,69,69,69,69,3,69,69,4,4,69,4,69, + 69,69,69,69,69,125,69,69,69,69,69,69,3,69,69,69, + 248,248,248,248,102,25,102,25,248,25,25,25,248,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,248,25,248, + 25,248,25,248,25,248,25,248,25,248,25,248,25,248,25,248, + 25,25,248,248,248,248,248,248,248,25,248,248,248,248,248,248, + 248,248,248,248,71,248,248,25,248,25,248,248,248,248,248,248, + 248,248,25,248,248,248,248,25,248,248,25,248,25,248,25,25, + 25,25,248,25,25,248,25,248,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,217,25,25,217,25,25,25,120,133,25,120, + 25,25,217,25,25,25,25,133,25,25,25,133,217,25,25,25, + 25,25,25,120,120,25,25,217,133,25,133,217,25,133,25,133, + 25,217,217,217,217,25,217,217,217,133,217,25,25,25,155,122, + 12,8,243,8,183,42,26,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,219,122,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,219,122,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,122,42,122,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,42,122,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,122,42,122,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,42,122,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,42,122,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,42,122,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,42,122, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,42, + 122,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 42,122,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,42,122,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,42,122,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,42,122,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,42,122,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,42,122,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,42,122,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,42,42,26,12,8,8,8,12,121, + 121,69,69,121,69,69,121,69,69,69,121,69,69,121,69,69, + 69,69,69,69,69,69,69,121,69,125,121,69,69,121,121,69, + 125,69,125,69,125,4,4,69,69,69,3,69,69,69,69,69, + 3,69,69,69,69,121,125,69,69,69,69,69,69,125,69,4, + 71,25,248,248,248,25,248,248,248,248,25,25,248,25,25,25, + 248,25,25,248,25,248,25,25,25,25,25,25,25,25,25,25, + 25,25,248,25,248,25,248,25,248,25,248,25,25,248,25,25, + 248,25,248,25,25,248,248,25,248,248,248,25,248,25,248,248, + 248,248,248,25,248,248,71,248,248,25,248,248,25,248,248,25, + 248,248,248,248,248,25,248,248,248,248,25,248,25,248,25,248, + 25,248,25,25,25,25,248,25,25,248,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,120,25,25,25, + 25,25,25,25,25,25,120,25,25,25,25,25,25,25,25,120, + 25,248,133,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,133,25,25,217,133,25,133,25,217,217,133,25,25,25,42, + 8,7,8,67,26,26,26,0,14,216,41,62,62,62,62,62, + 62,62,62,62,41,75,26,12,0,14,216,41,62,62,62,62, + 62,62,62,62,62,41,75,26,17,0,14,216,41,62,62,62, + 62,62,62,62,62,62,62,22,12,26,122,14,216,41,62,62, + 62,62,62,62,62,62,62,41,75,26,12,0,14,216,41,62, + 62,62,62,62,62,62,62,62,62,22,26,12,122,14,216,41, + 62,62,62,249,62,62,62,62,62,41,75,26,12,0,14,216, + 41,62,62,62,62,62,62,62,62,62,41,75,26,12,0,14, + 216,41,41,62,62,249,62,62,62,62,62,41,75,26,12,0, + 14,216,41,62,62,62,62,62,62,62,62,62,41,75,26,12, + 122,14,216,41,62,62,62,62,62,62,62,62,62,41,75,26, + 12,0,14,216,41,62,62,62,62,62,62,62,62,62,41,75, + 26,12,0,14,216,62,41,62,62,62,62,62,62,62,62,41, + 75,26,12,0,14,216,41,62,62,62,249,62,62,62,62,62, + 41,75,26,12,0,14,216,41,62,62,62,62,62,62,62,62, + 62,41,59,26,17,122,14,216,41,62,62,62,249,62,62,62, + 62,62,41,200,26,17,0,14,216,41,62,62,62,62,62,62, + 62,62,62,41,75,26,12,0,14,216,41,41,62,62,249,62, + 62,62,62,62,41,75,26,12,0,14,216,41,62,62,62,62, + 62,62,62,62,62,62,22,26,12,26,7,7,7,7,8,69, + 121,121,69,69,121,69,69,69,121,80,69,69,69,69,69,69, + 69,121,121,121,121,121,69,174,121,69,121,121,69,69,121,121, + 121,121,69,69,69,69,3,69,69,69,69,69,69,69,69,69, + 69,69,69,121,69,121,69,69,69,69,69,125,69,174,125,69, + 248,248,248,248,71,248,248,248,248,248,248,248,25,25,248,25, + 25,25,25,25,248,25,248,25,25,25,248,25,25,248,25,248, + 25,25,248,25,248,248,248,25,248,25,25,248,25,25,248,25, + 248,25,248,248,248,25,102,25,248,248,248,248,248,248,248,248, + 248,248,25,71,248,248,25,248,248,248,248,248,248,248,248,248, + 248,248,248,248,248,248,248,248,25,248,248,25,25,248,25,248, + 25,25,248,25,248,25,248,25,25,248,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,120,25,25,25,25,25,25,120,25,25,25,25,25,25,120, + 25,120,120,25,25,25,25,25,25,133,25,25,25,25,248,25, + 25,25,248,25,25,25,25,25,25,25,25,133,25,25,217,25, + 25,25,25,133,25,217,217,25,217,25,25,25,217,248,217,26, + 8,67,8,67,219,17,17,42,233,110,195,90,195,90,195,90, + 90,90,90,90,60,154,26,12,42,233,110,195,90,195,90,195, + 90,90,90,90,90,60,154,26,12,42,233,110,195,90,195,90, + 195,90,90,90,90,90,60,154,26,109,42,233,110,195,90,195, + 90,195,90,90,90,90,90,60,154,26,12,42,233,110,195,90, + 195,90,195,90,90,90,90,90,60,154,26,12,42,233,110,195, + 90,90,195,90,90,90,90,90,90,60,154,26,12,42,233,110, + 90,90,195,90,195,90,90,90,90,90,60,154,26,12,42,233, + 110,195,90,90,195,90,90,90,90,90,90,60,154,26,12,42, + 233,110,195,90,195,90,195,90,90,90,90,90,60,154,26,12, + 42,233,110,195,90,195,90,195,90,90,90,90,90,60,154,26, + 12,42,233,110,195,90,195,90,195,90,90,90,90,90,60,154, + 26,12,42,233,110,195,90,90,195,195,90,90,90,90,90,60, + 154,26,12,42,233,110,195,90,90,90,90,90,90,90,90,90, + 60,154,26,12,42,233,110,195,90,195,90,195,90,90,90,90, + 195,60,154,26,12,42,233,110,195,90,90,195,90,90,90,90, + 90,195,60,154,26,12,42,233,110,195,90,195,90,195,90,90, + 90,90,90,60,154,26,12,42,233,110,195,90,90,195,90,90, + 90,90,90,90,60,154,26,12,42,233,110,90,90,195,90,195, + 90,90,90,90,90,60,154,26,8,26,8,7,8,8,12,121, + 121,69,121,69,69,121,69,69,121,69,121,69,69,121,69,69, + 69,69,69,69,69,69,121,121,69,69,69,69,121,121,121,69, + 69,69,121,69,121,125,69,69,69,69,69,69,69,69,69,69, + 69,121,121,69,121,69,121,69,121,125,69,69,69,69,69,125, + 71,248,248,248,248,248,102,25,248,248,25,248,248,25,248,25, + 25,248,25,25,25,25,25,248,25,25,25,25,25,25,248,25, + 25,248,25,248,25,25,248,25,248,25,248,25,248,25,248,248, + 25,248,25,248,248,25,248,248,248,248,248,25,248,248,248,248, + 248,248,248,248,248,248,248,248,248,248,248,248,25,248,248,248, + 248,248,248,248,248,248,248,248,248,25,248,248,25,25,248,25, + 25,248,248,25,248,25,25,248,25,248,25,248,25,25,25,25, + 25,25,25,25,25,248,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,120,25,120,25,25,25,25,25,25,25, + 25,25,120,248,120,25,25,25,25,25,25,25,120,25,25,248, + 25,25,25,248,25,25,25,25,25,25,25,25,25,25,133,25, + 25,133,25,25,25,133,25,217,133,217,133,25,133,248,25,17, + 12,67,12,101,17,17,17,122,206,128,23,23,23,86,19,19, + 65,65,19,19,195,178,243,243,122,206,128,23,23,23,86,19, + 19,65,65,19,19,195,154,12,243,122,206,128,23,23,23,86, + 19,19,65,65,19,19,195,178,12,243,122,206,128,23,23,23, + 86,19,19,65,65,19,19,195,154,12,243,122,206,128,23,23, + 23,86,19,19,65,65,19,19,90,178,12,243,122,206,128,86, + 23,19,23,23,65,19,65,19,19,195,178,243,243,122,206,128, + 86,23,23,86,19,19,65,65,19,19,195,178,243,243,122,206, + 128,23,23,23,23,23,65,19,65,19,19,195,154,12,243,122, + 206,128,23,23,23,86,19,19,65,65,19,19,195,154,12,243, + 122,206,128,23,23,23,86,19,19,65,65,19,19,195,178,243, + 243,122,206,128,23,23,23,86,19,19,65,65,19,19,195,154, + 12,243,122,206,128,86,23,23,86,19,19,65,65,19,19,195, + 154,12,243,122,206,128,23,23,23,23,23,65,19,65,19,19, + 195,178,243,243,122,206,128,23,23,23,86,19,19,65,65,19, + 19,195,178,12,211,122,206,128,23,23,23,23,23,65,19,65, + 19,19,195,178,243,109,122,206,128,23,23,23,86,19,19,65, + 65,19,19,195,154,12,243,122,206,128,23,23,23,23,23,65, + 19,65,19,19,195,178,243,243,122,206,128,86,23,23,86,19, + 19,65,65,19,19,90,178,12,8,12,8,7,8,8,8,121, + 121,69,121,69,121,69,69,69,69,69,69,69,69,69,69,69, + 69,121,121,121,121,69,121,121,69,121,121,121,121,121,121,121, + 121,121,121,69,121,69,69,4,69,69,69,69,69,69,69,69, + 69,69,69,69,121,121,121,69,69,125,69,174,69,125,121,121, + 248,102,248,248,71,248,248,248,248,248,248,248,25,25,248,25, + 248,25,248,25,248,25,25,248,25,25,25,248,25,25,248,25, + 248,25,25,248,248,25,248,248,25,248,25,25,248,25,25,248, + 25,25,248,25,25,248,25,25,248,248,248,248,248,248,248,248, + 248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248, + 248,248,248,248,248,248,248,25,248,248,248,25,248,25,248,25, + 248,25,248,25,248,248,25,248,25,248,25,25,25,25,248,25, + 25,25,102,25,248,25,25,102,25,25,25,248,25,25,102,25, + 25,248,25,25,25,25,102,25,25,248,248,25,120,25,25,120, + 102,25,25,25,25,25,25,25,120,248,25,25,25,25,25,25, + 25,25,25,25,102,25,248,25,25,25,248,248,25,25,25,25, + 25,25,25,25,25,25,217,25,25,25,25,217,25,25,25,26, + 8,8,12,101,219,219,12,122,222,204,19,65,19,65,65,65, + 65,65,19,65,90,178,219,211,122,222,204,19,65,19,65,65, + 65,65,65,19,19,90,178,17,211,122,222,204,19,65,19,65, + 65,65,65,65,19,65,90,178,17,211,122,222,204,19,65,19, + 65,65,65,65,65,19,65,90,178,132,211,122,222,204,19,65, + 19,65,65,65,65,65,19,19,90,178,132,211,42,233,204,65, + 19,19,65,65,19,118,65,19,65,90,178,17,109,122,233,204, + 19,65,19,65,65,65,65,65,19,65,90,178,219,211,122,222, + 128,19,65,19,65,65,19,118,65,19,65,195,178,17,211,122, + 222,204,19,65,19,65,65,65,65,65,19,65,195,178,17,211, + 122,222,204,19,65,19,65,65,65,65,65,19,65,90,178,17, + 109,122,222,204,19,65,19,65,65,65,65,65,19,65,90,178, + 132,211,42,233,204,19,65,19,65,65,65,65,65,19,65,90, + 178,132,211,42,31,128,19,19,19,65,65,19,118,65,19,65, + 90,178,219,211,122,222,204,19,65,19,65,65,65,65,65,65, + 65,90,178,132,243,122,222,204,19,65,19,65,65,19,118,65, + 19,65,90,178,219,8,122,222,204,19,65,19,65,65,65,65, + 65,19,65,90,178,132,211,122,222,128,19,65,19,65,65,19, + 118,65,19,65,90,178,17,109,122,233,204,19,65,19,65,65, + 65,65,65,19,19,90,178,12,8,12,8,8,7,8,12,121, + 121,69,121,69,69,191,69,69,121,69,121,69,69,121,69,69, + 69,69,69,69,121,121,121,69,121,69,69,69,121,121,121,69, + 121,69,69,69,69,121,69,121,69,69,69,69,69,69,69,69, + 69,69,121,121,69,69,121,121,69,121,121,121,69,121,69,69, + 71,71,248,248,248,248,248,248,102,25,248,248,248,248,248,25, + 248,248,25,248,25,248,25,25,248,25,248,25,25,25,248,25, + 25,248,25,248,25,248,25,25,25,25,248,25,248,25,248,25, + 248,25,248,248,25,248,25,102,25,248,248,248,248,248,248,248, + 248,248,248,248,248,248,248,248,248,248,248,248,248,248,102,71, + 248,248,248,248,248,248,71,25,25,248,248,25,248,25,248,248, + 25,248,248,25,248,25,248,25,25,248,25,248,25,25,25,25, + 248,25,25,25,25,25,25,25,25,25,25,248,25,25,120,25, + 102,25,248,248,248,25,120,25,25,25,248,25,248,248,25,25, + 25,25,102,25,248,248,248,25,25,25,25,102,25,25,25,248, + 102,120,25,25,120,25,248,248,248,25,25,133,248,25,133,25, + 25,25,133,25,25,25,25,25,25,25,25,25,25,25,25,26, + 12,8,12,8,12,26,8,122,31,204,118,118,118,118,51,118, + 118,118,118,65,60,178,26,211,122,31,204,118,118,118,118,51, + 118,118,118,118,65,128,84,26,211,122,31,204,118,118,118,118, + 51,118,118,118,118,65,60,178,26,8,122,31,204,118,118,118, + 118,51,118,118,118,118,65,128,84,26,8,122,31,204,118,118, + 118,118,51,118,118,118,118,65,60,84,17,243,122,31,170,65, + 118,118,118,51,118,118,118,118,65,60,178,26,211,122,31,170, + 65,118,118,118,51,118,118,118,118,65,60,178,26,211,122,31, + 170,118,118,118,118,118,118,118,118,65,118,128,84,26,211,122, + 31,204,118,118,118,118,51,118,118,118,65,118,128,84,26,8, + 122,31,204,118,118,118,118,51,118,118,118,118,65,60,178,26, + 211,122,31,204,118,118,118,118,51,118,118,118,118,65,128,84, + 26,243,122,31,170,118,118,118,118,51,118,118,118,118,65,128, + 84,26,243,122,31,170,118,118,118,118,118,118,118,118,118,65, + 60,178,26,211,122,31,204,118,118,118,118,118,118,51,118,65, + 65,60,178,26,211,122,31,204,118,118,118,118,51,118,118,118, + 118,65,60,178,17,211,122,31,204,118,118,118,118,51,118,118, + 118,118,65,128,84,26,8,122,31,170,118,118,118,118,118,118, + 118,118,118,65,60,178,26,211,122,31,170,65,118,118,118,51, + 118,118,118,118,65,128,84,17,8,12,8,7,8,8,8,69, + 121,121,69,121,80,69,121,69,69,69,121,69,69,121,69,69, + 69,121,121,121,121,121,121,69,69,69,69,69,69,69,121,69, + 121,121,121,121,69,69,69,69,69,69,69,174,121,121,69,121, + 121,69,121,69,121,69,69,121,69,69,69,68,69,121,121,121, + 248,248,74,248,74,248,248,248,248,248,248,71,25,248,248,25, + 248,248,25,248,25,25,248,25,248,25,25,248,25,25,25,25, + 25,248,25,25,248,25,25,102,25,248,25,25,248,25,25,248, + 25,25,248,25,248,248,248,25,248,25,248,248,248,248,248,248, + 71,248,71,248,71,248,248,248,248,248,248,248,248,248,248,248, + 248,248,248,248,25,248,25,248,248,248,25,248,248,248,25,248, + 248,25,248,25,248,25,248,248,25,25,248,25,25,25,248,25, + 25,25,248,25,102,25,25,102,248,248,25,25,120,102,25,120, + 25,248,25,25,25,25,102,248,248,248,25,248,25,102,25,25, + 248,25,25,25,25,25,25,102,25,248,120,25,25,248,248,25, + 25,25,248,25,248,25,25,25,25,25,25,120,25,248,120,25, + 25,25,25,25,25,25,25,25,25,25,25,133,25,248,25,26, + 8,8,12,67,17,17,12,122,31,53,118,51,51,51,51,52, + 51,51,118,118,204,84,17,243,122,31,53,118,51,51,51,107, + 52,51,51,118,118,128,84,17,243,122,31,53,118,51,51,51, + 51,52,52,51,118,118,204,178,17,211,122,31,53,118,51,51, + 107,51,52,51,51,118,118,128,84,26,211,122,31,53,118,51, + 51,51,107,52,51,52,118,118,204,178,26,211,0,249,53,107, + 51,51,51,107,52,107,51,118,118,204,84,17,243,0,249,53, + 107,51,107,51,107,52,51,51,118,118,204,84,17,8,0,249, + 53,118,51,51,51,52,52,51,52,118,118,128,84,17,243,122, + 31,53,118,51,51,51,51,52,51,9,51,118,128,84,17,211, + 122,31,53,118,51,51,51,107,52,51,107,118,118,204,84,17, + 8,122,31,53,118,51,51,51,107,52,51,51,118,118,128,84, + 17,211,0,31,45,118,51,107,51,107,52,51,51,118,118,128, + 84,17,211,0,31,53,118,51,107,51,51,52,51,51,118,118, + 204,84,17,243,122,31,53,51,51,51,51,52,52,107,9,107, + 118,204,84,17,243,122,31,53,118,51,51,51,107,52,51,51, + 118,118,204,84,26,8,122,31,53,118,51,51,51,107,52,51, + 51,118,118,128,84,26,182,0,249,53,118,51,51,51,52,52, + 51,51,118,118,204,84,17,243,0,31,45,107,51,107,51,51, + 52,51,51,51,118,128,178,26,139,12,8,7,8,8,17,121, + 121,69,121,69,191,69,69,238,121,121,69,121,69,69,121,69, + 69,69,69,69,69,121,121,121,121,121,121,121,68,121,121,121, + 121,121,121,121,125,121,69,69,69,69,3,121,69,69,69,69, + 69,69,69,121,121,121,121,69,69,121,121,121,121,68,16,16, + 248,248,71,248,248,248,248,248,248,248,25,248,248,248,25,248, + 248,25,248,248,248,25,248,25,25,248,25,248,25,25,248,248, + 25,248,25,248,25,25,248,25,25,102,25,248,25,248,248,25, + 248,25,25,248,25,248,248,248,248,248,248,248,248,248,248,248, + 248,248,248,248,248,248,102,248,248,248,102,248,248,71,248,248, + 248,248,248,248,248,248,248,248,25,248,248,248,248,248,25,248, + 248,248,25,248,25,248,25,248,25,248,25,25,248,25,25,248, + 25,25,248,25,120,25,25,25,25,25,102,25,25,248,25,248, + 25,248,248,248,248,25,25,25,25,248,25,248,25,120,248,25, + 248,248,248,248,248,248,25,120,25,102,25,248,25,25,248,248, + 248,248,248,25,248,25,25,25,102,25,25,25,25,25,25,25, + 25,120,25,25,25,25,25,25,25,25,25,25,25,248,25,26, + 150,12,12,67,219,26,8,122,249,85,51,52,76,76,76,52, + 76,52,107,107,204,84,12,8,122,249,85,51,52,76,76,76, + 232,52,52,51,9,204,178,12,8,122,249,85,51,52,76,76, + 76,76,52,52,9,107,204,84,219,8,122,249,85,51,76,51, + 76,76,232,52,52,51,107,204,178,12,8,122,249,85,51,52, + 76,76,76,232,51,52,9,107,204,84,17,8,0,123,53,107, + 76,76,76,76,76,52,52,9,107,204,84,17,8,0,123,53, + 51,51,76,76,76,232,52,52,9,107,204,84,12,243,122,123, + 53,107,76,76,76,76,232,51,52,51,9,204,84,12,8,122, + 249,85,51,52,76,76,76,232,51,51,51,9,204,84,17,8, + 122,249,85,51,52,76,76,76,232,52,52,52,107,204,84,12, + 243,122,249,85,51,52,76,76,76,232,52,52,51,107,204,84, + 17,243,122,123,53,107,76,76,76,76,232,52,52,51,107,204, + 84,17,8,0,123,53,51,51,76,76,76,232,52,52,9,107, + 204,84,12,243,122,123,53,107,51,76,76,76,76,76,51,52, + 107,204,84,17,8,122,249,85,51,76,76,76,76,232,52,52, + 107,107,204,84,12,243,122,249,85,51,52,76,76,76,232,52, + 52,51,107,204,178,26,8,122,123,53,107,76,76,76,76,232, + 52,52,9,107,204,84,17,8,0,123,53,51,51,76,76,76, + 52,76,51,107,9,204,84,26,8,26,8,8,8,8,8,121, + 121,121,69,69,69,121,80,69,69,69,69,69,69,69,69,69, + 69,121,69,121,69,121,121,121,69,69,69,121,121,121,121,69, + 125,121,69,121,174,121,69,69,121,121,69,69,69,121,69,69, + 121,69,69,69,69,69,121,121,69,125,69,121,16,121,16,16, + 74,248,102,248,102,71,102,248,248,248,71,248,248,248,248,25, + 102,25,248,25,248,25,248,248,25,248,25,248,25,248,25,25, + 248,25,25,248,248,25,25,248,25,25,248,25,248,25,25,248, + 25,248,248,25,248,25,248,25,248,248,248,248,248,248,248,248, + 248,25,248,102,248,71,248,248,248,248,71,248,71,248,248,248, + 248,248,248,248,248,248,25,102,25,248,248,248,248,248,248,248, + 25,248,248,248,25,248,25,25,248,25,248,25,248,25,248,25, + 248,25,25,248,25,248,248,248,248,248,25,248,248,25,120,102, + 248,25,25,25,25,25,248,248,248,25,248,25,248,25,248,248, + 25,25,120,102,25,25,248,25,25,25,248,25,248,248,25,25, + 248,25,120,102,25,248,248,120,25,25,102,25,25,25,248,120, + 102,25,25,25,25,25,25,25,25,120,120,25,25,248,248,26, + 8,8,26,8,17,17,12,0,123,85,52,76,76,232,232,148, + 232,51,52,9,204,84,17,141,0,123,85,52,76,76,76,232, + 232,232,51,52,9,204,154,219,182,0,123,85,52,76,76,232, + 232,232,232,76,51,9,204,154,17,141,0,123,85,52,76,232, + 232,232,232,232,51,52,9,204,168,17,141,0,123,85,52,76, + 76,76,232,232,232,76,51,9,204,84,17,243,122,123,85,52, + 76,76,76,232,148,232,51,51,9,204,154,17,243,122,123,85, + 76,232,76,76,232,232,232,76,51,9,204,154,17,243,0,123, + 85,52,76,76,76,232,232,232,51,52,52,204,84,17,141,0, + 123,85,52,76,76,232,232,232,232,76,52,52,204,84,17,141, + 0,123,85,52,76,76,76,232,232,232,51,107,9,204,154,17, + 243,0,123,85,52,76,76,76,232,232,232,51,52,52,204,84, + 17,243,0,123,194,52,76,76,76,232,232,232,51,52,52,204, + 84,17,8,162,123,85,76,232,76,232,232,232,76,76,51,9, + 204,154,17,211,162,123,85,76,232,76,76,232,232,76,76,51, + 9,204,84,17,141,0,123,85,52,76,76,76,232,232,232,51, + 52,9,204,154,17,211,0,123,85,52,76,76,76,232,232,232, + 51,52,9,204,154,17,243,122,123,85,52,76,76,76,232,232, + 76,76,51,9,204,154,17,141,162,123,85,52,232,76,232,232, + 148,232,76,51,52,204,154,12,8,8,8,8,7,8,12,121, + 121,121,191,69,191,69,69,238,121,121,69,121,69,69,121,69, + 69,121,69,121,69,69,121,121,69,121,121,69,68,121,121,121, + 121,121,121,121,121,69,121,69,69,69,69,69,69,69,69,69, + 69,121,121,121,121,121,121,121,121,121,121,121,121,16,121,121, + 71,71,102,71,248,71,71,248,248,248,248,248,248,248,248,248, + 25,248,102,25,248,248,248,25,248,25,248,248,25,25,25,248, + 25,248,248,25,25,248,248,25,248,25,248,25,248,248,25,248, + 25,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248, + 71,248,248,248,248,248,248,71,248,248,71,248,248,248,248,248, + 248,248,248,248,248,248,25,248,248,248,248,248,248,248,25,248, + 248,25,248,25,248,25,248,248,25,25,248,25,248,25,248,25, + 248,25,248,248,248,25,102,25,25,248,25,102,120,102,25,248, + 248,248,248,248,248,25,25,248,248,248,248,248,248,25,102,120, + 248,102,25,120,248,102,120,248,248,25,248,25,25,102,120,248, + 248,248,120,248,248,25,248,248,120,25,120,248,25,25,25,25, + 25,248,248,25,38,120,120,25,25,25,120,25,133,248,25,26, + 150,8,12,8,12,187,12,122,167,194,76,76,232,148,232,148, + 148,232,76,52,204,168,26,211,122,167,194,76,76,148,148,232, + 148,148,232,76,52,204,168,26,243,122,167,194,76,76,232,232, + 232,148,232,148,52,52,204,168,26,211,122,167,194,76,76,232, + 148,232,148,148,232,232,52,204,168,12,211,122,167,194,76,76, + 148,232,232,148,232,232,76,52,204,168,12,109,122,167,194,76, + 76,148,232,232,148,148,232,76,52,204,168,17,243,122,167,194, + 76,232,148,232,232,148,232,232,76,52,204,168,26,243,122,167, + 194,76,76,148,232,232,148,148,232,52,52,204,168,26,211,122, + 167,194,76,76,232,148,232,148,232,232,52,52,204,168,26,211, + 122,167,194,76,76,148,232,232,148,148,232,76,52,204,168,17, + 109,122,167,194,76,76,148,148,232,148,148,232,52,52,204,168, + 26,211,122,167,194,76,76,148,148,232,148,148,232,52,52,204, + 168,12,109,122,167,194,76,232,232,232,232,148,232,232,76,52, + 204,168,219,243,122,167,194,76,232,148,232,148,148,232,148,52, + 52,204,168,26,211,122,167,194,76,232,232,232,232,148,148,232, + 76,52,204,168,219,243,122,167,194,76,76,148,148,232,148,148, + 232,52,52,204,168,26,243,122,167,194,76,76,148,232,232,148, + 232,232,76,52,204,168,26,211,122,167,194,76,232,232,148,232, + 148,232,232,52,52,204,168,12,8,12,8,8,8,8,8,121, + 191,80,191,80,69,69,69,69,238,69,69,121,121,69,121,69, + 69,69,121,69,121,121,69,121,69,125,121,121,121,121,121,121, + 125,121,121,121,121,121,121,69,69,174,69,174,174,121,121,69, + 69,69,69,121,121,69,69,121,121,121,16,16,16,16,16,16, + 102,248,71,248,74,248,248,248,248,248,248,102,248,248,248,248, + 248,248,25,248,25,248,248,248,25,248,25,25,248,248,25,248, + 25,25,248,248,25,25,248,25,248,25,248,248,248,248,248,248, + 248,25,248,248,248,248,248,248,248,248,248,248,248,248,248,248, + 248,248,248,71,248,248,248,248,248,248,248,248,248,248,71,248, + 248,248,248,248,248,248,71,248,248,248,248,248,248,248,71,248, + 248,248,248,248,25,248,25,248,248,25,248,25,248,25,248,248, + 25,248,248,25,25,248,25,248,248,248,248,25,248,25,248,120, + 248,248,248,248,248,248,248,248,248,25,248,248,248,248,120,248, + 248,25,248,248,248,25,102,248,25,120,102,248,248,25,25,248, + 248,25,248,248,25,102,25,248,248,248,248,248,248,248,248,248, + 120,25,25,120,120,25,25,25,25,25,25,248,120,25,248,26, + 12,8,12,8,219,26,12,122,237,32,232,148,148,148,148,147, + 148,232,232,148,231,222,17,243,122,237,32,232,148,148,148,148, + 148,148,232,232,232,231,168,219,211,122,237,32,232,148,148,148, + 148,148,232,232,232,232,231,222,17,243,122,237,32,232,148,148, + 148,148,148,148,232,76,232,231,168,26,243,122,237,32,232,148, + 148,148,148,147,232,148,232,232,231,222,26,8,122,237,32,232, + 148,148,148,148,148,148,148,232,232,231,222,219,109,0,237,32, + 232,232,148,148,148,148,148,232,232,232,231,222,17,211,122,237, + 32,232,148,148,148,148,147,148,148,76,148,231,222,17,243,122, + 237,32,232,148,148,148,148,147,148,148,76,148,231,222,17,243, + 122,237,32,232,148,148,148,148,148,148,148,232,232,231,222,219, + 243,122,237,32,232,148,148,148,148,148,148,232,232,232,231,222, + 17,8,122,237,32,232,148,148,148,148,148,148,232,232,232,231, + 222,219,243,122,237,32,232,232,148,148,148,147,148,232,232,232, + 231,168,26,211,122,237,32,232,232,148,148,148,147,148,148,52, + 148,231,222,17,243,122,237,32,232,232,148,148,148,148,148,148, + 232,232,231,222,219,211,122,237,32,232,148,148,148,148,148,148, + 148,232,232,231,222,219,211,122,237,32,232,148,148,148,148,147, + 148,232,232,232,231,222,219,8,122,237,32,232,232,148,148,148, + 77,148,148,76,232,231,222,219,8,8,8,8,8,8,12,191, + 121,69,69,69,191,69,238,69,69,121,69,69,69,69,69,69, + 69,69,121,121,69,121,121,121,121,121,121,16,121,16,121,69, + 121,121,121,121,121,69,69,121,121,121,125,121,121,121,69,121, + 69,121,121,121,69,121,121,69,121,121,121,16,121,16,16,121, + 71,102,248,248,74,248,74,248,102,71,248,248,248,248,248,248, + 248,248,248,248,248,25,248,71,25,248,248,25,248,248,25,25, + 248,248,25,248,248,248,248,25,248,248,25,248,248,25,248,248, + 248,25,25,248,248,248,248,248,248,248,248,248,248,71,248,248, + 248,248,248,248,248,248,248,71,248,248,71,71,248,248,248,248, + 248,102,25,248,248,248,248,248,248,248,248,102,248,248,248,248, + 25,248,25,248,248,25,248,25,25,248,248,25,248,248,25,248, + 25,248,248,248,248,248,248,248,25,248,248,25,248,248,248,248, + 248,248,248,248,248,248,25,248,248,248,248,248,248,248,248,120, + 248,248,248,248,248,25,248,248,248,25,248,120,248,248,25,248, + 244,102,120,244,248,244,25,248,248,248,25,248,25,248,248,248, + 248,248,25,25,248,25,248,25,102,25,25,25,248,248,248,26, + 12,150,17,8,219,187,12,42,138,117,193,193,157,157,189,189, + 157,193,193,194,70,31,26,8,122,138,117,193,193,157,157,189, + 189,157,193,193,85,70,129,26,109,122,138,117,193,193,157,157, + 189,189,157,193,193,85,70,31,26,243,42,138,117,193,193,157, + 157,189,189,157,193,193,85,70,228,26,243,122,138,117,193,193, + 157,157,189,189,157,193,193,194,70,129,26,211,122,138,117,193, + 193,157,157,189,189,157,193,193,85,70,222,26,211,122,138,117, + 193,193,157,157,189,189,157,193,193,85,70,31,26,8,122,138, + 117,193,193,157,157,189,189,157,193,193,194,70,31,17,243,122, + 138,117,193,193,157,157,189,189,157,193,193,194,70,31,26,8, + 122,138,117,193,193,157,157,189,189,157,193,193,85,70,222,187, + 243,122,138,117,193,193,157,157,189,189,157,193,193,194,70,31, + 26,8,42,138,117,193,193,157,157,189,189,157,193,193,194,70, + 31,26,8,122,138,117,193,193,157,157,189,189,157,193,193,32, + 70,31,26,243,122,138,117,193,157,157,157,189,189,157,193,193, + 194,70,31,26,8,122,138,117,193,193,157,157,189,189,157,193, + 193,85,70,222,26,211,122,138,117,193,193,157,157,189,189,157, + 193,193,85,70,31,26,8,122,138,117,193,193,157,157,189,189, + 157,193,193,85,70,31,26,8,42,138,117,193,193,157,157,189, + 189,157,193,193,85,70,31,26,8,26,8,7,8,8,8,121, + 191,69,191,69,69,69,121,69,238,69,121,69,121,69,121,121, + 69,121,69,69,69,121,121,121,121,121,121,121,121,16,121,121, + 121,121,121,121,121,121,69,121,69,121,121,69,69,121,69,121, + 69,69,69,121,69,121,121,121,121,16,16,16,121,16,16,16, + 248,71,74,74,248,74,248,248,71,248,248,248,248,248,248,248, + 248,102,25,248,102,248,248,25,248,248,248,248,248,248,248,25, + 248,248,248,248,248,25,248,248,248,248,248,248,248,248,248,248, + 248,248,71,248,248,248,248,248,248,248,71,248,248,248,248,248, + 248,248,248,248,248,71,248,248,248,71,248,248,71,248,248,248, + 248,248,248,248,248,248,248,248,248,248,248,248,248,248,25,248, + 248,248,248,25,248,248,248,248,248,248,248,248,248,25,248,248, + 248,25,248,248,248,248,25,248,71,248,248,248,248,248,248,248, + 248,248,248,248,248,248,71,248,248,248,248,244,248,25,248,248, + 248,120,248,120,248,248,25,120,102,71,248,248,248,25,248,248, + 248,25,102,248,120,102,244,248,120,102,244,248,71,25,25,25, + 248,25,248,120,38,248,25,120,25,248,248,248,25,248,248,26, + 12,12,17,8,219,17,12,0,92,87,21,21,156,43,13,13, + 30,242,21,18,18,35,12,109,0,226,87,18,21,242,30,13, + 13,30,242,21,21,18,35,12,12,122,226,87,18,72,242,30, + 86,13,30,242,21,18,18,35,12,12,0,226,87,21,21,242, + 30,13,13,30,242,21,21,18,35,12,187,0,226,87,21,21, + 156,43,13,13,30,242,21,18,18,35,187,12,0,226,87,21, + 21,156,30,13,13,30,242,21,33,18,46,12,12,0,226,87, + 18,72,242,30,13,13,30,242,21,18,18,59,17,243,0,226, + 87,18,72,242,30,13,13,30,242,21,18,18,35,26,12,0, + 226,87,21,21,156,43,13,13,30,242,21,18,18,35,12,109, + 0,226,87,18,72,242,30,13,13,30,242,21,18,18,35,26, + 187,0,226,87,18,21,242,30,13,13,30,242,21,18,18,47, + 17,243,0,226,87,21,21,242,30,13,13,30,242,21,18,18, + 35,12,109,0,226,21,21,21,156,30,86,13,30,242,18,18, + 18,47,12,12,0,226,87,21,72,156,43,13,13,30,72,21, + 18,18,35,12,12,122,226,87,18,72,242,30,13,13,30,242, + 21,18,18,46,12,12,0,226,87,18,21,242,30,13,13,30, + 242,21,33,18,35,17,109,0,226,87,21,21,242,30,13,13, + 30,242,21,18,18,35,17,243,0,226,21,21,21,156,43,13, + 13,30,242,21,18,18,59,12,8,12,8,8,8,8,8,121, + 191,121,80,191,69,238,69,121,80,238,69,69,69,69,69,121, + 69,121,121,121,69,69,121,69,69,121,121,16,16,16,16,121, + 121,121,121,121,121,125,121,69,121,69,69,121,121,69,121,121, + 121,121,121,69,121,121,121,121,121,16,121,16,16,121,121,121, + 74,248,248,102,248,71,71,248,248,248,248,248,248,248,248,248, + 25,248,248,25,248,248,248,248,248,248,25,248,248,25,248,248, + 248,25,248,248,248,248,248,25,248,248,25,248,248,248,248,248, + 248,248,248,248,248,248,248,248,248,248,71,248,248,71,248,248, + 248,248,248,248,248,248,248,71,248,248,71,248,71,71,248,248, + 248,248,248,248,248,248,248,248,102,248,248,248,248,71,248,248, + 248,25,248,248,248,25,248,25,248,248,25,248,248,248,25,248, + 248,248,25,248,248,71,248,248,248,248,248,248,248,248,248,248, + 248,248,248,248,248,248,248,248,248,248,248,248,71,25,25,248, + 248,248,248,244,248,71,248,248,120,248,25,248,71,248,248,248, + 71,25,248,248,248,248,248,248,248,120,25,248,244,102,120,25, + 102,120,248,120,120,120,25,248,25,25,25,248,25,102,71,219, + 12,8,26,8,26,42,12,221,40,23,250,86,179,146,51,51, + 149,86,86,250,28,187,26,8,0,203,19,86,86,149,149,51, + 51,149,86,250,86,28,50,12,8,0,203,19,250,86,179,146, + 51,146,146,86,86,250,28,187,17,243,0,40,23,250,86,149, + 149,51,51,149,86,250,250,28,187,187,8,0,203,23,250,86, + 179,146,51,136,149,179,86,250,28,50,12,8,0,203,23,250, + 86,179,149,51,51,149,86,86,250,28,163,12,8,0,203,19, + 250,86,179,149,51,51,149,86,86,250,28,187,26,8,0,40, + 19,250,86,179,149,51,51,149,86,86,250,28,187,12,8,0, + 203,23,250,86,179,146,51,51,149,86,86,250,28,187,26,8, + 0,40,19,250,86,179,149,51,51,149,86,250,86,28,163,12, + 8,0,203,19,86,86,149,149,51,51,149,86,86,250,28,187, + 26,243,0,203,23,250,86,149,149,51,51,149,86,86,250,28, + 187,26,8,221,40,23,250,86,179,149,51,146,146,179,250,250, + 28,187,187,8,0,40,23,250,86,179,146,51,51,149,86,86, + 250,28,187,187,243,0,40,19,250,86,179,149,51,51,149,86, + 250,86,28,163,12,8,0,203,19,86,86,149,149,51,51,149, + 86,86,250,28,187,26,8,0,203,86,250,86,149,149,51,51, + 149,86,86,250,28,187,26,8,221,40,23,250,86,179,146,51, + 51,149,86,86,250,28,187,17,8,12,8,7,8,8,8,16, + 191,121,69,238,69,69,121,191,69,69,121,238,69,69,69,69, + 121,121,69,121,121,69,69,121,121,121,121,121,121,16,121,121, + 121,16,121,121,121,125,174,121,121,121,69,69,121,69,69,69, + 69,69,121,121,69,121,69,121,121,191,121,16,16,16,16,16, + 71,102,71,74,71,71,71,102,71,71,71,102,248,248,248,248, + 248,248,248,248,248,248,248,248,25,248,248,25,248,248,248,248, + 248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248, + 248,248,248,248,248,248,248,248,71,248,248,248,71,248,248,248, + 248,248,248,71,248,71,248,248,248,71,248,102,248,248,248,248, + 248,71,248,248,248,248,248,71,71,248,248,248,248,25,248,248, + 248,25,102,25,248,248,248,248,102,25,71,248,248,248,71,248, + 248,248,71,248,248,248,248,248,248,248,248,248,71,248,248,248, + 248,248,248,248,248,248,248,248,248,248,248,244,25,71,248,71, + 248,248,248,248,71,248,248,248,248,248,120,102,120,248,248,120, + 248,244,102,244,248,248,248,248,248,248,71,25,248,248,248,248, + 244,248,25,248,25,38,120,25,248,120,102,25,120,71,248,26, + 12,8,187,8,26,0,12,0,97,32,157,189,189,189,189,189, + 189,189,189,85,204,61,219,211,0,95,32,157,189,189,189,189, + 189,189,189,157,85,128,61,183,211,0,95,32,157,189,189,189, + 189,189,189,189,157,85,128,61,219,211,0,40,32,157,189,189, + 189,189,189,189,189,157,85,128,61,219,211,0,95,32,157,189, + 189,189,189,189,189,189,157,85,128,61,219,211,0,40,32,157, + 189,189,189,189,189,189,189,157,85,204,61,183,211,0,95,32, + 157,189,189,189,189,189,189,189,157,85,204,61,219,211,0,95, + 32,157,189,189,189,189,189,189,189,189,85,204,61,219,211,0, + 40,32,157,189,189,189,189,189,189,189,189,85,204,61,219,211, + 0,95,32,157,189,189,189,189,189,189,189,157,85,204,91,219, + 211,0,95,32,157,189,189,189,189,189,189,189,157,85,128,61, + 219,211,0,40,32,157,189,189,189,189,189,189,189,189,85,204, + 91,219,243,0,95,32,157,189,189,189,189,189,189,189,157,85, + 128,61,219,211,0,40,32,157,189,189,189,189,189,189,189,189, + 85,204,61,219,211,0,95,32,157,189,189,189,189,189,189,189, + 157,85,128,61,183,211,0,95,32,157,189,189,189,189,189,189, + 189,189,85,204,61,219,211,0,40,32,157,189,189,189,189,189, + 189,189,157,85,128,61,219,211,0,47,32,157,189,189,189,189, + 189,189,189,157,85,204,61,219,8,8,8,8,8,8,8,191, + 121,191,191,69,191,69,121,80,238,69,69,69,191,69,69,121, + 69,121,121,69,121,69,121,121,121,16,16,16,16,121,121,16, + 16,121,16,16,121,16,121,121,121,69,69,121,69,121,121,69, + 69,121,69,69,121,121,121,121,121,16,121,121,16,16,16,16, + 74,71,71,71,248,102,71,248,102,248,71,71,248,248,102,248, + 248,102,248,25,248,248,248,102,248,248,248,248,248,248,248,248, + 248,248,248,248,248,248,248,248,248,248,248,248,248,71,248,248, + 248,248,248,71,248,248,248,248,248,248,71,248,71,71,71,248, + 248,248,248,248,248,71,248,248,248,248,71,248,71,71,71,102, + 248,71,248,71,71,71,248,248,71,71,248,248,71,248,248,248, + 248,248,248,248,248,25,248,248,71,25,248,248,248,248,248,248, + 248,25,248,248,248,248,248,248,248,248,248,248,248,248,248,248, + 248,248,248,248,248,248,248,248,248,248,248,71,248,248,248,248, + 248,248,248,248,120,248,248,248,102,120,25,248,248,248,248,248, + 248,248,248,248,248,248,244,248,248,248,71,120,248,248,248,248, + 25,102,120,71,120,248,248,25,25,25,120,38,25,71,248,26, + 12,243,26,139,26,183,12,0,40,53,52,76,148,76,148,148, + 147,148,52,27,230,26,122,243,0,40,53,52,76,148,76,148, + 148,148,232,52,27,230,91,122,243,0,40,53,52,76,148,148, + 148,147,148,232,52,27,230,91,122,243,0,40,53,52,76,232, + 148,148,148,148,232,52,27,230,91,122,243,0,40,53,52,76, + 148,232,232,148,148,232,52,27,230,91,122,243,0,40,53,52, + 232,232,148,148,148,148,232,52,185,230,91,122,243,0,40,53, + 52,232,232,148,148,148,148,232,52,198,230,91,122,243,0,40, + 53,52,76,232,148,76,147,148,148,52,27,230,91,122,243,0, + 40,53,52,76,148,76,148,148,147,148,52,27,230,26,122,243, + 0,40,45,52,232,232,148,76,148,148,232,52,27,230,91,122, + 243,0,40,53,52,76,148,76,148,148,148,232,76,27,230,91, + 122,243,0,40,45,52,76,232,148,76,147,147,148,52,27,230, + 26,42,243,0,40,53,52,76,148,76,148,147,148,232,52,27, + 230,91,122,243,0,40,53,232,76,232,148,76,147,148,148,52, + 27,230,26,122,243,0,40,53,52,232,148,76,148,148,148,232, + 52,27,230,91,122,243,0,40,53,52,76,232,76,148,148,147, + 232,52,185,230,26,122,243,0,40,45,232,76,232,76,148,148, + 148,232,232,27,230,91,122,243,0,40,53,52,76,148,148,76, + 147,148,232,52,27,230,26,42,8,12,8,8,8,8,8,16, + 121,69,191,69,69,191,69,121,69,121,69,69,121,69,121,69, + 121,69,121,121,69,69,69,121,121,191,121,121,16,16,121,121, + 16,121,121,16,121,121,69,121,121,121,69,121,121,69,121,121, + 69,121,121,69,69,121,121,121,121,16,16,121,121,16,121,16, + 71,248,71,102,74,71,248,71,71,248,248,248,248,248,248,71, + 25,248,248,248,248,248,248,25,25,102,25,102,25,248,248,248, + 248,248,248,248,248,248,248,248,248,248,248,248,248,248,71,248, + 248,248,248,248,248,248,71,248,248,71,248,71,248,248,248,71, + 71,71,248,248,248,248,248,71,248,248,248,71,248,248,248,248, + 71,248,71,248,248,248,248,71,248,248,71,248,25,248,248,248, + 248,248,248,248,248,248,248,248,25,71,248,248,248,248,248,248, + 248,71,248,248,248,71,248,248,248,71,248,248,248,71,248,71, + 248,248,248,248,248,248,248,248,248,248,244,248,248,248,248,248, + 248,248,248,248,248,248,248,248,248,102,244,248,248,248,248,248, + 71,248,248,248,71,248,248,71,248,248,248,248,244,248,244,248, + 244,248,248,248,248,25,120,102,248,248,248,120,248,248,248,26, + 12,12,17,12,183,42,17,0,212,170,52,76,232,148,148,147, + 148,76,27,185,230,91,26,211,0,40,204,27,76,232,148,148, + 147,147,52,232,185,230,91,42,211,0,40,204,27,76,232,232, + 148,148,147,76,27,185,230,91,42,211,0,212,170,52,232,232, + 232,148,148,147,76,27,185,230,91,42,211,0,40,204,27,76, + 232,232,148,147,147,76,27,27,230,91,26,211,0,212,231,232, + 76,232,232,148,148,147,52,232,27,230,91,42,211,0,212,231, + 232,76,232,232,148,148,147,76,27,27,230,91,42,211,0,40, + 204,27,232,232,148,148,148,147,76,27,185,230,91,42,211,0, + 212,170,52,76,232,148,148,148,148,76,27,185,230,91,26,211, + 0,212,170,232,76,232,148,147,147,147,76,232,185,230,91,42, + 211,0,40,204,27,76,232,148,148,147,147,76,27,185,230,91, + 42,211,0,40,170,52,232,232,148,148,148,148,76,27,185,230, + 91,42,211,0,40,204,27,76,232,148,148,147,147,76,27,185, + 230,91,42,211,0,40,204,27,76,232,148,148,148,147,76,27, + 185,230,91,26,211,0,40,204,27,76,232,148,148,147,147,76, + 27,27,230,91,42,211,0,40,204,27,76,232,148,148,147,148, + 232,27,27,230,91,26,211,0,212,231,52,76,232,148,148,147, + 147,52,232,185,230,91,42,211,0,40,204,27,76,232,148,148, + 148,147,76,27,198,230,91,26,8,8,8,7,8,8,12,191, + 121,238,69,121,121,80,69,191,69,238,121,69,69,69,121,69, + 69,121,69,121,69,121,69,121,121,121,16,16,121,16,16,16, + 16,16,16,121,121,121,121,121,121,121,69,121,69,121,69,69, + 121,69,125,125,238,125,121,121,16,121,16,16,16,121,16,16, + 71,102,71,248,248,74,248,102,71,248,248,248,248,248,248,71, + 248,102,248,248,248,248,248,248,248,248,248,248,248,248,248,248, + 248,248,248,248,248,248,248,248,71,248,248,71,248,248,71,248, + 71,248,248,248,248,248,71,248,248,248,248,71,71,248,248,248, + 248,71,71,71,248,71,248,71,71,248,248,71,248,102,71,248, + 71,248,71,71,71,71,248,71,248,248,248,71,248,102,248,248, + 248,248,248,248,248,248,248,71,25,248,248,248,248,248,248,248, + 248,248,71,248,248,248,248,71,248,71,248,71,248,71,248,71, + 248,71,248,248,248,248,248,248,248,248,248,248,244,25,248,248, + 248,248,248,248,248,248,248,248,248,248,248,71,248,244,248,248, + 71,244,248,248,71,248,248,71,248,248,248,248,248,248,248,248, + 248,248,248,248,248,38,244,25,248,25,102,25,248,102,248,26, + 12,12,17,8,42,26,17,0,212,98,165,45,53,194,194,194, + 194,53,45,165,230,91,0,12,0,40,98,170,45,53,194,194, + 194,194,194,45,45,230,91,0,12,0,40,98,165,45,53,194, + 194,194,194,45,53,165,230,91,0,187,0,212,98,165,45,53, + 194,194,194,194,45,45,45,230,91,0,12,0,40,98,170,45, + 53,194,194,194,194,45,45,45,230,91,0,12,0,212,98,165, + 45,53,194,194,194,194,194,45,165,230,91,0,12,0,212,98, + 165,45,53,194,194,194,194,45,53,165,230,91,0,12,0,40, + 98,170,45,53,194,194,194,194,45,53,165,230,91,0,12,0, + 212,98,165,45,53,194,194,194,194,53,45,165,230,91,0,12, + 0,212,98,165,45,53,53,194,194,194,194,45,165,230,91,0, + 12,0,40,98,170,45,53,194,194,194,194,45,45,45,230,91, + 0,12,0,212,98,165,45,53,194,194,194,32,45,45,165,230, + 61,0,12,0,40,98,170,45,45,194,194,194,194,45,53,165, + 230,91,0,12,0,40,98,165,45,53,194,194,194,194,45,53, + 165,230,91,0,12,0,40,98,170,45,53,194,194,194,194,45, + 45,165,230,91,0,12,0,40,98,165,45,53,194,194,194,194, + 45,45,165,230,91,0,12,0,212,98,45,45,53,194,194,194, + 194,194,45,165,230,91,0,12,0,40,98,170,45,53,194,194, + 194,194,45,53,165,230,91,122,8,12,8,8,8,8,8,121, + 191,121,191,69,191,69,69,121,69,238,69,238,69,121,69,121, + 69,69,121,69,121,69,69,121,121,121,121,16,121,16,121,16, + 121,121,121,16,16,16,121,121,121,121,69,121,121,121,121,69, + 121,69,121,125,121,125,121,121,16,121,121,16,16,16,16,16, + 71,71,74,74,74,248,71,71,102,102,71,71,102,248,248,248, + 248,248,248,248,102,248,248,248,248,248,248,248,248,248,248,248, + 248,25,71,248,248,71,248,248,248,248,71,248,248,248,248,248, + 248,71,248,248,71,71,248,71,248,71,248,248,248,248,71,71, + 71,248,248,248,71,248,71,248,248,71,71,248,71,71,248,71, + 248,71,248,248,248,248,71,248,248,248,248,248,248,25,248,248, + 248,248,248,248,248,248,248,25,71,25,71,248,248,248,71,248, + 248,248,248,248,248,71,248,248,248,248,71,248,248,248,244,248, + 248,248,248,71,248,71,248,248,248,71,248,248,248,71,248,248, + 248,248,71,71,71,248,248,248,248,102,248,248,71,248,71,71, + 248,102,71,102,248,248,102,248,244,71,248,248,71,248,248,102, + 248,25,102,248,248,248,248,102,25,248,25,248,248,71,71,26, + 12,12,26,12,42,12,26,0,221,251,123,123,55,167,79,79, + 79,79,123,123,168,91,26,211,0,162,251,123,123,103,167,79, + 79,79,167,123,251,168,26,42,211,0,0,31,251,123,103,79, + 79,79,79,167,123,228,168,26,26,211,0,221,251,251,123,167, + 103,220,79,79,167,123,251,168,26,42,211,0,0,31,123,123, + 167,167,79,79,79,167,167,251,168,26,26,211,0,0,251,251, + 123,103,167,79,79,79,167,123,123,168,26,42,211,0,162,251, + 251,123,167,103,220,79,79,167,123,123,168,26,42,211,0,162, + 251,123,123,123,79,79,79,79,79,123,123,168,26,26,211,0, + 221,251,123,228,167,103,79,220,79,167,103,123,168,91,26,211, + 0,221,137,123,123,123,79,79,79,79,167,123,123,168,26,26, + 211,0,162,251,123,123,167,103,79,79,79,167,167,251,168,26, + 42,211,0,221,251,251,123,123,79,79,79,79,167,123,123,168, + 26,26,211,0,162,251,123,123,103,79,79,79,79,79,123,123, + 168,26,42,211,0,162,251,251,123,123,79,79,220,79,167,123, + 123,168,91,26,211,0,162,251,123,123,103,167,79,79,79,167, + 123,123,168,26,26,211,0,162,251,251,123,167,103,79,220,79, + 167,123,123,168,91,42,211,0,162,251,251,123,167,103,79,79, + 79,167,123,123,168,26,42,211,0,162,31,251,123,123,79,79, + 79,79,167,123,228,206,12,42,8,12,8,7,8,8,8,191, + 121,121,69,191,69,191,69,191,69,121,69,121,69,121,69,69, + 121,69,121,69,69,121,69,121,121,121,16,16,16,121,16,121, + 16,16,16,121,16,121,121,121,121,16,121,69,69,121,69,69, + 125,121,125,69,121,16,121,121,121,16,121,121,16,16,68,16, + 71,71,248,102,74,102,71,71,71,248,248,71,71,248,248,248, + 248,248,248,248,248,248,248,248,71,248,248,248,248,248,248,248, + 71,248,248,248,248,248,248,248,248,248,248,248,248,248,71,248, + 248,71,71,248,248,248,248,248,248,71,71,248,71,248,248,71, + 71,71,71,248,248,248,71,71,248,248,71,248,71,244,248,71, + 71,71,71,71,71,248,71,71,71,248,248,248,248,248,248,248, + 248,248,248,248,248,25,71,25,71,248,248,248,248,248,248,248, + 248,248,71,248,248,71,248,71,248,248,248,71,248,248,248,71, + 71,71,248,71,248,244,102,71,248,71,71,248,248,71,71,248, + 71,248,248,248,71,248,248,248,248,248,248,248,71,248,248,71, + 71,248,244,102,71,244,102,248,248,71,71,248,71,248,248,248, + 71,248,248,248,248,102,120,248,102,248,25,38,120,248,71,219, + 243,12,26,8,42,211,122,0,0,0,0,0,0,0,0,0, + 0,0,0,0,219,132,42,12,0,0,0,0,0,0,0,0, + 0,0,0,0,0,183,150,42,12,0,0,0,0,0,0,0, + 0,0,0,0,0,0,219,132,26,243,0,0,0,0,0,0, + 0,0,0,0,0,0,0,219,132,26,12,0,0,0,0,0, + 0,122,0,0,0,0,0,0,183,17,26,150,0,0,0,0, + 0,0,0,0,0,0,0,0,0,183,12,26,150,0,0,0, + 0,0,0,0,0,0,0,0,0,0,219,150,42,12,0,0, + 0,0,0,0,0,0,0,0,0,0,0,219,132,42,243,0, + 0,0,0,0,0,0,0,0,0,0,0,0,219,132,42,150, + 0,0,0,0,0,0,0,0,0,0,0,0,0,219,132,26, + 12,0,0,0,0,0,0,0,0,0,0,0,0,0,183,132, + 26,12,0,0,0,0,0,0,0,0,0,0,0,0,0,219, + 132,26,12,0,0,0,0,0,0,0,0,0,0,0,0,0, + 219,150,42,12,0,0,0,0,0,0,0,0,0,0,0,0, + 0,219,132,42,12,0,0,0,0,0,0,0,0,0,0,0, + 0,0,219,132,26,12,0,0,0,0,0,0,0,0,0,0, + 0,0,0,219,132,42,150,0,0,0,0,0,0,0,0,0, + 0,0,0,0,219,132,26,12,0,0,0,0,0,0,0,0, + 0,0,0,0,0,42,17,26,243,26,8,8,8,8,8,16, + 191,121,69,191,69,69,69,191,69,191,69,121,69,121,69,121, + 69,121,69,121,69,69,121,121,121,121,121,16,16,121,121,121, + 16,121,16,121,16,16,121,121,121,121,121,121,69,121,121,121, + 69,121,121,125,121,16,16,121,16,16,121,121,121,16,16,16, + 74,71,74,74,71,71,74,248,71,71,71,248,248,248,248,248, + 248,248,248,248,248,248,71,248,248,248,248,248,248,248,248,248, + 248,248,248,248,248,71,248,248,248,248,71,248,71,71,248,71, + 71,248,248,248,71,71,248,71,71,248,248,71,248,71,71,248, + 248,71,248,71,71,71,248,248,71,71,248,71,248,248,71,71, + 248,71,71,71,248,71,248,248,248,74,248,248,248,248,248,248, + 248,248,248,248,248,71,248,71,248,248,248,248,71,248,248,248, + 71,248,248,248,248,248,71,248,244,248,71,248,71,248,71,248, + 248,248,248,248,71,248,244,248,71,244,248,71,71,248,248,71, + 248,244,248,244,248,248,248,244,248,102,248,71,248,244,71,248, + 248,102,248,71,248,102,244,102,248,248,248,248,248,248,244,102, + 248,248,102,248,248,120,102,248,248,248,244,244,248,71,71,26, + 12,12,17,8,42,8,122,42,26,26,26,26,42,42,26,17, + 219,219,219,42,26,219,26,187,42,26,26,26,26,42,42,26, + 17,219,219,219,26,26,219,26,187,42,17,26,26,26,42,42, + 26,17,219,219,219,26,26,219,42,187,42,26,26,26,26,42, + 42,26,219,219,219,219,26,26,219,26,187,42,17,26,26,26, + 42,42,26,219,219,219,219,26,26,132,26,187,42,26,26,26, + 26,42,42,26,219,219,219,219,26,26,132,219,187,42,26,26, + 26,26,42,42,26,219,219,219,219,26,26,219,26,187,42,26, + 26,26,26,26,42,26,219,219,219,219,26,26,219,26,187,42, + 26,26,26,26,183,42,26,219,219,219,219,42,26,219,219,187, + 42,17,26,26,26,26,42,26,219,219,219,219,26,26,219,26, + 187,42,26,26,26,26,42,42,26,17,219,219,219,26,26,17, + 26,187,42,26,26,26,26,26,42,26,219,219,219,219,26,219, + 219,219,187,42,26,26,26,26,42,42,26,219,219,219,219,26, + 26,219,219,187,42,26,26,26,26,26,42,26,17,219,219,219, + 42,26,219,219,187,42,26,26,26,26,42,42,26,17,17,219, + 219,26,26,219,26,187,42,26,26,26,26,42,42,26,219,219, + 219,219,26,26,219,219,187,42,26,26,26,26,42,42,26,219, + 219,219,219,26,219,219,26,187,42,17,26,26,26,26,42,26, + 17,219,219,219,26,219,132,26,12,12,8,8,8,8,8,191, + 191,238,121,80,121,191,121,69,191,69,191,69,121,69,121,69, + 69,121,69,121,69,121,69,121,121,16,121,121,121,16,16,16, + 121,16,121,16,121,121,121,121,121,121,121,121,121,125,125,69, + 121,69,121,16,121,121,121,16,121,16,16,16,16,16,16,208, + 74,71,71,71,71,71,71,248,74,248,71,248,71,248,74,248, + 248,248,248,248,248,248,71,248,248,71,248,248,248,248,248,248, + 248,71,248,248,248,71,248,248,248,248,71,248,248,248,248,248, + 71,248,71,248,248,71,248,248,71,71,248,71,248,248,71,71, + 248,71,71,71,248,71,71,248,71,71,71,71,71,71,248,71, + 71,248,71,71,71,71,71,248,248,248,248,248,102,248,248,248, + 248,248,248,248,248,248,248,248,248,71,248,248,248,71,248,248, + 71,248,71,71,71,120,102,248,71,248,71,248,71,248,71,71, + 71,71,71,244,71,71,71,248,248,102,248,248,71,248,102,71, + 102,71,102,248,71,248,102,102,244,102,248,71,102,248,71,71, + 71,71,71,71,248,248,71,71,71,248,71,248,102,248,248,248, + 248,248,248,248,248,71,120,102,248,102,102,248,248,71,71,26, + 12,12,26,187,26,8,42,219,243,12,17,17,219,17,17,243, + 12,150,150,150,12,219,219,12,219,243,12,132,17,219,17,17, + 243,150,150,150,150,187,17,219,12,26,150,12,17,17,219,17, + 12,243,150,150,150,150,187,17,26,187,17,243,12,132,17,219, + 17,12,243,150,150,150,150,187,17,219,12,26,150,12,132,17, + 219,17,12,243,150,150,150,150,17,219,26,12,219,243,12,132, + 17,219,17,12,243,150,150,150,150,17,219,26,12,219,243,12, + 132,17,219,17,12,243,150,150,150,150,12,17,219,12,219,243, + 12,17,17,219,12,12,243,150,150,150,150,12,219,26,12,219, + 243,12,132,26,219,17,12,243,150,150,150,150,17,17,26,12, + 26,150,12,150,219,219,12,12,243,150,150,150,150,12,17,219, + 12,219,243,12,132,17,219,17,17,243,150,150,150,150,12,219, + 219,187,17,243,12,17,17,219,17,12,243,150,150,150,12,12, + 219,219,187,17,150,12,132,17,219,17,12,243,150,150,150,150, + 12,17,219,12,219,243,12,17,17,219,17,12,243,150,150,150, + 150,12,219,219,12,219,243,12,132,17,219,12,17,243,150,150, + 150,150,12,219,219,12,219,243,12,132,17,219,17,12,243,150, + 150,150,150,12,219,26,12,219,243,12,132,17,219,17,12,243, + 150,150,150,12,12,219,219,12,26,150,187,12,17,219,12,12, + 243,150,150,150,17,12,219,26,12,17,8,7,8,8,8,16, + 191,121,191,121,80,121,191,80,121,69,69,121,69,191,69,121, + 121,69,69,121,69,69,121,69,121,121,121,121,121,121,121,16, + 16,16,121,121,121,121,121,121,121,69,69,121,121,121,121,121, + 121,121,121,16,16,16,16,16,16,121,16,16,16,16,16,16, + 71,71,74,71,71,71,102,74,248,71,248,248,248,248,248,102, + 248,248,248,248,71,248,248,248,248,248,248,248,248,102,248,248, + 248,248,71,71,248,248,71,71,71,248,248,248,71,71,71,71, + 248,71,248,248,71,71,71,71,248,248,71,248,71,71,71,248, + 244,71,248,248,248,71,71,71,71,248,71,71,71,71,71,71, + 71,71,71,71,248,248,248,71,248,71,248,248,71,248,71,248, + 71,248,248,248,248,248,248,248,248,248,71,248,71,248,71,248, + 248,71,248,248,248,71,71,71,248,71,248,71,248,71,248,248, + 248,71,248,71,71,102,248,71,71,244,102,71,248,71,71,248, + 71,248,71,71,102,71,71,71,248,71,71,248,71,71,102,71, + 71,248,248,248,71,71,248,102,248,71,102,71,71,71,71,248, + 248,248,71,102,248,120,102,248,248,120,248,248,248,71,74,187, + 12,17,12,187,42,8,42,26,150,17,150,219,17,12,26,243, + 150,150,12,17,17,17,26,150,26,150,17,17,17,219,12,26, + 243,12,150,12,17,17,17,42,150,219,150,17,132,187,219,12, + 17,243,150,150,12,219,12,219,26,12,26,150,17,17,17,219, + 12,26,243,150,150,12,17,12,219,42,150,219,150,12,17,17, + 219,12,26,243,12,150,12,219,187,17,42,109,26,150,12,17, + 17,219,12,26,243,12,12,12,219,17,17,42,109,26,150,12, + 17,17,219,12,26,243,12,150,12,219,17,219,26,12,26,150, + 17,132,187,219,12,26,243,12,12,12,219,17,17,26,12,26, + 150,17,17,17,17,12,26,243,12,150,12,17,17,219,42,150, + 219,150,12,17,187,17,17,26,243,12,12,12,219,17,219,42, + 150,26,150,17,17,17,219,12,26,243,12,150,12,219,17,17, + 26,12,26,150,17,132,187,219,12,26,243,12,150,12,17,17, + 17,26,243,26,150,12,17,17,219,12,26,243,12,150,12,219, + 17,219,42,109,26,150,17,150,17,219,12,26,243,150,150,12, + 219,17,17,26,12,26,150,17,17,17,219,12,26,243,150,150, + 12,219,17,17,42,243,26,150,12,17,17,219,12,26,150,12, + 150,12,17,17,17,42,109,26,150,12,17,17,219,12,26,243, + 12,150,12,17,17,17,26,150,219,150,17,132,17,219,12,26, + 243,12,150,12,17,17,17,26,243,12,8,8,8,8,8,191, + 191,121,191,121,191,69,69,191,69,121,121,121,69,69,121,69, + 121,69,121,69,121,121,69,121,121,121,121,121,121,121,121,16, + 121,121,121,16,16,121,121,238,121,121,121,121,121,121,121,121, + 121,121,16,121,16,121,16,121,16,16,121,121,16,16,16,208, + 74,71,74,71,74,71,71,71,102,71,71,71,71,248,71,71, + 248,248,248,248,71,248,71,71,248,248,248,248,71,71,248,71, + 248,248,248,71,248,248,248,248,71,248,71,248,248,248,248,71, + 71,71,71,248,248,71,248,71,71,71,71,71,248,248,71,71, + 71,71,71,71,248,71,71,248,71,71,248,71,71,71,248,71, + 71,71,71,71,71,71,248,74,248,248,71,248,71,248,71,248, + 248,248,248,248,71,248,71,71,248,248,71,248,71,248,71,248, + 248,248,71,71,248,71,248,71,248,71,248,71,71,71,71,71, + 248,71,71,244,71,71,71,102,248,71,248,71,248,248,71,248, + 71,248,248,71,248,248,71,71,71,248,102,248,248,71,248,71, + 71,71,71,71,102,71,71,71,248,71,248,248,248,248,71,71, + 248,248,71,248,102,244,248,248,102,248,102,248,248,71,71,183, + 26,26,17,8,42,8,26,26,150,17,132,17,132,150,26,150, + 12,150,17,132,17,219,26,211,26,150,150,132,17,150,150,219, + 150,12,132,12,17,17,17,26,109,26,150,17,17,17,150,17, + 219,12,150,132,12,132,12,17,17,109,26,150,17,132,17,150, + 150,219,12,12,150,17,132,17,17,26,109,26,150,132,132,17, + 150,150,219,150,17,150,12,17,17,17,26,243,26,132,132,132, + 132,150,150,219,150,150,150,17,12,17,17,26,243,26,132,17, + 132,17,150,150,17,150,17,150,12,17,12,219,17,109,26,150, + 17,17,17,150,150,26,150,150,150,12,132,17,219,17,109,26, + 150,17,132,132,132,150,219,150,17,150,17,150,17,17,26,109, + 26,150,17,17,17,132,150,219,150,150,150,12,132,12,17,26, + 211,26,150,150,132,17,150,150,219,150,17,150,12,17,187,17, + 17,109,26,150,17,17,17,150,150,26,150,17,150,12,17,187, + 219,26,109,26,150,132,219,17,150,150,26,150,17,150,12,17, + 12,17,26,109,26,150,17,17,17,150,150,219,12,17,150,12, + 150,17,17,17,109,26,150,150,132,17,150,150,219,12,17,150, + 12,132,17,17,26,109,26,132,132,132,17,150,150,17,150,17, + 150,17,17,17,17,26,243,26,132,132,132,17,150,150,219,150, + 17,150,17,17,17,219,26,211,26,150,17,17,17,150,150,219, + 150,150,132,12,17,17,219,26,211,219,8,8,8,8,8,16, + 16,69,191,69,191,121,69,69,191,69,191,121,69,121,121,69, + 191,121,69,69,121,69,121,69,121,121,121,121,121,121,121,16, + 16,16,121,121,121,121,121,121,68,16,121,121,121,121,121,121, + 16,16,121,16,16,16,121,121,16,16,16,16,16,16,16,16, + 71,71,71,74,71,74,248,74,71,74,248,248,102,71,248,248, + 71,71,71,248,248,71,248,248,248,248,248,248,248,248,71,248, + 71,71,71,248,71,71,248,71,248,71,248,71,71,71,244,71, + 248,248,248,71,71,71,71,71,71,71,71,71,71,71,71,71, + 71,71,71,71,71,71,71,71,71,71,71,71,248,71,71,102, + 248,71,248,71,74,248,71,248,248,71,248,248,248,248,248,248, + 71,248,248,248,248,248,248,248,71,71,248,71,248,248,248,71, + 248,71,248,248,71,248,244,248,71,248,71,102,248,248,71,71, + 71,102,71,71,71,71,248,71,71,244,102,71,71,71,102,71, + 102,71,71,71,71,71,248,102,248,71,71,71,71,248,71,71, + 71,71,71,71,71,71,71,71,71,71,71,71,71,71,102,71, + 71,71,248,102,244,102,244,248,244,102,244,248,71,71,74,26, + 17,12,26,12,42,8,219,219,17,17,132,219,17,12,219,12, + 132,17,12,17,12,187,219,243,219,17,219,132,219,17,12,26, + 150,132,17,17,132,12,187,219,243,219,12,17,132,17,17,12, + 26,150,17,17,12,17,17,132,26,243,219,17,150,132,219,17, + 12,26,150,132,17,17,17,12,187,219,243,219,17,17,132,219, + 17,12,26,150,150,17,12,17,12,132,219,109,219,12,17,132, + 219,17,12,26,150,17,12,17,17,17,132,219,109,219,17,150, + 132,219,17,12,26,150,132,17,12,132,17,187,26,243,219,12, + 17,132,219,17,17,219,150,17,17,17,17,187,150,26,243,219, + 150,150,132,219,17,12,26,150,150,17,17,17,12,132,219,243, + 219,17,150,132,219,17,12,26,150,17,17,17,17,17,187,219, + 243,219,17,219,132,219,17,12,26,150,132,17,12,132,17,187, + 26,243,219,17,17,132,219,17,12,219,150,150,17,17,132,12, + 187,219,243,219,17,17,132,17,17,12,219,150,150,17,12,132, + 17,187,219,243,219,17,17,132,17,17,12,26,150,150,17,17, + 17,17,187,26,243,219,17,219,132,219,17,12,26,150,150,17, + 12,17,12,187,219,243,219,12,17,132,219,17,12,26,150,150, + 17,12,132,17,132,219,109,219,12,17,132,219,17,12,26,150, + 150,17,12,132,12,187,219,243,219,12,17,132,17,17,12,26, + 150,17,17,150,17,12,150,219,8,12,8,141,7,8,8,191, + 191,191,69,121,238,121,191,191,121,69,69,121,191,69,121,121, + 69,121,121,191,69,121,69,121,121,121,121,69,121,121,69,121, + 121,121,121,121,121,121,121,69,121,121,69,121,121,121,121,121, + 121,16,16,16,16,121,16,121,16,16,16,16,16,16,16,208, + 74,71,71,71,71,74,71,248,248,102,74,248,248,74,248,102, + 248,102,71,248,248,71,71,248,248,102,248,248,248,248,248,248, + 248,248,248,248,248,71,248,248,248,71,71,248,248,71,248,71, + 71,71,102,248,71,71,248,71,248,71,71,71,71,71,248,71, + 71,71,71,71,71,71,71,71,102,71,71,74,71,71,71,74, + 71,71,71,248,248,74,248,248,102,71,71,248,71,71,71,248, + 248,102,248,248,71,248,248,248,248,248,248,71,71,248,248,71, + 248,71,71,248,71,71,71,71,71,248,71,71,71,71,248,71, + 71,71,248,71,71,71,71,71,102,244,102,71,248,71,71,71, + 71,71,71,71,71,71,71,71,102,244,102,102,71,102,71,71, + 71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71, + 71,71,71,71,248,102,102,102,244,102,102,102,244,71,71,26, + 219,12,17,12,42,8,26,219,150,17,150,17,150,17,219,12, + 132,150,219,132,132,12,219,211,219,12,17,150,17,132,132,219, + 12,150,150,17,132,132,150,26,211,219,150,219,132,17,150,132, + 219,150,150,132,17,132,187,150,219,109,219,12,219,150,17,150, + 132,219,12,150,150,17,132,132,150,26,211,219,12,17,150,17, + 132,132,26,12,132,150,132,132,187,150,219,243,219,12,17,17, + 17,132,132,219,150,132,150,150,17,187,150,219,243,219,12,219, + 150,17,132,132,219,12,150,132,17,132,132,150,219,211,219,150, + 17,132,17,150,17,26,150,150,150,17,132,187,150,219,211,42, + 17,17,17,17,150,132,219,12,132,150,17,17,187,187,26,211, + 219,12,17,132,17,150,132,219,150,150,150,17,132,132,187,219, + 211,219,12,17,150,17,150,132,26,12,150,150,17,132,132,150, + 219,211,219,150,17,150,17,150,17,219,12,132,150,17,219,150, + 187,219,211,219,12,17,132,17,150,17,26,12,132,150,219,17, + 132,187,219,211,219,150,17,132,17,150,132,219,12,132,150,17, + 17,132,150,219,211,219,12,17,150,17,132,132,219,12,132,150, + 17,132,166,12,219,211,219,12,17,132,17,150,132,219,12,132, + 150,219,12,187,150,219,243,219,12,17,132,17,150,132,219,12, + 132,150,17,132,132,150,26,211,219,150,219,132,17,132,132,219, + 150,150,17,132,132,17,187,26,211,26,8,8,8,8,8,16, + 191,121,191,69,191,69,69,191,121,121,121,69,121,121,69,121, + 121,69,69,121,121,69,121,121,121,121,121,121,121,121,121,121, + 121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121, + 16,121,16,121,16,121,16,16,16,16,16,16,54,16,54,208, + 71,71,74,74,71,74,248,74,74,71,248,74,102,248,248,248, + 71,71,102,248,71,248,248,71,248,71,248,71,248,248,248,248, + 248,71,71,71,71,248,71,71,71,248,248,71,71,71,71,248, + 71,248,71,71,71,71,71,71,71,248,71,71,71,71,71,248, + 71,248,71,248,71,71,71,71,71,71,71,71,248,71,71,71, + 71,71,102,102,74,248,248,71,71,102,248,71,102,248,248,71, + 248,71,248,71,248,248,248,248,71,71,71,248,248,71,71,248, + 71,248,248,71,248,71,71,248,248,71,71,71,71,71,71,71, + 71,102,71,71,71,71,71,71,71,71,71,71,71,71,71,71, + 71,248,71,102,71,71,71,71,71,71,71,71,71,71,71,71, + 71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71, + 71,71,71,71,71,244,244,244,102,248,244,244,102,144,71,26, + 26,12,26,12,42,8,219,42,12,17,17,150,132,17,219,150, + 17,132,150,219,26,111,26,12,42,150,17,17,132,150,17,26, + 150,219,150,17,219,26,187,26,12,26,12,132,17,150,132,17, + 219,12,219,132,150,219,219,187,26,8,42,150,17,17,132,150, + 219,219,150,219,132,150,219,26,187,26,12,42,150,17,17,132, + 150,17,219,150,17,132,17,219,219,187,26,211,42,150,17,17, + 132,150,17,26,12,17,132,17,17,17,187,26,211,42,150,17, + 219,150,132,17,26,150,219,150,12,219,26,187,26,187,42,12, + 132,17,150,132,17,219,12,219,132,150,219,219,187,26,187,26, + 150,17,17,150,132,17,26,150,17,132,132,17,17,150,17,187, + 42,150,132,17,150,132,17,26,12,219,132,150,17,26,150,26, + 12,42,150,17,219,150,132,17,219,150,219,132,17,219,26,187, + 26,187,42,12,132,17,150,132,132,26,150,17,150,17,17,26, + 150,26,12,42,150,132,17,150,132,17,219,150,17,150,17,17, + 26,150,26,12,26,17,132,17,132,150,219,219,150,17,132,132, + 17,26,187,26,187,42,150,17,219,150,132,17,219,150,17,132, + 150,219,26,150,26,187,42,150,17,17,132,150,219,26,150,17, + 132,12,219,219,187,26,211,42,150,17,17,132,150,219,26,150, + 17,132,12,219,26,187,26,243,26,12,132,17,150,132,17,26, + 12,17,150,219,219,17,150,219,8,12,8,8,7,8,8,208, + 191,121,191,121,238,121,121,69,191,238,121,191,121,121,121,69, + 121,191,121,69,121,121,121,69,69,69,121,69,69,121,121,121, + 121,121,121,238,121,121,238,121,121,238,121,69,121,121,121,121, + 121,121,16,121,16,16,16,16,121,16,16,16,208,208,208,16, + 74,71,71,74,71,74,248,102,248,102,248,248,74,102,74,248, + 248,71,71,248,102,71,248,74,248,71,248,71,71,71,71,71, + 248,248,248,248,71,248,71,248,71,71,71,248,248,71,71,248, + 71,71,71,71,71,71,71,71,71,71,71,71,248,71,74,71, + 71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71, + 71,71,71,248,74,74,102,71,71,248,102,71,248,102,248,74, + 248,71,248,71,71,71,71,248,248,248,71,71,248,248,71,248, + 71,71,71,71,248,71,71,71,71,248,244,71,71,71,71,71, + 71,71,71,71,102,71,102,71,71,71,102,71,71,71,71,71, + 71,71,71,71,102,71,71,71,248,71,71,71,71,71,71,71, + 71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71, + 71,71,71,71,102,102,102,244,71,102,102,71,248,74,71,42, + 17,12,91,12,42,12,219,219,17,17,17,17,150,17,42,150, + 17,17,17,132,17,12,17,211,42,17,17,17,17,17,132,26, + 150,219,150,17,132,17,150,17,211,219,17,17,17,17,17,17, + 219,150,17,12,17,219,17,187,26,211,42,17,17,17,17,17, + 17,26,150,219,12,17,132,17,150,17,211,26,17,17,17,17, + 17,132,42,150,219,12,17,219,17,17,26,109,42,12,17,17, + 17,17,132,219,150,219,12,17,219,17,187,26,211,42,12,219, + 17,17,17,150,42,150,219,150,17,132,17,187,17,211,219,12, + 17,17,17,150,132,219,150,219,12,17,17,17,187,17,211,26, + 150,17,17,17,17,132,42,150,219,12,17,219,26,187,17,211, + 42,17,17,17,17,17,132,219,150,219,12,17,132,26,187,17, + 211,26,12,219,17,17,17,150,42,150,17,150,17,132,219,187, + 17,211,219,17,17,17,17,17,132,42,150,219,150,17,132,26, + 187,12,211,26,17,17,17,17,150,132,42,150,219,150,12,132, + 26,187,17,211,219,17,17,17,17,17,17,26,150,219,12,17, + 132,17,187,17,211,26,12,219,17,17,17,17,42,150,219,12, + 17,132,26,187,17,211,26,17,17,17,17,17,150,42,150,17, + 132,17,17,219,187,26,109,42,17,17,17,17,17,150,42,150, + 219,150,17,132,17,132,26,109,219,17,17,17,17,17,132,219, + 150,132,17,17,17,26,187,26,8,26,8,8,8,8,8,16, + 191,191,121,191,191,121,191,69,191,121,69,191,121,191,121,121, + 69,121,121,121,69,121,69,121,121,121,121,121,125,69,69,121, + 121,121,69,69,69,121,121,238,121,121,238,121,238,121,191,16, + 121,16,121,16,121,16,121,16,16,16,208,16,16,16,208,208, + 74,74,74,248,74,71,74,71,74,74,74,71,248,71,102,248, + 74,248,248,71,71,102,71,248,248,248,71,248,248,248,248,248, + 71,71,71,71,248,71,248,71,248,102,248,71,71,71,71,71, + 71,244,71,71,71,71,71,71,71,71,71,71,71,71,71,71, + 71,71,248,71,71,71,71,71,74,71,71,71,71,71,71,71, + 71,71,71,71,248,248,71,248,248,71,71,248,71,71,74,248, + 248,248,71,248,248,248,248,71,248,71,248,71,71,71,71,71, + 248,248,248,102,71,71,71,248,71,71,71,71,71,71,71,71, + 71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,102, + 71,71,71,71,71,71,102,71,71,71,71,71,71,71,71,74, + 71,71,71,71,71,71,71,71,71,71,74,71,71,71,71,74, + 71,71,71,71,71,244,71,248,244,71,244,71,71,144,71,219, + 12,150,17,8,26,187,26,42,150,219,12,17,150,132,219,17, + 132,12,17,219,219,132,26,12,42,150,17,17,12,150,219,219, + 17,150,17,17,219,17,187,26,187,26,17,17,17,150,150,17, + 219,17,150,17,17,219,219,150,219,12,42,150,17,17,12,150, + 17,219,17,150,17,17,219,17,187,26,12,42,150,17,17,12, + 150,17,219,17,132,150,12,219,219,187,219,12,42,150,17,17, + 12,150,219,219,17,132,132,150,219,219,132,219,12,26,150,219, + 12,12,150,219,219,17,150,17,17,219,219,150,26,12,42,12, + 219,12,17,150,17,219,17,150,17,17,219,219,150,26,12,42, + 17,17,17,12,150,17,219,17,132,17,150,219,17,12,26,12, + 26,17,17,17,12,150,219,219,17,150,17,17,219,17,150,26, + 187,42,150,219,12,12,150,219,219,17,150,17,17,219,17,132, + 26,12,42,12,219,17,12,150,17,219,17,132,17,150,219,17, + 150,42,12,42,12,219,12,17,150,219,219,17,150,17,132,219, + 17,150,26,187,26,17,17,17,12,150,17,219,17,132,17,150, + 219,219,150,26,12,42,150,219,12,12,150,17,219,17,150,17, + 17,219,17,132,26,12,42,150,17,17,12,150,219,219,17,132, + 17,150,219,17,187,219,12,26,150,17,17,12,150,219,219,17, + 132,17,17,219,17,187,219,12,26,17,17,17,12,150,219,219, + 17,17,150,17,219,17,12,219,12,12,8,8,7,8,8,208, + 191,121,191,121,191,121,191,121,121,191,121,69,121,69,121,191, + 121,121,191,121,121,121,121,121,121,69,69,121,121,121,125,125, + 121,69,121,121,121,121,121,69,121,125,121,121,69,121,121,121, + 121,16,16,16,16,16,16,208,16,16,16,16,16,54,54,54, + 74,74,74,74,102,71,74,248,248,248,74,71,71,71,71,248, + 74,102,102,248,71,248,74,248,74,248,74,248,71,71,248,248, + 248,102,71,71,71,71,248,74,71,71,74,71,248,71,71,71, + 248,71,248,71,71,71,71,71,71,71,71,71,71,71,71,71, + 71,71,71,71,248,71,71,71,102,71,71,71,71,71,71,71, + 71,71,71,71,74,248,74,74,248,102,248,102,248,248,102,71, + 74,248,74,248,71,102,248,71,248,71,248,71,248,102,71,71, + 71,71,71,71,248,71,71,71,248,71,71,244,71,71,71,71, + 71,71,71,244,71,71,71,248,71,71,71,71,71,71,71,71, + 248,71,71,71,71,71,71,71,248,71,248,71,71,71,71,71, + 74,74,74,71,71,74,71,71,140,71,71,144,71,74,71,71, + 71,71,71,71,71,71,71,71,71,71,102,71,102,71,74,56, + 219,12,26,8,42,12,26,42,26,219,17,219,26,17,219,17, + 17,17,219,26,26,150,26,150,42,26,219,17,17,17,17,219, + 17,17,17,17,26,17,132,26,150,219,26,219,26,17,17,26, + 219,219,12,17,219,219,26,187,26,150,42,26,219,17,17,17, + 17,219,219,12,17,219,26,17,132,26,150,42,26,219,17,17, + 17,17,219,17,17,17,219,26,12,187,26,150,42,219,219,17, + 17,17,17,219,17,17,219,219,26,26,12,26,150,42,26,219, + 17,17,17,17,219,17,17,17,219,219,26,150,26,150,219,26, + 219,17,219,17,17,219,219,12,17,219,17,26,150,219,150,42, + 219,219,17,17,17,17,219,17,12,219,219,219,17,132,26,150, + 219,26,219,17,17,17,17,219,17,17,17,219,219,26,150,26, + 150,26,26,219,17,17,17,17,219,17,17,17,17,219,26,150, + 26,150,219,26,219,17,17,17,17,219,17,17,17,219,219,26, + 150,26,150,219,26,219,17,219,12,17,219,219,17,17,219,219, + 26,150,26,150,219,26,219,17,17,17,17,219,17,12,219,219, + 219,26,150,26,150,42,26,219,17,219,12,17,219,219,17,17, + 17,219,26,150,26,150,42,26,219,17,17,17,17,219,17,17, + 17,219,26,17,12,26,150,42,26,219,17,17,17,17,219,17, + 17,17,219,26,12,17,26,150,219,26,219,17,17,17,26,219, + 17,17,17,219,219,12,12,26,243,26,150,8,8,8,8,16, + 208,121,191,121,121,121,121,191,121,121,191,121,191,121,238,121, + 121,69,121,121,121,121,121,121,121,121,69,69,125,121,121,121, + 121,121,121,121,69,125,121,125,121,69,121,121,121,121,16,121, + 16,16,121,16,121,16,121,16,16,16,16,208,208,16,208,208, + 74,74,71,74,74,102,102,74,74,74,71,102,248,71,74,102, + 248,71,248,74,248,102,248,102,248,102,248,102,248,102,74,71, + 71,71,248,102,248,102,71,248,71,248,102,71,71,248,71,71, + 71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71, + 71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71, + 71,71,74,102,71,71,102,248,102,248,74,248,74,248,71,102, + 248,102,248,248,248,71,74,248,74,248,74,248,71,71,248,102, + 102,71,71,71,71,248,71,71,71,71,71,71,71,71,71,71, + 71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71, + 71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,74, + 71,71,71,74,74,71,71,74,71,144,71,74,71,71,71,71, + 71,71,71,71,71,71,71,71,248,71,71,244,71,140,71,122, + 122,122,122,42,0,183,0,122,42,122,122,122,122,42,122,122, + 42,122,122,78,183,42,183,187,0,42,122,122,122,122,42,122, + 122,122,122,0,162,42,42,183,187,0,42,122,122,122,122,42, + 122,122,122,122,122,122,183,42,183,187,0,42,122,122,0,122, + 42,122,122,122,122,122,162,42,42,183,187,0,42,122,122,0, + 122,42,122,122,122,122,122,162,42,42,183,187,0,42,122,122, + 122,122,42,122,122,42,122,122,78,183,42,183,187,122,42,122, + 122,0,122,42,122,122,42,122,122,122,183,42,183,187,0,42, + 122,122,0,122,42,122,122,122,122,122,122,183,78,42,187,122, + 42,122,122,0,122,42,122,122,122,122,122,162,42,42,183,187, + 0,42,122,122,122,122,42,122,122,42,122,122,162,183,78,219, + 187,0,42,122,122,0,122,42,122,122,122,122,122,122,183,42, + 183,187,0,42,122,122,0,122,42,122,122,122,122,122,162,183, + 42,183,187,0,42,122,122,0,122,42,122,122,122,122,122,122, + 183,78,219,187,0,42,122,122,0,122,42,122,122,122,122,122, + 122,183,42,183,187,122,42,122,122,0,122,42,122,122,122,122, + 122,78,183,42,183,187,0,42,122,122,0,122,42,122,122,122, + 122,122,122,42,42,183,187,0,42,122,122,0,122,42,122,122, + 42,122,122,162,42,42,183,187,0,42,122,122,122,122,42,122, + 122,122,122,122,162,42,78,183,187,122,42,26,219,26,219,208, + 191,121,191,191,191,121,121,191,191,121,191,121,121,121,121,121, + 191,121,121,191,121,121,121,69,69,69,69,121,121,69,69,69, + 69,125,125,69,121,121,125,121,121,238,121,121,121,121,121,121, + 16,16,121,121,16,16,16,16,16,208,208,16,16,208,16,96, + 71,74,71,71,74,74,71,248,102,248,74,74,248,248,71,74, + 102,74,248,102,71,74,71,74,248,74,71,71,71,248,102,248, + 71,71,71,71,71,71,71,248,74,71,71,248,74,248,248,71, + 248,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71, + 71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71, + 71,71,71,71,74,71,248,74,74,248,74,248,74,248,74,248, + 74,248,74,102,248,248,71,248,74,248,71,248,71,71,71,71, + 102,71,102,71,71,248,102,71,248,248,71,244,71,71,71,71, + 71,71,71,71,244,71,74,71,71,71,71,71,71,71,71,74, + 71,71,71,71,71,71,71,71,71,71,71,71,71,74,71,140, + 144,74,144,71,144,74,71,71,74,71,71,144,71,144,140,71, + 71,71,71,71,71,71,71,71,71,71,71,71,71,140,71,42, + 8,12,12,150,0,42,42,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,219,122,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,42,42,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,122,42,42,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,219,122,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,122,42,42,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,42,122,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,42,122,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,42,122,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,42,42, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,219, + 122,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 42,42,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,183,42,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,42,122,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,219,122,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,219,42,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,219,122,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,42,42,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,42,122,122,42,17,17,26,219,16, + 208,191,191,191,121,191,191,191,191,191,191,121,191,121,191,69, + 191,121,121,121,121,121,121,121,121,121,69,121,121,68,121,121, + 121,121,125,125,69,121,121,125,121,125,121,121,16,121,121,191, + 121,16,16,121,16,16,16,16,16,16,16,16,16,208,208,208, + 74,74,74,74,71,71,102,74,71,74,102,248,102,74,102,248, + 102,248,248,71,102,248,102,248,102,248,248,102,248,74,71,71, + 102,248,71,71,74,248,74,71,71,248,74,71,71,74,71,71, + 71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71, + 71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71, + 71,71,71,102,248,248,74,102,248,102,248,102,248,102,248,74, + 248,74,248,71,102,74,248,74,248,248,74,71,74,71,71,71, + 71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71, + 71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71, + 71,71,71,71,71,71,71,71,71,71,71,71,74,71,71,71, + 71,144,74,144,71,144,144,144,144,140,71,74,144,71,71,74, + 144,71,71,74,71,71,71,71,71,71,71,71,71,140,71,26, + 49,141,243,139,42,26,219,0,14,216,41,62,62,249,62,62, + 62,62,62,62,41,22,26,17,0,14,216,41,62,62,249,62, + 62,62,62,62,62,41,75,26,17,0,14,216,41,62,62,249, + 62,62,62,62,62,62,41,75,26,17,0,14,216,41,62,62, + 249,62,62,62,62,62,62,41,22,26,17,0,14,216,41,62, + 62,249,62,62,62,62,62,62,41,75,219,17,0,14,216,41, + 62,62,249,62,62,62,62,62,62,41,75,219,17,0,14,216, + 41,62,62,249,62,62,62,62,62,62,62,22,26,17,0,14, + 216,41,62,62,249,62,62,62,62,62,62,41,75,219,17,0, + 14,216,41,62,62,249,62,62,62,62,62,62,62,22,219,17, + 0,14,216,41,62,62,249,62,62,62,62,62,62,62,22,26, + 17,0,14,216,41,62,62,249,62,62,62,62,62,62,41,75, + 26,17,0,14,216,41,62,62,249,62,62,62,62,62,62,62, + 22,26,17,0,14,216,41,62,62,249,62,62,62,62,62,62, + 41,75,26,17,0,14,216,41,62,62,249,62,62,62,62,62, + 62,41,75,26,17,0,14,216,41,62,62,249,62,62,62,62, + 62,62,62,22,26,17,0,14,216,41,62,62,249,62,62,62, + 62,62,62,41,22,26,17,0,14,216,41,62,62,249,62,62, + 62,62,62,62,41,22,26,17,0,14,216,41,62,62,249,62, + 62,62,62,62,62,41,75,26,12,26,8,101,8,8,150,208, + 191,191,191,191,191,191,191,69,191,191,191,191,191,121,191,191, + 121,121,121,121,191,121,121,121,121,125,121,121,121,16,121,121, + 121,69,121,121,68,121,125,121,121,16,121,191,121,16,121,16, + 16,121,16,16,16,16,16,16,16,16,208,208,54,63,208,63, + 74,102,74,74,74,74,71,102,248,74,102,74,248,102,74,248, + 74,102,102,248,74,74,74,71,74,74,71,74,248,74,71,71, + 71,102,74,248,74,248,102,71,71,71,102,71,248,74,71,71, + 71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71, + 71,71,71,71,71,71,71,71,71,71,71,71,74,71,71,71, + 71,71,74,74,102,248,102,102,74,102,102,102,74,74,102,102, + 248,74,102,71,248,74,248,74,74,248,102,71,248,74,71,71, + 71,71,71,102,71,71,71,71,71,71,71,71,71,144,71,71, + 71,244,71,71,71,71,71,71,71,71,71,74,74,71,74,71, + 71,74,71,71,71,71,74,71,71,71,74,71,144,74,144,140, + 74,71,71,74,71,74,71,74,71,144,144,74,144,144,144,74, + 74,144,71,74,71,102,71,71,71,71,71,71,71,140,71,26, + 101,8,243,8,42,26,26,42,233,110,195,90,90,195,195,90, + 90,90,90,195,60,154,12,8,42,233,110,195,90,90,195,195, + 90,90,128,90,195,60,154,12,12,42,233,110,195,90,90,195, + 195,90,90,90,90,195,60,154,12,12,42,233,110,195,90,90, + 195,195,90,90,128,90,195,60,154,12,8,42,233,110,195,90, + 90,195,195,90,90,128,90,195,60,154,12,12,42,233,110,195, + 90,90,195,195,90,90,90,90,195,60,154,12,12,42,233,110, + 195,90,90,195,195,90,90,90,90,90,60,154,12,8,42,233, + 110,195,90,90,195,195,90,90,90,90,195,60,154,12,12,42, + 233,110,195,90,90,195,195,90,90,90,90,90,60,154,12,12, + 42,233,110,195,90,90,195,195,90,90,90,90,90,60,154,12, + 8,42,233,110,195,90,90,195,195,90,90,90,90,195,60,154, + 12,12,42,233,110,195,90,90,195,195,90,90,90,90,90,60, + 154,12,12,42,233,110,195,90,90,195,195,90,90,90,90,195, + 60,154,12,12,42,233,110,195,90,90,195,195,90,90,90,90, + 195,60,154,12,12,42,233,110,195,90,90,195,195,90,90,90, + 90,90,60,154,12,12,42,233,110,195,90,90,195,195,90,90, + 90,90,90,60,154,12,8,42,233,110,195,90,90,195,195,90, + 90,128,90,195,60,154,12,12,42,233,110,195,90,90,195,195, + 90,90,90,90,195,60,154,12,12,26,8,7,8,8,8,208, + 191,191,191,191,191,191,191,191,191,191,191,191,191,191,121,191, + 191,191,121,121,121,121,121,121,121,69,121,121,121,121,121,69, + 121,121,121,16,121,121,121,121,121,16,121,16,121,16,16,16, + 121,16,121,16,16,16,16,16,16,16,16,208,16,208,208,63, + 74,74,74,74,74,71,102,74,74,248,71,102,248,74,248,74, + 102,102,74,102,102,248,248,102,102,248,102,248,102,71,102,71, + 74,71,71,71,71,71,74,71,74,71,71,71,74,71,74,71, + 71,71,71,71,71,74,71,71,71,71,71,71,71,71,71,74, + 71,71,74,71,74,74,144,71,71,71,74,71,71,71,74,71, + 74,71,102,248,102,74,71,74,248,71,71,71,102,248,74,71, + 102,102,71,102,74,248,74,248,71,71,74,248,74,248,71,71, + 71,74,71,71,71,74,71,71,71,71,71,71,74,71,71,71, + 144,71,71,71,71,71,71,74,74,74,71,71,71,71,71,74, + 71,71,71,74,74,71,71,74,71,71,71,71,74,71,71,71, + 144,144,140,144,144,144,140,71,144,140,71,71,74,71,71,71, + 140,71,140,144,74,144,74,71,71,71,71,71,71,144,140,26, + 67,12,12,67,122,187,26,122,168,128,23,19,23,23,23,19, + 65,65,19,19,90,178,12,187,122,168,128,23,23,23,23,23, + 19,19,65,23,19,195,178,12,109,122,168,128,23,23,23,23, + 23,19,65,65,19,19,195,178,12,109,122,168,128,23,23,23, + 23,23,19,19,65,23,19,90,178,17,109,0,168,128,23,23, + 23,23,23,19,19,65,19,19,195,178,17,109,122,168,128,23, + 23,23,23,23,19,65,65,19,19,195,178,12,109,122,168,128, + 23,19,23,23,23,19,65,65,19,23,90,178,12,187,122,168, + 128,23,23,23,23,23,19,65,65,19,19,195,178,12,109,122, + 168,128,23,23,23,23,23,19,65,65,19,23,90,178,12,109, + 122,168,128,23,23,23,23,23,19,65,65,19,23,90,178,12, + 187,122,168,128,23,23,23,23,23,19,65,65,19,19,195,178, + 12,109,122,168,128,23,23,23,23,23,19,65,65,19,23,90, + 178,17,109,122,168,128,23,23,23,23,23,19,65,65,19,19, + 195,178,12,109,122,168,128,23,23,23,23,23,19,65,65,19, + 19,195,178,12,109,122,168,128,23,23,23,23,23,19,65,65, + 19,23,90,178,17,109,122,168,128,23,23,23,23,23,19,65, + 65,19,23,90,178,12,187,122,168,128,23,23,23,23,23,19, + 19,65,19,19,90,178,17,109,122,168,128,23,23,23,23,23, + 19,65,65,65,19,195,178,12,211,26,8,8,8,8,8,208, + 191,191,191,191,191,191,191,121,191,121,191,121,191,191,191,121, + 16,16,16,121,121,191,121,121,121,121,121,121,121,16,16,121, + 125,69,121,121,121,16,16,16,16,16,121,121,16,121,16,16, + 16,121,16,16,16,16,208,16,208,16,16,54,208,208,208,63, + 74,248,74,74,74,74,74,102,74,102,74,102,248,102,102,71, + 71,248,74,248,74,102,74,71,74,74,74,71,102,71,74,248, + 71,248,74,248,74,71,71,71,74,71,71,71,71,71,71,71, + 71,71,71,71,71,71,74,71,71,71,71,74,71,74,71,71, + 74,71,140,71,71,71,74,74,71,71,71,71,71,71,74,71, + 71,74,71,74,248,102,248,74,102,102,102,71,102,248,102,71, + 74,74,71,248,74,102,74,102,74,248,71,71,71,74,248,74, + 71,102,71,74,71,74,71,74,71,71,71,71,74,71,144,71, + 71,144,71,71,71,71,71,71,71,74,71,71,74,71,71,71, + 71,71,71,71,74,71,71,74,71,74,74,71,140,74,71,71, + 140,71,74,71,74,144,140,144,74,144,140,144,144,140,144,71, + 140,71,74,144,74,144,71,71,74,71,71,71,74,140,140,26, + 182,12,12,8,183,12,26,122,233,204,19,19,65,65,65,65, + 118,65,19,65,195,178,12,243,122,233,204,19,65,65,65,65, + 65,65,65,19,65,60,178,17,243,122,233,204,19,65,65,65, + 65,65,118,65,19,65,60,178,17,243,122,233,204,19,65,65, + 65,65,65,65,65,19,65,195,178,17,243,122,233,204,19,65, + 65,65,65,65,65,65,19,65,90,84,12,243,122,233,204,19, + 65,65,19,65,65,118,65,19,65,90,84,12,243,122,233,204, + 19,19,65,65,65,65,118,65,19,19,60,24,150,243,122,233, + 204,19,65,65,65,65,65,118,65,19,65,90,84,12,243,122, + 233,204,19,65,65,65,65,65,118,65,19,65,195,178,17,243, + 122,233,204,19,65,65,65,65,65,118,65,19,19,90,84,12, + 243,122,233,204,19,65,65,65,65,65,118,65,19,65,60,178, + 17,243,122,233,204,19,65,65,65,65,65,118,65,19,19,90, + 84,12,243,122,233,204,19,65,65,65,65,65,118,65,19,65, + 60,178,17,243,122,233,204,19,65,65,65,65,65,118,65,19, + 65,90,84,12,243,122,233,204,19,65,65,65,65,65,118,65, + 19,19,60,24,12,243,122,233,204,19,65,65,65,65,65,118, + 65,19,65,195,84,150,243,122,233,204,19,65,65,65,65,65, + 65,65,19,19,90,178,17,243,122,233,204,19,65,65,65,65, + 65,118,65,19,65,90,84,12,243,26,8,8,8,8,8,208, + 16,191,191,191,191,121,191,191,191,191,191,191,121,16,191,191, + 16,121,191,16,121,121,121,121,121,121,121,191,121,16,16,121, + 121,121,121,121,121,121,16,121,121,121,16,16,16,16,121,16, + 16,121,16,16,16,16,16,16,54,208,208,54,208,63,208,63, + 74,74,74,102,74,74,74,102,74,74,248,74,102,74,71,74, + 102,74,248,74,102,71,102,248,74,248,71,102,71,74,248,74, + 102,74,71,71,71,248,74,71,71,71,71,74,74,74,74,71, + 71,71,74,71,74,71,71,71,74,74,74,71,74,71,71,74, + 71,71,71,144,71,74,71,71,74,71,140,71,74,74,71,71, + 71,71,74,102,102,74,74,248,74,71,71,102,74,102,74,71, + 74,248,74,74,102,71,71,71,71,71,74,248,74,71,74,71, + 71,71,74,71,71,71,74,71,71,74,144,71,71,71,71,71, + 71,71,140,144,71,71,71,71,71,71,71,71,144,144,71,71, + 74,71,71,71,71,71,71,71,74,71,144,71,71,144,140,144, + 71,144,144,140,71,74,144,74,144,140,71,74,144,71,74,144, + 71,144,71,71,71,74,144,140,144,74,140,144,71,140,140,26, + 8,243,243,8,26,26,17,122,31,204,118,118,118,118,118,118, + 118,118,65,65,128,84,219,211,0,31,170,118,118,118,118,118, + 118,51,118,65,19,128,84,17,211,0,31,170,118,118,118,118, + 118,118,118,118,118,19,128,84,17,211,0,31,170,118,118,118, + 118,51,118,118,51,65,65,128,84,26,211,122,31,204,118,118, + 118,118,118,118,118,118,118,65,128,84,17,211,0,31,170,65, + 118,118,51,118,118,118,118,118,65,128,84,17,211,122,31,204, + 118,118,118,118,118,118,118,118,65,65,128,178,26,211,122,31, + 204,118,118,118,118,118,118,118,118,65,65,128,84,17,211,0, + 31,170,118,118,118,118,118,118,118,118,65,65,128,84,17,211, + 122,31,204,118,118,118,118,118,118,118,118,118,65,128,84,17, + 211,0,31,170,118,118,118,118,118,118,118,118,65,19,128,84, + 17,211,122,31,204,118,118,118,118,118,118,118,118,118,65,128, + 84,17,211,0,31,170,118,118,118,118,118,118,118,118,65,19, + 128,84,17,211,0,31,170,118,118,118,118,118,118,118,118,118, + 65,128,84,17,211,0,31,170,118,118,118,118,118,118,118,118, + 65,65,128,178,17,211,0,31,170,118,118,118,118,118,118,118, + 118,65,65,128,178,26,211,0,31,170,118,118,118,118,118,118, + 118,118,118,65,128,84,17,211,0,31,170,118,118,118,118,118, + 118,118,118,118,65,128,178,17,67,26,8,8,8,8,8,208, + 191,191,191,191,191,191,191,16,16,16,191,16,191,121,16,16, + 191,16,121,16,16,121,191,121,16,121,121,121,16,16,16,121, + 16,121,16,16,16,121,16,121,16,16,16,16,16,16,121,16, + 16,16,16,16,208,16,208,16,208,16,16,208,16,208,208,208, + 100,74,74,100,74,102,74,102,74,74,102,74,248,102,102,74, + 248,74,248,74,102,71,74,248,74,102,74,102,248,74,102,71, + 71,74,71,74,71,71,74,71,74,74,71,71,71,71,74,74, + 71,74,71,74,102,71,74,71,74,71,71,71,74,74,71,140, + 140,74,74,74,144,74,71,71,71,71,144,74,71,71,71,74, + 74,74,71,74,248,102,74,248,74,74,248,248,74,248,102,248, + 74,102,248,74,102,102,74,102,74,71,74,71,71,71,74,74, + 74,71,71,74,74,71,74,74,71,71,74,71,74,71,71,144, + 74,71,71,71,144,71,144,144,144,71,144,74,71,71,144,71, + 71,144,74,71,144,74,71,71,71,71,74,144,74,71,71,140, + 74,74,144,144,144,74,144,74,71,144,140,71,140,144,140,140, + 140,144,140,144,144,74,71,74,144,71,74,144,71,140,140,42, + 139,12,12,211,219,26,26,42,123,53,118,51,51,52,76,51, + 51,52,51,118,128,178,12,8,122,249,53,118,51,51,52,76, + 107,51,52,107,118,128,84,17,8,122,249,53,118,51,51,52, + 51,107,51,107,51,118,128,84,17,8,122,249,53,118,51,51, + 107,76,52,107,52,51,118,128,178,17,8,122,123,53,118,51, + 51,76,52,76,51,52,118,118,128,84,12,8,0,249,53,51, + 51,118,52,52,51,51,51,118,118,128,84,26,8,122,123,53, + 118,51,51,52,76,51,51,52,118,118,128,178,17,8,122,123, + 53,118,51,51,52,51,76,51,52,51,118,128,84,12,8,122, + 249,53,118,51,51,52,51,76,51,52,51,118,128,84,26,8, + 122,123,53,118,51,51,52,51,51,51,107,51,118,128,84,12, + 8,122,249,53,118,51,51,52,51,76,107,52,107,118,128,84, + 26,8,122,123,53,118,51,51,52,51,51,51,107,51,118,128, + 84,12,8,122,249,53,118,51,51,52,51,76,107,52,107,118, + 128,84,12,8,122,249,53,118,51,51,52,51,51,51,51,51, + 118,128,84,12,8,122,249,53,118,51,51,52,51,76,51,52, + 118,118,128,84,12,8,122,249,53,118,51,51,52,76,51,107, + 52,51,118,128,178,17,8,122,249,53,118,51,51,52,76,76, + 51,52,118,118,128,84,17,8,122,249,53,118,51,51,52,51, + 107,51,51,118,118,128,84,26,8,26,8,8,8,8,8,208, + 208,191,191,16,191,16,191,191,191,16,191,16,191,16,16,121, + 208,16,16,16,121,121,121,121,121,16,121,16,121,16,16,121, + 121,121,121,16,16,121,121,16,16,16,121,16,16,16,16,121, + 16,16,16,16,16,16,16,16,208,208,54,208,16,208,208,16, + 74,74,100,102,74,74,74,74,102,102,74,102,102,74,71,102, + 74,102,74,248,71,74,248,74,102,74,74,71,74,248,71,74, + 102,71,74,71,74,74,71,74,71,71,74,71,140,71,71,71, + 74,71,71,71,74,74,74,74,74,74,74,74,74,71,71,71, + 71,71,71,71,74,140,144,140,140,71,74,71,71,74,74,71, + 71,102,74,102,102,102,102,74,102,102,74,74,248,74,74,71, + 74,74,74,248,71,71,71,71,71,74,71,74,74,71,71,71, + 74,71,140,71,144,71,71,71,71,74,71,71,71,144,71,71, + 144,71,74,144,71,71,71,71,71,74,71,71,74,144,71,74, + 74,71,71,71,71,144,71,144,71,74,144,71,71,71,144,71, + 144,71,74,140,140,144,140,144,140,140,144,140,144,140,144,144, + 71,140,144,140,74,144,144,71,74,140,71,71,140,144,39,219, + 8,12,12,8,219,12,187,122,123,53,52,51,76,76,76,232, + 52,52,107,9,204,84,26,8,122,123,53,107,51,76,76,76, + 76,52,52,51,107,204,178,26,8,122,123,53,107,107,76,76, + 232,232,76,52,107,107,204,178,26,8,0,123,53,107,51,76, + 76,76,76,52,51,51,9,204,84,26,211,78,123,53,107,76, + 51,76,76,52,76,51,51,107,204,178,26,8,122,123,53,107, + 51,76,76,76,232,52,52,52,107,204,178,17,211,42,123,53, + 107,76,51,76,76,232,52,52,52,9,204,84,26,211,78,123, + 53,76,107,76,76,232,76,52,52,51,107,204,84,26,8,0, + 123,53,107,51,76,76,232,52,52,52,51,9,204,178,17,211, + 78,123,53,52,51,76,76,232,232,52,52,51,107,204,84,26, + 8,0,123,53,107,107,76,76,232,76,76,52,51,107,204,178, + 17,8,78,123,53,52,51,76,76,232,232,52,52,51,107,204, + 178,26,243,122,123,53,107,107,76,76,232,76,76,52,51,107, + 204,178,26,8,0,123,53,107,107,76,76,232,232,52,52,107, + 107,204,178,26,243,122,123,53,107,51,76,76,232,76,52,52, + 52,107,204,84,26,243,0,123,53,107,51,76,76,76,232,52, + 52,51,9,204,84,26,8,122,123,53,107,51,76,76,52,76, + 52,51,51,107,204,178,26,8,122,123,53,107,107,76,76,232, + 232,52,52,52,107,204,178,26,67,12,8,141,8,12,67,208, + 208,191,16,191,208,191,16,16,16,16,16,191,16,191,191,121, + 16,16,121,16,16,16,121,16,121,121,16,16,16,16,16,121, + 16,121,16,121,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,208,16,208,208,16,208,208,16,208,16,16,208, + 74,74,100,100,102,100,102,74,100,102,74,74,102,102,71,248, + 74,102,74,102,102,102,74,71,71,248,74,102,74,74,71,74, + 71,71,74,71,71,71,71,74,71,74,71,74,71,140,71,71, + 74,71,74,71,71,74,71,74,74,74,71,71,74,74,74,71, + 140,140,140,71,71,74,71,71,71,71,144,140,74,71,74,74, + 74,102,74,74,74,102,102,71,74,248,102,74,248,102,74,248, + 74,102,74,74,102,74,74,248,74,71,71,71,74,71,71,74, + 71,71,74,74,74,71,74,71,71,71,144,140,71,140,71,71, + 144,144,71,74,71,144,74,144,144,71,71,144,71,144,71,144, + 71,144,140,144,74,144,74,144,71,71,140,144,140,71,140,140, + 140,144,71,144,140,71,140,144,140,140,144,140,144,74,140,140, + 71,71,71,114,74,140,140,71,71,140,140,71,71,140,140,183, + 211,243,12,8,26,26,17,122,123,53,76,76,76,76,232,232, + 76,76,51,52,204,154,17,243,122,123,85,76,76,76,76,232, + 232,76,76,52,9,204,154,219,243,122,123,85,76,76,76,76, + 232,232,76,76,51,9,204,154,132,243,122,123,85,76,76,76, + 76,232,232,232,52,51,52,204,154,219,243,122,123,194,76,76, + 76,76,232,232,232,76,52,9,204,168,12,243,122,123,85,232, + 76,76,76,232,232,76,51,52,52,204,84,17,243,122,123,194, + 76,76,76,76,232,232,76,51,51,52,204,154,219,243,122,123, + 53,76,76,76,76,232,232,76,52,52,52,204,154,132,243,122, + 123,85,76,76,76,76,232,232,76,52,51,52,204,168,17,243, + 122,123,53,76,76,76,76,232,232,76,76,52,9,204,154,132, + 243,122,123,85,76,76,76,76,232,232,76,76,52,9,204,84, + 17,243,122,123,53,76,76,76,76,232,232,76,52,51,9,204, + 168,12,243,122,123,85,76,76,76,76,232,232,76,76,52,9, + 204,154,132,243,122,123,85,76,76,76,76,232,232,76,76,51, + 52,204,168,12,243,122,123,85,76,76,76,76,232,232,76,51, + 52,52,204,154,219,8,122,123,85,76,76,76,76,232,232,76, + 52,51,52,204,154,17,243,122,123,85,76,76,76,76,232,232, + 232,76,52,9,204,154,219,243,122,123,85,76,76,76,76,232, + 232,76,76,51,52,204,168,26,8,12,8,8,8,12,8,208, + 208,191,191,208,191,191,16,191,16,208,191,191,16,16,16,191, + 121,208,191,16,16,16,191,16,16,121,121,16,121,16,16,121, + 16,16,16,16,16,121,16,16,16,16,16,16,16,16,16,16, + 16,16,208,16,16,16,54,16,16,16,16,16,208,16,16,208, + 100,74,74,74,100,102,100,102,74,74,102,102,74,74,102,74, + 102,74,248,74,71,74,248,74,102,74,74,71,102,248,74,71, + 74,74,71,74,74,74,71,74,71,140,144,71,71,71,74,74, + 74,71,71,74,74,71,74,71,74,71,74,74,71,74,71,140, + 71,71,71,140,140,71,71,140,140,144,74,71,74,74,74,102, + 74,74,102,102,102,248,74,74,102,74,74,248,74,74,102,74, + 71,74,248,71,74,102,71,74,71,74,74,74,71,74,71,74, + 140,71,71,71,71,140,71,74,140,71,71,71,144,71,140,144, + 74,71,71,144,71,71,71,74,71,144,144,71,74,74,144,71, + 140,71,71,71,71,71,71,74,144,140,71,71,71,140,71,144, + 144,140,140,140,144,140,140,144,140,144,140,140,74,114,71,114, + 140,114,140,74,144,71,71,140,140,140,144,114,140,114,39,26, + 243,12,91,8,219,12,219,42,167,85,232,76,232,148,232,148, + 232,232,52,52,204,168,17,109,122,167,194,76,76,232,148,232, + 148,148,232,76,52,204,168,17,243,122,167,194,76,76,148,232, + 232,148,232,232,232,52,204,168,26,243,122,167,194,232,76,148, + 148,232,148,232,232,52,52,204,168,17,109,42,167,85,76,76, + 148,148,232,148,232,232,52,76,204,168,17,243,122,167,194,76, + 76,148,148,232,148,232,148,52,52,204,168,17,109,122,167,85, + 76,232,148,148,232,148,148,148,52,52,204,168,26,109,42,167, + 194,76,76,232,148,232,148,232,232,52,52,204,168,26,243,122, + 167,194,76,76,232,148,232,148,148,232,52,52,204,154,26,109, + 42,167,85,76,76,232,148,232,148,232,232,52,52,204,168,26, + 243,122,167,194,76,76,232,148,232,148,148,232,76,52,204,168, + 12,109,42,167,85,76,76,232,148,232,148,232,232,52,232,204, + 154,26,243,122,167,194,76,76,232,148,232,148,148,232,76,52, + 204,168,26,243,122,167,194,76,76,232,148,232,148,232,232,52, + 52,204,154,26,243,122,167,194,232,76,232,148,232,148,148,148, + 52,52,204,168,17,109,122,167,194,232,76,232,148,232,148,232, + 232,52,52,204,168,17,109,122,167,194,232,76,232,148,232,148, + 232,232,52,52,204,168,17,211,122,167,194,76,76,148,232,232, + 148,232,232,52,52,204,154,12,8,26,8,8,8,8,8,208, + 208,191,208,191,191,208,191,16,191,16,16,16,16,191,208,121, + 16,121,16,16,191,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 208,208,16,16,208,208,208,208,208,208,208,208,16,208,208,16, + 100,74,100,74,74,74,74,102,74,74,74,248,102,74,102,74, + 248,102,102,74,102,74,102,74,71,74,74,74,74,74,74,71, + 71,74,71,71,71,74,74,71,74,74,74,74,74,140,71,71, + 74,74,71,71,74,71,74,71,74,74,74,74,140,74,71,74, + 74,140,71,71,74,74,71,71,74,74,71,74,71,74,74,74, + 102,74,74,74,74,102,102,74,102,102,74,102,102,74,248,102, + 71,74,74,74,71,74,71,74,71,71,74,74,71,74,74,71, + 140,144,140,74,71,140,144,74,74,71,71,71,144,71,71,71, + 140,144,74,144,140,71,71,140,71,74,74,144,71,71,140,71, + 144,140,144,140,144,144,71,74,71,140,144,140,144,140,74,140, + 144,140,71,140,144,140,140,144,140,140,144,114,74,114,74,144, + 140,144,140,140,140,140,144,74,71,140,74,144,74,114,207,26, + 243,150,187,8,42,91,219,122,237,32,232,148,148,148,148,147, + 232,147,232,232,231,168,219,243,122,237,32,232,148,148,148,148, + 148,232,148,232,232,231,168,17,243,122,237,32,232,148,148,148, + 148,147,232,148,52,232,231,222,26,8,122,237,32,232,232,148, + 148,148,148,232,147,232,232,231,168,219,243,122,237,32,232,232, + 148,148,148,147,148,148,232,232,231,168,17,243,122,237,32,232, + 232,148,148,148,147,148,148,232,232,231,168,17,243,122,237,32, + 76,232,148,148,148,148,148,27,232,232,231,222,17,243,122,220, + 32,232,148,148,148,148,147,232,148,232,232,231,222,26,8,122, + 237,32,232,148,148,148,148,148,232,147,232,232,231,222,26,243, + 122,237,32,232,148,148,148,148,147,232,148,232,232,231,222,26, + 8,122,237,32,232,148,148,148,148,148,232,148,232,232,231,168, + 17,243,122,237,32,232,148,148,148,148,148,232,147,76,232,231, + 222,26,211,122,237,32,232,148,148,148,148,148,232,148,232,232, + 231,222,26,8,122,237,32,232,148,148,148,148,147,232,147,232, + 232,231,222,26,8,122,237,32,232,148,148,148,148,148,148,232, + 232,232,231,168,17,243,122,237,32,232,148,148,148,148,147,232, + 147,232,232,231,168,219,243,122,237,32,232,148,148,148,148,147, + 148,148,232,232,231,168,219,243,122,237,32,232,148,148,148,148, + 148,232,147,232,232,231,168,132,243,26,8,141,8,150,8,208, + 208,191,208,121,191,208,191,208,191,16,191,16,191,16,191,16, + 208,16,16,16,16,191,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,208,16,208,16,16,16, + 16,16,16,16,54,16,54,16,16,54,16,16,16,16,208,208, + 74,100,74,102,100,100,102,74,102,102,102,74,74,102,74,102, + 74,74,74,102,74,102,74,74,102,102,71,102,71,71,74,74, + 74,74,74,74,74,74,71,74,71,71,74,144,140,71,74,144, + 71,71,71,74,71,74,74,74,74,71,74,71,71,140,74,140, + 144,74,74,74,71,140,71,74,71,74,74,74,74,74,102,74, + 74,74,102,74,102,74,74,248,74,74,102,74,74,102,74,74, + 102,74,102,248,74,74,74,74,74,74,71,71,74,74,71,74, + 71,74,71,140,144,74,71,71,144,140,144,140,71,71,74,74, + 71,74,71,71,71,144,144,71,144,71,144,74,144,144,71,144, + 71,71,71,71,71,74,144,71,144,74,144,71,74,144,144,144, + 140,71,140,144,140,140,144,140,140,144,140,74,114,74,114,39, + 144,140,140,144,140,140,140,144,140,74,140,74,144,140,114,187, + 12,12,91,8,42,17,26,122,138,117,193,157,157,157,189,189, + 157,157,193,32,70,228,26,109,42,138,117,193,193,157,157,189, + 157,189,193,193,32,70,228,26,211,0,21,117,193,193,157,157, + 189,189,157,193,193,32,70,31,17,211,122,138,117,193,157,157, + 157,189,157,189,193,193,32,70,228,26,211,122,138,117,193,193, + 157,157,189,189,157,193,193,32,70,31,26,211,122,138,117,193, + 157,157,157,189,189,157,193,193,32,70,228,26,109,42,138,117, + 193,157,157,157,189,189,157,157,193,32,70,31,26,109,122,138, + 117,193,157,157,157,189,189,157,193,193,32,70,31,17,109,42, + 138,117,193,193,157,157,189,189,157,157,193,32,70,31,219,211, + 122,138,117,193,193,157,157,189,189,157,193,193,32,70,31,17, + 109,42,138,117,193,193,157,157,189,189,157,193,193,32,70,228, + 219,109,42,138,117,193,193,157,157,189,189,157,193,193,32,70, + 31,219,243,42,138,117,193,193,157,157,189,189,157,193,193,32, + 70,31,17,211,0,21,117,193,157,157,157,189,189,157,157,193, + 32,70,31,219,211,122,138,117,193,157,157,157,189,189,157,193, + 193,32,70,228,219,211,122,138,117,193,193,157,157,189,189,157, + 157,193,32,70,228,26,211,122,138,117,193,157,157,157,189,189, + 157,193,193,32,70,228,26,211,0,21,117,193,193,157,157,189, + 189,157,157,193,32,70,228,26,182,12,8,8,8,8,141,208, + 208,191,191,191,191,191,121,191,16,191,208,191,208,16,16,121, + 208,121,208,16,16,16,191,16,16,16,16,16,208,16,16,16, + 16,16,16,16,16,16,16,16,208,16,16,16,16,208,208,16, + 16,16,208,208,208,208,208,208,208,208,208,208,208,208,54,16, + 74,102,100,74,102,100,74,74,74,74,102,102,74,102,74,102, + 102,102,74,102,74,102,74,74,74,102,74,74,74,74,102,74, + 71,74,74,74,74,71,140,71,140,144,74,74,71,140,71,74, + 140,140,144,74,71,71,74,71,74,74,74,74,74,74,74,74, + 74,71,144,74,74,140,74,74,74,144,74,74,74,74,74,102, + 74,102,74,74,102,102,74,102,102,74,248,102,74,74,102,74, + 74,74,74,102,74,74,71,74,74,74,74,74,74,71,74,74, + 71,74,71,74,71,74,74,71,71,71,74,140,144,140,144,74, + 71,144,140,144,74,71,140,140,144,74,71,71,74,74,71,74, + 71,140,144,140,71,71,140,74,144,74,140,144,140,140,74,140, + 114,144,140,144,140,140,144,140,140,144,114,74,114,74,144,140, + 140,144,140,140,140,140,140,140,140,144,114,140,140,140,39,183, + 243,150,187,243,219,12,26,122,226,87,21,87,156,30,86,13, + 30,242,18,18,18,59,26,12,122,226,87,18,72,242,30,13, + 13,30,242,18,18,18,59,26,8,0,73,87,21,21,242,30, + 13,13,30,72,18,33,18,200,26,8,122,226,87,21,87,156, + 43,13,13,30,72,18,18,18,59,26,8,122,226,87,21,21, + 156,43,13,13,30,242,18,33,18,59,26,8,0,226,87,21, + 72,156,43,13,13,30,242,21,18,18,59,26,12,122,226,87, + 21,72,156,43,13,13,30,242,21,18,18,59,26,8,0,226, + 87,21,87,242,30,13,13,30,242,18,18,18,224,12,12,122, + 226,87,18,72,242,30,13,13,30,242,18,18,18,59,26,8, + 122,226,87,18,21,156,30,13,13,30,242,18,33,18,59,17, + 12,122,226,87,18,72,242,30,86,13,30,242,21,18,18,200, + 26,12,122,226,87,18,21,156,30,86,13,30,242,18,18,18, + 59,26,12,122,226,87,18,72,242,30,86,13,30,242,18,18, + 18,224,17,12,122,73,87,21,72,156,43,13,13,30,242,18, + 18,18,59,26,12,122,226,87,21,87,156,30,13,13,30,242, + 18,18,18,200,26,8,0,226,87,18,21,156,30,13,13,30, + 242,18,18,18,59,26,8,122,226,87,21,87,156,30,13,13, + 30,242,18,18,18,59,26,8,0,73,87,21,21,156,30,86, + 13,30,242,18,18,18,59,26,8,12,8,12,8,243,7,208, + 208,191,208,191,208,191,208,191,16,16,16,191,191,191,208,191, + 16,208,121,208,121,16,16,16,16,16,16,16,16,16,208,16, + 16,16,16,208,16,16,208,16,16,208,16,16,16,16,16,16, + 208,16,208,16,208,208,16,16,16,208,16,54,16,208,208,208, + 100,100,74,100,100,102,100,102,102,102,74,74,102,102,74,74, + 74,74,102,74,74,74,102,102,74,74,74,102,71,71,74,74, + 74,71,71,74,74,71,74,71,74,74,74,71,140,74,71,71, + 71,71,74,74,74,74,74,74,71,74,74,74,71,74,74,74, + 74,140,74,140,74,71,140,71,74,74,74,74,74,74,74,74, + 74,74,102,74,74,74,74,74,74,102,74,74,102,74,74,102, + 102,102,74,74,71,74,102,74,71,74,71,74,71,74,74,74, + 144,71,74,71,140,140,71,74,144,74,74,71,74,71,74,71, + 140,74,71,71,71,144,71,71,74,71,140,144,71,144,140,144, + 140,71,74,71,144,140,71,144,74,71,144,140,71,140,114,144, + 140,140,140,144,140,144,140,140,140,140,74,114,74,114,140,140, + 144,140,140,144,74,140,140,144,140,140,140,71,144,39,114,187, + 8,17,12,8,26,26,187,0,40,23,250,86,179,146,118,51, + 146,86,86,250,28,111,12,211,0,40,179,250,86,179,146,136, + 51,146,86,86,250,28,111,187,243,0,40,86,250,86,149,146, + 136,118,149,179,250,250,28,111,17,243,0,40,179,250,86,179, + 146,146,51,146,86,86,250,28,111,12,243,0,203,86,250,86, + 179,149,51,51,149,86,250,250,28,111,17,243,0,40,23,250, + 86,149,146,146,51,149,86,250,250,28,111,12,211,0,40,23, + 250,86,149,146,51,51,146,86,250,250,28,111,17,243,0,40, + 23,250,86,149,149,51,51,149,86,86,250,28,61,26,211,0, + 40,179,250,86,149,149,51,51,146,86,86,250,28,111,17,243, + 0,203,179,250,86,179,149,136,51,149,86,250,250,28,111,26, + 211,0,40,179,250,86,149,146,146,118,149,86,250,250,28,111, + 12,211,0,203,179,250,86,179,146,146,51,149,86,86,250,28, + 111,12,211,0,40,179,250,86,149,146,118,51,149,86,86,250, + 28,61,26,211,0,40,23,250,86,179,146,51,51,146,86,86, + 250,28,111,12,211,0,40,23,250,86,179,149,51,51,149,86, + 86,86,138,111,17,243,0,40,179,250,86,179,149,51,51,146, + 86,86,250,28,111,17,243,0,40,179,250,86,179,149,51,51, + 149,86,86,250,28,111,187,243,0,40,86,250,86,179,146,146, + 51,146,86,86,250,28,187,12,8,26,8,8,8,26,8,208, + 208,191,191,16,191,16,191,208,191,208,191,208,121,208,191,16, + 121,208,121,208,16,121,191,16,16,16,16,16,208,16,16,16, + 16,208,16,16,208,16,16,208,16,16,16,16,208,16,208,208, + 16,208,16,208,208,208,208,16,208,16,208,208,208,16,208,208, + 74,100,74,100,100,100,100,100,100,102,100,74,74,102,74,102, + 74,74,102,102,102,74,74,74,102,74,74,102,74,71,74,71, + 74,74,71,74,74,71,140,74,74,144,140,71,71,140,71,140, + 74,74,71,74,71,71,74,74,74,74,74,74,74,74,71,140, + 74,74,74,74,74,74,140,140,74,71,74,74,74,74,74,74, + 74,74,74,74,102,100,74,74,74,74,102,74,102,102,74,74, + 74,74,102,74,248,74,74,74,74,71,74,74,74,71,74,74, + 140,140,140,71,71,74,74,74,144,74,140,71,74,71,140,71, + 71,140,144,140,71,140,144,144,144,71,144,140,74,71,74,71, + 144,144,140,71,144,140,71,144,140,74,144,140,144,140,140,140, + 144,140,140,140,140,144,140,144,144,114,74,114,140,144,140,140, + 144,140,140,114,74,140,140,140,144,140,114,140,144,39,39,183, + 12,17,187,243,219,42,26,0,40,32,157,189,189,189,189,189, + 189,189,157,85,128,61,219,243,0,40,32,157,189,189,189,189, + 189,189,189,157,85,128,61,42,243,0,40,32,157,189,189,189, + 189,189,189,189,157,85,128,61,42,243,0,40,32,157,189,189, + 189,189,189,189,189,157,85,128,61,42,243,0,40,32,157,189, + 189,189,189,147,189,189,157,85,204,61,42,243,0,40,32,157, + 189,189,189,189,189,189,189,157,85,128,61,183,243,0,40,32, + 157,189,189,189,189,189,189,189,157,85,128,61,26,243,0,40, + 32,157,189,189,189,189,147,189,189,157,85,204,61,219,243,0, + 40,32,157,189,189,189,189,189,189,189,157,85,128,61,42,243, + 0,40,32,157,189,189,189,189,189,189,189,157,85,128,61,219, + 243,0,40,32,157,189,189,189,189,189,189,189,157,85,128,61, + 219,243,0,40,32,157,189,189,189,189,189,189,189,157,85,128, + 61,219,243,0,40,32,157,189,189,189,189,147,189,189,157,85, + 204,61,219,243,0,40,32,157,189,189,189,189,189,189,189,157, + 85,128,61,219,243,0,40,32,157,189,189,189,189,189,189,189, + 157,85,128,61,26,243,0,40,32,157,189,189,189,189,189,189, + 189,157,85,128,61,42,243,0,40,32,157,189,189,189,189,147, + 189,189,157,85,128,61,26,243,0,40,32,157,189,189,189,189, + 189,189,189,157,85,204,91,219,141,12,8,243,8,12,8,208, + 208,16,191,208,191,16,16,16,191,16,191,191,16,16,191,208, + 191,191,16,16,16,121,16,16,16,16,16,208,16,16,208,16, + 16,16,16,16,16,16,16,208,16,208,16,16,16,16,16,16, + 16,208,208,54,208,63,208,16,208,208,208,208,208,208,16,208, + 100,102,100,100,100,102,100,102,74,100,102,102,102,102,74,100, + 102,102,74,74,74,102,102,102,74,74,102,74,74,102,74,102, + 74,71,74,71,74,74,74,74,74,74,74,74,74,74,140,71, + 74,74,144,74,74,74,74,74,74,74,74,74,74,74,74,74, + 74,74,71,74,74,74,74,74,140,140,74,74,74,74,74,74, + 74,74,74,74,74,74,102,100,100,102,74,102,74,74,74,102, + 74,102,74,102,74,74,102,102,71,74,71,71,74,74,74,74, + 74,71,74,74,74,140,71,74,74,71,71,140,144,140,71,140, + 140,144,71,71,140,71,74,74,74,140,71,74,144,144,140,144, + 140,74,71,140,71,71,140,140,71,144,74,144,140,140,144,140, + 140,114,144,140,140,140,140,140,140,140,114,140,140,140,140,144, + 140,144,144,140,144,140,140,140,140,144,140,144,140,114,39,187, + 8,132,12,8,26,0,187,0,40,45,232,76,148,76,148,148, + 148,232,52,27,195,91,122,109,0,40,45,232,232,148,76,232, + 148,148,232,52,27,230,91,122,211,0,40,53,52,76,148,76, + 232,147,148,232,52,27,195,91,162,211,0,40,45,52,232,148, + 148,148,148,148,232,52,27,230,91,162,211,0,40,45,232,148, + 76,148,148,77,148,232,52,27,230,91,162,211,0,40,45,52, + 76,232,148,148,147,148,232,52,27,230,91,122,211,0,40,45, + 232,76,76,76,148,148,148,232,52,27,195,91,162,211,0,40, + 45,232,76,148,76,148,147,148,232,52,27,230,91,122,109,0, + 40,45,52,76,232,148,148,147,148,232,76,198,195,91,78,211, + 0,40,45,232,232,148,76,76,147,148,232,52,27,195,91,122, + 211,0,40,45,52,76,148,148,148,147,148,232,52,27,230,91, + 122,109,0,40,45,232,232,148,148,148,147,148,232,52,27,230, + 91,122,109,0,40,45,232,76,76,148,148,147,148,232,52,27, + 230,91,122,211,0,40,45,52,148,76,76,148,148,148,232,52, + 27,195,91,122,109,0,40,45,52,76,148,76,148,148,148,232, + 76,27,195,91,78,211,0,40,53,52,232,148,76,148,148,148, + 232,52,27,195,91,162,211,0,40,45,52,76,148,76,148,147, + 148,232,52,27,230,91,122,211,0,40,45,232,76,148,148,148, + 148,148,232,52,27,230,91,42,8,12,8,12,8,8,141,208, + 208,191,191,191,191,191,16,191,16,208,16,16,191,121,208,16, + 16,16,208,121,208,16,191,16,16,16,16,16,208,16,208,16, + 16,208,16,208,16,208,16,16,208,16,16,208,208,16,208,208, + 208,16,208,208,208,208,208,208,16,16,208,208,208,208,208,208, + 100,100,100,100,100,100,100,100,102,100,74,100,100,102,102,74, + 74,102,102,102,74,74,74,74,102,74,74,102,74,102,74,74, + 74,74,74,74,74,74,71,140,74,71,74,140,71,74,74,74, + 71,74,74,74,140,74,74,144,74,71,74,74,74,74,74,74, + 74,169,140,140,74,74,74,74,74,74,74,140,74,74,74,74, + 74,74,74,100,74,74,74,102,100,100,74,102,102,102,100,74, + 74,102,74,74,102,74,74,74,74,74,74,74,74,74,71,74, + 140,74,74,74,71,140,74,71,74,140,74,74,74,140,71,74, + 74,140,140,144,140,144,140,144,71,140,144,140,140,144,140,71, + 144,140,144,140,144,71,71,144,140,140,74,71,144,140,144,39, + 140,39,144,140,140,140,140,140,144,140,140,144,114,114,140,114, + 140,140,140,140,140,144,140,140,140,140,140,140,140,114,39,183, + 8,17,187,187,17,122,26,0,212,170,9,76,232,148,147,147, + 148,76,232,198,230,26,26,243,0,40,170,9,52,148,148,147, + 148,148,76,27,198,230,26,26,243,0,40,170,52,52,148,232, + 148,147,147,52,232,198,230,26,26,243,0,40,170,52,232,232, + 232,147,148,147,76,27,198,230,26,26,243,0,40,204,52,52, + 232,148,148,147,147,232,27,198,230,26,26,243,0,40,170,52, + 232,232,232,148,148,148,76,27,198,230,26,26,243,0,40,170, + 52,232,148,148,147,147,148,76,232,198,230,26,26,8,0,212, + 170,9,76,148,148,147,147,147,76,27,185,230,26,26,243,0, + 40,170,52,76,232,232,148,147,147,76,232,185,230,26,26,243, + 0,40,170,9,52,148,148,147,148,77,76,232,198,230,26,42, + 243,0,40,170,52,232,232,232,147,148,147,76,27,198,230,26, + 26,243,0,40,170,9,76,232,232,148,147,148,76,27,198,230, + 26,26,243,0,212,231,52,76,232,148,148,147,147,76,27,185, + 230,26,26,8,0,40,170,52,232,232,148,147,147,148,76,232, + 198,230,26,26,243,0,212,170,52,76,232,232,147,148,148,232, + 232,198,230,91,42,243,0,40,170,52,76,148,232,147,147,147, + 76,232,198,230,26,26,243,0,212,170,52,76,148,148,147,148, + 147,76,27,198,230,26,26,243,0,40,170,52,52,232,148,147, + 147,147,76,27,198,230,26,26,8,12,8,8,8,12,8,208, + 208,16,208,16,191,191,16,208,191,16,191,208,16,191,191,208, + 208,191,121,208,121,208,16,16,16,16,16,16,16,16,208,16, + 208,16,208,16,16,208,16,208,16,208,16,16,208,16,16,16, + 208,208,208,208,208,208,208,16,208,208,208,208,208,208,16,208, + 100,100,100,100,100,100,102,100,100,100,100,102,74,100,100,102, + 100,100,100,74,102,102,102,102,74,102,102,74,74,74,102,74, + 102,74,71,74,74,74,74,71,74,140,74,74,74,74,140,140, + 74,74,71,140,71,74,140,74,74,140,74,74,74,74,74,74, + 140,74,74,74,74,74,74,74,74,140,140,74,74,74,74,74, + 100,74,74,74,74,100,74,100,74,102,74,100,74,74,102,102, + 102,74,102,102,74,74,102,74,102,74,71,74,74,74,74,74, + 71,74,71,74,74,74,74,140,140,74,74,71,140,74,140,140, + 140,71,74,74,74,74,71,74,144,140,74,74,74,74,74,140, + 140,71,74,71,140,140,144,140,71,71,144,140,140,140,140,144, + 140,140,140,140,140,140,140,140,140,140,140,39,140,140,39,140, + 140,140,140,140,140,140,140,140,140,140,140,144,144,39,39,17, + 91,150,12,8,219,26,26,0,40,98,165,45,194,53,194,53, + 32,45,45,165,230,91,122,187,0,212,98,165,45,53,53,194, + 194,32,45,53,165,230,91,78,187,0,37,98,165,45,45,194, + 194,194,194,45,45,165,230,91,122,187,0,212,98,165,45,53, + 194,194,194,194,45,53,165,230,91,122,187,0,40,98,45,45, + 53,194,194,194,194,45,53,165,230,91,122,187,0,212,98,165, + 45,53,194,194,194,32,45,53,165,230,91,122,187,0,212,98, + 165,45,53,53,194,194,194,98,53,165,230,91,162,187,0,40, + 98,165,45,53,194,194,194,194,45,53,165,230,91,122,187,0, + 212,98,45,45,53,53,194,194,194,45,53,165,230,91,162,187, + 0,212,98,165,45,53,194,194,194,194,45,194,231,230,91,122, + 187,0,212,98,165,45,45,194,194,194,194,45,53,165,230,91, + 122,187,0,212,98,165,45,45,194,194,53,32,45,53,165,230, + 91,122,187,0,40,98,165,45,53,194,194,194,194,45,53,165, + 230,91,122,187,0,212,98,165,45,53,53,194,194,194,45,45, + 165,230,91,122,187,0,40,98,45,45,53,194,194,194,194,45, + 53,231,230,91,122,187,0,212,98,165,45,53,194,194,194,194, + 45,45,165,230,91,78,187,0,40,98,165,45,53,194,194,194, + 194,45,53,165,230,91,122,187,0,212,98,45,45,53,53,194, + 194,194,45,53,165,230,91,122,8,12,8,12,8,8,141,208, + 208,191,191,191,16,208,191,191,208,191,208,191,191,208,16,191, + 16,208,16,208,121,16,16,16,16,16,16,16,208,16,16,16, + 208,16,16,208,16,16,208,16,16,208,208,208,16,208,208,208, + 16,208,208,63,208,208,208,208,54,208,16,208,208,63,208,208, + 100,100,100,100,100,100,100,102,100,102,100,100,102,74,100,102, + 102,102,100,100,100,100,100,74,74,74,102,74,74,74,74,74, + 74,74,74,74,74,74,74,74,74,140,74,140,74,74,71,140, + 140,140,74,74,74,74,74,140,74,140,140,74,169,74,100,100, + 74,100,74,74,74,74,74,74,74,74,74,140,140,140,140,74, + 74,100,74,74,74,100,74,74,100,100,102,102,100,100,74,74, + 100,74,74,74,74,74,100,74,74,74,74,74,74,74,74,74, + 140,140,140,140,74,74,71,74,74,74,140,74,71,74,74,74, + 140,140,74,140,74,140,140,140,74,144,140,144,140,144,74,71, + 140,144,140,71,140,71,144,140,114,140,144,140,144,144,140,140, + 140,140,140,140,144,140,140,140,140,140,140,140,140,144,140,140, + 140,140,140,140,144,140,144,140,140,140,140,140,114,114,39,166, + 91,12,187,12,219,8,26,162,162,31,251,123,167,79,79,79, + 167,167,123,123,168,26,26,211,0,162,251,123,123,79,167,79, + 79,79,167,167,251,168,187,42,211,221,162,251,123,123,167,79, + 79,79,79,167,123,228,206,12,42,211,0,162,31,251,123,123, + 79,79,79,79,167,167,228,168,187,42,8,0,162,31,251,123, + 167,79,79,79,79,167,123,228,73,187,26,211,0,162,251,123, + 123,123,79,79,79,167,167,167,228,73,187,42,211,0,162,251, + 251,123,79,103,79,79,79,167,123,123,168,17,26,8,0,162, + 251,251,123,123,79,79,79,79,167,123,228,168,26,26,211,0, + 162,251,31,123,55,167,79,79,79,167,123,228,206,12,42,211, + 0,162,251,123,123,167,79,79,79,167,167,123,123,168,26,26, + 211,0,162,251,123,123,167,79,79,79,79,167,167,228,168,26, + 26,211,0,162,251,123,123,167,79,79,79,79,167,167,228,73, + 12,42,8,0,162,251,123,123,167,79,79,79,79,167,123,228, + 206,12,42,211,0,162,251,123,123,167,55,79,220,79,167,123, + 123,168,26,26,8,0,162,251,31,123,103,79,79,220,79,167, + 123,123,73,12,42,211,0,162,251,251,123,123,79,79,79,79, + 167,123,123,168,26,42,211,0,162,251,251,123,123,79,79,79, + 79,79,123,228,206,187,26,211,0,162,31,251,123,79,167,79, + 79,79,167,123,228,73,187,42,211,12,8,12,8,150,7,208, + 208,191,208,191,191,208,191,191,208,191,16,208,191,16,16,208, + 16,16,16,16,16,16,16,16,208,16,16,208,16,16,208,16, + 16,208,16,208,208,16,16,208,16,208,16,208,16,208,16,208, + 208,208,208,208,208,208,208,208,16,208,208,208,208,54,208,208, + 100,100,100,100,100,100,100,100,102,100,100,74,100,102,74,100, + 100,100,102,74,102,74,102,102,102,100,100,102,74,100,102,74, + 74,100,74,74,74,74,74,74,74,74,74,74,140,74,74,74, + 74,74,74,140,140,74,140,74,74,74,74,74,74,100,140,74, + 100,74,74,140,74,100,140,140,140,100,140,100,74,74,74,140, + 140,140,74,74,74,74,74,100,74,74,100,100,74,102,100,102, + 100,102,100,102,74,102,74,100,74,100,74,74,74,74,74,74, + 74,74,74,74,74,74,74,74,74,140,74,74,140,140,74,74, + 74,74,140,71,140,74,74,74,140,140,74,74,140,74,114,140, + 140,140,140,140,74,140,74,140,74,74,140,140,140,140,140,140, + 140,140,140,140,140,140,140,140,140,39,140,140,140,140,140,144, + 140,74,114,140,74,140,140,140,144,140,140,144,140,39,114,150, + 12,17,12,8,26,91,219,0,0,0,0,0,0,0,0,0, + 0,0,0,0,26,132,42,243,0,0,0,0,0,0,0,0, + 0,0,0,0,0,26,187,26,12,0,0,0,0,0,0,0, + 0,0,0,0,0,0,219,17,42,243,0,0,0,0,0,0, + 0,0,0,0,0,0,0,26,17,26,187,0,0,0,0,0, + 0,0,0,0,0,0,0,0,219,187,26,12,0,0,0,0, + 0,0,0,162,0,0,0,0,0,219,187,42,243,0,0,162, + 0,0,0,0,0,0,0,0,0,0,26,17,219,187,0,0, + 162,0,0,0,122,0,0,0,0,0,0,26,132,42,243,0, + 0,0,0,0,0,0,0,0,0,0,0,0,219,17,42,243, + 0,0,0,0,0,0,0,0,0,0,0,0,0,26,132,42, + 243,0,0,0,0,0,0,0,162,0,0,0,0,0,26,132, + 42,243,0,0,0,0,0,0,0,0,0,0,0,0,0,219, + 187,26,187,0,0,0,0,0,0,122,0,0,0,0,0,0, + 219,17,219,12,0,0,0,0,0,0,0,0,0,0,0,0, + 0,26,150,26,187,0,0,0,0,0,0,0,0,0,0,0, + 0,0,219,17,42,243,0,0,0,0,0,0,0,0,0,0, + 0,0,0,26,132,42,243,0,0,0,0,0,0,122,0,0, + 0,0,0,0,219,17,26,12,0,0,0,0,0,0,0,0, + 0,0,0,0,0,219,17,219,12,17,8,8,12,26,8,208, + 191,208,208,191,208,191,208,191,208,191,191,208,16,208,16,16, + 16,191,208,16,16,208,16,16,16,16,16,16,208,16,208,16, + 16,16,16,208,16,208,16,208,208,16,208,16,208,208,208,208, + 208,54,208,208,63,208,208,16,208,208,208,208,208,208,16,208, + 100,100,100,100,100,100,100,100,102,100,100,102,100,100,102,100, + 102,100,102,100,102,100,100,100,102,102,100,102,100,100,100,102, + 74,100,74,74,100,74,74,74,74,74,74,74,74,74,74,74, + 74,74,74,74,140,74,74,74,74,74,140,74,74,74,100,74, + 100,74,100,140,140,100,100,100,140,100,74,100,74,100,74,100, + 74,74,74,74,74,74,74,74,100,74,74,100,100,74,102,100, + 100,102,100,102,100,74,102,74,102,100,74,74,74,100,100,74, + 100,74,100,74,140,74,74,140,74,74,140,74,74,140,140,140, + 140,74,140,74,71,144,140,140,140,140,140,71,140,74,140,144, + 140,71,140,144,140,144,74,144,140,144,140,144,140,140,144,140, + 140,144,140,140,140,140,140,140,140,140,114,140,140,140,140,140, + 114,74,140,114,140,140,144,140,140,140,140,140,144,39,114,187, + 12,26,187,243,219,91,42,122,12,26,26,26,26,42,26,17, + 219,219,219,219,17,132,42,17,42,26,26,26,26,26,122,26, + 17,219,219,219,219,17,132,219,17,42,26,26,26,26,42,42, + 26,219,219,219,219,26,17,132,42,17,42,17,26,26,26,42, + 42,26,17,219,219,219,219,17,132,219,12,42,17,26,26,26, + 26,42,26,219,219,219,219,219,17,132,183,17,42,26,26,26, + 26,42,42,26,17,219,219,219,219,17,132,42,17,42,26,26, + 26,26,42,42,26,219,219,219,219,219,17,219,219,187,42,26, + 26,26,26,42,42,26,17,219,219,219,219,187,132,42,17,42, + 26,26,219,26,26,42,26,17,219,219,219,26,17,132,42,17, + 42,26,26,26,26,42,42,219,219,219,219,219,219,187,132,42, + 187,42,26,26,26,26,26,42,26,17,219,219,219,219,17,132, + 42,187,42,26,26,26,26,26,42,26,17,219,219,219,219,17, + 132,219,187,42,26,26,26,26,42,42,26,17,17,219,219,26, + 17,219,219,17,42,26,26,26,26,42,42,26,219,219,219,219, + 219,219,132,183,187,42,26,26,219,26,42,42,26,219,219,219, + 219,219,17,132,42,17,42,26,26,26,26,42,42,26,219,219, + 219,219,219,17,132,42,17,42,26,26,26,26,42,42,26,17, + 219,219,219,26,17,132,219,17,42,26,26,26,26,26,42,26, + 17,219,219,219,219,17,219,219,12,26,12,243,8,150,141,208, + 208,191,208,191,208,191,16,208,191,208,191,191,191,208,191,16, + 208,16,16,16,16,16,208,16,16,208,16,16,16,16,16,208, + 16,208,16,208,16,208,16,208,208,208,208,16,16,208,16,208, + 208,208,16,208,208,208,208,16,16,16,208,208,208,208,208,208, + 88,100,100,100,100,100,100,100,100,100,100,100,100,102,100,102, + 100,100,100,100,100,102,100,100,100,100,102,100,100,102,74,100, + 102,74,74,74,74,100,100,100,74,100,100,74,74,140,74,74, + 74,140,140,140,74,74,140,140,140,74,74,74,140,100,74,74, + 74,100,74,100,100,74,140,74,100,74,74,140,169,140,100,74, + 74,140,140,169,140,140,140,74,74,100,102,100,102,100,100,102, + 100,100,102,100,100,100,100,100,100,74,74,100,100,74,74,100, + 74,100,74,140,100,140,100,74,74,74,74,169,100,74,74,74, + 74,140,74,140,140,74,74,74,74,144,74,140,74,140,74,74, + 74,140,74,140,74,140,140,140,140,74,140,140,140,140,140,74, + 140,140,140,140,140,144,140,140,140,140,140,140,140,140,140,140, + 140,39,140,140,140,140,140,74,144,140,140,74,140,39,39,187, + 12,166,12,8,42,12,219,26,150,12,150,17,219,17,12,243, + 150,150,12,17,187,219,42,187,26,243,12,150,17,219,12,12, + 243,150,150,150,17,17,219,42,12,26,243,12,150,17,219,17, + 17,8,150,150,12,17,187,219,42,187,26,150,12,150,17,219, + 17,12,243,150,150,150,17,17,219,42,187,26,150,12,150,17, + 219,17,12,8,150,150,150,17,17,219,26,12,26,150,12,150, + 219,219,17,17,243,150,150,150,17,17,219,26,187,26,243,12, + 150,17,219,17,12,8,150,150,12,12,187,17,26,12,26,243, + 12,150,17,219,17,12,243,150,150,12,17,17,219,26,187,26, + 150,12,17,17,219,17,17,243,150,150,12,17,17,17,42,187, + 26,243,12,150,17,219,17,12,8,150,150,12,17,17,219,42, + 12,26,243,12,150,17,219,17,17,243,150,150,150,17,187,219, + 42,12,26,243,12,150,17,219,17,17,243,150,150,150,12,17, + 219,26,12,26,243,12,150,17,219,17,12,243,150,150,12,12, + 17,17,42,12,26,150,12,150,219,219,17,17,8,150,150,12, + 17,187,219,26,12,26,150,12,17,219,219,17,17,8,150,150, + 12,17,187,219,42,187,26,243,12,150,17,219,17,17,8,150, + 150,12,17,187,219,26,187,26,243,12,150,17,219,17,12,243, + 12,150,150,17,17,219,42,12,26,243,12,150,17,219,17,17, + 243,150,150,12,17,187,17,26,12,12,12,243,8,12,67,208, + 208,191,208,191,191,208,191,208,208,191,208,16,16,16,16,191, + 16,208,16,191,208,16,16,16,16,16,16,16,16,208,16,208, + 16,16,16,208,208,16,208,16,208,16,16,208,208,16,208,208, + 16,208,208,208,16,208,54,208,208,208,208,208,208,208,54,208, + 100,100,88,100,100,102,100,100,102,100,100,100,100,100,100,100, + 100,100,100,100,100,102,100,102,100,100,102,100,100,100,102,100, + 100,102,100,100,74,100,74,100,74,74,100,100,100,74,100,140, + 74,100,74,74,140,74,74,74,140,74,140,74,74,74,100,74, + 140,169,74,74,100,100,140,140,74,169,74,74,74,140,169,140, + 74,74,74,74,74,100,169,74,100,100,100,100,100,100,100,100, + 102,100,100,102,102,102,100,102,100,102,100,74,100,100,74,100, + 74,100,100,74,100,74,100,140,169,140,74,74,74,140,74,140, + 74,140,74,74,74,140,140,140,74,140,74,74,74,140,140,140, + 140,140,74,140,74,140,140,144,140,74,140,140,140,140,114,140, + 140,140,140,140,140,140,140,144,140,140,140,140,140,140,140,140, + 140,140,140,140,140,144,39,140,140,140,114,74,140,39,39,187, + 12,17,187,243,219,150,219,219,150,17,17,17,17,17,17,243, + 150,150,12,17,12,17,26,243,219,150,17,17,17,219,17,26, + 243,12,12,150,17,17,17,26,150,219,150,17,17,17,17,17, + 17,243,150,150,150,17,12,17,26,150,26,150,17,17,17,17, + 17,26,243,12,12,12,17,12,17,26,150,26,150,17,17,17, + 17,17,17,150,150,12,12,12,17,219,26,243,219,150,17,12, + 17,17,17,17,243,12,12,12,17,12,219,26,243,219,150,17, + 17,17,132,17,17,150,150,150,17,17,17,219,26,243,219,150, + 17,17,17,17,17,26,243,150,150,12,17,12,219,26,243,219, + 150,12,17,219,17,17,26,243,150,150,150,17,17,17,26,243, + 219,150,17,17,17,17,17,17,243,150,150,12,17,12,219,26, + 150,219,150,17,17,17,17,17,26,243,12,12,12,17,12,219, + 26,243,219,150,17,17,17,17,17,26,243,12,12,17,12,17, + 219,26,243,219,150,17,17,17,17,17,26,243,150,150,150,17, + 17,17,26,243,219,150,12,150,17,17,17,17,243,150,150,12, + 17,12,17,26,243,219,150,12,17,17,17,17,17,243,150,150, + 12,17,12,17,26,243,219,150,17,17,17,17,17,17,243,150, + 150,12,17,12,219,26,243,219,150,17,17,17,17,17,26,243, + 12,12,150,17,17,17,26,150,219,150,17,17,17,17,17,26, + 243,150,150,12,17,17,17,26,243,219,12,8,12,12,8,208, + 208,208,191,208,191,191,208,191,208,208,191,208,16,208,16,208, + 16,16,208,16,16,208,16,16,208,16,16,208,16,16,208,16, + 16,208,16,208,16,208,208,16,208,208,208,16,208,208,16,208, + 16,16,208,208,208,208,208,208,208,16,208,208,208,208,208,208, + 100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100, + 100,102,100,102,100,100,100,100,100,100,100,100,102,100,100,100, + 100,100,100,74,100,74,100,74,74,100,74,140,74,100,74,74, + 169,74,74,100,74,74,74,74,100,74,74,74,74,169,140,169, + 100,74,140,74,169,74,100,100,169,74,74,100,100,100,74,100, + 140,169,140,169,140,140,74,169,74,74,74,100,102,100,100,100, + 100,100,100,100,100,100,100,100,100,100,74,100,100,100,100,74, + 74,74,74,74,74,140,74,100,74,100,74,140,169,74,140,74, + 140,74,74,140,140,74,74,74,140,140,140,140,74,74,74,74, + 74,140,140,140,144,140,74,140,140,114,140,140,140,140,140,140, + 71,140,140,140,140,140,140,140,140,140,140,144,140,140,140,140, + 144,140,140,140,140,140,144,74,114,140,74,114,140,114,207,17, + 12,26,26,12,42,8,219,26,17,17,132,17,132,150,219,150, + 17,17,150,17,17,187,26,109,219,17,17,132,17,12,150,219, + 12,150,150,17,17,17,187,26,109,219,17,17,132,17,132,150, + 26,150,12,17,17,17,17,17,26,109,219,12,17,132,187,150, + 150,219,150,150,150,150,17,17,187,26,109,219,17,17,150,219, + 132,150,26,150,17,150,150,132,12,187,219,109,219,12,17,132, + 17,132,150,219,150,150,150,150,132,17,187,26,109,219,12,17, + 132,187,17,150,26,150,12,17,150,17,12,187,26,109,219,12, + 17,132,17,150,150,17,150,17,17,150,17,17,187,219,109,219, + 150,132,132,17,150,150,219,150,17,17,12,132,17,187,26,109, + 219,17,17,132,219,132,12,219,150,17,17,150,17,17,187,26, + 109,219,17,17,132,17,150,150,219,150,150,150,150,17,17,187, + 26,109,219,17,17,132,17,150,150,219,12,150,150,150,132,12, + 187,26,109,219,17,17,132,17,150,150,219,150,17,17,17,17, + 17,187,219,109,219,17,17,219,17,132,150,26,150,17,17,150, + 17,17,187,26,109,219,150,17,132,17,132,150,26,150,17,17, + 150,132,17,219,219,109,219,12,17,132,17,132,150,26,150,17, + 17,150,17,17,187,26,109,219,12,17,132,219,150,150,219,150, + 150,150,12,17,17,187,26,109,219,12,17,132,17,150,150,219, + 150,17,150,150,17,17,17,219,243,12,12,8,8,12,141,208, + 208,208,208,191,208,191,208,191,208,208,16,208,191,208,16,191, + 208,16,208,16,208,16,208,16,16,16,16,208,16,208,16,16, + 208,16,16,208,208,208,16,208,208,208,16,208,208,16,208,208, + 208,208,16,208,208,208,208,208,208,208,208,208,63,208,208,208, + 100,88,100,88,100,100,100,100,102,100,100,100,100,100,102,100, + 102,100,100,100,100,100,100,100,100,100,102,100,100,100,102,100, + 102,100,100,102,100,100,100,100,74,74,100,140,140,100,100,74, + 169,100,140,100,140,140,169,74,169,74,74,74,74,74,74,74, + 74,100,100,74,100,74,100,74,100,169,140,140,74,100,74,100, + 74,74,74,100,74,140,74,169,169,100,100,100,100,100,100,100, + 100,100,100,102,100,102,100,100,74,100,102,100,74,100,100,100, + 100,74,100,169,100,74,74,169,74,100,74,74,74,100,74,100, + 74,140,74,74,140,74,140,74,74,74,74,140,140,140,140,140, + 74,74,74,140,140,140,74,140,74,140,144,140,140,140,140,140, + 140,144,140,140,140,140,140,140,140,140,140,140,140,144,140,140, + 140,140,114,140,74,140,114,74,140,114,140,140,140,39,39,183, + 12,17,17,243,42,12,17,219,12,17,132,219,17,12,26,150, + 150,17,17,17,17,132,26,243,219,12,17,132,219,17,12,219, + 150,219,17,150,17,17,132,26,211,219,12,17,132,219,17,150, + 26,150,150,132,150,219,17,150,26,243,219,12,17,132,219,17, + 12,26,150,219,17,150,219,17,150,26,243,219,150,17,132,219, + 17,150,26,150,17,17,17,219,12,187,26,243,219,12,17,132, + 219,17,12,26,150,219,17,17,17,17,132,26,243,219,12,17, + 132,219,17,150,26,150,150,17,150,219,12,132,26,243,219,12, + 17,132,219,17,17,26,150,150,17,12,219,12,187,26,243,26, + 12,17,132,219,17,12,26,150,150,150,17,219,17,132,26,243, + 219,12,17,132,219,17,12,26,150,150,17,12,219,12,132,26, + 243,219,12,17,132,219,17,12,26,150,219,17,12,17,17,132, + 26,243,219,12,17,132,219,12,12,219,12,17,17,17,219,12, + 132,26,243,219,12,17,132,219,17,12,26,150,150,150,150,17, + 17,187,26,243,219,150,150,132,219,17,150,26,150,150,17,12, + 219,12,132,26,243,26,150,17,132,219,17,150,219,150,150,17, + 17,17,12,187,26,243,219,150,17,132,219,17,150,26,150,150, + 17,12,219,12,132,26,243,219,150,17,132,219,12,17,219,12, + 219,150,150,17,17,132,26,109,219,12,17,132,219,17,12,26, + 150,17,17,150,17,17,187,26,211,219,243,243,8,150,67,208, + 208,208,191,208,191,208,191,208,208,191,208,191,208,191,208,16, + 208,208,16,16,208,16,16,208,16,208,16,16,208,16,208,16, + 16,208,16,16,208,208,208,16,208,208,208,16,208,208,208,208, + 208,208,208,16,208,208,208,54,208,208,208,208,208,208,208,208, + 88,100,100,88,100,100,100,100,100,100,100,102,100,100,100,100, + 100,100,102,100,100,100,100,102,100,100,102,100,102,100,100,100, + 100,74,100,100,100,74,100,140,169,100,74,74,100,140,140,100, + 74,140,74,74,100,100,74,140,74,140,140,140,74,74,140,169, + 100,100,140,100,140,169,74,100,100,74,100,100,169,140,169,100, + 100,100,140,140,169,100,169,74,74,100,100,100,100,100,102,100, + 102,100,100,100,100,100,100,102,100,74,100,74,100,74,100,74, + 140,100,140,74,74,100,100,74,169,140,100,74,100,74,169,74, + 169,140,74,74,74,140,74,140,74,140,140,74,74,74,74,74, + 140,140,140,140,140,140,114,140,140,140,140,140,140,140,140,140, + 140,140,140,140,140,140,74,140,140,140,140,140,140,140,140,140, + 140,140,140,140,140,140,140,39,114,140,140,140,140,114,39,187, + 12,17,17,8,183,211,219,26,150,17,17,17,150,17,219,150, + 17,150,132,17,132,150,26,211,26,150,17,17,150,132,150,219, + 12,132,150,12,17,132,150,26,243,26,150,17,17,17,150,17, + 219,150,17,12,17,17,132,132,26,211,42,150,132,17,17,150, + 132,219,12,150,150,17,17,132,132,219,211,26,12,17,17,17, + 150,17,219,12,132,150,12,17,17,150,26,211,26,150,132,17, + 17,150,17,219,12,150,150,17,17,132,150,26,109,42,150,17, + 17,17,150,17,219,12,219,150,17,17,132,150,26,109,42,150, + 17,17,17,132,150,219,12,17,150,150,17,132,150,26,211,219, + 150,17,17,17,150,132,219,150,17,17,12,17,132,150,26,211, + 26,150,17,17,17,150,17,219,150,219,150,150,17,132,150,26, + 211,26,150,17,17,17,150,132,219,12,132,150,150,17,132,150, + 26,211,26,150,17,17,17,132,132,219,150,132,150,12,17,132, + 150,26,211,26,150,17,17,17,150,132,219,12,219,17,17,17, + 132,150,26,211,26,12,219,17,17,150,17,219,150,17,150,150, + 17,17,150,26,211,219,12,17,17,17,150,17,26,150,17,150, + 12,17,166,150,26,109,42,12,150,17,17,150,17,219,150,17, + 150,150,17,132,150,26,109,26,12,17,17,17,132,132,219,150, + 132,17,17,17,132,150,26,243,26,150,17,17,17,150,132,219, + 12,132,150,17,17,132,150,26,243,17,12,12,8,243,141,208, + 208,208,208,191,16,191,208,191,191,191,208,191,208,16,191,208, + 16,208,208,16,208,16,208,16,208,16,208,208,208,16,208,208, + 16,208,208,208,16,16,16,208,208,16,208,208,208,208,208,208, + 208,208,208,208,208,16,208,208,16,16,208,208,63,208,63,208, + 100,100,88,100,88,100,100,100,100,100,100,100,100,100,102,100, + 100,102,100,100,100,100,100,100,100,100,100,100,102,100,74,100, + 102,100,100,100,100,74,100,74,140,100,100,74,100,100,140,169, + 100,100,140,74,140,100,100,169,100,140,74,140,140,74,74,140, + 74,100,74,100,74,169,74,140,100,74,100,74,100,74,140,140, + 169,100,74,169,140,169,169,169,140,100,169,100,100,100,100,100, + 100,100,102,100,102,100,100,74,102,100,100,100,102,100,100,100, + 74,100,74,74,140,140,100,74,100,140,169,140,169,74,140,74, + 100,140,140,140,74,140,74,140,74,74,140,74,140,140,140,74, + 140,144,140,140,140,140,140,140,74,140,140,140,140,140,140,140, + 140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, + 140,140,169,140,140,140,140,140,140,140,140,140,140,127,39,183, + 12,187,26,8,42,243,17,26,150,17,17,17,150,17,26,150, + 17,150,219,219,26,132,26,109,26,150,132,17,17,17,17,219, + 12,132,132,17,17,26,132,26,109,26,150,17,17,17,132,17, + 26,150,132,150,17,17,26,150,26,211,26,12,219,17,17,17, + 17,219,12,219,150,17,219,26,187,26,211,26,150,17,17,17, + 150,17,219,12,17,132,17,132,26,132,26,109,26,17,17,17, + 17,150,219,219,12,17,150,17,219,26,150,26,109,26,150,132, + 150,17,132,17,219,150,17,150,132,219,26,132,26,211,26,150, + 17,17,17,17,17,219,150,219,150,17,219,26,132,26,109,26, + 150,132,17,17,17,17,26,150,132,132,17,219,26,132,26,109, + 26,150,17,17,17,150,17,26,150,17,132,17,219,26,132,26, + 211,26,150,219,17,17,17,17,219,12,219,150,219,219,26,132, + 26,109,26,150,17,17,17,17,17,219,12,219,150,17,219,26, + 132,26,211,26,150,17,17,17,17,17,219,150,150,150,132,219, + 26,132,26,109,26,12,17,17,17,132,17,26,150,219,150,17, + 132,26,132,26,109,219,150,17,17,17,132,150,26,150,17,132, + 12,219,26,150,26,211,26,17,17,17,17,132,17,26,150,219, + 150,17,219,26,132,26,109,26,150,17,17,17,17,17,219,12, + 132,150,17,17,26,132,26,109,26,150,132,17,17,17,17,219, + 12,17,150,132,17,26,150,26,211,17,243,8,12,12,8,105, + 208,208,191,208,208,191,208,208,208,208,191,208,16,208,16,208, + 208,208,16,208,16,16,208,16,16,208,16,208,16,208,208,16, + 16,16,208,208,208,208,16,16,208,208,208,208,54,208,54,208, + 63,208,54,208,208,16,208,208,208,54,208,208,208,208,63,208, + 169,100,100,88,100,100,100,100,100,102,100,100,100,100,102,100, + 100,100,100,100,102,100,102,100,102,100,100,100,100,102,100,100, + 100,100,102,74,100,100,100,100,100,74,74,100,74,74,100,74, + 74,140,100,169,100,140,140,74,140,100,140,140,100,169,140,74, + 169,74,100,100,100,74,169,100,169,169,74,100,74,169,100,100, + 100,140,169,140,169,74,169,169,100,169,100,100,100,100,100,100, + 100,100,100,100,100,74,100,100,100,100,100,100,100,100,100,74, + 100,74,100,169,100,100,140,100,74,100,74,74,74,74,100,100, + 74,100,74,74,140,74,140,140,140,140,74,140,74,74,74,140, + 140,74,140,74,140,74,74,140,140,140,140,140,140,140,140,140, + 74,140,140,74,140,140,140,140,140,140,140,140,140,169,140,140, + 169,140,140,169,140,140,140,140,140,140,140,140,140,39,39,187, + 12,219,187,12,42,243,219,42,12,17,150,17,132,132,219,12, + 132,12,150,219,17,187,219,243,42,12,219,17,17,150,150,42, + 150,17,17,150,219,17,187,17,243,42,12,17,150,17,17,132, + 219,12,17,17,150,219,17,187,219,109,42,12,17,150,17,150, + 150,42,150,132,17,150,17,17,187,219,243,219,12,219,150,17, + 17,132,219,150,132,17,132,219,17,187,219,211,42,12,17,150, + 17,132,150,42,150,132,17,150,219,17,187,17,243,42,12,219, + 17,17,17,150,219,12,132,12,17,219,17,187,219,243,42,17, + 17,150,17,150,150,219,12,132,17,150,219,17,187,17,12,42, + 12,219,150,17,150,150,219,12,17,12,150,219,17,187,219,243, + 42,12,17,150,17,132,132,219,12,132,12,132,17,17,187,219, + 243,42,12,17,150,17,150,150,26,150,132,12,150,219,17,187, + 219,243,42,12,219,150,17,150,150,42,150,132,17,132,17,17, + 187,219,243,42,12,219,150,17,150,150,219,12,17,17,17,17, + 17,187,219,243,219,150,17,150,17,17,150,219,12,132,17,132, + 219,17,187,219,8,42,12,17,150,17,17,17,219,12,132,17, + 132,17,17,187,17,243,219,12,17,150,17,17,150,219,12,132, + 17,150,219,17,187,17,243,219,12,17,150,17,150,12,26,150, + 17,17,132,219,17,187,17,243,42,12,219,150,17,150,150,219, + 150,132,17,17,219,17,187,17,8,26,12,8,8,12,8,105, + 105,208,208,208,208,191,208,191,208,191,208,208,191,208,191,208, + 16,208,16,208,208,16,16,208,16,16,208,208,208,208,208,208, + 208,16,208,16,208,16,208,208,208,208,208,208,208,208,208,208, + 208,208,208,16,208,208,208,208,208,208,208,208,208,208,208,208, + 88,100,100,100,88,100,100,100,100,100,100,100,100,100,100,100, + 100,102,100,100,100,100,100,100,100,100,102,100,100,100,100,102, + 74,100,100,100,100,74,100,74,169,100,140,100,100,74,100,169, + 100,74,74,74,100,74,100,100,74,100,74,140,74,100,100,74, + 100,169,140,169,100,74,100,74,100,169,140,169,74,169,140,169, + 100,140,100,100,169,100,100,169,100,100,100,100,100,100,100,100, + 100,100,100,102,100,100,102,100,102,100,74,100,100,74,100,140, + 100,74,74,74,100,100,140,169,74,100,169,169,169,140,140,169, + 140,169,140,74,140,74,100,74,74,140,140,140,140,140,140,74, + 140,74,140,140,140,140,140,140,140,140,140,74,140,140,140,39, + 140,140,39,140,140,74,74,140,140,140,140,169,140,140,140,140, + 140,140,140,140,140,140,140,140,140,140,39,140,140,39,127,187, + 150,17,187,12,42,12,219,42,17,219,12,17,150,219,219,132, + 219,17,150,219,17,187,26,150,26,17,17,12,17,17,132,219, + 132,132,17,17,17,17,187,26,150,42,17,219,12,150,150,219, + 219,132,132,17,150,219,17,187,26,150,219,17,219,12,17,150, + 132,219,132,132,17,17,17,219,12,26,187,26,17,219,12,150, + 150,219,219,132,132,17,17,219,17,187,26,150,219,17,219,12, + 17,150,132,219,132,132,17,150,219,17,187,26,150,42,17,17, + 12,150,150,219,219,132,132,17,17,17,17,187,26,150,42,17, + 219,12,17,150,219,219,132,17,17,132,219,17,187,26,150,26, + 17,219,12,17,150,219,219,132,132,17,150,219,17,187,26,150, + 26,17,219,150,17,150,219,219,132,17,17,132,219,17,187,26, + 150,26,17,219,12,17,150,132,219,132,219,17,150,219,17,187, + 26,150,26,17,219,12,17,17,17,219,132,132,17,17,17,17, + 187,26,150,26,17,219,12,17,150,219,219,132,132,17,17,17, + 17,187,26,12,42,150,219,12,150,150,219,219,132,17,17,17, + 219,17,12,42,187,26,17,219,12,150,150,219,219,132,132,17, + 150,219,17,187,42,187,219,17,219,12,150,150,219,219,132,17, + 17,132,219,17,187,42,12,42,17,219,12,17,150,219,219,150, + 132,17,17,17,17,187,26,150,42,17,219,12,17,150,219,219, + 132,132,17,17,17,17,187,42,243,26,12,8,8,8,8,208, + 208,208,208,208,191,208,208,191,208,208,208,208,208,191,208,191, + 208,208,16,208,16,208,208,16,208,208,16,208,16,208,16,208, + 208,16,208,16,208,208,208,208,208,208,208,208,208,208,208,208, + 208,208,208,208,208,208,208,208,208,208,208,208,208,208,63,208, + 100,100,169,100,100,100,100,100,100,100,100,102,100,100,102,100, + 100,100,102,100,100,100,100,100,102,100,100,100,100,100,74,100, + 100,100,102,100,74,100,74,100,74,140,100,169,140,169,100,74, + 74,169,169,140,140,100,140,140,140,74,100,169,140,140,140,169, + 169,74,100,74,100,100,169,100,169,140,100,100,169,100,100,74, + 169,100,169,169,169,169,169,169,169,169,169,169,100,100,100,100, + 74,100,100,100,100,100,100,100,100,74,100,100,74,100,100,100, + 74,169,100,100,74,100,100,74,100,74,74,74,74,100,74,74, + 100,74,74,140,169,140,140,169,140,140,74,74,140,74,74,169, + 140,140,140,74,140,140,140,140,74,140,140,140,140,140,140,74, + 140,74,74,140,74,140,127,140,140,169,140,140,140,140,169,140, + 169,140,39,140,127,140,140,169,140,140,140,114,39,39,207,187, + 187,17,12,211,183,12,219,219,17,26,17,12,26,17,219,17, + 17,17,219,219,17,12,26,150,219,26,219,17,17,12,26,26, + 17,17,219,132,219,17,12,26,150,219,17,26,17,17,26,17, + 219,219,17,17,219,219,17,150,26,150,42,17,26,17,17,26, + 26,26,17,17,17,132,219,17,150,26,150,219,17,26,17,17, + 26,17,26,219,12,17,219,219,17,17,26,150,42,17,26,17, + 17,26,26,26,17,17,17,219,219,17,12,26,150,219,26,26, + 17,17,26,17,219,17,17,17,132,219,12,12,26,150,219,17, + 26,17,17,26,17,219,17,17,17,219,219,17,12,219,150,219, + 26,26,17,17,26,17,219,17,17,17,219,219,17,12,26,150, + 219,17,26,26,12,26,17,219,17,17,17,219,219,12,17,26, + 150,219,17,26,17,17,26,26,26,17,17,17,219,219,17,12, + 26,150,219,17,26,17,17,12,17,26,17,17,219,132,219,17, + 12,42,150,219,17,26,17,17,26,17,219,219,12,219,132,219, + 17,12,26,150,42,26,26,17,17,26,17,219,219,12,17,219, + 219,17,187,26,150,219,17,26,17,17,17,17,219,17,17,17, + 219,219,17,17,26,150,42,17,26,17,17,26,17,219,17,17, + 17,219,219,12,12,26,150,219,17,26,17,17,17,17,26,219, + 17,17,132,219,17,12,26,150,219,26,26,17,17,26,17,26, + 17,17,17,132,219,17,187,26,150,17,12,8,8,8,12,105, + 208,208,208,208,63,208,191,208,208,191,208,208,16,208,208,16, + 208,208,16,208,208,16,208,16,208,16,208,208,16,208,208,208, + 208,208,208,208,208,16,16,54,208,208,208,16,208,208,208,208, + 208,208,63,208,208,16,208,54,208,208,208,208,208,208,208,208, + 169,100,169,100,100,100,100,100,100,102,100,100,100,102,100,102, + 100,102,100,102,100,102,100,100,100,100,74,102,74,102,100,74, + 102,100,100,100,100,100,74,100,100,74,74,100,74,169,100,169, + 74,74,100,100,140,100,100,100,140,140,74,169,169,169,74,74, + 169,169,169,169,169,74,169,74,100,169,140,100,169,169,169,100, + 169,100,169,100,100,169,100,100,100,100,100,100,100,100,100,100, + 100,74,100,100,102,74,74,102,100,100,102,100,100,74,100,169, + 74,100,74,169,140,100,100,169,169,140,100,140,74,169,140,140, + 100,169,74,74,169,140,140,140,169,140,169,74,169,140,74,140, + 140,74,140,140,140,74,74,140,74,74,140,74,140,140,39,140, + 127,140,74,169,140,140,169,140,140,169,140,169,169,140,140,140, + 39,140,140,140,169,140,140,140,169,169,169,140,140,127,39,94, + 17,183,26,26,26,17,122,122,42,122,122,0,122,42,122,122, + 122,122,122,122,42,42,42,187,122,42,122,122,0,122,183,122, + 122,42,122,0,0,183,42,42,187,0,42,122,122,0,122,42, + 122,122,122,122,0,122,42,122,42,187,122,42,122,122,0,122, + 219,122,122,122,122,0,122,42,78,42,187,0,42,122,122,0, + 122,26,122,122,42,122,122,122,26,42,42,187,122,42,122,122, + 122,122,219,0,122,122,122,0,122,42,42,42,187,122,42,122, + 122,0,122,42,0,122,122,122,0,0,183,42,42,187,122,42, + 122,122,0,122,42,122,122,42,122,122,122,42,42,42,187,122, + 42,122,122,0,122,42,122,122,122,122,122,122,42,42,42,187, + 122,42,122,122,0,122,42,122,122,122,122,122,122,42,42,42, + 187,0,42,122,122,0,122,219,122,122,122,122,122,122,42,42, + 42,187,122,42,122,122,0,122,183,122,122,42,122,0,122,42, + 42,42,187,0,42,122,122,0,122,42,122,122,122,122,0,122, + 42,42,42,187,122,42,122,122,0,122,42,122,122,42,122,122, + 122,42,42,183,187,0,122,122,122,0,122,42,0,122,122,122, + 0,122,42,42,42,187,122,122,122,122,0,122,42,122,122,42, + 122,122,0,183,42,42,187,122,122,122,122,0,122,219,0,122, + 42,0,0,122,42,42,42,187,122,42,122,122,0,122,42,122, + 122,122,122,0,122,42,42,42,187,42,219,17,17,219,17,105, + 208,63,208,208,208,208,208,208,208,208,208,208,208,208,208,16, + 208,208,16,208,16,208,208,208,16,208,16,208,208,208,16,208, + 208,208,208,208,208,208,208,16,208,208,63,208,208,208,208,208, + 208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, + 100,169,100,100,100,100,100,100,100,100,74,74,74,100,102,74, + 100,100,74,100,100,100,74,74,74,74,100,100,100,74,74,100, + 100,74,74,74,74,100,100,100,100,100,100,74,100,74,74,100, + 169,169,140,74,74,140,140,140,100,169,169,74,100,74,169,169, + 169,100,100,74,100,169,100,169,169,100,169,140,74,74,169,169, + 74,169,100,169,169,100,169,169,169,100,100,169,100,100,100,100, + 74,100,74,74,74,100,100,100,74,74,100,74,74,100,74,100, + 100,100,169,74,100,140,100,74,140,100,140,100,169,74,100,100, + 140,74,169,140,74,74,100,100,74,169,140,140,140,169,140,100, + 140,140,140,74,74,140,140,140,140,140,140,140,169,74,74,100, + 140,169,127,169,169,100,169,169,169,140,169,140,140,169,169,169, + 74,169,169,169,39,169,127,169,39,169,140,88,169,127,188,183, + 42,122,219,219,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,42,122,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,42,122,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,122,42,122,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,122,42,122,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,42,122,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,42,122,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,42,122,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,42,122,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,42,122, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,42, + 122,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 42,122,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,42,122,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,183,122,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,42,122,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,219,122,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,42,122,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,42,122,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,26,122,0,0,0,122,122,150,105, + 105,208,63,208,208,208,191,208,208,208,208,208,208,191,208,208, + 16,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, + 208,208,208,16,208,208,208,208,208,208,208,208,208,208,208,208, + 208,208,208,208,208,208,208,208,208,54,208,208,208,208,63,208, + 100,140,169,140,74,74,100,74,74,100,100,74,74,74,100,102, + 74,102,74,74,102,100,74,100,100,74,74,74,100,74,74,74, + 100,100,100,74,74,100,100,100,100,100,100,74,100,169,74,100, + 74,169,169,169,100,100,100,140,74,74,169,169,169,100,169,100, + 169,169,169,169,100,169,100,100,140,100,100,169,169,100,74,169, + 100,169,100,169,169,169,100,100,169,169,100,100,100,74,100,100, + 100,100,100,100,74,74,74,100,100,74,100,100,74,100,100,100, + 169,74,100,100,100,140,88,100,140,169,140,74,169,140,140,169, + 169,74,100,169,169,140,140,169,140,169,169,140,74,140,140,169, + 169,100,169,169,140,169,74,169,169,100,169,140,127,140,127,100, + 169,140,169,140,169,74,169,169,169,140,88,169,140,169,140,127, + 140,169,140,169,39,140,169,140,39,127,127,140,169,143,188,187, + 12,243,109,211,26,26,26,0,14,216,41,62,62,62,62,62, + 62,62,62,62,41,75,26,12,0,14,216,41,62,62,62,249, + 62,62,62,62,62,41,75,26,12,0,14,216,41,62,62,62, + 62,62,62,62,62,62,62,35,26,17,0,14,216,41,41,62, + 62,249,62,62,62,62,62,62,35,26,17,0,14,216,41,62, + 62,62,62,62,62,62,62,62,41,200,26,12,0,14,216,62, + 41,62,62,249,62,62,62,62,62,41,75,26,12,0,14,216, + 41,62,62,62,249,62,62,62,62,62,41,75,26,12,0,14, + 216,41,62,62,62,249,62,62,62,62,62,62,22,12,26,122, + 14,216,41,62,62,62,62,62,62,62,62,62,41,75,26,12, + 0,14,216,41,62,62,62,62,62,62,62,62,62,41,75,26, + 12,0,14,216,41,41,62,62,249,62,62,62,62,62,41,75, + 26,12,0,14,216,41,62,62,62,249,62,62,62,62,62,41, + 75,26,12,0,14,216,41,62,62,62,249,62,62,62,62,62, + 41,75,26,12,0,14,216,41,62,62,62,62,62,62,62,62, + 62,41,75,26,12,122,14,216,62,41,62,62,62,62,62,62, + 62,62,41,75,26,12,0,14,216,41,62,62,62,62,62,62, + 62,62,62,41,59,26,17,122,14,216,62,41,62,62,249,62, + 62,62,62,62,41,75,26,12,0,14,216,41,62,62,62,62, + 62,62,62,62,62,41,59,26,12,42,26,8,8,243,243,105, + 105,208,208,96,63,208,208,208,208,208,208,208,208,208,208,208, + 208,208,16,208,16,208,16,208,208,208,208,208,208,208,208,16, + 208,16,208,208,16,208,208,208,208,208,208,208,208,63,208,208, + 54,208,208,208,208,16,208,208,208,208,208,208,208,208,208,208, + 169,100,169,100,100,100,74,100,100,74,74,100,74,74,74,100, + 100,100,100,74,100,74,100,74,74,100,74,100,102,100,100,100, + 100,74,74,100,100,74,100,74,169,169,169,169,169,74,169,140, + 169,74,169,140,140,169,140,169,169,169,140,140,169,169,100,169, + 169,169,169,169,140,100,169,169,100,169,169,169,169,169,169,169, + 169,100,169,100,100,100,169,169,100,100,169,169,169,169,74,100, + 74,100,74,74,100,100,102,100,74,100,74,74,169,74,100,74, + 100,100,169,74,74,100,100,74,100,140,100,169,74,100,100,74, + 74,169,140,140,74,100,169,140,169,140,169,100,88,100,169,100, + 140,169,140,169,100,100,169,169,140,169,140,100,74,169,74,127, + 140,88,140,88,169,127,140,169,140,169,39,39,88,140,169,140, + 88,140,88,169,140,169,127,169,140,39,127,39,39,207,207,12, + 12,109,12,8,219,243,219,42,233,110,195,90,195,90,195,90, + 90,90,90,90,60,154,26,12,42,233,110,195,90,90,195,90, + 90,90,90,90,90,60,154,26,12,42,233,110,90,90,195,90, + 195,90,90,90,90,195,60,154,26,12,42,233,110,195,90,90, + 195,90,90,90,90,90,195,60,154,26,12,42,233,110,195,90, + 195,90,195,90,90,90,90,195,60,154,26,12,42,233,110,195, + 90,90,195,90,90,90,90,90,90,60,154,26,12,42,233,110, + 195,90,90,90,90,90,90,90,90,90,60,154,26,12,42,233, + 110,195,90,90,195,90,90,90,90,90,90,60,154,26,109,42, + 233,110,195,90,195,90,195,90,90,90,90,90,60,154,26,12, + 42,233,110,195,90,195,90,195,90,90,90,90,90,60,154,26, + 12,42,233,110,195,90,90,195,90,90,90,90,90,90,60,154, + 26,12,42,233,110,195,90,90,195,90,90,90,90,90,90,60, + 154,26,12,42,233,110,195,90,90,195,90,90,90,90,90,90, + 60,154,26,12,42,233,110,195,90,195,90,195,90,90,90,90, + 90,60,154,26,12,42,233,110,195,90,195,90,195,90,90,90, + 90,90,60,154,26,12,42,233,110,195,90,195,90,195,90,90, + 90,90,195,60,154,26,12,42,233,110,195,90,90,195,90,90, + 90,90,90,90,60,154,26,12,42,233,110,195,90,195,90,195, + 90,90,90,90,195,60,154,26,243,26,8,8,7,8,12,105, + 208,208,105,208,208,208,208,208,208,208,208,208,208,208,208,208, + 208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, + 208,208,208,208,208,208,54,208,208,208,63,208,63,16,208,16, + 208,54,208,54,208,208,16,208,208,208,208,208,208,208,208,63, + 169,74,169,169,100,100,74,74,100,74,74,74,100,74,74,74, + 74,74,100,74,100,74,100,74,74,100,74,100,74,74,102,100, + 100,100,100,100,100,100,100,100,74,100,100,74,169,100,100,74, + 169,74,100,169,74,169,74,74,100,100,100,100,169,169,169,100, + 169,169,100,169,169,169,100,169,169,169,100,100,100,100,100,100, + 169,169,169,169,169,100,100,169,169,100,169,74,100,169,74,100, + 74,100,100,74,74,100,74,100,100,100,100,100,100,100,100,100, + 100,100,169,169,169,140,169,169,100,169,140,88,140,140,169,169, + 140,100,100,169,140,100,100,100,100,100,140,169,169,74,169,88, + 140,88,140,169,169,169,74,100,169,169,127,169,169,88,140,88, + 169,88,127,140,169,88,140,88,140,169,169,39,127,169,88,140, + 127,127,140,88,127,140,127,169,169,169,39,169,169,143,188,187, + 12,109,150,67,26,150,26,122,206,128,23,23,23,86,19,19, + 65,65,19,19,195,178,243,243,122,206,128,23,23,23,23,23, + 65,19,65,19,19,195,178,243,243,122,206,128,86,23,23,86, + 19,19,65,65,19,19,195,178,150,243,122,206,128,23,23,23, + 23,23,65,19,65,19,19,195,178,150,243,122,206,128,23,23, + 23,86,19,19,65,65,19,19,195,178,243,243,122,206,128,23, + 23,23,23,23,65,19,65,19,19,195,178,243,243,122,206,128, + 23,23,23,23,23,65,19,65,19,19,195,178,243,243,122,206, + 128,23,23,23,23,23,65,19,65,19,19,90,178,12,243,122, + 206,128,23,23,23,86,19,19,65,65,19,19,195,154,12,243, + 122,206,128,23,23,23,86,19,19,65,65,19,19,195,154,12, + 243,122,206,128,23,23,23,23,23,65,19,65,19,19,195,154, + 12,243,122,206,128,23,23,23,23,23,65,19,65,19,19,195, + 154,12,243,122,206,128,23,23,23,23,23,65,19,65,19,19, + 195,154,12,243,122,206,128,23,23,23,86,19,19,65,65,19, + 19,195,178,12,243,122,206,128,23,23,23,86,19,19,65,65, + 19,19,195,154,12,243,122,206,128,23,23,23,86,19,19,65, + 65,19,19,195,178,12,211,122,206,128,86,23,23,23,23,65, + 19,65,19,19,195,154,12,243,122,206,128,23,23,23,86,19, + 19,65,65,19,19,195,178,12,243,219,8,8,141,8,8,105, + 105,208,208,105,208,105,208,208,208,208,208,208,208,208,208,208, + 208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, + 208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, + 208,208,208,208,208,208,208,208,208,208,208,208,208,63,208,208, + 169,169,169,140,140,140,169,100,74,100,100,100,74,100,74,100, + 74,100,74,74,74,102,74,100,100,100,100,100,102,100,100,74, + 100,100,74,100,100,100,100,100,100,100,169,100,100,169,100,169, + 100,169,169,100,169,100,169,169,169,169,169,169,100,169,169,169, + 169,169,188,169,169,169,169,169,100,100,169,169,169,169,169,169, + 169,169,169,169,100,169,169,169,169,140,100,169,169,100,169,169, + 100,100,100,100,100,74,100,100,100,100,100,100,100,100,100,100, + 169,100,100,100,100,100,100,100,169,74,100,169,169,169,100,140, + 100,169,169,140,88,140,88,140,88,140,88,169,169,88,140,100, + 88,169,88,169,169,169,169,88,169,169,169,169,140,127,100,127, + 169,39,169,88,169,169,88,140,88,169,169,169,140,169,169,127, + 169,169,127,127,169,169,169,39,127,127,169,127,39,127,218,132, + 12,187,17,8,132,187,26,122,222,204,19,65,19,65,65,65, + 65,65,19,65,90,178,219,109,42,137,204,19,65,19,65,65, + 19,118,65,19,65,90,178,17,109,122,233,204,19,65,19,65, + 65,65,65,65,19,65,90,178,17,211,122,222,128,19,65,19, + 65,65,19,118,65,19,65,90,178,17,211,122,222,204,19,65, + 19,65,65,65,65,65,65,65,90,178,219,109,42,31,128,19, + 65,19,65,65,19,118,65,19,65,90,178,219,109,42,233,128, + 19,19,19,65,65,19,118,65,19,65,90,178,219,211,122,222, + 128,19,65,19,65,65,19,118,65,19,65,195,178,17,211,122, + 222,204,19,65,19,65,65,65,65,65,19,65,90,178,132,211, + 122,222,204,19,65,19,65,65,65,65,65,19,65,90,178,132, + 211,122,222,128,19,65,19,65,65,19,118,65,19,65,90,178, + 132,211,122,222,128,19,65,19,65,65,19,118,65,19,65,90, + 178,132,211,122,222,128,19,65,19,65,65,19,118,65,19,65, + 195,178,132,211,122,222,204,19,65,19,65,65,65,65,65,19, + 65,90,178,150,211,122,222,204,19,19,19,65,65,65,65,65, + 19,65,195,178,17,211,122,222,204,19,65,19,65,65,65,65, + 65,19,65,90,178,132,243,122,233,204,65,19,65,65,65,19, + 118,65,19,65,90,178,132,211,122,222,204,19,65,19,65,65, + 65,65,65,65,65,90,178,17,254,26,8,8,8,141,12,105, + 105,105,105,208,208,208,208,208,105,208,208,208,208,105,208,208, + 208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,16, + 208,208,208,208,208,208,208,208,208,208,63,208,208,208,208,208, + 208,16,208,16,208,208,54,208,16,54,63,208,208,208,208,63, + 100,100,100,169,169,74,140,100,74,74,74,74,74,100,74,100, + 74,100,100,100,169,74,74,74,74,74,74,100,100,100,100,100, + 100,100,100,74,100,100,100,169,169,100,169,100,100,169,100,169, + 100,100,169,169,169,100,100,169,100,100,169,169,169,100,169,100, + 169,169,169,169,169,169,169,169,169,169,169,100,169,100,100,100, + 100,169,100,169,169,169,100,100,169,169,100,100,169,74,100,169, + 74,100,100,100,100,100,100,74,100,100,74,100,100,100,100,100, + 169,169,100,100,169,169,169,100,169,169,100,100,100,169,100,169, + 169,100,100,169,88,169,169,169,88,140,169,100,169,100,88,169, + 169,169,169,169,169,88,169,169,100,100,169,88,169,127,100,169, + 88,88,127,169,169,127,88,127,140,88,169,88,127,127,169,169, + 88,169,88,127,127,169,169,88,127,39,169,127,127,218,218,166, + 12,187,17,8,132,132,26,122,31,204,118,118,118,118,51,118, + 118,118,118,65,60,178,17,8,122,31,204,118,118,118,118,51, + 118,118,118,65,65,60,178,26,211,122,31,170,65,118,118,118, + 51,118,118,118,65,65,128,84,26,211,122,31,170,118,118,118, + 118,51,118,118,118,118,65,60,178,26,211,122,31,204,118,118, + 118,118,118,118,118,118,65,118,60,84,17,8,122,31,170,118, + 118,118,118,51,118,118,118,118,65,60,178,17,243,122,31,170, + 118,118,118,118,118,118,118,118,65,65,60,178,26,211,122,31, + 170,118,118,118,118,51,118,118,118,65,118,60,178,26,8,122, + 31,204,118,118,118,118,51,118,118,118,118,65,128,84,26,8, + 122,31,204,118,118,118,118,51,118,118,118,118,65,128,84,26, + 8,122,31,170,118,118,118,118,51,118,118,118,118,65,128,84, + 26,211,122,31,170,118,118,118,118,51,118,118,118,118,65,128, + 84,26,211,122,31,170,118,118,118,118,51,118,118,118,65,118, + 128,84,26,8,122,31,204,118,118,118,118,51,118,118,118,65, + 65,60,178,26,211,122,31,170,118,118,118,118,51,118,118,118, + 118,65,128,84,26,211,122,31,204,118,118,118,118,51,118,118, + 118,118,65,60,84,26,211,122,31,170,65,118,118,118,118,118, + 118,118,118,65,128,84,26,8,122,31,204,118,118,118,118,51, + 118,118,118,65,118,60,84,26,182,26,243,8,8,8,8,105, + 208,208,208,208,105,208,105,208,208,208,105,208,208,208,208,105, + 208,208,208,208,208,208,208,208,208,208,208,208,208,208,63,208, + 208,208,208,208,208,208,208,63,208,208,208,208,208,208,208,208, + 208,16,208,208,16,208,208,208,208,16,208,208,208,208,208,208, + 169,140,39,169,140,169,100,74,100,100,74,100,74,74,74,74, + 100,74,74,74,74,100,100,100,100,100,100,100,100,100,100,100, + 100,100,100,100,100,100,100,100,100,169,100,169,169,169,169,169, + 169,169,100,100,169,169,169,100,169,169,169,169,169,188,169,188, + 169,169,169,140,169,169,100,169,169,169,100,169,100,169,169,169, + 140,100,169,169,74,100,169,169,169,100,169,169,100,169,140,100, + 100,74,100,100,100,74,100,100,74,100,100,100,100,100,100,169, + 100,100,169,169,100,100,100,169,100,100,169,169,169,169,100,100, + 100,169,88,100,169,169,169,169,169,88,100,88,169,88,169,169, + 88,169,88,169,169,88,169,88,169,127,169,88,169,100,127,127, + 169,169,169,169,127,169,39,88,127,127,39,127,169,88,169,127, + 127,39,127,169,88,127,127,127,88,127,127,169,127,218,218,187, + 17,12,219,141,187,187,187,122,31,53,118,51,51,51,107,52, + 51,51,118,118,204,84,26,182,42,31,53,118,51,51,51,107, + 52,51,51,107,118,204,84,17,243,0,249,53,107,51,107,51, + 51,52,52,52,107,51,128,84,17,8,0,249,53,118,51,51, + 51,107,52,51,51,118,118,204,84,17,243,122,31,53,51,51, + 51,51,52,52,52,52,118,118,128,178,26,182,0,31,53,118, + 51,51,107,51,51,107,51,118,118,204,84,26,211,122,249,53, + 118,51,51,51,52,52,51,51,107,118,204,84,17,211,0,249, + 53,118,51,51,51,107,52,51,52,118,118,204,84,17,211,122, + 31,53,118,51,51,51,107,52,51,51,118,118,128,84,26,211, + 122,31,53,118,51,51,51,107,52,51,51,118,118,128,84,26, + 182,0,249,53,118,51,51,51,107,51,107,51,118,118,128,84, + 26,8,0,249,53,118,51,51,51,107,51,107,51,118,118,128, + 178,26,8,122,249,53,118,51,51,51,51,107,52,51,118,118, + 128,178,26,211,122,31,53,118,51,51,51,107,52,51,52,107, + 118,204,84,17,243,122,249,165,51,51,51,51,107,52,51,51, + 118,51,128,84,17,243,122,31,53,118,51,51,51,107,52,52, + 51,118,118,204,178,17,243,0,249,53,107,51,51,51,52,52, + 51,51,118,118,128,178,26,211,122,31,53,118,51,51,51,107, + 52,52,52,118,118,128,178,17,8,219,8,8,67,8,12,105, + 36,208,105,208,105,208,105,208,105,208,105,208,105,208,105,208, + 208,105,208,105,208,208,105,208,208,208,208,105,208,208,208,208, + 208,208,63,208,208,208,208,208,208,208,208,208,208,208,208,208, + 208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,63, + 169,100,140,100,169,140,169,169,74,100,74,100,100,100,100,74, + 100,100,100,100,100,74,100,74,100,100,100,100,74,100,100,74, + 100,100,100,100,169,100,100,169,100,169,169,169,100,169,100,100, + 100,169,169,100,100,100,169,100,169,100,169,169,169,88,169,169, + 169,169,169,169,140,140,169,169,100,169,169,169,169,169,169,169, + 169,169,140,169,39,169,169,100,169,169,140,169,169,100,169,169, + 100,100,100,100,100,100,100,100,100,100,100,100,169,169,100,169, + 169,169,169,169,169,169,169,169,169,169,100,100,100,88,169,169, + 100,169,169,169,88,100,88,169,169,127,169,88,39,88,169,88, + 169,88,169,88,127,169,88,169,100,88,88,169,127,169,169,88, + 169,88,169,88,169,127,88,169,88,88,169,127,127,127,169,127, + 88,127,127,127,127,169,127,39,127,127,127,127,127,218,153,132, + 17,187,26,8,187,12,12,122,249,85,51,52,76,76,76,232, + 52,52,9,107,204,84,26,8,122,249,85,51,52,76,76,76, + 232,52,51,9,107,204,84,17,8,0,123,53,107,76,76,76, + 76,76,51,51,107,9,204,84,12,8,122,123,53,107,51,76, + 76,76,232,52,52,107,107,204,84,12,8,0,123,53,107,51, + 76,76,76,76,51,52,9,9,204,84,26,8,122,123,53,107, + 76,76,76,232,76,52,52,9,107,204,84,12,8,122,123,53, + 51,51,76,76,76,232,52,51,9,107,204,84,17,8,0,123, + 53,107,51,76,76,76,232,51,52,107,107,204,84,17,243,122, + 249,85,51,52,76,76,76,232,52,52,51,107,204,178,12,8, + 122,249,85,51,52,76,76,76,232,52,52,51,107,204,178,26, + 8,122,123,53,107,51,76,76,232,76,52,52,51,107,204,178, + 12,8,0,123,53,107,51,76,76,232,76,52,52,51,51,204, + 84,17,243,122,123,53,107,76,76,76,76,76,52,52,51,9, + 204,84,17,8,122,249,85,51,52,76,76,76,232,51,52,9, + 107,204,84,17,8,122,123,53,107,51,76,76,76,232,52,52, + 107,9,204,178,12,8,122,249,85,51,52,76,76,76,76,52, + 52,107,107,204,84,17,8,122,123,53,107,51,76,76,76,232, + 52,52,51,51,204,84,17,8,122,249,85,51,52,76,76,76, + 76,51,52,9,9,204,84,17,8,219,8,8,8,8,8,105, + 105,208,105,208,208,105,208,105,208,208,105,208,208,208,105,208, + 208,105,208,208,105,208,208,105,208,208,208,208,105,208,208,63, + 208,208,208,63,208,63,208,208,208,63,208,16,208,208,208,208, + 208,208,208,208,208,208,208,208,208,16,208,208,208,208,208,208, + 169,140,169,169,100,169,169,74,169,140,100,74,74,74,74,100, + 74,100,100,100,100,100,100,100,100,100,74,100,100,74,100,100, + 100,100,100,169,100,169,100,100,169,169,100,100,169,100,169,169, + 88,169,100,169,88,169,100,169,169,88,169,88,169,39,169,169, + 169,169,169,169,169,169,140,169,169,169,100,169,74,169,100,100, + 169,39,169,169,169,169,169,39,169,169,100,169,100,169,100,100, + 169,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100, + 100,100,100,88,169,88,100,88,169,100,88,169,88,88,100,100, + 88,100,100,100,100,140,88,100,100,169,39,169,169,88,169,169, + 169,88,140,88,100,169,39,88,169,169,169,88,169,88,169,88, + 169,169,88,88,169,169,127,127,127,127,127,169,127,127,127,169, + 127,169,127,127,169,127,127,127,127,127,127,127,188,236,236,187, + 26,150,187,141,109,12,17,0,123,85,52,76,76,76,232,232, + 232,76,51,9,204,154,17,141,0,123,85,52,76,76,76,232, + 232,232,76,51,9,204,154,17,243,122,123,194,52,76,76,232, + 232,232,232,76,52,9,204,154,17,243,0,123,85,76,232,76, + 76,232,232,232,51,52,9,204,154,17,211,162,123,85,76,232, + 76,76,232,232,232,76,51,9,204,154,17,243,162,123,85,52, + 76,76,76,232,148,232,51,51,9,204,154,17,243,122,123,85, + 52,232,76,76,232,232,232,76,51,9,204,154,17,243,122,123, + 85,76,232,76,76,232,232,232,76,51,9,204,154,17,243,0, + 123,85,52,76,76,76,232,232,232,51,52,9,204,168,17,141, + 0,123,85,52,76,76,76,232,232,232,51,52,9,204,154,17, + 243,122,123,85,76,232,76,76,232,232,232,51,52,9,204,168, + 17,211,122,123,85,76,232,76,76,232,232,232,51,52,9,204, + 154,17,243,122,123,85,52,76,76,232,232,232,232,51,52,52, + 204,154,17,141,0,123,85,52,76,76,76,232,232,232,76,51, + 52,204,84,17,243,122,123,85,76,232,76,76,232,232,232,76, + 51,9,204,84,17,141,0,123,85,52,76,76,76,232,232,232, + 51,52,9,204,84,17,243,0,123,85,76,232,76,76,76,232, + 232,51,52,9,204,154,17,141,0,123,85,52,76,76,76,232, + 232,232,76,51,9,204,84,17,141,17,12,8,8,8,12,36, + 36,208,105,105,208,208,208,105,208,208,105,208,105,208,208,105, + 208,208,208,208,208,208,208,208,105,105,208,105,208,208,208,208, + 208,208,63,208,208,208,208,208,63,208,208,63,208,208,208,208, + 208,208,16,63,208,208,208,16,208,208,208,208,208,208,208,63, + 169,100,39,169,100,100,169,100,169,169,100,100,100,169,100,100, + 74,100,100,100,100,100,100,100,100,100,100,100,100,100,100,169, + 169,169,100,100,100,169,100,100,100,169,88,100,169,88,169,169, + 100,169,100,169,88,169,88,100,169,100,169,169,169,169,169,169, + 39,39,169,140,169,169,169,140,140,39,169,188,100,140,39,169, + 169,169,39,169,39,39,169,169,169,188,169,169,169,169,169,100, + 169,100,100,74,100,100,100,169,169,169,169,100,100,100,100,100, + 88,169,100,88,100,88,100,100,88,169,169,100,169,169,88,169, + 88,169,169,169,88,100,88,88,100,88,169,169,39,88,169,169, + 127,88,88,169,169,100,127,169,169,169,88,169,88,169,39,127, + 169,169,127,127,88,169,88,169,88,88,127,169,127,127,127,127, + 127,127,127,127,127,169,127,88,127,188,188,207,127,218,153,166, + 12,187,219,243,187,111,187,122,167,194,76,76,148,232,232,148, + 232,232,76,52,204,168,26,211,122,167,194,76,76,148,232,232, + 148,148,148,52,52,204,168,17,243,122,167,194,76,76,232,232, + 232,148,232,232,52,76,204,168,17,243,122,167,194,76,232,148, + 232,232,148,148,232,76,52,204,168,219,243,122,167,194,76,232, + 148,232,148,148,232,148,52,76,204,168,17,243,122,167,194,76, + 76,148,232,232,148,148,232,76,52,204,168,17,243,122,167,194, + 76,232,232,232,232,148,148,232,76,52,204,168,17,243,122,167, + 194,76,232,148,232,232,148,232,148,52,52,204,168,17,211,122, + 167,194,76,76,148,148,232,148,148,232,232,52,204,168,26,211, + 122,167,194,76,76,148,148,232,148,148,232,232,52,204,168,26, + 243,122,167,194,76,232,148,232,232,148,148,232,232,52,204,168, + 17,243,122,167,194,76,232,148,232,232,148,148,232,52,52,204, + 168,26,211,122,167,194,76,76,232,148,232,148,148,232,52,52, + 204,168,26,211,122,167,194,76,76,148,148,232,148,232,232,52, + 52,204,168,12,243,122,167,194,76,232,148,148,232,148,232,148, + 52,76,204,168,26,211,122,167,194,76,76,148,232,232,148,148, + 232,76,52,204,168,12,211,122,167,194,76,232,148,148,232,148, + 148,232,52,52,204,168,26,211,122,167,194,76,76,148,232,148, + 148,232,148,52,76,204,168,26,8,219,12,8,67,8,8,105, + 36,208,105,208,105,105,208,105,208,208,208,208,105,208,105,208, + 105,208,105,208,105,208,208,208,208,208,208,208,105,208,105,208, + 105,208,208,63,208,63,208,105,208,208,208,208,208,208,208,208, + 208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, + 169,39,169,169,169,140,100,169,100,100,140,140,169,100,140,169, + 169,169,169,100,100,100,100,100,100,100,100,100,100,100,169,100, + 100,100,100,169,100,100,169,88,100,100,169,88,169,100,100,88, + 169,100,88,100,100,88,100,88,169,169,169,169,169,169,169,169, + 169,169,39,169,140,169,140,169,169,169,140,169,39,169,169,140, + 169,39,169,39,140,169,169,39,169,169,169,169,169,169,169,169, + 100,169,100,100,100,100,169,100,100,100,100,169,169,169,88,169, + 100,100,169,100,169,169,88,100,100,100,88,169,100,169,169,100, + 169,100,100,88,169,169,169,169,127,169,39,140,88,169,169,100, + 169,169,169,169,88,88,169,169,100,88,169,169,127,169,88,88, + 127,127,169,88,188,88,127,127,188,188,88,188,88,218,188,188, + 127,188,188,218,127,143,127,127,127,127,127,127,188,153,218,187, + 17,187,183,8,187,12,17,122,237,32,232,148,148,148,148,148, + 148,232,232,232,231,222,17,243,122,237,32,232,148,148,148,148, + 148,148,232,232,232,231,222,26,211,122,237,32,232,148,148,148, + 148,147,148,148,52,232,231,222,26,211,122,237,32,232,232,148, + 148,148,148,148,232,232,232,231,168,219,211,122,237,32,232,232, + 148,148,148,147,148,232,232,232,231,222,26,211,122,237,32,232, + 148,147,148,148,148,148,148,232,232,231,222,26,109,122,237,32, + 232,232,148,148,148,148,148,232,232,232,231,222,26,211,122,237, + 32,232,232,148,148,148,147,148,232,232,232,231,222,219,243,122, + 237,32,232,148,148,148,148,148,148,232,76,232,231,222,17,243, + 122,237,32,232,148,148,148,148,148,148,148,52,232,231,222,219, + 211,122,237,32,232,232,148,148,148,148,148,232,76,232,231,222, + 26,211,122,237,32,232,232,148,148,148,148,148,232,232,232,231, + 222,219,243,122,237,32,232,148,148,148,148,148,148,148,76,232, + 231,222,17,243,122,237,32,232,148,148,148,148,147,232,148,232, + 232,231,222,26,211,122,237,32,232,232,148,148,148,148,232,232, + 232,232,231,222,219,243,122,237,32,232,148,148,148,148,148,148, + 148,232,148,231,222,26,243,0,237,32,232,232,148,148,148,148, + 148,232,232,232,231,222,17,243,122,237,32,232,148,148,148,148, + 147,148,148,232,232,231,222,17,8,26,12,243,8,8,150,36, + 36,208,105,105,208,105,208,208,105,208,105,208,105,208,208,208, + 105,208,208,208,208,105,105,208,208,208,105,208,208,208,208,208, + 208,105,208,208,208,105,208,208,208,208,208,208,208,208,63,208, + 208,208,208,208,208,208,208,208,208,54,208,208,208,208,208,208, + 169,169,169,169,169,169,74,169,140,100,100,74,140,100,74,100, + 100,100,140,169,140,169,100,100,100,100,100,100,169,100,100,100, + 169,169,100,169,169,100,100,169,100,100,169,100,169,88,100,100, + 169,100,169,169,100,169,169,100,169,88,169,169,188,188,188,169, + 169,169,169,169,169,169,39,169,140,169,140,169,169,169,169,140, + 169,169,169,169,39,39,169,39,169,169,169,169,169,169,169,169, + 100,169,100,100,169,100,100,100,100,100,100,100,100,100,100,169, + 100,100,169,88,100,100,169,169,100,100,100,169,100,100,169,100, + 169,88,169,100,169,169,169,100,169,169,169,169,169,169,127,100, + 169,88,127,169,127,100,88,127,169,169,169,88,169,169,169,88, + 88,88,188,88,188,88,88,188,127,188,218,188,188,188,218,88, + 127,218,88,188,188,188,127,188,127,188,188,127,188,218,218,187, + 17,26,42,243,187,150,17,122,138,117,193,193,157,157,189,189, + 157,193,193,85,70,31,26,8,122,138,117,193,193,157,157,189, + 189,157,193,193,85,70,31,26,8,42,138,117,193,193,157,157, + 189,189,157,193,193,85,70,31,26,243,122,138,117,193,193,157, + 157,189,189,157,193,193,85,70,129,26,243,122,138,117,193,157, + 157,157,189,189,157,157,193,85,70,31,26,8,122,138,117,193, + 157,157,157,189,189,157,193,193,85,70,31,26,8,122,138,117, + 193,193,157,157,189,189,157,193,193,85,70,31,26,8,122,138, + 117,193,193,157,157,189,189,157,193,193,85,70,222,187,243,122, + 138,117,193,193,157,157,189,189,157,193,193,85,70,222,91,243, + 122,138,117,193,193,157,157,189,189,157,193,193,85,70,31,26, + 243,42,138,117,193,193,157,157,189,189,157,193,193,85,70,31, + 26,8,122,138,117,193,193,157,157,189,189,157,193,193,85,70, + 31,26,8,42,138,117,193,193,157,157,189,189,157,193,193,85, + 70,31,26,243,42,138,117,193,193,157,157,189,189,157,157,193, + 194,70,31,26,8,122,138,117,193,157,157,157,189,189,157,193, + 193,194,70,31,26,8,122,138,117,193,193,157,157,189,189,157, + 193,193,194,70,31,26,8,122,138,117,193,193,157,157,189,189, + 157,193,193,85,70,31,17,243,122,138,117,193,193,157,157,189, + 189,157,157,193,32,70,222,187,141,17,12,8,8,8,8,36, + 36,105,105,208,105,208,105,105,208,105,208,105,208,105,105,208, + 208,105,208,105,208,208,208,105,105,208,208,105,208,105,105,208, + 208,208,105,208,208,208,208,208,208,208,208,208,208,208,208,208, + 208,208,63,208,208,63,16,208,208,208,208,208,208,208,208,208, + 169,140,39,169,169,169,169,169,100,169,140,169,100,169,169,140, + 140,74,100,74,100,74,169,140,169,74,100,169,100,100,100,100, + 100,100,100,100,100,100,169,100,169,100,88,100,100,100,100,100, + 100,88,169,169,169,169,100,169,100,169,88,169,39,169,169,39, + 39,39,39,39,169,169,169,39,169,169,169,169,140,169,169,169, + 140,39,39,188,169,169,39,169,169,169,188,169,169,169,74,100, + 140,74,169,169,100,100,100,100,169,169,100,100,169,169,169,100, + 169,169,100,100,100,169,100,88,169,169,88,100,169,169,169,169, + 100,169,100,169,169,169,100,169,88,169,169,88,169,169,88,169, + 74,127,169,169,169,169,169,88,169,127,88,169,88,88,88,188, + 188,188,88,188,188,188,188,88,88,88,88,218,188,88,188,188, + 88,188,127,218,218,127,127,88,188,127,127,188,188,236,236,166, + 12,187,42,243,132,12,187,0,226,87,18,72,242,30,13,13, + 30,242,21,33,18,35,12,109,0,226,87,18,72,242,30,13, + 13,30,242,21,18,18,47,17,243,0,226,87,18,72,242,30, + 13,13,30,242,21,18,18,47,12,12,0,226,87,18,72,242, + 30,13,13,30,242,21,21,18,35,26,187,0,226,87,21,72, + 156,43,13,13,30,242,87,18,18,47,17,109,0,226,87,18, + 72,242,30,13,13,30,242,21,18,18,47,12,12,122,226,87, + 18,72,242,30,13,13,30,242,21,18,18,47,17,243,0,226, + 87,21,21,156,43,13,13,30,242,21,18,18,35,26,187,0, + 226,87,18,21,242,30,13,13,30,242,21,33,18,46,17,12, + 0,226,87,18,21,242,30,13,13,30,242,21,33,18,35,12, + 12,0,226,87,18,72,242,30,13,13,30,242,21,33,18,47, + 17,243,0,226,87,18,72,242,30,13,13,30,242,21,33,18, + 35,17,109,0,226,87,21,21,242,30,13,13,30,242,21,18, + 18,35,12,12,0,226,87,18,21,156,43,13,13,30,72,21, + 18,18,47,17,243,0,226,87,21,87,156,30,86,13,30,242, + 21,18,18,35,12,12,122,226,87,18,72,242,30,13,13,30, + 242,21,18,18,47,17,109,0,226,87,21,21,242,30,13,13, + 30,242,21,18,18,35,26,12,0,226,87,21,21,156,43,13, + 13,30,242,21,18,18,46,12,8,26,8,8,141,243,8,36, + 105,105,105,105,105,208,105,105,208,105,208,105,208,208,105,208, + 105,208,105,208,208,105,208,208,208,208,105,208,208,208,208,105, + 208,208,208,105,208,105,105,208,208,208,54,208,208,208,208,208, + 63,208,208,208,96,208,208,208,208,16,208,208,208,208,208,208, + 169,169,39,169,169,140,100,169,169,169,74,74,74,74,100,100, + 169,140,169,140,169,100,100,100,169,74,100,74,140,169,140,100, + 169,169,169,100,169,100,169,169,169,100,169,169,169,169,88,169, + 169,100,100,169,88,169,169,169,169,169,169,169,39,39,39,39, + 169,39,188,39,39,169,169,169,169,169,169,169,169,140,169,169, + 169,169,169,39,39,188,39,39,39,169,140,169,140,188,39,100, + 169,74,74,74,169,140,140,100,100,169,169,100,100,100,169,169, + 169,169,169,169,100,169,100,100,100,169,169,88,169,100,169,169, + 100,88,169,100,169,88,169,100,100,169,169,100,169,88,140,88, + 100,169,169,88,88,169,169,127,88,169,88,127,127,127,88,88, + 188,188,188,88,88,88,188,218,188,188,88,218,188,127,188,207, + 127,188,127,88,88,188,207,127,188,127,188,127,188,207,218,187, + 17,166,42,187,150,17,12,0,40,19,250,86,179,149,51,51, + 149,179,250,250,28,183,26,8,0,203,19,250,86,179,149,51, + 51,149,86,250,86,138,187,26,8,0,40,19,250,86,179,149, + 51,136,146,86,86,250,28,91,17,8,0,203,19,250,86,179, + 149,51,51,149,86,250,250,28,163,12,8,0,40,23,250,86, + 179,146,51,51,146,86,250,250,28,91,26,8,0,203,19,86, + 86,179,149,51,51,149,86,86,250,28,91,17,8,0,203,19, + 250,86,179,149,51,51,149,86,250,86,138,187,26,8,0,203, + 86,250,86,179,146,51,136,149,86,86,250,28,163,12,8,0, + 203,19,86,86,149,149,51,51,149,86,86,250,28,163,187,8, + 0,203,19,86,86,149,149,51,51,149,86,86,250,28,50,12, + 8,0,40,19,250,86,179,149,51,51,149,86,86,250,28,91, + 26,8,0,40,19,250,86,179,149,51,51,149,86,86,250,28, + 187,26,243,0,203,23,250,86,149,149,51,51,149,86,86,250, + 28,187,187,8,0,203,19,250,179,179,146,51,51,146,179,86, + 250,28,91,26,8,0,40,23,250,86,179,146,51,146,146,179, + 250,250,28,187,187,8,0,40,19,250,86,179,149,51,51,149, + 86,250,250,28,187,26,8,0,203,86,86,86,179,149,51,51, + 149,179,250,86,28,187,187,8,0,203,23,250,86,179,146,51, + 51,146,86,250,250,28,187,26,8,219,8,150,8,8,8,36, + 36,105,105,105,208,105,105,208,105,105,208,105,105,208,105,208, + 105,208,105,208,208,105,208,208,105,208,105,208,105,208,208,105, + 105,208,208,208,208,208,208,63,208,208,208,16,208,208,208,208, + 208,208,208,208,208,208,16,208,208,208,208,16,208,208,16,208, + 169,74,169,140,169,169,39,140,140,100,140,169,100,169,140,140, + 140,100,74,100,74,140,169,140,100,169,74,169,100,74,100,169, + 100,169,100,169,100,169,169,100,169,169,100,100,100,169,169,100, + 100,169,169,169,169,169,100,169,74,169,88,169,169,169,169,169, + 188,188,39,39,140,39,169,169,39,39,39,39,169,169,169,169, + 169,39,39,188,39,169,39,39,169,169,169,169,169,169,100,169, + 169,169,100,169,74,100,100,74,169,169,100,169,169,169,100,100, + 100,100,100,169,169,100,169,88,169,169,169,169,169,169,100,169, + 140,169,169,169,169,169,100,169,88,169,169,169,169,169,88,169, + 88,100,88,169,127,169,88,88,169,127,188,88,88,169,88,218, + 88,218,88,188,188,188,218,88,218,218,188,127,188,88,218,127, + 88,127,127,207,207,127,127,127,127,127,127,127,207,236,236,17, + 26,12,26,150,187,26,132,0,95,32,157,189,189,189,189,189, + 189,189,157,85,204,61,219,211,0,95,32,157,189,189,189,189, + 189,189,189,157,85,204,61,219,211,0,95,32,157,189,189,189, + 189,189,189,189,157,85,128,91,183,211,0,95,32,157,189,189, + 189,189,189,189,189,157,85,128,61,219,211,0,40,32,157,189, + 189,189,189,189,189,189,157,85,128,91,219,211,0,40,32,157, + 189,189,189,189,189,189,189,157,85,128,91,183,211,0,95,32, + 157,189,189,189,189,189,189,189,157,85,204,61,219,211,0,40, + 32,157,189,189,189,189,189,189,189,157,85,204,91,219,211,0, + 95,32,157,189,189,189,189,189,189,189,157,85,204,91,219,211, + 0,95,32,157,189,189,189,189,189,189,189,189,85,204,91,219, + 211,0,95,32,157,189,189,189,189,189,189,189,157,85,128,91, + 219,211,0,95,32,157,189,189,189,189,189,189,189,189,85,204, + 61,219,211,0,40,32,157,189,189,189,189,189,189,189,157,85, + 204,61,219,109,0,95,32,157,189,189,189,189,189,189,189,157, + 85,128,91,219,211,0,40,32,157,189,189,189,189,189,189,189, + 157,85,204,61,219,211,0,95,32,157,189,189,189,189,189,189, + 189,157,85,128,61,219,211,0,40,32,157,189,189,189,189,189, + 189,189,189,85,128,61,219,211,0,40,32,157,189,189,189,189, + 189,189,189,157,85,204,61,219,141,26,8,8,8,141,141,36, + 36,105,105,105,105,105,105,105,208,105,105,208,105,208,105,208, + 105,208,105,105,208,208,105,105,208,105,208,208,105,208,105,208, + 208,208,105,208,105,105,208,105,63,208,208,208,208,208,63,208, + 208,208,208,208,208,208,208,208,208,16,208,63,208,208,208,208, + 188,140,169,140,140,169,169,100,140,100,74,140,74,169,169,74, + 140,140,140,169,140,74,100,140,169,169,100,100,169,169,74,74, + 100,169,100,169,100,100,169,100,169,169,88,169,100,88,169,169, + 169,169,100,100,169,169,100,169,100,169,169,88,39,188,188,39, + 169,169,169,188,169,39,39,169,169,169,169,39,188,39,39,39, + 169,169,169,169,39,39,169,39,39,39,169,140,140,140,169,140, + 169,169,74,100,169,169,169,74,74,169,74,100,100,169,169,88, + 169,88,100,88,169,169,169,169,100,169,169,100,169,169,169,88, + 169,100,169,100,169,39,169,127,140,140,88,100,100,169,169,127, + 169,88,88,169,88,169,169,88,88,169,169,188,88,188,88,188, + 88,218,218,88,218,88,188,88,88,218,88,218,218,127,218,188, + 218,188,127,218,88,188,127,188,127,127,127,127,127,218,218,187, + 26,166,42,12,187,26,17,0,40,53,52,232,232,148,148,148, + 148,232,52,185,230,91,122,243,0,40,53,52,232,232,148,76, + 147,148,232,76,27,230,91,122,243,0,40,45,52,76,232,232, + 148,147,232,232,52,27,230,91,0,243,0,40,53,52,232,148, + 148,76,148,148,232,52,185,230,91,122,243,0,40,53,232,76, + 232,148,148,148,148,232,52,27,230,91,122,243,0,40,53,52, + 232,232,148,148,148,148,232,52,27,230,91,0,243,0,40,53, + 52,232,232,148,148,148,147,232,76,27,230,91,122,243,0,40, + 45,52,76,232,148,232,147,232,232,52,198,230,91,122,243,0, + 40,53,52,76,232,148,148,148,148,232,52,185,230,26,122,243, + 0,40,53,52,76,232,76,148,148,147,232,52,27,230,26,122, + 243,0,40,45,52,232,148,148,76,148,148,232,52,185,230,91, + 0,243,0,40,45,52,232,232,148,148,148,147,232,52,185,230, + 26,122,243,0,40,45,52,76,232,148,76,147,148,232,52,27, + 230,26,42,243,0,40,53,52,76,148,148,76,148,148,232,52, + 27,230,91,0,243,0,40,170,232,76,232,148,148,147,147,232, + 52,27,230,26,122,243,0,40,45,52,232,232,148,76,147,148, + 232,232,185,230,91,122,243,0,40,45,232,232,232,148,148,148, + 147,232,52,27,230,91,122,243,0,40,53,52,76,148,148,76, + 148,147,232,52,27,230,91,122,141,219,12,8,8,8,8,36, + 105,105,105,105,105,208,105,208,105,208,105,105,105,208,105,208, + 105,208,208,208,105,208,208,208,105,208,105,208,105,208,208,105, + 208,105,208,208,208,105,208,208,105,208,63,208,208,208,208,208, + 208,208,208,208,208,208,208,63,208,208,208,208,208,63,208,208, + 169,169,188,169,169,140,140,140,169,140,140,169,140,74,74,140, + 74,100,74,74,100,140,140,169,74,169,74,169,74,74,100,169, + 140,74,140,169,169,169,100,169,100,169,188,169,188,169,169,169, + 169,100,169,169,100,169,88,169,169,169,169,188,169,169,39,188, + 39,39,39,39,39,169,140,169,140,169,39,169,169,169,169,169, + 39,39,39,39,39,169,39,39,140,169,39,169,100,169,140,100, + 74,140,100,169,74,100,74,169,169,74,100,140,169,169,100,169, + 169,169,188,169,169,169,169,88,169,100,100,169,88,169,100,169, + 100,169,88,39,88,100,169,100,100,169,88,169,39,100,88,169, + 169,88,169,169,169,169,88,188,169,88,188,88,88,88,188,88, + 188,88,188,218,88,188,218,207,188,188,218,188,127,188,127,218, + 188,88,218,188,127,218,127,218,127,218,188,127,218,153,153,111, + 26,17,42,150,187,26,17,0,212,231,232,76,232,232,148,148, + 147,76,27,27,230,91,42,211,0,212,231,232,76,232,148,148, + 148,147,76,232,27,230,91,42,211,0,212,170,232,232,232,232, + 148,148,148,76,27,185,230,91,26,211,0,40,204,27,76,232, + 148,147,147,147,76,27,27,230,91,26,211,0,212,231,52,76, + 232,232,148,148,147,76,27,185,230,91,42,211,0,212,170,52, + 232,232,232,148,148,147,76,27,185,230,91,26,211,0,212,231, + 232,76,232,232,148,148,148,76,232,27,230,91,42,211,0,212, + 170,52,232,232,232,148,148,147,76,27,27,230,91,26,211,0, + 40,204,27,76,232,232,148,148,147,76,232,27,230,91,26,211, + 0,40,204,27,76,232,148,148,147,148,232,27,198,230,91,26, + 211,0,40,204,27,76,232,148,147,147,147,76,27,27,230,91, + 26,211,0,212,170,52,232,232,232,148,147,148,232,27,27,230, + 91,26,211,0,40,170,52,232,232,148,148,148,148,76,232,198, + 230,91,42,211,0,212,170,52,76,232,148,148,147,147,76,27, + 185,230,91,26,211,0,40,170,52,76,232,232,148,147,148,76, + 27,185,230,91,26,211,0,40,170,52,232,232,148,148,148,147, + 76,232,27,230,91,42,211,0,212,231,52,52,232,232,148,148, + 148,232,27,185,230,91,26,211,0,40,204,27,76,232,148,148, + 147,148,76,232,185,230,91,26,8,26,12,8,8,8,8,244, + 36,105,105,105,36,105,208,105,105,105,208,105,208,105,105,208, + 105,208,105,208,105,105,105,208,208,208,105,208,105,208,105,208, + 105,208,105,208,105,208,105,105,208,208,208,208,208,208,208,208, + 208,63,208,208,208,208,208,208,208,208,208,208,208,208,208,208, + 169,169,169,39,169,169,169,140,169,140,140,140,39,39,140,169, + 140,169,140,140,169,74,74,169,74,169,74,169,169,140,169,100, + 169,169,74,100,100,169,100,169,169,169,169,169,169,169,169,100, + 169,169,169,169,169,169,169,88,169,88,169,188,169,169,169,39, + 39,39,169,140,39,169,39,169,140,140,39,39,188,39,39,169, + 39,169,169,169,39,39,39,188,140,169,140,39,140,169,140,169, + 100,140,74,169,140,169,74,100,169,169,100,169,74,169,100,100, + 169,169,140,169,169,169,169,169,169,169,169,169,169,169,88,169, + 88,169,100,88,39,169,127,169,88,169,169,88,39,88,74,88, + 127,169,169,88,88,169,169,188,188,88,88,188,188,88,218,218, + 218,88,218,218,218,88,88,218,218,88,218,218,218,88,188,218, + 218,127,218,188,127,218,127,218,127,143,188,127,207,236,58,166, + 26,187,78,12,187,187,17,0,212,98,165,45,53,194,194,194, + 194,45,53,165,230,91,0,12,0,212,98,165,45,53,194,194, + 194,194,194,45,165,230,91,0,12,0,212,98,165,45,53,53, + 194,194,194,45,53,165,230,91,0,12,0,40,98,231,45,53, + 53,194,194,194,45,45,45,230,91,0,12,0,212,98,165,45, + 53,194,194,194,194,45,194,165,230,91,0,12,0,212,98,165, + 45,53,194,194,194,194,45,194,165,230,91,0,12,0,212,98, + 165,45,53,194,194,194,32,45,45,165,230,91,0,187,0,212, + 98,165,45,53,53,194,194,194,45,53,165,230,91,0,12,0, + 40,98,165,45,53,194,194,194,194,98,53,165,230,91,0,12, + 0,40,98,165,45,53,194,194,194,194,45,53,165,230,91,0, + 12,0,40,98,165,45,53,53,194,194,194,45,194,165,230,91, + 0,12,0,212,98,165,45,53,194,194,194,194,45,45,165,230, + 91,0,12,0,212,98,165,45,53,194,194,194,32,45,45,165, + 230,91,0,12,0,212,98,165,45,53,194,194,194,194,45,194, + 165,230,91,0,12,0,40,98,165,45,53,194,194,194,194,45, + 53,165,230,91,0,12,0,212,98,165,45,53,194,194,194,194, + 194,45,165,230,91,0,12,0,212,98,165,45,53,194,194,194, + 194,45,194,165,230,91,0,12,0,40,98,231,45,53,194,194, + 194,32,45,45,165,230,91,162,8,219,8,243,8,8,8,36, + 105,105,36,208,105,105,36,105,105,105,105,105,105,105,208,105, + 208,105,105,208,208,208,208,105,208,105,208,105,208,105,208,105, + 208,105,208,208,208,208,208,208,105,208,63,63,208,208,63,208, + 208,208,208,208,208,208,208,63,208,208,208,208,208,208,63,208, + 140,169,39,140,39,140,140,169,140,169,140,169,140,140,169,140, + 140,140,140,140,140,39,140,140,140,140,169,74,74,169,74,140, + 169,74,169,140,169,169,169,169,169,169,169,169,169,169,88,169, + 169,88,169,88,169,169,169,169,88,169,169,169,39,39,39,140, + 169,140,39,39,140,39,140,39,39,188,140,169,39,39,39,39, + 140,39,39,39,39,39,140,39,39,140,169,140,140,140,140,140, + 140,169,169,74,100,74,169,169,140,140,169,74,169,169,140,169, + 140,169,169,169,169,169,169,88,169,169,88,169,169,169,88,169, + 88,169,169,127,169,169,169,169,169,127,39,169,169,169,127,169, + 100,88,88,169,169,188,88,88,88,188,88,88,218,218,88,88, + 88,218,218,88,218,218,218,218,218,188,218,188,188,218,218,218, + 127,218,127,218,188,127,188,127,218,127,218,127,218,153,153,111, + 26,187,42,150,42,187,132,0,0,251,251,123,103,167,79,79, + 79,167,123,123,168,26,42,211,0,162,251,251,123,123,79,79, + 79,79,167,123,123,168,26,42,211,0,221,31,251,123,167,79, + 79,220,79,167,123,123,168,26,26,211,0,0,251,123,228,167, + 55,79,79,79,167,167,251,168,26,26,211,0,221,251,123,228, + 167,103,79,220,79,167,123,123,168,26,26,211,0,221,251,251, + 123,167,103,220,79,79,167,123,123,168,26,42,211,0,162,251, + 251,123,103,167,79,79,79,167,123,123,168,26,26,211,0,162, + 251,228,123,167,79,220,79,79,167,123,123,168,26,42,211,0, + 162,251,251,123,103,167,79,79,79,167,123,123,168,91,26,211, + 0,162,251,251,123,167,103,79,220,79,167,123,123,168,91,42, + 211,0,162,251,251,123,123,79,79,79,79,167,123,123,73,12, + 42,211,0,221,251,251,123,167,103,79,220,79,167,123,123,168, + 91,42,211,0,221,251,251,123,167,103,220,79,79,167,123,173, + 73,91,42,211,0,94,251,251,123,123,79,79,79,79,167,123, + 123,168,12,42,211,0,162,251,123,123,167,103,79,79,79,167, + 123,123,168,91,42,211,0,221,251,251,123,167,103,220,79,79, + 167,123,123,168,26,42,211,0,221,251,251,123,103,167,79,220, + 79,167,123,123,168,26,26,211,0,162,251,228,123,123,79,79, + 79,79,167,123,228,168,26,42,8,26,12,8,141,8,8,244, + 36,105,105,105,105,105,105,105,105,208,105,105,208,105,208,105, + 105,208,105,208,105,105,208,105,208,105,208,105,105,208,105,208, + 105,208,105,105,105,208,105,208,208,105,208,208,63,208,208,63, + 208,63,208,63,63,208,208,208,208,208,208,63,208,63,208,208, + 169,140,188,140,169,39,140,140,140,169,140,140,74,140,140,140, + 140,169,140,140,140,140,169,169,140,140,169,140,74,169,169,74, + 169,74,169,140,140,169,169,169,169,169,169,169,169,169,169,169, + 169,169,188,169,169,88,169,169,169,169,169,169,169,169,169,39, + 39,140,140,39,140,169,140,169,140,39,39,140,169,169,169,188, + 140,39,39,39,39,39,39,39,39,140,169,169,140,169,140,169, + 140,140,169,140,169,74,140,100,100,74,169,140,140,169,169,169, + 169,169,169,169,169,169,169,88,169,169,88,169,169,169,169,127, + 169,88,169,169,88,169,88,169,169,88,127,169,88,169,169,127, + 169,169,88,127,88,88,88,188,88,169,88,169,88,218,218,218, + 88,88,218,188,218,218,88,218,218,127,218,218,207,127,218,218, + 218,218,218,218,218,127,218,127,218,207,218,207,218,153,184,111, + 26,187,42,150,183,187,219,0,0,0,0,0,0,0,0,0, + 0,0,0,0,219,150,42,243,0,0,0,0,0,0,0,0, + 0,0,0,0,0,219,132,26,150,0,0,0,0,0,122,0, + 0,0,0,0,0,0,219,132,42,12,0,0,0,0,0,0, + 162,0,0,0,0,0,0,183,17,42,243,0,0,0,0,0, + 0,0,0,0,0,0,0,0,219,132,26,150,0,0,0,0, + 0,0,0,0,0,0,0,0,0,219,150,42,243,0,0,0, + 0,0,0,0,0,0,0,0,0,0,219,132,26,150,0,0, + 0,0,0,0,0,0,0,0,0,0,0,219,150,42,12,0, + 0,0,0,0,0,0,0,0,0,0,0,0,219,132,42,12, + 0,0,0,0,0,0,0,0,0,0,0,0,0,219,132,42, + 12,0,0,0,0,0,122,0,0,0,0,0,0,0,26,132, + 42,243,0,0,0,0,0,0,0,0,0,0,0,0,0,219, + 132,42,12,0,0,0,0,0,0,0,0,0,0,0,162,162, + 219,132,42,243,0,0,0,0,0,0,0,0,0,0,0,0, + 0,42,132,42,12,0,0,0,0,0,0,0,0,0,0,0, + 0,0,219,132,42,12,0,0,0,0,0,0,0,0,0,0, + 0,0,0,219,150,42,243,0,0,0,0,0,0,0,0,0, + 0,0,0,0,219,132,26,12,0,0,0,0,0,0,0,0, + 0,0,0,0,0,183,12,26,243,219,12,8,8,8,243,244, + 105,105,36,105,105,105,105,105,36,105,105,105,105,105,105,208, + 105,105,105,208,105,208,105,208,105,208,105,208,105,208,105,208, + 105,208,208,208,105,208,208,105,208,208,105,208,63,63,208,208, + 208,63,208,208,208,63,208,105,208,105,208,208,208,208,63,208, + 39,169,39,39,39,140,169,169,169,39,140,140,39,74,140,140, + 140,140,74,140,140,169,140,140,169,140,140,100,39,140,140,169, + 74,169,140,169,100,140,169,140,169,140,169,169,169,218,169,169, + 169,169,169,169,188,39,188,169,169,88,169,169,169,39,39,140, + 140,39,39,169,39,39,39,39,39,169,140,39,39,39,39,39, + 39,39,39,39,39,39,39,140,140,39,140,140,140,140,169,140, + 140,140,140,74,140,169,169,140,140,169,140,169,100,169,140,169, + 169,169,169,169,169,169,169,169,88,169,169,88,127,88,169,169, + 88,127,169,88,169,88,127,88,88,169,169,169,127,169,169,88, + 169,88,188,88,88,188,169,88,88,88,88,88,218,88,88,218, + 218,218,218,218,218,218,218,127,218,218,127,218,218,218,218,218, + 127,218,127,143,218,218,218,218,127,143,143,143,218,153,153,132, + 26,183,187,12,42,187,187,42,26,26,26,26,42,42,219,219, + 219,219,219,26,26,219,219,187,42,26,26,26,26,26,42,26, + 17,219,219,219,26,26,17,42,187,42,17,26,26,26,42,42, + 26,12,219,17,219,26,17,219,26,187,42,26,26,26,26,42, + 42,26,17,219,219,219,26,26,132,219,17,42,26,26,26,26, + 42,42,26,219,219,219,219,26,219,219,219,187,42,26,26,26, + 26,42,42,26,219,219,219,219,26,219,219,42,187,42,26,26, + 26,26,42,42,26,219,17,219,219,26,26,219,219,187,42,26, + 26,26,26,26,42,26,17,219,219,219,26,26,219,26,187,42, + 26,26,26,26,42,42,219,219,219,219,219,42,26,219,26,187, + 42,26,26,26,26,42,42,26,219,219,219,219,26,26,219,26, + 187,42,26,26,26,26,42,42,26,219,219,219,219,219,219,219, + 42,187,42,26,26,26,26,42,42,26,219,219,219,219,26,26, + 219,26,187,42,26,26,26,26,42,42,26,219,219,219,219,219, + 219,219,219,187,42,26,26,26,26,42,42,26,219,219,219,219, + 26,219,219,26,187,42,26,26,26,26,42,42,219,17,17,219, + 219,26,26,219,26,187,42,26,26,26,26,42,42,26,219,219, + 219,219,26,219,219,219,187,42,26,26,26,26,42,42,26,219, + 219,219,219,26,26,219,26,187,42,26,26,26,26,42,42,26, + 219,17,219,219,26,26,132,26,187,26,12,12,8,12,12,244, + 105,105,105,105,105,105,105,105,208,105,105,208,105,105,208,105, + 208,105,105,208,105,208,208,208,105,208,105,208,208,105,208,105, + 208,105,208,105,208,105,208,208,208,63,208,208,105,208,208,208, + 105,208,208,105,105,208,105,208,208,208,208,63,208,208,208,208, + 39,140,169,39,169,39,140,140,74,140,169,140,39,140,169,140, + 169,39,74,140,140,140,140,140,169,140,140,74,169,169,140,140, + 74,74,140,169,169,169,169,169,169,169,169,169,169,169,169,169, + 169,169,169,169,169,169,188,188,169,169,169,39,169,140,39,39, + 39,140,39,39,39,140,169,39,39,39,39,140,39,39,39,188, + 140,39,39,39,39,114,188,39,140,140,169,140,140,140,140,169, + 140,140,169,140,140,140,169,140,140,140,140,169,140,169,169,140, + 169,169,169,169,169,169,169,169,88,169,169,169,188,127,88,169, + 169,88,169,127,169,169,169,169,127,169,169,169,88,169,169,127, + 169,169,169,188,88,218,88,218,88,218,88,88,218,218,88,218, + 218,218,218,88,218,218,218,218,218,218,127,218,218,218,218,218, + 218,218,218,218,127,218,143,218,207,207,127,236,207,236,184,111, + 26,219,42,187,42,150,219,219,243,12,132,17,219,17,12,243, + 150,150,150,150,17,219,26,12,219,243,12,17,17,219,17,17, + 243,150,150,150,150,17,17,26,12,26,150,12,132,17,219,12, + 17,243,150,150,150,17,187,17,219,12,219,243,12,17,17,219, + 17,17,243,150,150,150,150,17,219,42,187,17,150,12,132,17, + 219,17,12,243,150,150,150,12,12,219,26,187,17,243,12,132, + 17,219,17,12,243,150,150,150,12,187,17,26,12,219,243,12, + 132,17,219,17,12,243,150,150,150,150,12,219,26,187,17,150, + 12,17,17,219,12,12,243,150,150,150,150,187,17,219,12,219, + 243,12,132,17,219,17,12,243,150,150,150,150,12,219,219,12, + 219,243,12,132,17,219,17,12,243,150,150,150,150,12,219,219, + 12,219,243,12,150,17,219,12,12,243,150,150,12,12,187,17, + 26,12,219,243,12,132,17,219,17,12,243,150,150,150,150,12, + 219,219,187,17,243,12,132,17,219,17,12,243,150,150,12,17, + 12,17,42,12,219,243,12,17,17,219,17,12,243,150,150,150, + 17,12,219,219,12,219,243,12,132,17,219,17,17,243,150,150, + 150,150,12,219,219,12,219,243,12,132,17,219,17,12,243,150, + 150,150,12,17,17,42,12,219,243,12,132,17,219,17,12,243, + 150,150,150,150,12,17,219,12,219,243,12,17,17,219,17,12, + 243,150,150,150,150,17,219,26,12,42,8,8,8,8,8,244, + 36,105,105,105,105,105,208,105,105,105,208,105,105,105,208,105, + 105,208,105,208,105,208,105,105,208,105,208,105,208,105,208,105, + 208,105,208,208,208,105,105,105,105,208,105,208,208,105,105,208, + 208,105,208,208,208,208,208,208,105,208,208,105,208,105,105,208, + 188,39,39,169,39,140,169,39,39,169,140,140,140,169,140,140, + 140,140,169,140,169,140,140,140,140,140,140,39,140,140,140,169, + 140,39,169,39,140,169,140,169,169,169,169,169,169,169,169,169, + 188,188,188,188,188,169,169,169,169,188,169,169,169,188,169,39, + 114,39,39,39,140,39,39,169,140,140,39,39,140,39,169,39, + 39,39,39,39,39,188,39,39,39,39,140,140,169,140,140,140, + 169,140,140,140,140,169,140,100,74,169,140,39,169,169,140,169, + 140,169,140,169,169,169,169,169,39,169,169,88,169,169,169,169, + 88,88,188,88,88,88,88,188,88,88,88,88,127,88,127,88, + 127,88,218,100,218,169,88,88,88,88,218,218,88,88,218,218, + 88,218,218,218,127,218,218,127,218,218,218,143,218,143,218,218, + 127,218,218,218,143,218,207,127,143,143,143,207,218,153,153,141, + 26,42,42,187,42,187,132,26,150,12,17,17,219,12,26,243, + 12,12,12,219,12,17,42,109,26,150,12,132,187,17,12,26, + 243,12,150,12,219,12,219,26,12,219,150,12,17,17,17,17, + 17,243,150,150,12,17,17,17,26,12,26,150,17,132,17,219, + 12,26,243,12,150,12,219,12,17,26,12,26,150,12,17,17, + 219,12,26,243,12,12,12,17,17,17,26,12,26,150,17,17, + 17,219,12,26,243,12,12,12,17,12,219,42,109,26,150,12, + 17,187,17,12,26,150,150,150,12,219,17,17,42,243,26,150, + 12,150,219,17,17,26,243,12,150,12,219,12,219,42,243,26, + 150,12,17,17,219,12,26,243,12,12,12,17,17,17,26,109, + 26,150,12,17,17,219,12,26,150,150,150,12,17,17,17,42, + 109,26,150,12,17,219,17,17,26,243,12,150,150,17,12,219, + 26,187,26,150,12,17,17,219,12,26,150,150,150,12,17,17, + 17,26,12,26,150,17,17,17,219,12,26,243,150,17,150,17, + 17,219,26,187,26,150,17,150,17,219,12,26,243,12,12,12, + 17,12,17,26,12,26,150,17,17,17,219,12,26,243,12,12, + 12,219,17,17,26,187,26,150,12,17,17,219,12,26,243,12, + 150,12,17,187,219,26,187,26,150,12,17,17,219,12,26,243, + 12,12,12,219,187,219,42,109,26,150,17,132,187,219,12,26, + 150,150,150,12,219,17,17,42,12,26,12,12,8,8,12,244, + 105,105,105,105,105,36,105,208,105,105,105,105,208,105,208,105, + 105,105,208,105,208,105,208,208,105,208,208,105,208,208,105,208, + 105,208,105,208,105,208,208,208,208,208,208,105,208,208,208,208, + 208,208,208,208,208,105,105,208,208,105,208,208,208,208,208,208, + 169,39,39,39,39,39,169,140,39,140,169,74,140,140,169,140, + 140,140,140,140,140,169,140,140,169,140,140,140,169,169,140,169, + 140,140,140,169,140,169,169,140,169,140,169,169,169,188,188,169, + 169,188,169,169,39,39,188,39,169,188,169,39,169,39,169,169, + 39,39,39,39,169,140,39,39,39,140,169,39,39,39,188,188, + 39,39,39,39,39,39,39,39,169,169,169,140,140,169,140,140, + 169,140,169,140,140,140,39,39,140,169,140,74,169,169,169,169, + 39,169,169,169,169,169,188,169,188,169,169,169,88,169,88,169, + 188,88,169,169,188,188,88,188,88,188,169,88,188,88,88,88, + 88,88,218,88,88,218,218,218,218,88,218,218,153,88,218,218, + 218,218,218,143,218,218,143,143,143,218,218,218,218,218,218,143, + 218,143,143,218,143,127,143,218,207,207,143,236,143,153,153,111, + 26,183,183,187,42,187,150,26,132,132,132,132,17,150,219,150, + 150,150,12,132,17,17,26,243,26,132,17,219,17,150,150,17, + 150,17,150,12,132,17,219,17,109,26,150,132,219,17,150,17, + 219,12,17,150,12,17,17,219,17,109,26,150,17,132,17,150, + 150,219,150,17,150,12,219,187,17,17,109,26,150,132,132,17, + 150,150,219,150,150,132,17,150,17,17,17,109,26,150,17,132, + 17,150,150,219,150,150,132,17,17,12,219,26,109,26,132,132, + 132,219,132,150,17,12,17,150,12,17,17,17,26,109,26,150, + 219,17,17,132,150,219,150,17,150,12,132,12,17,26,109,26, + 150,132,132,132,17,150,17,150,150,132,17,132,17,219,26,243, + 26,132,132,132,17,150,150,17,12,17,150,17,132,17,17,26, + 109,26,150,17,17,17,132,150,219,150,17,17,12,219,12,17, + 17,109,26,132,17,132,17,150,150,17,12,17,150,17,17,17, + 17,17,109,26,150,17,132,17,150,150,219,12,150,17,12,132, + 12,17,17,211,26,150,17,17,17,150,150,17,150,150,132,12, + 219,187,219,17,109,26,150,150,132,17,12,150,219,150,150,132, + 12,132,17,17,17,211,26,132,17,132,17,150,150,219,150,132, + 150,17,17,12,17,17,211,26,132,132,132,132,150,150,219,150, + 150,150,17,150,12,17,26,109,26,150,17,17,17,150,150,17, + 12,17,150,12,12,17,17,17,109,219,243,243,8,8,12,244, + 105,105,105,208,105,105,105,105,105,105,105,105,208,36,208,208, + 105,105,105,208,105,208,105,208,105,208,105,208,105,208,105,208, + 105,105,208,208,105,208,208,63,105,208,208,208,208,63,105,105, + 208,105,208,105,208,208,208,105,208,208,105,105,208,105,208,105, + 39,39,39,39,140,140,140,39,140,39,140,39,140,140,140,140, + 140,140,169,140,169,140,169,169,140,39,140,140,140,140,140,140, + 140,169,140,140,169,169,169,169,169,188,140,169,169,169,169,169, + 188,169,39,39,188,39,169,39,39,39,39,39,39,169,188,188, + 39,39,39,39,39,39,39,140,39,39,39,39,39,188,39,39, + 39,39,39,207,39,188,188,188,39,39,140,140,169,140,140,140, + 140,39,140,169,140,169,140,140,140,140,140,39,140,169,169,169, + 169,188,39,39,169,188,169,169,169,188,169,88,169,188,188,188, + 169,169,88,188,88,188,188,88,188,169,127,188,188,188,188,188, + 188,88,169,169,218,169,218,88,88,218,88,88,218,218,218,88, + 218,218,218,218,218,218,218,218,218,218,143,218,143,218,218,218, + 218,218,218,218,218,218,143,207,143,236,207,207,207,58,184,166, + 26,183,26,12,26,187,187,219,12,17,132,219,17,12,26,150, + 17,17,17,17,17,132,219,109,219,12,17,132,219,17,17,26, + 150,132,17,12,17,17,150,26,243,219,17,17,132,17,17,12, + 26,150,150,17,17,132,12,187,26,243,219,12,17,17,219,17, + 12,26,150,150,17,12,17,12,132,26,243,219,17,17,132,219, + 17,12,26,150,17,12,17,17,187,132,26,243,219,17,150,132, + 219,17,12,26,150,17,12,17,132,17,150,219,243,219,12,17, + 132,17,17,12,26,150,150,17,12,132,187,132,219,243,219,12, + 17,132,17,17,12,26,150,150,17,17,17,17,187,219,243,219, + 17,17,132,219,17,12,26,150,17,17,12,17,12,187,219,109, + 219,12,17,132,219,17,12,26,150,150,17,12,17,17,187,219, + 243,219,17,150,132,17,17,12,26,150,150,150,150,132,17,132, + 26,243,219,17,150,132,219,17,12,26,150,150,17,17,132,12, + 187,26,243,219,17,150,132,219,17,12,26,150,17,150,17,17, + 12,166,26,109,219,17,17,132,219,17,12,26,150,17,17,150, + 132,12,187,26,243,219,17,219,132,17,17,12,26,150,17,17, + 12,17,12,187,26,243,219,17,150,132,219,17,12,26,150,17, + 17,12,132,17,132,26,243,219,12,17,132,219,17,12,26,150, + 17,17,17,17,17,187,219,243,219,12,17,132,17,219,12,26, + 150,150,17,12,17,12,166,26,243,26,12,150,8,8,243,244, + 36,105,36,105,105,105,105,105,105,105,105,208,105,36,208,105, + 208,208,105,105,208,105,208,105,208,105,208,208,208,208,105,208, + 208,105,208,105,208,105,105,208,208,105,105,105,105,208,208,208, + 63,208,208,208,208,105,208,208,105,208,208,208,105,208,208,208, + 39,39,39,39,39,169,169,169,140,169,140,169,169,140,169,140, + 169,140,140,140,140,140,140,140,140,169,169,140,169,169,140,169, + 140,169,169,140,140,140,140,140,169,39,169,188,169,169,188,169, + 39,188,169,39,188,39,169,169,169,188,188,188,188,39,39,39, + 39,39,39,207,39,39,39,140,39,114,39,39,39,188,207,39, + 39,39,39,207,39,207,39,39,39,39,140,140,140,169,169,140, + 140,140,140,140,140,140,169,169,140,169,140,39,140,140,140,140, + 140,169,169,39,169,169,188,188,169,39,39,188,88,188,88,188, + 188,188,88,188,188,188,188,127,88,188,88,88,88,188,88,88, + 188,188,88,169,88,88,218,218,88,218,218,218,218,88,218,218, + 188,218,127,218,218,218,218,218,218,218,218,207,218,218,236,153, + 207,143,236,143,218,207,143,207,143,143,143,143,143,184,184,111, + 26,183,26,243,42,109,132,219,12,17,17,150,150,132,219,150, + 150,150,17,17,187,150,219,243,219,150,17,150,17,150,132,219, + 12,150,132,17,132,187,150,26,211,219,12,17,132,17,150,132, + 219,12,132,150,17,132,132,150,219,211,219,150,132,132,17,150, + 132,219,12,132,150,132,219,187,150,219,211,219,12,17,132,17, + 150,132,26,150,132,150,17,17,187,150,219,109,219,12,219,150, + 17,132,132,26,150,150,132,17,132,187,150,219,109,219,12,17, + 132,17,132,132,219,12,132,150,17,17,187,150,219,211,219,150, + 17,132,17,150,132,219,12,132,150,17,132,132,187,219,211,219, + 12,17,17,150,150,132,219,150,150,150,17,132,132,187,219,243, + 219,12,17,132,17,132,132,219,12,132,150,17,132,132,187,219, + 211,219,17,17,132,17,150,132,26,12,17,17,17,132,187,150, + 219,211,219,12,219,150,17,150,132,219,12,150,150,17,132,132, + 150,219,109,219,12,219,150,17,150,132,219,150,17,150,17,219, + 17,150,219,243,219,150,17,132,17,132,132,26,150,150,17,17, + 132,132,150,219,211,219,12,17,132,132,132,132,219,150,150,150, + 219,132,132,150,219,109,219,12,219,150,17,132,132,219,150,150, + 150,17,17,187,150,219,109,219,12,17,17,17,150,132,219,150, + 150,150,17,132,132,187,219,211,219,150,17,132,17,132,132,219, + 12,132,132,132,132,17,150,219,109,219,8,243,8,12,8,36, + 36,105,105,105,105,105,105,105,105,105,105,105,208,105,105,208, + 105,105,208,105,208,105,208,208,105,208,208,105,105,208,105,208, + 105,208,208,208,105,208,208,105,208,208,208,208,208,208,105,208, + 105,208,105,208,208,208,105,208,105,208,105,208,105,105,105,208, + 169,39,39,169,169,39,140,140,140,39,169,140,140,140,140,140, + 39,140,140,169,140,140,140,140,169,140,140,140,140,140,169,140, + 140,140,140,169,169,169,169,39,39,169,39,169,169,188,169,188, + 88,169,188,169,169,88,39,188,188,39,169,188,39,169,188,169, + 169,188,39,39,39,39,188,39,39,39,39,39,207,39,39,39, + 207,39,39,39,207,188,188,188,169,140,169,169,140,140,140,169, + 140,169,140,169,140,169,140,140,169,140,169,140,169,169,169,169, + 39,39,140,169,169,39,169,169,188,169,188,169,188,188,39,169, + 169,188,188,188,88,188,188,88,188,218,188,188,188,88,188,188, + 88,218,218,218,218,218,169,169,218,88,218,88,218,218,218,188, + 188,188,207,127,127,207,207,218,236,207,236,218,236,236,143,207, + 143,236,143,218,236,143,207,143,143,207,143,207,207,153,153,166, + 26,42,42,12,78,8,187,42,150,17,17,17,132,17,26,12, + 219,132,132,17,17,187,26,8,42,12,132,219,150,132,17,26, + 150,219,150,132,219,219,187,219,12,42,150,132,17,132,150,219, + 219,150,17,150,17,219,26,187,26,187,42,12,219,17,150,132, + 17,26,150,17,132,12,219,17,187,26,12,26,150,219,17,150, + 132,17,219,12,17,132,150,219,219,187,26,8,42,150,17,17, + 132,150,17,219,12,219,150,17,219,219,187,26,8,42,150,219, + 17,150,150,219,219,150,219,150,17,219,17,187,26,12,42,12, + 132,17,150,132,17,26,150,17,132,150,219,26,150,26,187,42, + 150,17,17,17,132,17,26,12,219,132,132,219,26,150,26,211, + 42,150,17,17,132,150,17,219,150,17,132,150,219,26,150,26, + 12,42,150,132,17,150,132,17,219,150,132,150,17,219,219,187, + 26,12,42,150,17,17,132,150,219,219,150,219,132,17,219,26, + 187,26,8,42,150,17,219,150,132,17,219,12,132,132,150,219, + 17,187,26,211,42,12,132,17,150,132,17,219,12,17,150,17, + 219,26,187,26,187,42,150,17,17,17,150,17,26,12,219,132, + 150,219,26,187,26,8,26,150,17,17,132,150,17,26,12,219, + 132,12,219,219,187,26,211,42,150,17,17,150,132,17,26,12, + 219,132,150,219,26,150,26,12,26,17,132,17,132,150,17,219, + 150,17,150,17,219,17,187,26,211,26,8,12,141,8,150,36, + 36,105,36,105,105,105,105,105,105,105,105,105,105,105,208,105, + 105,208,105,208,105,208,105,208,208,105,208,208,105,208,105,208, + 105,105,208,105,208,105,208,208,208,105,208,208,105,208,208,105, + 208,208,208,105,208,105,208,208,105,208,208,105,208,208,208,105, + 39,169,39,39,169,169,169,169,140,140,140,39,169,140,169,140, + 140,169,140,169,169,140,169,140,140,140,169,140,140,39,140,39, + 140,39,39,114,169,39,140,140,39,169,140,39,169,188,169,188, + 188,188,188,188,188,188,39,169,169,39,39,188,39,169,188,39, + 39,188,188,207,39,39,39,39,39,39,39,39,39,39,39,39, + 39,39,207,39,39,207,39,39,169,140,140,169,140,140,140,169, + 140,39,140,140,140,140,140,140,140,39,169,39,140,39,39,169, + 140,39,140,169,169,39,39,169,188,169,188,39,188,188,188,188, + 188,188,188,188,88,188,188,88,188,188,188,188,207,188,188,188, + 169,218,188,188,218,188,218,169,218,188,218,218,169,218,218,207, + 207,188,207,207,207,127,207,207,218,207,236,143,218,207,236,236, + 143,207,236,143,218,143,207,207,236,236,236,143,236,184,153,166, + 17,183,26,187,42,211,132,42,12,17,17,17,17,150,219,150, + 17,12,219,219,17,187,26,109,219,17,17,17,17,17,132,26, + 150,219,12,17,17,17,187,17,211,26,17,17,17,17,17,17, + 42,150,219,150,17,132,17,187,17,211,219,12,17,17,17,17, + 132,42,150,219,12,17,219,17,187,17,109,26,12,17,17,17, + 17,132,219,150,219,12,17,17,17,187,26,211,42,17,17,17, + 17,17,150,219,150,219,150,17,17,17,187,26,211,42,12,17, + 17,17,17,17,26,150,219,150,17,219,17,187,17,211,219,17, + 17,17,17,17,132,42,150,219,12,17,132,26,187,12,211,26, + 17,17,17,17,17,132,219,150,17,17,17,132,26,187,26,211, + 42,17,17,17,17,17,17,42,150,219,12,17,132,26,187,12, + 211,26,17,17,17,17,17,132,42,12,132,150,17,17,17,187, + 17,211,26,17,17,17,17,17,17,26,150,17,150,17,132,219, + 187,26,211,42,12,219,17,17,17,17,219,12,17,17,17,17, + 17,187,26,211,219,17,17,17,17,17,132,219,150,132,150,17, + 132,17,187,12,211,26,12,219,17,17,17,150,219,150,17,12, + 17,132,219,187,26,109,42,17,17,17,17,17,132,219,150,219, + 150,17,17,17,187,26,109,42,17,17,17,17,17,132,219,150, + 17,12,17,132,26,187,12,109,219,17,17,17,17,17,17,42, + 150,219,12,12,219,17,187,17,243,26,8,8,8,8,8,244, + 105,105,105,105,105,105,105,105,105,208,105,105,208,105,105,208, + 105,105,208,105,208,105,208,105,208,105,208,105,208,208,105,208, + 208,208,208,208,105,208,105,208,208,208,105,208,208,208,208,208, + 105,105,208,208,208,208,105,208,208,105,208,208,105,208,208,63, + 188,39,39,169,39,169,169,39,169,39,39,140,140,140,140,140, + 169,140,140,140,140,169,140,140,140,169,140,140,140,140,169,140, + 169,140,140,169,140,140,39,39,140,39,188,39,188,169,188,39, + 169,169,188,188,39,169,169,39,188,39,39,39,188,39,39,39, + 169,169,39,39,188,188,188,39,39,39,39,39,39,39,39,39, + 89,39,207,39,207,39,39,39,39,140,140,140,140,169,140,140, + 140,140,140,140,169,140,169,140,169,140,140,140,39,140,140,39, + 39,169,39,39,39,169,188,39,39,39,39,39,169,188,169,169, + 188,39,39,39,188,188,39,188,169,88,88,188,188,188,188,188, + 188,188,188,188,188,188,169,188,188,188,188,188,207,188,188,127, + 188,207,188,207,127,188,207,127,207,143,207,207,236,236,218,143, + 207,218,143,236,236,236,143,143,143,143,143,218,218,153,184,126, + 26,183,187,187,42,187,187,42,150,219,12,12,150,219,219,17, + 132,17,150,219,219,150,219,12,26,17,17,17,12,150,219,219, + 17,132,12,17,219,17,187,26,187,26,17,17,17,150,150,17, + 219,17,150,17,17,219,219,150,26,12,26,17,17,17,12,150, + 17,219,17,132,150,150,219,17,150,26,12,42,150,17,12,17, + 150,219,219,17,132,17,150,219,219,150,219,12,42,150,17,17, + 12,150,219,219,17,132,12,17,219,219,132,219,12,42,150,219, + 12,17,150,17,219,17,150,17,150,219,17,150,26,187,26,17, + 17,17,12,150,17,219,17,150,17,17,219,17,132,42,12,42, + 150,17,12,12,150,219,219,17,150,12,17,219,17,187,219,187, + 26,150,17,17,12,150,17,219,17,150,17,17,219,17,132,26, + 187,42,12,219,12,17,150,219,219,132,17,17,17,219,17,150, + 26,12,42,150,17,17,12,150,17,219,17,132,17,17,219,17, + 150,219,12,26,150,219,12,12,150,219,219,150,132,17,150,219, + 219,150,219,187,26,17,17,17,12,150,219,219,17,17,17,17, + 219,219,150,42,12,42,150,17,17,12,150,219,219,17,132,17, + 17,219,17,150,219,12,26,150,17,17,12,150,17,219,17,132, + 17,150,219,219,150,219,12,26,150,17,12,17,150,219,219,17, + 132,17,17,219,17,132,26,12,42,12,17,17,12,150,17,219, + 17,132,150,219,17,219,150,26,12,219,8,8,141,8,150,244, + 36,105,36,105,105,105,105,105,105,105,105,105,105,105,208,105, + 208,105,105,105,105,208,208,105,208,105,208,105,208,105,208,105, + 105,208,105,208,208,105,208,208,105,208,208,208,105,208,105,208, + 208,208,105,208,105,208,208,105,208,208,105,105,208,105,105,105, + 169,169,188,169,169,140,169,169,169,140,169,140,169,140,100,74, + 140,169,140,140,140,169,169,169,140,169,169,169,140,140,140,140, + 140,169,140,39,169,169,169,39,140,39,169,39,188,169,169,39, + 39,39,169,39,39,188,39,39,188,169,169,39,39,169,169,39, + 39,140,169,39,207,39,207,39,39,39,114,39,39,39,39,39, + 39,89,39,39,39,39,39,140,169,169,169,169,140,169,140,169, + 169,169,169,140,169,140,169,140,140,39,169,140,169,39,140,169, + 39,39,39,169,39,169,39,169,169,169,188,39,39,188,188,39, + 188,169,188,39,188,188,39,188,207,39,188,169,188,188,188,188, + 169,188,39,169,188,207,188,188,188,188,207,188,188,207,207,207, + 39,207,39,207,207,39,207,207,207,207,207,207,143,207,207,236, + 236,236,236,143,143,236,218,143,207,143,207,153,143,153,184,111, + 26,219,219,187,183,243,132,42,219,219,17,219,12,17,219,17, + 17,219,17,26,26,187,26,150,219,26,219,17,17,17,17,219, + 17,17,17,219,219,17,150,26,150,219,26,219,26,17,17,17, + 219,219,12,17,219,219,26,150,26,150,219,26,219,17,17,17, + 17,219,17,17,219,219,219,26,150,26,150,42,26,219,17,17, + 12,17,219,17,17,219,219,219,26,187,26,150,42,26,219,17, + 17,17,17,219,17,17,17,219,26,26,187,26,150,42,26,219, + 17,17,17,17,219,17,17,17,219,26,26,150,26,150,219,26, + 219,17,219,12,17,219,219,12,17,219,219,26,150,26,150,42, + 219,219,17,17,17,17,219,219,12,17,219,219,12,17,26,150, + 42,26,219,17,17,17,17,219,17,17,17,17,219,26,150,26, + 150,219,26,219,17,17,12,17,26,17,17,17,219,219,26,150, + 26,150,42,26,219,17,17,17,17,219,17,17,17,219,219,26, + 187,26,150,42,26,219,17,17,17,17,26,219,12,219,219,219, + 26,12,26,150,219,26,219,17,17,17,17,219,219,12,17,219, + 219,26,150,26,150,42,26,219,17,17,17,17,219,17,17,17, + 219,219,26,187,26,150,42,26,219,17,17,17,26,219,17,12, + 219,219,219,26,12,26,150,42,219,219,17,17,12,17,219,17, + 17,17,219,219,26,150,26,150,219,26,219,17,17,17,17,219, + 17,17,17,219,219,26,12,26,243,219,150,8,8,8,8,244, + 105,105,208,105,105,105,105,105,105,105,105,105,208,105,105,208, + 105,105,208,105,208,105,208,105,208,208,105,208,105,208,105,208, + 208,208,105,208,208,105,105,208,208,105,208,208,208,208,208,105, + 208,208,105,208,208,208,208,105,208,208,208,105,208,208,208,208, + 188,169,169,188,169,169,169,39,169,169,140,169,140,169,39,140, + 169,140,169,169,169,140,140,169,39,169,169,140,169,169,169,39, + 169,140,169,140,39,39,39,169,39,140,39,169,140,169,39,169, + 169,169,39,169,169,140,39,39,140,39,39,140,140,39,39,140, + 140,39,39,114,39,39,39,114,207,39,39,39,39,207,114,39, + 39,39,89,39,89,39,140,169,140,140,140,140,169,140,169,140, + 140,140,140,169,140,140,39,39,169,140,140,169,39,169,39,39, + 140,140,39,39,39,39,140,39,39,39,169,39,169,39,39,188, + 169,39,39,39,39,169,188,39,39,188,127,188,188,188,39,188, + 39,39,207,39,39,39,39,39,188,188,188,207,207,127,39,39, + 207,39,39,39,39,207,207,207,39,127,207,207,207,143,207,143, + 207,207,143,236,218,143,143,207,218,143,143,207,207,184,153,95, + 26,26,26,187,122,187,219,0,42,122,122,0,122,42,122,122, + 42,122,122,78,183,42,183,187,0,42,122,122,122,122,42,122, + 122,42,122,122,122,42,42,183,187,122,42,122,122,0,122,42, + 122,122,122,122,122,122,183,42,183,187,122,42,122,122,0,122, + 42,122,122,42,122,122,122,183,42,183,187,0,42,122,122,0, + 0,42,122,122,42,122,122,78,183,42,183,187,0,42,122,122, + 0,122,42,122,122,42,122,122,42,183,42,183,187,0,42,122, + 122,0,122,42,122,122,122,122,122,162,183,42,183,187,0,42, + 122,122,0,122,42,122,122,122,122,122,78,219,42,183,187,0, + 42,122,122,0,122,42,122,122,122,122,122,122,42,42,219,187, + 122,42,122,122,0,122,42,122,122,122,122,122,122,219,42,183, + 187,0,42,122,122,0,0,42,122,122,42,122,122,122,183,42, + 183,187,0,42,122,122,0,122,42,122,122,42,122,122,122,183, + 42,183,187,122,42,122,122,0,122,42,122,122,42,122,122,122, + 183,78,219,187,0,42,122,122,0,122,42,122,122,122,122,122, + 122,219,42,183,187,0,42,122,122,0,122,42,122,122,122,122, + 122,122,183,42,183,187,0,42,122,122,0,122,42,122,122,42, + 122,122,162,219,42,183,187,0,42,122,122,0,0,42,122,122, + 42,122,122,122,219,42,183,187,0,42,122,122,0,122,42,122, + 122,122,122,122,122,219,42,183,187,26,12,12,243,12,150,244, + 105,36,105,36,105,105,36,105,105,36,208,36,208,105,105,208, + 105,105,208,105,105,208,105,208,105,208,105,208,208,105,208,105, + 208,105,208,105,105,208,208,105,208,208,105,105,105,105,208,208, + 105,208,208,105,208,105,208,208,105,105,208,208,208,208,208,105, + 188,169,169,188,188,169,169,169,169,169,169,169,169,140,169,169, + 169,169,169,169,169,169,169,169,169,169,188,169,169,140,169,39, + 39,39,169,140,140,140,39,169,39,39,39,39,39,140,169,140, + 169,140,140,169,169,140,140,169,140,140,39,39,140,140,39,188, + 169,39,169,39,39,39,39,39,39,39,39,39,39,39,39,89, + 114,39,207,114,207,39,39,39,169,169,169,169,169,169,169,169, + 169,169,169,169,169,169,140,39,169,39,39,140,39,169,140,188, + 39,140,140,169,39,39,169,140,169,39,188,39,39,127,39,39, + 188,140,39,39,207,39,127,188,39,169,39,127,39,127,39,188, + 39,39,207,39,39,39,39,207,39,207,39,188,207,207,39,39, + 39,39,39,39,39,39,39,207,207,207,207,127,89,236,207,143, + 207,207,207,236,207,207,143,207,236,236,143,218,143,184,153,163, + 122,78,42,42,0,78,122,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,42,42,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,42,122,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,42,122,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,183,42,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,122,42,42,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,122,26,42,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,42,42,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,219,122,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,219,122, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,42, + 42,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 42,42,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,42,122,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,42,122,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,219,122,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,122,42,42,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,183,42,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,42,42,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,42,42,122,122,122,0,0,219,244, + 36,105,105,105,105,105,105,105,105,105,105,105,105,208,105,105, + 208,105,208,105,105,105,208,105,208,105,208,105,208,208,105,208, + 208,105,208,208,208,105,208,105,105,208,208,208,208,105,208,208, + 208,208,208,105,208,208,208,208,208,208,105,105,105,105,208,208, + 188,188,188,188,169,169,169,169,39,39,169,39,169,169,169,169, + 140,169,140,169,169,169,39,169,39,39,169,140,169,169,140,169, + 140,169,39,169,169,169,169,169,169,169,140,169,140,39,39,169, + 140,169,140,39,39,169,169,39,39,39,140,140,39,39,39,39, + 39,140,39,140,39,39,39,39,39,39,114,39,39,39,114,39, + 207,39,39,39,39,140,140,169,169,169,169,169,140,169,169,169, + 169,39,39,39,169,169,169,140,169,169,169,169,169,169,169,169, + 169,169,39,39,140,39,39,188,39,169,169,39,169,39,169,39, + 169,188,39,39,39,39,39,39,127,39,39,39,188,39,39,39, + 39,39,39,39,39,39,207,39,39,39,207,39,39,39,127,39, + 127,39,39,127,39,39,39,39,39,39,207,89,207,207,207,89, + 207,236,236,236,236,236,207,143,143,143,143,218,236,184,184,150, + 26,183,187,243,78,26,42,0,14,216,41,62,62,249,62,62, + 62,62,62,62,41,75,26,17,0,14,216,41,62,62,249,62, + 62,62,62,62,62,41,75,219,17,0,14,216,41,62,62,249, + 62,62,62,62,62,62,62,22,26,17,0,14,216,41,62,62, + 249,62,62,62,62,62,62,41,75,26,17,0,14,216,41,62, + 62,249,62,62,62,62,62,62,41,75,26,17,0,14,216,41, + 62,62,249,62,62,62,62,62,62,41,75,219,17,0,14,216, + 41,62,62,249,62,62,62,62,62,62,41,75,26,17,0,14, + 216,41,62,62,249,62,62,62,62,62,62,62,22,26,17,0, + 14,216,41,62,62,249,62,62,62,62,62,62,41,75,26,17, + 0,14,216,41,62,62,249,62,62,62,62,62,62,41,75,219, + 17,0,14,216,41,62,62,249,62,62,62,62,62,62,62,22, + 219,17,0,14,216,41,62,62,249,62,62,62,62,62,62,41, + 139,219,17,0,14,216,41,62,62,249,62,62,62,62,62,62, + 41,75,26,17,0,14,216,41,62,62,249,62,62,62,62,62, + 62,62,22,26,17,0,14,216,41,62,62,249,62,62,62,62, + 62,62,41,75,26,17,0,14,216,41,62,62,249,62,62,62, + 62,62,62,41,75,26,17,0,14,216,41,62,62,249,62,62, + 62,62,62,62,62,22,26,17,0,14,216,41,62,62,249,62, + 62,62,62,62,62,41,22,26,17,122,26,12,12,219,150,244, + 36,105,36,105,105,36,105,105,105,105,208,105,105,105,105,208, + 105,105,105,105,208,105,105,105,208,105,208,105,105,208,105,208, + 208,105,105,208,105,208,208,208,208,208,105,105,208,208,105,105, + 105,105,208,208,105,208,105,208,105,208,208,208,208,208,208,63, + 188,169,188,188,169,169,169,169,169,39,169,169,140,169,169,169, + 169,169,169,169,169,169,39,169,188,39,188,39,188,169,169,169, + 169,169,169,169,169,169,39,169,169,188,39,188,169,169,39,39, + 169,39,140,140,39,39,140,140,39,39,39,39,39,140,140,39, + 39,39,114,39,39,114,39,207,39,207,39,39,39,207,39,39, + 39,207,207,39,207,39,169,169,169,169,169,169,169,169,169,169, + 169,169,169,39,169,169,169,39,169,169,169,169,169,169,169,169, + 39,169,39,188,39,39,39,169,39,39,169,39,169,39,169,39, + 169,39,169,39,39,39,39,39,39,39,169,39,39,39,39,39, + 39,39,39,39,39,39,114,207,39,39,39,207,39,207,39,39, + 39,39,39,39,39,39,39,39,127,39,39,127,127,89,143,207, + 127,143,207,236,143,236,143,207,207,236,236,207,143,236,184,224, + 139,187,150,49,187,187,187,42,233,110,195,90,90,195,195,90, + 90,90,90,195,60,154,91,12,42,233,110,195,90,90,195,195, + 90,90,90,90,195,60,154,12,12,42,233,110,195,90,90,195, + 195,90,90,90,90,90,60,154,12,12,42,233,110,195,90,90, + 195,195,90,90,90,90,195,60,154,12,12,42,233,110,195,90, + 90,195,195,90,90,90,90,195,60,154,12,12,42,233,110,195, + 90,90,195,195,90,90,90,90,195,60,154,26,12,42,233,110, + 195,90,90,195,195,90,90,90,90,195,60,154,12,12,42,233, + 110,195,90,90,195,195,90,90,90,90,90,60,154,12,12,42, + 233,110,195,90,90,195,195,90,90,90,90,90,60,154,12,12, + 42,233,110,195,90,90,195,195,90,90,90,90,195,60,154,26, + 12,26,233,110,195,90,90,195,195,90,90,90,90,90,60,154, + 12,12,42,233,110,195,90,90,195,195,90,90,90,90,195,60, + 154,26,12,42,233,110,195,90,90,195,195,90,90,90,90,195, + 60,154,12,12,42,233,110,195,90,90,195,195,90,90,90,90, + 90,60,154,12,8,42,233,110,195,90,90,195,195,90,90,90, + 90,195,60,154,12,12,42,233,110,195,90,90,195,195,90,90, + 90,90,195,60,154,26,12,42,233,110,195,90,90,195,195,90, + 90,90,90,90,60,154,12,12,42,233,110,195,90,90,195,195, + 90,90,90,90,90,60,154,12,12,42,12,67,8,67,12,244, + 36,105,36,105,105,105,105,105,36,105,105,105,208,36,208,36, + 208,105,208,105,105,105,208,105,105,208,105,208,105,208,105,208, + 208,208,208,105,105,208,105,105,105,208,208,105,105,208,208,208, + 208,208,208,208,208,208,208,208,208,208,208,208,63,105,105,208, + 169,188,188,169,188,169,169,169,169,169,169,169,169,169,169,169, + 169,169,169,169,169,100,169,188,169,169,169,169,169,169,169,140, + 140,169,169,169,39,169,169,39,39,169,39,39,39,39,169,140, + 39,169,39,169,140,140,39,39,140,39,39,140,39,39,39,140, + 39,39,39,39,140,39,39,39,39,39,39,39,114,39,39,39, + 39,39,39,207,39,169,39,39,169,169,169,169,169,169,169,169, + 169,169,169,169,169,169,169,169,169,169,169,169,39,39,39,39, + 169,188,188,39,169,39,169,39,169,169,169,169,39,127,39,169, + 39,169,39,39,39,39,39,39,39,169,39,39,39,127,140,39, + 39,39,39,39,39,39,39,39,39,39,39,39,114,39,39,39, + 39,39,39,39,39,127,114,89,127,39,207,89,89,207,207,89, + 89,207,89,143,207,207,236,127,236,127,207,207,207,153,153,182, + 8,187,187,67,132,8,187,122,168,128,23,23,23,23,23,19, + 65,65,19,19,195,178,17,243,122,168,128,23,23,23,23,23, + 19,65,65,65,19,195,178,12,109,122,168,128,23,23,23,23, + 23,19,65,65,19,23,90,178,12,109,122,168,128,23,19,23, + 23,23,19,65,65,19,19,195,178,12,109,122,168,128,23,23, + 23,23,23,19,65,65,19,19,195,178,12,109,122,168,128,23, + 23,23,23,23,19,65,65,19,19,90,178,12,109,122,168,128, + 23,23,23,23,23,19,65,65,65,19,195,178,12,109,122,168, + 128,23,23,23,23,23,19,65,65,19,23,90,178,12,109,122, + 168,128,23,23,23,23,23,19,65,65,65,23,195,178,12,109, + 122,168,128,23,23,23,23,23,19,65,65,19,19,90,178,12, + 109,0,168,128,23,23,23,23,23,19,65,65,19,23,90,178, + 17,109,122,168,128,23,19,23,23,23,19,65,65,19,19,195, + 178,12,109,122,168,128,23,19,23,23,23,19,65,65,19,19, + 90,178,12,109,122,168,128,23,23,23,23,23,19,65,65,19, + 23,90,178,12,187,122,168,128,23,23,23,23,23,19,65,65, + 19,19,195,178,12,109,122,168,128,23,23,23,23,23,19,65, + 65,19,19,90,178,12,109,122,168,128,23,23,23,23,23,19, + 65,65,19,23,90,178,12,109,122,168,128,23,23,23,23,23, + 19,65,65,19,23,90,178,12,109,219,12,8,67,8,8,244, + 36,105,36,105,105,36,105,105,105,105,105,105,105,105,105,105, + 105,105,105,208,105,208,105,208,105,208,105,208,105,208,36,208, + 105,105,208,208,208,105,208,208,208,105,208,208,208,208,105,105, + 208,105,208,105,105,105,105,208,105,105,105,105,208,208,208,208, + 188,169,188,188,188,39,169,169,169,169,140,169,169,39,169,169, + 188,39,169,169,39,169,39,188,188,39,39,140,39,39,169,169, + 140,39,39,169,39,39,169,169,39,169,39,39,39,39,188,169, + 140,169,39,39,39,169,169,39,39,140,39,39,140,169,39,39, + 140,140,39,39,39,207,39,207,207,114,39,207,39,39,39,207, + 39,39,39,39,39,169,169,169,39,39,169,169,169,100,169,169, + 169,169,169,169,169,169,169,39,39,39,169,169,169,169,169,188, + 169,169,188,188,169,39,169,39,39,39,127,169,169,169,39,39, + 39,39,169,39,39,39,39,39,39,39,169,39,39,127,39,39, + 39,39,39,39,39,39,39,39,39,39,39,127,39,39,39,39, + 39,39,39,39,39,127,39,39,39,127,39,127,127,207,143,207, + 143,207,127,89,207,127,207,127,89,143,127,236,207,236,153,224, + 243,26,42,182,111,12,187,122,233,204,19,65,65,19,65,65, + 118,65,19,65,90,178,12,243,122,233,204,19,65,65,65,65, + 65,118,65,19,19,60,178,17,243,122,233,204,19,65,65,65, + 65,65,118,65,19,19,90,84,12,243,122,233,204,19,19,65, + 65,65,65,118,65,19,65,90,84,17,243,122,233,204,19,65, + 65,65,65,65,118,65,19,65,60,178,17,243,122,233,204,19, + 65,65,65,65,65,118,65,19,65,195,84,12,243,122,233,204, + 19,65,65,65,65,65,118,65,19,65,90,84,17,243,122,233, + 204,19,65,65,65,65,65,118,65,19,19,90,84,12,243,122, + 233,204,19,65,65,65,65,65,118,65,19,65,195,178,17,243, + 122,233,204,19,65,65,65,65,65,118,65,19,19,90,84,12, + 243,122,233,204,65,65,19,65,65,65,118,65,19,19,195,178, + 12,243,122,233,204,19,65,19,65,65,65,118,65,19,65,60, + 84,17,8,122,233,204,19,19,65,65,65,65,118,65,19,19, + 90,84,12,243,122,233,204,19,65,65,65,65,65,118,65,19, + 19,195,178,150,243,122,233,204,19,65,65,65,65,65,118,65, + 19,65,60,178,17,243,122,233,204,65,65,19,65,65,65,118, + 65,19,19,90,84,12,243,122,233,204,19,65,65,65,65,65, + 118,65,19,19,60,24,12,243,122,233,204,19,65,65,65,65, + 65,118,65,19,19,60,24,150,243,219,150,141,67,150,12,244, + 36,36,36,36,36,105,105,105,105,105,105,105,208,105,105,208, + 105,105,105,105,105,105,105,105,105,105,105,105,105,208,105,208, + 105,208,105,208,208,105,105,208,208,105,105,105,105,208,208,105, + 208,105,208,208,208,208,208,208,208,208,208,208,208,63,105,208, + 188,188,188,188,39,169,169,188,169,39,169,169,140,140,169,169, + 169,169,169,169,169,169,169,39,188,188,39,188,169,140,140,39, + 39,140,140,169,169,169,39,188,169,188,169,188,169,188,39,39, + 188,39,140,169,169,39,39,169,169,39,39,39,39,39,140,39, + 39,39,39,39,39,39,39,39,39,207,39,39,207,39,207,39, + 207,207,207,207,207,39,39,39,169,169,169,169,169,39,169,100, + 169,169,169,169,169,169,169,169,169,169,39,169,188,188,188,169, + 39,39,169,39,127,188,39,127,39,169,169,39,39,39,169,169, + 39,169,39,39,127,39,39,39,39,169,39,169,169,39,39,39, + 39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39, + 39,39,127,39,114,207,114,89,127,207,89,89,89,127,207,127, + 207,127,89,143,207,127,127,207,127,236,89,143,207,153,184,224, + 150,187,42,8,132,243,17,0,31,170,65,118,118,51,118,118, + 118,118,118,65,128,178,219,211,122,31,204,118,118,118,118,118, + 118,118,118,118,19,128,178,26,211,0,31,170,118,118,118,118, + 118,118,118,118,118,65,128,84,17,211,122,31,204,118,118,118, + 118,118,118,118,118,118,65,128,84,17,211,122,31,204,118,118, + 118,118,118,118,118,118,118,19,128,84,17,211,122,31,204,118, + 118,118,118,118,118,118,118,65,65,128,84,17,211,0,31,170, + 118,118,118,118,118,118,118,118,118,65,128,84,17,211,0,31, + 170,118,118,118,118,118,118,118,118,118,65,128,84,17,211,122, + 31,204,118,118,118,118,118,118,118,118,65,65,128,84,17,211, + 0,31,170,118,118,118,118,118,118,118,118,118,65,128,84,17, + 211,122,31,204,118,118,118,118,118,118,118,118,118,65,128,84, + 219,211,122,31,204,118,118,118,118,118,118,118,118,118,65,128, + 178,17,211,122,31,204,118,118,118,118,118,118,118,118,118,65, + 128,84,17,211,122,31,204,118,118,118,118,118,118,118,118,118, + 65,128,84,26,211,122,31,204,118,118,118,118,118,118,118,118, + 118,19,128,84,17,211,122,31,204,118,118,118,118,118,118,118, + 118,118,65,128,84,17,211,122,31,204,118,118,118,118,118,118, + 118,118,65,65,128,178,17,211,0,31,170,118,118,118,118,118, + 118,118,118,118,65,128,178,26,141,219,12,8,67,8,12,144, + 36,36,105,105,36,105,36,105,36,208,105,36,105,105,105,105, + 105,208,105,105,105,208,105,105,208,105,208,105,105,105,36,208, + 105,208,105,105,105,105,208,105,105,208,208,208,208,105,208,208, + 105,208,105,208,105,208,105,105,105,208,208,105,105,105,208,63, + 188,188,188,169,188,188,39,39,169,39,140,39,169,140,39,140, + 140,169,140,169,169,188,169,188,39,169,169,169,169,169,74,169, + 169,169,140,140,169,169,169,188,169,188,169,39,39,39,39,39, + 140,169,39,39,39,140,39,39,140,39,140,39,39,188,140,140, + 39,140,39,39,39,207,207,207,39,39,39,39,39,39,207,39, + 188,188,188,188,39,140,140,169,140,39,169,39,169,169,39,100, + 169,169,169,169,169,169,169,188,169,169,188,169,169,169,188,169, + 169,39,188,169,188,188,169,169,39,39,188,188,127,188,127,169, + 39,39,169,39,127,39,127,39,39,39,39,39,39,140,39,39, + 39,39,39,39,39,39,39,39,127,39,39,39,89,39,39,39, + 39,89,114,127,39,39,39,39,39,207,127,207,89,127,89,236, + 89,127,236,127,89,127,207,127,127,143,127,89,236,236,184,59, + 12,187,183,211,150,150,187,122,249,53,51,51,118,52,52,51, + 51,51,118,118,128,84,17,243,122,123,53,118,51,51,52,51, + 107,51,51,118,118,128,84,12,8,122,249,53,118,51,51,52, + 51,51,51,107,51,118,128,84,26,8,122,123,53,118,51,51, + 52,76,51,107,51,51,118,128,84,26,8,122,123,53,118,51, + 51,52,51,107,51,107,51,118,128,84,26,8,122,123,53,118, + 51,51,52,51,76,51,52,51,118,128,178,12,8,122,249,53, + 118,51,51,52,51,107,51,51,118,118,128,84,12,8,122,249, + 53,118,51,51,52,51,51,51,107,51,118,128,84,26,8,122, + 123,53,118,51,51,52,51,107,51,52,107,118,128,84,12,8, + 122,249,53,118,51,51,52,51,51,107,51,118,118,128,84,12, + 8,122,123,53,118,51,51,52,76,51,51,51,51,118,128,84, + 26,8,122,123,53,118,51,51,52,76,107,51,107,118,118,128, + 84,17,243,122,123,53,118,51,51,52,76,51,51,51,118,118, + 128,84,26,8,122,123,53,118,51,51,52,51,51,51,51,51, + 118,128,178,12,243,122,123,53,118,51,51,52,51,107,51,107, + 51,118,128,84,26,8,122,123,53,118,51,51,52,76,51,51, + 107,51,118,128,84,17,8,122,123,53,118,51,51,52,51,76, + 51,52,118,118,128,84,17,8,122,249,53,118,51,51,52,51, + 107,51,51,118,118,128,178,26,8,219,150,8,141,243,12,244, + 36,36,36,36,105,105,105,105,105,36,105,105,105,105,105,105, + 105,105,105,105,105,105,105,105,105,105,208,105,105,208,105,105, + 208,105,105,208,105,208,105,105,208,105,105,105,208,105,105,208, + 208,208,105,208,105,208,208,208,105,105,208,208,208,208,105,208, + 188,188,188,188,39,39,169,169,39,169,39,169,140,169,140,169, + 169,169,39,140,140,169,188,39,188,188,39,169,169,140,169,140, + 140,140,169,169,39,169,169,169,188,169,39,169,188,169,169,169, + 169,39,140,140,140,39,140,140,169,140,39,140,39,39,39,39, + 140,39,114,39,39,39,39,39,207,39,39,39,39,207,39,207, + 207,207,207,39,188,39,188,39,188,140,39,140,169,39,169,39, + 169,169,169,169,188,169,169,169,188,169,169,88,169,169,169,188, + 188,88,169,39,188,188,188,188,127,169,39,39,39,39,169,39, + 127,39,127,169,169,127,39,127,39,39,39,39,140,127,39,39, + 39,39,39,39,39,39,127,114,39,39,39,39,39,89,39,39, + 39,39,127,39,39,39,39,39,127,39,127,39,207,127,207,127, + 127,89,127,89,127,89,89,89,89,89,89,143,207,58,153,59, + 187,183,42,141,111,243,187,0,123,85,107,51,76,76,76,232, + 52,52,52,107,204,178,26,211,162,123,53,76,107,76,76,232, + 76,76,52,52,107,204,178,26,8,122,123,53,107,51,76,76, + 232,232,52,52,51,107,204,178,17,211,122,123,53,52,51,76, + 76,76,232,51,52,107,107,204,178,17,211,78,123,53,76,107, + 76,76,232,232,76,52,107,107,204,178,17,8,162,123,53,76, + 107,76,76,232,76,52,52,51,9,204,84,26,243,122,123,53, + 107,107,76,76,232,76,52,52,52,107,204,84,26,8,122,123, + 53,107,51,76,76,232,232,52,52,51,107,204,178,17,211,78, + 123,53,76,107,76,76,232,232,52,52,51,9,204,84,26,243, + 0,123,53,107,107,76,76,232,232,52,52,52,107,204,178,26, + 243,122,123,53,52,76,76,51,76,232,52,9,51,107,204,178, + 17,211,122,123,53,52,76,51,76,76,76,76,52,51,107,204, + 178,26,8,122,123,53,52,51,76,76,76,232,52,52,9,107, + 204,178,17,211,78,123,53,52,51,76,76,232,232,52,9,51, + 51,204,84,26,211,78,123,53,76,107,76,76,232,232,76,52, + 107,107,204,178,17,8,122,123,53,52,51,76,76,52,232,52, + 52,51,107,204,178,26,8,162,123,53,52,51,76,76,232,76, + 52,52,52,9,204,84,26,243,0,123,53,107,107,76,76,232, + 232,52,52,9,107,204,84,12,8,17,12,8,8,150,141,244, + 36,105,36,36,36,36,36,105,105,105,105,105,105,105,36,208, + 105,105,105,105,105,105,105,105,105,36,208,105,105,105,105,36, + 208,105,105,105,208,105,105,105,208,105,105,208,105,208,105,105, + 105,105,208,105,208,105,208,105,208,208,105,208,105,105,208,208, + 188,39,188,188,188,188,188,169,39,169,140,169,140,169,39,39, + 39,169,169,39,140,169,169,169,169,169,39,169,169,39,140,39, + 169,140,140,169,140,39,169,169,188,169,188,169,188,39,169,39, + 140,169,39,140,140,39,140,39,140,140,169,140,140,39,140,39, + 39,140,39,39,114,39,39,39,39,39,39,89,39,207,39,39, + 39,39,207,207,39,140,39,39,188,140,188,39,140,169,169,169, + 169,39,39,169,169,169,169,169,188,169,188,188,188,188,169,169, + 188,188,188,169,169,169,169,169,188,169,169,188,39,39,169,39, + 39,39,39,39,169,169,169,169,169,39,39,39,39,39,39,39, + 39,39,39,39,39,39,39,39,39,39,39,39,114,39,39,39, + 39,39,39,39,127,39,39,39,89,114,127,89,89,39,89,89, + 127,89,127,89,127,127,127,127,143,127,89,236,143,236,153,99, + 187,26,42,243,111,150,187,122,249,85,52,76,76,76,232,232, + 232,51,52,9,204,168,12,8,122,123,53,76,76,76,76,232, + 232,232,51,52,9,204,168,12,243,122,123,85,76,76,76,76, + 232,232,76,52,52,9,204,84,17,243,122,123,53,76,76,76, + 76,232,148,76,51,52,52,204,84,17,243,122,123,53,76,76, + 76,76,232,232,76,76,51,9,204,84,12,243,122,123,53,76, + 76,76,76,232,232,76,52,51,52,204,154,219,243,122,123,85, + 76,76,76,76,232,232,76,51,52,52,204,154,219,243,122,123, + 85,76,76,76,76,232,232,76,52,51,9,204,84,17,243,122, + 123,53,76,76,76,76,232,232,76,76,51,52,204,154,17,8, + 122,123,85,76,76,76,76,232,232,76,51,52,52,204,168,12, + 243,122,123,53,76,76,232,76,232,232,232,76,52,52,204,168, + 17,8,122,123,53,76,232,76,76,232,232,232,52,52,9,204, + 168,12,8,122,123,53,76,76,76,76,232,232,76,76,51,52, + 204,84,17,243,122,123,53,76,76,76,76,232,232,232,76,52, + 9,204,154,219,243,122,123,53,76,76,76,76,232,232,76,76, + 51,9,204,84,17,243,122,123,53,232,107,76,76,232,232,76, + 76,52,9,204,154,132,243,122,123,53,76,76,76,76,232,232, + 76,51,51,52,204,154,17,8,122,123,85,76,76,76,76,232, + 232,76,76,52,52,204,84,132,243,219,12,8,8,12,243,244, + 36,36,36,105,105,105,105,36,105,105,105,105,105,105,105,105, + 105,105,105,105,105,208,105,105,208,105,105,105,105,105,105,105, + 105,105,105,105,208,105,208,105,105,208,105,105,105,105,105,208, + 208,105,208,208,208,105,208,208,105,208,105,208,208,105,105,208, + 188,169,188,188,169,39,169,169,169,169,39,39,169,140,140,140, + 140,140,39,169,169,140,188,39,39,39,169,39,39,140,169,140, + 140,169,140,140,39,140,140,140,169,39,39,39,169,140,39,140, + 140,140,140,169,114,140,140,140,140,74,140,140,140,140,39,140, + 140,39,140,140,169,39,39,39,39,39,39,114,207,39,39,39, + 39,188,39,39,39,39,169,39,39,39,140,169,39,39,169,140, + 169,140,169,169,169,169,169,169,169,188,169,169,169,188,188,188, + 188,169,169,188,127,188,188,188,188,127,39,169,169,39,127,39, + 39,39,39,39,39,39,39,39,39,140,39,39,39,39,39,114, + 127,114,127,114,127,114,127,114,39,39,39,39,127,39,39,39, + 39,127,114,39,39,89,39,39,39,39,39,39,39,89,39,127, + 89,127,89,207,89,89,89,89,127,89,127,207,207,236,58,59, + 17,187,42,243,187,150,150,122,167,194,232,76,148,148,232,148, + 232,232,52,52,204,154,26,243,42,167,194,76,76,148,232,232, + 148,232,232,52,232,204,168,17,243,122,167,194,232,76,232,148, + 232,148,232,232,52,52,204,168,17,109,42,167,85,232,76,232, + 148,232,148,148,148,52,52,204,168,17,109,42,167,194,76,76, + 148,232,232,148,232,232,52,232,204,168,17,109,42,167,85,76, + 76,232,148,232,148,148,232,52,52,204,168,17,243,42,167,194, + 76,76,232,148,232,148,148,148,52,52,204,168,17,243,122,167, + 194,76,76,232,148,232,148,232,232,52,232,204,168,17,109,42, + 167,194,76,76,148,232,232,148,232,232,52,52,204,168,17,109, + 122,167,194,76,76,232,148,232,148,232,148,52,52,204,154,26, + 109,42,167,85,76,76,232,148,232,148,232,232,52,52,204,154, + 26,109,42,167,85,76,76,232,148,232,148,232,76,52,232,204, + 154,26,109,42,167,85,232,76,232,148,232,148,232,232,52,232, + 204,168,26,109,42,167,85,76,76,232,148,232,148,232,232,52, + 52,204,168,26,109,42,167,194,76,76,148,232,232,148,232,232, + 52,232,204,168,12,109,42,167,85,76,232,232,148,232,148,232, + 232,52,52,204,168,26,109,42,167,85,76,76,232,148,232,148, + 148,148,52,52,204,168,17,109,122,167,194,76,76,148,232,232, + 148,232,232,52,52,204,168,26,109,12,12,8,141,150,243,144, + 36,36,36,36,36,105,105,105,36,105,36,105,105,105,36,208, + 105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105, + 208,105,105,36,105,105,105,105,36,105,105,208,105,208,105,105, + 208,105,105,105,208,105,208,105,208,105,208,105,105,208,208,105, + 188,188,39,188,169,39,39,169,169,169,140,39,169,169,169,169, + 140,140,140,39,39,169,169,169,169,39,39,169,169,140,169,140, + 140,140,140,140,140,169,169,140,140,140,140,39,39,140,140,140, + 140,140,140,140,140,140,140,74,140,140,140,140,140,140,39,114, + 140,140,39,39,114,140,39,39,114,39,39,39,39,39,39,39, + 207,39,39,39,39,39,140,39,39,188,39,140,169,39,39,39, + 169,169,39,39,188,169,169,169,169,188,188,188,169,169,169,169, + 188,188,188,188,188,188,188,39,39,188,39,39,39,39,169,169, + 39,39,39,207,39,39,39,39,127,140,39,39,39,39,127,39, + 127,39,127,39,39,39,39,39,39,39,39,39,39,39,39,39, + 114,207,39,39,39,39,114,127,39,89,89,39,39,89,114,127, + 39,127,39,127,39,127,39,89,39,127,39,39,207,236,184,224, + 12,183,78,8,111,150,187,122,220,32,232,232,148,148,148,148, + 148,148,232,232,231,222,183,243,122,220,32,232,232,148,148,148, + 148,148,148,76,232,231,168,17,243,122,237,32,232,148,148,148, + 148,148,232,148,232,232,231,168,12,243,122,237,32,232,148,148, + 148,148,148,148,232,232,232,231,168,17,243,122,220,32,232,232, + 148,148,148,147,232,148,76,232,231,168,17,243,122,220,32,232, + 148,148,148,148,148,232,147,232,232,231,168,17,243,122,237,32, + 232,148,148,148,148,148,148,232,232,232,231,168,17,243,122,237, + 32,232,148,148,148,148,148,232,147,76,232,231,168,17,243,122, + 220,32,232,232,148,148,148,147,232,147,232,232,231,168,219,8, + 122,237,32,232,148,148,148,148,147,148,148,52,232,231,222,26, + 243,122,237,32,232,148,148,148,148,148,232,148,232,232,231,222, + 219,243,122,237,32,232,148,148,148,148,148,148,148,76,232,231, + 222,183,243,122,237,32,232,148,148,148,148,147,232,148,52,232, + 231,222,17,243,122,237,32,232,148,148,148,148,148,148,148,232, + 232,231,222,17,243,122,220,32,232,232,148,148,148,147,232,148, + 76,232,231,168,17,243,122,220,32,76,148,148,148,148,147,232, + 148,232,232,231,222,26,243,122,237,32,232,148,148,148,148,148, + 148,27,232,232,231,168,219,8,122,237,32,232,232,148,148,148, + 147,232,148,232,232,231,222,17,243,17,243,12,8,150,12,244, + 36,36,36,105,36,36,36,105,36,105,105,105,105,105,105,105, + 105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105, + 105,105,105,105,36,105,105,105,105,105,36,105,105,105,105,105, + 105,105,208,105,208,105,105,208,105,208,208,208,105,105,208,208, + 207,39,188,39,188,169,169,169,39,140,169,140,140,140,140,140, + 169,169,169,140,140,140,39,188,39,39,140,39,39,169,140,140, + 74,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, + 140,140,140,74,140,140,140,39,140,140,140,140,140,140,140,140, + 169,39,140,140,169,39,114,39,39,39,140,39,39,114,207,114, + 39,39,39,39,39,39,39,39,39,39,39,39,39,169,169,169, + 39,39,169,169,169,169,169,39,169,140,169,169,188,188,188,188, + 39,188,39,39,39,39,39,188,188,169,39,39,140,39,39,39, + 39,39,39,39,207,39,39,39,39,127,39,140,39,39,39,39, + 39,39,39,39,39,39,140,39,39,39,39,114,39,39,39,39, + 39,39,114,39,39,39,39,89,114,127,114,89,39,127,89,89, + 89,89,39,89,89,89,127,39,89,89,89,39,207,89,58,59, + 187,26,162,8,187,17,187,0,138,117,193,157,157,157,189,189, + 157,193,193,32,70,31,26,109,122,138,117,193,157,157,157,189, + 157,189,193,193,32,70,228,26,211,122,138,117,193,157,157,157, + 189,189,157,193,193,32,70,228,26,109,122,138,117,193,193,157, + 157,189,189,157,193,193,32,70,228,26,109,122,138,117,193,157, + 157,157,189,189,157,193,193,32,70,228,219,109,0,138,117,193, + 157,157,157,189,189,157,157,193,32,70,228,26,109,42,138,117, + 193,193,157,157,189,189,157,193,193,32,70,228,26,109,42,138, + 117,193,193,157,157,189,189,157,193,193,32,70,228,26,109,122, + 138,117,193,193,157,157,189,189,157,157,193,32,70,228,219,109, + 0,21,117,193,193,157,157,189,189,157,193,193,32,70,31,219, + 211,122,138,117,193,193,157,157,189,189,157,193,193,32,70,31, + 26,211,122,138,117,193,193,157,157,189,189,157,193,193,32,70, + 31,26,211,122,138,117,193,193,157,157,189,189,157,193,193,32, + 70,31,26,109,42,138,117,193,193,157,157,189,189,157,193,193, + 32,70,31,26,109,122,138,117,193,157,157,157,189,189,157,193, + 193,32,70,228,26,109,122,138,117,193,157,157,157,189,189,157, + 193,193,32,70,31,219,109,42,138,117,193,193,157,157,189,189, + 157,157,193,32,70,228,219,109,42,138,117,193,193,157,157,189, + 189,157,193,193,32,70,31,26,211,12,12,8,141,12,141,144, + 36,36,36,36,36,105,36,105,36,105,36,105,105,105,105,105, + 105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105, + 105,105,105,105,36,105,36,105,105,36,105,36,105,105,105,105, + 105,36,208,105,105,105,105,105,208,105,105,105,208,63,208,105, + 188,169,188,188,188,39,39,169,39,140,140,169,140,140,169,140, + 140,140,140,169,140,140,140,140,140,39,140,140,140,140,140,140, + 74,74,74,140,140,140,74,74,74,140,140,140,140,140,140,140, + 71,144,140,140,140,140,74,140,140,140,140,140,140,140,140,140, + 140,39,39,39,140,169,39,39,39,39,39,39,207,39,39,140, + 39,114,39,39,39,39,140,39,207,39,39,39,39,39,140,140, + 169,39,39,39,39,39,169,39,39,39,39,39,39,169,39,39, + 39,39,188,39,127,169,39,39,39,39,39,127,39,39,39,39, + 39,39,39,127,114,39,39,39,39,39,39,39,39,114,169,39, + 39,39,39,39,39,127,39,39,39,39,127,39,39,39,39,39, + 39,39,127,39,39,39,127,39,127,39,39,39,39,39,39,39, + 114,89,39,127,114,127,39,39,127,114,89,127,127,207,119,224, + 12,26,78,243,111,17,187,0,226,87,21,72,156,43,13,13, + 30,242,18,18,18,59,26,8,122,226,87,21,87,156,30,13, + 13,30,72,18,18,18,59,26,8,122,226,87,21,87,156,30, + 86,13,30,242,21,18,18,59,26,8,122,226,87,18,21,156, + 30,86,13,30,242,21,18,18,59,26,12,122,226,87,21,87, + 156,30,13,13,156,242,21,18,18,200,26,8,0,226,87,21, + 87,156,30,86,13,30,242,18,18,18,59,26,12,122,226,87, + 21,21,156,30,86,13,30,242,18,18,18,59,26,12,122,226, + 87,18,72,242,30,86,13,30,242,21,18,18,59,26,12,122, + 92,87,21,21,156,30,13,13,30,242,18,18,18,75,12,12, + 122,73,87,21,21,156,30,13,13,30,242,18,33,18,59,26, + 8,0,226,87,18,72,242,30,86,13,30,242,18,18,18,59, + 26,8,122,226,87,18,72,156,30,86,13,30,242,18,18,18, + 59,26,8,122,226,87,18,72,242,30,13,13,30,242,21,18, + 18,59,26,8,0,226,87,18,21,156,30,86,13,30,242,18, + 18,18,59,26,8,122,226,87,21,87,156,30,13,13,156,242, + 21,18,18,59,26,12,122,226,87,21,72,156,30,13,13,30, + 242,18,33,18,59,26,8,0,226,87,18,21,156,30,86,13, + 30,242,21,18,18,75,12,12,122,226,87,21,21,156,43,13, + 13,30,242,21,18,18,59,26,243,17,12,8,141,12,243,244, + 244,105,36,36,105,36,36,105,105,105,36,36,105,105,105,105, + 105,105,105,105,105,105,105,105,105,105,105,36,105,36,36,105, + 105,105,105,36,105,105,105,105,36,105,36,105,105,36,105,36, + 105,105,105,36,105,105,208,105,105,208,105,208,105,105,208,105, + 188,188,188,39,39,169,169,169,140,169,140,140,140,140,39,140, + 140,140,169,140,169,140,169,169,39,169,169,100,140,140,140,140, + 114,140,140,74,140,74,140,140,140,140,140,140,140,140,140,144, + 140,140,144,71,140,74,114,140,140,140,140,140,140,169,140,140, + 140,140,140,140,39,39,39,114,39,39,140,39,140,114,39,39, + 39,169,140,140,39,39,39,114,39,39,39,140,140,169,169,39, + 39,140,39,140,169,140,39,140,169,140,169,140,140,39,39,188, + 39,207,39,39,39,207,169,127,39,169,169,39,140,39,39,39, + 39,39,39,39,39,39,39,39,39,39,114,127,140,127,114,39, + 39,39,39,39,39,39,39,39,39,39,39,114,39,39,39,39, + 39,39,39,39,207,114,207,114,127,39,39,89,39,89,39,89, + 127,39,89,89,127,89,89,39,89,89,114,89,89,89,240,59, + 187,219,78,12,132,17,150,0,40,23,250,86,179,146,51,51, + 149,86,86,250,28,111,17,243,0,40,179,250,86,179,176,146, + 51,146,86,86,250,28,111,17,243,0,40,23,250,86,179,146, + 146,118,149,86,250,250,28,111,17,243,0,203,179,250,86,179, + 149,51,118,149,86,250,250,28,111,12,211,0,40,179,250,86, + 179,146,136,51,146,86,250,250,28,111,187,243,0,203,23,250, + 86,179,146,118,51,146,86,86,250,28,61,187,211,0,40,86, + 250,86,179,146,146,51,149,86,86,250,28,61,12,211,0,40, + 179,250,86,149,146,146,51,149,86,250,250,28,111,12,211,0, + 40,86,250,86,179,149,51,51,149,179,86,250,28,111,26,211, + 0,40,86,250,86,179,149,51,51,149,86,86,250,28,111,17, + 243,0,203,179,250,86,149,146,146,118,149,86,86,250,28,111, + 17,243,0,40,179,250,86,179,146,118,51,149,86,86,250,28, + 111,17,243,0,40,179,250,86,179,146,136,51,146,86,250,250, + 28,111,17,243,0,203,179,250,86,179,146,118,51,149,86,86, + 250,28,111,17,243,0,40,179,250,86,179,146,136,51,146,86, + 250,250,28,61,12,211,0,40,23,250,86,179,149,51,51,149, + 86,86,250,28,111,17,243,0,203,179,250,86,179,146,118,51, + 146,86,250,250,28,111,26,211,0,40,86,250,179,179,146,136, + 51,149,86,250,250,28,111,12,8,12,243,8,8,17,8,244, + 36,36,36,36,105,105,36,105,36,105,105,105,36,105,105,105, + 105,105,105,105,105,105,105,105,105,36,105,105,105,105,105,105, + 36,105,105,36,105,36,36,105,36,105,36,36,105,36,36,105, + 36,105,105,36,105,36,105,105,105,105,105,105,105,105,105,63, + 188,188,188,39,39,39,140,169,140,169,140,169,140,140,140,169, + 140,140,140,140,169,140,140,140,140,140,39,140,169,140,140,140, + 140,140,140,74,140,140,140,140,140,140,144,140,144,140,74,144, + 74,140,140,144,140,74,140,71,140,140,140,140,140,140,140,140, + 169,140,140,140,39,114,127,39,39,39,39,39,39,169,39,140, + 39,39,39,140,140,39,169,169,140,39,39,39,169,39,140,169, + 39,169,39,39,188,140,188,39,39,39,39,39,39,39,39,39, + 39,39,207,39,39,207,39,39,39,39,39,39,39,207,39,39, + 39,39,127,39,127,39,39,140,39,39,39,207,39,39,39,39, + 39,39,39,39,39,39,39,39,39,39,39,39,127,114,39,39, + 39,39,39,39,39,39,127,89,89,89,114,89,127,89,114,127, + 89,114,39,89,114,127,89,114,127,89,127,39,39,89,240,59, + 187,187,78,150,132,187,187,0,40,32,157,189,189,189,189,189, + 189,189,157,85,128,61,26,243,0,40,32,157,189,189,189,189, + 189,189,189,157,85,128,61,42,243,0,40,32,157,189,189,189, + 189,189,189,189,157,85,128,61,42,243,0,40,32,157,189,189, + 189,189,147,189,189,157,85,128,61,183,243,0,40,32,157,189, + 189,189,189,189,189,189,157,85,128,61,26,243,0,40,32,157, + 189,189,189,189,189,189,189,157,85,204,91,183,243,0,40,32, + 157,189,189,189,189,189,189,189,157,85,204,61,183,243,0,40, + 32,157,189,189,189,189,189,189,189,157,85,128,61,219,243,0, + 40,32,157,189,189,189,189,189,189,189,189,85,128,61,219,243, + 0,40,32,157,189,189,189,189,147,189,189,157,85,128,61,42, + 243,0,40,32,157,189,189,189,189,189,189,189,157,85,128,61, + 42,243,0,40,32,157,189,189,189,189,147,189,189,157,85,128, + 61,26,243,0,40,32,157,189,189,189,189,189,189,189,157,85, + 128,61,26,243,0,40,32,157,189,189,189,189,147,189,189,157, + 85,128,61,26,243,0,40,32,157,189,189,189,189,189,189,189, + 157,85,204,61,183,243,0,40,32,157,189,189,189,189,147,189, + 189,157,85,128,61,26,243,0,40,32,157,189,189,189,189,189, + 189,189,157,85,128,61,219,243,0,40,32,157,189,189,189,189, + 189,189,189,157,85,128,61,219,141,12,243,243,8,12,243,244, + 244,105,36,36,36,36,36,36,36,36,36,105,105,105,36,105, + 36,105,105,36,105,105,105,105,105,105,36,105,36,36,105,36, + 105,36,36,36,36,36,105,36,105,36,36,105,36,36,36,36, + 36,36,105,105,105,105,105,36,36,208,208,105,105,105,105,105, + 39,169,188,188,39,169,169,140,100,140,39,140,140,140,140,140, + 140,140,140,140,140,140,140,169,140,140,140,140,140,140,140,140, + 140,74,71,140,140,140,144,140,71,140,140,140,140,74,140,74, + 144,140,144,140,140,114,140,140,140,140,140,39,140,169,169,169, + 140,39,39,39,127,39,39,39,39,39,39,39,169,39,39,39, + 140,140,140,39,39,140,39,39,39,39,188,140,39,169,39,39, + 39,39,188,39,39,188,39,39,140,39,39,39,39,39,39,39, + 39,39,39,39,39,39,39,39,39,39,140,39,114,39,39,39, + 39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39, + 39,39,39,114,39,39,39,39,39,39,39,39,127,39,127,39, + 39,39,39,39,39,89,114,39,114,39,39,114,89,39,89,89, + 39,127,89,39,127,89,127,127,89,127,89,89,89,119,240,47, + 187,42,42,150,132,42,132,0,40,45,232,232,76,76,148,148, + 148,232,52,27,195,91,162,211,0,40,45,52,232,148,148,148, + 148,148,232,52,27,230,91,162,211,0,40,45,232,76,148,148, + 148,147,148,232,52,27,230,91,78,211,0,40,45,232,232,76, + 232,147,147,148,232,52,198,195,91,122,109,0,40,45,52,76, + 232,232,148,147,148,232,52,27,195,91,162,211,0,40,45,232, + 76,76,76,148,148,148,232,52,27,230,91,122,211,0,40,53, + 52,232,148,148,148,147,148,232,52,27,230,91,122,109,0,40, + 45,52,76,232,148,148,147,148,232,52,198,195,91,122,211,0, + 40,45,232,76,148,76,148,148,148,232,232,27,195,91,122,211, + 0,40,45,232,76,76,148,148,77,148,232,52,185,195,91,162, + 211,0,40,45,52,76,148,148,148,147,148,232,76,198,195,91, + 78,211,0,40,53,52,232,76,148,147,147,148,148,52,27,195, + 91,162,109,0,40,53,52,232,148,76,148,148,148,148,52,27, + 195,91,162,211,0,40,45,232,76,148,76,147,147,148,148,52, + 27,195,91,162,211,0,40,45,52,76,232,148,232,147,148,148, + 52,27,230,91,122,211,0,40,53,232,76,148,76,148,147,148, + 232,52,27,230,91,162,109,0,40,45,232,76,148,76,148,148, + 148,232,52,232,195,91,122,211,0,40,45,232,76,76,76,76, + 147,148,232,52,27,195,91,122,211,150,150,8,141,17,12,244, + 244,36,36,36,105,36,105,36,105,36,105,36,105,36,105,105, + 36,105,105,105,105,105,36,105,36,105,36,105,105,36,36,105, + 105,105,105,36,105,36,36,36,36,36,36,36,36,36,36,36, + 36,36,36,36,36,105,105,36,36,105,105,105,36,105,105,63, + 39,169,188,169,169,39,169,39,140,140,140,140,140,140,140,140, + 140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, + 114,140,74,71,140,140,140,144,74,71,114,140,114,140,144,74, + 74,140,74,144,140,140,144,140,140,140,140,169,140,140,169,39, + 169,169,169,39,39,39,39,127,127,207,207,39,39,39,39,188, + 188,39,140,39,39,39,39,39,39,39,188,39,39,140,140,140, + 39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39, + 39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39, + 39,39,39,127,39,39,39,39,39,39,39,39,39,39,39,39, + 39,114,127,39,39,39,39,39,39,39,39,39,39,39,39,39, + 39,39,39,39,39,127,39,127,39,89,89,39,89,114,39,89, + 89,114,127,89,114,89,89,114,89,114,89,127,89,119,119,47, + 12,42,42,141,187,42,187,0,212,170,9,232,232,148,148,147, + 148,76,232,198,230,26,26,243,0,212,170,9,52,232,232,147, + 147,148,76,27,198,230,26,26,8,0,212,170,52,52,232,232, + 147,148,147,76,27,198,230,91,42,243,0,40,170,9,76,232, + 148,148,147,147,76,232,198,230,26,26,243,0,212,170,52,232, + 232,232,148,147,147,76,232,198,230,26,26,243,0,212,170,52, + 232,148,148,147,147,147,232,27,185,230,26,26,211,0,212,170, + 52,52,232,232,148,148,148,76,27,185,230,26,26,243,0,40, + 170,52,232,232,232,148,148,147,76,232,198,230,26,26,211,0, + 40,170,52,76,148,232,147,147,147,76,27,198,230,26,26,243, + 0,40,170,52,232,232,148,148,147,147,76,232,198,230,26,26, + 243,0,40,231,52,52,232,232,147,148,147,76,232,185,230,26, + 26,243,0,40,170,52,76,232,148,148,148,148,76,232,198,230, + 26,26,8,0,40,231,52,52,232,232,148,147,148,76,232,198, + 230,26,26,243,0,40,170,52,52,232,148,148,147,148,76,232, + 198,230,26,26,243,0,212,170,52,76,232,148,148,147,148,232, + 27,185,230,26,26,243,0,212,231,52,76,148,148,147,147,147, + 76,27,185,230,26,26,8,0,40,170,52,52,232,148,147,147, + 147,232,27,198,230,26,26,211,0,212,170,52,232,148,148,148, + 148,148,76,232,198,230,26,26,8,12,12,8,8,12,243,36, + 244,105,36,36,36,36,36,36,36,36,105,36,105,36,105,36, + 105,36,36,36,105,36,105,105,36,105,36,36,36,105,36,105, + 36,105,36,36,36,105,36,36,36,36,36,36,36,36,244,36, + 244,36,36,36,36,36,36,36,36,105,36,36,105,105,105,105, + 188,39,169,39,39,169,169,169,140,169,140,140,140,140,140,140, + 140,140,140,140,140,140,140,140,140,140,74,74,140,140,140,140, + 140,140,140,144,140,74,144,140,140,144,74,140,74,140,140,140, + 140,71,140,140,144,140,140,140,140,140,140,140,169,169,140,169, + 39,39,39,39,39,39,39,39,39,39,39,39,188,169,188,39, + 169,188,39,169,39,39,39,188,188,39,207,140,140,39,39,39, + 39,39,39,188,39,39,39,39,39,39,39,39,39,39,39,39, + 114,39,39,39,127,39,39,39,39,39,39,39,39,39,39,39, + 39,39,207,39,127,39,39,39,39,39,39,39,39,39,39,39, + 39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39, + 39,89,39,39,39,39,39,89,39,39,114,89,127,89,89,39, + 39,89,89,127,89,127,127,89,127,89,114,89,39,119,108,59, + 187,219,78,243,166,219,187,0,40,98,165,45,53,194,194,194, + 194,98,45,165,230,91,122,187,0,40,98,165,45,53,194,194, + 53,32,45,53,165,230,91,78,187,0,40,98,45,45,53,194, + 194,194,194,45,53,165,230,91,122,187,0,212,98,165,45,53, + 194,194,194,194,45,53,231,230,91,122,187,0,40,98,165,45, + 53,194,194,194,194,45,45,165,230,91,122,187,0,40,98,165, + 45,53,53,194,194,194,45,45,165,230,91,122,187,0,203,98, + 165,45,53,194,194,194,194,45,45,165,230,91,122,187,0,212, + 98,165,45,45,194,194,194,194,45,53,231,230,91,0,12,0, + 212,98,165,45,53,194,194,194,194,45,45,165,230,91,78,187, + 0,212,98,165,45,53,194,194,194,194,45,53,165,230,91,122, + 187,0,212,98,45,45,53,194,194,194,194,45,53,165,230,91, + 162,187,0,212,98,165,45,194,53,194,32,194,45,45,165,230, + 91,122,187,0,212,98,165,53,45,194,194,194,194,98,45,165, + 230,91,162,187,0,212,98,165,45,194,194,194,194,194,98,53, + 165,230,91,122,187,0,40,98,45,45,45,53,194,194,194,45, + 45,165,230,91,122,187,0,40,98,165,45,53,194,194,194,194, + 45,53,110,230,91,122,187,0,212,98,165,45,194,53,194,194, + 194,45,45,165,230,91,0,12,0,40,98,165,45,45,194,194, + 194,32,45,45,165,230,91,162,187,150,12,243,8,17,141,244, + 36,244,36,36,105,36,36,105,36,105,36,36,36,105,36,105, + 36,105,105,105,36,36,36,36,36,105,105,36,36,36,36,105, + 36,36,36,36,36,36,36,36,36,36,244,36,36,36,36,36, + 36,244,36,36,244,36,244,36,36,105,105,36,36,105,105,36, + 188,39,169,169,169,39,169,169,140,39,39,140,169,140,140,140, + 140,140,140,140,140,140,140,140,140,39,114,74,140,140,140,140, + 140,140,140,74,114,74,140,144,140,140,71,140,71,140,140,140, + 140,140,74,74,74,140,140,140,140,140,39,39,114,169,140,169, + 39,39,39,39,127,39,207,39,39,127,39,39,39,169,39,39, + 39,188,207,39,188,188,39,39,188,39,207,39,140,39,169,140, + 39,114,39,39,39,39,39,39,114,39,39,39,39,39,39,127, + 207,39,39,39,39,39,39,39,39,39,39,39,127,39,39,127, + 39,39,39,39,39,39,127,39,207,39,39,39,39,39,39,39, + 39,39,39,39,39,39,39,114,39,39,39,39,39,39,39,39, + 39,127,89,39,39,89,114,89,89,127,39,89,114,39,89,89, + 39,39,89,114,89,89,114,89,127,89,89,89,89,119,159,47, + 26,26,78,8,111,132,187,0,162,251,123,123,167,55,79,220, + 79,167,123,251,206,187,26,211,0,162,251,123,123,123,79,79, + 79,79,167,167,228,168,187,42,8,162,162,31,251,123,167,79, + 79,79,79,167,167,251,168,17,42,211,0,162,251,123,123,167, + 55,79,79,79,167,123,228,206,12,42,211,0,162,251,251,123, + 167,79,79,79,79,167,123,123,168,26,26,8,0,162,251,123, + 123,167,55,79,79,79,167,123,228,73,187,42,8,0,162,251, + 123,123,167,79,79,220,79,167,123,228,168,26,26,211,0,162, + 251,123,123,167,79,79,79,79,167,123,228,206,12,42,211,0, + 162,251,251,123,123,79,79,79,79,167,123,251,206,187,26,8, + 0,162,251,251,123,103,79,79,79,79,167,123,251,206,187,26, + 211,0,162,31,251,123,167,79,79,79,79,167,123,228,206,12, + 42,211,0,162,31,251,123,167,79,79,79,79,167,123,228,206, + 12,42,211,0,162,251,123,123,103,167,79,220,79,167,123,251, + 206,12,26,211,0,162,251,123,123,123,79,79,220,79,167,123, + 251,206,187,26,211,0,162,251,251,123,79,79,79,220,79,167, + 123,228,73,187,42,211,0,162,251,251,123,123,79,79,79,79, + 167,55,123,73,12,42,211,0,162,251,123,123,167,79,79,79, + 79,167,123,251,206,187,26,8,162,162,251,123,123,167,79,79, + 79,167,167,123,123,168,26,26,8,150,12,243,8,26,141,244, + 36,36,36,36,36,36,105,36,36,36,36,36,105,36,36,105, + 36,36,36,36,105,105,105,36,105,36,36,36,105,36,36,36, + 105,105,36,105,36,36,36,36,36,36,36,244,36,244,36,244, + 36,36,244,36,244,36,244,244,244,36,36,36,105,36,36,105, + 169,169,188,39,39,169,39,140,169,140,140,74,140,74,140,140, + 140,140,74,140,140,140,140,114,140,140,74,140,140,140,140,140, + 74,140,74,140,74,114,140,140,140,140,144,140,144,140,74,144, + 140,140,140,114,140,140,140,140,140,140,140,140,169,39,39,39, + 39,39,39,39,39,207,39,207,207,39,127,188,188,39,188,39, + 39,39,39,39,39,39,188,188,207,188,39,39,39,140,39,39, + 39,39,39,39,39,39,39,39,169,114,39,39,39,39,39,39, + 39,39,39,89,39,127,39,39,39,39,39,39,39,39,39,39, + 39,39,114,39,39,39,39,39,39,39,39,39,39,39,39,127, + 39,39,39,39,39,39,207,39,39,39,39,39,39,39,39,39, + 39,39,39,89,39,39,39,39,114,89,127,39,89,89,114,127, + 89,89,89,89,89,127,89,89,89,89,89,39,89,89,108,99, + 187,183,122,8,17,17,150,0,0,0,0,0,0,0,0,0, + 0,0,0,0,219,17,42,243,0,0,0,0,0,0,0,162, + 0,0,0,0,0,26,17,219,187,0,0,0,0,0,0,0, + 162,0,0,0,0,0,26,17,42,243,0,0,0,0,0,0, + 0,162,0,0,0,0,0,219,17,42,243,0,0,162,0,0, + 0,0,0,0,0,0,0,0,26,150,26,187,0,0,0,0, + 0,0,0,0,0,0,0,0,0,219,17,42,109,0,0,0, + 0,0,0,0,0,0,0,0,0,0,26,132,42,243,0,0, + 0,0,0,0,0,0,0,0,0,0,0,219,17,26,12,0, + 0,0,0,0,0,0,0,0,0,0,162,0,219,17,26,187, + 0,0,0,0,0,0,0,0,0,0,0,162,0,219,17,42, + 243,0,0,0,0,0,0,0,0,0,0,0,0,0,219,17, + 42,243,0,0,0,0,0,0,0,0,0,0,0,0,0,219, + 17,219,243,0,0,0,0,0,0,0,0,0,0,0,162,0, + 219,17,42,243,0,0,0,0,0,0,0,0,0,0,0,162, + 0,219,17,42,243,0,0,0,0,0,0,0,0,0,0,0, + 0,0,219,187,26,12,0,0,0,0,0,0,0,0,0,0, + 0,0,0,219,187,219,243,0,0,0,0,0,0,0,0,0, + 0,0,162,0,219,17,26,187,0,0,0,0,0,0,0,162, + 0,0,0,0,0,26,150,219,187,187,150,8,141,17,243,244, + 244,36,36,36,36,36,36,36,36,105,36,36,36,36,36,36, + 36,36,105,36,36,36,36,36,36,36,36,36,36,36,36,36, + 36,36,36,36,36,36,36,36,36,244,36,244,36,36,244,36, + 244,36,244,36,36,244,36,36,244,36,36,36,36,36,36,36, + 188,169,169,39,39,140,39,140,169,140,140,74,39,140,140,140, + 140,140,140,144,140,140,140,140,140,114,140,140,74,140,140,114, + 140,114,140,140,140,140,140,140,140,140,140,140,74,140,74,140, + 140,140,140,140,140,140,140,140,140,140,169,140,140,169,39,114, + 39,127,39,39,89,207,207,39,127,39,39,188,188,169,188,39, + 39,39,207,39,39,207,39,39,207,207,39,39,188,39,39,39, + 39,39,39,39,140,39,140,39,39,39,39,39,39,39,39,39, + 127,39,39,127,39,39,39,39,39,39,39,39,39,39,39,39, + 39,127,207,39,39,39,39,39,39,39,39,39,39,39,39,39, + 39,39,39,39,39,127,207,39,39,127,39,127,39,39,127,89, + 39,127,39,127,89,39,89,127,39,89,89,114,127,89,89,39, + 89,127,114,127,89,89,127,89,127,89,89,127,89,127,240,59, + 26,26,162,211,150,187,187,42,26,26,26,26,42,42,26,17, + 219,219,219,26,17,132,42,17,42,26,26,26,26,42,42,26, + 17,219,219,219,219,219,17,219,12,42,26,26,26,26,26,42, + 26,17,219,219,219,219,219,132,42,17,42,26,26,26,26,42, + 42,26,17,219,219,219,26,17,132,42,17,42,26,26,26,26, + 42,42,26,17,219,219,219,219,219,132,183,187,42,26,26,26, + 26,42,42,26,17,219,219,219,219,17,132,42,17,42,26,26, + 26,26,26,42,26,17,219,219,219,219,17,132,42,17,42,26, + 26,26,26,42,42,26,17,219,219,219,26,17,132,219,17,42, + 26,26,26,26,42,42,219,17,219,219,219,26,17,132,183,187, + 42,26,26,26,26,42,42,26,17,219,219,219,26,17,132,42, + 17,42,26,26,26,26,26,78,26,17,219,219,219,26,17,132, + 42,17,42,17,26,26,26,42,42,26,17,219,219,219,26,219, + 219,42,187,42,26,26,219,26,42,183,26,219,219,219,219,26, + 17,132,42,17,42,26,26,26,26,26,42,26,219,219,219,219, + 26,17,132,42,17,42,26,26,26,26,42,42,26,219,219,219, + 219,219,17,132,219,17,42,26,26,26,26,42,42,26,219,219, + 219,219,219,17,219,42,187,42,26,26,26,26,26,42,26,17, + 219,219,219,26,17,132,183,12,42,26,26,26,26,42,42,26, + 17,219,219,219,219,26,17,219,12,17,12,150,8,12,141,244, + 36,36,244,105,36,36,36,36,36,36,36,105,36,105,105,36, + 105,36,105,36,36,105,36,36,36,36,36,36,36,36,36,36, + 36,36,36,36,36,36,36,244,36,244,36,36,244,36,244,244, + 36,244,244,36,244,36,244,244,244,36,244,36,36,36,36,36, + 188,39,39,169,140,39,169,169,140,140,140,140,140,140,140,74, + 140,140,140,140,140,144,140,144,140,74,144,140,144,140,140,74, + 74,140,140,140,140,140,140,140,140,140,74,140,140,140,140,140, + 74,140,74,140,74,140,140,114,140,140,39,39,39,39,39,140, + 39,89,39,207,39,207,127,188,207,207,188,188,188,188,188,188, + 39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39, + 39,114,39,39,39,140,39,39,39,39,39,39,39,207,39,39, + 39,207,39,207,207,207,127,39,39,127,39,39,39,39,39,39, + 39,114,39,39,207,39,39,39,39,39,39,114,39,39,39,39, + 39,39,89,39,39,39,39,39,39,39,39,39,127,39,39,207, + 39,207,39,127,39,89,39,89,89,114,39,89,89,39,127,89, + 39,89,89,89,89,127,89,114,89,114,89,119,39,119,108,59, + 187,42,122,243,187,132,132,26,243,12,150,219,219,17,12,243, + 150,150,12,12,187,219,42,187,26,243,12,150,17,219,17,17, + 243,150,150,150,17,12,219,26,187,26,243,12,150,17,219,17, + 12,243,150,150,150,17,187,219,42,187,26,243,12,150,219,219, + 17,17,243,150,150,12,17,187,219,26,187,26,243,12,150,219, + 219,17,17,243,150,150,12,17,187,17,26,12,26,243,12,150, + 219,219,17,17,243,150,150,12,12,187,219,42,12,26,243,12, + 150,17,219,17,12,8,150,150,12,12,187,219,42,187,26,243, + 12,150,17,219,17,17,243,150,150,12,17,187,219,26,187,26, + 243,12,150,219,219,17,17,243,12,150,12,12,17,17,26,12, + 26,243,12,150,17,219,17,17,243,150,150,12,12,17,219,42, + 187,26,243,12,150,17,219,12,17,243,150,150,12,17,187,17, + 42,187,26,150,12,150,219,219,17,12,243,150,150,12,12,187, + 17,42,12,26,243,12,17,17,219,17,12,8,150,150,12,12, + 187,219,42,187,26,243,12,150,17,219,17,12,8,150,150,12, + 12,17,219,42,187,26,243,12,150,219,219,17,12,243,243,150, + 12,17,17,219,42,12,26,243,12,150,17,219,17,12,8,150, + 150,150,12,17,17,42,12,26,243,12,150,17,219,17,17,243, + 12,150,12,12,187,219,26,187,26,243,12,150,219,219,17,17, + 243,150,150,12,17,150,219,26,187,26,12,12,8,17,243,244, + 244,36,244,36,36,36,36,36,36,36,36,36,36,36,36,36, + 36,36,105,36,36,105,36,36,105,36,36,36,36,36,36,36, + 36,36,36,36,244,36,36,36,36,36,244,36,244,36,244,244, + 36,244,36,244,244,36,244,244,36,244,244,36,244,244,244,244, + 169,169,39,39,169,140,140,140,140,140,140,74,140,74,140,74, + 74,74,71,140,140,140,140,74,144,74,74,140,140,71,114,114, + 74,140,140,140,140,140,140,140,140,114,74,140,140,140,74,140, + 140,140,140,140,74,140,140,140,169,140,140,169,39,140,39,39, + 39,39,207,207,39,39,207,39,188,188,207,188,207,188,188,39, + 39,39,114,39,39,114,39,39,140,39,39,39,39,39,39,39, + 188,169,39,39,188,39,39,39,39,39,39,207,39,39,39,207, + 39,207,39,39,39,39,207,39,39,127,39,207,39,39,39,39, + 127,39,39,39,39,39,39,39,39,39,127,39,39,39,39,39, + 39,127,39,39,39,39,127,39,207,39,89,207,39,89,39,127, + 207,39,207,39,39,127,39,39,89,89,39,89,89,89,89,89, + 89,89,89,89,89,89,89,127,89,89,127,89,114,236,159,59, + 132,42,122,150,187,187,187,219,150,17,17,17,17,17,26,243, + 150,150,150,17,12,17,26,243,219,150,17,17,17,17,17,26, + 243,12,12,12,17,12,219,26,243,219,150,17,17,17,17,17, + 26,243,150,12,150,17,12,17,26,243,219,150,17,12,187,17, + 17,26,243,150,150,150,17,12,219,26,243,219,150,17,17,17, + 17,17,26,243,150,150,12,17,17,219,26,243,219,150,17,150, + 17,17,17,26,243,150,150,17,17,12,219,26,150,219,150,17, + 17,17,17,17,17,243,150,150,17,17,12,17,26,243,219,150, + 17,17,17,17,17,26,243,150,150,150,219,12,219,26,243,219, + 150,17,17,17,17,17,26,243,150,150,150,17,17,219,26,243, + 219,150,17,17,17,17,17,26,243,150,150,150,17,12,17,26, + 243,219,150,17,17,17,219,17,26,243,150,150,150,17,17,17, + 26,150,219,150,17,17,17,17,17,26,243,150,150,150,17,17, + 17,26,150,219,150,12,17,17,219,12,17,243,150,150,150,17, + 12,17,26,243,219,150,17,17,17,17,17,17,150,150,150,150, + 17,12,17,26,243,219,150,17,17,17,17,17,26,243,150,150, + 12,17,12,17,26,150,219,150,17,17,17,17,17,17,150,12, + 12,12,17,17,17,26,150,219,150,17,17,17,17,17,26,243, + 150,150,150,17,12,219,26,243,219,150,17,17,17,17,17,17, + 243,150,150,12,17,12,219,26,243,219,150,150,8,17,141,244, + 244,36,36,244,36,244,36,36,36,36,36,36,36,36,36,36, + 36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36, + 36,36,36,36,36,36,244,36,244,36,244,36,244,36,244,36, + 244,244,244,244,244,244,244,244,244,244,36,244,244,36,244,244, + 39,140,140,169,140,140,169,140,140,140,140,140,140,140,140,144, + 140,140,144,140,144,140,144,140,140,144,140,144,140,140,74,74, + 140,140,140,140,140,39,140,140,140,140,140,140,140,140,140,140, + 140,140,140,140,39,140,169,140,39,140,39,39,140,39,39,127, + 39,207,39,39,207,207,39,207,207,207,188,207,188,39,39,39, + 39,169,39,39,39,39,39,39,39,39,39,39,39,39,39,39, + 39,39,39,39,39,39,39,127,39,39,207,39,39,207,39,39, + 39,39,207,39,39,39,39,207,39,39,39,39,39,39,39,39, + 39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39, + 39,39,89,127,39,207,89,39,39,207,39,39,207,39,39,207, + 207,207,127,89,39,89,89,89,39,39,89,89,114,89,114,89, + 127,89,127,114,89,89,89,89,89,89,89,89,89,119,108,59, + 26,42,42,12,132,17,150,219,12,17,132,17,150,150,219,150, + 17,150,17,17,17,219,26,109,219,12,17,132,17,150,150,219, + 12,150,150,150,17,17,187,26,109,219,12,17,132,17,150,150, + 219,150,17,150,12,17,17,187,26,109,219,12,17,132,17,150, + 150,219,150,17,132,12,17,17,187,26,109,219,12,17,132,17, + 150,150,219,150,17,17,150,17,12,187,26,109,219,12,17,219, + 17,150,150,219,12,12,17,150,132,17,187,26,109,219,12,17, + 132,17,132,150,26,150,12,17,150,17,17,219,219,109,219,17, + 17,132,187,150,150,219,150,17,150,12,132,17,187,26,109,219, + 12,17,132,17,150,12,219,150,17,150,17,17,17,187,26,109, + 219,12,17,132,17,150,150,219,150,17,150,17,17,17,219,219, + 109,219,12,17,132,187,12,150,17,150,17,17,12,132,17,17, + 219,109,26,12,17,132,17,132,150,219,150,17,17,17,17,12, + 219,219,109,219,17,132,132,17,17,12,26,150,17,150,17,132, + 17,219,26,109,219,12,17,132,17,132,150,26,12,17,150,17, + 17,17,187,26,109,219,12,17,132,17,150,150,219,12,17,17, + 150,132,17,187,26,109,219,150,17,132,17,132,150,26,150,150, + 150,150,132,187,187,26,109,219,12,17,132,17,150,150,219,150, + 17,150,17,132,17,187,26,109,219,12,17,132,17,132,150,219, + 150,17,17,150,17,17,187,219,109,219,12,150,8,17,8,244, + 244,244,36,244,36,36,36,244,36,36,36,36,36,36,36,36, + 244,36,36,36,244,36,36,244,36,244,36,244,36,36,36,36, + 36,36,36,244,36,36,36,244,36,244,36,244,36,244,244,244, + 244,36,244,36,244,244,36,244,36,244,244,244,244,244,244,244, + 169,169,140,169,169,140,140,169,140,140,140,74,140,74,140,140, + 144,140,74,140,140,140,140,144,140,140,140,144,140,144,114,140, + 140,140,140,140,140,169,169,169,169,39,140,140,140,169,140,100, + 169,140,140,140,169,140,39,140,39,140,39,39,39,39,114,207, + 39,207,207,39,207,207,39,39,39,39,207,188,207,188,188,39, + 39,39,39,114,39,39,140,39,39,39,39,39,207,39,39,39, + 188,39,188,188,188,188,39,39,39,188,39,39,127,39,39,39, + 39,39,127,39,207,39,39,39,207,39,39,207,39,127,39,39, + 127,39,127,207,207,39,127,207,39,127,127,127,39,39,127,207, + 39,39,207,207,39,39,207,207,39,207,207,39,207,207,207,39, + 39,207,39,127,127,127,39,89,89,127,39,89,89,89,127,89, + 114,89,89,127,127,89,89,127,89,89,127,89,127,89,108,59, + 219,42,78,243,187,187,12,219,12,17,132,219,17,12,26,150, + 17,150,150,17,187,150,26,243,219,150,17,132,219,17,12,219, + 17,17,17,150,219,12,132,26,243,219,12,17,132,219,17,12, + 26,150,17,17,150,219,12,132,26,109,219,12,17,132,219,17, + 12,219,150,17,150,150,219,12,132,26,243,219,12,17,132,219, + 17,12,26,150,150,17,12,219,12,132,26,243,219,150,150,132, + 219,12,12,219,150,150,17,17,17,12,132,26,211,219,12,17, + 132,219,17,150,26,150,150,17,12,17,12,187,26,243,219,12, + 17,132,219,17,12,219,150,17,150,17,17,17,132,26,243,219, + 12,17,132,219,17,12,219,150,17,150,150,17,17,150,26,243, + 219,150,17,132,219,17,12,26,150,17,150,150,219,187,187,26, + 243,219,12,17,132,219,17,12,26,150,150,150,17,219,12,187, + 26,243,219,12,17,132,219,12,12,26,150,150,150,150,219,187, + 187,26,243,219,12,17,132,219,150,150,26,150,17,150,17,219, + 12,132,26,243,219,12,17,132,219,17,150,219,150,17,150,150, + 219,17,132,26,243,219,12,17,132,219,17,12,219,150,150,17, + 17,219,12,132,26,109,26,12,17,132,219,17,150,26,12,219, + 17,17,17,17,132,26,243,219,12,17,132,219,17,12,219,150, + 17,150,17,17,17,132,26,243,219,150,17,132,219,17,12,26, + 150,150,17,17,17,17,187,26,211,26,12,150,8,17,8,244, + 244,36,244,36,244,244,36,36,36,244,36,36,36,244,36,36, + 105,36,244,36,36,36,36,36,36,244,36,36,244,36,244,36, + 244,36,36,36,36,244,36,36,244,36,244,36,244,244,244,244, + 244,244,244,36,244,244,244,244,244,244,244,244,244,244,244,244, + 39,140,188,140,140,140,140,140,140,140,140,140,71,140,140,140, + 140,144,140,144,140,144,140,74,74,71,74,74,140,140,140,71, + 74,140,140,140,140,140,140,140,140,169,169,169,169,39,169,39, + 39,169,169,169,140,169,169,169,169,169,140,39,39,114,207,39, + 39,207,207,207,39,127,39,207,207,207,39,207,39,207,207,39, + 39,39,207,39,39,140,39,39,39,39,39,39,39,39,39,188, + 39,188,39,207,188,188,188,188,188,188,188,127,39,207,127,127, + 39,207,39,39,207,207,39,207,207,39,207,39,39,39,39,188, + 39,127,39,39,39,207,39,39,39,39,39,39,207,207,39,207, + 207,39,39,207,207,207,207,207,207,39,127,207,39,39,127,207, + 143,207,207,207,89,127,89,39,127,89,89,89,127,89,89,89, + 236,127,89,89,89,127,127,89,89,89,89,127,89,119,240,59, + 219,42,42,12,150,12,187,26,150,17,17,17,132,150,219,12, + 132,17,17,17,132,132,26,109,42,12,132,17,17,132,150,219, + 150,132,150,17,17,132,150,26,109,26,150,17,17,17,150,132, + 219,12,132,150,12,17,132,132,26,243,42,150,17,17,17,150, + 132,26,150,150,17,17,17,132,150,26,109,26,150,17,17,17, + 132,150,219,150,219,150,150,17,17,150,26,109,26,12,219,17, + 17,132,132,219,12,17,150,12,17,132,150,26,243,26,150,17, + 17,17,150,219,219,12,219,150,132,17,166,150,26,211,26,150, + 17,17,17,150,132,26,150,132,17,12,17,132,150,26,109,26, + 150,132,17,17,132,150,219,12,132,17,17,17,17,132,26,109, + 42,12,17,17,17,150,132,219,150,132,17,17,17,132,150,26, + 211,42,150,17,219,150,150,132,219,150,17,17,12,17,132,150, + 26,211,26,150,17,17,17,132,132,219,150,17,17,17,12,132, + 150,26,211,26,150,150,219,150,17,219,219,12,132,12,12,17, + 132,150,26,109,42,150,17,17,17,150,17,219,12,132,17,17, + 17,132,150,26,109,26,150,17,17,17,150,132,219,12,17,150, + 12,17,132,150,26,243,219,150,132,17,17,150,17,219,150,150, + 150,17,17,132,150,26,211,26,150,17,17,17,132,150,219,12, + 132,17,12,17,17,150,26,109,26,12,17,17,17,150,17,219, + 150,17,150,132,17,132,150,219,243,219,12,17,150,150,141,244, + 244,244,36,36,244,36,244,36,244,36,36,244,36,36,36,244, + 36,105,36,36,244,36,244,36,36,244,36,244,36,36,244,36, + 244,36,36,244,36,244,36,244,36,244,244,36,244,36,244,244, + 244,36,244,244,244,244,244,244,244,244,244,244,244,244,244,244, + 39,140,39,169,140,169,74,140,140,140,140,140,74,71,140,71, + 140,140,74,74,74,140,140,140,140,140,144,140,144,140,114,114, + 140,140,140,140,169,169,169,169,169,39,188,39,169,39,169,140, + 188,39,188,188,39,169,39,169,169,39,169,140,39,39,39,89, + 89,207,207,207,207,207,39,39,39,39,188,207,39,39,207,39, + 39,39,39,39,188,39,39,39,39,39,39,188,188,207,39,188, + 39,188,39,39,207,207,39,188,188,188,207,39,39,39,39,39, + 39,207,39,39,39,39,127,39,207,39,39,39,127,188,39,39, + 39,39,127,127,39,127,127,207,188,188,207,39,39,207,39,207, + 207,127,39,127,39,127,39,127,207,207,127,127,207,127,127,127, + 39,207,207,207,207,207,89,89,127,127,236,89,127,127,143,127, + 236,127,89,89,89,89,89,89,89,89,89,89,127,236,108,47, + 219,42,78,243,132,243,150,26,150,17,17,17,17,17,219,12, + 150,132,17,219,26,150,26,211,26,12,17,17,17,17,17,219, + 12,219,150,132,219,26,132,26,109,26,150,219,17,17,17,17, + 219,12,132,132,17,219,26,150,26,211,26,150,219,17,17,17, + 150,26,12,132,150,17,219,26,132,26,109,26,150,17,17,17, + 17,17,26,150,17,132,17,132,26,132,26,109,26,12,17,17, + 17,17,17,219,150,17,132,17,219,26,132,26,109,26,150,17, + 17,17,150,17,219,150,17,150,17,219,26,150,26,109,26,150, + 219,17,17,17,150,26,12,132,132,17,219,26,150,26,109,26, + 12,17,17,17,17,17,219,12,150,132,17,132,26,150,26,109, + 26,150,219,17,17,17,17,26,12,132,150,17,219,26,132,26, + 109,26,150,17,17,17,17,17,26,150,132,132,17,219,26,150, + 219,109,26,150,17,17,17,17,17,26,150,132,150,132,219,26, + 150,26,109,26,17,132,17,150,150,17,219,12,132,132,17,219, + 26,150,26,211,26,150,17,17,17,150,17,219,12,150,132,17, + 219,26,132,26,109,26,150,219,17,17,17,17,219,150,17,132, + 17,219,26,132,26,187,26,12,17,17,17,132,17,219,12,17, + 150,132,219,26,132,26,109,26,150,17,17,17,17,17,219,12, + 132,132,17,132,26,132,26,109,26,150,17,17,17,150,17,26, + 150,17,12,132,17,26,187,219,109,219,150,150,150,12,8,244, + 244,36,244,36,244,36,36,36,36,244,36,244,36,244,105,244, + 36,244,36,36,36,36,36,244,36,36,36,244,36,244,36,244, + 36,36,244,36,36,36,36,244,36,244,36,244,244,36,244,244, + 244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244, + 140,140,140,140,140,74,140,140,140,140,144,140,140,140,74,114, + 71,74,144,140,144,71,140,144,140,140,140,74,140,140,74,140, + 140,140,140,140,140,140,140,140,140,188,169,169,39,169,169,169, + 169,169,169,169,169,39,169,39,39,169,169,39,39,39,39,89, + 39,89,207,207,207,207,207,207,39,207,207,39,207,39,39,207, + 207,39,39,39,207,207,188,188,39,188,188,39,207,39,188,207, + 188,188,188,207,39,39,207,207,207,207,39,207,207,39,207,207, + 127,39,207,127,127,207,39,39,39,39,188,207,39,39,188,188, + 207,188,39,207,207,188,39,188,39,207,39,127,207,39,207,39, + 39,207,207,207,207,127,207,207,127,188,188,207,207,207,188,207, + 207,127,207,127,207,127,127,143,89,89,127,143,236,89,236,236, + 236,236,89,143,236,89,127,127,89,89,236,127,89,119,240,59, + 26,219,162,8,166,187,187,42,12,219,150,17,150,150,219,150, + 219,17,150,17,17,187,219,243,219,12,17,150,17,150,150,26, + 150,132,12,17,219,17,187,17,243,42,12,17,150,17,150,150, + 219,150,219,17,150,17,17,187,17,243,42,12,17,150,17,150, + 17,219,150,17,17,150,219,17,187,17,243,42,12,219,150,17, + 150,150,219,12,132,17,132,219,17,187,17,243,219,150,17,150, + 17,150,132,219,12,132,12,150,219,17,187,17,243,42,12,219, + 150,12,219,150,219,12,132,12,150,219,17,187,219,243,26,12, + 17,150,17,150,17,219,150,219,12,150,219,17,187,17,211,42, + 12,219,150,17,150,17,219,150,17,17,150,219,17,187,17,243, + 219,12,17,150,17,150,150,219,150,17,12,150,219,17,187,219, + 243,42,12,17,17,17,132,132,219,12,17,12,132,17,17,187, + 26,243,26,17,17,150,17,150,132,219,12,17,17,12,219,17, + 187,219,211,26,12,219,17,17,17,132,219,150,17,17,150,17, + 17,187,219,243,42,17,17,150,17,17,132,219,150,219,12,150, + 219,17,187,17,243,26,12,17,150,17,150,132,219,12,132,12, + 150,219,17,187,12,211,26,12,219,150,17,17,150,42,150,132, + 17,17,219,17,187,219,243,42,12,219,150,17,150,17,219,150, + 17,17,132,219,17,187,17,243,219,12,219,150,17,132,132,219, + 12,132,132,17,219,17,12,26,187,219,26,12,243,12,141,244, + 244,36,244,244,36,244,244,36,244,36,36,36,244,36,36,36, + 244,36,244,36,244,36,244,36,36,244,36,244,36,244,36,244, + 36,244,36,244,36,244,36,244,36,244,36,244,244,244,244,244, + 244,244,244,244,244,244,244,244,244,244,244,244,244,244,144,144, + 169,169,140,169,39,140,140,140,140,140,140,140,140,140,140,114, + 114,140,140,140,140,140,140,140,74,140,140,140,140,140,74,140, + 140,140,140,140,169,169,169,169,169,169,188,169,39,39,169,169, + 169,169,169,188,169,39,169,169,169,39,188,39,39,39,207,89, + 207,89,207,207,207,39,188,207,207,39,207,39,207,39,39,39, + 39,39,39,39,39,207,39,188,39,188,188,188,188,207,39,188, + 207,188,188,207,207,39,39,39,207,207,39,127,207,39,39,39, + 188,127,39,39,39,188,127,127,127,188,188,207,207,207,188,39, + 207,188,188,39,207,207,207,207,188,188,207,188,207,127,127,207, + 127,188,127,127,207,207,207,207,207,207,207,188,127,207,188,207, + 207,127,207,207,89,207,143,207,143,89,143,207,143,207,143,127, + 143,143,89,127,236,236,236,236,236,236,119,236,143,236,108,59, + 26,219,42,243,187,243,111,26,150,219,12,17,150,219,219,150, + 132,17,132,219,17,187,26,187,219,17,219,12,17,17,219,219, + 132,132,17,17,17,17,187,26,150,26,17,219,12,17,150,219, + 219,150,132,17,132,219,17,187,42,150,42,150,219,17,17,150, + 219,219,132,132,17,132,219,17,17,26,150,26,17,219,12,17, + 150,219,219,132,17,17,17,219,17,187,42,12,42,150,219,17, + 12,17,17,219,132,132,17,132,219,17,187,26,150,26,17,219, + 12,150,150,219,219,132,219,17,150,219,17,12,26,150,26,17, + 219,12,17,150,219,219,150,132,17,17,17,17,187,42,150,219, + 17,17,150,17,150,219,219,132,132,17,17,219,17,187,26,187, + 26,17,219,12,17,150,219,219,132,132,17,150,219,17,187,26, + 150,42,17,17,12,12,150,219,219,132,132,17,132,219,17,150, + 26,150,42,17,17,17,12,150,219,219,132,132,17,132,219,17, + 187,26,150,219,17,17,12,150,150,219,219,132,132,17,132,219, + 17,187,26,150,42,17,219,12,150,17,17,219,150,132,17,150, + 219,17,187,26,150,26,17,219,12,17,12,219,219,132,132,17, + 17,17,17,187,42,150,219,17,219,12,150,150,219,219,132,132, + 17,150,219,17,187,26,150,26,17,17,12,17,150,219,219,150, + 132,17,17,219,17,187,26,187,26,17,219,12,17,150,219,219, + 132,17,17,17,17,17,150,219,12,219,17,17,150,150,243,144, + 144,244,244,244,244,36,244,36,244,36,244,36,244,36,244,36, + 36,36,244,36,36,36,244,36,244,36,244,36,244,36,36,244, + 36,244,36,244,36,244,36,36,244,244,36,244,36,244,36,244, + 244,244,244,244,244,244,244,244,244,244,244,244,144,244,244,244, + 140,140,169,140,140,140,74,140,140,140,140,140,74,140,140,140, + 140,140,140,144,140,74,140,71,140,74,140,140,140,140,114,140, + 74,114,140,140,140,140,140,140,140,39,169,188,169,169,188,39, + 188,169,169,169,188,169,188,188,188,169,169,140,127,39,39,207, + 207,207,207,39,39,207,207,39,39,207,39,207,39,39,127,39, + 39,169,39,188,39,188,188,207,188,188,188,188,207,39,188,188, + 188,39,207,39,188,207,207,207,39,207,207,39,39,207,207,207, + 207,39,207,188,188,207,188,188,188,39,188,39,188,39,207,188, + 188,207,188,207,207,188,188,207,207,207,188,188,188,188,207,127, + 207,188,188,188,188,188,188,207,207,207,188,207,207,207,207,207, + 207,207,207,207,207,207,207,207,207,127,207,236,207,143,207,89, + 143,127,143,236,143,236,236,236,236,236,127,143,236,119,240,47, + 219,26,122,182,187,187,132,219,26,26,17,17,26,17,26,17, + 17,17,219,219,17,12,26,150,42,17,26,17,17,12,17,26, + 17,17,17,132,219,17,12,26,150,219,17,26,17,17,26,17, + 26,17,17,17,219,219,17,17,26,150,219,26,26,17,17,17, + 17,26,219,17,17,219,219,17,187,26,150,219,17,26,17,17, + 26,17,219,17,12,17,219,219,17,12,26,150,42,26,26,17, + 12,17,17,219,219,17,17,219,219,17,17,26,150,219,17,26, + 17,17,26,17,219,17,12,17,219,219,17,187,26,132,219,17, + 26,17,17,17,17,26,219,17,17,132,219,17,17,26,150,42, + 219,26,26,17,12,17,26,17,17,17,219,219,17,12,26,150, + 219,17,26,17,17,26,17,26,17,17,17,219,219,17,12,26, + 150,219,219,219,17,12,26,17,219,17,17,17,219,219,17,187, + 26,150,219,219,26,17,12,26,17,219,17,17,17,219,219,17, + 12,42,150,42,26,219,17,17,26,17,26,17,17,17,219,219, + 17,12,26,150,219,17,26,17,17,17,17,26,219,17,17,219, + 219,12,12,26,132,219,17,26,17,17,12,17,219,17,17,219, + 132,219,17,17,26,150,42,17,26,17,17,26,17,26,17,17, + 17,219,219,17,12,26,150,219,219,26,17,17,12,17,26,219, + 12,17,219,219,17,12,26,150,219,17,26,17,12,26,17,219, + 219,12,17,132,219,17,187,26,109,219,17,17,150,12,141,144, + 244,244,244,244,244,244,244,244,36,244,244,36,244,36,244,36, + 244,36,36,36,244,36,36,244,36,36,244,36,244,244,36,244, + 36,244,36,244,36,36,244,36,244,244,36,244,244,244,244,244, + 244,244,244,244,144,244,244,144,244,244,244,244,144,244,144,144, + 169,140,39,169,140,169,140,140,140,140,140,39,140,74,140,140, + 140,140,140,140,140,74,140,140,140,140,140,74,140,74,140,114, + 74,140,140,140,169,169,169,169,140,39,169,169,188,169,169,169, + 188,39,169,169,169,169,169,169,188,169,188,39,207,39,207,207, + 39,89,207,207,39,39,39,39,39,207,39,207,207,207,188,39, + 188,188,188,188,39,207,39,207,188,188,188,188,188,207,207,207, + 207,39,207,188,127,188,127,207,188,207,207,207,39,39,188,39, + 188,39,188,207,188,207,207,207,207,188,188,188,207,188,207,207, + 39,207,188,188,207,207,188,207,207,207,207,188,188,188,188,188, + 207,207,207,207,207,207,188,207,207,218,218,207,188,188,188,127, + 207,207,207,127,207,143,143,207,143,207,207,143,207,236,207,236, + 89,89,236,89,143,127,143,143,89,236,236,89,143,236,240,59, + 42,26,42,211,187,187,187,122,42,122,122,0,122,42,122,122, + 122,122,122,122,42,42,42,187,122,42,122,122,0,122,183,122, + 122,122,0,0,122,42,78,42,187,0,42,122,122,0,122,42, + 122,122,122,122,122,122,42,42,42,187,122,42,122,122,0,122, + 42,122,122,42,122,122,122,26,42,42,187,0,42,122,122,0, + 122,42,122,122,122,122,122,122,42,42,42,187,122,42,122,0, + 0,122,42,122,122,122,122,122,122,26,42,42,187,0,122,122, + 122,0,122,42,122,122,122,122,122,122,42,42,42,187,0,42, + 122,122,0,122,42,122,122,122,122,0,122,42,42,42,187,122, + 42,122,122,0,122,42,0,122,42,122,122,122,42,42,42,187, + 0,122,122,122,0,122,42,122,122,122,122,122,122,42,42,42, + 187,122,122,122,122,0,122,42,122,122,122,122,122,122,42,42, + 42,187,122,42,122,0,0,122,42,122,122,122,122,122,122,42, + 42,42,187,122,42,122,122,0,122,42,122,122,122,122,122,122, + 42,78,42,187,122,122,122,122,0,122,42,122,122,122,122,0, + 0,183,42,42,187,0,122,122,122,0,122,42,0,122,42,0, + 0,122,42,183,42,187,122,42,122,122,122,122,219,0,122,42, + 122,122,122,42,42,42,187,122,42,122,122,0,122,42,122,122, + 122,122,122,122,42,42,42,187,122,42,122,122,0,122,42,122, + 122,122,122,0,122,42,42,42,187,42,26,26,12,17,150,144, + 144,244,244,36,244,36,244,244,36,244,36,244,36,244,36,244, + 36,244,244,36,244,36,244,36,244,36,244,244,244,244,244,36, + 244,244,36,244,244,36,244,36,244,244,244,244,244,244,244,244, + 244,244,244,244,244,144,244,244,244,144,244,144,244,244,144,244, + 140,169,140,140,39,140,140,169,140,74,74,140,74,114,140,140, + 140,140,140,140,140,114,140,140,140,140,74,140,140,140,100,74, + 140,100,140,140,140,140,140,140,169,140,140,39,169,39,169,169, + 169,169,39,169,188,188,169,188,169,169,169,140,39,207,207,207, + 89,39,39,207,39,207,39,39,207,39,207,207,39,188,207,188, + 207,39,188,207,207,39,207,39,207,207,207,207,207,207,39,207, + 207,207,188,207,207,207,188,39,207,188,39,188,127,188,188,188, + 207,188,207,188,207,188,188,188,188,207,207,188,188,207,188,188, + 207,188,188,188,188,188,207,188,207,188,207,207,207,207,207,207, + 188,188,188,207,188,207,207,207,188,207,207,188,207,207,207,207, + 207,207,207,207,207,207,207,218,218,143,218,207,207,207,143,207, + 143,143,143,143,236,236,236,236,143,143,236,143,236,58,108,47, + 0,183,122,12,0,183,183,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,183,122,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,42,122,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,42,122,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,42,122,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,183,122,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,42,122,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,42,122,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,42,122,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,42,122, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,42, + 122,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 42,122,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,42,122,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,122,42,122,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,42,122,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,42,122,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,42,122,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,42,122,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,42,122,122,122,42,42,122,141,114, + 244,244,244,244,244,244,244,244,244,244,36,244,244,36,244,244, + 36,244,244,36,244,244,36,244,244,36,244,36,244,244,244,36, + 244,244,244,36,244,36,244,36,244,36,244,244,244,244,244,244, + 244,144,244,144,244,144,144,244,244,244,144,244,144,244,144,144, + 140,169,169,140,39,100,140,169,114,39,140,140,74,140,140,140, + 140,140,140,140,74,140,140,140,140,39,140,140,169,114,39,169, + 114,169,169,140,140,140,140,140,169,169,140,39,140,188,39,39, + 169,169,39,169,169,39,169,169,39,169,188,39,39,39,207,39, + 89,89,207,39,39,114,207,39,39,39,39,207,207,39,207,39, + 188,188,188,39,207,188,207,188,39,39,188,207,207,207,39,188, + 188,207,188,188,188,207,207,188,207,207,188,207,207,207,207,39, + 39,188,39,188,207,207,207,207,207,188,207,207,188,207,39,188, + 207,207,207,207,207,188,207,188,207,188,207,207,207,207,188,207, + 218,207,188,207,188,207,188,207,207,207,207,207,207,207,207,39, + 207,207,207,236,207,143,218,236,218,218,218,143,218,207,218,207, + 207,207,236,143,236,143,236,236,236,143,236,143,236,236,240,59, + 42,219,132,150,122,0,26,0,14,216,41,62,62,62,62,62, + 62,62,62,62,41,75,26,12,0,14,216,41,62,62,62,249, + 62,62,62,62,62,41,75,26,12,0,14,216,41,62,62,62, + 62,62,62,62,62,62,41,75,26,12,0,14,216,62,41,62, + 62,62,62,62,62,62,62,41,75,26,12,0,14,216,41,62, + 62,62,62,62,62,62,62,62,41,75,26,12,0,14,216,41, + 62,62,62,249,62,62,62,62,62,41,75,26,12,122,14,216, + 41,62,62,62,249,62,62,62,62,62,41,75,26,12,0,14, + 216,62,41,62,62,62,62,62,62,62,62,41,59,26,17,0, + 14,216,62,41,62,62,62,62,62,62,62,62,41,59,26,12, + 122,14,216,41,62,62,62,62,62,62,62,62,62,41,75,26, + 12,122,14,216,41,62,62,62,62,62,62,62,62,62,41,75, + 26,12,0,14,216,41,62,62,62,62,62,62,62,62,62,41, + 75,26,12,0,14,216,41,62,62,62,62,62,62,62,62,62, + 62,22,12,26,122,14,216,62,41,62,62,62,62,62,62,62, + 62,41,75,26,12,122,14,216,41,62,62,62,249,62,62,62, + 62,62,62,22,26,12,0,14,216,62,41,62,62,249,62,62, + 62,62,62,41,75,26,12,0,14,216,62,41,62,62,62,62, + 62,62,62,62,41,200,26,17,0,14,216,41,62,62,62,62, + 62,62,62,62,62,41,59,26,187,122,26,187,243,219,141,114, + 144,144,244,244,244,244,244,244,244,244,244,244,36,244,244,36, + 244,36,244,244,244,244,36,244,244,244,244,36,244,244,36,244, + 36,244,36,244,244,36,244,244,244,244,244,244,244,244,244,244, + 244,144,244,244,144,244,144,244,144,244,144,144,244,244,144,144, + 188,169,39,169,140,39,140,169,169,140,140,140,39,169,140,140, + 169,140,140,140,39,169,140,140,140,140,140,169,39,169,140,39, + 169,140,140,169,140,169,169,169,140,140,140,140,169,140,169,169, + 39,169,169,169,169,169,169,39,169,188,188,127,39,207,207,207, + 207,207,39,39,39,207,207,39,207,207,207,39,39,188,188,188, + 188,207,188,207,188,39,188,207,207,207,207,39,39,207,207,207, + 207,188,207,207,207,207,127,207,188,188,207,188,188,39,207,207, + 207,188,207,188,188,188,188,188,188,207,207,188,188,188,207,207, + 188,188,188,218,188,207,207,207,207,207,188,207,188,188,207,188, + 207,207,207,207,207,188,207,207,207,207,207,207,188,207,207,207, + 207,207,207,207,207,207,207,207,218,207,218,218,218,236,218,236, + 143,236,143,236,143,143,143,143,143,119,143,236,143,159,240,47, + 187,109,187,211,150,42,254,42,233,110,195,90,195,90,195,90, + 90,90,90,90,60,154,26,12,42,233,110,195,90,90,195,90, + 90,90,90,90,90,60,154,26,12,42,233,110,195,90,195,90, + 195,90,90,90,90,90,60,154,26,12,42,233,110,195,90,90, + 195,195,90,90,90,90,90,60,154,26,12,42,233,110,195,90, + 195,90,195,90,90,90,90,90,60,154,26,12,42,233,110,195, + 90,90,195,90,90,90,90,90,90,60,154,26,12,42,233,110, + 195,90,90,195,90,90,90,90,90,90,60,154,26,12,42,233, + 110,195,90,195,90,195,90,90,90,90,195,60,154,26,12,42, + 233,110,195,90,195,90,195,90,90,90,90,195,60,154,26,12, + 42,233,110,195,90,195,90,195,90,90,90,90,90,60,154,26, + 12,42,233,110,195,90,195,90,195,90,90,90,90,90,60,154, + 26,12,42,233,110,195,90,195,90,195,90,90,90,90,90,60, + 154,26,12,42,233,110,195,90,195,90,195,90,90,90,90,90, + 60,154,26,109,42,233,110,195,90,195,90,195,90,90,90,90, + 90,60,154,26,12,42,233,110,195,90,90,195,90,90,90,90, + 90,90,60,154,26,12,42,233,110,195,90,90,195,90,90,90, + 90,90,90,60,154,26,12,42,233,110,195,90,195,90,195,90, + 90,90,90,195,60,154,26,12,42,233,110,195,90,195,90,195, + 90,90,90,90,195,60,154,26,12,42,12,67,67,8,141,114, + 144,244,144,244,244,244,244,244,244,244,244,244,244,244,244,244, + 244,244,244,36,244,244,244,244,244,244,244,244,244,244,36,244, + 244,244,36,244,244,36,244,244,36,244,244,244,244,244,244,144, + 244,144,144,244,144,244,144,244,144,244,144,244,144,244,144,244, + 169,169,188,188,169,169,169,140,169,169,169,140,169,169,188,169, + 169,169,169,169,39,169,169,169,169,39,169,140,169,169,169,140, + 169,39,169,169,39,140,140,169,169,169,169,39,39,39,39,169, + 39,169,39,39,188,188,169,39,39,188,188,207,188,39,207,207, + 207,89,89,114,39,39,39,207,39,39,207,207,207,207,207,207, + 39,188,39,188,207,207,188,39,188,207,207,207,188,39,188,207, + 207,188,188,127,188,207,188,207,207,188,207,207,207,207,188,188, + 207,188,207,207,207,207,207,207,207,188,207,207,188,188,188,207, + 207,188,188,207,207,188,218,207,207,218,188,218,207,207,207,207, + 207,207,207,207,207,39,207,39,39,207,207,207,207,207,207,207, + 207,207,207,143,207,207,218,236,218,236,236,236,218,236,143,236, + 207,207,207,236,236,236,143,236,143,236,143,236,143,153,240,59, + 26,109,187,187,150,42,109,122,206,128,23,23,23,86,19,19, + 65,65,19,19,195,178,243,243,122,206,128,23,23,23,23,23, + 65,19,65,19,19,195,154,12,243,122,206,128,23,23,23,86, + 19,19,65,65,19,19,195,178,243,243,122,206,128,86,23,23, + 86,19,19,65,65,19,19,195,178,243,243,122,206,128,23,23, + 23,86,19,19,65,65,19,19,195,178,243,243,122,206,128,23, + 23,23,23,23,65,19,65,19,19,195,154,12,243,122,206,128, + 23,23,23,23,23,65,19,65,19,19,195,154,12,243,122,206, + 128,23,23,23,86,19,19,65,65,19,19,195,178,243,109,122, + 130,128,23,23,23,86,19,19,65,65,19,19,195,178,12,243, + 122,206,128,23,23,23,86,19,19,65,65,19,19,195,154,12, + 243,122,206,128,23,23,23,86,19,19,65,65,19,19,195,178, + 243,243,122,206,128,23,23,23,86,19,19,65,65,19,19,195, + 178,243,243,122,206,128,23,23,23,86,19,19,65,65,19,19, + 195,178,12,243,122,206,128,23,23,23,86,19,19,65,65,19, + 19,195,154,12,243,122,206,128,23,23,23,23,23,65,19,65, + 19,19,90,178,243,243,122,206,128,86,23,23,23,23,65,19, + 65,19,19,195,154,12,243,122,206,128,23,23,23,86,19,19, + 65,65,19,19,195,178,243,109,122,206,128,23,23,23,86,19, + 19,65,65,19,19,195,178,150,243,183,12,8,67,8,141,114, + 114,244,144,244,144,144,244,244,244,244,244,244,36,244,36,244, + 244,244,244,244,244,244,244,244,244,244,36,244,244,244,244,244, + 244,244,36,244,244,244,244,244,244,244,244,244,244,244,244,244, + 244,144,144,144,144,244,144,144,144,244,144,144,144,244,144,144, + 39,169,39,169,39,169,169,169,169,169,39,169,169,169,140,169, + 140,169,140,169,169,169,169,169,169,169,169,169,39,39,169,169, + 39,140,39,169,140,39,140,140,140,140,39,140,169,140,169,39, + 169,39,188,188,39,188,188,169,188,188,188,188,188,127,127,39, + 207,39,207,207,127,39,89,39,207,207,207,39,39,39,39,39, + 207,207,207,207,188,188,207,207,207,188,188,188,207,207,207,188, + 188,207,207,188,207,218,207,188,207,207,207,207,188,188,207,207, + 188,207,188,188,188,188,188,188,188,207,188,207,207,207,207,188, + 188,207,207,188,188,207,207,188,207,207,207,207,207,188,207,207, + 188,207,207,39,207,207,39,207,207,207,207,89,207,207,89,89, + 89,89,207,207,207,236,207,207,207,218,218,143,218,218,218,207, + 143,236,236,143,143,143,236,143,236,236,236,236,236,58,108,47, + 187,254,187,211,111,26,111,122,222,204,19,65,19,65,65,65, + 65,65,19,65,90,178,219,109,122,222,128,19,65,19,65,65, + 19,118,65,19,65,195,178,132,211,122,222,204,19,65,19,65, + 65,65,65,65,19,65,90,178,219,109,42,233,204,19,65,19, + 65,65,65,65,65,19,65,90,178,219,211,122,222,204,19,65, + 19,65,65,65,65,65,19,65,90,178,219,211,122,222,128,19, + 65,19,65,65,19,118,65,19,65,90,178,17,211,122,222,128, + 19,65,19,65,65,19,118,65,19,65,90,178,132,211,122,222, + 204,19,65,19,65,65,65,65,65,65,65,90,178,17,243,122, + 130,204,19,19,19,65,65,65,65,65,65,65,90,178,132,211, + 122,222,204,19,65,19,65,65,65,65,65,19,65,90,178,17, + 211,122,222,204,19,65,19,65,65,65,65,65,19,65,90,178, + 219,211,122,222,204,19,65,19,65,65,65,65,65,19,65,90, + 178,17,109,122,222,204,19,65,19,65,65,65,65,65,19,65, + 90,178,17,211,122,222,204,19,19,19,65,65,65,65,65,19, + 65,195,178,17,211,122,222,128,19,65,19,65,65,19,118,65, + 19,19,90,178,17,109,42,233,204,65,19,65,65,65,19,118, + 65,19,65,90,178,132,211,122,222,204,19,19,19,65,65,65, + 65,65,65,65,90,178,219,8,122,222,204,19,65,19,65,65, + 65,65,65,19,65,90,178,17,211,42,243,141,141,8,8,114, + 144,144,144,144,244,244,144,144,244,244,144,244,244,244,244,244, + 244,244,244,244,36,244,244,244,244,244,244,244,244,244,36,244, + 36,244,244,244,244,36,244,36,244,244,244,144,144,244,144,244, + 144,244,244,144,144,144,244,144,144,244,144,244,144,144,244,144, + 39,169,39,169,39,169,169,169,169,169,169,169,140,169,39,169, + 169,169,39,169,39,39,39,169,169,39,169,169,169,39,188,169, + 169,169,39,169,169,39,188,39,39,140,169,140,169,39,140,140, + 169,169,169,39,39,188,188,188,188,188,188,188,188,188,188,188, + 207,39,207,39,39,39,207,207,207,39,207,207,207,207,207,39, + 207,188,188,207,207,188,188,188,207,207,207,188,207,207,207,207, + 207,188,207,188,207,207,218,218,207,188,207,207,207,207,207,207, + 188,207,207,207,188,218,207,207,207,218,188,207,218,207,207,207, + 188,207,207,218,188,188,207,188,207,207,207,207,207,188,188,207, + 207,207,207,207,207,207,207,207,89,207,207,89,89,207,207,207, + 207,207,89,207,207,207,207,218,207,207,207,207,207,207,207,207, + 207,207,143,207,89,143,89,143,236,236,143,143,236,159,240,47, + 26,109,187,109,111,26,109,122,31,204,118,118,118,118,51,118, + 118,118,65,65,60,178,26,211,122,31,170,118,118,118,118,51, + 118,118,118,118,65,128,84,26,8,122,31,204,118,118,118,118, + 51,118,118,118,118,65,60,178,17,243,122,31,170,118,118,118, + 118,51,118,118,118,118,65,60,178,26,211,122,31,204,118,118, + 118,118,51,118,118,118,65,65,128,84,26,211,122,31,170,118, + 118,118,118,51,118,118,118,118,65,128,84,26,211,122,31,170, + 118,118,118,118,51,118,118,118,118,65,128,84,26,8,122,31, + 204,118,118,118,118,118,118,51,118,65,118,60,84,26,8,122, + 31,170,118,118,118,118,118,118,118,118,65,118,60,84,26,8, + 122,31,204,118,118,118,118,51,118,118,118,118,65,128,84,26, + 8,122,31,204,118,118,118,118,51,118,118,118,118,65,60,178, + 26,211,122,31,204,118,118,118,118,51,118,118,118,118,65,60, + 178,26,211,122,31,204,118,118,118,118,51,118,118,118,118,65, + 128,84,26,211,122,31,170,118,118,118,118,51,118,118,118,65, + 118,128,84,26,211,122,31,170,118,118,118,118,51,118,118,118, + 118,65,60,178,17,243,122,31,170,65,118,118,118,118,118,118, + 118,118,65,128,84,26,8,122,31,170,118,118,118,118,118,118, + 51,118,65,118,60,84,17,211,122,31,204,118,118,118,118,51, + 118,118,118,118,65,60,178,219,141,26,12,141,67,150,141,114, + 144,144,144,144,144,244,244,144,144,244,244,244,144,244,244,244, + 244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244, + 244,244,244,244,244,244,244,244,244,244,244,244,144,144,144,144, + 244,144,244,144,144,244,244,144,144,144,244,144,144,144,244,144, + 169,169,169,169,169,39,169,169,169,169,169,169,169,169,169,169, + 169,169,169,39,169,169,169,39,39,169,169,169,188,169,169,188, + 169,169,169,188,39,169,169,169,169,39,39,188,39,140,169,39, + 39,39,39,39,39,39,188,188,39,39,207,207,207,188,207,39, + 207,39,127,89,39,89,207,207,39,207,39,207,39,207,207,207, + 188,207,207,188,188,207,207,207,188,188,188,207,188,207,207,207, + 188,207,207,218,188,218,236,188,218,218,218,218,218,218,188,188, + 207,207,207,218,218,207,218,218,218,207,218,188,207,218,207,207, + 207,188,207,207,207,207,207,207,207,207,207,207,207,207,207,207, + 39,207,89,207,207,89,207,89,207,207,207,207,207,89,207,89, + 89,89,207,89,207,207,207,236,218,218,207,207,207,236,207,207, + 207,207,207,89,207,89,127,127,143,236,236,236,236,236,108,64, + 26,111,183,243,224,26,109,122,31,53,118,51,51,51,107,52, + 51,52,107,118,204,84,17,243,122,249,53,118,51,51,51,51, + 107,51,51,118,118,128,178,26,211,122,31,53,118,51,51,51, + 107,52,51,51,118,118,204,84,26,211,0,31,45,118,51,107, + 51,107,52,51,51,118,118,204,84,17,8,122,31,53,118,51, + 51,51,107,52,52,9,107,51,128,84,17,8,122,249,53,118, + 51,51,51,51,51,107,107,51,118,128,84,17,8,122,249,53, + 118,51,51,51,51,51,107,51,118,118,128,84,26,211,122,31, + 53,118,51,51,51,52,52,107,9,118,118,128,178,17,182,0, + 249,53,118,51,51,51,52,52,52,52,118,118,128,178,17,211, + 122,31,53,118,51,51,51,107,52,51,51,118,118,128,84,17, + 211,122,31,53,118,51,51,51,107,52,51,51,118,118,204,84, + 17,8,122,31,53,118,51,51,51,107,52,51,107,118,118,204, + 84,17,243,122,31,53,118,51,51,51,51,52,52,51,118,51, + 128,84,17,243,122,249,165,51,51,51,51,51,52,51,9,51, + 118,128,84,17,8,0,249,53,118,51,51,51,51,107,52,51, + 118,118,204,84,26,211,0,31,45,107,51,51,51,52,52,107, + 51,118,118,128,84,26,211,122,249,165,51,51,51,51,52,52, + 107,9,118,118,128,84,26,8,122,31,53,118,51,51,107,51, + 52,51,52,118,118,204,84,17,8,219,12,12,8,12,141,89, + 144,144,144,144,244,144,144,244,144,244,144,244,244,244,244,244, + 244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244, + 244,244,244,244,244,244,244,244,244,244,244,144,244,144,244,144, + 244,144,144,244,144,244,144,244,144,144,244,244,144,244,144,144, + 188,188,188,169,169,188,188,169,169,39,169,169,169,169,169,169, + 188,169,169,188,188,188,169,169,169,188,169,169,188,39,169,188, + 188,188,169,169,169,169,188,188,169,169,169,169,188,39,169,140, + 39,39,140,169,39,39,39,188,39,39,39,188,188,39,188,127, + 207,39,207,39,39,89,207,207,207,207,127,207,39,39,207,207, + 39,188,207,207,127,188,207,207,207,207,188,207,188,207,207,207, + 207,218,207,218,207,188,218,207,207,207,207,207,188,218,218,207, + 218,218,188,207,188,207,207,207,207,207,218,207,207,218,207,218, + 207,207,207,207,207,39,207,39,207,207,207,207,207,207,207,207, + 207,207,89,89,207,89,207,89,89,89,89,89,89,89,236,207, + 127,89,143,207,207,143,207,207,207,207,236,89,207,207,89,207, + 207,89,143,207,143,89,89,236,127,89,236,143,236,153,240,47, + 26,109,183,12,109,42,109,162,249,85,51,52,76,76,76,232, + 51,52,9,107,204,178,17,8,0,123,53,107,76,76,76,232, + 232,52,52,52,51,204,84,17,8,122,167,194,107,76,76,76, + 76,232,52,52,9,107,204,84,17,8,0,123,53,107,76,76, + 76,76,232,52,52,9,107,204,84,12,243,122,249,85,51,52, + 76,76,76,76,51,51,51,9,204,84,12,243,0,123,53,107, + 51,76,76,232,76,51,51,107,9,204,178,17,243,0,123,53, + 107,51,76,76,232,76,52,52,51,107,204,178,12,8,122,249, + 85,51,76,76,76,76,76,76,52,52,9,204,84,26,8,0, + 123,53,107,76,76,76,76,76,51,52,9,9,204,84,17,8, + 122,167,194,107,51,76,76,76,232,52,52,51,9,204,178,17, + 243,122,249,85,51,52,76,76,76,232,52,52,107,107,204,84, + 17,8,122,249,85,51,52,76,76,76,232,52,52,9,107,204, + 84,12,8,122,249,85,51,52,76,76,76,52,52,52,107,9, + 204,84,12,8,122,123,53,107,51,76,76,76,232,51,51,51, + 9,204,84,12,8,122,123,53,107,76,76,76,76,76,52,52, + 9,107,204,84,17,243,122,123,53,107,51,76,76,76,76,52, + 52,51,107,204,178,17,8,122,123,53,107,76,76,76,76,76, + 76,52,52,9,204,178,12,8,122,249,85,51,76,51,232,76, + 52,51,52,107,107,204,84,26,8,219,150,8,8,243,141,181, + 144,144,144,114,144,144,144,144,144,144,144,244,144,244,244,244, + 244,244,144,244,244,144,244,244,244,244,244,244,244,244,244,244, + 244,244,244,244,244,244,244,244,244,244,144,244,144,144,144,144, + 144,244,144,144,144,244,144,244,144,144,144,244,144,144,244,244, + 188,188,188,188,188,169,169,169,169,169,169,169,169,169,169,169, + 169,169,188,169,169,169,188,169,188,169,169,169,169,169,188,169, + 169,169,188,169,188,188,169,169,39,39,39,39,169,39,39,39, + 39,39,39,39,39,39,39,39,207,188,207,39,207,188,207,39, + 39,207,39,89,89,207,207,207,207,39,207,127,207,207,207,207, + 207,207,188,188,188,207,218,207,207,207,207,207,207,218,218,207, + 207,188,207,207,207,218,207,218,218,218,218,218,218,207,207,218, + 207,188,218,207,218,218,188,218,207,207,236,207,207,207,188,207, + 207,207,207,207,207,207,207,207,207,207,207,207,89,89,207,89, + 207,207,207,39,207,207,207,207,89,89,236,89,143,236,207,89, + 89,143,89,89,207,207,207,207,207,143,207,207,207,236,207,207, + 207,143,207,127,89,127,143,127,89,236,236,236,236,58,108,64, + 26,187,42,109,111,91,182,122,123,85,52,76,76,76,232,232, + 232,76,51,9,204,84,17,211,122,123,85,52,76,76,76,232, + 232,232,51,51,9,204,154,17,243,0,123,85,52,76,76,76, + 232,232,232,76,51,9,204,154,17,243,122,123,194,52,76,76, + 76,232,232,232,76,51,9,204,154,17,243,0,123,85,52,76, + 76,76,232,232,232,76,52,9,204,154,219,211,122,123,85,52, + 232,76,232,232,148,232,76,51,52,204,84,17,243,122,123,85, + 52,232,76,232,232,232,232,51,52,9,204,168,17,141,0,123, + 85,52,76,76,76,232,232,76,51,51,9,204,154,17,243,122, + 123,85,52,76,76,76,232,232,232,76,51,52,204,84,17,243, + 0,123,85,76,232,76,76,232,232,232,51,52,52,204,84,17, + 243,122,123,85,52,76,76,76,232,232,232,51,52,9,204,154, + 17,182,0,123,85,52,76,76,76,232,232,76,76,51,9,204, + 154,17,141,0,123,85,52,76,76,232,232,232,232,51,51,52, + 204,84,17,243,122,123,85,52,232,76,232,232,232,232,76,52, + 52,204,84,17,243,0,123,85,52,76,76,232,232,232,232,51, + 51,9,204,154,17,243,162,123,85,76,232,76,76,232,232,232, + 51,52,9,204,168,17,243,122,123,85,52,76,76,76,232,232, + 76,76,51,9,204,168,219,182,0,123,85,52,76,232,76,232, + 148,232,76,52,9,204,84,12,141,219,17,243,182,12,141,114, + 114,144,144,144,244,144,144,144,244,144,244,144,144,144,144,144, + 144,244,244,144,244,244,144,244,144,244,244,244,244,244,244,244, + 244,244,244,244,244,244,244,244,244,244,144,244,144,144,244,144, + 144,144,244,144,144,144,144,244,144,244,144,244,144,244,144,144, + 169,218,218,188,188,188,188,188,169,169,169,169,169,169,39,169, + 169,169,169,39,39,169,188,169,169,39,169,169,169,169,188,39, + 169,169,169,169,169,169,39,169,169,169,169,39,169,39,39,140, + 39,39,39,169,39,39,39,39,39,39,207,188,39,188,188,207, + 207,207,39,127,207,207,207,39,207,127,207,39,188,207,207,207, + 188,207,207,207,188,207,207,218,188,218,218,207,207,207,218,218, + 207,207,218,218,207,207,207,207,207,236,218,236,218,218,207,218, + 218,207,218,207,207,218,188,207,218,207,207,207,207,207,207,207, + 207,207,89,207,89,207,207,207,39,89,89,207,207,89,207,207, + 207,39,119,207,207,89,89,236,236,207,143,89,207,89,236,89, + 236,89,89,89,207,127,89,207,207,207,207,207,207,207,89,89, + 127,89,89,143,89,89,89,143,89,127,236,143,236,159,240,47, + 17,111,183,243,132,42,109,0,167,194,76,76,148,148,232,148, + 232,232,76,52,204,168,17,243,122,167,194,76,76,148,232,232, + 148,148,232,232,52,204,168,17,243,122,167,194,76,76,148,232, + 232,148,232,232,76,52,204,168,17,243,122,167,194,76,76,148, + 232,232,148,232,232,76,52,204,168,17,109,122,167,194,76,76, + 148,232,148,148,232,232,52,52,204,168,26,211,122,167,194,76, + 232,232,232,232,148,148,232,52,52,204,168,26,211,122,167,194, + 76,232,232,232,232,148,148,232,232,52,204,168,26,211,122,167, + 194,76,232,148,232,232,148,148,148,52,52,204,168,17,109,122, + 167,194,76,76,148,232,232,148,232,148,52,52,204,168,12,243, + 122,167,194,76,232,148,148,232,148,148,232,52,52,204,168,12, + 109,122,167,194,76,76,148,232,232,148,148,232,76,52,204,168, + 26,109,122,167,194,76,76,148,148,232,148,232,232,76,52,204, + 168,26,211,122,167,194,76,76,232,232,232,148,148,148,52,52, + 204,168,12,243,122,167,194,76,232,232,148,232,148,232,232,52, + 52,204,168,12,109,122,167,194,76,76,232,148,232,148,148,232, + 76,52,204,168,26,8,122,167,194,76,232,232,148,232,148,148, + 232,232,52,204,168,12,243,122,167,194,76,76,148,232,148,148, + 232,232,76,52,204,154,26,109,122,167,194,76,76,148,232,232, + 148,232,232,76,52,204,222,26,8,17,17,150,8,150,99,181, + 114,114,144,114,144,144,144,144,144,144,244,144,144,244,144,144, + 244,144,144,244,144,144,244,244,244,144,244,144,244,244,244,144, + 244,244,244,244,144,244,144,144,244,244,244,244,144,144,144,144, + 244,144,144,244,144,244,144,144,244,144,244,144,244,144,244,244, + 218,169,188,169,188,169,169,169,188,169,188,169,169,169,169,39, + 39,140,140,169,169,39,169,39,39,169,39,169,188,169,169,169, + 39,169,188,169,39,39,169,169,39,39,39,169,188,169,169,39, + 169,140,39,39,39,39,39,39,188,188,188,188,188,127,207,39, + 127,39,207,39,207,207,207,207,207,188,188,207,207,188,207,207, + 207,188,188,207,218,188,218,207,218,207,207,218,207,207,207,188, + 218,218,207,207,218,218,218,218,218,218,207,218,207,236,218,207, + 207,207,207,236,207,89,207,207,207,207,207,207,207,236,207,236, + 207,207,207,89,207,207,89,89,89,89,207,89,89,89,89,89, + 89,89,207,89,89,207,89,207,89,89,89,236,89,207,236,236, + 89,236,143,89,89,89,39,127,207,127,207,89,127,207,127,207, + 89,89,127,89,89,127,89,89,89,119,89,89,89,236,108,47, + 26,111,26,187,187,187,109,0,220,32,232,148,148,148,148,147, + 232,148,232,232,231,222,26,211,122,237,32,232,148,147,148,148, + 148,148,148,52,232,231,222,219,211,122,237,32,232,148,148,148, + 148,148,148,232,232,232,231,222,26,109,122,79,32,232,148,148, + 148,148,148,232,148,52,232,231,222,219,243,122,237,32,232,148, + 148,148,148,147,148,148,76,232,231,222,219,243,122,237,32,232, + 232,148,148,148,27,148,148,76,232,231,222,219,8,122,237,32, + 232,232,148,148,148,148,148,232,76,232,231,222,17,243,122,237, + 32,232,232,148,148,148,147,148,148,232,232,231,222,26,8,122, + 237,32,232,148,148,148,148,147,148,232,232,232,231,222,219,211, + 122,237,32,232,232,148,148,148,148,148,148,76,232,231,222,219, + 243,122,237,32,232,148,148,148,148,148,148,148,52,232,231,222, + 219,243,122,237,32,232,148,148,148,148,147,232,148,232,232,231, + 168,17,243,122,237,32,232,148,148,148,148,148,148,148,76,232, + 231,222,26,211,122,237,32,232,232,148,148,148,147,148,148,76, + 232,231,222,219,243,122,237,32,232,148,148,148,148,148,148,148, + 232,232,231,222,219,211,122,237,32,232,232,148,148,148,148,148, + 232,76,232,231,222,26,211,122,237,32,232,148,148,148,148,147, + 148,232,232,232,231,222,219,243,122,237,32,232,148,148,148,148, + 147,232,232,232,148,231,168,26,211,17,12,12,243,17,141,89, + 114,144,114,144,144,144,144,144,144,144,144,144,144,244,144,144, + 144,144,144,244,144,144,244,144,144,244,244,144,144,144,244,244, + 244,144,244,244,144,244,244,144,244,144,144,144,244,244,144,144, + 144,144,144,144,144,144,244,144,144,144,244,144,144,144,144,144, + 218,88,218,218,218,218,169,88,188,169,188,39,39,169,169,169, + 169,188,169,140,169,39,169,169,188,169,39,169,39,169,169,169, + 39,169,39,169,169,169,39,169,39,188,188,169,39,188,169,39, + 188,169,39,39,188,39,188,39,188,188,188,207,188,188,127,188, + 207,188,207,127,207,207,207,207,207,207,188,207,207,127,207,207, + 207,207,218,207,218,188,218,207,218,218,207,218,218,218,218,207, + 207,218,218,207,207,218,236,218,218,218,218,218,218,236,218,236, + 218,236,207,218,207,236,207,207,188,207,207,236,207,207,207,207, + 89,207,207,89,89,207,207,89,89,89,89,89,89,89,89,89, + 89,89,207,236,89,143,89,236,236,89,236,236,236,236,236,236, + 236,236,143,207,89,89,89,207,89,207,39,89,89,89,127,89, + 127,89,89,127,89,127,127,89,127,236,236,236,236,159,108,47, + 26,109,183,109,187,219,109,0,138,117,193,193,157,157,189,189, + 157,193,193,194,70,31,26,8,122,138,117,193,157,157,157,189, + 189,157,193,193,85,70,222,26,211,122,138,117,193,193,157,157, + 189,189,157,193,193,85,70,31,26,243,122,138,117,193,193,157, + 157,189,189,157,193,193,85,70,222,187,243,122,138,117,193,193, + 157,157,189,189,157,193,193,85,70,31,26,8,42,138,117,193, + 193,157,157,189,189,157,193,193,194,70,31,26,8,42,138,117, + 193,193,157,157,189,189,157,193,193,85,70,222,26,211,122,138, + 117,193,193,157,157,189,189,157,157,193,85,70,31,26,8,42, + 138,117,193,193,157,157,189,189,157,157,193,194,70,222,26,109, + 122,138,117,193,157,157,157,189,189,157,193,193,194,70,31,26, + 243,122,138,117,193,193,157,157,189,189,157,193,193,85,70,31, + 17,243,42,138,117,193,193,157,157,189,189,157,193,193,32,70, + 31,26,243,42,138,117,193,193,157,157,189,189,157,193,193,194, + 70,129,26,211,122,138,117,193,157,157,157,189,189,157,193,193, + 194,70,129,26,211,122,138,117,193,193,157,157,189,189,157,193, + 193,85,70,31,26,243,122,138,117,193,193,157,157,189,189,157, + 193,193,85,70,31,26,8,42,138,117,193,193,157,157,189,189, + 157,157,193,85,70,31,26,8,122,138,117,193,193,157,157,189, + 189,157,157,193,194,70,228,26,109,17,12,12,243,17,141,114, + 114,144,144,144,144,144,114,144,144,144,244,144,144,144,244,144, + 144,244,144,144,244,144,144,144,244,144,144,244,144,244,144,144, + 244,244,144,144,244,144,144,244,144,244,144,244,144,144,244,144, + 244,144,244,144,244,144,144,144,144,144,144,244,244,144,244,244, + 218,218,218,218,188,88,218,218,88,218,169,169,169,169,169,169, + 188,169,169,188,39,169,39,188,169,39,169,169,169,188,188,169, + 169,39,188,188,188,188,169,188,169,169,39,188,188,188,188,188, + 39,188,39,188,39,188,39,188,188,188,207,188,207,207,207,207, + 127,207,39,207,127,127,207,207,188,188,207,188,207,207,207,207, + 218,218,188,207,207,207,188,207,207,207,218,218,218,207,207,218, + 218,236,207,218,218,207,218,207,218,236,236,236,207,218,207,207, + 236,207,218,236,207,207,207,207,207,207,236,207,207,236,207,236, + 207,89,236,236,89,89,89,236,236,236,236,236,236,89,143,236, + 207,143,89,207,143,89,236,207,236,236,236,89,236,207,143,89, + 143,89,236,89,143,89,143,89,89,89,89,89,89,89,89,127, + 89,127,143,89,89,89,236,236,119,236,236,236,236,58,240,59, + 17,187,42,109,126,26,109,122,92,87,21,21,156,43,13,13, + 30,72,21,18,18,47,17,243,0,226,87,21,87,242,30,13, + 13,30,242,21,18,18,46,12,12,0,226,87,18,72,242,30, + 13,13,30,242,21,18,18,47,12,187,0,226,87,21,21,156, + 30,86,13,30,242,21,18,18,35,26,12,122,226,87,18,72, + 242,30,13,13,30,242,21,18,18,35,17,243,0,226,87,18, + 72,242,30,13,13,30,242,21,18,18,47,12,243,0,226,87, + 18,72,242,30,13,13,30,242,21,33,18,46,12,12,0,226, + 21,21,21,156,43,13,13,30,72,21,18,18,47,17,243,0, + 226,87,18,72,242,30,13,13,30,72,21,18,18,46,12,12, + 122,92,87,21,72,242,30,13,13,30,242,21,18,18,35,12, + 187,0,226,87,18,72,242,30,13,13,30,242,21,18,18,59, + 26,12,0,226,87,18,72,242,30,13,13,30,242,18,18,18, + 59,12,12,0,226,87,18,72,242,30,13,13,30,242,21,18, + 18,35,26,12,0,226,87,21,72,242,30,86,13,30,242,21, + 18,18,46,91,12,0,226,87,18,72,242,30,13,13,30,242, + 21,18,18,35,12,187,0,226,87,21,21,156,30,13,13,30, + 242,21,33,18,59,17,243,0,226,87,18,72,242,30,13,13, + 30,72,21,18,18,59,17,109,0,226,87,18,72,242,30,86, + 13,30,72,21,21,18,35,12,243,219,12,243,8,150,235,89, + 114,114,114,114,114,144,144,144,114,144,114,144,144,144,144,144, + 144,144,144,144,244,144,144,144,144,144,144,144,144,144,144,144, + 144,244,144,144,144,144,144,144,144,244,144,244,144,144,244,144, + 244,144,244,144,144,244,244,144,244,144,144,144,244,144,144,144, + 218,218,218,218,218,218,88,218,218,218,218,88,218,188,188,169, + 188,188,169,88,188,169,169,188,169,188,188,188,188,188,188,188, + 188,188,188,188,188,188,188,218,188,188,188,188,188,188,188,188, + 188,188,188,188,188,188,188,207,188,188,188,188,188,127,188,188, + 188,207,188,207,207,207,207,207,207,127,207,207,207,218,207,89, + 207,207,218,218,218,218,218,218,218,207,207,207,218,218,218,207, + 218,218,207,236,218,207,218,207,207,207,207,236,207,236,218,207, + 218,236,207,236,207,236,89,89,236,207,89,236,236,236,89,236, + 236,207,207,236,236,236,207,236,119,236,236,236,236,89,207,89, + 236,89,89,89,236,207,89,207,143,207,236,236,89,236,207,236, + 236,89,236,236,127,89,127,207,127,89,127,89,89,89,89,89, + 89,236,89,236,143,236,236,236,236,119,143,143,236,159,108,47, + 26,111,42,12,187,26,109,221,40,23,250,86,179,146,136,51, + 146,86,86,250,28,91,26,8,0,40,23,250,86,149,149,51, + 51,149,179,250,86,28,163,12,8,0,203,19,250,86,179,149, + 51,51,149,86,86,250,28,91,17,8,0,203,23,250,86,179, + 146,51,51,149,86,86,250,28,163,12,8,0,40,19,250,86, + 179,149,51,51,149,86,86,250,28,187,26,8,0,40,19,250, + 86,179,149,51,136,146,179,86,250,28,187,26,8,0,40,19, + 250,86,179,149,51,51,149,86,86,250,28,163,187,8,221,40, + 23,250,86,179,146,51,51,146,179,86,250,28,187,26,8,0, + 40,19,250,86,179,149,51,51,146,179,86,250,28,163,26,8, + 221,40,23,250,86,149,149,51,51,149,179,250,250,28,187,12, + 8,0,40,19,250,86,179,149,51,51,149,86,86,250,28,111, + 187,8,0,40,19,250,86,179,149,51,136,149,179,250,86,28, + 187,187,8,0,203,19,250,86,179,149,51,51,149,179,86,250, + 28,163,12,8,0,40,23,250,86,179,149,51,118,149,179,250, + 86,138,111,12,8,0,203,19,250,86,149,149,51,51,149,86, + 86,250,28,187,17,8,0,203,23,250,86,179,149,51,51,149, + 86,86,250,28,187,26,8,0,40,19,250,86,179,149,51,51, + 146,179,86,250,28,187,26,8,0,203,19,250,86,179,149,51, + 51,146,179,250,250,28,50,12,211,187,187,12,12,150,99,181, + 114,114,140,144,114,140,144,144,144,144,144,144,144,144,144,144, + 144,144,144,144,144,244,144,144,244,144,144,144,144,144,144,144, + 144,144,144,144,144,144,144,144,144,144,144,144,244,144,144,144, + 244,144,144,244,144,144,244,144,144,244,144,144,244,144,144,244, + 218,218,218,218,218,218,218,218,88,88,218,218,88,88,218,218, + 88,218,218,218,169,218,218,188,218,169,169,169,169,169,188,188, + 169,169,188,188,188,218,218,169,218,88,188,218,188,218,188,218, + 188,188,188,188,207,188,188,188,207,188,207,207,207,207,207,207, + 207,188,207,188,207,207,207,207,207,207,207,218,207,207,218,188, + 207,218,207,207,218,207,218,188,207,218,218,218,236,207,207,218, + 207,236,218,218,236,236,236,236,207,218,218,218,236,207,236,218, + 236,207,236,236,236,207,236,236,207,89,236,236,89,89,236,89, + 207,89,89,89,89,89,89,89,89,89,89,89,89,236,89,236, + 236,236,236,236,89,89,236,89,89,89,143,207,236,89,236,89, + 207,236,127,89,236,236,89,89,119,127,89,89,127,143,89,143, + 236,236,143,236,236,236,236,236,119,143,119,119,236,58,108,64, + 26,111,219,109,187,187,109,0,40,32,157,189,189,189,147,189, + 189,189,157,85,128,91,219,211,0,40,32,157,189,189,189,189, + 189,189,189,157,85,204,61,42,211,0,95,32,157,189,189,189, + 189,189,189,189,157,85,128,91,219,211,0,95,32,157,189,189, + 147,189,189,189,189,157,85,204,61,219,211,0,95,32,157,189, + 189,189,189,189,189,189,157,85,204,61,219,211,0,95,32,157, + 189,189,189,189,189,189,189,157,85,128,61,219,211,0,95,32, + 157,189,189,189,189,189,189,189,157,85,204,61,219,243,0,47, + 32,157,189,189,189,189,189,189,189,157,85,128,61,219,211,0, + 95,32,157,189,189,189,189,189,189,189,157,85,204,91,219,243, + 0,40,32,157,189,189,189,189,189,189,189,157,85,204,61,219, + 211,0,95,32,157,189,189,189,189,189,189,189,157,85,204,61, + 219,211,0,95,32,157,189,189,189,189,189,189,189,189,85,204, + 61,219,211,0,95,32,157,189,189,189,189,189,189,189,157,85, + 128,61,219,211,0,40,32,157,189,189,189,189,189,189,189,157, + 85,204,91,219,243,0,95,32,157,189,189,189,189,189,189,189, + 157,85,204,61,219,211,0,95,32,157,189,189,189,189,189,189, + 189,157,85,204,61,219,211,0,95,32,157,189,189,189,189,189, + 189,189,157,85,204,61,219,211,0,95,32,157,189,189,147,189, + 189,189,189,157,85,128,91,42,243,132,243,243,150,219,99,119, + 114,114,114,114,144,114,114,144,114,144,144,144,144,144,144,144, + 144,144,144,144,144,144,144,144,144,244,144,144,144,144,144,144, + 144,144,144,144,244,144,144,144,144,244,144,144,144,244,144,144, + 144,244,144,144,244,144,144,244,144,144,244,144,244,144,144,144, + 218,218,218,218,218,88,218,218,218,218,88,218,218,88,88,218, + 88,169,88,218,169,188,218,169,218,218,218,218,188,169,218,169, + 218,88,188,188,188,169,188,188,188,218,188,188,188,218,169,218, + 88,188,188,188,207,207,188,127,188,188,127,188,188,207,188,188, + 207,188,207,188,188,207,207,207,218,207,207,218,207,207,218,207, + 207,207,218,236,218,207,218,218,218,218,218,218,236,153,236,218, + 207,236,207,207,218,207,207,218,207,89,89,207,236,207,236,207, + 236,207,207,236,236,89,89,119,236,236,89,236,236,236,236,236, + 236,89,207,207,236,236,236,236,119,236,236,236,236,236,236,89, + 236,236,236,236,236,89,236,236,236,236,89,236,143,89,143,207, + 207,89,89,89,236,236,236,127,119,89,143,89,236,143,89,143, + 89,236,143,119,143,236,143,236,119,159,236,159,159,119,108,142, + 26,150,42,109,183,183,111,0,40,53,52,76,232,148,148,148, + 148,232,52,27,230,91,0,243,0,40,170,232,76,232,148,148, + 148,148,232,52,27,230,91,122,243,0,40,53,52,232,232,148, + 148,148,148,232,52,27,230,91,0,243,0,40,53,52,232,148, + 148,148,147,148,232,52,198,230,91,122,243,0,40,53,52,76, + 148,76,148,147,148,76,76,27,230,91,122,243,0,40,53,52, + 76,148,232,232,148,148,232,52,27,230,91,122,243,0,40,53, + 52,232,232,148,148,148,148,232,52,198,230,26,42,243,0,40, + 53,232,76,232,148,148,148,148,232,52,27,230,91,122,243,0, + 40,53,52,232,232,148,148,148,148,232,52,27,230,91,122,8, + 0,40,53,232,52,232,148,76,148,148,232,52,27,230,26,122, + 243,0,40,45,52,232,232,148,76,147,148,232,52,27,230,26, + 122,243,0,40,53,52,76,232,232,232,148,147,232,52,27,230, + 26,162,243,0,40,53,52,232,232,148,148,148,148,232,52,27, + 230,91,122,243,0,40,53,232,52,232,148,76,147,148,232,76, + 27,230,26,42,243,0,40,53,52,76,232,148,76,148,148,232, + 52,27,230,26,122,243,0,40,53,52,232,148,76,148,148,148, + 232,52,185,230,91,0,243,0,40,53,52,232,232,148,148,148, + 148,232,52,198,230,91,122,243,0,40,53,52,232,148,148,148, + 148,148,232,52,27,230,187,78,243,219,12,12,243,132,99,181, + 114,114,114,114,144,140,114,144,114,114,114,144,144,144,144,114, + 144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144, + 144,144,144,144,144,144,144,144,144,144,144,244,144,144,244,144, + 144,144,244,144,144,244,144,244,244,144,144,144,244,144,144,244, + 218,218,218,218,218,218,218,218,88,218,218,218,218,218,218,88, + 218,218,218,169,218,88,188,218,188,188,169,169,169,88,169,188, + 169,188,188,188,188,188,188,169,188,188,188,188,188,188,188,188, + 207,218,207,188,127,188,188,188,207,207,207,218,207,218,218,218, + 188,207,207,207,218,188,207,218,207,207,218,207,218,218,207,218, + 218,218,207,207,207,218,236,236,236,236,236,218,218,207,218,207, + 218,207,236,218,236,236,236,89,89,207,207,236,236,236,236,236, + 207,236,236,236,58,236,236,89,236,236,236,236,236,236,236,89, + 89,236,236,236,89,89,89,236,236,236,236,236,236,236,236,236, + 236,236,236,236,89,143,236,89,143,236,236,89,89,89,89,89, + 127,89,127,236,236,236,236,236,89,236,236,236,236,236,236,236, + 143,119,119,143,119,143,159,119,159,236,159,236,236,240,240,44, + 26,187,183,243,187,42,109,0,40,204,198,232,232,147,148,147, + 147,76,27,185,230,91,26,211,0,40,170,185,76,232,232,148, + 148,147,52,232,185,230,91,42,211,0,212,231,232,76,232,232, + 148,148,147,76,27,185,230,91,26,211,0,40,204,27,76,232, + 232,148,148,148,76,27,27,230,91,42,211,0,40,204,27,76, + 232,148,148,148,148,232,27,185,230,91,42,211,0,212,170,52, + 232,232,232,148,147,147,76,27,185,230,91,42,211,0,212,170, + 52,232,232,232,148,148,147,52,232,27,230,91,42,211,0,212, + 231,52,76,232,232,148,148,147,76,27,185,230,91,42,211,0, + 40,204,27,76,232,232,148,147,147,76,232,185,230,91,26,211, + 0,40,204,27,76,232,232,147,147,147,76,27,185,230,91,26, + 211,0,212,170,232,76,232,148,148,148,147,76,27,198,230,91, + 26,211,0,40,204,27,232,232,148,148,147,148,232,27,198,230, + 91,26,211,0,212,231,232,76,232,232,148,148,147,76,27,185, + 230,91,26,211,0,212,231,52,76,232,148,148,148,147,76,232, + 185,230,91,42,211,0,212,170,52,232,232,148,147,147,147,76, + 232,198,230,91,26,211,0,40,204,27,76,232,148,148,147,147, + 76,232,185,230,91,26,211,0,40,204,27,76,232,232,148,148, + 147,76,27,27,230,91,42,211,0,40,204,27,52,148,232,148, + 148,147,76,27,185,230,91,42,211,187,109,150,12,183,235,119, + 114,114,114,140,114,114,114,114,144,144,144,114,144,114,144,144, + 144,144,144,144,144,144,144,144,144,144,244,144,144,144,144,144, + 144,144,144,144,114,244,144,144,144,244,144,144,144,144,144,244, + 144,244,144,244,244,244,144,144,244,244,144,144,244,144,144,144, + 218,218,218,218,218,218,218,218,218,88,218,169,88,188,218,88, + 169,88,218,88,218,188,188,218,88,218,218,88,218,188,88,188, + 218,169,188,188,188,188,207,188,188,188,188,188,188,188,188,188, + 188,188,218,207,207,207,188,188,188,188,188,188,188,207,207,218, + 218,207,207,207,207,218,207,188,218,207,218,207,218,218,188,218, + 207,218,218,218,207,218,218,207,218,207,236,236,218,236,236,207, + 218,218,236,207,236,207,236,207,236,236,89,89,236,89,236,89, + 89,89,89,89,236,236,236,119,119,119,119,119,119,236,119,236, + 236,236,236,236,236,236,89,89,89,236,236,236,236,236,236,236, + 236,207,207,236,89,207,236,236,89,207,236,236,236,143,236,236, + 236,89,89,236,236,236,236,143,236,236,143,119,236,236,236,159, + 236,236,159,236,159,236,143,143,159,236,159,143,159,159,108,47, + 26,111,183,187,187,183,111,0,40,98,170,45,45,194,194,194, + 194,45,194,165,230,91,0,12,0,212,98,165,45,53,194,194, + 194,194,45,45,165,230,91,0,12,0,212,98,165,45,53,194, + 194,194,194,45,194,165,230,91,0,12,0,40,98,170,45,53, + 194,194,194,194,45,53,165,230,91,0,12,0,40,98,165,45, + 53,53,194,194,194,45,53,165,230,91,0,12,0,212,98,165, + 45,53,194,194,194,194,45,45,45,230,91,0,12,0,212,98, + 165,45,53,194,194,194,194,194,45,165,230,91,0,12,0,212, + 98,45,45,53,194,194,194,194,45,45,45,230,91,0,12,0, + 40,98,165,45,53,194,194,194,194,98,53,165,230,91,0,12, + 0,40,98,170,45,53,53,194,194,194,45,53,165,230,91,0, + 12,0,212,98,165,45,53,194,194,194,194,45,53,165,230,91, + 0,12,0,40,98,170,45,53,194,194,194,194,45,53,165,230, + 91,0,12,0,212,98,165,45,53,194,194,194,194,45,53,165, + 230,91,0,12,0,212,98,165,45,53,194,194,194,194,194,45, + 165,230,61,0,12,0,212,98,165,45,53,53,194,194,194,194, + 45,165,230,91,0,12,0,40,98,231,45,53,194,194,194,194, + 194,45,165,230,91,0,12,0,40,98,165,45,53,194,194,194, + 194,45,53,165,230,91,0,12,0,40,98,170,45,45,194,194, + 194,194,45,45,45,230,91,0,187,26,12,243,12,132,141,181, + 114,114,114,114,114,144,144,114,114,114,144,144,114,144,114,144, + 144,144,144,144,144,144,144,144,144,144,144,144,144,244,144,144, + 144,244,144,144,144,144,144,144,244,144,144,244,144,244,144,144, + 244,244,144,244,144,244,244,244,244,244,244,244,244,144,244,244, + 218,218,153,218,218,88,218,88,218,218,188,218,218,88,218,218, + 218,218,169,218,169,218,218,169,218,169,188,218,169,218,188,88, + 169,218,188,188,188,188,169,218,188,188,188,188,188,218,188,188, + 188,207,188,188,207,207,127,188,188,207,207,218,207,207,218,207, + 207,218,218,218,218,218,188,218,207,207,207,218,207,218,218,207, + 218,236,218,236,236,218,207,218,207,218,218,207,236,207,207,236, + 207,236,89,236,236,236,236,181,89,89,236,236,89,236,236,181, + 236,236,236,236,119,236,119,236,236,236,236,236,236,119,236,119, + 89,119,119,236,236,89,207,207,236,89,236,236,119,236,236,236, + 236,236,236,236,236,236,236,89,89,236,236,236,236,119,127,89, + 89,89,143,236,236,236,89,236,236,143,119,143,236,236,159,236, + 143,159,236,159,236,119,159,119,159,143,159,119,236,240,108,64, + 26,132,26,187,183,187,109,0,0,251,123,123,103,167,79,79, + 79,167,123,123,73,12,42,211,0,162,251,251,123,103,167,79, + 79,79,79,123,123,168,26,26,211,0,0,251,251,123,167,103, + 79,79,79,167,123,123,168,26,42,211,0,162,251,123,123,167, + 103,79,220,79,167,123,123,168,26,26,211,0,162,251,251,123, + 103,79,79,220,79,167,123,123,168,26,42,211,0,94,251,251, + 123,55,167,79,79,79,167,167,251,168,26,42,211,0,221,251, + 251,123,167,103,79,79,79,167,123,123,168,91,42,211,0,221, + 31,251,123,167,103,220,79,79,167,167,251,168,26,42,211,0, + 162,251,251,123,103,167,79,79,79,167,123,123,168,26,42,211, + 0,221,137,123,228,167,55,79,79,79,167,123,123,168,91,26, + 211,0,162,251,251,123,167,55,79,79,79,167,123,123,168,91, + 26,211,0,162,251,123,123,167,167,79,220,79,167,123,123,168, + 26,26,211,0,0,251,251,123,103,167,79,79,79,79,123,123, + 168,26,26,211,0,221,251,123,123,103,167,79,79,79,167,123, + 123,168,26,42,211,0,221,251,251,123,123,79,79,79,79,167, + 123,123,168,91,26,211,0,0,251,123,123,103,167,79,79,79, + 167,123,123,168,26,42,211,0,162,251,251,123,103,167,79,79, + 79,167,123,123,168,26,42,211,0,162,251,123,123,167,103,220, + 79,79,167,123,123,168,26,26,211,187,243,187,243,132,99,181, + 89,114,114,114,114,114,114,144,114,144,114,114,144,144,114,144, + 114,144,144,144,114,144,144,144,144,144,144,144,144,144,144,144, + 144,144,144,144,144,244,144,144,144,144,144,244,144,144,244,144, + 144,244,244,244,244,244,244,244,244,244,244,244,244,244,144,144, + 218,218,153,218,153,218,218,218,88,218,218,169,218,218,88,218, + 88,218,88,218,88,218,88,88,218,88,188,188,218,88,218,218, + 169,218,88,218,218,218,169,218,88,188,188,188,188,188,188,218, + 188,207,218,188,218,207,207,218,207,218,207,218,207,207,207,218, + 207,207,236,207,207,218,207,218,218,218,218,218,236,236,218,236, + 207,207,218,218,236,236,236,207,207,207,207,218,236,236,207,236, + 207,207,207,207,236,236,236,236,236,89,236,236,236,89,236,236, + 236,89,89,236,181,236,119,119,119,119,119,119,236,236,236,119, + 236,236,89,236,236,236,236,236,236,89,236,236,236,236,236,89, + 236,236,236,89,236,89,236,236,89,143,89,236,236,119,236,236, + 236,89,127,89,127,236,89,143,89,236,119,236,236,236,159,159, + 119,119,236,143,236,236,143,236,159,119,159,159,159,159,108,142, + 26,111,183,109,187,187,109,0,0,0,0,0,0,0,0,0, + 0,0,0,0,26,132,42,12,0,0,0,0,0,0,0,0, + 0,0,0,0,0,219,132,42,150,0,0,0,0,0,0,0, + 162,0,0,0,0,0,219,132,42,12,0,0,0,0,0,0, + 162,0,0,0,0,0,0,219,132,26,12,0,0,0,0,0, + 0,0,0,0,0,0,0,0,219,150,42,243,0,0,0,0, + 0,0,0,0,0,0,0,0,0,183,17,26,243,0,0,0, + 0,0,0,162,162,0,0,0,0,0,219,132,42,150,0,0, + 0,0,0,0,0,0,0,0,0,0,0,219,132,42,12,0, + 0,0,0,0,0,0,0,0,0,0,0,0,219,150,42,12, + 0,0,0,0,0,0,0,0,0,0,0,0,0,219,132,42, + 150,0,0,0,0,0,0,0,0,0,0,0,0,0,219,132, + 42,12,0,0,0,0,0,0,0,0,0,0,0,0,0,219, + 132,26,150,0,0,0,0,0,0,0,0,0,0,0,0,0, + 219,132,26,150,0,0,0,0,0,0,0,0,0,0,0,0, + 0,219,150,42,243,0,0,0,0,0,122,0,0,0,0,0, + 0,0,219,132,42,12,0,0,0,0,0,0,0,0,0,0, + 0,0,0,219,132,26,12,0,0,0,0,0,0,0,0,0, + 0,0,0,0,219,150,42,12,0,0,0,0,0,0,0,0, + 0,0,0,0,0,219,150,26,243,183,150,187,243,132,235,181, + 114,114,114,114,114,114,114,114,114,114,144,144,114,144,144,144, + 114,144,114,144,144,144,244,144,144,144,144,144,144,144,144,144, + 144,144,144,144,144,144,144,144,244,144,244,144,244,144,244,144, + 244,244,244,244,244,244,244,244,244,244,244,244,244,244,144,244, + 218,218,218,218,218,218,218,218,218,88,218,218,88,218,218,169, + 218,169,218,218,218,188,218,218,218,218,88,218,188,218,88,169, + 218,188,218,169,169,169,218,169,188,218,188,188,188,188,188,188, + 218,188,188,207,207,218,218,207,218,207,207,207,218,207,218,207, + 218,218,207,218,218,207,218,218,207,207,207,207,207,207,236,218, + 218,236,207,207,236,236,207,236,236,207,207,236,207,236,236,236, + 236,236,236,236,236,236,236,236,119,58,181,119,119,119,119,119, + 119,119,236,89,236,89,89,89,236,236,89,236,119,119,119,236, + 236,236,236,89,236,236,236,236,236,236,236,89,89,236,236,236, + 236,236,236,236,236,236,236,89,236,89,236,143,89,143,89,89, + 236,89,119,127,89,127,127,89,236,236,236,153,236,236,236,236, + 236,236,159,159,153,159,119,159,119,143,236,159,236,159,108,64, + 26,111,42,109,219,187,187,42,26,26,26,26,42,42,26,219, + 219,219,219,219,17,219,26,187,42,26,26,26,26,42,42,26, + 219,219,219,219,26,26,219,26,187,42,26,26,26,26,42,42, + 26,219,219,219,219,26,219,17,26,187,42,26,26,26,26,42, + 42,26,17,219,219,219,26,26,219,219,187,42,26,26,26,26, + 42,42,26,17,219,219,219,26,26,219,42,187,42,26,26,26, + 26,42,42,26,219,219,219,219,26,26,132,42,187,42,26,26, + 26,26,42,122,219,219,219,219,219,42,219,219,42,17,42,17, + 26,26,26,42,42,26,219,219,219,219,26,26,219,219,187,42, + 26,26,26,26,42,42,219,219,219,219,219,26,26,219,219,187, + 42,17,26,26,26,42,42,26,17,219,219,219,42,26,219,219, + 187,42,26,26,26,26,42,42,26,17,219,219,219,42,26,219, + 219,187,42,26,26,26,26,42,42,26,219,219,219,219,26,219, + 219,219,187,42,26,26,26,26,42,42,26,219,219,219,219,26, + 26,219,26,187,42,26,26,26,26,42,42,26,219,219,219,219, + 26,219,219,26,187,42,26,26,26,26,42,42,26,219,219,219, + 219,42,26,219,26,187,26,26,26,26,26,42,42,219,219,219, + 219,219,26,219,219,219,187,42,26,26,26,26,42,42,26,219, + 219,219,219,26,26,219,219,187,42,26,26,26,26,42,42,26, + 219,219,219,219,26,26,219,219,187,42,12,150,150,183,141,181, + 89,114,114,114,114,114,114,114,114,114,114,144,114,114,144,144, + 144,144,144,144,144,114,144,244,144,144,144,144,244,144,144,144, + 144,144,144,144,244,144,144,144,244,144,144,244,144,244,244,144, + 244,244,244,244,244,244,244,36,244,36,244,244,244,244,244,144, + 218,218,218,218,218,218,218,88,218,188,218,218,188,88,218,218, + 218,88,218,88,218,218,218,169,88,218,188,88,218,218,218,188, + 218,169,218,218,218,169,218,218,169,218,188,188,188,218,188,188, + 207,218,218,207,207,207,218,188,218,218,218,207,218,188,218,207, + 218,218,218,218,218,218,207,218,218,218,218,218,218,207,207,207, + 188,207,236,207,218,236,207,207,236,236,207,236,207,236,207,236, + 236,89,89,89,236,236,119,236,236,236,58,119,236,236,236,89, + 236,119,119,236,119,236,119,119,119,119,236,236,236,236,236,236, + 236,236,236,236,236,236,89,236,236,89,236,236,236,236,236,119, + 236,236,236,236,236,236,236,236,236,89,236,207,236,236,236,236, + 143,127,89,236,89,89,236,89,143,89,236,143,159,236,236,159, + 159,159,119,159,236,143,236,143,159,119,236,159,159,159,240,47, + 26,111,42,109,183,187,187,219,243,12,132,17,219,17,12,243, + 150,150,12,17,187,17,219,187,17,243,12,132,17,219,12,12, + 243,150,150,150,150,12,17,26,12,219,243,12,132,17,219,17, + 12,243,150,150,150,12,17,17,219,187,17,150,12,132,17,219, + 17,12,243,150,150,150,150,12,219,219,187,17,243,12,132,17, + 219,12,12,243,150,150,150,150,12,17,26,12,219,243,12,17, + 17,219,17,12,243,150,150,150,150,12,219,26,187,219,243,12, + 132,17,219,12,12,243,150,150,150,17,12,17,26,187,26,150, + 12,132,17,219,17,12,243,150,150,150,150,187,17,219,12,219, + 243,12,132,17,219,17,12,243,150,150,150,150,12,219,219,12, + 26,150,12,132,17,219,17,12,243,150,150,150,150,12,219,26, + 12,219,243,12,17,17,219,17,12,243,150,150,150,150,12,219, + 219,12,219,243,12,132,17,219,17,12,243,150,150,150,12,12, + 219,26,187,17,243,12,132,17,219,12,12,243,150,150,150,150, + 12,219,26,12,219,243,12,132,17,219,12,12,243,150,150,150, + 12,187,17,26,187,219,243,12,132,17,219,12,12,243,150,150, + 150,150,12,219,219,12,219,243,12,132,17,219,17,12,243,150, + 150,150,12,12,219,219,12,219,243,12,132,17,219,17,12,243, + 150,150,150,150,12,17,219,187,17,150,12,132,17,219,17,12, + 243,150,150,150,150,12,219,26,187,219,12,187,150,132,99,181, + 114,114,114,114,114,114,114,144,114,114,114,144,144,114,114,144, + 144,114,144,144,144,144,244,144,144,144,144,144,144,144,244,144, + 244,144,144,144,144,144,244,144,244,244,244,244,244,144,244,244, + 244,244,244,244,36,36,36,244,36,244,244,244,244,244,244,144, + 188,188,218,188,218,218,218,218,218,218,188,218,88,218,218,88, + 88,218,169,218,88,169,218,218,218,88,218,218,218,169,218,88, + 88,218,188,188,88,218,218,188,218,188,218,218,218,188,207,188, + 188,207,188,218,218,218,188,218,218,218,188,218,218,218,218,218, + 207,218,207,236,207,236,218,218,236,207,236,236,236,218,207,207, + 207,207,207,207,236,236,236,236,207,207,89,236,236,236,236,89, + 89,236,89,236,236,181,236,119,119,119,236,236,119,119,119,119, + 119,236,236,119,236,119,236,89,236,236,119,119,119,119,236,119, + 119,119,236,89,89,236,236,89,119,119,236,119,119,236,236,89, + 236,236,236,236,207,143,236,207,89,236,89,236,89,236,236,236, + 119,236,236,89,236,89,89,89,89,143,119,119,236,236,159,236, + 236,236,236,236,236,119,159,119,119,159,159,236,159,58,108,44, + 26,150,183,109,26,17,166,26,150,17,17,17,219,12,26,243, + 12,150,150,17,17,17,42,243,26,150,12,17,17,219,12,26, + 243,12,150,12,219,17,219,42,109,26,150,12,17,219,17,12, + 26,243,12,12,12,219,12,219,42,243,26,150,12,17,17,219, + 12,26,243,12,150,12,219,17,17,26,243,26,150,12,17,17, + 219,17,26,243,12,12,12,219,17,219,26,187,26,150,12,132, + 17,219,12,26,243,12,150,12,219,17,17,26,12,26,150,12, + 17,17,219,12,26,243,12,150,12,17,17,219,26,12,219,150, + 17,17,17,219,12,26,243,12,150,12,17,17,17,42,109,26, + 150,12,17,17,219,12,26,243,12,12,12,219,17,17,26,12, + 219,150,17,17,219,17,12,26,243,12,12,12,17,17,17,42, + 109,26,150,12,132,187,17,12,26,150,12,150,12,219,17,17, + 26,12,26,150,17,17,219,17,12,26,243,12,150,12,17,17, + 17,42,243,26,150,12,17,17,219,12,26,243,12,150,12,219, + 17,17,26,12,26,150,17,17,219,17,17,26,243,12,150,12, + 17,17,219,26,12,26,150,12,17,17,219,12,26,150,12,150, + 12,17,17,17,26,12,26,150,17,17,17,219,12,26,243,12, + 150,12,17,17,17,42,109,26,150,12,17,17,219,12,26,243, + 12,150,12,219,17,219,26,12,26,150,12,17,17,219,12,17, + 243,150,12,12,219,17,17,219,187,183,12,150,150,132,141,119, + 114,114,114,114,114,114,144,114,114,144,144,114,144,144,144,114, + 144,144,144,144,144,144,144,144,244,144,144,144,244,144,144,144, + 144,244,144,144,244,144,144,144,144,244,244,244,244,244,244,244, + 244,244,244,244,244,244,36,244,36,244,36,244,244,244,144,244, + 218,218,218,188,218,169,218,88,218,88,188,218,169,218,218,218, + 218,218,88,218,218,218,88,218,218,88,188,188,218,188,218,218, + 188,218,218,218,188,169,218,188,218,207,207,207,218,218,218,218, + 188,218,207,207,188,218,218,207,218,218,218,218,218,188,218,218, + 218,218,218,236,218,236,236,207,236,218,207,207,181,236,236,236, + 207,207,236,89,89,89,236,181,89,89,89,181,236,236,236,236, + 181,236,119,89,236,236,89,119,119,119,119,119,119,119,236,236, + 119,119,236,236,236,89,236,236,236,89,236,236,236,119,89,236, + 236,236,236,236,89,236,236,236,89,119,89,89,119,236,236,236, + 119,236,236,236,236,207,89,236,236,236,236,236,89,236,236,236, + 236,236,236,89,236,127,89,89,89,127,89,89,236,236,236,119, + 159,236,159,159,143,236,159,236,143,119,119,236,159,58,240,47, + 42,187,219,224,187,187,111,26,150,150,132,17,150,150,17,150, + 17,17,12,17,17,17,26,109,26,132,150,132,132,132,150,26, + 150,17,150,12,12,12,17,26,243,26,150,132,132,132,132,150, + 219,150,150,150,17,12,12,17,26,109,26,150,17,132,17,150, + 150,17,150,17,150,12,132,17,219,26,109,26,132,150,219,17, + 150,150,219,150,150,150,12,17,12,17,17,109,26,132,17,132, + 17,150,150,17,150,17,150,12,17,187,17,17,109,26,150,132, + 132,17,12,150,219,150,17,150,12,17,12,17,17,109,26,150, + 17,132,17,150,150,219,150,17,150,17,150,17,17,26,109,26, + 150,132,132,17,12,150,17,150,150,132,12,132,17,219,17,109, + 26,150,150,132,17,132,150,219,150,150,150,17,132,17,17,26, + 243,219,132,17,219,132,132,150,17,150,12,150,17,150,17,219, + 17,109,26,150,17,150,17,150,150,219,150,17,150,17,132,17, + 17,26,109,26,132,150,132,132,132,150,26,150,17,150,12,12, + 17,17,17,109,26,150,17,150,132,132,150,219,150,17,150,12, + 17,12,17,17,109,26,150,17,17,17,150,150,17,150,17,150, + 17,17,17,219,17,109,26,150,150,132,17,12,150,219,150,17, + 150,17,150,17,17,26,109,26,150,132,132,132,150,150,219,150, + 17,150,12,132,12,17,17,109,26,150,132,132,17,150,17,219, + 12,150,132,12,132,17,17,17,109,219,12,150,150,150,99,181, + 114,114,114,114,114,114,144,144,114,114,114,144,144,114,144,144, + 144,144,144,144,144,144,144,144,144,144,144,144,244,144,244,144, + 144,144,244,144,144,244,144,244,244,244,244,244,244,244,244,244, + 244,36,36,244,36,36,244,36,36,244,36,244,144,244,144,144, + 218,181,218,218,218,218,218,218,188,218,88,188,188,169,188,169, + 88,169,218,88,169,188,218,188,88,218,218,218,88,218,218,188, + 88,88,218,218,218,218,88,218,218,218,218,218,218,188,207,207, + 218,218,218,218,218,207,207,218,218,218,218,188,218,218,236,236, + 207,236,218,218,207,218,207,218,218,236,236,236,218,207,207,207, + 236,89,207,207,236,236,89,236,119,119,236,236,236,119,236,236, + 236,236,89,119,236,119,119,236,89,119,119,236,236,119,119,119, + 236,236,119,119,236,236,236,236,236,236,236,119,236,89,236,89, + 236,236,89,89,236,236,89,236,236,89,236,119,89,119,236,119, + 89,236,89,236,89,236,236,236,236,236,89,89,236,236,236,236, + 236,236,127,143,89,119,127,89,119,119,119,236,236,89,119,236, + 236,119,236,236,119,159,236,159,119,159,159,236,236,240,108,142, + 26,111,42,182,219,187,150,219,12,219,132,219,17,12,26,150, + 150,150,150,132,12,187,219,243,219,12,219,132,219,17,17,219, + 150,150,17,17,132,17,132,219,109,219,17,17,132,219,17,12, + 26,150,17,17,17,132,17,187,219,243,219,17,150,132,219,17, + 12,26,150,150,17,12,17,187,187,219,243,219,17,17,132,17, + 17,12,26,150,17,17,17,132,17,132,26,243,219,12,17,132, + 219,17,12,26,150,150,17,12,17,12,166,26,243,219,17,17, + 132,219,17,12,26,150,132,17,12,132,17,132,26,243,219,17, + 150,132,219,17,12,26,150,150,17,17,17,17,187,219,243,219, + 17,17,132,219,17,12,26,150,17,17,12,17,12,187,26,243, + 219,17,17,17,219,17,12,26,150,17,17,12,17,17,132,219, + 109,26,12,17,132,219,17,12,26,150,132,12,17,17,12,187, + 26,243,219,17,132,132,219,17,12,26,150,150,17,12,17,12, + 132,219,243,219,12,219,132,219,17,17,219,150,150,17,17,132, + 17,132,26,243,219,17,132,132,219,17,12,26,150,150,17,17, + 132,17,166,26,109,219,17,150,132,219,17,12,26,150,150,17, + 12,132,187,187,26,243,219,17,219,132,219,17,12,26,150,150, + 17,17,17,187,187,219,243,219,17,17,132,219,17,12,26,150, + 150,17,12,17,17,187,26,243,219,17,17,132,219,17,12,26, + 150,17,17,12,17,12,187,26,109,219,17,12,150,17,141,119, + 114,114,114,114,144,114,114,114,144,144,144,144,144,144,144,144, + 144,244,144,144,244,144,144,144,144,244,144,144,244,144,244,144, + 244,244,144,244,144,244,144,144,244,244,244,244,244,244,36,244, + 36,244,244,36,36,244,36,244,36,244,36,36,244,244,144,144, + 218,218,218,218,218,88,218,218,218,218,218,218,218,88,218,218, + 218,169,218,218,218,88,218,218,188,88,88,218,218,88,218,218, + 218,188,218,218,218,218,218,218,218,218,218,218,218,218,218,218, + 236,218,218,207,218,218,218,207,218,218,218,218,218,218,218,236, + 218,236,236,236,236,218,207,207,207,218,218,236,236,236,236,207, + 207,89,236,89,236,236,236,236,236,236,119,236,236,119,119,236, + 119,236,236,89,89,236,89,236,236,119,119,119,236,119,119,119, + 119,236,236,119,119,236,89,89,236,119,89,119,236,89,236,236, + 89,236,236,236,89,119,89,89,236,119,236,236,236,119,89,236, + 236,236,236,236,236,119,236,236,236,236,236,143,89,236,236,236, + 236,89,119,89,143,119,119,89,89,89,236,119,236,236,119,89, + 236,236,119,119,236,119,236,236,236,236,119,143,119,159,108,142, + 26,111,26,109,187,111,111,219,12,17,150,17,132,132,26,12, + 17,17,17,132,132,187,219,109,219,12,17,17,17,150,17,219, + 12,132,150,17,132,187,150,219,243,219,12,17,17,17,150,132, + 26,150,150,150,17,132,132,187,219,243,219,12,219,150,17,132, + 132,219,12,132,150,17,17,132,12,219,211,219,12,17,132,17, + 150,132,219,150,150,150,17,132,187,150,219,211,219,150,17,132, + 17,132,132,26,12,132,150,132,132,17,150,219,211,219,12,17, + 132,150,132,132,219,12,150,132,17,132,187,150,26,211,219,12, + 219,150,17,132,132,26,12,150,150,17,17,132,187,219,211,219, + 12,17,132,150,132,132,219,150,150,150,17,17,132,150,26,211, + 219,12,132,132,17,150,132,219,150,150,132,17,17,187,150,219, + 243,219,150,17,17,12,132,132,219,12,132,150,17,219,150,150, + 219,211,219,12,17,132,17,132,132,219,12,132,150,17,17,187, + 150,219,109,219,12,17,17,17,150,17,26,12,132,150,17,132, + 187,150,219,211,219,12,17,17,17,150,132,219,12,132,150,17, + 132,17,150,219,243,219,17,17,150,17,132,132,219,12,132,150, + 219,150,132,150,219,211,219,12,17,150,150,132,132,219,12,132, + 150,17,17,132,187,219,211,219,12,17,17,17,150,132,219,12, + 132,150,219,17,132,150,219,211,219,12,17,132,17,150,132,219, + 150,150,150,17,17,166,150,42,109,42,17,150,150,17,235,181, + 114,144,114,114,140,144,144,114,114,114,144,144,144,144,144,144, + 144,144,244,144,144,244,244,144,244,144,244,144,244,244,144,244, + 144,144,244,144,144,144,244,144,244,244,244,244,36,244,244,36, + 244,36,36,244,36,36,244,36,36,36,244,244,244,244,244,144, + 218,218,218,218,188,218,218,88,169,218,218,218,169,218,169,218, + 188,218,88,169,218,218,218,88,218,218,218,218,188,218,218,218, + 218,218,88,218,218,218,218,218,218,218,218,218,218,218,218,153, + 218,218,218,218,218,218,218,218,153,218,236,218,236,218,218,218, + 218,218,218,218,207,236,236,218,207,236,236,236,236,236,89,89, + 89,236,119,236,89,236,119,119,119,119,236,119,119,236,236,119, + 236,119,236,119,236,119,119,119,89,236,236,236,119,58,236,236, + 236,119,119,236,236,89,236,236,89,89,236,89,236,236,119,119, + 119,236,236,89,236,236,236,236,236,89,236,119,119,236,236,119, + 119,119,119,236,119,236,236,236,89,236,89,236,89,236,89,236, + 89,236,207,143,236,236,236,236,143,143,236,236,119,236,89,159, + 143,119,143,236,159,236,119,236,119,236,159,119,236,58,240,64, + 26,111,187,182,183,109,109,26,150,17,219,150,132,17,219,150, + 132,150,17,219,26,150,26,8,42,150,17,17,132,150,17,26, + 150,17,132,17,219,219,187,26,211,42,150,17,17,132,132,17, + 219,12,219,132,12,219,26,150,26,8,26,150,17,219,150,132, + 17,42,150,17,132,150,17,26,150,26,187,42,150,150,219,150, + 132,17,26,12,17,132,17,219,17,187,26,187,42,12,17,17, + 150,132,17,219,150,17,132,17,219,17,187,26,187,42,150,17, + 17,17,132,17,26,150,219,150,17,219,17,187,219,12,42,150, + 17,17,132,150,17,219,150,219,132,132,17,26,150,26,12,26, + 150,219,17,17,132,17,26,12,219,132,132,17,26,187,17,187, + 42,150,17,17,150,132,17,26,12,219,150,132,17,17,187,26, + 211,42,12,132,17,150,132,17,26,150,17,132,150,219,26,187, + 26,187,42,150,17,17,150,132,17,26,150,17,132,132,219,219, + 187,26,8,42,150,17,17,132,150,17,219,150,17,132,17,219, + 17,187,26,187,42,150,17,17,150,132,17,26,150,17,132,12, + 219,17,187,26,8,26,150,132,219,150,132,17,26,150,17,150, + 17,219,26,187,26,187,42,150,17,219,17,132,17,26,150,17, + 132,132,17,26,150,26,12,42,150,17,17,150,132,17,26,150, + 219,150,132,17,26,187,26,12,42,150,17,17,150,132,17,219, + 12,219,132,132,17,26,187,26,8,183,12,17,150,132,99,114, + 114,114,144,144,114,144,114,144,144,144,114,144,144,144,144,144, + 144,144,244,144,144,144,244,144,244,144,244,144,244,244,244,244, + 144,244,244,244,244,244,244,244,244,244,36,244,36,244,36,244, + 36,244,36,36,244,36,36,244,36,36,36,36,244,244,244,144, + 218,218,218,218,188,188,218,218,218,169,218,218,218,88,188,218, + 188,218,218,169,88,188,218,188,188,218,88,218,218,88,218,169, + 218,218,218,88,218,218,218,218,218,218,218,218,218,218,218,218, + 153,218,218,218,153,153,218,218,218,218,207,218,207,207,218,236, + 207,236,236,236,207,218,236,236,207,207,89,236,236,181,236,119, + 181,236,89,119,119,236,236,236,119,119,119,236,119,119,236,236, + 236,119,236,119,236,236,89,119,236,119,119,89,236,119,89,119, + 236,236,236,89,236,89,236,236,236,236,236,236,236,236,89,236, + 236,89,236,89,236,119,119,119,236,119,236,89,119,119,119,236, + 236,236,58,236,236,236,236,236,89,143,89,143,89,236,236,236, + 236,89,236,236,236,143,236,159,119,236,143,143,119,143,236,119, + 119,119,159,236,236,89,119,236,119,89,236,236,159,159,108,59, + 26,111,187,224,219,150,224,42,17,17,17,17,17,132,42,12, + 132,150,17,132,26,187,26,211,42,12,17,17,17,150,132,26, + 150,17,150,17,17,219,187,26,211,42,12,17,17,17,17,150, + 219,150,17,150,17,132,26,187,26,109,42,12,219,17,17,17, + 150,42,150,219,12,17,132,26,187,17,211,42,17,17,17,17, + 17,132,219,150,219,150,17,219,17,187,17,211,219,17,17,17, + 17,17,132,42,150,219,12,17,219,17,187,12,211,26,12,17, + 17,17,17,150,26,150,219,150,17,219,219,187,12,211,26,17, + 17,17,17,17,132,26,150,17,12,17,132,26,187,17,109,26, + 12,17,17,17,17,150,219,150,17,12,17,132,17,187,17,211, + 26,12,17,17,17,17,132,219,150,219,12,17,219,219,187,17, + 109,219,17,17,17,17,17,150,42,150,219,12,17,132,17,187, + 17,211,26,12,17,17,17,17,132,42,150,219,12,12,17,17, + 187,26,211,42,12,17,17,17,150,132,26,150,17,150,17,219, + 17,187,17,211,26,12,17,17,17,17,132,42,150,219,150,17, + 17,17,187,26,109,42,12,219,17,17,17,132,42,150,219,150, + 17,132,17,187,12,211,26,12,219,12,17,17,132,42,150,219, + 12,17,132,26,187,17,211,42,17,17,17,17,17,132,26,150, + 219,12,17,132,17,187,17,211,42,17,17,17,17,17,17,219, + 150,17,12,17,219,17,150,26,187,187,17,12,150,17,235,89, + 114,144,144,144,114,144,144,144,114,144,144,144,144,144,144,144, + 244,144,144,244,244,144,244,244,144,144,244,244,144,244,244,244, + 144,244,244,144,244,244,244,244,244,244,36,36,36,244,36,244, + 36,244,36,36,36,244,36,36,36,36,36,36,36,244,244,244, + 188,188,188,39,188,188,188,169,188,188,169,188,188,207,188,188, + 188,188,188,188,207,188,188,188,188,188,218,169,188,218,188,218, + 218,88,218,218,218,218,218,218,218,218,218,153,218,218,218,153, + 218,236,153,153,218,218,153,218,218,218,218,218,218,218,207,207, + 236,207,236,218,236,236,236,236,236,236,207,236,119,236,119,236, + 236,236,58,236,236,119,119,119,236,119,89,181,119,119,119,119, + 119,236,119,236,236,119,119,236,119,236,119,119,119,236,119,89, + 119,119,119,236,89,236,89,89,236,89,89,89,89,236,236,236, + 119,236,236,119,119,89,119,236,119,89,236,236,89,236,236,236, + 236,119,236,236,236,207,89,207,236,236,89,89,236,236,89,89, + 89,143,236,236,236,159,236,236,143,236,119,159,143,119,119,159, + 143,143,236,236,119,236,236,89,89,236,119,119,89,119,240,47, + 26,111,166,182,187,109,111,42,150,17,17,12,150,219,219,150, + 219,17,17,219,17,150,219,187,42,150,17,12,17,150,219,219, + 17,132,17,17,17,219,150,219,187,42,150,219,12,12,150,219, + 219,17,132,17,17,219,17,150,219,12,26,150,17,12,12,150, + 219,219,17,132,17,150,219,17,150,26,12,26,17,17,17,12, + 150,219,219,17,132,12,17,219,219,150,26,12,42,150,17,17, + 12,150,17,219,17,132,150,17,219,17,150,42,12,42,150,219, + 12,12,150,219,219,17,132,12,17,17,17,17,42,12,42,150, + 17,17,12,150,219,219,17,132,17,150,219,17,150,26,12,42, + 150,17,12,12,150,219,219,17,132,17,132,219,219,12,26,12, + 42,12,219,17,12,150,219,219,17,150,17,132,17,219,132,42, + 12,26,17,17,17,12,150,219,219,17,132,17,150,219,17,150, + 26,12,42,150,219,17,12,150,17,219,17,150,17,132,219,219, + 132,219,187,42,150,17,12,17,150,219,219,17,132,17,17,219, + 219,150,26,12,42,150,17,17,12,150,17,219,17,132,17,17, + 219,17,150,219,12,26,12,219,12,12,150,17,219,17,150,17, + 17,219,219,150,42,12,42,150,219,12,12,150,17,219,17,150, + 17,150,219,17,150,26,187,26,150,17,12,17,150,219,219,17, + 150,17,132,219,219,150,26,187,26,150,17,17,150,150,17,219, + 17,132,17,150,219,17,187,219,109,183,219,17,150,219,99,114, + 114,144,114,144,144,144,144,144,244,144,144,144,244,144,144,244, + 144,244,144,244,144,244,244,244,244,244,244,244,244,244,244,244, + 244,244,244,244,244,244,244,244,244,244,244,36,244,36,36,36, + 36,36,244,36,36,36,36,244,36,36,36,244,36,244,244,244, + 218,207,188,188,39,39,188,169,188,188,169,39,188,188,188,169, + 169,169,188,188,188,39,188,188,169,188,188,188,188,188,188,188, + 188,188,188,218,218,218,218,218,218,218,218,153,153,153,218,218, + 218,218,218,236,236,218,218,236,153,236,236,207,207,218,218,207, + 218,207,236,236,236,89,207,89,89,236,89,236,236,236,119,119, + 119,236,119,119,236,89,236,181,236,119,236,89,89,89,119,119, + 119,236,236,119,236,236,119,236,119,89,119,236,119,236,119,89, + 89,89,119,119,119,119,89,89,236,236,236,119,89,236,89,236, + 119,236,236,236,119,236,119,236,236,119,119,236,89,236,119,119, + 89,236,236,236,236,236,236,207,236,236,236,236,89,236,143,236, + 119,119,119,236,236,236,143,89,236,89,89,119,89,236,89,89, + 119,236,236,236,236,89,236,236,89,89,89,236,119,119,108,47, + 42,187,166,182,50,243,111,42,26,219,17,17,17,17,26,17, + 12,17,219,219,26,187,26,150,42,219,219,17,219,12,17,219, + 17,17,17,219,26,26,12,26,150,42,219,219,17,219,12,17, + 219,219,12,17,219,219,26,187,26,150,42,26,219,17,219,12, + 17,219,17,17,219,219,219,26,150,26,150,219,26,219,17,17, + 17,17,219,17,17,17,219,17,26,150,26,150,42,26,219,17, + 17,17,17,219,17,17,17,219,219,26,150,26,150,42,26,219, + 17,17,17,17,219,17,17,17,219,219,12,132,26,150,42,26, + 219,17,17,17,17,219,17,17,219,219,219,26,150,26,150,42, + 26,219,17,219,12,17,219,219,12,219,219,219,17,132,26,150, + 219,26,219,17,17,17,17,219,219,12,219,17,26,26,12,26, + 150,219,219,219,17,17,17,17,219,17,17,219,219,219,26,150, + 26,150,42,26,219,17,17,17,17,219,17,17,17,219,26,26, + 12,26,150,42,219,219,17,219,12,17,219,17,17,17,17,219, + 26,150,26,150,42,219,219,17,17,17,17,219,17,12,17,219, + 219,26,187,26,150,219,26,219,17,219,12,17,219,219,12,17, + 219,219,26,150,26,150,42,26,219,17,219,12,17,219,219,12, + 219,219,219,26,150,26,150,42,219,219,17,17,12,17,219,219, + 12,17,219,219,26,150,26,150,42,26,219,26,17,17,17,219, + 17,17,17,132,219,17,187,26,150,42,26,17,243,132,235,114, + 114,144,144,144,144,144,144,144,144,144,144,244,144,244,244,144, + 244,244,244,144,244,144,244,244,244,244,244,244,244,244,244,244, + 244,244,244,244,244,244,244,244,36,244,36,36,36,244,36,244, + 36,36,36,36,36,36,36,36,36,36,36,36,36,105,36,244, + 207,218,218,207,188,188,188,188,188,39,39,188,39,188,188,188, + 188,39,39,169,39,39,207,39,207,39,39,39,188,188,39,169, + 188,188,188,188,188,188,188,218,218,236,218,207,218,218,218,218, + 218,153,236,218,218,218,236,218,218,218,218,236,236,207,207,218, + 236,207,207,207,207,207,236,236,236,89,236,89,119,236,236,236, + 119,119,119,119,119,119,119,58,119,119,119,119,236,119,236,89, + 236,119,119,236,89,236,236,119,89,236,236,119,89,89,236,119, + 119,119,236,89,89,89,119,236,89,236,89,236,236,236,236,236, + 89,236,236,119,236,119,89,236,119,236,236,236,236,89,236,236, + 236,119,119,236,119,236,119,236,119,236,236,236,236,89,89,89, + 236,236,236,143,143,236,89,89,89,127,127,127,89,89,89,236, + 127,236,89,236,89,236,236,89,119,236,119,89,89,119,240,47, + 122,126,91,182,183,111,166,122,42,122,122,0,122,42,122,122, + 122,122,122,122,183,42,219,187,0,42,122,122,0,122,42,122, + 122,122,122,122,78,183,42,219,187,122,42,122,122,0,122,42, + 122,122,42,122,122,162,183,42,183,187,122,42,122,122,0,122, + 42,122,122,42,122,122,162,183,42,183,187,0,42,122,122,0, + 122,42,122,122,42,122,122,122,183,42,183,187,0,42,122,122, + 0,122,42,122,122,42,122,122,122,183,42,183,187,0,42,122, + 122,0,122,42,122,42,122,122,122,122,42,42,183,187,0,42, + 122,122,0,122,42,122,122,42,122,122,122,183,42,183,187,0, + 42,122,122,0,122,42,122,122,42,122,122,122,42,42,183,187, + 0,42,122,122,0,122,42,122,122,122,122,122,122,219,42,183, + 187,0,42,122,122,0,122,42,122,122,42,122,122,122,183,42, + 183,187,122,42,122,122,0,122,42,122,122,122,122,122,78,183, + 42,219,187,0,42,122,122,0,122,42,122,122,122,122,122,78, + 183,42,183,187,0,42,122,122,0,122,42,122,122,122,122,122, + 122,183,42,183,187,0,42,122,122,0,122,42,122,122,122,122, + 122,122,219,42,183,187,122,42,122,122,0,122,42,122,122,122, + 122,122,122,183,42,183,187,0,42,122,122,0,122,42,122,122, + 122,122,122,78,183,42,183,187,122,42,122,122,0,122,42,122, + 122,122,122,0,0,42,42,42,187,42,42,183,219,122,99,89, + 114,144,144,144,144,144,144,114,244,144,144,144,144,144,244,244, + 144,244,144,244,244,244,244,244,244,244,244,244,244,244,244,244, + 244,244,244,244,244,36,244,36,244,36,244,36,36,244,36,36, + 36,36,36,36,36,244,36,36,36,36,105,36,36,244,36,120, + 188,207,207,218,218,188,188,188,188,188,188,188,188,188,207,207, + 188,169,39,140,39,39,39,39,188,39,39,39,39,188,188,188, + 188,188,188,188,207,207,188,207,218,218,218,218,218,236,236,218, + 218,218,218,218,153,218,218,218,236,236,218,218,218,218,207,207, + 207,207,236,236,236,236,89,89,181,89,236,236,119,119,119,89, + 119,119,236,119,119,119,236,236,236,236,236,119,236,119,236,236, + 89,236,119,119,89,89,89,236,119,89,89,119,119,89,236,236, + 236,119,236,236,236,89,119,236,119,119,236,119,119,119,236,236, + 119,89,89,119,89,119,89,236,119,119,119,89,236,236,236,119, + 236,236,236,236,236,236,58,236,236,236,236,236,236,236,143,127, + 236,207,236,89,207,207,127,127,89,89,89,89,127,89,89,119, + 89,236,236,236,89,89,236,236,119,143,119,236,119,159,240,47, + 122,183,162,187,0,183,78,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,219,122,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,219,122,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,122,42,122,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,219,122,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,42,42,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,219,122,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,42,42,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,219,122,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,219,122, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,42, + 42,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 42,122,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,219,122,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,42,42,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,122,42,42,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,219,122,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,219,122,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,219,122,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,42,78,0,0,0,0,0,141,181, + 144,144,144,144,144,144,144,144,144,244,144,244,244,244,144,244, + 244,244,244,244,244,244,244,244,244,36,244,36,244,36,244,244, + 244,244,244,36,244,36,244,36,244,36,36,244,36,36,36,244, + 36,36,36,36,36,36,36,36,36,36,36,36,105,36,36,36, + 207,207,207,207,188,207,39,169,188,39,169,39,39,39,188,188, + 207,207,39,188,39,39,207,188,39,39,188,39,39,39,39,39, + 39,39,188,188,188,188,207,207,207,207,218,181,153,218,218,153, + 218,153,153,153,218,153,153,236,218,218,236,207,89,89,236,207, + 236,236,207,207,236,236,207,58,236,236,89,89,89,89,236,119, + 236,119,119,236,119,119,119,119,119,119,236,236,89,236,236,236, + 236,119,236,236,236,236,236,89,89,236,236,236,236,236,119,119, + 119,89,119,119,119,119,89,119,236,236,119,236,236,236,89,236, + 89,119,236,89,236,236,119,89,89,236,89,236,119,89,236,236, + 236,236,119,236,236,236,236,236,236,89,236,127,236,89,89,119, + 89,236,89,127,89,89,89,89,89,89,89,89,119,127,89,89, + 89,89,89,119,236,236,236,119,119,119,159,119,119,119,108,47, + 42,187,42,95,0,122,122,0,14,216,41,62,62,249,62,62, + 62,62,62,62,41,22,26,17,0,14,216,41,62,62,249,62, + 62,62,62,62,62,41,75,26,17,0,14,216,41,62,62,249, + 62,62,62,62,62,62,41,22,26,17,0,14,216,41,62,62, + 249,62,62,62,62,62,62,62,22,26,17,0,14,216,41,62, + 62,249,62,62,62,62,62,62,41,75,26,17,0,14,216,41, + 62,62,249,62,62,62,62,62,62,62,22,26,17,0,14,216, + 41,62,62,249,62,62,62,62,62,62,41,75,219,17,0,14, + 216,41,62,62,249,62,62,62,62,62,62,62,22,26,17,0, + 14,216,41,62,62,249,62,62,62,62,62,62,62,22,26,17, + 0,14,216,41,62,62,249,62,62,62,62,62,62,41,22,26, + 17,0,14,216,41,62,62,249,62,62,62,62,62,62,41,75, + 219,17,0,14,216,41,62,62,249,62,62,62,62,62,62,41, + 22,26,17,0,14,216,41,62,62,249,62,62,62,62,62,62, + 62,22,219,17,0,14,216,41,62,62,249,62,62,62,62,62, + 62,41,22,26,17,0,14,216,41,62,62,249,62,62,62,62, + 62,62,41,75,26,17,0,14,216,41,62,62,249,62,62,62, + 62,62,62,62,22,26,17,0,14,216,41,62,62,249,62,62, + 62,62,62,62,41,75,26,17,0,14,216,41,62,62,249,62, + 62,62,62,62,62,41,22,26,187,42,26,26,243,221,235,114, + 144,144,144,244,144,144,144,244,144,244,244,144,244,244,244,244, + 244,244,244,244,244,244,244,244,244,36,244,244,244,36,36,244, + 36,244,36,244,36,244,36,244,36,244,36,36,244,36,36,36, + 36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36, + 39,114,207,207,39,39,39,39,39,39,39,39,39,39,188,39, + 39,188,207,39,39,39,207,207,207,39,39,39,39,207,39,39, + 39,39,39,188,207,188,188,188,207,188,207,188,218,236,207,181, + 218,207,207,218,207,218,218,153,236,218,236,236,207,207,236,207, + 207,207,89,207,89,236,207,236,236,236,236,236,119,119,236,119, + 236,236,119,236,119,119,236,236,236,119,236,236,236,89,89,236, + 89,89,89,236,89,89,236,236,89,119,89,89,119,89,89,119, + 119,119,89,89,89,119,89,119,119,89,89,236,119,236,89,119, + 236,119,236,236,89,236,119,119,236,236,119,236,236,119,236,236, + 119,236,236,236,236,236,236,236,236,207,236,143,236,236,89,236, + 89,236,236,89,127,89,127,89,89,127,89,89,89,89,127,89, + 236,119,89,119,89,119,89,236,119,119,236,236,119,159,108,47, + 12,99,187,214,42,187,187,42,233,110,195,90,90,195,195,90, + 90,90,90,90,60,154,12,8,42,233,110,195,90,90,195,195, + 90,90,90,90,195,60,154,12,12,42,233,110,195,90,90,195, + 195,90,90,90,90,195,60,154,12,12,42,233,110,195,90,90, + 195,195,90,90,90,90,90,60,154,12,8,42,233,110,195,90, + 90,195,195,90,90,90,90,195,60,154,12,12,42,233,110,195, + 90,90,195,195,90,90,90,90,90,60,154,12,8,42,233,110, + 195,90,90,195,195,90,90,90,90,195,60,154,12,12,42,233, + 110,195,90,90,195,195,90,90,90,90,90,60,154,12,12,26, + 233,110,195,90,90,195,195,90,90,90,90,90,60,154,12,12, + 42,233,110,195,90,90,195,195,90,90,90,90,90,60,154,12, + 12,42,233,110,195,90,90,195,195,90,90,90,90,195,60,154, + 12,12,42,233,110,195,90,90,195,195,90,90,90,90,90,60, + 154,12,12,42,233,110,195,90,90,195,195,90,90,90,90,90, + 60,154,12,12,42,233,110,195,90,90,195,195,90,90,90,90, + 195,60,154,12,12,42,233,110,195,90,90,195,195,90,90,90, + 90,195,60,154,12,12,42,233,110,195,90,90,195,195,90,90, + 90,90,90,60,154,12,12,26,233,110,195,90,90,195,195,90, + 90,90,90,195,60,154,12,12,42,233,110,195,90,90,195,195, + 90,90,90,90,90,60,154,12,243,219,187,187,67,141,99,181, + 144,244,144,244,144,244,244,144,244,144,244,244,244,244,244,244, + 244,244,244,244,244,36,244,36,244,36,36,244,36,244,36,244, + 36,244,36,36,244,36,244,36,36,36,36,36,36,244,105,36, + 105,36,105,36,36,36,36,36,36,36,105,36,36,36,36,36, + 39,39,39,39,207,207,39,140,140,39,39,39,39,39,39,39, + 39,39,39,39,39,39,39,39,207,188,39,39,39,39,39,188, + 39,39,39,39,188,207,188,39,188,207,207,207,89,218,218,218, + 207,218,218,236,218,218,153,218,218,236,236,207,236,207,207,207, + 207,89,207,207,207,236,236,236,236,236,119,119,236,236,89,89, + 119,119,236,119,236,119,119,119,119,236,89,119,89,236,236,89, + 236,236,236,89,236,89,119,89,119,89,236,119,89,236,119,89, + 119,119,119,119,119,236,119,89,89,236,236,119,89,119,119,236, + 119,236,236,236,236,236,236,236,119,119,236,236,58,236,236,119, + 236,236,236,58,236,236,236,236,236,236,89,236,89,236,236,236, + 236,236,89,89,119,119,89,89,127,89,89,89,119,89,119,119, + 89,89,236,89,236,89,236,89,89,119,119,119,119,119,159,44, + 109,182,187,99,78,126,166,122,168,128,23,23,23,23,23,19, + 65,65,19,23,90,178,17,109,0,168,128,23,23,23,23,23, + 19,65,65,19,19,195,178,12,109,122,168,128,23,23,23,23, + 23,19,65,65,19,19,90,178,12,109,122,168,128,23,19,23, + 23,23,19,65,65,19,23,90,178,12,187,122,168,128,23,23, + 23,23,23,19,65,65,19,19,195,178,12,109,122,168,128,23, + 19,23,23,23,19,65,65,19,23,90,178,12,187,122,168,128, + 23,19,23,23,23,19,65,65,65,19,195,178,12,109,122,168, + 128,23,19,23,23,23,19,65,65,19,23,90,178,17,109,122, + 168,128,23,23,23,23,23,19,65,65,19,23,90,178,12,109, + 122,168,128,23,23,23,23,23,19,65,65,19,19,195,178,12, + 109,122,168,128,23,23,23,23,23,19,65,65,19,19,195,178, + 12,109,122,168,128,23,23,23,23,23,19,65,65,19,23,90, + 178,12,109,122,168,128,23,23,23,23,23,19,65,65,19,23, + 90,178,17,109,122,168,128,23,23,23,23,23,19,65,65,19, + 19,90,178,12,109,122,168,128,23,23,23,23,23,19,65,65, + 19,19,195,178,12,109,122,168,128,23,23,23,23,23,19,65, + 65,19,23,90,178,12,109,0,168,128,23,23,23,23,23,19, + 65,65,19,19,195,178,12,109,122,168,128,23,23,23,23,23, + 19,65,65,19,23,90,178,17,109,187,12,187,254,141,235,114, + 144,144,144,144,144,244,144,144,244,244,244,244,244,244,244,244, + 244,244,244,244,244,244,244,244,244,244,36,36,244,36,36,36, + 244,36,244,36,244,36,36,36,244,36,244,36,36,36,244,36, + 36,36,36,36,36,36,36,36,36,36,105,36,36,36,36,36, + 39,39,39,181,39,181,207,39,39,39,114,140,39,39,39,39, + 39,39,39,188,39,39,39,39,207,207,39,207,39,207,39,39, + 39,39,39,39,207,207,188,39,207,207,236,207,207,207,207,236, + 236,207,207,218,236,207,207,153,236,218,236,207,89,89,89,89, + 207,207,89,236,89,89,207,236,119,236,236,119,119,119,119,236, + 89,119,236,119,236,89,89,236,119,58,89,236,89,89,89,89, + 89,89,119,89,236,89,89,89,89,119,89,236,119,89,119,236, + 89,119,119,119,119,236,119,119,119,119,89,236,89,236,119,89, + 236,89,89,236,119,119,119,236,236,119,119,236,236,119,236,236, + 119,119,236,58,236,89,236,236,119,236,236,236,236,236,236,236, + 89,236,89,236,89,89,143,89,119,127,89,127,89,89,89,89, + 89,89,236,119,89,119,119,89,89,119,89,89,119,159,159,44, + 187,109,42,67,187,187,187,0,233,204,19,65,65,65,65,65, + 118,65,19,19,195,178,17,243,122,233,204,19,65,65,65,65, + 65,118,65,19,65,60,178,17,243,122,233,204,19,65,65,65, + 65,65,118,65,19,65,195,178,17,8,122,233,204,19,19,65, + 65,65,65,118,65,19,19,90,84,12,243,122,233,204,19,65, + 65,19,65,65,118,65,19,65,60,24,12,243,122,233,204,19, + 65,19,65,65,65,118,65,19,19,90,84,12,243,122,233,204, + 19,65,19,65,65,65,118,65,19,19,60,178,17,243,122,233, + 204,19,65,19,65,65,65,118,65,19,19,90,84,12,243,122, + 233,204,19,65,65,19,65,65,118,65,19,65,195,178,12,243, + 122,233,204,19,65,65,65,65,65,118,65,19,65,90,178,17, + 243,122,233,204,19,65,65,65,65,65,118,65,19,65,90,84, + 12,243,122,233,204,19,65,65,65,65,65,118,65,19,19,195, + 178,17,243,122,233,204,19,65,65,65,65,65,118,65,19,19, + 90,84,12,243,122,233,204,19,65,65,65,65,65,118,65,19, + 65,195,178,17,243,122,233,204,19,65,65,65,65,65,118,65, + 19,65,90,84,12,243,122,233,204,19,65,65,65,65,65,118, + 65,19,19,90,84,12,243,122,233,204,19,65,65,65,65,65, + 118,65,19,65,90,84,17,243,122,233,204,19,65,65,65,65, + 65,118,65,19,19,60,24,17,243,132,219,17,8,141,99,114, + 114,244,144,244,144,244,144,244,244,144,244,244,244,244,244,244, + 244,36,244,36,244,36,36,36,244,36,244,36,36,36,244,36, + 244,36,36,36,244,36,244,36,36,36,36,36,244,36,36,36, + 36,36,36,36,36,36,36,36,36,36,36,36,36,36,105,36, + 181,39,114,39,39,39,207,39,39,140,39,39,140,39,39,39, + 39,39,207,207,207,39,207,207,207,39,39,39,39,39,39,207, + 39,39,39,39,39,207,207,39,207,207,207,207,207,207,207,207, + 207,207,207,89,207,218,236,207,218,236,236,236,207,207,207,207, + 207,89,207,207,207,236,236,89,89,236,236,89,236,236,236,236, + 58,119,119,119,119,236,119,119,236,236,236,89,236,89,236,89, + 236,236,89,236,89,236,119,119,119,89,89,119,89,236,89,119, + 119,89,236,236,89,119,119,119,119,236,236,89,236,119,236,119, + 119,119,119,236,236,236,236,119,236,236,236,236,119,236,236,236, + 236,236,236,89,236,236,236,119,236,58,119,236,236,236,236,89, + 236,127,236,89,236,236,119,143,236,89,89,119,89,89,89,119, + 236,119,119,89,119,89,89,119,119,119,119,119,119,119,108,47, + 187,109,50,109,126,26,166,0,31,170,118,118,118,118,118,118, + 118,118,118,65,128,84,17,211,122,31,204,118,118,118,118,118, + 118,118,118,118,19,128,178,26,211,122,31,204,118,118,118,118, + 118,118,118,118,118,65,128,84,17,211,122,31,204,118,118,118, + 118,118,118,118,118,118,65,128,84,17,211,122,31,170,65,118, + 118,51,118,118,118,118,65,65,128,178,17,211,122,31,204,118, + 118,118,118,118,118,118,118,118,65,128,84,17,211,122,31,204, + 118,118,118,118,118,118,118,118,118,19,128,178,26,211,122,31, + 204,118,118,118,118,118,118,118,118,118,65,128,84,17,211,0, + 31,170,65,118,118,51,118,118,118,118,65,65,128,84,219,211, + 122,31,204,118,118,118,118,118,118,118,118,118,65,128,84,17, + 211,0,31,170,118,118,118,118,118,118,118,118,65,65,128,84, + 17,211,0,31,170,118,118,118,118,118,118,118,118,118,65,128, + 84,17,211,0,31,170,118,118,118,118,118,118,118,118,118,65, + 128,84,17,211,0,31,170,118,118,118,118,118,118,118,118,118, + 65,128,84,17,211,0,31,170,118,118,118,118,118,118,118,118, + 118,65,128,84,17,211,0,31,170,118,118,118,118,118,118,118, + 118,118,65,128,84,17,211,0,31,170,118,118,118,118,118,118, + 118,118,118,65,128,84,17,211,122,31,204,118,118,118,118,118, + 118,118,118,65,65,128,178,219,182,187,187,187,141,141,235,114, + 144,244,144,244,244,244,144,244,244,244,244,244,244,244,244,244, + 244,36,244,244,36,244,36,244,36,36,244,36,244,36,36,36, + 36,244,36,36,36,36,36,36,36,36,36,36,36,36,36,105, + 36,105,36,36,105,36,36,36,36,105,36,105,36,105,36,36, + 39,39,39,39,39,39,181,207,39,39,114,39,39,114,39,114, + 39,39,39,39,181,39,39,39,181,207,39,207,39,207,39,39, + 39,39,39,39,207,207,181,39,207,39,207,39,207,39,207,207, + 207,207,207,207,207,218,218,236,236,207,236,236,89,89,89,89, + 207,89,181,207,207,89,236,236,236,119,236,119,119,119,119,236, + 89,119,236,236,119,236,89,119,119,89,236,119,119,89,236,89, + 89,89,119,119,119,89,89,89,119,119,89,119,119,119,89,236, + 119,119,119,119,89,236,236,119,119,236,236,236,236,119,236,236, + 236,236,119,236,236,236,236,89,236,236,119,236,236,119,119,236, + 119,236,236,236,58,119,236,236,236,236,236,236,89,207,236,89, + 89,89,236,236,143,159,119,236,159,236,236,119,236,236,236,119, + 236,236,119,236,236,236,89,89,89,119,89,89,119,119,83,47, + 166,109,94,109,111,187,166,122,249,53,118,51,51,52,51,51, + 107,51,118,118,128,84,26,8,122,123,53,118,51,51,52,51, + 107,51,51,51,118,128,84,17,8,122,123,53,118,51,51,52, + 51,107,51,51,51,118,128,84,17,8,122,123,53,118,51,51, + 52,76,51,51,107,51,118,128,84,12,243,122,249,53,51,51, + 118,52,52,51,51,52,118,118,128,84,26,8,122,123,53,118, + 51,51,52,76,51,51,107,51,118,128,84,12,8,122,123,53, + 118,51,51,52,51,107,51,51,51,118,128,84,17,8,122,123, + 53,118,51,51,52,76,51,51,107,51,118,128,84,17,8,122, + 249,53,51,51,118,52,52,51,51,52,51,118,128,84,26,8, + 122,123,53,118,51,51,52,51,107,51,51,118,118,128,84,17, + 8,122,249,53,118,51,51,52,51,76,51,52,51,118,128,84, + 12,8,122,249,53,118,51,51,52,51,51,51,107,51,118,128, + 84,12,8,122,249,53,118,51,51,52,51,51,51,107,118,118, + 128,84,12,8,122,249,53,118,51,51,52,51,107,51,51,118, + 118,128,84,12,8,122,249,53,118,51,51,52,51,51,107,51, + 51,118,128,84,17,8,122,249,53,118,51,51,52,51,51,51, + 107,51,118,128,84,12,8,122,249,53,118,51,51,52,51,51, + 107,51,51,118,128,84,26,8,122,123,53,118,51,51,52,51, + 76,51,52,118,118,128,84,26,8,150,219,187,12,132,235,114, + 114,244,144,244,144,244,244,244,244,244,244,244,36,244,36,244, + 36,244,244,36,244,244,36,36,244,36,36,36,36,36,36,244, + 36,36,36,244,36,244,36,36,36,36,36,36,36,36,36,36, + 36,105,105,36,36,36,36,36,36,36,36,36,105,36,105,36, + 39,39,39,39,39,114,39,207,181,207,39,114,39,39,39,207, + 39,39,39,89,207,89,89,207,207,207,39,39,39,39,207,39, + 39,207,39,39,39,207,207,39,39,89,207,207,181,89,207,39, + 207,207,39,207,207,207,89,207,207,236,207,236,207,207,207,207, + 207,207,89,89,89,236,236,236,89,89,119,89,89,236,89,119, + 119,236,119,119,89,119,119,89,236,119,119,89,89,119,89,119, + 119,236,89,89,89,119,119,119,119,236,119,89,236,236,119,119, + 236,89,89,89,119,119,119,89,89,89,119,119,236,236,119,119, + 119,119,236,236,236,236,236,58,119,236,236,119,119,236,236,236, + 236,119,236,236,236,236,236,236,236,236,236,89,143,236,89,89, + 236,143,236,236,119,236,236,159,143,236,143,143,236,236,119,143, + 119,119,236,119,119,236,236,119,119,119,119,119,119,159,108,29, + 26,111,42,109,166,187,187,122,123,53,107,107,76,76,232,232, + 76,52,52,9,204,178,17,8,78,123,53,76,107,76,76,232, + 232,52,52,107,107,204,178,26,8,162,123,53,76,107,76,76, + 232,232,52,52,107,107,204,178,26,243,122,123,53,52,51,76, + 51,76,232,52,52,51,107,204,84,26,8,0,123,85,107,51, + 76,76,76,232,76,52,52,9,204,84,17,211,122,123,53,52, + 51,76,76,52,232,52,52,51,107,204,84,26,243,122,123,53, + 52,51,76,76,232,76,52,52,107,107,204,178,26,8,122,123, + 53,52,51,76,76,52,232,52,52,51,107,204,178,26,8,0, + 123,85,107,51,76,76,76,232,52,52,51,9,204,178,17,211, + 78,123,53,76,107,76,76,232,232,52,52,9,107,204,178,26, + 8,0,123,53,107,107,76,76,232,76,52,52,51,107,204,84, + 26,8,0,123,53,107,107,76,76,232,232,52,52,51,107,204, + 178,26,243,122,123,53,107,51,76,76,232,232,76,52,51,51, + 204,84,26,8,0,123,53,107,107,76,76,232,232,76,52,52, + 9,204,84,26,8,0,123,53,107,107,76,76,232,232,52,52, + 107,107,204,178,26,8,122,123,53,107,51,76,76,232,232,52, + 52,51,107,204,84,26,8,0,123,53,107,107,76,76,232,232, + 52,52,51,107,204,178,17,211,78,123,53,76,107,76,76,232, + 76,52,52,52,9,204,178,26,182,132,187,187,150,141,235,114, + 244,244,144,244,244,144,244,244,244,244,244,244,244,244,244,244, + 244,36,244,36,244,36,244,36,36,36,244,36,244,36,36,244, + 36,36,36,36,36,36,36,36,36,36,36,36,36,36,105,36, + 36,36,36,36,36,105,36,105,36,36,105,36,36,36,105,36, + 39,181,207,181,39,39,39,39,207,181,188,39,39,114,39,39, + 39,39,39,39,181,207,181,207,89,181,207,207,181,39,207,39, + 39,181,39,39,207,207,89,181,39,207,89,207,207,39,39,39, + 39,181,140,207,39,207,207,207,207,89,207,89,236,236,89,89, + 207,207,207,89,89,236,89,119,236,89,236,119,119,119,236,89, + 119,119,236,119,236,236,119,119,119,89,236,89,89,119,89,89, + 119,89,236,236,89,236,119,236,119,119,119,119,119,119,119,119, + 119,236,89,236,89,119,119,119,119,236,236,236,236,236,236,236, + 236,236,119,236,89,236,236,236,119,236,236,236,58,119,58,236, + 236,119,119,236,236,236,236,236,236,236,236,89,89,143,236,89, + 236,236,119,236,236,236,236,119,236,159,119,159,119,236,119,159, + 236,236,236,236,119,236,119,119,119,119,143,119,119,119,108,29, + 17,111,162,109,126,187,187,122,123,85,76,76,76,76,232,232, + 232,51,51,52,204,168,12,243,122,123,53,76,76,76,76,232, + 232,76,76,52,9,204,168,12,8,122,123,53,76,76,76,76, + 232,232,76,76,52,52,204,168,12,8,122,123,53,232,76,232, + 76,232,232,76,52,52,52,204,154,219,8,0,123,194,76,76, + 76,76,232,232,76,51,51,52,204,154,219,243,122,123,53,232, + 76,76,76,232,232,76,52,52,52,204,154,17,8,122,123,53, + 232,76,76,76,232,232,232,51,52,52,204,168,12,8,122,123, + 53,232,107,76,76,232,232,76,76,51,9,204,154,132,243,0, + 123,194,76,76,76,76,232,232,76,52,51,52,204,168,17,243, + 122,123,53,76,76,76,76,232,232,76,76,52,52,204,168,12, + 8,122,123,85,76,76,76,76,232,232,76,52,52,52,204,154, + 132,243,122,123,85,76,76,76,76,232,232,76,76,52,9,204, + 168,12,243,122,123,85,76,76,76,76,232,232,232,52,52,52, + 204,154,132,243,122,123,85,76,76,76,76,232,232,232,51,51, + 52,204,154,132,243,122,123,85,76,76,76,76,232,232,76,51, + 52,52,204,168,17,243,122,123,85,76,76,76,76,232,232,76, + 52,52,52,204,154,132,243,122,123,85,76,76,76,76,232,232, + 76,76,51,52,204,84,17,243,122,123,53,76,76,76,76,232, + 232,76,51,51,52,204,168,17,8,150,219,219,243,141,235,114, + 114,244,144,244,244,244,244,244,244,244,36,244,36,36,244,36, + 244,36,244,36,36,244,36,244,36,244,36,36,36,36,36,36, + 36,244,36,36,36,36,36,36,105,36,36,36,36,36,36,36, + 36,36,36,105,105,36,36,36,105,36,36,105,36,36,105,36, + 39,39,39,39,207,207,39,39,207,236,181,39,39,207,39,39, + 181,114,89,207,207,236,236,236,181,236,89,39,207,39,89,89, + 39,207,89,39,207,89,89,207,207,89,119,181,39,89,89,89, + 39,39,207,207,89,207,207,207,236,207,89,207,207,207,207,89, + 89,89,89,207,207,89,236,236,236,236,119,236,89,119,119,119, + 119,236,119,236,119,119,119,119,236,119,119,119,119,89,119,119, + 89,119,119,119,236,119,236,119,119,236,119,89,89,119,119,119, + 236,89,236,236,119,89,236,236,236,89,236,119,236,119,236,236, + 236,236,236,236,236,236,236,236,236,119,236,58,236,236,236,58, + 236,236,236,119,119,236,58,89,236,236,236,119,236,236,89,159, + 119,236,236,236,236,236,236,236,159,236,236,236,236,119,119,236, + 236,119,119,119,236,119,236,119,89,119,119,119,119,108,108,34, + 26,254,122,109,166,187,166,122,167,194,76,76,232,148,232,148, + 232,232,52,52,204,168,17,109,42,167,194,76,76,148,232,232, + 148,232,232,52,76,204,168,17,109,42,167,194,76,76,148,232, + 232,148,232,232,52,52,204,168,17,109,42,167,85,76,76,232, + 232,232,148,232,232,52,52,204,168,17,109,122,167,85,232,76, + 148,148,232,148,148,148,52,52,204,168,26,109,42,167,85,76, + 76,148,232,232,148,232,232,52,52,204,168,26,109,42,167,85, + 76,76,148,232,232,148,232,148,52,52,204,154,26,109,42,167, + 85,76,232,148,232,232,148,232,232,232,52,204,168,26,109,122, + 167,85,232,76,148,148,232,148,148,232,52,52,204,154,26,109, + 42,167,194,76,76,148,232,232,148,232,232,52,52,204,168,17, + 243,122,167,194,76,76,232,148,232,148,232,232,52,52,204,168, + 26,243,122,167,194,76,76,232,148,232,148,148,232,52,232,204, + 154,26,243,122,167,194,76,76,232,148,232,148,232,232,52,52, + 204,168,26,243,42,167,194,76,76,148,232,232,148,232,148,52, + 52,204,168,26,243,42,167,194,76,76,232,148,232,148,232,148, + 52,52,204,168,17,243,122,167,194,76,76,232,148,232,148,232, + 232,52,52,204,168,26,243,122,167,194,76,76,148,232,232,148, + 232,232,52,52,204,168,17,109,42,167,85,76,76,232,148,232, + 148,148,148,52,52,204,154,26,109,150,26,187,17,141,235,114, + 244,144,244,144,244,244,244,244,244,244,120,244,244,244,36,244, + 36,244,36,244,244,36,244,36,36,36,36,244,36,36,36,36, + 36,36,36,36,36,36,36,36,105,36,36,36,36,36,105,36, + 105,36,36,36,105,105,36,105,36,36,36,105,36,36,36,36, + 207,207,207,207,39,181,39,39,207,207,181,236,207,114,181,39, + 207,207,39,181,39,89,181,184,240,119,89,207,89,39,207,89, + 207,39,89,39,89,236,236,89,89,89,119,119,89,39,114,89, + 89,39,89,39,89,89,181,188,207,207,89,89,89,89,207,236, + 236,236,89,236,236,89,89,236,119,236,89,236,236,89,236,236, + 181,119,119,119,119,119,236,119,119,89,236,236,119,119,119,119, + 236,119,119,119,119,181,236,89,119,89,119,119,89,236,89,89, + 236,236,119,89,119,119,119,236,119,89,89,119,236,119,89,236, + 236,89,236,236,236,236,236,236,236,58,236,236,236,119,236,58, + 236,236,236,236,119,89,236,236,236,119,236,119,119,236,236,236, + 119,236,236,236,236,236,143,236,236,236,119,119,236,236,236,119, + 236,236,236,236,236,236,236,119,119,119,119,119,119,119,108,29, + 26,111,122,187,111,26,111,122,237,32,232,148,148,148,148,148, + 148,147,232,232,231,168,17,243,122,220,32,232,232,148,148,148, + 147,232,148,232,232,231,168,219,243,122,220,32,232,232,148,148, + 148,147,232,148,232,232,231,168,17,243,122,237,32,232,148,148, + 148,148,148,232,148,232,232,231,168,17,243,0,237,32,232,232, + 148,148,148,148,148,27,232,232,231,222,17,243,122,220,32,232, + 232,148,148,148,148,232,148,232,232,231,222,17,243,122,220,32, + 232,232,148,148,148,148,148,232,232,232,231,222,183,243,122,220, + 32,76,148,148,148,148,147,232,148,52,232,231,222,26,8,0, + 237,32,232,232,148,148,148,148,232,147,232,232,231,222,219,243, + 122,220,32,232,232,148,148,148,147,232,148,232,232,231,168,17, + 243,122,237,32,232,148,148,148,148,147,232,148,232,232,231,222, + 26,8,122,237,32,232,148,148,148,148,148,232,232,76,232,231, + 222,26,211,122,237,32,232,148,148,148,148,148,232,148,232,232, + 231,222,26,243,122,237,32,232,148,148,148,148,148,148,147,52, + 232,231,222,26,243,122,237,32,232,148,148,148,148,147,148,148, + 232,232,231,168,17,243,122,237,32,232,148,148,148,148,148,232, + 148,232,232,231,222,26,8,122,237,32,232,148,148,148,148,147, + 232,147,232,232,231,168,17,243,122,237,32,232,148,148,148,148, + 148,148,27,232,232,231,222,219,211,141,219,187,132,150,235,114, + 244,144,244,244,244,244,244,244,244,244,244,36,244,36,244,36, + 244,36,244,36,36,244,36,36,244,36,36,36,36,36,36,244, + 36,36,244,105,36,36,105,36,36,36,105,36,36,36,36,36, + 36,36,105,36,36,36,105,105,36,105,36,36,105,105,105,36, + 39,39,207,39,207,207,207,207,207,207,181,184,181,207,207,39, + 207,207,89,207,89,89,236,89,240,108,89,207,207,39,181,39, + 39,181,207,89,207,181,58,181,236,119,89,89,89,181,89,207, + 114,89,39,89,207,207,89,89,89,207,207,207,207,89,89,89, + 89,89,236,89,236,119,236,181,236,119,119,119,119,119,119,119, + 236,236,119,236,89,236,119,89,89,119,119,119,119,89,236,119, + 119,89,89,119,236,236,119,89,207,236,236,236,119,119,119,119, + 236,119,236,236,236,89,89,119,236,119,236,89,89,89,236,236, + 119,236,89,119,236,236,89,236,236,236,236,119,58,236,119,236, + 58,236,236,236,236,236,119,236,119,236,153,236,236,236,236,236, + 236,236,159,236,236,236,119,89,236,89,89,89,236,89,89,236, + 119,119,119,119,119,119,119,89,89,119,119,119,119,119,108,34, + 26,111,122,109,166,187,166,42,138,117,193,193,157,157,189,189, + 157,157,193,32,70,31,26,109,122,138,117,193,157,157,157,189, + 189,189,193,193,32,70,31,219,109,122,138,117,193,157,157,157, + 189,189,157,193,193,32,70,228,219,109,42,138,117,193,193,157, + 157,189,189,157,193,193,32,70,228,26,211,122,138,117,193,157, + 157,157,189,189,157,157,193,32,70,31,26,109,0,138,117,193, + 193,157,157,189,189,157,193,193,32,70,31,26,109,0,138,117, + 193,157,157,157,189,157,189,193,193,32,70,31,26,109,122,138, + 117,193,193,157,157,189,189,157,193,193,32,70,31,26,211,122, + 138,117,193,193,157,157,189,189,157,157,193,32,70,31,26,109, + 122,138,117,193,157,157,157,189,189,157,193,157,32,70,228,26, + 109,42,138,117,193,157,157,157,189,189,157,193,193,32,70,31, + 17,211,42,138,117,193,193,157,157,189,189,157,193,193,32,70, + 31,17,243,122,138,117,193,193,157,157,189,189,157,193,193,32, + 70,31,17,109,42,138,117,193,193,157,157,189,189,189,193,193, + 32,70,31,17,109,42,138,117,193,157,157,157,189,189,157,193, + 193,32,70,31,26,109,42,138,117,193,193,157,157,189,189,157, + 193,193,32,70,31,17,109,42,138,117,193,157,157,157,189,189, + 189,193,193,32,70,228,26,211,122,138,117,193,157,157,157,189, + 189,157,157,193,32,70,31,26,109,111,219,187,166,141,145,114, + 244,144,244,244,244,144,244,244,244,244,244,244,244,36,244,36, + 244,36,36,244,36,36,244,36,36,244,36,36,244,36,36,36, + 36,36,36,36,36,36,36,105,36,36,36,36,105,36,36,105, + 36,36,36,36,105,36,105,36,105,36,36,36,36,36,36,36, + 89,207,207,207,39,207,207,207,207,188,207,153,240,89,207,181, + 207,181,207,89,89,207,89,181,240,83,240,181,207,39,89,89, + 207,89,207,89,236,58,184,240,240,119,89,89,89,207,207,89, + 39,181,207,89,89,89,89,207,207,39,89,89,207,89,207,89, + 236,89,236,89,236,236,236,236,236,119,236,89,236,119,119,119, + 119,236,119,119,236,89,119,119,119,119,119,119,119,119,119,119, + 119,119,119,119,119,119,119,119,89,89,119,236,181,236,236,119, + 89,236,236,236,119,236,236,89,236,236,236,236,236,119,89,89, + 89,236,89,236,89,236,119,236,236,236,236,236,236,236,119,236, + 119,119,119,236,236,236,236,236,236,236,236,153,184,236,236,236, + 236,89,119,89,236,89,236,89,236,236,236,119,236,119,236,236, + 236,236,236,236,236,236,119,119,89,119,119,119,119,119,108,142, + 26,109,162,187,187,187,187,0,226,87,18,72,242,30,86,13, + 30,242,21,18,18,47,26,12,122,226,87,21,87,156,30,86, + 13,30,242,18,33,18,59,26,8,122,226,87,21,72,242,30, + 13,13,30,242,18,33,18,75,26,12,122,226,87,18,21,156, + 30,86,13,30,242,18,18,79,47,26,8,0,226,87,21,87, + 156,30,86,13,30,242,21,18,18,59,26,8,0,226,87,18, + 72,242,30,86,13,30,242,21,18,18,59,26,8,0,226,87, + 21,87,156,30,13,13,30,72,18,18,18,59,26,8,122,226, + 87,21,21,242,30,13,13,30,242,21,18,18,59,26,8,0, + 226,87,18,72,242,30,86,13,30,242,18,18,18,59,26,8, + 122,226,87,21,72,242,30,13,13,30,242,21,18,79,47,26, + 12,122,226,87,21,72,156,43,13,13,30,242,18,18,18,224, + 17,12,122,226,87,18,72,242,30,86,13,30,242,18,18,18, + 59,26,8,122,226,87,18,72,242,30,86,13,30,242,18,18, + 18,59,26,12,122,226,87,21,21,156,30,13,13,30,242,21, + 18,18,59,26,12,122,226,87,21,72,156,43,13,13,30,242, + 18,33,18,59,26,8,0,226,87,18,72,242,30,13,13,30, + 242,21,18,18,224,12,12,122,226,87,21,72,156,30,86,13, + 30,242,21,18,18,59,26,12,122,226,87,21,87,156,30,86, + 13,30,242,21,18,18,59,17,243,111,219,187,132,150,145,114, + 144,244,244,144,244,244,244,244,244,244,120,244,36,244,244,244, + 36,244,36,244,36,244,36,36,36,36,36,36,36,36,36,36, + 244,36,36,36,36,36,36,36,36,105,36,105,36,36,36,36, + 105,36,105,36,36,36,36,105,36,105,105,36,36,105,105,36, + 207,39,181,207,181,207,207,181,207,207,207,236,181,108,181,207, + 207,89,89,89,236,181,236,236,240,83,161,207,181,89,89,89, + 89,207,207,236,236,181,240,108,181,119,89,89,89,89,89,89, + 119,89,89,236,236,181,119,89,89,89,89,207,89,207,89,89, + 89,119,236,181,119,89,236,89,236,236,119,119,119,89,236,236, + 89,119,89,236,119,119,236,119,119,119,119,89,119,181,89,119, + 119,119,89,119,119,119,119,207,236,236,236,119,236,236,89,236, + 236,89,89,119,236,236,89,119,236,236,89,236,236,89,89,236, + 236,89,236,89,236,119,89,236,236,119,236,119,236,119,236,119, + 236,236,236,58,236,236,119,236,236,58,236,236,236,58,58,236, + 89,236,89,236,89,89,89,236,119,89,89,89,89,89,89,119, + 236,89,119,119,89,89,89,89,119,89,89,119,119,119,108,29, + 26,187,183,109,126,26,166,0,203,179,250,86,149,146,118,51, + 146,86,250,250,138,111,12,211,0,40,179,250,86,179,146,146, + 51,146,86,250,250,28,111,17,243,0,40,23,250,86,149,146, + 136,118,149,86,250,250,28,111,12,211,0,203,179,250,86,149, + 146,146,118,149,86,86,86,28,111,17,243,0,40,23,250,86, + 179,146,146,51,149,86,250,250,28,111,12,243,0,203,179,250, + 86,149,146,146,118,149,86,250,250,28,111,187,243,0,40,179, + 250,86,179,176,146,51,146,86,86,250,28,111,12,243,0,40, + 179,250,86,149,146,136,51,146,86,250,250,28,111,17,243,0, + 203,179,250,86,149,146,118,51,146,86,86,250,28,111,17,243, + 0,40,23,250,86,179,146,136,51,146,86,86,250,28,111,12, + 211,0,40,23,250,86,179,149,51,51,149,86,86,250,28,61, + 26,211,0,40,179,250,86,149,146,118,51,146,86,86,86,28, + 111,17,243,0,40,179,250,86,149,146,118,51,149,86,86,250, + 28,111,12,211,0,40,86,250,86,179,176,51,51,149,86,250, + 250,28,111,12,211,0,40,23,250,86,149,146,146,51,149,86, + 250,250,28,109,17,243,0,40,179,250,86,179,149,51,51,149, + 86,250,250,28,61,26,211,0,40,23,250,86,179,146,146,51, + 149,86,250,250,28,111,12,211,0,40,23,250,86,179,146,146, + 51,146,86,250,250,28,111,26,243,243,219,187,150,132,145,114, + 244,144,244,244,244,244,244,244,244,120,244,244,36,244,36,244, + 36,244,36,244,36,36,36,244,36,244,36,36,36,36,36,36, + 36,36,36,36,36,36,105,36,36,36,36,36,105,105,105,36, + 36,36,36,36,105,36,36,105,36,105,36,36,36,36,36,36, + 207,207,207,39,181,39,207,207,207,207,207,207,236,240,83,108, + 207,89,181,236,236,119,119,181,240,83,161,108,119,119,181,89, + 181,119,89,181,184,240,83,161,236,119,181,236,89,89,89,89, + 119,181,119,240,58,58,236,89,207,207,89,207,89,207,207,236, + 89,119,236,236,119,119,119,119,119,119,58,119,119,119,119,119, + 236,236,119,89,236,119,89,236,89,89,119,119,236,119,89,236, + 236,119,119,119,89,89,119,236,119,236,89,119,119,119,119,89, + 119,119,236,89,119,119,236,236,89,236,236,89,236,236,89,89, + 236,89,236,89,236,236,119,89,236,236,236,119,236,236,236,119, + 236,58,236,58,236,236,119,119,236,58,119,236,236,236,236,236, + 89,143,89,89,127,89,89,89,236,89,119,119,236,119,89,89, + 119,89,89,119,236,119,89,89,119,119,89,119,119,119,108,29, + 26,187,162,150,126,26,187,0,40,32,157,189,189,189,189,189, + 189,189,157,193,128,61,219,243,0,40,32,157,189,189,189,189, + 189,189,189,157,85,128,61,42,243,0,40,32,157,189,189,189, + 189,189,189,189,157,85,128,61,219,243,0,40,32,157,189,189, + 189,189,189,189,189,157,85,128,61,42,243,0,40,32,157,189, + 189,189,189,189,189,189,157,85,128,61,26,243,0,40,32,157, + 189,189,189,189,189,189,189,157,85,128,61,26,243,0,40,32, + 157,189,189,189,189,189,189,189,157,85,128,61,42,243,0,40, + 32,157,189,189,189,189,189,189,189,157,85,128,61,26,243,0, + 40,32,157,189,189,189,189,189,189,189,157,85,128,61,26,243, + 0,40,32,157,189,189,189,189,189,189,189,157,193,128,61,219, + 243,0,40,32,157,189,189,189,189,147,189,189,157,85,204,61, + 219,243,0,40,32,157,189,189,189,189,147,189,189,157,85,128, + 61,42,243,0,40,32,157,189,189,189,189,147,189,189,157,85, + 128,61,219,243,0,40,32,157,189,189,189,189,189,189,189,157, + 85,128,61,219,243,0,40,32,157,189,189,189,189,189,189,189, + 157,85,128,61,42,243,0,40,32,157,189,189,189,189,189,189, + 189,157,85,204,61,219,243,0,40,32,157,189,189,189,189,189, + 189,189,157,85,128,61,183,243,0,40,32,157,189,189,189,189, + 189,189,189,157,85,128,61,219,182,150,26,187,150,132,145,114, + 144,244,144,244,244,244,244,244,244,120,244,120,244,36,36,36, + 244,36,36,36,244,36,244,36,36,36,36,36,36,36,36,36, + 36,36,36,36,36,36,36,36,105,36,36,36,36,36,36,105, + 36,36,36,36,36,105,36,36,36,105,105,36,105,36,105,105, + 181,207,188,181,207,207,39,207,39,207,181,89,89,181,108,252, + 184,207,236,119,181,119,119,58,119,108,161,247,240,89,236,119, + 236,236,58,236,108,108,161,83,119,236,236,119,236,181,89,236, + 119,58,240,108,240,119,236,236,89,89,207,89,89,89,236,207, + 207,236,58,89,89,89,89,89,89,89,119,236,236,89,236,89, + 89,236,89,119,119,89,119,119,236,119,119,89,119,119,119,119, + 119,89,89,236,119,236,89,236,89,236,236,89,236,89,236,119, + 236,236,89,236,89,236,236,89,236,236,236,236,89,236,89,236, + 89,89,207,89,89,89,89,119,89,236,89,236,236,119,119,236, + 58,236,119,236,119,236,236,236,89,236,207,89,89,89,89,89, + 236,89,89,89,89,89,89,89,89,236,89,89,89,89,89,119, + 89,236,119,236,119,236,119,89,119,119,119,119,119,119,108,29, + 26,111,122,109,111,42,126,0,40,45,232,76,76,76,148,148, + 148,148,52,198,195,91,122,109,0,40,45,52,232,148,148,148, + 147,148,148,52,27,195,91,78,211,0,40,45,52,76,148,76, + 148,147,148,232,52,27,195,91,122,109,0,40,45,232,76,148, + 148,148,147,148,232,52,27,195,91,78,211,0,40,45,52,232, + 148,148,148,147,148,232,52,27,230,91,162,109,0,40,45,52, + 76,148,148,148,147,148,232,52,27,195,91,162,211,0,40,45, + 52,232,148,148,148,148,148,232,52,198,195,91,162,211,0,40, + 53,52,76,148,76,232,148,148,232,52,27,195,91,162,211,0, + 40,53,52,76,76,76,148,148,148,232,76,198,195,91,162,211, + 0,40,45,232,232,148,76,232,148,148,232,52,198,195,91,122, + 109,0,40,53,52,76,148,76,148,147,148,232,52,27,230,91, + 122,211,0,40,45,52,76,76,148,148,147,148,232,52,27,230, + 91,78,211,0,40,45,52,76,76,148,148,147,148,232,52,27, + 230,91,122,109,0,40,53,52,76,76,232,148,147,148,232,52, + 27,195,91,122,211,0,40,45,52,76,148,148,148,147,148,148, + 52,185,195,91,162,109,0,40,53,52,232,148,76,148,148,148, + 232,52,27,230,91,122,211,0,40,45,52,232,148,148,148,147, + 148,232,52,27,195,91,122,211,0,40,45,52,76,148,148,148, + 148,148,232,52,27,195,91,122,243,109,187,187,132,215,199,114, + 144,244,244,71,244,244,244,244,244,244,244,244,244,244,244,36, + 244,36,244,36,244,36,36,36,36,244,36,36,36,36,36,36, + 36,36,36,36,36,105,36,36,36,105,36,36,105,36,105,36, + 105,36,105,36,36,36,105,105,36,36,105,36,36,105,36,36, + 207,207,89,89,89,181,89,181,89,207,181,188,236,89,236,108, + 176,240,89,236,119,181,58,240,181,83,161,108,161,161,207,119, + 119,236,240,119,240,161,83,161,236,58,119,119,236,119,119,58, + 184,108,83,108,184,119,236,236,236,89,89,236,89,89,119,119, + 89,236,236,236,119,119,119,119,119,89,236,236,119,236,236,119, + 119,236,236,236,119,236,89,119,89,89,236,236,236,236,236,89, + 119,236,236,89,236,236,236,236,119,236,236,236,236,119,236,236, + 89,236,236,236,236,89,236,89,89,89,236,236,89,236,207,89, + 89,89,207,207,89,89,89,236,89,236,89,236,236,236,119,236, + 236,236,236,236,119,89,89,236,89,236,89,236,89,236,89,89, + 89,89,89,89,89,89,89,89,89,89,236,89,89,89,89,89, + 119,89,119,89,119,236,119,236,119,119,119,119,119,119,108,29, + 42,111,162,111,111,183,187,0,40,204,27,76,148,148,147,147, + 148,76,232,198,230,26,26,243,0,212,170,52,52,232,232,148, + 147,148,232,27,198,230,26,26,243,0,40,170,52,52,148,232, + 148,147,147,76,232,198,230,26,26,243,0,40,170,52,52,232, + 232,147,148,148,76,232,198,230,26,42,8,0,212,170,52,52, + 232,232,148,147,147,76,27,198,230,26,26,8,0,40,170,52, + 232,232,232,147,148,148,76,232,198,230,26,26,243,0,212,170, + 9,52,232,232,147,148,147,76,232,185,230,26,26,211,0,40, + 170,52,52,232,232,147,147,148,76,232,198,230,26,26,243,0, + 40,170,52,232,148,148,147,147,147,76,232,185,230,26,26,243, + 0,212,170,9,52,148,232,147,147,147,76,232,185,230,26,26, + 243,0,212,170,52,76,148,148,147,147,147,76,27,185,230,26, + 26,243,0,40,170,52,76,232,148,147,148,148,76,27,198,230, + 91,42,243,0,40,170,52,76,232,148,147,148,147,76,27,198, + 230,26,26,211,0,40,170,52,232,232,232,148,147,147,76,232, + 198,230,26,42,243,0,212,170,52,232,232,232,148,147,148,76, + 232,198,230,26,26,8,0,40,170,52,52,232,232,148,148,148, + 76,27,185,230,26,26,243,0,40,170,52,52,232,232,148,147, + 148,76,232,198,230,26,42,8,0,212,170,52,232,232,148,147, + 147,148,76,232,198,230,26,26,211,254,219,187,150,17,225,114, + 244,244,144,244,244,244,244,244,120,244,120,36,244,36,36,36, + 244,36,244,36,36,244,36,244,105,36,36,244,36,36,105,36, + 36,36,36,36,36,36,36,105,36,105,36,105,36,36,105,36, + 36,36,36,36,36,36,105,36,105,36,105,36,36,36,105,36, + 181,89,207,181,89,236,207,207,207,207,89,236,236,236,89,181, + 161,106,207,89,58,119,119,240,240,108,176,240,240,161,83,181, + 240,119,119,108,83,176,240,161,236,181,58,58,184,181,240,58, + 240,83,83,108,240,58,236,181,236,236,207,207,236,236,89,236, + 58,236,236,119,236,89,89,89,236,236,119,119,236,119,236,236, + 236,236,236,119,89,236,89,236,236,236,119,119,236,89,236,119, + 236,119,236,236,236,236,119,236,236,119,119,89,236,89,236,236, + 236,236,236,236,89,236,236,236,236,236,89,207,236,89,89,236, + 236,89,89,89,89,236,89,89,89,89,236,89,89,119,236,89, + 89,89,119,236,236,236,236,89,236,89,236,89,236,89,89,207, + 207,89,236,89,127,89,236,89,119,236,89,119,236,236,236,236, + 89,89,236,119,89,119,89,89,89,119,119,119,119,119,108,29, + 26,111,122,150,224,42,163,0,212,98,165,45,53,53,194,194, + 194,45,53,165,230,91,122,187,0,40,98,165,45,53,194,194, + 194,194,45,45,165,230,91,162,187,0,212,98,45,45,45,194, + 194,194,194,98,45,165,230,91,122,187,0,212,98,165,45,53, + 194,194,194,32,45,53,165,230,91,162,187,0,40,98,165,45, + 53,194,194,194,194,45,53,165,230,91,122,187,0,212,98,165, + 45,45,194,194,194,194,98,53,165,230,91,122,187,0,40,98, + 165,45,53,194,194,194,194,45,53,165,230,91,0,12,0,37, + 98,165,45,53,194,194,194,194,98,45,165,230,91,122,187,0, + 37,98,165,45,53,53,194,194,194,45,53,165,230,91,122,187, + 0,40,98,45,45,53,194,194,194,194,45,45,165,230,91,78, + 187,0,203,98,45,45,53,194,194,194,194,45,53,165,230,91, + 122,187,0,212,98,45,45,53,194,194,194,32,45,53,165,230, + 91,122,187,0,212,98,45,45,53,194,194,194,194,45,53,165, + 230,91,122,12,0,37,98,165,45,53,194,194,194,194,45,45, + 165,230,91,122,187,0,40,98,165,45,53,194,194,194,194,45, + 53,165,230,91,78,187,0,212,98,165,45,53,53,32,194,194, + 45,45,165,230,91,122,187,0,212,98,165,45,45,194,194,194, + 194,98,194,231,230,91,122,187,0,40,98,165,45,45,53,194, + 194,194,98,45,165,230,91,162,109,109,166,187,150,219,225,114, + 144,244,244,71,244,244,244,120,244,120,244,244,36,244,244,36, + 244,36,36,244,36,36,36,36,244,36,36,36,36,36,36,36, + 36,36,36,36,36,36,36,36,105,36,36,36,105,36,105,36, + 105,36,105,105,36,36,36,36,105,36,105,36,105,105,36,36, + 207,207,207,236,89,181,236,181,207,236,181,236,236,181,236,236, + 58,252,106,89,181,108,119,119,108,108,106,108,184,108,176,108, + 119,181,108,83,176,83,240,176,184,236,58,58,184,58,240,240, + 83,161,108,240,240,119,236,236,89,236,89,89,236,236,236,89, + 119,236,236,236,236,119,236,89,119,89,89,236,89,236,236,236, + 236,236,236,58,236,236,236,89,236,89,236,89,236,236,236,236, + 89,119,236,236,236,89,236,236,236,236,119,89,236,89,236,236, + 58,119,236,58,236,119,236,89,236,236,236,89,236,236,89,89, + 236,89,89,89,89,236,89,236,236,89,236,236,89,119,236,119, + 119,89,119,89,236,119,119,89,236,89,236,207,207,236,89,89, + 207,89,89,119,236,89,89,89,89,236,89,119,119,119,119,143, + 119,119,236,236,89,236,119,119,236,119,119,119,119,119,108,29, + 219,111,78,111,109,183,224,0,162,31,251,123,167,79,79,220, + 79,167,123,123,168,26,26,211,0,162,251,123,123,103,167,79, + 79,167,167,123,251,206,12,26,211,0,162,251,123,123,123,79, + 79,79,79,167,123,251,206,187,42,211,0,162,251,123,123,167, + 79,79,79,167,167,123,123,168,17,26,211,0,162,251,123,123, + 167,79,79,79,79,167,123,173,168,187,42,211,0,162,251,123, + 123,167,79,79,220,79,167,123,251,206,187,26,211,0,162,251, + 123,123,123,79,79,79,79,167,123,228,73,187,26,211,221,162, + 251,123,123,103,79,79,79,79,79,123,251,206,187,26,211,221, + 0,251,123,123,167,55,79,79,79,167,123,228,206,12,42,211, + 0,162,31,251,123,123,79,79,79,79,167,123,123,168,26,26, + 211,0,162,31,251,123,167,55,79,79,79,167,123,228,168,26, + 26,211,0,162,31,251,123,167,79,79,79,167,167,123,173,206, + 17,42,211,0,162,31,251,123,167,79,79,79,79,79,123,228, + 73,187,26,211,221,162,251,123,123,103,167,79,79,79,167,123, + 228,73,187,26,211,0,162,251,123,123,123,79,79,220,79,167, + 123,123,168,26,26,211,0,162,251,123,123,167,55,79,220,79, + 79,123,228,206,12,42,211,0,162,251,123,123,103,167,79,220, + 79,123,167,123,168,26,26,211,0,162,251,123,123,79,167,79, + 220,79,167,123,251,206,187,42,243,109,219,187,150,132,225,114, + 244,244,244,244,244,244,244,244,244,120,120,36,244,36,36,244, + 36,244,36,244,36,244,36,36,36,244,105,36,36,36,36,36, + 36,36,36,105,36,105,105,36,36,36,105,36,36,36,36,105, + 105,36,36,36,105,36,36,36,36,105,36,105,36,105,105,105, + 89,236,181,89,236,207,207,236,236,236,236,181,236,236,58,119, + 58,83,136,176,119,119,181,108,240,83,136,83,58,240,161,106, + 108,108,83,106,161,207,240,252,83,119,240,181,119,108,240,108, + 176,161,108,108,119,240,119,236,236,89,236,236,89,89,89,236, + 236,236,119,119,119,236,119,236,236,236,236,89,236,89,89,119, + 119,119,236,236,119,119,236,236,236,236,236,236,236,89,89,89, + 236,236,236,181,89,236,119,119,119,119,236,236,236,236,89,89, + 236,236,236,236,119,236,119,236,236,89,236,236,236,119,236,236, + 119,236,58,236,236,236,236,89,236,236,236,89,236,89,119,236, + 236,119,236,236,119,236,236,236,89,236,89,236,236,89,236,159, + 236,119,119,236,119,236,119,236,236,119,236,236,236,236,119,119, + 143,236,119,119,143,119,236,119,119,119,89,119,119,119,108,29, + 26,111,78,12,224,78,109,0,0,0,0,0,0,0,0,0, + 0,0,0,0,26,132,26,12,0,0,0,0,0,0,0,0, + 0,0,0,0,0,219,17,26,12,0,0,0,0,0,0,0, + 0,0,0,0,0,0,219,17,42,243,0,0,0,0,0,0, + 0,0,0,0,0,0,0,26,17,219,12,0,0,0,0,0, + 0,0,0,0,0,0,162,0,26,17,219,243,0,0,0,0, + 0,0,0,0,0,0,0,162,0,219,17,42,12,0,0,0, + 0,0,0,0,0,0,0,0,0,0,219,132,42,12,0,0, + 0,0,0,0,0,0,0,0,0,162,0,219,17,42,150,0, + 0,0,0,0,0,0,0,0,0,0,0,0,219,17,26,12, + 0,0,0,0,0,0,0,0,0,0,0,0,0,26,132,42, + 12,0,0,0,0,0,0,0,0,0,0,0,0,0,26,132, + 42,243,0,0,0,0,0,0,0,0,0,0,0,0,0,219, + 17,42,243,0,0,0,0,0,0,122,0,0,0,0,0,0, + 219,187,42,12,0,0,0,0,0,0,0,0,0,0,0,0, + 0,219,187,42,12,0,0,0,0,0,0,0,0,0,0,0, + 0,0,26,132,183,243,0,0,0,0,0,0,0,0,0,0, + 0,0,0,219,17,26,12,0,0,0,0,0,0,0,0,0, + 0,0,0,0,26,132,219,12,0,0,0,0,0,0,0,0, + 0,0,0,0,0,219,17,42,109,111,42,187,150,219,145,89, + 244,244,244,244,244,244,244,120,244,244,120,244,244,36,244,36, + 36,244,36,36,36,36,244,36,36,36,244,36,36,36,36,36, + 36,36,36,36,36,105,36,105,105,36,105,105,105,105,36,36, + 36,105,105,36,36,105,105,36,36,105,36,105,36,105,36,36, + 236,236,236,236,236,181,236,181,236,236,236,181,184,58,181,184, + 58,108,161,147,161,236,119,119,108,161,136,106,58,240,108,161, + 136,83,106,148,240,240,83,176,161,119,240,108,119,108,83,161, + 176,240,240,108,240,119,119,236,236,89,89,236,236,236,89,89, + 119,89,89,236,236,236,119,236,119,89,119,89,119,236,89,236, + 236,119,119,236,236,119,58,119,236,236,236,89,236,236,236,89, + 89,89,236,236,236,89,236,89,236,119,119,89,89,236,236,89, + 236,119,236,236,119,236,236,119,236,119,58,236,236,58,236,236, + 58,236,58,119,119,236,236,236,236,236,236,119,236,236,236,119, + 236,119,119,119,119,119,236,58,236,236,119,119,58,119,236,119, + 236,236,236,236,159,236,119,159,236,159,236,119,119,236,119,119, + 159,119,119,119,143,119,119,119,119,159,119,119,159,119,108,29, + 42,111,183,109,224,183,111,42,17,26,26,26,26,42,26,219, + 219,219,219,219,17,132,183,17,42,26,26,26,26,42,183,219, + 219,219,219,219,26,17,132,219,17,42,26,26,26,26,42,42, + 26,219,219,219,219,26,17,132,42,17,42,26,26,26,26,26, + 42,26,17,219,219,219,219,17,219,219,17,42,26,26,26,26, + 42,42,26,17,219,219,219,219,17,219,42,187,42,26,26,26, + 26,26,42,26,219,219,219,219,26,17,132,219,187,42,26,26, + 26,26,42,42,26,17,219,219,219,219,26,132,219,17,42,26, + 26,26,26,42,42,26,219,219,219,219,26,17,132,42,17,42, + 26,26,26,26,42,42,26,17,219,219,219,26,17,132,219,17, + 42,26,26,219,26,42,42,26,219,219,219,219,219,17,132,219, + 17,42,17,26,26,26,42,42,26,17,17,219,219,219,187,132, + 42,17,42,26,26,26,26,26,42,26,17,219,219,219,26,17, + 132,42,17,42,26,26,26,26,42,42,26,17,219,219,219,219, + 17,132,219,17,42,26,26,26,26,26,122,26,219,219,219,219, + 219,17,132,219,17,42,26,26,26,26,42,42,26,219,219,219, + 219,219,26,219,42,187,42,26,26,219,26,42,42,26,219,219, + 219,219,26,17,132,219,17,42,26,26,219,26,42,42,26,219, + 219,219,219,219,17,219,219,17,42,26,26,26,26,26,42,26, + 219,17,219,219,26,17,219,42,12,111,219,219,150,17,225,181, + 244,244,244,71,248,244,244,244,244,120,120,36,120,244,36,36, + 36,36,244,36,244,36,36,36,36,36,105,36,36,105,36,36, + 36,36,36,105,36,36,105,36,36,105,36,36,105,36,105,105, + 36,105,105,105,36,36,36,36,105,36,36,36,105,36,105,105, + 181,236,181,184,58,184,236,218,181,236,184,236,58,240,240,240, + 240,58,83,161,189,161,240,108,240,83,136,147,184,108,83,83, + 136,136,76,83,240,108,83,106,161,240,119,108,108,108,161,76, + 83,83,108,240,119,240,236,236,236,236,207,89,236,236,58,58, + 236,119,58,119,119,119,89,119,236,119,89,236,236,89,236,119, + 236,236,236,119,58,236,236,236,119,236,119,236,89,89,89,89, + 236,236,89,119,89,236,89,236,119,89,89,236,119,89,89,236, + 119,236,119,58,236,58,58,236,58,236,236,58,236,236,184,184, + 236,58,58,184,236,58,184,236,236,119,119,236,58,236,119,236, + 58,58,236,236,236,236,236,236,236,236,236,236,236,153,236,153, + 236,159,159,159,236,159,236,236,159,236,236,159,143,159,119,159, + 159,143,159,159,119,159,143,119,236,119,119,119,119,108,108,29, + 26,111,162,109,224,42,111,26,150,12,150,17,219,17,17,8, + 150,150,12,12,187,219,26,12,26,243,12,150,17,219,17,12, + 8,150,150,12,12,187,219,42,12,26,150,12,150,219,219,17, + 12,243,243,150,12,12,187,219,26,187,26,243,12,150,17,219, + 17,17,243,150,150,12,17,187,17,42,12,26,243,12,150,17, + 219,17,17,243,150,150,12,17,187,17,42,12,26,243,12,150, + 17,219,17,12,8,150,150,12,12,17,219,42,12,26,243,12, + 150,17,219,17,17,243,243,150,12,17,150,219,26,187,26,243, + 12,150,17,219,17,12,8,12,150,12,12,17,219,26,12,26, + 243,12,150,219,219,17,17,243,150,150,12,17,187,219,42,12, + 26,243,12,12,219,219,17,17,8,150,150,12,17,187,219,26, + 187,26,150,12,150,219,219,17,17,243,150,150,12,17,17,219, + 42,187,26,243,12,150,17,219,17,17,243,243,150,12,17,17, + 17,42,187,26,243,12,150,17,219,17,12,243,12,150,150,17, + 17,219,42,187,26,243,12,150,17,219,12,12,8,150,150,12, + 12,17,219,42,12,26,243,12,150,219,219,17,17,8,150,150, + 12,12,150,17,26,12,26,243,12,17,219,219,17,17,8,12, + 150,12,17,187,219,42,12,26,150,12,17,17,219,17,17,8, + 150,150,12,12,187,17,42,12,26,243,12,150,17,219,17,12, + 243,150,150,12,12,12,17,26,187,141,26,187,150,183,225,114, + 244,244,244,120,244,244,120,120,120,244,244,244,36,36,244,36, + 244,36,36,244,36,244,36,36,36,36,105,244,36,36,36,36, + 36,36,36,36,105,36,36,36,105,36,105,36,105,36,105,36, + 105,36,36,36,105,36,105,36,36,36,105,36,36,36,36,36, + 236,218,236,184,181,184,240,184,181,236,181,236,181,58,240,108, + 108,240,83,83,136,157,161,184,83,161,136,189,108,108,66,83, + 176,189,136,207,108,66,161,106,136,240,240,83,83,161,136,176, + 247,83,108,240,89,119,119,181,236,58,236,236,181,236,119,119, + 236,236,236,236,236,58,236,89,236,236,89,89,119,89,89,119, + 236,119,236,119,58,236,58,236,236,236,119,236,236,89,236,89, + 89,236,89,119,89,236,89,89,119,236,89,89,119,89,89,89, + 236,236,236,119,58,236,236,236,236,236,236,184,184,58,236,184, + 153,153,236,184,153,236,236,58,236,236,236,236,58,236,58,58, + 236,58,58,184,236,184,58,119,236,236,236,236,58,159,58,159, + 236,236,236,58,236,153,159,236,58,159,236,159,119,159,119,159, + 119,159,119,159,236,119,159,119,159,119,119,119,119,159,108,29, + 183,187,183,109,111,42,166,26,150,17,17,17,17,17,17,243, + 150,150,17,17,12,219,26,243,219,150,17,17,17,219,12,17, + 150,150,150,150,17,17,17,26,243,219,150,12,12,17,17,17, + 26,243,150,150,150,17,12,219,26,243,219,150,17,17,17,17, + 17,17,243,150,150,12,17,17,17,26,150,219,150,17,17,17, + 17,17,26,243,150,150,12,17,17,17,42,150,219,150,17,17, + 17,17,12,17,150,150,150,150,17,12,219,26,150,219,150,17, + 17,17,17,17,26,243,150,150,12,17,12,219,26,243,219,150, + 17,17,17,17,17,17,243,12,150,150,17,12,219,26,150,219, + 150,17,150,17,17,17,26,243,150,150,150,17,12,219,26,150, + 219,150,12,12,17,17,17,17,243,150,150,12,17,12,219,26, + 243,26,150,17,17,17,17,17,26,243,150,150,12,17,12,17, + 26,243,219,150,17,17,17,17,17,17,150,150,150,150,17,17, + 17,26,243,219,150,17,17,17,17,17,26,243,12,12,12,17, + 12,17,26,243,219,150,17,17,17,219,17,17,243,150,150,17, + 12,12,219,26,150,219,150,17,12,17,17,17,17,243,150,150, + 17,17,17,219,26,243,219,150,12,12,187,17,17,17,243,12, + 150,150,17,12,219,26,243,219,150,12,17,17,17,17,17,243, + 12,150,17,17,17,17,26,150,219,150,17,17,17,17,17,26, + 243,150,150,150,219,17,219,219,12,111,219,219,141,219,192,114, + 71,244,71,244,120,244,244,244,244,120,120,36,244,36,36,36, + 36,36,36,36,36,36,36,36,36,244,36,36,105,36,105,244, + 105,36,105,36,105,105,105,105,105,36,105,36,105,36,105,36, + 105,105,105,105,105,36,105,36,36,105,36,105,105,36,36,105, + 181,58,181,58,184,181,58,240,83,247,240,184,236,181,119,181, + 108,108,108,83,176,148,157,83,108,161,136,77,83,83,83,176, + 136,147,232,176,108,108,161,106,76,240,108,108,161,136,148,161, + 161,108,240,58,58,58,236,236,58,236,58,58,236,58,236,58, + 58,119,119,119,119,236,119,119,89,89,119,236,89,236,119,236, + 119,236,119,119,119,119,236,236,119,236,89,119,89,119,89,89, + 89,89,89,236,236,119,119,119,236,89,119,236,236,119,119,119, + 119,119,119,236,119,58,58,58,58,58,184,236,236,236,184,58, + 58,58,184,236,58,184,58,236,236,236,58,184,236,184,58,236, + 58,58,58,236,184,58,153,236,58,58,58,58,236,236,236,58, + 184,184,159,153,159,58,236,159,153,236,159,119,159,236,236,159, + 119,159,159,119,159,159,236,159,236,119,159,119,119,108,108,172, + 42,126,122,224,224,42,187,219,12,17,132,17,132,150,26,150, + 12,17,150,17,17,187,26,109,219,17,17,132,17,17,12,219, + 150,17,150,17,132,17,187,219,109,219,12,219,132,219,150,150, + 219,150,17,132,17,17,17,187,26,109,219,17,17,132,17,132, + 150,219,150,17,17,150,17,17,187,26,109,219,17,17,132,17, + 150,150,17,150,17,17,150,17,17,187,26,109,219,17,17,132, + 17,132,150,26,12,17,150,17,17,17,187,26,109,219,12,17, + 132,17,150,150,219,150,17,17,150,17,17,187,26,109,219,12, + 17,132,219,132,150,26,150,150,150,17,17,17,187,26,109,219, + 12,17,219,187,150,150,219,150,17,17,12,17,17,187,26,109, + 219,12,219,132,17,132,150,26,150,17,17,150,17,17,187,26, + 109,219,12,17,132,187,150,150,219,150,17,17,150,17,17,219, + 219,109,219,17,17,132,17,132,150,219,150,17,17,12,17,17, + 187,26,109,219,12,17,132,17,150,150,219,150,150,150,150,132, + 17,187,26,109,219,17,17,132,17,150,150,26,150,12,17,150, + 132,17,187,26,109,219,12,17,132,17,132,150,26,150,12,17, + 150,17,187,187,219,243,219,12,17,132,17,132,150,26,150,150, + 17,12,17,17,187,219,109,219,12,17,132,17,132,150,26,17, + 150,17,150,17,17,187,26,109,219,17,17,132,219,150,150,219, + 150,17,150,17,17,12,187,26,109,150,183,187,132,219,199,89, + 244,244,244,120,244,120,120,244,36,244,244,36,36,244,36,244, + 36,244,36,36,36,36,36,36,36,105,36,36,36,36,105,36, + 36,36,36,36,36,36,36,105,105,105,36,105,105,105,105,36, + 105,36,105,36,36,105,36,105,36,36,36,105,36,36,36,36, + 207,236,236,236,236,58,58,181,240,83,161,161,247,108,58,236, + 240,108,108,240,83,176,189,189,161,176,76,157,161,161,161,136, + 157,161,106,170,252,240,176,106,148,240,247,161,176,77,176,161, + 240,240,240,240,240,240,240,58,58,236,236,236,236,119,236,181, + 58,236,236,236,119,236,236,119,119,89,89,236,119,236,119,119, + 58,58,58,236,58,119,119,119,236,236,89,236,89,119,119,119, + 236,236,89,119,89,236,119,119,119,89,119,89,236,89,236,119, + 236,119,119,119,58,58,58,236,58,236,58,58,58,119,236,119, + 119,236,184,58,236,236,236,58,58,236,236,58,236,236,58,58, + 236,236,58,236,236,58,184,236,236,236,236,236,58,58,236,236, + 119,236,119,236,236,58,236,58,58,236,58,58,159,159,236,159, + 119,58,159,159,119,159,236,159,119,119,159,119,119,119,108,29, + 42,183,122,109,111,42,187,219,150,17,132,219,17,150,26,150, + 150,17,12,219,12,132,26,243,219,150,17,132,219,12,12,26, + 150,17,150,17,17,17,187,26,243,219,12,17,132,219,12,17, + 26,150,12,150,150,17,17,132,26,243,219,12,17,132,219,17, + 12,26,150,150,17,150,17,17,132,26,211,219,12,17,132,219, + 17,12,26,150,150,17,150,17,17,132,26,243,219,12,17,132, + 219,17,150,219,150,17,150,150,17,12,132,26,243,219,150,17, + 132,219,17,12,26,150,150,17,17,17,17,132,26,243,219,12, + 17,132,219,17,150,219,12,219,150,150,17,17,150,26,109,219, + 150,150,132,219,17,12,26,150,150,150,150,219,12,132,26,211, + 219,150,17,132,219,17,150,26,150,150,17,12,219,12,132,26, + 243,219,150,17,132,219,17,12,26,150,150,17,17,17,187,187, + 26,243,219,12,17,132,219,17,12,26,150,150,132,150,219,17, + 132,26,243,219,12,17,132,219,17,12,219,12,219,17,12,219, + 17,132,26,243,219,12,17,132,219,17,150,26,150,150,17,17, + 219,12,132,26,211,219,12,17,132,219,17,150,26,150,150,17, + 12,17,17,187,26,109,219,150,17,132,219,17,150,219,17,150, + 150,150,219,12,17,26,243,219,150,17,132,219,17,150,219,12, + 150,17,12,17,17,132,26,211,219,12,17,150,219,17,12,26, + 150,17,132,150,132,17,150,17,109,150,183,26,150,26,225,181, + 120,244,244,248,244,244,120,244,244,244,120,244,36,120,36,36, + 36,36,244,36,36,244,36,36,36,36,36,105,36,105,105,36, + 105,36,105,105,105,105,105,105,36,105,105,105,36,105,105,36, + 105,36,105,105,105,105,36,105,105,105,36,36,105,105,36,105, + 236,218,181,236,236,236,236,236,119,119,236,108,161,136,136,252, + 83,58,119,108,83,83,107,157,77,252,232,170,161,161,107,189, + 147,83,252,76,170,161,161,76,77,66,161,176,189,148,161,161, + 66,108,83,108,240,240,119,58,181,236,181,58,236,236,58,236, + 236,119,58,58,236,89,119,89,89,236,119,119,119,119,119,236, + 119,236,119,58,119,58,58,236,119,236,236,119,119,89,89,89, + 119,89,236,89,119,119,89,89,89,89,89,119,119,119,119,236, + 119,58,119,58,119,58,236,58,236,236,236,236,236,236,58,236, + 236,58,236,236,58,58,58,236,236,119,236,236,236,236,236,236, + 58,58,119,58,58,236,236,236,236,236,119,119,236,236,236,119, + 236,119,58,58,58,236,58,58,236,236,159,119,119,159,119,159, + 58,159,119,159,236,159,119,159,119,119,159,119,119,108,108,29, + 42,26,122,111,95,42,166,26,12,150,17,17,150,17,219,150, + 219,150,150,17,17,150,26,211,26,12,150,219,150,132,17,219, + 150,132,17,12,17,132,150,26,211,26,150,150,17,17,132,132, + 219,12,132,17,17,17,132,150,26,211,26,150,17,17,17,150, + 17,219,150,17,150,17,17,132,150,26,243,26,150,17,17,17, + 132,132,219,150,17,150,17,17,132,150,26,211,26,150,17,17, + 17,150,17,219,12,132,17,17,17,132,150,26,211,42,12,132, + 17,17,150,132,219,150,17,150,132,17,132,150,26,109,42,150, + 17,17,17,150,17,219,150,132,17,17,17,132,132,26,243,26, + 12,219,17,17,132,150,219,150,219,17,17,17,132,150,26,243, + 26,12,132,17,17,150,17,219,150,17,150,150,17,132,150,26, + 211,26,12,17,17,17,150,132,219,12,17,150,132,17,132,150, + 26,211,26,150,17,17,17,150,17,219,150,17,12,17,17,132, + 150,26,109,26,150,17,17,17,150,132,219,150,132,150,12,17, + 132,150,26,211,26,150,132,17,17,150,219,219,150,219,150,12, + 17,132,150,26,243,42,150,132,17,17,150,17,219,150,219,150, + 132,17,132,150,26,243,26,12,132,17,17,150,17,219,150,219, + 17,17,17,132,150,26,211,26,12,132,17,17,150,17,219,150, + 219,150,150,17,132,150,26,243,26,150,17,17,17,150,132,219, + 12,132,12,17,17,132,187,42,109,187,219,187,132,183,225,89, + 244,120,244,244,120,120,120,120,120,36,120,120,36,244,36,244, + 36,36,36,36,36,36,36,36,105,36,36,105,36,105,105,36, + 105,36,105,36,105,105,105,105,105,105,105,105,105,105,105,105, + 105,105,105,36,105,105,36,105,36,105,105,105,36,36,36,36, + 119,236,58,181,236,236,236,58,181,58,58,181,119,108,161,136, + 148,136,176,83,108,119,161,147,193,148,148,157,76,148,189,157, + 161,161,161,136,147,189,106,76,189,176,136,148,189,136,179,161, + 83,108,108,240,119,119,119,58,184,184,58,181,240,119,58,58, + 236,236,236,119,119,236,119,236,119,89,89,89,236,236,119,119, + 119,236,119,58,119,119,119,119,119,236,89,89,119,119,119,89, + 119,119,236,236,89,119,236,119,119,89,89,89,236,119,119,119, + 236,236,236,58,119,119,119,119,119,236,236,89,236,89,236,58, + 119,236,236,236,236,236,236,236,236,119,236,119,89,89,236,236, + 119,236,236,236,119,119,58,58,58,236,236,236,89,89,236,236, + 236,236,119,236,58,236,236,58,159,236,236,119,236,58,236,58, + 58,58,119,159,236,159,236,143,119,119,119,119,119,119,108,29, + 122,187,0,187,111,219,95,26,17,17,17,17,132,17,26,150, + 17,132,17,132,26,132,26,109,26,17,132,17,17,150,17,26, + 12,132,132,17,219,26,132,26,109,42,17,17,17,17,17,17, + 219,12,132,150,219,219,26,150,26,109,26,150,17,17,17,150, + 17,26,150,219,150,132,17,26,132,26,109,26,150,17,17,17, + 17,17,26,150,17,150,132,219,26,150,26,211,26,150,17,17, + 17,150,17,219,12,150,132,17,219,26,132,26,109,26,17,17, + 17,17,17,17,26,150,17,12,17,17,26,132,26,211,26,150, + 17,17,17,132,17,219,12,132,150,17,17,26,150,26,211,26, + 12,17,17,17,17,17,26,150,150,150,17,219,26,132,26,109, + 219,17,17,17,17,132,17,26,150,219,150,17,219,26,132,26, + 109,26,150,219,17,17,17,17,219,150,17,150,17,219,26,132, + 26,109,26,150,17,17,17,150,17,26,150,132,150,17,219,26, + 132,26,109,26,150,219,17,17,17,17,219,12,219,150,17,219, + 26,132,26,109,26,12,132,17,17,150,17,26,150,17,150,17, + 219,26,132,26,109,26,17,17,17,17,132,17,26,150,17,12, + 132,219,26,132,26,109,219,17,17,17,17,150,17,219,150,150, + 150,17,219,26,132,26,109,219,12,132,17,17,150,17,219,150, + 17,132,132,17,26,132,26,109,26,150,132,17,17,17,17,219, + 12,132,150,219,219,17,187,17,211,187,219,26,187,219,225,114, + 244,248,120,244,244,244,120,120,244,244,244,36,36,36,36,36, + 36,36,36,36,36,36,36,105,36,36,105,36,105,36,105,36, + 105,36,105,105,105,105,36,105,105,105,105,105,105,105,105,105, + 105,105,105,105,105,105,105,105,105,36,105,105,105,105,36,105, + 181,236,236,236,184,181,184,236,58,58,119,240,240,240,119,108, + 161,136,148,189,148,136,136,76,185,189,27,189,77,27,157,76, + 86,161,83,66,136,189,77,147,189,51,189,157,232,161,83,83, + 83,66,83,83,247,161,247,83,83,108,240,240,119,236,236,89, + 236,89,181,236,236,89,89,119,89,119,119,119,119,119,58,58, + 119,58,58,119,119,236,119,236,236,119,119,236,119,236,236,119, + 119,119,119,119,119,236,119,89,89,119,236,119,119,236,119,58, + 119,58,119,119,58,119,119,119,119,236,89,236,89,236,119,119, + 119,119,119,119,119,119,58,236,89,236,89,236,236,236,89,89, + 236,119,89,89,236,236,119,236,89,236,236,89,236,236,89,89, + 236,119,119,119,236,236,119,236,119,119,159,58,58,236,159,236, + 236,236,236,159,119,236,119,159,119,159,119,119,119,108,108,29, + 122,183,0,111,95,42,111,42,12,17,150,17,17,132,219,12, + 132,12,132,219,17,187,219,243,219,12,17,17,17,132,150,219, + 150,219,12,150,219,17,187,219,109,26,12,17,150,17,150,150, + 219,150,17,12,150,219,17,187,219,243,42,12,219,150,17,132, + 132,219,12,132,12,17,219,17,187,17,243,42,12,17,150,17, + 150,150,219,12,132,17,12,219,17,187,219,243,42,12,219,150, + 17,17,132,219,150,219,12,150,219,17,187,219,243,219,12,17, + 150,17,150,132,219,12,132,132,132,219,17,187,17,243,42,17, + 17,150,17,17,12,42,150,17,17,132,219,17,187,17,243,219, + 150,17,150,17,150,150,219,12,17,17,150,219,17,187,17,243, + 42,12,17,150,17,17,150,219,12,132,17,150,219,17,187,219, + 243,219,12,17,150,17,150,150,219,12,132,12,150,219,17,187, + 219,243,42,12,219,150,17,132,132,219,12,17,17,150,219,17, + 187,17,243,42,12,17,150,17,150,12,26,150,132,17,150,219, + 17,187,219,109,42,12,219,150,17,17,132,219,12,132,17,132, + 17,17,187,17,211,42,12,17,150,17,17,132,219,12,132,132, + 12,219,17,187,17,211,42,12,17,150,17,17,12,42,12,17, + 17,132,17,17,187,219,243,42,12,219,150,17,219,150,26,12, + 132,12,17,219,17,187,17,243,42,12,219,150,17,150,150,219, + 150,219,12,12,219,17,187,26,109,187,42,187,166,42,199,89, + 120,244,244,248,120,120,120,244,36,36,36,120,36,36,36,244, + 36,36,36,36,36,36,36,36,105,36,36,105,105,105,105,36, + 105,36,105,36,105,105,105,105,105,105,105,105,105,105,105,105, + 105,105,105,105,105,105,105,105,105,105,36,105,36,105,105,36, + 236,236,153,181,153,236,184,236,181,240,240,181,240,108,108,108, + 108,83,161,252,148,189,157,157,198,170,189,157,170,189,128,107, + 77,157,193,53,77,198,189,170,189,198,170,147,106,176,106,76, + 148,147,148,76,161,83,108,240,58,236,236,119,89,89,236,89, + 236,236,89,89,119,236,89,236,236,119,236,119,119,119,236,119, + 119,119,58,119,119,119,119,119,236,236,119,236,119,119,119,119, + 236,119,119,119,119,89,207,236,236,119,236,119,119,236,89,119, + 119,58,119,119,58,119,119,119,119,119,236,236,236,89,89,89, + 89,89,236,236,119,236,119,236,89,236,89,236,89,236,119,119, + 119,119,119,89,119,236,119,236,89,119,236,89,236,236,236,89, + 119,89,236,89,119,236,119,236,119,236,89,119,119,236,58,159, + 119,119,236,119,119,119,119,119,119,119,119,119,119,119,108,142, + 78,26,0,187,111,219,111,219,17,219,12,150,150,219,219,132, + 219,17,17,17,17,187,26,12,219,17,219,150,17,150,219,219, + 150,132,17,17,17,17,187,26,150,219,17,219,12,17,150,219, + 219,132,132,17,150,219,17,187,26,150,26,17,219,12,17,150, + 219,219,132,132,17,17,17,17,187,26,150,42,17,219,12,17, + 150,219,219,132,132,17,132,219,17,187,26,150,26,17,219,12, + 150,17,17,219,132,132,17,17,17,17,187,26,12,219,17,219, + 12,17,150,219,219,132,17,17,17,17,17,187,42,150,42,12, + 219,12,150,150,219,219,150,132,17,150,219,17,187,42,187,42, + 150,219,17,17,150,219,219,132,132,17,17,17,17,187,26,12, + 219,17,219,12,150,150,219,219,132,17,17,17,17,17,187,26, + 12,42,17,219,12,17,150,219,219,132,219,17,150,219,17,187, + 26,150,26,17,219,12,17,150,219,219,132,132,17,150,219,17, + 187,26,150,26,17,219,12,17,150,219,219,132,132,17,17,17, + 17,187,26,150,219,17,219,12,150,150,219,219,132,132,17,17, + 17,17,187,42,150,219,17,219,12,150,150,219,219,132,17,17, + 132,219,17,187,42,187,219,17,219,12,150,150,219,219,132,132, + 17,17,17,17,187,26,12,219,17,219,12,150,17,17,219,132, + 219,17,17,17,17,187,26,150,42,17,219,12,17,150,219,219, + 150,132,132,150,219,17,150,26,111,187,183,187,166,219,192,181, + 36,120,244,120,120,120,120,120,120,244,120,244,36,120,105,36, + 36,36,36,36,105,36,105,105,36,105,36,105,105,36,105,105, + 105,105,105,105,105,105,105,105,105,105,105,105,105,105,208,105, + 105,105,105,105,105,105,105,105,105,105,36,105,105,105,36,105, + 153,236,58,153,181,181,236,184,58,119,119,108,119,108,108,83, + 83,83,108,114,83,252,136,189,6,157,157,157,157,157,198,189, + 6,90,19,65,204,77,189,170,157,157,77,147,157,85,193,189, + 148,106,176,161,161,161,83,240,58,58,119,236,236,236,89,236, + 89,89,89,236,236,89,89,119,119,89,119,119,236,236,119,58, + 119,119,119,58,119,236,119,119,119,181,119,119,236,181,236,236, + 119,236,181,119,89,236,236,89,236,89,119,89,119,119,119,119, + 119,119,119,119,119,58,236,236,119,236,119,119,119,236,119,119, + 119,236,119,119,236,119,236,89,236,89,89,89,119,119,89,89, + 89,236,89,119,119,119,236,119,236,89,89,236,89,89,119,236, + 89,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119, + 119,159,119,159,119,159,119,119,159,119,119,119,119,119,108,29, + 78,187,122,224,111,42,95,42,17,26,17,17,26,17,219,17, + 12,17,219,219,17,12,26,150,26,26,219,26,17,26,17,26, + 219,17,17,132,219,17,12,26,150,42,17,26,17,17,26,17, + 26,219,17,17,219,219,17,12,26,150,219,17,26,17,12,26, + 17,219,219,17,17,132,219,17,12,26,150,219,17,26,17,17, + 26,17,219,17,17,17,219,219,12,12,42,150,219,17,26,17, + 17,17,17,26,17,17,219,132,219,17,12,26,150,42,17,26, + 17,17,26,17,219,17,17,17,132,219,17,12,26,150,219,219, + 26,17,219,12,17,26,17,17,17,219,219,17,17,26,150,26, + 26,26,17,17,26,17,219,17,17,219,132,219,12,17,26,150, + 42,17,26,17,17,26,17,219,219,12,219,132,219,17,150,26, + 150,219,219,26,17,17,26,17,219,17,17,17,219,219,17,12, + 26,150,219,17,26,17,12,26,17,219,17,17,17,219,219,17, + 12,26,150,219,17,26,17,17,17,17,26,17,12,219,132,219, + 17,12,26,150,26,26,26,17,17,26,17,219,219,12,219,132, + 219,17,17,26,150,42,17,26,17,17,26,17,219,17,17,17, + 219,219,17,12,26,150,42,17,26,17,17,17,17,219,17,12, + 219,132,219,17,12,26,150,26,26,26,17,17,17,17,219,17, + 12,219,132,219,17,12,26,150,219,26,26,17,17,26,17,26, + 17,17,219,219,26,17,187,26,150,187,42,219,132,221,199,89, + 244,120,120,120,120,120,120,120,120,36,36,36,36,36,36,36, + 36,36,36,36,105,36,36,105,105,36,105,105,105,105,105,36, + 105,105,105,105,105,105,105,105,105,105,105,208,105,105,208,105, + 208,105,208,105,105,105,105,105,105,105,105,36,105,105,36,105, + 58,236,181,184,153,184,181,184,181,184,240,108,108,108,108,108, + 83,161,57,223,173,87,250,232,170,157,157,157,53,157,53,195, + 93,249,249,41,11,189,157,157,170,157,157,170,118,156,134,252, + 252,161,247,83,108,236,140,252,108,58,236,119,236,89,89,236, + 207,236,89,89,236,236,236,89,119,119,89,119,119,119,119,119, + 119,119,119,58,119,58,119,236,236,89,236,119,236,119,119,119, + 181,236,236,119,119,89,236,236,119,119,119,89,119,119,236,119, + 119,119,119,119,119,119,58,119,119,236,89,236,89,89,89,89, + 119,89,119,119,89,119,236,119,89,236,89,89,89,236,236,89, + 119,89,236,89,89,119,236,119,236,89,89,89,89,89,89,236, + 89,89,89,89,119,89,89,236,89,119,119,119,119,119,119,119, + 119,119,236,119,236,119,119,119,119,119,119,119,159,119,108,47, + 183,187,122,224,183,42,111,122,42,122,122,0,42,42,122,122, + 122,122,0,122,42,42,42,187,122,42,122,122,122,122,42,122, + 122,122,122,0,122,42,42,42,187,122,42,122,122,0,122,42, + 122,122,122,122,122,122,42,42,42,187,0,42,122,122,0,122, + 26,122,122,122,122,0,0,183,42,42,187,0,42,122,122,0, + 122,42,0,122,42,122,0,0,183,42,42,187,0,42,122,122, + 0,122,42,122,122,122,122,0,122,42,42,42,187,122,42,122, + 122,0,122,42,122,122,122,122,0,122,42,42,42,187,122,42, + 122,122,0,122,42,0,122,122,122,0,122,42,42,42,187,122, + 42,122,122,0,122,42,122,122,122,122,0,0,183,42,183,187, + 122,42,122,122,0,122,42,122,122,122,122,0,122,42,78,42, + 187,122,42,122,122,0,122,42,122,122,122,122,122,122,42,42, + 42,187,0,42,122,122,0,122,42,122,122,122,122,122,122,42, + 78,42,187,0,42,122,122,0,122,183,0,122,122,122,0,122, + 42,42,42,187,122,42,122,122,0,122,42,122,122,42,0,0, + 122,42,42,42,187,122,42,122,122,0,42,42,122,122,42,122, + 122,122,42,42,219,187,0,42,122,0,0,122,42,0,122,122, + 122,0,122,42,42,183,187,122,42,122,122,0,122,42,122,122, + 122,122,0,122,42,42,42,187,122,42,122,122,0,122,42,122, + 122,122,122,122,122,42,42,42,187,183,162,122,42,122,225,114, + 244,120,248,244,120,120,120,120,120,120,120,36,36,36,36,36, + 105,36,36,36,105,105,36,105,105,105,105,36,105,105,105,105, + 105,105,105,105,105,105,105,105,105,208,105,208,105,208,105,208, + 36,105,105,105,105,105,105,105,36,36,36,36,36,36,105,36, + 181,184,184,181,240,184,184,240,240,108,181,108,108,108,108,108, + 83,161,251,176,185,53,45,204,189,170,170,157,157,157,189,170, + 9,11,13,195,198,53,157,157,157,170,157,189,198,146,10,91, + 59,64,47,64,44,64,109,152,161,83,58,58,89,236,89,89, + 89,207,89,236,89,89,236,236,236,89,119,89,119,236,119,119, + 119,119,236,119,119,119,236,89,119,119,119,236,119,89,89,89, + 236,119,119,119,89,236,236,119,236,236,236,119,236,236,119,119, + 119,119,119,119,119,58,119,236,236,119,119,119,119,236,236,89, + 89,119,89,89,119,89,119,89,236,89,89,236,236,89,89,119, + 89,119,119,119,119,89,119,89,89,236,89,89,89,236,236,89, + 89,89,89,89,89,119,119,119,119,89,236,119,89,89,119,119, + 159,119,119,236,119,236,89,119,159,119,119,119,119,119,108,142, + 122,78,0,187,78,221,183,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,183,122,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,42,122,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,42,122,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,42,122,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,42,122,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,183,122,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,42,122,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,219,122,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,42,122, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,122,42, + 122,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 42,122,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,42,122,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,42,122,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,42,122,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,42,122,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,42,122,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,42,122,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,183,78,78,0,0,0,0,199,119, + 25,120,120,120,120,120,120,120,120,120,36,36,36,36,36,36, + 36,105,36,36,36,105,105,105,105,36,105,36,105,105,105,105, + 36,105,105,105,105,105,105,105,105,105,208,105,208,105,105,105, + 208,105,105,105,105,105,105,36,36,36,36,36,36,36,36,36, + 58,184,58,58,240,181,184,240,181,108,119,240,108,108,161,252, + 76,189,185,116,118,9,9,118,52,198,189,170,157,53,170,90, + 170,53,231,6,195,65,77,170,157,170,157,204,189,32,198,242, + 229,235,234,152,186,245,245,12,199,108,108,240,89,236,207,236, + 89,89,207,236,236,119,236,119,119,236,119,236,119,89,119,119, + 236,119,119,119,119,119,58,236,236,89,119,89,119,119,119,119, + 89,89,236,236,236,89,236,89,236,119,89,119,119,119,236,119, + 236,119,236,119,119,119,119,119,89,236,89,236,119,119,119,89, + 89,119,236,89,236,89,89,89,89,89,89,89,207,89,89,119, + 89,89,89,236,119,89,236,236,89,236,89,89,89,89,89,236, + 119,119,119,119,236,89,89,236,236,89,89,119,119,236,119,236, + 236,119,119,119,119,119,119,119,119,119,119,119,119,119,108,47, + 42,187,221,187,183,0,183,0,14,216,41,62,62,62,62,62, + 62,62,62,62,41,75,26,12,0,14,216,62,41,62,62,62, + 62,62,62,62,62,41,59,26,17,0,14,216,41,62,62,62, + 62,62,62,62,62,62,41,75,26,12,0,14,216,41,62,62, + 62,62,62,62,62,62,62,41,75,26,12,0,14,216,41,62, + 62,62,62,62,62,62,62,62,41,75,26,12,0,14,216,62, + 41,62,62,62,62,62,62,62,62,41,75,26,12,0,14,216, + 41,62,62,62,62,62,62,62,62,62,41,75,26,12,0,14, + 216,62,41,62,62,62,62,62,62,62,62,41,75,26,12,0, + 14,216,41,62,62,62,62,62,62,62,62,62,41,75,26,12, + 0,14,216,41,62,62,62,62,62,62,62,62,62,62,35,26, + 12,0,14,216,41,62,62,62,249,62,62,62,62,62,41,75, + 26,12,0,14,216,41,62,62,62,62,62,62,62,62,62,41, + 75,26,12,0,14,216,62,41,62,62,249,62,62,62,62,62, + 41,59,26,17,0,14,216,41,62,62,62,62,62,62,62,62, + 62,41,59,26,17,0,14,216,41,62,62,62,62,62,62,62, + 62,62,41,75,26,12,0,14,216,62,41,62,62,62,62,62, + 62,62,62,41,75,26,12,0,14,216,62,41,62,62,62,62, + 62,62,62,62,41,75,26,12,0,14,216,41,62,62,62,62, + 62,62,62,62,62,41,75,26,187,42,42,26,187,42,225,114, + 120,120,120,120,120,120,120,120,120,120,36,36,36,36,36,36, + 36,36,36,105,36,36,105,36,105,105,105,105,105,105,105,105, + 105,105,105,105,105,105,105,208,105,208,105,105,105,105,105,105, + 105,105,105,105,105,36,36,36,105,36,36,36,36,36,36,36, + 184,181,58,240,240,108,240,58,240,108,83,161,106,136,136,76, + 136,106,106,161,228,22,168,220,118,204,170,128,157,189,185,6, + 93,23,9,185,9,116,189,170,77,157,189,53,23,86,195,45, + 204,118,228,44,67,99,254,8,7,234,105,83,240,89,89,89, + 89,89,89,89,236,236,119,236,236,89,236,119,236,58,236,236, + 119,236,119,119,236,58,119,119,89,119,89,236,236,89,89,89, + 119,236,89,236,119,236,236,236,119,89,119,89,119,89,119,236, + 119,236,119,236,119,58,58,236,119,89,119,119,89,236,236,119, + 236,89,89,89,119,89,236,89,236,89,89,89,89,207,89,89, + 119,119,89,89,89,236,119,89,89,89,236,89,89,207,207,89, + 89,89,89,89,89,119,89,119,119,119,119,119,89,119,236,119, + 119,119,119,89,119,89,119,119,119,119,119,119,119,119,108,142, + 187,111,42,224,111,162,111,42,233,110,195,90,195,90,195,90, + 90,90,90,90,60,154,26,12,42,233,110,90,90,195,90,195, + 90,90,90,90,195,60,154,26,12,42,233,110,90,90,195,90, + 195,90,90,90,90,90,60,154,26,12,42,233,110,195,90,195, + 90,195,90,90,90,90,90,60,154,26,12,42,233,110,195,90, + 195,90,195,90,90,90,90,90,60,154,26,12,42,233,110,195, + 90,195,90,195,90,90,90,90,90,60,154,26,12,42,233,110, + 195,90,195,90,195,90,90,90,90,90,60,154,26,12,42,233, + 110,195,90,195,90,195,90,90,90,90,90,60,154,26,12,42, + 233,110,195,90,195,90,195,90,90,90,90,90,60,154,26,12, + 42,233,110,90,90,195,90,195,90,90,90,90,195,60,154,26, + 12,42,233,110,195,90,90,195,90,90,90,90,90,90,60,154, + 26,12,42,233,110,195,90,195,90,195,90,90,90,90,90,60, + 154,26,12,42,233,110,195,90,90,195,90,90,90,90,90,195, + 60,154,26,12,42,233,110,195,90,195,90,195,90,90,90,90, + 195,60,154,26,12,42,233,110,195,90,90,195,195,90,90,90, + 90,90,60,154,26,12,42,233,110,195,90,195,90,195,90,90, + 90,90,90,60,154,26,12,42,233,110,195,90,195,90,195,90, + 90,90,90,90,60,154,26,12,42,233,110,195,90,195,90,195, + 90,90,90,90,90,60,154,26,12,183,26,12,141,183,199,89, + 120,25,120,120,120,120,120,36,120,36,120,36,36,36,36,36, + 105,36,105,36,105,105,105,105,105,105,36,105,105,105,105,105, + 105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105, + 105,105,105,105,36,36,36,36,36,36,36,36,36,36,36,36, + 184,240,240,181,240,108,108,83,161,161,252,161,161,161,83,83, + 83,83,161,252,136,161,168,41,11,231,65,128,185,116,189,193, + 23,137,159,250,65,116,170,90,90,193,230,107,90,72,83,161, + 167,216,11,11,41,14,162,0,141,235,12,199,247,119,236,207, + 236,89,89,89,89,236,236,236,119,119,236,119,119,119,119,119, + 119,119,236,119,236,236,236,119,236,236,119,236,119,119,119,89, + 119,236,89,236,119,236,236,236,236,236,236,89,119,236,119,236, + 119,119,119,236,236,236,119,236,119,236,89,236,236,89,89,119, + 89,236,236,89,119,89,89,207,89,207,89,207,89,236,89,89, + 89,236,89,89,89,89,119,89,89,89,89,89,89,89,89,236, + 89,89,89,89,89,89,89,89,89,89,89,119,119,89,89,119, + 89,89,119,236,119,89,89,89,89,89,119,119,119,119,108,44, + 183,95,78,224,224,42,132,122,206,128,23,23,23,86,19,19, + 65,65,19,19,195,154,12,243,122,206,128,86,23,23,86,19, + 19,65,65,19,19,195,178,243,109,122,206,128,86,23,23,86, + 19,19,65,65,19,19,195,154,12,243,122,206,128,23,23,23, + 86,19,19,65,65,19,19,195,154,12,243,122,206,128,23,23, + 23,86,19,19,65,65,19,19,195,178,243,243,122,206,128,23, + 23,23,86,19,19,65,65,19,19,195,178,243,243,122,206,128, + 23,23,23,86,19,19,65,65,19,19,195,178,243,243,122,206, + 128,23,23,23,86,19,19,65,65,19,19,195,154,12,243,122, + 206,128,23,23,23,86,19,19,65,65,19,23,195,154,12,243, + 122,206,128,86,23,23,86,19,19,65,65,19,19,195,178,243, + 243,122,206,128,23,23,23,23,23,65,19,65,19,19,195,154, + 12,243,122,206,128,23,23,23,86,19,19,65,65,19,19,195, + 154,12,243,122,206,128,86,23,23,23,23,65,19,118,19,19, + 195,178,243,109,122,206,128,23,23,23,86,19,19,65,65,19, + 19,195,178,243,109,122,206,128,23,23,23,86,19,19,65,65, + 19,19,195,178,243,243,122,206,128,23,23,23,86,19,19,65, + 65,19,19,195,154,12,243,122,206,128,23,23,23,86,19,19, + 65,65,19,19,195,154,12,243,122,206,128,23,23,23,86,19, + 19,65,65,19,23,195,178,243,211,187,183,187,141,42,192,114, + 244,25,120,120,120,36,120,36,36,36,120,36,36,36,36,36, + 36,105,36,105,36,105,36,105,105,105,105,36,105,105,36,105, + 105,36,105,105,105,105,105,105,105,208,105,105,105,105,105,105, + 36,36,105,105,36,36,36,36,36,36,36,36,36,36,36,36, + 240,240,108,108,83,83,247,83,83,83,83,108,108,108,108,83, + 83,161,161,252,106,136,136,23,116,13,167,116,231,195,43,107, + 85,250,79,220,23,128,23,13,65,85,11,23,231,13,56,104, + 50,50,50,92,167,216,41,113,50,17,8,8,36,108,236,89, + 89,236,207,236,236,236,119,119,236,236,119,119,236,119,58,236, + 58,236,58,58,119,119,119,236,89,89,236,119,236,89,89,236, + 89,89,236,89,236,119,119,119,119,236,119,236,236,119,236,119, + 236,236,236,119,119,119,236,58,236,89,236,119,89,236,236,89, + 236,89,89,89,236,89,236,89,89,89,207,89,89,207,207,89, + 89,89,89,236,119,236,89,89,207,89,207,207,207,207,89,89, + 89,89,89,89,89,89,236,89,89,89,119,119,89,119,119,236, + 89,236,236,119,236,236,89,119,119,119,89,119,119,108,108,142, + 187,111,162,187,224,78,111,42,137,204,19,65,19,65,65,65, + 65,65,19,65,195,178,17,211,122,233,204,19,65,19,65,65, + 65,65,65,65,65,90,178,17,243,122,233,204,19,65,19,65, + 65,65,65,65,19,65,90,178,132,211,122,222,204,19,65,19, + 65,65,65,65,65,19,65,195,178,132,211,122,222,204,19,65, + 19,65,65,65,65,65,19,65,90,178,17,109,122,222,204,19, + 19,19,65,65,65,65,65,19,65,90,178,17,109,122,222,204, + 19,65,19,65,65,65,65,65,19,65,90,178,17,109,122,222, + 204,19,65,19,65,65,65,65,65,19,65,195,178,132,211,122, + 222,204,19,65,19,65,65,65,65,65,19,65,195,178,17,211, + 122,233,204,19,65,19,65,65,65,65,65,19,65,90,178,219, + 211,122,222,128,19,65,19,65,65,19,118,65,19,65,90,178, + 132,211,122,222,204,19,65,19,65,65,65,65,65,19,65,195, + 178,132,211,42,233,204,65,19,65,65,65,19,65,65,19,65, + 90,178,219,8,122,222,204,19,65,19,65,65,65,65,65,65, + 65,90,178,17,243,122,222,128,19,65,19,65,65,65,65,65, + 19,65,90,178,219,211,122,222,204,19,65,19,65,65,65,65, + 65,19,65,195,178,17,211,122,222,204,19,65,19,65,65,65, + 65,65,19,65,90,178,132,211,122,222,204,19,65,19,65,65, + 65,65,65,19,19,60,178,219,109,219,42,132,166,42,234,114, + 120,120,120,25,36,120,120,25,25,36,217,36,36,36,105,36, + 105,36,105,36,105,105,105,105,105,105,105,36,105,105,105,105, + 105,105,105,105,105,105,105,105,105,105,208,105,105,105,36,36, + 36,105,36,36,36,36,36,36,36,36,36,36,36,36,36,36, + 240,240,108,240,240,240,240,240,184,240,240,108,83,83,83,83, + 161,161,161,161,161,161,136,189,170,31,206,138,6,6,31,138, + 157,193,148,176,27,185,237,216,13,231,87,138,232,32,43,143, + 229,15,29,0,0,50,14,31,249,14,162,26,49,181,58,236, + 236,89,119,119,119,119,119,58,119,119,119,119,58,119,58,119, + 119,58,119,58,236,236,236,236,236,89,89,236,236,236,89,236, + 89,89,236,89,236,89,119,119,119,236,119,119,236,119,89,119, + 119,119,236,236,236,119,236,236,236,89,236,236,119,236,236,236, + 119,119,236,119,236,89,89,207,207,89,207,207,89,89,207,89, + 89,236,89,89,119,89,236,89,207,89,89,89,89,207,207,89, + 89,89,89,89,236,89,89,89,89,89,89,119,89,89,119,119, + 119,119,119,119,236,236,236,119,119,119,89,119,89,119,108,142, + 17,111,221,187,224,78,111,122,31,204,118,118,118,118,51,118, + 118,118,65,118,128,84,26,8,122,31,170,65,118,118,118,118, + 118,118,118,65,118,60,84,26,8,122,31,170,65,118,118,118, + 51,118,118,118,118,65,128,84,26,8,122,31,204,118,118,118, + 118,51,118,118,118,65,118,128,84,26,8,122,31,204,118,118, + 118,118,51,118,118,118,65,65,60,178,26,211,122,31,170,118, + 118,118,118,51,118,118,118,65,65,60,178,26,211,122,31,204, + 118,118,118,118,51,118,118,118,118,65,60,178,26,211,122,31, + 204,118,118,118,118,51,118,118,118,118,65,128,84,26,8,122, + 31,204,118,118,118,118,51,118,118,118,118,65,128,84,26,8, + 122,31,170,65,118,118,118,51,118,118,118,65,65,128,84,26, + 211,122,31,170,118,118,118,118,51,118,118,118,118,65,128,84, + 26,8,122,31,204,118,118,118,118,51,118,118,118,118,65,128, + 84,26,8,0,31,170,65,118,118,118,51,118,118,118,118,65, + 60,178,17,211,122,31,204,118,118,118,118,118,118,118,118,65, + 118,60,84,26,139,122,31,170,118,118,118,118,51,118,118,118, + 118,65,60,178,26,211,122,31,204,118,118,118,118,51,118,118, + 118,118,65,128,84,26,211,122,31,204,118,118,118,118,51,118, + 118,118,118,65,128,84,26,8,122,31,204,118,118,118,118,51, + 118,118,118,118,65,128,84,26,182,187,42,187,166,42,80,114, + 120,120,244,120,36,36,120,120,36,120,36,217,36,36,105,36, + 36,105,217,36,36,105,36,105,105,36,105,105,105,36,105,36, + 105,105,36,105,105,105,105,105,105,105,63,105,105,36,36,36, + 36,36,36,36,36,36,36,36,36,36,36,36,36,36,217,36, + 240,240,240,240,108,240,240,240,108,240,108,240,108,108,83,83, + 108,83,83,83,83,161,106,189,106,106,161,250,195,6,10,129, + 189,148,189,43,195,237,137,167,220,6,220,22,237,138,6,167, + 251,226,24,200,40,0,0,0,0,22,24,129,127,108,58,236, + 236,119,89,89,236,236,236,119,119,119,236,119,119,119,119,119, + 58,119,236,119,58,58,119,236,89,236,236,89,89,89,236,89, + 236,236,89,236,89,236,236,236,236,236,236,236,119,236,119,236, + 119,236,119,119,119,236,119,119,207,236,89,89,89,119,89,89, + 89,89,89,89,89,89,89,89,89,207,89,89,207,207,89,89, + 89,89,89,89,89,236,89,89,89,89,207,207,89,89,89,89, + 89,89,89,89,89,89,236,89,89,89,119,89,119,89,89,89, + 89,89,119,236,119,119,89,119,119,119,119,89,119,108,108,29, + 26,111,122,187,224,122,59,42,31,53,118,51,51,51,107,52, + 52,52,118,118,128,84,17,182,0,31,45,107,51,107,51,52, + 52,52,52,118,118,128,178,17,182,0,31,45,107,51,107,51, + 107,52,51,51,118,118,128,178,26,211,122,31,53,118,51,51, + 51,107,52,51,52,118,118,128,178,26,211,122,31,53,118,51, + 51,51,107,52,51,52,107,118,204,84,17,243,122,249,170,118, + 51,51,51,107,52,51,52,107,118,204,84,17,243,122,31,53, + 118,51,51,51,107,52,51,51,118,118,204,84,17,243,122,31, + 53,118,51,51,107,51,52,52,51,118,118,128,178,26,211,122, + 31,53,118,51,51,51,51,52,51,107,51,118,128,84,17,182, + 0,249,53,107,51,107,51,51,52,52,52,107,51,128,84,17, + 211,0,249,53,118,51,51,51,51,51,107,51,118,118,128,84, + 26,211,122,31,53,118,51,51,51,107,52,51,51,118,51,128, + 84,17,182,0,249,53,107,51,51,51,107,52,51,107,118,118, + 204,84,26,8,122,31,53,51,51,51,51,52,52,52,52,118, + 118,128,178,17,243,0,249,53,118,51,107,51,107,52,51,107, + 118,118,204,84,17,8,122,31,53,118,51,51,107,51,52,51, + 51,118,51,128,84,17,243,122,31,53,118,51,51,51,107,52, + 51,51,118,118,128,178,26,211,122,31,53,118,51,51,51,107, + 52,51,52,118,118,128,178,17,211,187,183,219,132,0,171,114, + 120,25,120,120,120,120,120,120,25,36,36,36,105,36,36,36, + 105,36,36,36,217,36,105,36,105,36,36,105,36,105,36,105, + 36,105,36,105,105,105,105,105,105,105,105,36,36,36,105,36, + 36,105,36,36,36,36,36,36,36,36,36,36,36,105,36,36, + 58,181,240,58,240,181,240,240,119,119,108,240,108,108,108,108, + 83,83,83,161,161,161,148,136,161,161,252,136,189,193,134,134, + 136,136,189,185,138,206,73,137,249,19,62,22,10,233,62,93, + 92,14,14,14,35,42,183,133,127,83,252,106,161,247,240,119, + 236,58,236,119,119,58,58,58,236,119,236,236,236,119,119,119, + 236,58,236,119,119,119,119,119,119,89,236,236,236,89,89,89, + 89,236,89,236,119,89,119,119,119,119,119,236,119,236,119,236, + 119,236,89,236,58,236,236,119,89,236,236,236,89,236,236,236, + 236,236,236,119,89,236,89,89,89,207,207,89,89,89,89,89, + 89,236,236,89,89,89,236,89,89,89,89,207,89,89,89,89, + 89,89,89,89,89,89,89,119,89,89,119,89,119,89,119,119, + 236,89,119,89,236,119,236,89,119,119,119,89,89,119,108,29, + 42,187,221,187,224,122,109,0,249,85,51,52,76,76,76,76, + 51,52,51,9,204,84,26,8,122,123,53,51,51,76,76,76, + 76,51,52,9,9,204,84,26,8,0,123,53,51,51,76,76, + 76,232,52,52,51,51,204,84,17,8,122,249,85,51,52,76, + 76,76,232,51,52,51,51,204,84,17,8,122,249,85,51,52, + 76,76,76,232,51,52,9,107,204,84,17,8,122,123,194,107, + 51,76,76,76,232,51,52,9,107,204,84,12,8,122,249,85, + 51,52,76,76,76,232,52,52,9,107,204,84,12,8,122,249, + 85,51,76,107,76,76,76,52,52,52,51,204,84,17,8,122, + 249,85,51,52,76,76,76,232,52,51,9,9,204,178,26,8, + 0,123,53,107,76,76,76,76,76,51,51,107,9,204,84,12, + 8,122,123,53,107,76,76,76,232,76,52,52,51,107,204,178, + 12,8,122,249,85,51,52,76,76,76,232,52,52,107,107,204, + 84,26,8,122,123,53,107,51,76,76,76,232,52,52,51,107, + 204,84,12,243,122,123,53,107,51,76,76,76,76,51,52,9, + 9,204,84,17,8,0,123,53,51,51,76,76,76,232,52,52, + 52,107,204,84,17,8,122,249,85,51,76,107,76,76,232,52, + 52,107,9,204,178,12,8,122,249,85,51,52,76,76,76,232, + 52,52,51,51,204,84,17,8,122,249,85,51,52,76,76,76, + 232,51,52,107,9,204,84,26,243,187,183,219,219,122,80,39, + 244,120,120,120,120,25,120,244,25,25,120,120,36,36,36,36, + 36,36,217,36,36,36,36,105,36,105,36,36,36,105,36,105, + 36,105,36,105,105,105,105,105,105,105,105,36,36,36,36,36, + 105,36,36,36,36,36,36,36,36,36,36,36,36,105,105,36, + 58,184,181,240,240,240,58,58,240,240,181,119,240,240,108,108, + 108,108,83,83,161,136,136,83,161,161,161,252,136,193,106,136, + 106,106,76,27,149,161,55,22,137,77,179,21,89,21,33,149, + 13,36,38,38,38,143,83,136,252,83,83,108,240,240,58,58, + 58,119,119,236,236,119,236,119,58,58,58,119,119,119,58,236, + 119,119,58,58,236,236,236,236,236,119,119,89,89,89,207,89, + 89,89,236,181,89,119,236,236,119,236,236,119,236,119,236,119, + 119,119,159,119,236,119,119,236,236,89,119,89,236,236,119,236, + 207,89,89,89,119,89,89,236,89,89,89,89,119,236,236,89, + 119,89,207,236,119,119,89,89,207,236,207,89,89,236,236,89, + 236,89,236,119,119,119,119,89,89,89,89,89,89,89,236,236, + 119,119,89,119,119,89,119,89,119,119,119,119,119,119,108,29, + 42,163,0,219,111,122,59,122,123,85,52,76,76,76,232,232, + 232,76,52,52,204,154,17,243,162,123,85,76,232,76,76,232, + 232,232,76,51,9,204,154,17,141,162,123,85,76,232,76,76, + 232,232,232,51,52,9,204,154,17,141,0,123,85,52,76,76, + 76,232,232,232,52,52,9,204,154,17,141,0,123,85,52,76, + 76,76,232,232,232,51,51,9,204,154,17,243,122,123,85,76, + 232,76,76,232,232,232,76,51,9,204,154,17,141,0,123,85, + 52,76,76,76,232,232,232,76,51,9,204,154,17,141,0,123, + 85,232,76,76,232,232,232,232,51,51,9,204,154,17,141,0, + 123,85,52,76,76,232,232,232,76,76,51,9,204,154,17,243, + 122,123,194,52,76,76,232,232,232,232,76,51,52,204,84,17, + 243,122,123,85,52,76,76,232,232,232,232,51,52,9,204,168, + 17,141,0,123,85,52,76,76,76,232,232,232,76,51,9,204, + 178,17,243,0,123,85,52,232,76,232,232,232,232,51,52,9, + 204,154,17,211,162,123,85,76,232,76,76,232,232,232,76,51, + 9,204,154,17,243,122,123,85,76,232,76,76,232,232,232,51, + 107,9,204,84,17,182,0,123,85,232,76,76,232,232,232,232, + 76,51,9,204,84,17,141,0,123,85,52,76,76,76,232,232, + 232,51,52,9,204,154,17,141,0,123,85,52,76,76,76,232, + 232,232,51,52,9,204,154,17,182,166,42,187,219,0,202,114, + 120,120,120,120,120,244,120,120,120,244,36,120,36,36,120,120, + 36,36,36,36,36,36,36,36,36,36,36,36,36,36,105,36, + 36,105,36,105,36,105,105,36,105,105,36,36,36,36,36,36, + 36,36,36,36,36,36,36,36,36,36,36,105,36,36,36,105, + 58,240,240,119,58,240,240,181,240,240,240,240,119,108,108,108, + 108,108,108,83,252,232,161,83,161,83,161,161,106,189,176,161, + 252,106,136,106,147,147,114,62,233,157,136,252,136,106,106,252, + 148,148,252,106,252,252,252,83,83,108,108,119,108,119,119,240, + 119,119,119,119,236,119,236,119,119,119,119,58,236,236,119,119, + 58,119,119,58,58,58,119,119,236,236,119,119,236,89,236,207, + 207,89,236,236,89,119,236,236,58,119,236,236,236,119,236,236, + 236,236,236,119,159,236,159,236,236,236,119,236,119,236,89,119, + 236,89,119,89,236,119,89,236,236,236,89,89,89,89,236,89, + 89,89,207,89,89,119,119,119,89,236,236,236,119,236,236,89, + 89,89,89,89,89,89,236,119,89,89,89,119,119,119,89,236, + 236,119,89,89,119,119,119,89,89,119,89,89,119,119,108,172, + 26,111,162,187,111,122,59,122,167,194,76,76,148,232,148,148, + 232,232,52,52,204,168,12,243,122,167,194,76,232,148,232,148, + 148,232,148,52,76,204,168,26,211,122,167,194,76,232,148,148, + 232,148,148,232,52,52,204,168,26,211,122,167,194,76,76,148, + 232,232,148,232,232,52,52,204,168,26,211,122,167,194,76,76, + 148,232,148,148,148,232,76,52,204,168,17,243,122,167,194,76, + 232,148,148,232,148,232,232,76,52,204,168,26,211,122,167,194, + 76,76,148,232,232,148,232,232,76,52,204,168,26,211,122,167, + 194,76,232,232,148,232,148,148,232,52,52,204,168,26,211,122, + 167,194,76,76,232,232,232,148,148,148,52,76,204,168,17,243, + 122,167,194,76,76,232,232,232,148,148,232,52,52,204,168,26, + 211,122,167,194,76,76,232,232,232,148,148,232,232,52,204,168, + 26,211,122,167,194,76,76,148,148,232,148,232,148,52,52,204, + 168,12,109,122,167,194,76,232,232,232,232,148,148,232,52,52, + 204,168,219,243,122,167,194,76,232,148,232,232,148,232,148,52, + 76,204,168,17,109,122,167,194,76,232,148,232,148,232,148,232, + 76,52,204,168,26,211,0,167,194,76,232,232,148,232,148,232, + 148,52,76,204,168,26,211,122,167,194,76,76,148,148,232,148, + 148,232,52,52,204,168,26,211,122,167,194,76,76,148,232,232, + 148,148,232,76,52,204,168,26,243,166,42,219,219,162,57,39, + 244,120,244,120,120,120,120,120,120,120,25,25,36,36,36,36, + 36,36,120,36,36,36,36,36,36,36,36,36,36,36,105,36, + 36,36,105,36,36,105,36,105,36,36,36,36,36,36,36,105, + 36,36,36,36,36,36,36,36,36,36,36,36,217,36,36,36, + 236,181,58,240,181,58,58,240,58,181,240,119,108,119,108,108, + 108,108,83,161,106,161,83,83,161,83,83,161,252,27,176,161, + 176,136,161,161,252,147,87,11,135,189,136,161,83,161,83,83, + 161,106,161,83,83,83,108,240,108,108,108,108,119,108,240,119, + 58,181,236,119,58,119,58,58,236,58,58,119,58,119,58,236, + 119,58,58,119,119,119,58,236,58,119,58,236,236,236,207,89, + 89,236,207,89,236,236,119,236,236,236,119,119,119,236,159,119, + 159,119,159,159,236,159,236,159,58,119,236,119,236,236,58,236, + 89,207,89,236,89,89,236,89,89,236,119,236,89,207,89,207, + 207,207,89,89,89,89,89,89,236,89,89,236,236,119,119,236, + 236,236,236,236,89,236,89,89,119,119,119,89,89,89,119,89, + 89,89,236,119,89,89,119,89,89,89,119,236,119,119,108,29, + 42,187,122,219,111,122,224,122,237,32,232,148,148,148,148,147, + 232,148,76,232,231,222,26,211,122,237,32,232,232,148,148,148, + 147,148,232,232,232,231,222,17,243,122,237,32,232,232,148,148, + 148,148,148,232,232,232,231,222,17,243,122,237,32,232,148,148, + 148,148,147,232,148,232,232,231,222,17,243,122,237,32,232,148, + 148,148,148,147,148,148,232,232,231,168,26,211,0,237,32,232, + 232,148,148,148,147,232,232,232,232,231,168,219,243,122,237,32, + 232,148,148,148,148,148,148,232,232,232,231,168,17,109,0,237, + 32,232,232,148,148,148,147,148,148,232,232,231,222,17,243,122, + 237,32,232,148,148,148,148,147,148,148,76,232,231,222,26,211, + 122,237,32,232,148,148,148,148,77,148,148,76,232,231,222,219, + 243,122,237,32,232,148,148,148,148,148,148,232,76,232,231,222, + 17,243,122,237,32,232,148,148,148,148,148,232,148,232,232,231, + 222,219,8,122,237,32,232,232,148,148,148,148,148,148,232,232, + 231,222,26,211,122,237,32,232,232,148,148,148,147,148,232,232, + 232,231,168,26,243,122,237,32,232,232,148,148,148,147,148,148, + 232,148,231,222,219,243,122,237,32,232,232,148,148,148,148,232, + 232,232,232,231,222,17,243,122,237,32,232,148,148,148,148,148, + 148,232,232,232,231,222,17,243,122,237,32,232,148,148,148,148, + 147,148,148,76,232,231,222,219,211,166,183,219,183,0,57,89, + 248,248,248,248,120,120,120,244,244,120,244,244,244,120,120,120, + 120,244,36,36,244,36,36,36,36,36,36,36,36,36,36,36, + 36,36,36,36,36,36,36,36,105,36,36,36,36,36,36,36, + 36,36,36,36,36,36,36,36,36,217,36,217,36,217,217,105, + 236,184,58,240,58,240,58,58,240,119,240,181,240,240,108,108, + 108,108,83,161,161,108,83,83,83,161,83,161,161,136,106,161, + 176,161,161,161,161,252,250,116,48,136,106,83,161,83,83,161, + 83,161,161,161,108,108,108,108,108,240,108,108,240,119,240,119, + 58,119,58,119,58,119,58,184,119,119,58,119,240,119,58,58, + 119,119,58,58,58,58,58,119,58,236,119,119,236,89,236,119, + 119,119,89,119,89,236,119,119,119,58,58,58,58,236,236,236, + 236,236,236,119,236,159,119,236,159,58,236,58,58,236,236,236, + 236,236,89,236,89,89,236,236,119,236,89,236,236,89,89,89, + 89,89,207,207,89,236,236,89,119,58,119,236,236,236,119,236, + 236,236,236,236,119,119,89,89,89,89,236,119,89,89,236,119, + 236,119,89,119,119,89,119,119,119,89,119,89,119,119,108,29, + 183,187,162,187,111,122,224,42,138,117,193,193,157,157,189,189, + 157,193,193,85,70,31,26,243,122,138,117,193,193,157,157,189, + 189,157,157,193,85,70,31,26,8,122,138,117,193,193,157,157, + 189,189,157,193,193,85,70,31,26,8,122,138,117,193,193,157, + 157,189,189,157,193,193,85,70,31,17,243,122,138,117,193,193, + 157,157,189,189,157,193,193,32,70,31,26,8,122,138,117,193, + 193,157,157,189,189,157,157,193,32,70,31,12,243,122,138,117, + 193,193,157,157,189,189,157,193,193,32,70,31,17,243,122,138, + 117,193,193,157,157,189,189,157,193,193,85,70,31,17,243,122, + 138,117,193,193,157,157,189,189,157,193,193,85,70,31,26,8, + 42,138,117,193,193,157,157,189,189,157,193,193,194,70,31,26, + 8,42,138,117,193,193,157,157,189,189,157,193,193,85,70,222, + 91,243,122,138,117,193,193,157,157,189,189,157,193,193,194,70, + 31,26,8,42,138,117,193,193,157,157,189,189,157,193,193,85, + 70,31,26,243,122,138,117,193,157,157,157,189,189,157,157,193, + 85,70,228,26,243,122,138,117,193,193,157,157,189,189,157,193, + 193,194,70,31,26,243,122,138,117,193,193,157,157,189,189,157, + 193,193,194,70,31,26,8,122,138,117,193,193,157,157,189,189, + 157,193,193,85,70,31,17,243,42,138,117,193,193,157,157,189, + 189,157,193,193,85,70,31,17,243,187,42,187,219,122,57,181, + 244,244,244,244,244,244,244,120,120,120,120,120,244,244,120,120, + 120,120,244,36,244,244,36,244,36,36,36,36,36,36,36,36, + 36,36,36,36,36,36,36,36,36,36,244,36,36,36,105,36, + 36,36,36,36,36,36,36,36,36,217,36,36,36,36,36,36, + 184,58,240,181,240,181,58,58,119,240,240,108,119,119,119,108, + 108,108,161,161,108,83,83,83,83,83,83,83,161,106,106,161, + 161,161,83,83,161,83,250,6,55,252,136,83,161,161,83,108, + 83,83,83,161,83,240,108,108,119,108,240,240,240,108,58,58, + 58,58,58,58,58,58,119,119,58,58,119,119,119,119,240,58, + 58,58,58,119,119,119,119,58,119,119,58,119,119,236,236,89, + 236,89,119,236,236,236,89,236,58,236,58,58,58,159,58,159, + 159,159,159,159,58,119,236,119,58,58,58,58,236,236,236,236, + 119,89,236,89,236,119,236,89,89,119,236,89,89,89,207,207, + 207,207,89,89,89,89,89,119,236,236,119,119,236,236,236,119, + 236,119,119,119,89,89,119,119,236,89,119,89,119,236,119,236, + 119,89,236,236,89,119,119,89,119,119,89,89,119,119,108,29, + 122,111,122,183,111,122,224,0,226,87,21,21,242,30,13,13, + 30,242,21,18,18,47,12,12,0,226,87,18,72,242,30,13, + 13,30,72,21,18,18,35,17,109,0,226,87,21,21,242,30, + 13,13,30,242,21,18,18,35,12,12,122,226,87,18,72,242, + 30,13,13,30,242,21,18,18,35,26,12,0,226,87,21,21, + 242,30,13,13,30,242,18,18,18,47,17,109,0,226,87,18, + 72,242,30,13,13,30,72,21,18,18,35,26,12,0,226,87, + 21,21,156,30,86,13,30,242,18,18,18,59,26,12,0,226, + 21,21,21,156,43,13,13,30,242,21,18,18,35,26,12,0, + 226,87,21,21,156,43,13,13,30,242,21,18,18,47,17,243, + 0,226,87,21,21,156,43,13,13,30,72,21,33,18,47,17, + 243,0,226,87,18,72,242,30,13,13,30,242,21,33,18,46, + 17,12,0,226,87,18,21,156,30,86,13,30,242,21,18,18, + 35,12,243,0,226,87,18,72,242,30,13,13,30,242,21,18, + 18,47,12,12,0,226,87,21,72,156,43,13,13,30,72,21, + 21,18,35,12,187,0,226,87,18,72,242,30,13,13,30,242, + 21,18,18,35,12,187,0,226,21,21,21,156,30,86,13,30, + 242,21,18,18,35,12,109,0,226,87,18,21,242,30,13,13, + 30,242,21,18,18,35,26,12,0,226,87,21,21,156,43,13, + 13,30,242,21,18,18,59,26,109,166,42,219,26,0,191,89, + 244,244,71,244,71,244,244,71,244,244,244,244,120,120,244,244, + 244,36,36,36,244,36,244,36,244,244,244,244,244,244,36,36, + 244,36,36,36,36,36,36,36,36,36,36,36,105,36,36,36, + 36,36,36,36,36,36,36,36,105,36,36,105,105,105,105,105, + 58,58,240,58,184,58,58,181,184,181,58,240,108,108,108,108, + 108,83,161,119,83,108,83,83,83,83,161,83,161,176,176,161, + 161,161,161,83,83,83,176,98,138,252,106,161,83,83,83,83, + 83,83,83,83,161,83,108,108,240,108,108,108,119,240,240,58, + 119,236,119,236,119,58,58,119,58,58,58,58,119,119,119,58, + 58,58,58,58,58,58,119,58,240,119,58,58,58,119,58,236, + 236,236,236,119,236,236,119,236,119,236,236,58,58,184,58,58, + 58,58,236,58,236,159,58,236,58,159,58,240,58,58,58,236, + 236,89,89,89,89,89,236,236,89,119,89,89,89,89,89,89, + 89,207,89,207,89,119,89,236,236,236,119,119,119,236,236,119, + 236,236,236,236,119,236,236,119,119,89,119,236,119,236,89,236, + 159,119,119,159,236,236,159,89,119,119,119,236,119,119,83,29, + 56,111,162,183,187,162,224,0,203,23,250,86,149,149,51,51, + 149,86,250,86,138,187,187,8,0,40,19,250,86,179,149,51, + 51,146,179,86,250,28,187,26,8,0,203,23,250,86,149,149, + 51,51,149,86,86,250,28,187,187,243,0,40,19,250,86,179, + 149,51,136,149,86,86,250,28,187,187,8,0,203,23,250,86, + 149,149,51,51,149,179,250,250,28,187,26,8,0,203,19,250, + 86,179,149,51,51,146,179,250,250,28,187,187,8,0,203,23, + 250,86,179,146,51,146,146,179,250,250,28,111,187,8,221,40, + 23,250,86,179,146,51,51,149,86,86,250,28,187,187,8,0, + 203,23,250,86,179,146,51,51,149,86,86,250,28,91,26,243, + 0,40,23,250,86,179,146,51,51,146,86,86,250,28,91,26, + 243,0,40,19,250,86,179,149,51,51,149,86,86,250,28,163, + 187,8,0,203,19,250,86,179,146,51,146,146,179,86,250,28, + 187,26,8,0,203,19,250,86,179,149,51,51,149,86,250,86, + 138,187,187,8,0,40,23,250,86,179,146,51,51,146,86,250, + 250,28,187,187,8,0,203,19,250,86,179,149,51,146,149,86, + 86,250,28,187,12,8,221,40,23,250,86,179,146,51,146,146, + 179,250,250,28,187,26,8,0,203,19,86,86,149,149,51,51, + 149,86,86,250,28,187,187,8,0,203,23,250,86,179,146,51, + 51,149,86,86,250,28,163,26,8,111,42,187,42,122,208,89, + 244,244,71,144,244,71,244,244,244,244,244,244,244,244,36,244, + 244,244,244,120,244,244,36,244,36,36,36,36,36,36,36,244, + 36,36,244,36,36,36,36,36,36,105,36,36,36,36,36,36, + 36,36,36,36,36,36,36,36,217,105,36,36,36,217,217,105, + 58,181,58,58,181,184,184,184,58,119,240,181,119,119,108,159, + 83,83,108,119,108,83,108,83,83,83,83,83,161,161,106,161, + 83,83,83,161,83,108,118,98,23,252,106,83,161,83,83,83, + 108,108,108,66,83,83,108,108,108,108,108,240,108,119,240,58, + 58,119,58,58,58,58,119,58,119,58,58,119,58,58,119,119, + 119,119,58,58,58,58,58,119,119,58,58,236,58,58,236,119, + 58,119,89,89,119,89,236,119,89,119,58,58,58,58,159,119, + 159,119,159,58,58,119,119,119,58,58,58,58,58,236,236,89, + 89,207,236,89,89,236,89,89,89,89,236,89,207,89,207,207, + 89,89,89,89,89,89,236,119,119,119,236,236,236,236,236,236, + 236,89,236,119,143,236,236,236,236,143,236,119,236,119,159,119, + 143,236,119,143,236,119,236,159,159,143,159,236,119,108,108,20, + 122,111,122,78,111,122,59,0,40,32,157,189,189,189,189,189, + 189,189,157,85,204,61,219,211,0,95,32,157,189,189,189,189, + 189,189,189,157,85,204,61,219,211,0,40,32,157,189,189,189, + 189,189,189,189,157,85,204,61,219,211,0,95,32,157,189,189, + 189,189,189,189,189,157,85,204,61,219,211,0,40,32,157,189, + 189,189,189,189,189,189,157,85,128,61,219,211,0,95,32,157, + 189,189,189,189,189,189,189,157,85,204,61,219,211,0,40,32, + 157,189,189,189,189,189,189,189,157,85,204,61,219,243,0,95, + 32,157,189,189,189,189,189,189,189,157,85,204,61,219,211,0, + 95,32,157,189,189,189,189,189,189,189,157,85,128,91,219,211, + 0,97,32,157,189,189,189,189,189,189,189,189,85,128,91,219, + 211,0,95,32,157,189,189,189,189,189,189,189,157,85,204,91, + 219,211,0,95,32,157,189,189,189,189,189,189,189,189,85,204, + 61,219,211,0,95,32,157,189,189,189,189,189,189,189,157,85, + 204,61,219,211,0,40,32,157,189,189,189,189,189,189,189,157, + 85,128,61,219,211,0,95,32,157,189,189,189,189,189,189,189, + 189,85,204,91,219,243,0,95,32,157,189,189,189,189,189,189, + 189,157,85,204,61,219,211,0,95,32,157,189,189,189,189,189, + 189,189,157,85,204,61,219,211,0,95,32,157,189,189,189,189, + 189,189,189,157,85,204,91,219,182,166,183,219,219,0,63,89, + 144,144,244,244,144,244,71,244,244,244,244,244,244,244,244,244, + 244,244,244,244,244,36,36,244,244,244,36,244,36,244,36,244, + 36,244,36,36,244,36,36,36,36,36,36,36,36,36,36,36, + 36,36,36,36,36,36,105,36,36,36,105,105,105,36,105,105, + 236,236,184,153,58,58,181,184,240,181,240,240,108,119,108,108, + 108,83,108,108,108,108,108,108,83,83,83,83,83,161,176,83, + 83,83,161,83,83,108,9,231,23,161,252,83,83,83,83,83, + 83,108,83,108,83,83,108,108,119,108,119,108,119,240,119,119, + 58,236,119,119,58,240,119,240,119,119,58,58,119,58,58,58, + 159,119,58,58,159,119,58,58,58,119,240,119,119,58,119,236, + 236,119,236,236,236,89,89,119,119,89,119,119,119,58,58,236, + 236,159,236,58,236,236,119,236,119,58,119,119,119,236,236,236, + 236,89,89,89,119,89,89,236,89,119,236,119,207,89,89,207, + 236,89,89,236,89,236,89,236,236,119,58,58,58,58,159,119, + 58,119,236,119,119,119,236,159,119,143,159,119,159,119,159,119, + 159,159,159,159,159,159,159,143,159,159,159,159,159,108,108,20, + 122,111,162,183,111,0,224,0,40,45,52,76,148,76,148,148, + 148,232,76,27,230,91,122,243,0,40,53,52,76,232,148,148, + 148,148,232,52,27,230,26,122,243,0,40,53,52,76,232,148, + 148,148,148,232,52,27,230,26,122,243,0,40,53,52,76,232, + 232,148,147,148,232,52,27,230,26,78,243,0,40,53,52,76, + 232,76,148,148,148,232,52,27,230,91,122,243,0,40,53,52, + 76,148,148,148,148,148,232,52,27,230,26,122,243,0,40,53, + 52,76,232,148,148,147,148,232,52,27,230,91,122,243,0,40, + 53,52,76,148,148,76,148,148,232,52,27,230,26,122,243,0, + 40,53,52,76,148,76,148,147,148,232,52,27,230,91,0,243, + 0,40,53,52,76,148,76,148,148,147,232,52,185,230,91,0, + 243,0,40,45,52,232,232,148,148,148,148,232,52,185,230,26, + 122,243,0,40,53,52,76,148,76,148,147,147,148,52,27,230, + 91,122,243,0,40,53,52,232,232,148,76,147,148,232,76,27, + 230,26,42,243,0,40,53,232,76,232,148,148,147,147,232,52, + 185,230,26,42,243,0,40,53,52,232,232,148,148,147,147,148, + 52,27,230,26,78,243,0,40,53,52,76,148,76,148,147,147, + 232,52,27,230,26,122,243,0,40,53,52,76,232,148,148,148, + 148,232,52,27,230,26,122,243,0,40,53,52,76,148,76,148, + 148,148,232,52,198,230,91,122,243,166,219,183,219,221,105,89, + 244,144,71,244,144,144,244,71,244,244,244,244,244,244,244,244, + 244,36,120,36,244,244,244,36,36,244,36,244,36,36,36,244, + 36,36,244,36,36,244,36,36,244,36,36,36,36,36,36,36, + 36,36,36,36,217,36,217,36,105,36,36,36,105,36,105,105, + 184,181,58,181,58,58,58,119,58,58,119,58,181,119,119,108, + 108,108,119,108,108,108,108,108,108,108,83,83,83,161,176,83, + 83,83,108,83,83,108,9,53,19,83,106,161,83,83,108,83, + 108,108,108,108,108,159,83,108,108,119,108,108,119,240,119,240, + 119,119,58,58,119,119,119,119,119,240,119,240,58,58,119,119, + 119,119,119,119,119,58,58,58,58,58,119,58,58,119,236,119, + 236,236,236,119,89,236,119,236,89,119,236,58,236,58,119,159, + 58,236,119,236,119,119,236,119,58,119,119,58,58,119,119,89, + 89,89,89,89,89,207,207,89,119,89,89,89,89,236,236,119, + 119,236,119,236,236,119,119,119,119,58,236,236,58,58,236,159, + 153,236,159,159,236,236,159,236,159,119,119,159,236,159,159,159, + 159,119,159,119,134,236,159,159,159,159,159,159,159,159,108,15, + 42,166,221,78,166,0,95,0,212,170,232,76,232,148,148,148, + 147,76,232,185,230,91,26,211,0,212,231,232,232,232,232,148, + 147,147,52,232,185,230,91,26,211,0,212,170,52,232,232,232, + 148,148,147,76,232,198,230,91,26,211,0,40,204,27,232,232, + 232,148,148,148,52,232,198,230,91,26,211,0,40,204,27,76, + 232,148,148,148,147,76,27,185,230,91,42,211,0,212,170,52, + 232,232,232,148,148,147,52,232,185,230,91,26,211,0,212,231, + 232,76,232,232,148,147,147,76,27,27,230,91,26,211,0,212, + 231,232,76,232,148,148,147,147,76,232,198,230,91,26,211,0, + 212,231,232,76,232,148,148,148,148,76,27,185,230,91,26,211, + 0,212,231,232,76,232,148,148,148,148,232,27,27,230,91,26, + 211,0,212,170,52,232,232,232,148,148,77,76,232,27,230,91, + 26,211,0,40,204,27,76,232,148,148,147,148,76,27,185,230, + 91,42,211,0,212,231,232,76,232,148,148,148,148,76,27,198, + 230,91,42,211,0,212,231,52,232,232,232,148,148,148,76,27, + 27,230,91,42,211,0,40,204,27,76,232,232,148,147,148,76, + 27,185,230,91,26,211,0,40,204,27,76,232,148,148,147,148, + 76,27,185,230,91,26,211,0,40,204,27,76,232,232,148,148, + 147,76,232,198,230,91,26,211,0,212,231,232,76,232,148,148, + 147,148,76,27,27,230,91,26,211,187,122,187,219,0,208,119, + 144,244,144,71,244,244,144,244,244,244,244,244,244,244,120,244, + 244,244,244,244,244,36,244,244,36,244,36,244,244,244,36,36, + 244,36,36,244,36,36,36,36,36,36,36,36,36,36,36,36, + 36,36,36,36,36,105,36,105,36,217,105,217,105,105,217,105, + 236,153,184,58,181,184,58,236,236,181,58,58,240,108,108,108, + 119,108,108,108,119,108,108,108,108,108,108,83,83,83,161,83, + 83,83,108,108,83,181,9,85,116,181,252,161,83,83,108,108, + 108,108,108,108,83,159,108,83,108,159,159,240,119,108,119,119, + 119,236,119,58,58,58,58,58,58,119,119,58,119,58,58,119, + 159,119,119,58,119,119,236,119,58,236,119,236,119,58,236,236, + 119,119,236,236,89,236,89,236,89,119,236,119,119,58,119,119, + 119,236,119,119,236,119,89,236,236,119,119,119,119,236,119,236, + 236,89,207,207,89,89,89,207,89,89,236,119,89,89,236,89, + 119,236,119,236,236,236,236,236,236,58,184,153,236,159,58,58, + 159,236,236,159,159,236,159,236,159,236,159,159,159,119,159,119, + 159,119,159,159,159,236,159,159,159,159,159,159,159,108,108,20, + 162,132,162,42,187,0,224,0,212,98,165,45,53,194,194,194, + 194,194,45,165,230,91,0,12,0,212,98,165,45,53,194,194, + 194,194,194,45,165,230,91,0,12,0,212,98,165,45,53,194, + 194,194,194,194,45,165,230,91,0,12,0,40,98,170,45,53, + 53,194,194,194,194,45,165,230,91,0,12,0,40,98,165,45, + 53,194,194,194,194,45,53,165,230,91,0,12,0,212,98,165, + 45,53,194,194,194,194,194,45,165,230,91,0,12,0,212,98, + 165,45,53,194,194,194,194,45,45,165,230,91,0,12,0,212, + 98,165,45,53,194,194,194,194,194,45,165,230,91,0,12,0, + 212,98,165,45,53,53,194,194,194,45,194,165,230,91,0,12, + 0,212,98,165,45,53,194,194,194,194,45,194,165,230,91,0, + 12,0,212,98,165,45,53,194,194,194,194,194,45,165,230,91, + 0,12,0,40,98,165,45,53,194,194,194,194,45,53,165,230, + 91,0,12,0,212,98,165,45,53,194,194,194,194,45,53,165, + 230,91,0,12,0,212,98,165,45,53,53,194,194,194,45,45, + 45,230,91,0,12,0,40,98,170,45,53,194,194,194,32,45, + 45,165,230,61,122,12,0,40,98,165,45,53,194,194,194,194, + 45,53,165,230,91,0,12,0,40,98,165,45,53,194,194,194, + 194,194,45,165,230,91,0,12,0,212,98,165,45,53,194,194, + 194,194,45,53,165,230,91,122,109,132,183,26,219,0,63,89, + 144,244,144,144,71,244,71,244,71,244,71,244,244,244,244,244, + 244,244,244,36,244,244,244,36,244,36,244,36,244,36,244,244, + 36,244,36,36,244,36,244,36,36,36,36,36,36,36,36,120, + 36,36,36,36,36,36,36,105,36,105,105,36,217,105,105,105, + 184,181,184,184,153,236,236,184,184,236,58,58,181,119,119,240, + 119,119,119,108,119,108,108,108,108,108,108,108,83,83,161,83, + 108,108,83,108,108,119,185,53,9,181,161,161,83,83,108,83, + 108,108,108,159,108,108,159,240,108,108,108,119,240,58,119,240, + 58,119,236,236,236,58,58,119,236,240,58,58,58,58,236,119, + 119,119,119,119,58,58,58,58,119,58,236,58,236,119,119,119, + 236,236,236,89,236,89,89,119,236,89,119,236,58,119,159,119, + 119,119,236,89,119,236,236,89,119,236,119,236,119,119,236,89, + 89,89,89,89,207,89,89,89,89,119,89,236,236,236,119,236, + 236,119,236,236,236,236,58,58,58,58,58,58,184,58,58,184, + 236,184,159,58,58,159,58,58,159,159,119,58,58,159,58,119, + 159,58,159,58,159,159,58,159,159,159,159,159,159,159,108,15, + 42,111,162,183,187,78,59,0,162,251,251,123,167,103,79,220, + 79,167,123,123,168,26,42,211,0,162,251,251,123,103,167,79, + 79,79,167,123,123,168,91,42,211,0,221,251,251,123,167,103, + 220,79,79,167,123,123,73,91,42,211,0,162,251,123,123,167, + 79,79,220,79,167,123,123,168,91,26,211,0,162,251,251,228, + 167,103,79,79,79,79,167,228,168,26,26,211,0,221,251,251, + 123,103,167,79,79,79,167,123,123,168,91,26,211,0,221,31, + 251,123,103,167,79,79,79,167,123,123,168,26,26,211,0,221, + 31,251,123,123,79,79,79,79,167,123,123,168,91,26,211,0, + 221,31,251,123,103,79,79,220,79,167,123,123,168,26,42,211, + 0,221,31,251,123,55,167,79,220,79,167,123,123,168,26,42, + 211,0,221,251,251,123,167,103,79,79,79,167,123,123,168,91, + 26,211,0,0,31,251,123,55,167,79,79,79,167,123,123,168, + 26,42,211,0,0,251,251,123,167,55,79,220,79,167,123,123, + 168,91,42,211,0,221,251,251,228,167,79,79,220,79,167,123, + 123,73,91,42,211,0,162,251,123,123,103,167,79,79,79,167, + 123,123,168,26,42,211,0,162,251,251,123,123,79,79,79,79, + 167,123,123,168,91,26,211,0,162,251,251,228,167,103,79,79, + 79,167,123,173,73,91,26,211,0,221,31,251,123,79,103,79, + 220,79,167,123,123,168,26,42,8,187,42,219,183,0,105,119, + 244,144,244,244,144,144,244,144,244,244,244,244,244,244,120,244, + 244,120,244,244,244,244,244,36,244,36,244,244,36,36,36,244, + 36,244,36,244,36,36,36,244,36,36,36,36,36,36,36,36, + 36,217,105,217,105,105,105,36,105,36,105,210,105,105,210,210, + 153,236,153,236,153,153,236,236,184,236,181,240,240,240,240,181, + 240,119,119,108,119,108,119,108,108,108,108,108,108,83,161,83, + 108,108,108,108,108,119,9,53,116,181,83,161,83,83,108,108, + 108,159,108,159,108,108,108,119,108,119,108,240,119,240,119,119, + 119,58,58,58,119,58,58,119,119,119,119,58,119,58,58,119, + 119,58,119,119,119,58,119,236,58,58,119,58,236,119,236,236, + 89,119,119,89,236,89,89,89,89,89,119,236,58,119,58,119, + 119,119,119,89,89,119,119,236,119,236,119,119,119,119,119,236, + 236,89,207,89,207,207,207,89,89,119,89,119,119,236,58,236, + 236,119,119,119,119,236,236,58,58,119,58,119,58,236,119,184, + 58,58,58,58,58,58,159,58,58,159,58,159,58,159,159,58, + 58,159,119,58,58,159,119,159,119,159,119,159,159,159,108,172, + 78,187,162,183,50,42,59,0,0,0,0,0,0,0,0,0, + 0,0,0,0,219,150,42,243,0,0,0,0,0,0,0,0, + 0,0,0,0,0,219,132,42,150,0,0,0,0,0,0,0, + 0,0,0,0,221,0,219,132,42,12,0,0,0,0,0,122, + 0,0,0,0,0,0,0,219,132,42,12,0,0,0,0,0, + 0,0,0,0,0,0,0,0,183,132,42,243,0,0,0,0, + 0,0,0,0,0,0,0,0,0,219,132,42,150,0,0,0, + 0,0,0,0,0,0,0,0,0,0,219,132,42,150,0,0, + 0,0,0,0,0,0,0,0,0,0,0,219,132,42,150,0, + 0,0,0,0,0,0,0,0,0,0,0,0,219,150,42,243, + 0,0,0,0,0,0,0,0,0,0,0,0,0,219,132,42, + 243,0,0,0,0,0,0,0,0,0,0,0,0,0,219,132, + 42,12,0,0,0,0,0,0,0,0,0,0,0,0,0,219, + 132,26,150,0,0,0,0,0,0,0,0,0,0,0,0,0, + 219,132,42,150,0,0,0,0,0,0,0,0,0,0,0,0, + 0,219,132,42,12,0,0,0,0,0,0,0,0,0,0,0, + 0,0,219,17,26,12,0,0,0,0,0,0,0,0,0,0, + 0,0,0,219,132,42,12,0,0,0,0,0,0,0,0,0, + 0,0,162,162,219,132,42,243,0,0,0,0,0,0,0,0, + 0,0,0,0,0,219,17,42,243,187,183,26,219,122,105,89, + 244,244,144,244,244,144,244,144,244,244,244,244,244,244,244,244, + 244,244,36,244,36,244,244,244,36,244,36,36,244,244,36,244, + 36,36,36,36,244,36,36,36,36,36,120,36,36,120,36,36, + 36,36,36,36,36,36,105,36,217,36,105,63,63,63,105,63, + 236,153,181,184,153,181,153,153,236,184,153,58,181,240,58,240, + 119,108,119,119,108,119,108,119,108,108,108,108,108,108,161,83, + 119,108,108,108,108,119,9,53,195,181,83,161,108,83,108,108, + 108,108,108,108,119,108,159,108,108,108,108,240,119,240,240,58, + 58,119,119,119,58,58,58,58,236,58,58,119,58,119,119,119, + 58,119,119,236,58,119,58,58,119,119,236,119,119,236,119,119, + 119,236,236,119,89,236,236,89,236,119,119,119,119,58,119,119, + 89,236,236,119,119,89,236,89,236,119,236,119,119,236,119,89, + 89,89,89,207,89,89,89,89,89,89,119,236,236,119,119,119, + 58,89,236,236,236,119,58,58,58,58,58,58,236,58,58,119, + 119,119,119,236,58,236,58,58,58,58,58,119,119,119,119,119, + 119,119,159,119,89,236,119,119,119,119,119,119,119,119,108,15, + 42,126,221,42,166,122,59,42,26,26,26,26,42,42,26,219, + 219,219,219,26,26,219,219,187,42,26,26,26,26,42,42,26, + 219,219,219,219,26,26,219,26,187,42,26,26,26,26,42,42, + 219,219,219,219,219,219,26,219,219,187,42,26,26,26,26,42, + 42,26,219,219,219,219,42,26,219,26,187,42,26,26,26,26, + 42,42,26,219,219,219,219,26,26,219,26,187,42,26,26,26, + 26,42,42,26,219,219,219,219,42,26,219,26,17,42,17,26, + 26,26,42,42,26,17,219,219,219,26,26,219,219,17,42,17, + 26,26,26,42,42,26,219,219,219,219,42,26,219,42,187,42, + 17,26,26,26,42,42,26,219,219,219,219,26,219,219,219,187, + 42,17,26,26,26,42,42,26,219,219,219,219,26,219,219,26, + 187,42,26,26,26,26,42,42,26,219,219,219,219,42,26,219, + 219,187,42,17,26,26,26,42,42,219,219,219,219,219,26,26, + 219,26,187,42,26,26,26,26,42,42,26,17,219,219,219,26, + 219,219,219,187,42,26,26,26,26,42,42,26,17,219,219,219, + 219,219,219,219,187,42,26,26,26,26,42,42,26,219,219,219, + 219,26,26,132,219,187,42,26,26,26,26,26,42,26,17,219, + 219,219,42,26,219,26,187,42,26,26,26,26,42,42,219,219, + 219,219,219,219,26,219,42,17,42,17,26,26,26,42,42,26, + 17,17,219,219,26,26,132,42,187,166,78,183,183,0,105,89, + 144,144,144,244,71,244,71,71,244,244,71,244,244,244,120,244, + 244,244,244,36,244,36,36,244,244,36,244,244,36,36,36,244, + 244,36,244,36,244,36,120,36,36,36,36,36,36,36,36,217, + 36,36,105,36,217,217,36,217,105,105,105,105,105,105,63,105, + 153,153,153,181,153,184,181,184,181,58,236,184,58,58,119,240, + 119,181,240,119,108,119,108,119,108,108,108,108,108,108,83,83, + 108,108,108,108,119,181,9,53,116,181,108,83,108,108,83,108, + 108,108,119,108,119,108,119,119,108,119,159,108,119,119,119,58, + 119,119,58,236,119,58,58,184,58,58,58,58,58,58,58,119, + 236,58,58,236,58,119,119,58,58,58,58,58,119,119,119,58, + 119,119,236,119,236,89,89,89,89,236,119,119,119,58,236,159, + 119,119,236,159,119,119,159,89,236,119,236,236,119,119,119,236, + 236,89,89,207,89,89,89,207,89,89,119,119,236,236,236,236, + 236,236,119,58,236,236,236,236,236,119,236,119,119,236,58,58, + 58,236,58,58,58,58,58,159,236,119,159,119,159,119,236,119, + 119,119,119,159,119,236,236,119,119,119,119,119,119,119,108,15, + 162,187,162,42,166,122,224,219,243,12,132,17,219,17,12,243, + 150,150,150,150,17,17,42,12,219,243,12,132,17,219,17,12, + 243,150,150,150,150,12,219,26,187,17,243,12,132,17,219,17, + 12,243,150,150,12,150,12,17,219,12,219,243,12,17,17,219, + 17,12,243,150,150,150,150,12,17,219,12,219,243,12,132,17, + 219,17,12,243,12,150,150,150,12,17,26,187,219,243,12,132, + 17,219,17,12,243,150,150,150,150,12,219,26,187,26,150,12, + 132,17,219,12,12,243,150,150,150,150,12,219,26,187,26,150, + 12,17,17,219,17,12,243,150,150,150,150,12,17,26,12,26, + 150,187,150,219,219,17,12,243,150,150,150,12,12,219,42,12, + 26,150,12,17,17,219,17,12,243,150,150,150,12,12,219,26, + 12,219,243,12,132,17,219,17,12,243,150,150,150,150,12,219, + 219,12,26,150,12,17,17,219,17,12,243,150,150,150,150,12, + 219,26,187,17,243,12,17,17,219,17,12,243,150,150,150,17, + 12,219,26,12,219,243,12,17,17,219,17,12,243,150,150,12, + 17,12,17,219,12,219,243,12,132,17,219,17,12,243,150,150, + 150,150,17,219,219,12,219,243,12,150,219,219,12,12,243,150, + 150,150,150,12,219,219,12,219,243,12,132,17,219,17,12,243, + 150,150,12,150,12,17,42,187,26,150,12,17,17,219,17,17, + 243,150,150,150,150,17,17,42,12,187,42,42,183,122,105,114, + 244,244,144,144,244,244,144,244,244,244,244,244,120,244,244,120, + 120,244,244,244,244,244,36,244,244,244,36,36,244,244,36,36, + 244,36,36,36,36,244,36,244,36,36,120,36,36,217,36,36, + 105,36,217,36,105,105,105,36,210,210,105,63,63,105,63,63, + 181,236,184,153,184,153,153,153,236,236,184,181,58,58,58,58, + 58,240,58,119,240,108,119,108,108,108,108,108,108,108,83,108, + 108,108,108,108,108,119,9,85,230,181,108,66,108,108,108,108, + 108,108,108,119,108,119,108,159,119,108,108,119,108,240,240,119, + 58,58,236,58,58,119,58,119,119,119,58,58,58,119,119,58, + 58,119,119,58,58,58,58,119,58,119,119,119,58,58,236,236, + 119,119,58,236,119,119,119,119,236,236,119,58,58,119,58,119, + 119,119,119,236,236,236,236,58,119,119,119,119,236,236,236,119, + 89,236,236,89,89,236,236,89,89,89,236,236,236,58,58,236, + 184,58,236,236,58,119,58,119,58,236,119,236,236,119,236,236, + 236,58,119,236,119,119,119,119,119,119,119,119,119,236,159,119, + 119,236,119,119,119,119,119,119,236,119,119,119,119,119,108,15, + 42,163,221,78,187,122,224,26,150,12,17,17,219,12,26,243, + 12,150,12,219,17,219,26,109,26,150,12,17,17,219,12,26, + 243,12,12,12,17,17,17,26,12,26,150,17,17,17,219,12, + 26,150,12,12,150,219,17,219,26,12,26,150,17,150,219,17, + 12,26,150,12,150,12,219,17,219,42,109,26,150,12,17,17, + 219,12,26,243,150,150,12,219,17,219,26,12,26,150,12,17, + 17,219,12,26,150,12,150,12,219,17,17,26,12,219,150,12, + 17,17,219,17,26,243,12,150,12,219,17,17,26,12,219,150, + 17,150,17,17,12,26,150,12,150,12,17,17,219,26,12,219, + 150,12,17,187,17,12,26,243,12,12,12,219,17,17,26,12, + 219,150,17,132,17,219,12,17,243,12,150,12,219,17,17,26, + 187,26,150,12,17,219,17,12,26,243,12,12,12,17,17,17, + 26,150,219,150,12,132,17,219,12,26,243,150,150,12,219,187, + 17,26,243,26,150,17,132,17,219,12,26,243,12,150,12,17, + 17,17,26,187,26,150,12,150,219,17,17,17,243,150,12,150, + 17,17,219,42,150,26,150,17,17,17,219,12,26,243,12,150, + 12,17,17,17,26,109,26,150,12,17,17,17,17,26,243,12, + 12,12,17,17,17,26,150,26,150,12,17,219,17,12,26,243, + 12,12,150,219,17,219,26,12,219,150,17,150,219,17,12,26, + 150,12,150,12,219,187,219,26,187,166,183,183,183,0,36,89, + 144,144,244,244,144,244,244,71,244,244,244,120,244,120,120,244, + 244,36,120,36,120,36,244,36,36,244,36,244,36,36,36,244, + 36,244,36,244,36,36,36,36,36,36,36,36,36,36,36,217, + 36,105,36,36,36,217,36,63,105,105,63,105,105,63,105,105, + 153,236,181,153,181,184,153,184,184,236,184,58,181,240,58,58, + 58,58,240,58,240,108,119,159,119,108,159,108,108,159,83,83, + 108,108,108,108,108,181,107,165,19,181,108,108,108,108,108,108, + 108,108,108,119,108,159,108,119,240,119,108,119,240,119,240,119, + 119,119,119,236,58,240,240,119,240,119,58,119,58,58,119,119, + 58,240,119,58,58,58,58,119,240,58,58,119,119,240,181,58, + 236,119,58,119,236,236,236,89,119,236,236,119,58,58,236,236, + 236,159,119,159,119,119,119,236,236,236,236,58,58,58,236,58, + 236,236,236,236,119,236,119,236,236,236,119,119,119,119,184,236, + 236,184,184,58,236,119,58,119,58,236,119,58,236,119,119,119, + 119,119,119,236,89,236,119,119,236,119,119,119,119,89,236,236, + 119,236,89,119,119,119,119,119,89,89,89,119,89,119,159,15, + 42,187,162,183,183,162,99,42,132,132,132,17,150,150,219,150, + 17,150,12,12,12,219,26,243,26,132,132,132,17,150,150,219, + 150,150,132,17,17,17,17,17,109,26,150,17,132,17,12,150, + 17,150,150,17,12,150,17,17,17,109,26,150,17,17,17,132, + 150,17,150,12,150,12,132,12,17,26,243,26,132,132,132,132, + 150,150,26,150,17,150,12,17,12,17,17,109,26,150,132,132, + 132,150,150,17,150,12,150,17,150,17,17,17,109,26,150,132, + 132,17,150,150,219,150,17,150,12,17,187,17,17,109,26,150, + 17,17,17,132,150,17,150,17,150,17,132,17,17,17,109,26, + 150,132,17,17,132,150,17,150,150,132,12,132,17,17,17,109, + 26,150,17,132,132,132,12,219,150,17,150,12,150,17,17,17, + 211,26,150,132,132,166,150,150,219,150,150,150,17,132,17,219, + 26,211,26,150,17,132,17,12,150,219,12,17,150,12,17,17, + 17,26,109,26,150,17,17,132,150,150,219,150,17,150,12,17, + 17,17,17,211,26,132,17,17,17,132,12,219,12,150,17,12, + 132,12,17,26,109,26,150,150,132,17,150,150,26,150,17,150, + 17,12,187,219,26,109,26,132,132,17,17,132,150,219,150,150, + 150,17,132,17,219,26,211,26,132,150,132,166,12,150,219,150, + 150,17,12,132,12,17,17,109,26,150,17,17,17,150,150,17, + 150,17,150,12,17,12,17,17,109,187,183,42,183,122,36,114, + 244,244,71,71,244,71,244,244,71,244,244,120,244,120,120,244, + 244,244,244,244,244,36,244,36,120,244,36,244,244,244,36,244, + 36,244,36,244,105,244,36,36,36,36,36,36,36,105,36,105, + 36,105,105,105,36,105,36,63,105,105,63,63,63,63,63,105, + 184,153,153,153,240,184,184,153,181,240,58,184,184,181,240,58, + 119,240,58,119,58,119,108,108,108,108,108,108,108,108,108,108, + 108,108,108,119,108,89,9,165,230,181,108,83,108,108,108,108, + 159,108,159,108,119,108,119,108,119,108,119,108,108,119,58,119, + 58,58,58,58,119,119,119,58,58,58,119,58,58,58,119,240, + 119,119,240,58,58,58,58,58,119,119,119,58,119,119,58,58, + 58,236,119,119,119,58,236,58,236,58,58,58,119,119,58,58, + 159,236,119,119,119,159,236,58,58,58,58,119,119,119,58,236, + 119,236,58,236,236,119,236,236,58,119,236,236,236,58,236,58, + 184,58,58,58,58,236,236,236,119,119,236,236,119,236,236,236, + 236,236,119,119,119,119,119,119,119,89,119,119,119,119,119,119, + 89,119,119,89,89,89,89,119,119,119,119,89,119,119,108,15, + 162,163,221,78,50,0,254,219,12,17,132,219,17,12,26,150, + 150,17,17,132,17,150,219,109,219,12,17,132,219,17,12,26, + 150,17,17,12,132,187,132,26,243,219,17,150,132,219,17,12, + 26,150,17,150,17,17,12,187,26,243,219,17,17,150,219,17, + 12,26,150,132,17,17,17,17,187,219,109,219,150,17,132,219, + 17,17,219,12,132,17,12,132,12,166,26,243,219,17,17,132, + 219,17,12,26,150,132,12,17,17,17,132,26,243,219,17,17, + 132,219,17,12,26,150,150,17,12,132,12,132,26,243,219,12, + 17,132,219,17,12,26,150,132,17,12,17,12,132,26,243,219, + 17,17,132,219,17,12,26,150,17,17,12,17,17,132,26,243, + 219,12,17,132,219,17,12,26,150,150,17,17,17,187,166,26, + 243,219,17,17,150,219,17,12,26,150,17,17,17,17,12,187, + 219,243,219,17,17,132,17,17,12,26,150,132,17,12,132,12, + 132,219,243,219,17,17,132,219,17,12,26,150,150,17,12,132, + 12,166,26,243,219,12,17,150,219,17,12,26,150,219,150,12, + 17,17,187,219,243,219,17,219,132,219,17,12,219,150,150,17, + 17,17,12,187,219,243,219,12,17,132,219,17,12,26,150,17, + 17,12,17,12,187,219,243,219,17,17,132,17,17,12,26,150, + 219,150,12,17,17,132,26,243,219,12,17,132,219,17,12,26, + 150,150,17,12,17,12,166,26,109,183,122,183,183,0,36,119, + 144,71,144,244,144,244,244,244,244,244,71,244,120,244,120,244, + 120,244,36,120,120,244,36,244,36,36,36,36,36,36,36,36, + 36,36,36,36,36,36,36,36,36,36,217,36,217,36,36,36, + 105,36,105,36,105,36,63,105,63,63,105,105,105,105,105,63, + 184,184,240,184,184,181,184,240,184,181,184,184,184,184,240,181, + 184,240,240,240,240,240,119,240,119,108,159,240,108,108,108,108, + 108,108,108,159,108,181,118,231,23,181,108,108,108,108,108,108, + 108,108,108,108,159,108,119,240,119,108,119,119,108,108,119,58, + 119,58,58,58,58,58,58,119,58,240,119,119,119,58,119,119, + 119,119,119,119,58,58,58,58,58,58,58,240,119,58,58,58, + 58,58,236,58,119,119,236,119,236,119,58,58,58,58,58,119, + 119,159,119,119,236,159,119,58,119,119,58,58,58,58,58,236, + 58,58,58,119,236,58,119,236,236,119,58,58,236,58,58,119, + 119,119,236,236,58,58,119,236,119,58,119,58,119,58,119,119, + 119,119,89,89,89,89,119,119,119,89,89,119,236,236,89,119, + 236,236,119,119,119,119,119,119,119,119,119,119,119,119,108,15, + 78,187,162,183,183,0,111,219,12,219,150,17,132,132,219,12, + 132,150,17,17,187,150,219,243,219,12,17,132,17,150,132,219, + 150,150,150,17,132,187,150,219,109,219,12,219,150,132,132,132, + 219,150,17,150,17,219,132,150,219,211,219,150,17,132,17,150, + 132,219,12,150,150,17,132,132,187,219,243,26,12,17,17,17, + 150,17,219,12,150,150,219,132,17,150,219,211,219,12,17,17, + 17,132,132,219,12,132,150,17,132,187,150,26,211,219,12,17, + 132,17,150,132,219,12,132,150,219,17,187,150,26,211,219,150, + 219,150,17,150,132,219,12,150,150,219,132,187,150,26,211,219, + 12,17,150,17,132,132,26,150,150,150,17,17,187,150,42,211, + 219,150,17,17,17,150,132,219,12,132,150,17,132,17,150,219, + 109,219,12,17,17,17,150,132,219,150,150,150,17,17,132,150, + 26,211,219,150,219,132,150,132,132,219,12,150,150,219,132,187, + 150,219,211,219,150,17,17,17,132,132,219,12,132,150,17,219, + 187,150,219,109,219,150,219,150,17,150,132,219,150,17,150,17, + 17,132,187,219,211,219,12,17,150,17,150,17,219,12,150,150, + 132,219,150,187,219,211,219,12,17,132,17,150,132,219,150,150, + 132,17,132,132,187,219,211,219,12,17,17,132,132,132,219,150, + 17,150,219,132,187,150,26,211,219,150,17,132,17,132,132,219, + 12,132,150,132,132,17,150,42,109,42,78,26,219,42,63,89, + 144,244,144,244,71,144,244,71,244,244,120,244,120,244,120,244, + 120,244,120,120,120,244,36,244,36,244,36,36,120,36,36,244, + 36,244,36,36,36,36,36,36,36,36,36,36,105,217,36,36, + 105,36,105,105,105,36,105,105,105,105,105,105,105,105,105,105, + 181,184,240,240,184,184,240,184,184,184,184,240,181,58,184,184, + 58,58,181,240,240,119,108,108,108,240,108,240,240,159,108,108, + 108,159,108,108,119,89,118,6,11,181,108,108,108,108,119,159, + 119,108,108,108,108,108,108,119,108,119,108,119,119,58,240,58, + 58,119,119,240,58,58,58,58,240,58,58,240,58,240,58,58, + 58,119,240,58,58,58,240,58,119,240,119,58,119,240,58,58, + 119,240,58,58,236,236,119,236,119,236,119,236,58,58,58,58, + 119,236,236,119,119,119,119,119,58,58,236,236,236,58,184,184, + 58,119,58,236,58,236,58,119,58,58,58,119,58,119,119,58, + 236,236,119,58,236,119,236,119,58,119,119,119,240,119,58,119, + 89,236,119,119,159,119,89,119,236,119,119,236,119,119,119,236, + 119,119,89,119,89,119,119,89,89,119,119,89,119,119,108,15, + 78,239,0,122,126,122,227,42,150,17,17,132,150,17,26,150, + 17,132,17,219,219,187,26,211,42,150,219,17,150,132,17,26, + 12,219,150,17,219,219,187,26,8,42,150,17,17,17,150,17, + 26,12,132,132,132,17,26,187,26,187,42,12,132,17,150,132, + 17,26,150,17,132,150,219,26,150,26,211,42,150,17,17,132, + 150,17,219,150,219,132,12,219,17,187,26,187,42,150,17,17, + 150,132,17,26,150,17,132,150,219,17,187,219,243,26,150,17, + 17,150,132,17,42,150,17,132,12,219,17,187,219,12,42,12, + 132,17,150,132,17,26,150,219,132,150,219,219,187,219,12,42, + 150,132,17,150,132,17,219,12,219,132,132,17,17,187,219,12, + 42,12,17,17,132,132,17,42,150,17,132,150,219,17,187,26, + 8,26,150,17,17,150,132,17,26,12,219,132,132,17,26,187, + 26,12,26,12,17,17,17,132,17,219,150,219,150,17,219,219, + 187,26,12,42,12,132,17,150,132,17,26,150,219,150,17,17, + 219,187,26,8,42,12,132,17,150,132,17,219,12,132,132,150, + 17,26,150,26,12,42,150,17,17,150,132,132,26,150,219,132, + 17,17,26,150,26,12,42,150,132,17,150,132,17,26,12,219, + 150,132,219,26,150,26,12,42,150,17,17,17,150,17,26,12, + 132,132,150,219,17,187,219,12,42,12,132,17,150,132,17,26, + 150,17,132,17,219,17,187,219,8,0,42,183,42,0,208,114, + 144,244,71,244,244,244,244,244,244,244,71,120,244,120,244,36, + 244,244,36,244,36,120,120,36,244,36,244,36,36,244,36,36, + 36,36,36,120,36,36,36,36,217,36,217,105,36,36,105,105, + 36,217,105,217,105,63,63,63,210,105,105,105,105,63,105,63, + 240,184,184,181,240,184,184,184,181,184,181,184,184,58,240,240, + 240,240,58,240,240,58,240,119,108,159,108,240,108,108,108,108, + 108,108,108,108,108,181,65,6,13,181,108,108,108,108,108,108, + 159,159,108,108,119,159,108,119,108,240,108,108,240,119,240,240, + 58,119,119,119,58,240,119,58,119,119,58,119,119,240,119,58, + 58,58,119,119,58,58,240,240,119,58,58,184,58,119,119,240, + 119,119,236,58,119,236,58,58,58,58,58,58,58,119,58,58, + 58,58,236,119,159,119,119,119,58,58,58,58,236,119,119,119, + 236,119,58,236,58,236,236,236,236,236,236,236,236,236,236,58, + 58,58,119,119,119,58,58,236,236,119,119,119,119,119,58,58, + 119,119,119,119,236,119,236,119,119,119,119,119,119,119,119,236, + 119,119,236,119,89,89,119,119,89,119,119,89,119,119,108,151, + 162,126,162,162,111,0,95,26,17,17,17,17,17,132,42,150, + 17,150,12,17,17,187,26,211,42,12,17,17,17,17,132,219, + 150,219,150,17,17,17,187,26,211,42,17,17,17,17,17,150, + 219,12,219,12,17,132,17,187,17,211,219,17,17,17,17,17, + 150,42,150,219,12,17,132,26,187,26,211,42,12,17,17,17, + 150,17,26,150,17,150,17,17,17,187,17,211,26,17,17,17, + 17,17,150,42,150,219,12,17,219,17,187,26,109,42,17,17, + 17,17,17,150,42,150,17,132,17,219,17,187,17,211,219,17, + 219,17,17,17,150,26,150,17,12,17,219,17,187,17,211,26, + 17,219,17,17,17,132,219,150,17,12,17,219,17,187,17,211, + 219,12,17,17,17,17,150,42,150,219,12,17,17,17,187,26, + 109,42,17,17,17,17,17,132,219,150,17,12,17,132,17,150, + 17,109,219,17,17,17,17,17,17,26,150,219,150,17,17,17, + 187,17,211,219,17,17,17,17,17,132,26,150,219,150,17,219, + 17,187,26,211,219,17,219,17,17,17,17,219,12,219,17,17, + 132,26,12,17,211,26,17,17,17,17,17,132,26,150,17,17, + 17,132,26,187,12,211,42,12,17,17,17,17,132,219,150,219, + 12,17,132,26,187,12,211,42,12,17,17,17,17,150,219,12, + 17,17,17,219,17,187,17,211,219,17,17,17,17,17,132,42, + 150,219,12,17,219,17,187,26,8,162,42,183,187,183,36,244, + 114,244,144,144,71,244,71,244,71,244,244,120,120,120,244,120, + 120,244,120,244,36,244,36,120,120,120,36,244,36,36,36,120, + 36,120,36,36,36,36,36,36,36,36,36,36,105,36,36,217, + 36,105,105,105,105,105,105,105,63,105,63,210,105,210,105,105, + 184,184,240,240,184,240,240,184,240,240,184,240,240,240,181,58, + 58,240,181,240,240,119,240,108,240,108,159,240,108,159,108,108, + 108,108,108,159,119,181,118,231,93,181,108,108,108,108,108,108, + 108,108,119,159,108,108,159,108,240,119,119,240,119,240,240,58, + 119,58,58,119,119,119,58,58,58,240,119,240,58,58,119,119, + 119,119,240,58,119,119,119,58,119,240,58,58,58,58,58,236, + 58,58,119,119,119,119,236,236,119,236,119,119,58,58,119,58, + 119,119,119,119,119,58,58,119,119,119,58,58,58,58,58,236, + 58,58,58,119,119,119,119,119,119,119,58,119,119,58,119,236, + 236,119,236,58,236,119,119,119,240,58,58,58,119,240,119,119, + 119,159,119,119,119,236,119,236,236,236,119,119,119,236,89,119, + 236,89,119,236,119,119,89,89,119,89,119,119,119,119,108,245, + 42,166,122,0,95,78,224,42,150,17,17,12,150,17,219,17, + 132,17,132,219,219,187,219,12,42,150,17,12,17,150,219,219, + 17,150,17,17,219,219,150,219,12,42,150,17,17,12,150,219, + 219,150,150,17,150,219,219,150,26,12,26,17,17,17,12,150, + 219,219,17,150,17,17,219,17,187,219,187,42,150,219,12,17, + 150,132,219,17,132,17,17,219,219,150,26,12,42,150,219,12, + 12,150,219,219,17,150,17,17,17,219,187,219,12,42,150,17, + 17,12,150,219,219,17,132,17,150,17,219,187,26,187,42,12, + 17,17,12,150,219,219,17,150,17,17,219,17,187,26,187,26, + 12,219,12,12,150,219,219,17,132,17,150,219,17,187,26,187, + 42,150,219,12,150,150,219,219,17,150,17,17,219,219,132,219, + 12,42,150,17,12,17,150,219,219,17,132,17,132,219,219,187, + 26,12,42,150,219,150,12,150,17,219,17,150,17,17,219,219, + 150,26,187,42,12,219,12,12,150,17,219,17,150,17,150,219, + 17,150,219,187,42,12,17,17,150,150,219,219,150,150,17,150, + 219,17,132,26,12,42,150,219,17,12,150,219,219,17,132,150, + 150,219,17,150,26,187,42,12,219,17,12,150,17,219,17,132, + 12,17,219,17,132,26,187,42,150,17,17,12,150,219,219,150, + 132,12,17,17,219,187,26,187,26,17,17,17,12,150,17,219, + 17,132,150,17,219,17,187,219,187,78,94,26,166,162,120,244, + 244,114,244,244,244,71,244,244,244,244,120,244,120,244,120,244, + 244,120,36,120,120,36,244,120,36,120,36,36,36,36,36,36, + 120,36,120,36,36,36,36,36,217,105,36,217,36,105,105,105, + 105,210,105,105,105,105,63,63,36,63,105,105,105,105,63,63, + 184,240,240,240,181,240,240,240,184,181,184,181,184,240,240,240, + 58,240,184,240,240,240,181,108,240,108,240,240,108,159,108,108, + 108,108,108,108,108,181,19,231,93,181,108,108,108,108,119,108, + 108,108,108,119,108,108,119,108,108,108,159,108,119,240,119,240, + 240,119,240,119,58,58,58,58,58,58,58,119,58,159,240,119, + 58,119,119,58,58,58,58,58,58,119,119,58,119,119,119,236, + 58,58,58,236,236,119,119,236,58,58,58,119,58,58,119,58, + 58,58,58,236,119,119,58,119,119,119,58,58,236,58,58,236, + 236,119,58,236,236,236,236,236,119,236,119,119,119,119,119,119, + 58,119,119,58,58,58,119,119,119,119,58,240,119,119,159,119, + 119,119,119,119,119,236,119,119,119,119,236,236,119,119,119,119, + 119,236,119,119,119,119,119,89,119,89,119,119,108,108,108,151, + 0,163,187,183,111,183,95,42,26,219,17,17,17,17,219,17, + 17,219,17,26,17,17,26,150,42,26,219,17,17,12,17,219, + 17,17,17,17,219,26,187,26,150,42,26,219,17,219,12,17, + 26,219,17,17,219,219,26,150,26,150,219,26,219,17,219,12, + 17,219,219,17,17,17,219,17,12,219,150,42,219,219,17,219, + 26,12,219,17,17,17,219,219,26,150,26,150,42,219,219,17, + 219,12,17,219,219,17,17,219,219,17,12,26,150,42,26,219, + 17,17,17,17,219,17,17,17,219,219,17,150,26,150,219,26, + 219,17,17,17,17,219,219,17,17,17,219,17,150,26,150,219, + 26,219,17,17,17,17,219,17,17,219,219,219,17,150,26,150, + 42,219,219,26,17,12,17,219,219,12,17,219,219,26,187,26, + 243,42,219,219,17,17,12,17,219,17,17,17,219,26,12,132, + 26,150,42,26,26,17,17,17,17,219,17,17,17,17,26,26, + 150,26,150,219,219,219,17,219,12,17,219,219,12,219,17,219, + 26,187,26,150,219,26,219,26,17,12,17,26,219,17,17,219, + 219,26,150,26,150,42,26,219,17,17,17,17,219,17,17,219, + 219,219,26,132,26,150,219,26,219,17,17,17,17,219,17,17, + 17,219,17,26,150,26,150,42,219,219,17,17,17,17,26,219, + 12,17,219,219,17,150,26,150,219,26,219,17,17,17,17,219, + 17,17,17,219,219,17,187,26,150,122,0,0,122,78,144,71, + 244,244,144,144,244,244,244,244,244,244,248,244,120,120,120,120, + 244,244,36,244,120,36,120,36,120,36,120,120,36,244,36,120, + 36,36,120,36,36,36,36,36,36,105,36,105,36,217,105,105, + 36,210,210,210,210,105,105,63,105,105,63,210,63,105,105,63, + 240,240,240,240,240,240,240,184,184,240,184,184,240,181,240,58, + 240,240,240,119,240,240,108,240,159,240,159,240,108,108,159,108, + 108,119,108,108,119,181,65,231,93,181,83,108,108,108,108,108, + 119,108,108,108,108,108,108,119,240,119,108,240,240,119,240,119, + 119,119,119,159,58,58,119,240,119,159,119,240,119,119,119,159, + 119,58,58,119,58,58,119,240,119,240,58,58,58,58,58,119, + 119,119,236,119,58,236,236,119,119,119,236,58,119,119,58,58, + 58,119,236,119,236,236,236,236,58,58,119,119,58,119,119,119, + 119,236,119,58,119,119,119,58,236,119,119,236,119,119,240,58, + 119,58,58,58,58,119,240,119,240,58,119,58,119,159,119,119, + 159,119,159,119,119,159,119,159,119,119,119,119,119,159,119,119, + 119,119,236,89,119,119,89,119,119,119,89,119,89,89,119,186, + 162,56,78,246,221,0,78,0,42,122,122,0,122,42,122,122, + 42,122,122,122,42,42,183,187,0,42,122,122,0,0,42,122, + 122,122,122,122,122,183,42,183,187,0,42,122,122,0,122,42, + 122,122,122,122,122,122,219,42,183,187,0,42,122,122,0,122, + 42,122,122,122,122,122,122,42,42,42,187,122,42,122,122,122, + 0,42,122,122,122,122,122,78,183,42,183,187,122,42,122,122, + 0,122,42,122,42,122,122,122,122,42,42,183,187,0,42,122, + 122,0,122,42,122,122,122,122,122,122,42,42,219,187,0,42, + 122,122,0,122,42,122,122,122,122,122,122,42,42,183,187,0, + 42,122,122,0,122,42,122,122,42,122,122,122,42,122,219,187, + 122,42,122,122,0,122,42,122,122,122,122,122,78,183,42,183, + 187,0,42,122,122,0,0,42,122,122,122,122,122,162,42,42, + 183,187,122,42,122,122,0,122,42,122,122,122,122,122,78,183, + 42,183,187,0,42,122,122,0,0,42,122,122,122,122,122,122, + 183,42,219,187,122,42,122,122,0,122,42,122,122,122,122,122, + 162,183,42,183,187,122,42,122,122,122,122,42,122,122,42,122, + 122,162,219,42,219,187,0,42,122,122,0,122,42,122,122,42, + 122,122,162,183,42,183,187,0,42,122,122,0,122,42,122,122, + 122,122,122,122,42,42,183,187,0,42,122,122,0,122,42,122, + 122,122,122,122,122,26,42,183,187,0,0,0,0,221,15,120, + 71,244,140,244,71,244,71,244,248,244,244,120,120,244,244,36, + 120,36,244,36,120,120,36,120,36,120,36,36,36,36,36,36, + 36,36,217,36,36,217,217,36,105,36,105,36,105,63,105,105, + 63,105,105,105,105,105,105,105,105,210,105,105,105,63,63,105, + 184,240,240,240,240,240,240,240,240,240,240,181,184,58,240,240, + 240,240,181,240,240,119,240,119,108,108,240,240,240,108,240,240, + 108,240,108,119,108,181,23,6,138,181,108,108,108,108,159,108, + 159,108,119,159,108,108,108,108,108,119,240,119,108,119,240,240, + 119,240,119,119,119,119,58,58,119,240,119,159,240,58,119,240, + 119,58,240,119,58,240,119,58,58,240,119,119,58,236,58,236, + 236,119,58,181,58,58,58,58,58,119,119,236,236,236,119,119, + 236,119,58,119,119,119,58,119,119,58,58,119,119,236,119,58, + 58,236,236,119,58,119,119,58,58,58,58,58,119,119,119,119, + 119,119,119,240,119,58,119,119,119,119,119,119,240,119,240,119, + 58,119,58,159,119,159,119,159,119,119,119,119,119,119,119,159, + 119,119,159,119,119,119,119,119,119,159,119,108,120,0,212,75, + 221,0,78,0,35,47,44,142,75,187,95,166,35,219,0,0, + 166,183,219,221,50,50,111,183,50,22,122,183,162,162,94,162, + 109,50,162,162,162,221,187,187,111,224,166,111,166,187,94,187, + 187,183,42,42,162,122,0,0,0,187,183,78,122,183,183,183, + 0,0,122,122,0,0,221,0,162,162,0,0,0,162,162,0, + 0,0,122,122,0,122,78,50,50,162,183,221,42,132,95,166, + 166,224,0,78,42,78,42,162,0,122,122,42,42,111,162,42, + 183,183,183,42,183,183,42,183,78,122,0,0,0,122,183,0, + 0,122,0,0,0,0,0,162,162,162,162,162,162,162,162,162, + 111,200,111,50,163,111,111,75,224,75,111,75,224,97,35,35, + 200,42,122,122,0,122,0,122,122,122,42,78,122,122,183,227, + 59,0,0,122,122,122,122,122,122,0,122,111,126,183,0,0, + 42,183,122,0,0,122,122,0,0,122,122,78,183,94,0,78, + 122,0,122,0,122,78,122,122,122,26,0,0,0,122,78,0, + 162,162,162,162,162,162,162,162,0,162,162,0,122,122,122,122, + 162,122,0,221,122,122,122,122,122,122,122,42,42,122,42,0, + 0,0,0,0,212,183,0,0,0,0,0,122,0,162,221,0, + 42,122,42,0,221,212,50,78,122,0,94,78,42,0,42,219, + 132,26,122,183,162,122,162,0,0,0,0,0,0,0,0,42, + 219,122,42,122,0,0,162,162,0,0,122,122,0,0,0,0, + 0,105,89,244,244,244,244,244,244,120,244,244,120,36,244,244, + 244,36,120,36,120,244,36,120,36,36,120,36,36,36,36,120, + 36,36,36,217,36,36,105,36,217,36,105,105,36,210,105,105, + 105,105,105,63,63,105,105,210,105,63,105,63,105,105,63,63, + 240,240,240,240,240,240,240,240,240,240,184,240,240,240,240,58, + 240,184,240,240,240,108,240,240,240,240,240,240,108,240,108,240, + 240,108,108,119,108,181,19,6,93,181,83,108,108,108,108,108, + 108,108,108,108,108,159,119,240,119,108,240,108,119,240,159,119, + 240,119,159,58,58,58,119,119,159,58,58,119,58,119,58,58, + 119,119,58,119,119,119,58,119,119,58,119,58,119,58,58,58, + 119,236,236,236,119,119,119,119,119,240,58,58,58,119,58,58, + 58,58,119,58,58,119,119,236,236,119,119,58,58,119,58,119, + 119,119,119,236,236,58,119,119,119,119,119,119,58,58,119,119, + 240,119,240,119,119,119,240,58,119,240,119,159,119,159,119,159, + 58,58,159,119,159,119,119,159,119,159,119,108,119,108,119,119, + 119,119,119,119,119,119,119,119,119,119,119,108,133,50,29,135, + 142,0,78,0,29,50,109,135,44,221,95,0,37,0,187,59, + 44,200,95,162,50,162,64,166,95,212,122,187,162,162,187,227, + 42,227,162,187,183,0,59,224,59,59,59,44,64,59,224,75, + 183,78,221,122,42,42,42,122,0,59,200,111,126,163,224,95, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,78, + 122,162,162,162,162,0,187,164,203,122,26,95,132,254,99,182, + 99,34,187,126,126,187,95,219,122,221,122,0,122,64,224,97, + 111,97,111,59,224,163,187,0,162,187,64,64,214,44,99,64, + 99,64,224,166,0,0,0,221,162,50,22,162,50,162,162,162, + 163,35,200,47,47,35,200,59,97,95,47,59,223,64,64,29, + 35,78,122,26,42,0,0,0,0,246,78,183,183,243,64,214, + 235,44,122,78,183,42,183,78,78,122,42,34,64,64,44,34, + 224,44,64,0,254,42,26,224,47,109,64,44,34,59,122,126, + 26,187,42,0,35,224,42,122,42,187,0,0,0,187,187,0, + 162,162,0,0,0,0,50,40,50,94,183,50,162,42,122,42, + 42,42,42,122,42,219,122,122,219,17,17,132,17,26,219,42, + 0,162,162,0,0,162,0,0,162,0,0,42,0,42,187,0, + 219,162,56,37,241,50,187,183,162,162,183,42,78,42,183,162, + 42,183,187,183,221,187,111,187,122,42,122,122,122,0,0,109, + 182,243,109,187,162,0,122,122,122,0,0,42,122,0,0,0, + 12,120,114,244,244,248,244,120,120,244,120,120,36,244,120,36, + 36,244,36,120,36,36,120,36,36,120,36,120,36,36,36,120, + 36,36,36,36,36,105,36,105,36,105,105,36,105,105,210,105, + 63,63,63,105,105,63,105,105,105,105,63,105,63,63,63,105, + 240,240,247,240,240,240,247,184,240,240,184,240,181,240,240,181, + 240,240,240,240,240,240,108,240,240,240,240,240,108,240,108,108, + 240,240,108,108,108,181,23,6,138,169,83,108,240,108,108,108, + 119,108,119,108,108,108,159,108,240,108,119,108,240,119,108,119, + 58,119,159,119,58,58,58,119,58,58,240,119,159,119,119,58, + 240,119,58,119,58,58,240,240,58,58,58,58,58,119,181,184, + 119,58,58,58,119,58,58,119,119,119,119,58,58,119,119,119, + 119,58,58,119,58,58,240,119,58,58,58,58,58,119,58,58, + 58,119,58,119,119,58,58,58,58,240,119,58,58,240,119,119, + 119,119,119,240,119,58,119,240,119,240,119,240,119,159,119,119, + 119,58,58,119,159,119,119,159,119,108,119,159,119,108,108,119, + 108,108,119,119,119,119,119,119,119,119,119,108,151,163,229,229, + 133,162,122,0,223,50,0,111,224,122,122,37,22,221,183,78, + 50,50,50,50,162,163,187,215,26,122,0,187,162,163,163,212, + 78,162,122,50,162,162,64,64,47,64,47,64,59,95,42,42, + 162,122,42,122,122,122,42,122,0,59,59,224,224,200,35,111, + 0,0,0,0,0,0,122,183,78,0,0,0,126,42,162,162, + 94,183,163,163,162,0,187,37,37,42,26,183,166,59,46,37, + 203,75,42,162,162,162,162,183,122,0,64,47,46,64,47,59, + 35,44,44,29,254,0,0,95,44,47,99,200,95,212,37,224, + 254,95,95,99,99,99,221,0,0,162,50,162,162,50,212,122, + 122,162,50,162,95,46,75,163,50,162,94,187,111,44,47,44, + 35,42,42,26,42,50,209,24,209,221,187,183,183,37,50,246, + 246,111,214,221,183,187,111,166,187,183,122,59,47,59,44,34, + 187,187,44,122,44,0,99,44,187,111,59,64,111,122,187,111, + 187,122,42,34,20,95,122,0,122,78,26,162,78,111,219,42, + 75,200,224,75,59,59,162,50,162,162,50,50,162,17,187,183, + 162,162,162,221,122,187,0,162,162,122,122,78,78,162,78,0, + 162,162,162,122,187,187,0,26,26,183,0,42,162,162,42,0, + 163,226,162,46,187,132,239,94,187,50,162,42,187,111,132,183, + 139,0,187,166,78,0,0,42,162,0,0,0,0,0,0,42, + 254,187,183,0,0,0,122,122,0,0,0,42,42,0,0,42, + 67,25,89,244,244,244,244,244,120,244,120,120,36,244,244,36, + 120,244,36,244,36,120,36,36,36,36,36,36,36,36,36,36, + 36,36,36,36,36,36,36,105,105,217,105,105,105,105,105,105, + 105,105,63,63,105,210,105,105,105,105,105,105,105,105,63,63, + 240,108,240,240,240,240,240,108,240,240,108,240,240,240,108,240, + 240,108,240,240,240,108,240,240,108,108,240,240,240,108,108,108, + 108,108,108,119,108,89,23,6,216,39,83,108,108,108,108,159, + 108,108,108,159,108,108,108,159,240,240,108,240,108,108,240,240, + 119,240,119,159,119,58,119,240,119,159,58,58,119,240,119,240, + 58,58,119,58,58,119,119,58,119,240,240,119,240,58,58,119, + 240,119,58,119,58,58,119,58,58,119,240,119,58,58,58,58, + 58,119,119,58,119,119,119,119,240,58,119,119,119,58,119,119, + 119,58,119,58,58,58,58,119,119,119,58,119,119,119,240,119, + 240,58,119,240,119,119,58,58,119,58,119,159,119,240,159,240, + 159,119,119,159,119,119,119,108,119,119,108,119,119,119,119,119, + 119,119,119,119,159,119,119,119,119,119,119,83,15,75,171,135, + 229,46,0,122,24,44,0,94,203,97,166,37,22,95,215,183, + 183,162,162,42,183,50,162,162,239,126,187,95,166,203,241,162, + 111,166,50,163,163,183,59,64,64,35,111,75,221,0,122,122, + 122,42,122,122,183,0,122,122,0,47,59,46,59,59,35,99, + 0,0,122,183,122,42,162,0,122,183,0,111,133,126,0,162, + 183,37,50,97,162,0,126,203,183,122,219,0,0,0,187,203, + 37,203,50,162,162,162,50,162,0,26,253,29,223,64,34,99, + 44,34,192,224,0,219,44,99,183,183,0,40,22,37,40,224, + 59,109,75,37,212,99,225,224,0,0,162,163,50,224,162,162, + 50,78,227,50,50,47,59,200,47,97,162,166,24,44,35,46, + 59,42,122,42,42,50,35,241,75,162,221,183,164,14,50,164, + 37,212,166,64,162,187,95,126,187,183,187,0,183,44,64,64, + 44,254,150,59,64,183,59,111,95,95,224,109,56,166,111,187, + 221,111,20,29,253,95,243,47,152,35,254,162,26,254,224,111, + 34,34,29,29,20,44,0,122,162,183,221,78,122,95,111,78, + 162,162,162,162,162,111,162,122,122,37,162,162,162,162,162,0, + 162,162,162,166,99,224,122,219,0,75,241,94,162,162,166,12, + 59,200,212,241,132,78,162,187,183,0,162,183,132,111,42,162, + 162,132,109,109,166,0,122,0,0,42,183,219,42,0,0,162, + 78,122,0,0,78,122,26,122,0,0,78,0,0,0,0,219, + 182,36,114,71,244,248,248,120,244,120,120,244,120,36,120,244, + 36,120,36,36,120,36,120,36,120,36,36,36,36,36,36,36, + 36,36,36,36,36,105,105,105,105,36,105,105,105,105,63,105, + 105,105,105,105,105,105,105,210,105,105,63,105,63,210,105,36, + 240,108,247,240,247,240,240,240,240,240,240,240,240,240,240,108, + 240,108,108,240,240,240,108,240,240,108,240,108,240,240,108,108, + 108,83,108,108,108,181,250,6,216,39,83,83,240,108,108,108, + 240,108,108,159,108,108,108,108,108,108,108,240,159,240,119,108, + 159,108,119,108,119,119,119,159,119,240,119,240,119,58,119,119, + 119,58,58,58,58,58,58,240,119,119,119,119,58,119,119,58, + 119,119,58,58,58,58,181,240,119,119,119,119,119,58,58,58, + 58,240,119,58,119,240,119,119,119,58,240,240,119,58,58,58, + 119,240,119,119,119,240,119,240,119,119,58,58,240,119,240,119, + 119,240,119,240,119,159,119,240,119,240,119,119,119,119,119,119, + 159,119,159,119,119,119,119,119,119,119,119,119,119,119,119,119, + 159,119,119,119,119,89,119,119,119,119,119,83,15,241,229,135, + 229,171,162,34,34,75,0,162,37,203,163,122,94,22,50,162, + 42,162,78,50,50,162,162,141,95,215,162,0,219,50,203,50, + 183,40,78,212,50,95,162,111,183,219,0,99,44,0,122,42, + 122,122,122,183,111,183,0,0,0,35,59,59,47,64,44,64, + 0,0,42,122,221,219,0,0,0,183,0,187,0,187,0,162, + 162,227,42,75,42,0,94,50,122,122,42,0,0,162,0,97, + 22,37,22,78,0,162,50,162,42,29,34,44,35,64,34,35, + 44,44,111,0,99,44,111,42,126,187,78,111,164,164,40,95, + 97,95,200,22,22,37,212,99,34,166,215,50,163,183,239,183, + 50,187,166,183,22,75,34,35,35,126,183,34,44,47,34,47, + 35,17,0,122,42,163,42,42,163,50,26,183,226,212,212,212, + 241,50,22,224,111,187,224,95,95,111,111,187,122,95,239,95, + 34,64,183,47,171,35,183,59,99,59,239,221,219,224,219,42, + 47,44,75,109,35,95,192,57,152,245,97,0,187,224,224,109, + 223,44,29,178,171,224,122,162,50,162,162,162,122,150,187,0, + 162,42,50,42,122,187,162,162,122,241,162,0,0,162,0,0, + 162,0,0,99,44,214,239,26,122,163,142,59,59,243,182,224, + 187,187,224,162,42,219,187,162,183,187,122,26,17,166,0,94, + 0,99,99,211,109,166,183,0,42,219,183,132,187,187,0,162, + 0,0,0,162,187,183,42,0,0,0,0,0,0,122,0,109, + 211,105,114,244,244,244,248,120,120,244,36,120,120,36,120,244, + 120,36,120,36,120,36,36,36,36,36,36,36,36,217,36,36, + 36,217,36,36,36,36,36,217,105,105,217,36,217,105,105,105, + 210,105,105,105,105,217,36,105,105,36,210,105,105,105,105,105, + 108,240,240,108,240,108,108,108,108,240,108,108,240,240,108,240, + 240,240,240,108,108,108,240,108,108,240,108,240,108,108,108,108, + 108,108,108,108,108,119,250,6,41,181,83,108,108,108,108,108, + 108,108,108,108,108,159,108,108,240,240,159,108,108,240,240,119, + 240,119,240,58,119,58,58,119,240,119,159,58,58,58,58,119, + 240,240,58,119,240,119,240,58,58,58,240,58,119,240,240,119, + 119,240,119,240,119,240,58,119,240,58,58,58,58,119,119,119, + 119,119,240,119,240,119,119,119,240,119,119,58,58,58,58,119, + 240,119,119,58,58,119,119,119,58,58,58,119,119,119,58,119, + 240,58,119,119,240,119,159,119,240,119,108,159,119,240,119,240, + 119,159,119,159,119,159,143,119,119,143,119,119,159,119,159,119, + 119,159,119,159,236,119,119,119,119,119,119,108,245,59,229,245, + 229,186,163,223,142,162,162,0,56,75,162,50,0,95,162,94, + 94,78,227,95,246,162,212,183,0,0,122,94,0,215,183,163, + 37,241,75,183,111,50,95,111,37,22,122,99,29,183,0,122, + 122,42,122,239,126,224,95,0,0,95,224,64,47,34,223,171, + 0,0,183,122,183,122,219,183,0,122,0,166,59,166,0,0, + 75,91,22,241,162,0,40,42,122,187,219,187,0,0,0,187, + 164,50,50,59,59,122,162,187,239,171,59,64,24,64,214,35, + 64,183,0,64,214,212,164,59,219,50,183,187,78,183,187,111, + 219,187,224,241,164,22,95,187,47,59,183,0,203,50,94,37, + 94,162,50,200,163,162,187,34,187,239,46,44,200,46,35,35, + 64,111,26,26,42,24,22,187,24,122,17,162,37,94,162,75, + 94,0,209,221,44,122,95,109,59,224,224,111,183,64,29,221, + 99,215,162,34,171,59,44,254,59,95,0,0,187,187,224,29, + 178,139,64,214,64,97,171,15,208,171,111,0,187,254,109,59, + 158,253,224,254,35,163,0,42,37,162,94,0,42,224,111,162, + 50,78,0,162,221,91,122,162,0,164,111,187,224,254,109,0, + 0,0,122,64,64,214,166,42,122,164,84,92,59,183,212,50, + 0,0,26,183,221,183,0,183,111,111,0,42,221,0,122,163, + 0,99,254,122,221,183,162,122,42,78,162,0,162,111,187,0, + 0,0,0,0,162,0,0,78,0,0,0,0,122,122,0,99, + 109,105,114,248,248,248,244,120,244,120,120,120,36,244,120,36, + 244,36,120,36,36,120,36,36,36,25,36,36,36,36,36,36, + 36,36,36,217,36,36,105,105,217,105,36,105,63,217,217,217, + 36,105,105,105,105,105,105,217,105,105,105,105,105,210,105,105, + 240,108,108,108,240,240,240,240,240,240,240,240,240,240,240,240, + 108,240,240,240,240,108,240,240,108,108,108,108,108,240,66,108, + 108,108,108,108,108,181,250,6,62,114,247,108,108,108,108,108, + 108,108,108,159,108,240,240,159,108,108,240,159,240,108,159,108, + 159,119,159,58,240,119,240,119,159,119,240,119,159,240,119,58, + 119,119,240,119,240,119,119,240,119,58,240,119,240,119,58,240, + 119,119,119,119,119,119,240,119,119,240,119,58,58,240,119,58, + 58,119,119,119,58,240,119,119,119,119,119,58,240,240,119,58, + 58,240,119,240,119,240,58,240,119,240,240,119,240,119,240,119, + 119,240,119,240,119,119,240,119,159,119,119,240,119,159,119,119, + 119,119,119,236,119,119,119,119,119,159,119,119,119,119,119,119, + 119,159,119,119,119,119,119,119,119,119,119,83,15,61,253,223, + 253,229,44,162,223,47,126,95,50,50,227,162,122,183,78,166, + 227,78,42,37,212,183,111,162,162,0,24,178,46,162,95,162, + 162,162,50,95,42,94,221,183,164,50,224,44,20,29,42,122, + 122,122,0,221,50,224,111,224,50,183,183,163,162,163,44,29, + 78,0,0,126,187,94,183,183,187,0,0,95,20,227,0,0, + 50,50,24,61,122,0,239,0,183,166,17,183,0,122,0,183, + 22,212,37,163,171,162,162,162,0,224,239,64,46,187,59,224, + 187,0,99,44,162,164,14,47,215,187,0,0,0,0,132,59, + 42,26,183,26,243,200,59,163,212,187,192,221,162,50,246,212, + 94,183,126,163,42,200,64,126,162,20,135,29,35,34,224,111, + 59,111,122,42,26,163,37,75,209,26,183,221,221,37,61,183, + 46,203,50,78,111,0,122,122,166,215,95,126,183,59,64,64, + 47,254,34,29,111,0,183,221,0,0,0,26,142,29,20,245, + 44,61,200,224,223,95,192,171,245,20,26,162,183,187,187,111, + 47,224,42,42,42,94,162,162,50,42,50,0,187,59,109,0, + 162,162,0,0,0,0,0,162,0,164,214,64,192,225,192,187, + 0,0,0,111,150,224,78,0,162,183,163,163,163,0,50,37, + 0,162,0,166,26,187,187,224,126,163,212,0,0,0,42,61, + 0,182,111,162,183,183,162,162,0,162,42,122,0,42,187,122, + 0,78,42,122,162,162,162,122,122,0,0,0,122,0,0,64, + 109,120,114,244,244,248,244,120,244,120,120,120,36,120,120,36, + 244,36,120,36,120,36,36,36,120,36,217,36,36,217,36,217, + 36,36,36,36,105,36,105,105,105,63,105,36,105,105,105,105, + 105,217,105,217,105,217,36,105,217,105,105,105,105,105,105,105, + 108,240,240,247,240,247,240,240,247,240,240,108,108,240,240,240, + 240,108,108,240,240,240,108,108,240,240,108,240,108,108,240,108, + 108,108,108,108,159,108,43,6,62,74,161,108,108,108,159,108, + 159,240,240,108,240,108,159,108,159,240,159,108,159,240,108,58, + 240,240,119,119,58,58,58,119,108,159,119,240,119,119,240,58, + 119,240,119,58,58,119,240,58,58,58,119,240,58,58,119,58, + 119,240,58,119,240,119,58,119,240,119,240,119,240,58,119,240, + 58,58,119,240,119,119,240,58,240,119,240,119,119,119,240,119, + 240,58,119,119,240,119,119,119,240,119,119,119,240,119,119,240, + 58,119,240,119,159,159,119,58,58,236,240,58,58,119,119,240, + 58,58,159,159,159,119,159,119,159,119,119,119,159,119,159,119, + 159,119,119,159,119,89,119,119,119,119,119,83,15,122,47,44, + 223,29,20,0,126,46,122,50,50,37,75,50,183,162,162,50, + 203,22,97,17,50,163,215,162,162,163,75,163,126,94,162,163, + 50,221,183,50,94,227,126,162,183,40,163,64,29,34,183,0, + 122,122,42,122,0,187,166,224,59,224,50,42,122,166,42,95, + 162,0,122,59,221,166,42,122,187,0,0,0,0,0,0,0, + 187,22,50,183,0,0,94,162,0,0,0,0,0,0,0,126, + 164,22,22,22,15,42,122,56,0,162,0,44,34,187,59,59, + 0,64,254,59,241,241,203,0,150,166,111,162,0,0,219,227, + 0,42,26,122,42,243,227,183,183,50,126,64,183,50,162,162, + 162,163,163,75,47,47,183,183,219,111,59,224,142,34,224,126, + 166,219,122,122,26,183,200,22,78,162,22,212,22,50,22,162, + 35,50,0,64,166,0,122,26,26,26,42,26,0,192,34,59, + 15,64,111,122,0,0,0,122,122,42,35,171,135,29,162,75, + 95,145,59,235,24,97,64,0,126,187,95,0,162,78,0,0, + 162,0,122,0,122,50,78,42,50,50,221,0,183,166,187,162, + 162,162,0,0,0,0,162,162,0,37,64,64,192,225,192,166, + 0,0,0,0,0,0,162,0,0,0,126,46,111,183,162,40, + 162,162,42,224,97,163,50,162,183,111,94,0,183,162,162,163, + 162,182,182,187,187,162,42,78,162,162,183,50,162,162,162,0, + 0,122,122,122,162,122,122,122,122,122,122,0,122,0,0,145, + 12,36,114,248,120,244,248,248,120,244,120,120,120,120,120,120, + 36,36,36,120,36,120,36,36,36,36,120,217,36,36,36,36, + 217,36,36,217,36,217,105,105,210,105,105,105,105,217,105,105, + 105,63,105,63,105,36,63,36,105,105,210,210,217,217,217,105, + 108,240,240,240,240,240,240,240,240,108,240,240,240,240,240,240, + 240,240,240,108,240,240,240,240,108,240,240,240,240,108,240,240, + 108,108,108,108,108,181,43,6,62,71,247,108,108,108,240,108, + 108,159,108,108,159,108,240,159,240,240,159,240,240,159,159,240, + 119,108,159,240,159,58,240,119,119,58,58,159,58,58,240,119, + 58,240,119,58,58,58,159,240,159,58,58,58,58,240,58,240, + 119,58,240,119,240,119,159,119,58,119,240,119,119,240,119,119, + 58,240,119,119,159,119,240,119,240,119,240,119,184,58,58,58, + 119,58,58,58,58,240,119,58,58,58,240,119,240,119,119,58, + 58,58,240,119,119,58,58,58,58,236,58,58,184,236,236,58, + 58,236,58,236,119,119,119,119,119,159,119,119,119,236,119,119, + 159,89,119,119,119,236,119,119,159,119,119,83,229,111,135,229, + 151,135,38,42,126,239,227,162,163,59,221,162,50,163,162,183, + 50,50,163,111,183,183,94,0,163,84,163,42,209,162,94,126, + 163,163,50,126,126,94,163,50,42,162,183,44,29,44,35,122, + 0,0,122,42,0,0,162,95,221,224,219,122,111,163,162,42, + 26,187,221,42,0,0,0,0,183,183,219,122,42,0,0,59, + 47,22,22,187,111,0,162,163,0,0,162,50,162,162,183,95, + 50,94,94,187,29,44,95,75,187,29,35,223,34,44,29,183, + 99,95,126,59,59,183,0,0,187,166,99,44,35,50,163,171, + 171,182,95,162,95,183,26,243,243,200,22,95,59,50,212,203, + 203,50,97,203,163,162,162,59,47,187,183,183,0,94,0,122, + 166,122,122,122,219,50,241,61,75,95,164,241,92,183,162,50, + 163,162,50,64,183,0,122,219,26,17,12,42,0,0,64,99, + 109,47,42,219,26,26,26,26,26,226,73,59,166,42,0,162, + 37,215,95,111,111,219,99,44,224,183,78,42,42,26,42,42, + 42,122,42,0,0,162,162,78,122,42,0,0,221,50,162,78, + 42,162,111,75,187,75,50,162,162,241,64,99,34,44,225,183, + 162,0,0,0,0,0,0,0,0,50,97,50,50,182,97,187, + 42,50,109,221,162,95,99,224,227,0,0,162,122,0,162,162, + 122,235,95,162,221,94,162,183,162,162,42,22,187,122,0,162, + 0,219,122,0,0,0,122,122,0,122,42,0,0,0,26,214, + 26,36,114,244,120,244,120,120,120,120,120,120,120,120,36,244, + 36,120,36,120,36,36,36,36,36,217,36,36,36,217,36,36, + 36,217,36,217,36,36,217,36,105,217,105,105,36,36,105,217, + 36,210,105,105,63,36,105,105,217,36,36,105,105,36,105,105, + 240,240,247,240,240,240,240,240,108,240,247,240,240,240,240,240, + 240,240,240,240,108,108,108,240,66,240,240,240,240,240,108,108, + 108,108,108,108,108,119,87,6,167,248,161,240,108,108,240,240, + 240,108,159,240,108,159,240,108,159,240,108,159,240,240,108,159, + 159,119,240,119,240,159,58,58,240,159,119,240,119,240,58,159, + 119,119,240,159,240,119,240,58,119,240,184,119,240,119,58,58, + 58,58,119,58,58,119,119,159,119,159,58,58,159,58,184,58, + 58,58,119,240,119,58,119,240,119,240,58,58,58,58,58,58, + 58,58,58,58,119,58,119,240,119,240,58,58,159,58,58,58, + 58,119,236,240,184,58,58,58,58,184,236,58,236,159,184,58, + 236,58,236,159,236,236,143,236,236,236,159,119,159,119,236,159, + 119,119,159,119,119,119,119,119,119,119,119,83,133,109,229,135, + 171,229,133,229,162,135,162,0,40,37,50,50,42,183,94,162, + 94,162,94,224,37,78,162,122,56,24,241,50,75,122,94,241, + 163,209,221,183,42,212,163,183,111,162,162,64,29,35,44,47, + 0,122,122,0,0,227,20,34,122,50,183,42,141,215,162,183, + 162,227,187,42,0,0,0,0,122,0,0,0,162,132,59,225, + 64,183,239,162,64,166,224,162,183,0,162,0,0,162,97,183, + 241,162,0,0,224,20,47,47,187,135,29,44,223,29,64,215, + 44,239,95,227,183,0,0,0,95,212,96,155,152,162,162,132, + 47,203,37,187,223,162,42,17,219,50,40,50,200,212,212,162, + 162,0,47,200,163,163,239,122,166,64,59,111,162,126,64,126, + 111,122,99,187,99,209,14,22,22,26,99,95,50,162,37,50, + 37,40,212,224,122,122,122,42,42,219,122,215,163,46,94,162, + 0,0,111,40,187,12,12,26,111,24,22,0,162,183,162,42, + 164,162,163,35,239,163,64,171,183,122,26,26,26,26,0,42, + 42,0,122,0,122,0,0,0,0,122,122,122,162,163,50,50, + 50,50,163,239,212,163,78,0,122,162,182,224,182,182,35,42, + 0,122,122,122,0,78,162,122,0,94,0,212,164,37,187,183, + 163,215,203,0,162,162,126,235,187,0,122,0,0,122,0,0, + 0,99,109,227,0,221,221,0,162,162,183,94,0,0,0,0, + 0,187,42,0,122,0,0,42,0,42,122,0,0,0,141,214, + 150,63,114,244,248,120,244,248,120,120,120,120,120,120,120,36, + 244,36,36,36,120,120,36,217,36,36,36,105,217,36,217,36, + 105,36,105,36,105,105,105,105,105,105,217,105,105,105,105,105, + 105,105,105,210,36,105,105,105,36,105,105,36,36,105,217,105, + 108,240,66,240,247,240,247,240,240,240,247,240,240,240,240,240, + 240,240,240,240,240,240,240,240,240,108,240,240,240,240,240,240, + 240,159,108,159,108,108,87,116,167,25,161,240,108,108,159,108, + 159,108,240,108,108,108,108,108,108,159,108,108,108,240,108,240, + 119,240,119,240,119,58,58,58,240,159,58,240,119,58,240,119, + 184,58,159,58,240,58,159,240,58,119,240,58,58,58,58,184, + 58,236,58,58,240,240,119,240,119,58,58,58,58,58,58,58, + 58,159,58,240,119,58,58,58,58,240,119,58,58,58,58,184, + 184,236,236,184,58,240,119,240,119,119,119,58,240,58,58,58, + 58,58,236,58,58,236,236,184,58,184,236,184,236,236,236,184, + 236,236,236,159,119,119,119,119,119,119,119,119,159,119,119,159, + 159,236,143,159,119,236,236,119,159,119,119,108,151,187,20,135, + 20,135,229,102,212,34,200,163,241,59,42,94,239,94,42,94, + 221,95,162,162,50,183,0,0,162,42,22,75,162,122,0,50, + 163,50,162,221,162,50,42,221,224,166,42,224,34,34,44,171, + 78,0,0,162,44,135,133,59,254,183,239,0,122,0,59,162, + 94,0,0,0,183,183,219,183,0,0,0,122,64,64,166,47, + 95,0,162,50,99,78,64,111,94,50,42,162,163,163,163,0, + 163,241,162,0,166,245,239,95,122,44,29,24,44,34,122,64, + 126,241,126,0,219,42,227,44,37,50,35,15,111,0,0,0, + 0,0,162,35,15,96,162,0,0,0,122,99,95,26,50,187, + 221,162,111,59,126,94,75,50,162,132,59,59,126,162,224,224, + 122,166,95,166,99,64,64,59,200,132,224,187,99,50,42,50, + 22,78,0,254,122,122,0,122,122,0,162,24,35,59,111,200, + 0,42,109,224,50,50,183,126,164,37,14,164,24,64,162,50, + 163,162,183,50,44,163,214,171,122,42,42,26,183,26,42,0, + 42,42,42,26,42,0,162,162,162,122,0,26,78,50,50,50, + 162,162,163,183,215,162,0,0,162,0,122,166,166,187,111,42, + 162,162,162,122,162,163,162,162,78,122,42,22,50,0,0,0, + 50,219,226,37,221,187,162,162,122,122,122,122,122,122,0,0, + 0,0,187,214,78,122,122,12,187,162,162,50,122,42,187,162, + 0,78,162,122,0,0,162,162,162,42,122,0,0,162,235,64, + 109,217,114,244,120,248,120,120,120,120,120,36,36,36,36,120, + 36,36,120,36,36,36,36,36,36,105,36,36,105,36,105,36, + 105,36,105,36,105,105,105,105,105,63,105,217,105,217,36,105, + 105,210,105,105,105,217,217,105,105,105,105,63,105,105,105,105, + 240,240,240,240,240,134,184,247,240,240,240,240,184,247,240,240, + 240,240,240,240,240,240,240,240,240,240,240,108,66,240,108,66, + 108,108,108,108,108,119,87,6,123,25,161,108,108,240,108,108, + 108,108,108,240,108,240,240,108,240,108,108,159,240,240,240,159, + 240,159,240,58,240,240,240,184,58,240,159,58,184,58,58,240, + 58,159,240,58,58,58,240,58,58,240,58,58,240,58,184,58, + 58,159,58,119,119,58,58,58,58,58,58,58,58,58,58,58, + 58,119,159,58,58,58,58,119,119,58,58,58,58,58,236,58, + 58,184,184,58,58,58,58,58,236,184,58,58,236,236,159,58, + 153,58,184,58,236,184,184,236,236,236,184,58,58,58,159,58, + 236,159,119,143,236,159,159,143,159,143,159,159,236,159,143,236, + 236,159,119,236,236,159,119,159,119,119,108,83,151,26,135,171, + 229,20,135,38,142,24,135,40,46,183,162,0,163,212,162,0, + 166,183,59,50,0,50,0,122,122,50,209,22,37,0,122,75, + 200,163,26,221,162,221,0,183,78,126,50,224,224,35,34,20, + 35,0,47,245,245,186,186,122,42,162,44,44,212,44,133,171, + 162,122,0,162,162,0,0,122,0,0,0,126,44,224,95,187, + 254,0,122,50,95,42,59,166,183,164,163,42,241,150,254,37, + 219,241,209,0,162,224,0,42,0,162,182,29,223,59,0,99, + 40,75,183,122,221,64,133,20,35,37,50,59,183,183,166,122, + 122,215,61,15,245,44,0,0,221,122,42,187,64,221,246,111, + 0,50,78,47,97,221,47,212,94,59,221,0,187,50,162,94, + 0,99,56,187,126,59,95,182,224,59,95,78,44,192,162,241, + 24,50,0,122,0,0,122,0,0,42,75,59,35,35,75,183, + 0,187,59,59,59,50,162,44,29,59,50,22,75,59,50,50, + 50,0,200,59,59,40,225,171,122,42,122,0,0,42,122,0, + 122,122,42,26,122,0,0,162,162,122,0,219,26,162,37,50, + 50,50,40,239,94,42,122,122,0,0,0,0,78,122,122,0, + 0,122,162,0,227,126,162,122,162,0,50,221,0,162,162,162, + 212,109,212,46,162,12,166,42,26,42,122,0,0,122,122,0, + 0,0,42,111,162,0,182,99,183,126,50,50,78,56,50,183, + 0,0,0,0,187,122,221,0,42,162,78,0,0,56,64,214, + 26,105,114,248,120,120,244,120,120,120,36,120,120,120,36,120, + 36,36,36,36,36,36,36,36,105,36,105,105,36,217,105,105, + 36,105,105,105,217,105,217,105,63,105,105,105,105,105,105,217, + 105,36,36,105,217,105,36,36,36,105,210,105,105,105,105,210, + 240,240,247,240,247,184,240,240,240,240,240,240,240,184,240,240, + 240,240,240,240,240,240,240,108,240,108,240,240,108,240,240,108, + 108,108,108,108,108,108,21,116,123,155,161,240,108,108,240,108, + 108,240,108,159,108,108,240,108,108,108,108,108,108,240,108,108, + 159,240,240,159,159,58,159,58,240,119,58,58,240,58,58,58, + 240,58,159,58,58,58,159,58,58,58,184,58,58,58,184,184, + 58,58,184,153,58,58,58,58,58,58,58,58,153,159,159,58, + 58,58,58,58,58,58,184,58,58,58,58,58,58,184,236,184, + 184,184,58,153,236,159,236,159,58,184,58,184,184,58,236,58, + 236,58,58,184,58,236,184,184,184,236,236,153,236,236,236,184, + 236,58,119,159,236,119,119,159,119,159,236,159,119,159,159,119, + 159,159,119,159,236,159,236,159,159,119,119,108,151,0,34,135, + 135,229,229,135,29,142,163,162,22,177,14,183,212,37,0,78, + 239,221,109,75,221,163,183,0,221,111,209,22,91,95,200,22, + 61,22,61,200,0,0,162,111,126,50,50,37,163,61,59,29, + 35,29,186,229,171,29,111,0,183,42,35,15,15,229,245,15, + 42,0,162,162,50,162,122,122,0,0,0,224,64,187,126,78, + 59,0,0,163,95,26,187,59,95,37,95,219,22,162,183,209, + 42,178,154,42,162,0,0,26,0,122,162,99,29,26,254,35, + 203,219,141,26,95,47,29,50,35,59,50,212,187,95,12,142, + 187,254,29,155,35,50,50,75,35,224,150,221,182,40,40,42, + 59,162,162,34,35,75,59,59,111,47,59,47,122,219,227,187, + 162,221,59,183,183,64,64,59,99,59,95,183,99,44,224,22, + 111,50,162,162,0,42,26,42,122,187,35,187,187,50,50,122, + 42,224,99,59,99,50,224,192,192,20,214,64,203,200,44,142, + 34,221,47,75,95,163,214,171,42,42,17,122,0,0,0,0, + 122,0,122,183,0,75,163,0,0,122,0,26,26,122,50,50, + 50,42,162,42,94,183,50,0,0,0,162,42,99,59,109,0, + 122,42,0,162,227,122,0,162,162,0,0,122,94,50,243,122, + 162,111,14,22,203,162,0,42,122,122,122,122,0,122,0,0, + 122,42,0,0,183,162,187,122,219,99,211,224,150,42,122,122, + 0,0,219,150,182,183,162,0,122,122,42,0,0,221,99,99, + 26,63,114,120,120,120,120,120,120,120,25,36,120,36,36,36, + 36,36,36,36,36,36,36,36,217,36,36,105,36,105,36,105, + 36,217,217,36,105,105,217,36,105,105,217,217,36,105,105,105, + 105,105,217,36,105,63,105,210,105,105,105,210,105,210,105,105, + 240,134,240,240,134,240,240,240,240,240,184,247,240,240,240,240, + 240,240,240,240,240,108,240,240,108,66,108,108,240,240,108,108, + 108,108,240,240,240,108,87,116,123,155,161,108,108,108,108,108, + 159,108,240,108,108,108,108,240,240,240,240,240,159,240,159,240, + 240,159,240,240,240,240,240,240,58,159,240,58,58,184,58,159, + 58,58,58,184,184,184,58,184,184,240,184,184,184,58,240,58, + 159,236,236,58,58,184,236,58,159,58,58,236,58,153,236,153, + 153,58,159,58,159,236,58,184,153,184,58,184,153,184,184,159, + 236,236,153,58,159,236,153,159,236,236,58,58,58,58,159,184, + 159,236,153,236,58,159,58,236,236,58,184,58,184,184,184,58, + 159,236,159,119,159,236,159,236,159,236,119,119,159,159,119,159, + 236,159,159,119,159,236,119,119,108,119,108,108,133,0,111,34, + 20,135,229,229,29,24,163,37,221,92,206,164,239,40,162,122, + 94,183,219,212,94,40,95,122,59,163,163,0,215,182,44,97, + 22,22,163,22,219,122,162,92,75,50,162,50,37,164,111,59, + 0,64,186,253,15,221,219,221,0,0,225,135,171,171,15,229, + 162,0,78,162,162,162,162,0,0,0,0,224,59,95,56,111, + 44,162,42,22,47,26,227,192,64,50,24,141,24,37,37,200, + 163,44,46,0,0,122,0,219,122,42,0,94,224,162,64,59, + 183,0,219,187,37,37,50,50,171,245,75,50,226,241,95,177, + 75,150,34,44,0,163,75,241,99,59,254,26,17,59,200,0, + 44,64,0,35,44,34,163,59,200,163,34,152,29,163,78,78, + 162,122,166,224,0,99,29,192,64,47,59,162,183,26,64,162, + 162,162,162,78,0,122,0,0,0,75,75,122,42,42,187,42, + 219,59,59,59,224,183,97,44,34,34,29,192,44,126,224,34, + 245,162,78,0,35,95,64,192,95,42,26,122,42,192,122,0, + 0,126,171,29,187,171,171,42,0,42,122,0,26,26,162,37, + 50,78,209,50,162,42,59,50,122,78,78,0,78,78,122,0, + 162,162,162,163,187,0,0,162,162,0,42,0,42,224,24,162, + 94,183,22,241,99,0,0,0,42,42,122,0,122,122,0,122, + 26,26,0,122,50,162,0,26,219,254,254,182,150,26,182,42, + 0,0,187,162,0,78,42,122,0,0,122,122,122,42,42,0, + 0,221,44,47,163,217,144,248,120,120,120,36,120,36,36,244, + 36,36,36,217,36,36,217,36,36,105,105,36,105,105,105,217, + 105,105,105,105,105,36,105,105,105,105,105,36,105,217,36,210, + 105,217,105,105,105,105,63,36,105,105,105,105,105,105,105,210, + 240,240,66,240,247,134,240,240,240,247,184,184,240,240,240,240, + 247,240,240,247,184,240,240,240,240,240,240,108,66,240,108,66, + 240,108,108,108,108,181,21,116,251,186,252,108,108,108,108,108, + 108,108,159,159,159,159,108,159,240,108,240,108,240,240,240,159, + 240,119,240,159,119,159,58,240,240,58,240,159,58,184,58,184, + 240,159,58,159,58,240,58,58,58,159,184,240,184,58,58,58, + 159,184,58,58,58,159,184,236,153,153,159,184,58,159,58,58, + 159,236,184,236,159,58,236,58,58,159,236,58,58,236,153,184, + 159,58,58,159,184,159,236,159,184,153,159,153,153,153,236,159, + 184,159,184,153,58,58,159,58,236,236,236,236,236,236,236,236, + 184,236,236,159,119,159,119,236,159,159,159,236,119,159,236,119, + 143,119,159,159,159,119,159,119,159,119,108,108,133,50,178,135, + 29,253,253,135,34,203,142,47,22,183,0,162,50,183,22,10, + 50,50,122,162,50,44,0,29,44,47,95,111,47,111,99,187, + 95,224,59,22,35,203,162,37,162,162,221,0,0,50,162,126, + 0,0,245,135,245,59,122,29,183,162,59,245,135,171,171,152, + 162,42,0,50,209,241,37,26,12,12,12,214,47,254,122,64, + 64,0,162,35,225,224,95,34,34,221,212,219,111,224,50,26, + 75,209,122,0,122,122,0,42,0,122,42,122,0,78,34,187, + 0,162,59,47,162,22,22,22,241,20,152,46,164,241,46,22, + 22,35,241,50,59,64,163,212,150,111,50,132,219,12,200,166, + 254,192,95,162,200,35,75,111,241,64,171,15,245,15,29,64, + 183,162,162,183,59,166,166,95,64,64,254,162,0,42,224,183, + 50,162,50,122,97,200,162,0,50,35,50,26,26,214,29,219, + 166,224,224,254,163,223,35,99,44,214,34,34,192,44,0,0, + 126,162,122,122,29,200,99,171,64,122,42,122,0,152,183,42, + 122,29,135,109,75,50,50,0,122,26,42,0,26,12,78,50, + 162,187,35,42,162,162,183,162,162,162,162,111,42,26,26,0, + 162,162,162,64,152,0,0,162,162,0,122,0,126,209,14,183, + 162,183,122,14,109,0,42,0,42,42,122,0,122,122,0,42, + 26,42,0,50,75,163,42,122,12,187,166,109,111,56,99,243, + 162,162,0,26,187,162,42,221,42,0,17,122,0,221,219,0, + 0,219,145,64,8,217,144,244,120,120,120,36,120,36,36,36, + 36,36,36,36,105,36,105,105,36,105,105,36,217,210,105,36, + 217,105,210,105,105,36,217,105,217,105,105,36,105,105,105,105, + 105,36,105,217,36,36,105,210,105,210,105,210,105,105,105,105, + 240,153,240,240,240,240,240,240,240,240,240,240,134,240,240,134, + 240,240,240,184,247,240,240,240,240,240,240,240,240,108,240,240, + 108,108,108,108,108,83,18,116,251,54,161,108,108,240,240,159, + 240,240,108,108,108,108,159,108,159,159,108,240,159,240,119,240, + 159,240,240,240,108,159,240,58,58,159,58,240,240,58,240,159, + 58,58,58,240,184,58,240,184,184,58,58,58,58,159,184,184, + 58,58,58,159,58,58,58,159,58,58,159,236,159,153,153,159, + 153,159,236,159,236,153,184,159,236,236,184,184,153,159,58,153, + 159,153,153,153,236,236,184,153,153,58,236,58,58,58,184,236, + 58,58,159,58,58,153,236,153,159,184,184,184,184,184,184,159, + 236,236,159,236,236,236,236,159,119,236,236,159,236,159,119,159, + 159,119,236,159,119,159,159,159,119,119,108,83,133,24,135,151, + 229,229,229,151,55,50,135,135,151,20,97,162,50,50,14,22, + 50,163,162,37,97,166,59,34,59,64,34,64,59,59,50,0, + 37,241,37,61,47,246,162,162,0,0,78,162,162,162,35,187, + 0,0,34,15,135,171,15,151,221,163,162,171,245,253,253,135, + 183,187,221,203,91,75,94,219,243,26,162,203,141,99,219,254, + 34,0,0,126,64,64,126,224,224,183,122,26,183,163,42,94, + 109,35,59,0,0,42,0,26,0,122,122,0,0,183,44,0, + 0,162,152,151,171,34,0,95,59,94,34,223,37,22,73,168, + 22,37,92,20,64,64,0,78,241,164,212,221,219,26,50,162, + 166,34,20,183,200,95,200,0,35,245,171,171,171,171,171,229, + 171,78,183,162,221,182,166,0,0,0,0,0,162,187,94,59, + 0,162,162,0,75,209,163,122,37,35,26,26,26,64,64,224, + 35,183,187,162,67,135,47,35,99,34,44,50,64,192,162,0, + 162,0,0,78,34,163,150,254,224,0,122,254,215,64,122,42, + 26,158,47,183,221,122,126,0,42,26,122,0,42,26,42,94, + 162,163,162,212,212,0,50,50,163,162,0,183,59,0,0,0, + 0,26,0,150,245,64,0,162,162,0,0,224,50,22,164,150, + 162,183,182,22,94,122,122,0,42,42,122,122,122,42,0,122, + 26,42,0,91,50,42,141,219,126,219,111,111,254,183,132,99, + 150,0,0,0,0,42,0,221,162,122,111,122,0,122,219,0, + 0,235,214,64,187,36,144,120,120,120,120,25,120,120,36,36, + 25,25,36,25,25,36,36,36,217,36,36,105,36,36,36,105, + 36,105,36,36,217,105,105,217,105,36,36,105,36,105,217,217, + 36,105,36,36,105,105,63,105,210,105,105,105,105,105,105,63, + 240,240,240,240,240,240,247,134,240,240,240,247,134,240,247,240, + 240,240,240,240,240,240,240,240,240,240,240,240,240,240,108,108, + 108,108,108,240,108,181,18,116,137,152,161,240,108,240,108,240, + 240,159,159,240,159,108,240,108,108,159,159,108,240,240,240,159, + 240,159,159,58,240,159,240,240,184,184,58,58,240,58,58,58, + 184,184,58,159,184,58,159,184,184,184,184,184,58,58,58,159, + 58,159,58,184,184,159,236,184,236,236,184,236,58,58,236,58, + 153,153,153,159,159,153,236,159,184,236,159,58,159,184,58,236, + 184,58,58,159,153,236,159,58,159,159,159,236,159,159,159,153, + 153,58,153,153,58,159,58,236,58,58,58,236,236,236,236,236, + 236,236,119,159,143,119,236,236,159,119,236,159,236,159,236,119, + 143,119,143,159,119,119,119,159,119,159,119,108,173,104,171,229, + 229,229,151,151,197,64,229,223,109,59,239,0,50,163,0,162, + 0,163,50,46,212,221,64,95,183,46,34,200,122,99,224,22, + 22,224,22,22,132,0,221,50,94,0,122,94,42,162,200,183, + 122,0,26,34,15,135,152,151,94,47,162,224,15,192,15,152, + 78,111,94,75,14,200,37,26,219,162,22,14,22,50,141,219, + 34,162,0,224,59,29,132,44,44,111,42,26,209,50,163,22, + 47,64,214,166,0,0,0,42,122,0,122,0,0,183,59,0, + 0,34,229,171,15,111,0,17,99,132,162,37,37,209,226,48, + 177,50,209,223,132,99,0,0,212,203,0,50,75,150,166,111, + 219,44,225,44,162,221,0,59,245,29,34,171,171,20,192,29, + 245,183,42,78,94,162,162,187,126,187,162,0,0,94,162,109, + 224,0,0,78,0,42,162,162,75,224,42,122,64,44,163,126, + 192,0,42,164,164,187,122,223,224,44,166,0,44,171,162,0, + 64,0,42,64,183,162,162,162,42,42,183,187,162,42,162,219, + 122,94,50,50,22,50,162,0,42,26,0,0,0,122,26,162, + 162,241,0,212,26,122,122,91,75,162,221,219,141,99,132,162, + 162,162,50,0,182,152,187,162,0,0,99,234,95,164,241,182, + 162,162,214,126,0,122,0,0,122,42,0,0,0,42,0,122, + 26,26,122,0,122,219,254,150,224,182,254,182,182,42,122,111, + 42,0,42,225,183,162,221,42,0,122,122,78,162,162,42,0, + 0,158,64,64,187,105,71,120,120,120,120,36,120,25,36,120, + 36,36,36,36,36,25,36,36,36,105,217,105,105,105,105,105, + 105,217,217,36,36,36,105,217,105,217,217,105,217,36,105,217, + 36,105,105,210,63,36,105,105,105,210,105,105,105,105,105,105, + 240,134,240,240,240,134,240,247,240,240,240,134,247,134,240,134, + 240,240,240,240,240,134,240,240,240,240,240,240,240,240,240,240, + 240,240,240,108,119,108,173,116,137,152,252,108,159,240,159,240, + 184,240,159,159,108,159,159,119,240,119,240,58,184,58,119,240, + 58,240,240,240,159,58,240,58,58,184,159,159,58,184,184,184, + 58,240,58,240,58,184,58,58,240,58,58,58,184,184,184,58, + 184,58,153,58,184,236,159,184,159,184,184,159,159,159,184,159, + 58,159,184,153,58,159,184,153,153,159,236,184,153,236,159,159, + 58,159,153,153,159,159,236,159,236,153,236,153,236,153,236,159, + 58,153,58,58,58,159,184,184,159,58,58,159,159,236,236,159, + 159,236,236,236,119,159,159,159,119,143,119,143,119,143,119,143, + 119,159,119,159,119,159,119,159,119,119,108,83,133,92,135,135, + 151,229,55,151,229,46,26,26,219,254,163,94,50,163,75,42, + 162,187,50,163,50,42,35,75,183,34,34,64,0,166,111,35, + 241,91,50,59,122,162,0,46,164,162,0,0,50,37,0,126, + 122,0,224,126,59,171,229,151,122,254,50,37,44,29,253,15, + 0,150,12,50,24,22,37,12,162,14,22,22,50,141,59,56, + 225,50,162,59,224,44,111,44,111,59,0,241,46,0,183,241, + 95,64,59,64,111,0,122,219,42,26,122,42,122,219,47,0, + 42,64,99,59,224,0,122,126,254,50,22,22,50,241,50,37, + 24,22,22,203,219,59,0,0,0,162,0,22,164,150,187,47, + 78,44,64,34,59,162,122,171,171,59,224,29,20,171,29,34, + 245,163,78,162,183,126,126,163,162,94,0,0,95,78,162,64, + 64,183,0,59,224,50,78,50,24,78,26,42,99,29,192,35, + 109,50,135,164,14,187,44,253,29,224,122,0,99,171,162,50, + 192,0,192,152,221,162,61,50,0,122,26,229,29,215,122,26, + 42,0,26,75,209,209,163,122,26,26,42,0,0,26,26,122, + 42,97,132,122,12,183,0,183,37,0,0,187,227,99,99,99, + 187,162,162,26,0,44,126,0,0,243,171,192,59,164,219,99, + 17,78,64,141,122,122,0,0,42,122,122,122,122,122,0,122, + 42,26,122,122,42,42,111,78,187,122,254,187,122,0,0,94, + 221,0,214,25,99,0,0,162,166,0,42,0,78,0,42,0, + 182,234,99,64,109,105,144,120,120,120,120,120,36,120,25,36, + 36,133,36,36,25,36,217,36,105,105,36,105,105,105,105,217, + 36,36,36,36,217,105,36,36,36,105,105,105,36,105,36,36, + 105,217,105,36,36,105,105,105,105,105,105,105,210,105,105,63, + 240,240,247,134,247,134,240,134,240,240,247,184,240,240,247,134, + 240,240,240,240,247,240,240,240,240,66,184,240,240,240,240,240, + 240,240,240,240,108,181,79,19,137,171,247,108,240,240,159,240, + 240,240,159,58,159,240,159,58,240,58,58,240,184,184,184,58, + 58,58,58,240,58,236,184,184,58,184,184,184,184,240,159,240, + 58,58,58,240,58,184,159,58,159,184,159,236,58,58,153,236, + 159,58,58,58,159,153,236,184,184,153,159,236,184,159,236,184, + 58,58,58,153,58,159,58,58,153,184,236,58,159,236,184,153, + 236,58,58,153,159,184,159,184,58,159,58,159,58,184,58,159, + 58,159,159,153,236,159,153,236,58,236,58,236,184,184,236,236, + 159,153,159,119,236,236,236,236,159,159,119,159,119,159,119,159, + 236,119,143,159,236,119,119,159,119,119,119,83,133,14,15,229, + 201,133,135,200,50,164,12,219,132,132,47,111,75,50,200,162, + 50,50,162,94,162,0,34,34,187,47,59,219,162,22,22,37, + 75,162,50,75,122,183,42,241,22,164,22,50,37,164,183,122, + 122,141,22,163,50,111,171,20,162,47,187,14,97,64,35,29, + 42,150,12,163,187,22,187,219,50,164,22,50,246,215,254,0, + 64,162,162,254,224,44,126,254,254,59,187,142,26,183,162,24, + 219,47,64,47,64,187,0,183,122,122,122,122,162,183,59,0, + 224,212,22,22,203,0,0,187,59,215,164,164,50,177,22,203, + 92,37,37,212,166,44,0,0,0,97,47,99,46,111,26,47, + 162,44,44,34,171,59,15,245,245,29,44,15,152,151,171,15, + 186,203,254,162,95,59,192,224,141,64,122,0,239,171,0,111, + 224,224,221,59,219,64,224,187,224,42,26,26,26,42,99,44, + 122,44,245,22,14,192,47,200,35,254,122,94,22,192,35,50, + 59,95,192,171,0,0,162,50,162,0,122,29,64,224,126,42, + 122,162,162,187,22,75,61,162,12,26,42,0,0,42,26,42, + 187,64,219,17,42,17,183,162,42,0,0,64,122,166,111,99, + 64,78,162,42,0,59,42,0,0,182,225,225,215,163,12,192, + 224,0,44,187,122,122,0,0,42,42,122,122,122,42,0,122, + 26,42,122,0,42,221,122,17,219,150,99,182,166,42,162,163, + 42,0,214,155,225,78,221,183,17,0,26,187,42,183,122,0, + 158,192,64,64,12,63,144,120,120,120,25,36,36,120,36,36, + 120,36,36,36,36,36,105,36,217,105,36,105,217,36,105,105, + 105,105,105,105,105,63,63,63,105,105,210,63,105,105,105,105, + 105,105,105,105,105,36,105,210,36,105,217,36,105,105,105,105, + 134,134,240,240,184,247,134,247,240,240,240,134,240,184,184,247, + 134,240,240,240,240,134,240,184,184,240,240,240,240,134,240,240, + 184,240,184,240,240,108,173,11,137,234,161,240,240,240,240,184, + 58,58,240,58,240,184,184,184,184,184,184,58,240,184,240,240, + 184,184,184,159,240,184,240,240,184,58,240,58,159,58,159,58, + 184,159,159,58,184,58,58,153,184,236,236,184,184,184,58,184, + 236,184,153,236,159,58,184,159,58,58,236,159,236,153,184,159, + 153,153,58,58,153,236,153,153,58,184,184,159,159,159,184,159, + 159,159,236,58,236,153,236,153,153,153,153,159,153,58,153,236, + 236,153,236,159,184,58,58,159,153,159,236,159,58,58,184,159, + 236,159,236,236,159,159,159,159,119,236,159,119,159,119,159,143, + 119,159,119,143,119,159,119,159,119,159,159,108,38,241,178,229, + 20,22,212,37,14,164,150,150,132,166,183,26,59,142,223,94, + 95,37,50,50,78,221,59,44,183,0,166,212,241,75,50,37, + 37,94,61,35,122,162,221,42,219,37,22,22,50,203,75,163, + 26,241,162,122,50,50,133,59,94,95,34,50,222,183,95,99, + 42,26,183,209,24,22,243,26,162,14,14,162,37,50,44,224, + 126,50,162,166,224,95,122,254,200,59,47,132,254,42,0,46, + 122,44,111,111,64,59,0,78,122,0,0,0,0,187,34,0, + 141,203,203,37,50,0,0,254,95,187,59,200,50,164,221,22, + 99,95,94,111,64,64,0,0,132,34,64,109,75,111,132,35, + 78,224,44,44,44,219,29,186,245,34,47,171,229,152,245,171, + 133,95,254,94,0,166,221,142,171,78,0,0,0,171,64,0, + 59,224,59,224,0,0,166,59,122,26,26,122,42,122,166,17, + 241,42,26,78,75,142,73,162,221,171,50,73,14,192,171,64, + 221,183,166,56,0,0,50,162,162,42,78,78,183,224,47,0, + 162,187,22,37,241,209,163,0,12,219,0,0,122,122,26,26, + 0,254,122,132,132,42,99,162,0,0,42,214,0,122,141,64, + 214,183,0,0,212,99,0,162,0,254,44,64,183,150,254,214, + 44,42,182,183,122,26,42,0,26,42,122,0,122,122,122,42, + 26,26,26,0,0,162,0,99,99,214,182,224,99,42,122,50, + 163,162,224,54,152,187,42,187,219,219,122,78,162,187,162,42, + 158,192,214,214,109,36,71,120,25,36,120,120,25,36,36,36, + 217,36,36,217,36,217,36,105,36,36,105,105,36,105,105,105, + 63,105,63,105,105,105,105,105,63,63,105,105,63,105,105,210, + 105,105,63,63,36,105,210,105,210,105,105,105,210,210,36,105, + 240,240,247,240,240,240,240,134,240,240,247,240,240,240,240,240, + 240,240,134,240,247,240,240,240,184,240,184,240,108,240,240,240, + 240,240,240,240,240,108,55,23,137,192,252,134,240,184,240,240, + 240,184,184,184,159,240,58,184,240,184,184,184,240,184,184,184, + 240,240,159,184,240,58,184,240,240,58,184,240,58,240,58,58, + 58,58,58,159,58,184,58,58,184,184,184,58,236,184,184,159, + 153,184,159,236,184,58,236,159,184,159,153,184,58,153,236,58, + 58,153,58,58,159,58,58,159,236,58,236,153,236,153,58,153, + 153,159,159,184,159,184,58,58,58,58,236,159,153,159,153,159, + 58,159,58,58,153,159,153,58,159,184,184,159,184,58,58,58, + 236,58,159,159,236,119,119,159,119,236,159,236,159,119,119,159, + 236,159,119,159,236,159,159,159,159,119,159,108,38,162,163,50, + 94,37,14,164,14,14,183,132,141,141,132,183,26,35,29,0, + 162,200,50,162,122,0,239,44,163,59,22,14,22,75,187,162, + 94,0,50,35,221,0,122,75,241,104,221,0,162,221,200,104, + 50,164,78,162,162,162,133,142,126,122,20,163,233,209,0,212, + 212,241,20,178,84,223,192,8,12,162,0,162,22,50,214,29, + 192,192,35,50,183,0,221,26,200,224,44,187,59,0,0,126, + 42,95,122,95,34,219,0,0,0,0,0,0,0,183,44,26, + 219,187,203,75,223,171,0,183,64,47,47,212,37,50,162,37, + 163,40,224,162,224,192,0,162,44,64,224,183,75,122,99,224, + 162,183,163,254,50,162,50,245,133,171,44,15,64,227,95,126, + 186,95,166,239,0,214,95,152,95,0,0,0,162,0,64,111, + 109,64,59,59,122,0,0,122,42,219,219,219,122,132,95,226, + 73,241,132,219,99,73,14,183,132,152,203,164,200,57,171,152, + 212,0,0,162,212,0,50,0,0,187,219,183,187,162,0,0, + 162,22,24,61,42,75,59,0,26,26,0,0,162,162,0,42, + 0,254,64,219,182,122,132,99,0,0,224,42,183,0,99,44, + 225,183,0,212,47,187,0,162,0,182,192,182,241,99,59,59, + 64,111,109,162,26,26,42,0,42,26,122,122,122,42,122,0, + 26,26,26,0,0,75,162,150,111,219,78,0,0,0,0,163, + 61,163,42,158,96,44,0,0,183,42,187,187,0,0,0,78, + 219,182,224,254,122,36,244,244,25,36,25,120,36,36,36,36, + 25,217,36,217,36,217,217,105,105,36,36,105,105,217,105,36, + 210,105,210,210,105,105,105,105,105,63,63,105,63,210,105,210, + 63,105,105,63,210,63,63,105,63,63,63,105,63,63,105,105, + 153,134,240,240,134,240,134,240,240,134,240,134,240,240,134,247, + 134,247,240,240,134,247,240,240,240,184,240,240,240,240,240,240, + 240,240,240,240,240,108,173,11,137,158,161,240,184,240,240,184, + 184,184,240,184,240,184,184,58,184,240,240,240,159,240,240,240, + 184,184,184,240,184,159,240,184,184,184,240,184,58,58,240,240, + 184,184,153,58,184,236,184,159,184,159,58,184,184,184,184,153, + 184,58,153,159,236,184,184,58,184,153,58,184,184,159,184,159, + 159,58,159,159,153,153,159,58,159,153,159,58,159,58,153,58, + 58,184,184,159,58,159,153,159,159,153,159,58,159,236,159,153, + 153,58,153,159,58,236,58,184,236,159,236,236,58,58,58,58, + 159,159,119,236,159,236,236,236,159,159,236,159,119,143,159,236, + 236,119,159,236,159,119,119,159,159,108,159,108,71,0,183,212, + 164,164,14,14,164,14,219,42,42,26,42,219,26,150,92,95, + 135,50,203,212,122,122,183,29,29,44,209,24,209,37,37,163, + 37,162,94,64,0,187,84,73,73,177,47,50,241,239,40,126, + 92,46,35,14,241,126,29,29,162,126,171,15,50,46,209,29, + 164,177,46,34,151,226,73,64,8,219,61,24,183,47,171,47, + 47,44,104,14,22,0,12,221,183,59,224,166,0,0,42,44, + 47,0,64,44,59,0,0,0,221,162,163,50,0,42,15,254, + 26,122,225,102,133,102,133,15,111,50,162,35,212,50,75,162, + 50,50,44,29,203,75,50,22,241,22,241,163,183,0,59,50, + 203,37,212,212,162,162,37,241,245,15,34,20,95,95,59,42, + 245,97,150,47,95,239,96,166,95,224,122,122,0,50,50,59, + 95,141,44,171,95,0,0,26,42,183,26,26,26,150,50,50, + 162,46,47,132,183,40,254,24,75,254,0,0,95,34,163,171, + 44,0,22,14,212,0,0,0,0,183,162,0,0,0,0,219, + 224,42,50,94,0,162,162,26,26,42,0,0,50,50,0,42, + 162,141,245,219,219,0,0,225,192,183,224,221,109,0,64,64, + 254,122,0,241,187,42,0,162,0,99,214,97,212,99,99,64, + 64,99,64,122,26,26,122,0,42,122,122,122,122,122,122,0, + 42,26,26,0,26,22,0,26,164,162,0,122,162,0,122,162, + 163,50,0,78,234,152,0,0,0,42,122,221,0,0,42,183, + 0,0,0,0,26,105,244,120,120,25,36,36,25,36,133,36, + 36,36,217,36,217,105,36,217,36,217,105,105,105,36,105,105, + 105,105,105,105,210,63,210,105,63,105,105,63,63,105,63,105, + 105,63,63,105,105,105,105,63,105,105,63,63,105,63,210,63, + 153,153,240,240,153,240,153,153,153,153,240,153,153,240,153,153, + 153,240,153,240,184,153,240,240,240,240,240,184,240,134,240,184, + 240,240,184,240,108,108,173,30,137,214,252,240,134,240,240,240, + 240,184,240,240,240,240,240,240,240,58,184,240,159,184,184,240, + 159,240,58,240,58,58,240,159,159,58,58,184,159,58,58,58, + 236,58,58,58,184,236,236,184,153,153,184,159,236,153,58,58, + 153,159,153,184,184,58,153,58,58,159,58,58,58,159,58,58, + 236,153,236,58,58,236,236,58,58,58,159,153,153,58,159,184, + 58,236,159,153,236,58,236,236,159,159,153,236,159,236,58,58, + 153,58,236,153,159,159,58,159,153,184,159,236,58,236,159,58, + 58,58,58,236,159,159,159,236,236,119,159,236,159,119,159,159, + 143,159,119,159,159,159,159,159,119,159,119,108,38,0,219,150, + 132,141,141,141,132,56,142,46,142,46,75,111,111,111,75,141, + 47,203,22,50,0,78,183,59,59,141,111,224,163,209,163,163, + 200,95,183,56,164,163,14,164,163,50,223,163,203,241,183,24, + 46,200,132,142,47,75,24,44,215,75,142,171,46,162,50,187, + 246,40,104,95,164,241,203,241,64,17,46,223,47,99,59,95, + 111,75,166,75,209,37,187,215,150,166,50,200,0,221,254,99, + 44,122,44,44,166,0,0,50,50,94,94,37,37,0,44,64, + 17,219,122,29,29,171,29,59,50,50,44,15,254,59,64,163, + 183,50,46,29,15,59,200,37,164,164,241,95,0,183,59,122, + 59,94,212,40,212,50,50,50,22,44,64,29,59,34,34,59, + 15,95,111,99,64,111,47,227,224,239,64,64,0,162,162,162, + 163,126,166,64,99,0,162,78,122,42,42,17,141,14,14,164, + 22,14,73,22,162,97,224,209,187,162,122,141,227,59,126,224, + 64,0,14,164,162,126,224,254,64,64,78,0,162,162,162,221, + 64,99,44,183,0,162,162,122,17,42,0,0,94,50,0,50, + 50,243,192,221,0,212,162,183,214,166,183,166,224,0,132,224, + 99,162,56,162,0,0,0,162,0,59,99,241,224,59,99,59, + 224,254,99,42,42,26,26,0,42,42,0,122,122,122,122,0, + 0,122,122,0,75,75,162,111,22,50,50,78,183,78,122,0, + 42,163,162,0,214,171,182,0,42,42,0,42,163,162,42,122, + 0,0,0,111,99,105,71,120,120,25,36,36,36,36,36,36, + 217,36,217,36,36,105,105,105,105,105,217,105,105,105,217,105, + 105,105,63,105,105,105,210,105,63,63,105,105,63,105,63,63, + 105,63,63,63,63,63,105,63,63,63,105,63,105,105,105,63, + 153,153,134,153,153,153,153,153,240,153,153,153,153,153,153,153, + 153,153,184,153,184,184,134,153,134,184,134,184,184,240,240,240, + 240,184,240,240,184,108,173,93,168,64,252,108,108,240,240,240, + 184,240,159,58,240,240,159,58,240,240,240,58,159,58,240,58, + 159,58,58,58,159,58,58,159,240,184,184,58,58,153,236,236, + 184,58,184,153,184,184,184,153,184,184,153,153,184,159,184,153, + 184,184,184,159,236,184,159,236,58,58,159,184,159,58,153,153, + 159,58,184,159,58,159,159,153,184,236,236,58,58,159,236,58, + 153,184,236,58,159,159,159,159,58,58,58,159,153,159,159,159, + 159,153,159,58,236,236,153,159,58,184,159,159,153,159,153,236, + 153,153,159,159,236,153,236,159,159,159,119,159,159,159,119,159, + 119,159,159,159,119,119,108,159,159,108,108,108,33,0,132,219, + 22,47,132,219,141,219,223,222,135,129,135,190,135,135,226,46, + 223,97,50,50,94,22,162,0,0,50,162,50,78,24,203,0, + 44,44,0,47,14,22,46,42,22,22,24,183,0,183,200,209, + 241,35,34,26,47,64,44,97,122,227,212,44,29,47,223,142, + 42,162,50,50,22,47,246,92,104,162,50,162,183,221,225,99, + 34,0,224,17,22,203,50,187,64,122,78,84,50,122,99,126, + 64,44,44,141,162,50,50,22,22,50,221,37,92,163,219,35, + 44,26,17,26,183,37,37,37,75,34,171,46,42,183,183,40, + 42,215,22,61,64,34,20,34,47,37,246,0,212,241,111,183, + 99,111,254,254,0,162,50,50,162,37,35,171,44,15,20,35, + 171,47,0,227,141,44,245,57,29,192,152,47,0,162,50,50, + 162,162,78,166,162,162,162,50,0,42,26,254,177,73,92,73, + 73,92,206,130,42,24,209,241,200,50,166,214,44,44,254,59, + 212,0,221,0,0,166,111,95,95,221,162,162,162,162,162,0, + 0,221,166,0,0,162,122,0,0,162,162,0,0,78,111,183, + 22,241,0,0,122,78,162,0,0,0,187,150,141,64,44,99, + 44,183,254,99,34,47,0,111,162,166,224,224,99,59,182,224, + 224,211,64,56,26,26,122,0,42,42,122,0,0,0,0,0, + 0,0,26,183,91,35,50,221,162,162,227,0,163,187,162,0, + 162,163,0,0,141,225,192,162,163,203,59,29,129,50,0,0, + 78,78,0,202,59,63,244,36,36,36,25,36,133,25,25,217, + 36,217,217,105,217,217,217,217,217,105,105,105,63,105,105,105, + 210,210,105,105,105,63,63,63,105,105,63,63,105,63,105,105, + 210,105,63,105,63,63,63,63,63,63,63,63,63,63,63,63, + 153,153,153,153,153,153,153,153,240,218,153,153,153,153,153,153, + 153,153,184,153,153,153,153,184,153,184,184,184,184,184,184,184, + 240,184,184,240,240,83,15,138,137,99,252,134,240,184,159,240, + 58,58,184,58,58,58,58,58,240,58,240,58,184,236,58,58, + 58,184,159,58,159,58,240,119,58,58,184,184,58,184,184,58, + 184,58,58,58,184,184,58,184,159,184,184,153,153,184,159,184, + 153,58,159,184,184,236,159,153,236,236,236,58,184,58,58,184, + 184,236,159,153,236,153,58,58,159,184,58,58,236,159,236,159, + 153,159,184,153,153,153,159,184,153,159,184,58,236,153,58,58, + 58,153,153,159,184,58,236,159,236,153,159,184,159,58,159,58, + 58,236,159,159,159,159,159,58,159,58,159,159,119,159,159,159, + 119,159,119,159,159,159,159,119,159,159,108,108,38,0,219,183, + 14,164,47,47,150,219,29,48,223,253,177,253,20,172,177,35, + 135,226,162,37,50,162,223,126,162,162,50,162,0,24,212,37, + 50,171,0,246,22,164,177,209,84,209,209,215,0,221,223,22, + 122,200,224,162,129,47,221,163,212,200,200,34,44,20,245,15, + 42,46,241,164,200,166,37,92,162,50,22,50,50,162,166,141, + 34,166,12,183,183,183,50,0,254,219,187,163,200,162,166,78, + 64,47,183,47,183,92,162,22,22,162,212,241,22,59,0,59, + 99,150,26,17,219,200,104,164,44,44,22,241,0,122,0,122, + 0,0,44,22,37,46,44,171,126,122,0,0,203,95,183,122, + 166,122,221,42,183,0,122,50,37,50,22,29,64,34,29,187, + 171,44,0,0,0,0,0,0,221,221,0,0,162,162,50,50, + 162,162,162,0,162,50,162,50,162,0,187,206,168,168,73,73, + 73,177,206,31,50,92,178,209,26,42,50,162,224,64,0,162, + 183,0,0,0,0,99,224,225,225,0,0,162,162,162,162,0, + 0,0,0,0,0,0,0,0,0,162,0,78,99,192,192,215, + 26,75,163,0,162,163,75,162,162,241,50,187,225,192,192,44, + 225,221,214,254,155,34,122,187,162,183,59,109,111,187,111,187, + 126,166,150,183,26,26,0,0,122,122,0,0,0,0,0,122, + 42,0,26,221,0,61,50,0,0,42,162,0,94,42,50,162, + 42,187,162,0,183,187,219,37,14,92,14,24,104,122,0,162, + 42,0,224,171,224,63,71,120,25,36,25,36,36,105,36,36, + 105,36,217,217,105,105,105,217,217,105,105,36,210,63,105,105, + 105,105,63,63,105,105,105,63,63,63,63,63,105,63,63,63, + 63,105,63,105,105,105,105,105,105,105,105,63,63,105,63,63, + 153,153,240,240,153,240,153,153,153,240,153,153,218,240,153,240, + 184,184,184,153,153,153,184,153,240,184,134,184,184,184,240,240, + 240,240,240,240,240,83,173,138,168,64,252,108,184,240,184,236, + 184,58,58,236,58,159,159,236,58,159,58,58,58,184,153,236, + 236,58,236,184,236,236,58,184,184,58,153,236,236,236,184,159, + 58,153,153,153,236,153,153,184,153,153,153,159,58,153,184,184, + 159,184,153,153,153,184,153,184,159,184,159,153,236,58,240,58, + 58,184,236,58,184,58,58,153,159,58,153,153,159,153,159,58, + 58,134,236,58,58,58,159,153,184,153,236,159,159,58,153,153, + 153,58,58,159,153,153,159,236,159,184,236,159,236,159,159,159, + 159,159,153,236,236,58,58,159,58,159,119,159,58,159,159,159, + 159,159,159,119,159,159,108,119,159,108,119,83,38,0,221,122, + 164,22,190,104,95,132,253,222,177,135,190,135,177,223,46,223, + 135,223,50,22,162,122,135,94,50,162,162,162,0,154,37,178, + 0,254,94,0,50,164,50,224,209,104,59,221,164,0,24,209, + 0,221,132,200,29,142,246,162,212,190,224,223,44,29,171,34, + 78,226,104,222,22,215,14,164,50,22,22,22,50,50,162,132, + 99,95,0,122,26,91,215,94,111,162,183,122,50,162,221,183, + 0,166,122,122,0,164,162,78,50,0,203,50,203,99,0,95, + 111,227,183,26,219,26,141,64,163,187,37,22,162,0,122,0, + 0,200,152,203,164,14,59,78,0,42,0,111,50,254,162,0, + 42,78,187,162,126,219,0,42,162,212,221,14,99,59,224,163, + 171,44,0,0,42,122,122,122,42,122,42,0,162,162,162,0, + 162,162,0,0,122,42,162,0,162,0,14,73,73,73,137,168, + 206,206,73,177,37,42,75,37,162,50,162,50,224,162,50,44, + 187,0,0,0,0,122,95,95,0,162,162,0,162,162,162,162, + 0,0,0,0,0,0,0,0,0,0,224,192,225,78,183,0, + 78,162,97,0,61,75,22,37,50,50,162,221,225,99,99,64, + 99,122,225,215,155,34,42,59,78,78,64,183,126,94,183,94, + 183,187,166,183,122,122,0,0,42,42,42,0,0,0,122,0, + 122,0,183,0,0,50,200,122,0,0,0,162,0,122,183,78, + 162,162,0,162,187,109,187,162,50,162,0,221,162,0,0,162, + 0,0,234,192,162,208,244,36,120,217,36,36,217,25,36,133, + 36,105,217,105,217,217,217,105,105,105,105,63,105,105,105,63, + 63,210,105,105,63,63,63,105,63,105,105,105,63,105,105,105, + 63,63,105,63,63,63,63,63,63,63,63,105,105,63,105,105, + 184,240,134,240,134,240,240,134,240,153,240,240,153,240,153,153, + 153,153,240,153,184,184,153,153,240,184,240,153,240,134,240,134, + 184,184,240,240,240,247,48,138,168,224,161,153,134,184,184,236, + 153,236,184,159,58,236,159,236,184,184,184,184,236,236,184,153, + 236,184,236,153,184,236,184,236,184,58,184,184,184,236,236,153, + 58,58,184,184,159,184,236,184,159,58,153,184,159,236,153,159, + 184,159,184,159,184,184,159,153,184,184,58,159,159,58,153,159, + 159,184,184,58,236,153,58,236,153,58,58,236,153,236,153,159, + 58,184,184,159,159,236,184,153,58,159,184,159,184,58,58,58, + 159,236,153,159,58,153,159,236,58,159,236,184,236,153,236,153, + 184,58,159,159,153,159,58,159,58,159,159,159,159,159,159,159, + 159,119,108,119,108,119,159,108,119,108,159,108,71,0,219,254, + 141,42,22,14,241,17,29,251,223,177,253,177,48,142,24,29, + 229,151,50,14,162,0,95,162,50,0,50,50,24,209,50,24, + 0,0,186,186,223,187,14,241,61,50,47,104,95,122,168,228, + 0,221,142,226,183,40,221,122,221,142,223,44,24,142,29,200, + 142,104,241,251,14,47,22,203,162,50,50,50,50,22,50,187, + 95,95,224,42,219,17,166,183,224,183,42,50,50,26,99,47, + 26,34,99,224,183,37,162,50,209,94,50,162,200,166,0,122, + 59,94,163,187,26,78,26,243,239,203,164,37,44,44,0,0, + 40,29,29,64,40,94,187,183,162,122,44,15,111,42,162,122, + 78,122,78,122,0,183,0,122,122,42,162,50,164,224,64,59, + 171,46,122,26,122,122,42,0,42,26,122,0,162,162,0,0, + 50,162,162,162,0,26,122,0,0,226,73,137,73,73,73,164, + 203,212,94,162,162,50,162,37,0,162,122,42,166,183,44,34, + 162,50,212,0,0,183,111,254,162,162,162,0,0,162,162,0, + 0,94,42,0,0,0,0,0,162,162,183,64,221,0,0,50, + 111,61,162,59,187,162,42,42,162,0,0,219,0,56,141,254, + 183,182,44,162,192,224,162,26,162,0,254,99,99,99,99,224, + 111,111,99,132,162,162,78,0,0,122,0,0,0,0,122,0, + 0,0,219,122,0,50,61,187,0,164,162,0,162,0,94,183, + 162,162,42,182,254,224,254,0,0,42,122,0,0,0,0,183, + 122,0,182,109,162,210,71,36,36,25,133,36,36,217,36,36, + 217,105,217,105,217,105,217,217,217,217,105,105,217,210,105,105, + 63,63,63,63,105,105,63,105,63,63,63,105,63,63,63,105, + 63,63,105,105,63,63,63,105,105,105,63,63,63,63,63,63, + 240,240,240,240,240,240,134,240,134,240,153,134,240,153,240,153, + 240,153,153,240,240,153,240,240,240,240,240,240,240,240,240,240, + 240,184,184,240,240,108,137,138,137,49,247,184,184,184,153,184, + 58,184,153,236,236,184,153,236,58,236,58,58,184,184,236,58, + 184,236,184,184,236,153,236,184,236,184,153,236,153,184,184,159, + 184,153,153,184,236,58,184,184,236,153,58,153,153,184,184,153, + 184,159,184,159,184,184,153,159,184,153,184,153,236,159,58,58, + 184,159,58,184,184,58,153,184,58,153,153,159,58,159,184,236, + 153,184,236,236,236,159,58,58,184,159,236,236,153,159,159,159, + 236,159,58,58,159,58,153,153,153,153,159,159,184,58,159,184, + 236,159,153,159,159,159,153,58,159,58,159,159,119,159,119,159, + 159,159,159,159,119,119,159,119,159,119,108,83,33,0,141,132, + 56,14,206,50,47,141,253,129,129,253,20,190,253,135,142,29, + 103,151,50,22,50,0,0,162,162,162,50,22,209,221,78,163, + 0,0,15,229,133,47,177,223,84,84,22,37,22,251,168,168, + 246,50,203,94,0,190,92,94,122,24,177,64,64,24,34,50, + 40,104,14,104,14,40,35,50,50,50,50,50,162,50,50,95, + 166,59,132,26,183,17,42,42,224,26,8,227,94,111,99,64, + 26,44,64,59,99,78,183,50,46,163,162,22,24,219,162,0, + 132,44,50,241,219,26,17,42,132,26,187,95,59,20,47,163, + 163,224,183,78,122,0,221,132,122,47,100,35,224,0,42,94, + 183,111,42,183,162,122,183,0,0,0,50,246,178,22,59,99, + 29,95,42,12,26,0,0,0,42,12,26,0,50,50,0,0, + 162,50,50,50,0,122,122,162,92,73,92,22,212,0,0,0, + 0,162,22,37,50,50,22,37,0,171,254,187,44,109,171,104, + 14,164,37,94,50,162,64,221,162,162,50,162,0,0,0,0, + 163,22,209,37,50,75,162,162,162,162,162,150,166,0,0,162, + 162,0,26,254,254,183,0,162,0,0,0,183,99,221,0,166, + 183,225,99,42,187,94,94,187,162,0,254,214,64,44,64,235, + 64,99,64,150,22,50,37,162,0,0,0,0,0,0,0,0, + 0,162,132,166,122,97,50,162,162,164,50,42,162,122,122,183, + 122,0,26,99,0,166,187,78,111,200,109,111,162,162,122,0, + 122,0,0,221,42,105,244,36,133,36,36,105,217,36,217,105, + 186,217,105,210,36,186,105,186,210,105,105,210,63,105,105,63, + 105,105,105,105,63,63,63,208,63,63,63,63,105,63,63,63, + 63,105,63,63,105,105,105,63,63,63,105,63,105,63,105,105, + 240,134,247,134,240,247,134,240,240,134,240,153,153,134,153,153, + 240,153,153,153,240,153,134,153,134,134,134,240,134,184,240,134, + 184,240,153,58,240,108,20,237,168,95,161,240,236,184,153,236, + 236,236,184,184,153,58,153,153,184,58,153,184,153,153,153,236, + 184,236,236,153,153,184,58,184,236,58,153,58,153,153,153,153, + 184,159,153,184,153,153,236,159,184,153,184,159,153,153,184,159, + 153,184,153,153,184,159,184,153,58,153,159,153,153,184,153,236, + 236,184,184,184,159,58,184,159,58,236,153,153,153,58,159,58, + 153,159,184,159,153,58,58,236,153,159,184,58,153,236,153,159, + 153,159,153,236,153,58,159,159,58,153,153,236,159,153,153,184, + 236,58,236,58,153,58,159,159,58,58,58,240,159,159,159,119, + 159,119,159,159,159,159,159,159,159,159,159,108,102,0,221,164, + 221,164,162,29,150,219,223,222,129,135,129,135,222,228,135,223, + 229,135,50,22,50,0,162,0,162,162,50,122,122,162,0,0, + 0,0,20,171,186,34,200,203,84,24,92,73,22,62,130,253, + 37,221,104,164,162,92,92,104,246,129,203,44,142,35,34,187, + 219,47,177,92,246,50,24,0,50,50,50,50,50,162,50,187, + 166,162,20,219,122,122,162,122,95,141,183,0,56,99,59,34, + 111,47,44,132,95,221,132,50,22,50,221,221,163,183,187,0, + 0,64,95,221,29,109,17,42,141,95,132,141,187,0,221,42, + 78,111,187,78,0,0,0,183,50,47,142,166,99,95,95,59, + 183,183,224,183,183,183,183,187,215,166,183,37,44,14,14,94, + 182,221,42,183,42,42,0,47,122,26,12,26,162,50,0,0, + 50,61,162,162,162,122,122,50,50,0,0,0,0,0,0,0, + 0,0,50,37,50,162,122,0,14,64,64,200,75,162,99,95, + 73,22,50,24,37,78,192,162,162,162,162,162,162,0,0,162, + 75,61,22,61,22,209,50,162,50,162,0,141,192,225,99,78, + 42,212,183,64,122,162,162,50,162,50,162,215,152,166,0,166, + 95,59,225,224,0,0,0,0,0,0,0,0,122,183,183,166, + 59,132,0,50,37,122,50,50,162,50,0,0,162,162,50,37, + 162,162,187,46,162,42,50,122,162,0,221,0,0,0,0,122, + 183,0,183,111,42,221,162,141,187,22,22,219,109,162,219,0, + 162,0,122,225,182,155,244,36,217,25,36,217,217,36,217,36, + 105,105,105,186,105,105,105,105,210,210,105,105,210,210,105,63, + 63,63,63,63,63,63,63,63,63,63,105,208,63,105,63,63, + 208,105,105,63,63,63,63,105,105,63,105,63,105,63,63,63, + 134,134,240,134,134,134,134,240,134,240,240,153,240,134,240,153, + 153,134,153,240,134,153,240,240,240,240,153,240,184,153,153,184, + 184,153,184,184,153,108,48,237,48,8,247,184,153,236,153,153, + 153,153,236,236,58,153,153,236,153,153,58,236,58,58,153,153, + 153,153,184,184,184,236,153,153,184,153,184,153,236,153,236,184, + 236,236,159,153,159,184,184,134,236,184,184,153,184,184,236,134, + 184,153,184,184,153,184,153,159,153,184,184,184,159,58,184,159, + 159,58,58,58,58,184,58,236,236,159,58,58,159,184,159,184, + 159,184,159,159,58,159,153,159,159,236,159,159,184,184,58,159, + 58,58,58,159,159,236,184,236,159,58,58,159,236,58,159,153, + 184,159,159,153,159,159,153,159,159,159,159,58,159,119,159,159, + 159,119,159,159,119,159,119,159,119,119,108,108,33,0,122,14, + 164,0,14,22,150,219,177,222,228,135,24,29,142,162,177,15, + 223,75,37,14,162,0,162,50,50,50,50,164,50,162,0,0, + 50,162,44,151,253,50,50,50,14,50,50,226,24,209,177,104, + 164,162,162,40,212,59,171,229,40,172,126,59,59,59,241,111, + 122,104,203,40,37,222,167,50,50,22,50,50,50,50,50,183, + 227,0,183,44,95,187,166,141,254,183,0,0,166,64,44,34, + 64,44,44,0,0,111,183,0,221,0,0,61,50,162,37,183, + 0,0,34,224,34,223,224,219,26,17,254,132,187,122,0,0, + 183,166,126,0,0,122,95,37,37,162,64,95,224,122,111,59, + 78,162,97,162,162,126,166,221,219,183,183,40,215,253,92,14, + 37,0,42,26,26,0,0,245,122,12,12,17,0,50,162,162, + 162,50,50,50,162,0,94,50,221,0,183,0,0,0,0,0, + 0,0,0,0,162,162,40,162,206,95,158,47,212,22,0,187, + 241,22,94,163,0,42,64,162,162,50,50,162,50,162,0,122, + 50,163,212,162,162,162,162,162,0,0,50,50,163,64,234,166, + 254,235,166,50,50,22,50,61,22,22,162,122,126,132,99,254, + 141,150,225,64,0,0,42,162,183,187,183,183,187,183,0,0, + 0,162,0,42,50,50,183,50,50,37,0,162,162,162,50,50, + 0,162,50,164,0,0,42,162,162,162,122,122,162,0,162,0, + 0,0,111,111,99,183,94,94,95,37,78,42,42,111,162,162, + 162,0,64,192,109,63,120,133,36,36,105,133,217,105,36,105, + 105,105,105,105,105,105,105,105,105,105,63,186,63,63,63,105, + 63,63,63,105,63,63,105,208,105,63,208,63,63,208,105,63, + 63,63,208,63,208,63,63,63,63,63,63,63,208,105,105,105, + 153,153,240,247,153,240,134,240,134,134,240,134,153,153,240,134, + 240,240,134,240,240,134,153,153,134,153,153,134,153,240,153,153, + 184,153,153,58,184,108,172,237,92,95,247,240,153,236,153,236, + 184,153,153,236,236,184,184,58,58,153,153,153,153,184,153,153, + 153,153,236,236,153,153,236,153,153,153,184,184,184,184,153,184, + 153,153,153,153,153,153,58,184,153,236,159,184,153,184,184,184, + 184,184,153,159,153,58,236,184,153,153,159,236,153,184,153,236, + 153,153,58,159,58,153,159,184,184,159,184,58,159,153,159,184, + 184,159,153,184,159,159,159,58,184,153,236,58,159,184,236,159, + 153,159,184,58,159,236,159,236,159,153,153,159,153,236,159,184, + 236,153,58,236,153,58,236,159,236,58,58,159,159,159,159,159, + 159,119,119,119,159,119,159,159,159,159,119,108,33,73,227,0, + 50,212,216,37,104,141,104,177,55,142,50,50,0,50,50,226, + 37,203,37,14,162,122,0,162,50,50,50,37,50,0,0,0, + 22,50,59,20,122,0,50,50,50,50,50,47,0,221,190,226, + 162,94,221,164,40,59,15,229,50,177,162,50,219,200,142,254, + 47,40,22,209,209,178,73,37,162,37,50,50,50,162,50,50, + 0,162,0,56,64,95,0,224,162,162,162,0,99,44,34,44, + 95,56,221,0,0,183,183,122,0,0,94,37,50,162,50,50, + 183,0,162,47,64,163,111,241,203,215,132,183,0,0,0,0, + 183,122,183,183,44,34,37,94,78,254,42,94,122,94,183,126, + 183,215,166,150,126,95,42,0,42,95,78,221,0,29,95,164, + 73,94,219,219,26,122,42,245,42,122,26,26,122,50,50,162, + 162,162,22,22,162,0,221,183,59,163,35,224,122,122,122,0, + 122,122,0,0,162,162,164,14,94,37,47,219,64,162,0,254, + 132,221,22,0,162,183,64,162,162,162,50,162,162,0,0,221, + 0,0,122,162,162,162,162,162,187,35,35,241,50,254,141,59, + 64,0,0,162,50,97,50,162,162,162,0,122,17,214,192,192, + 34,225,192,64,0,166,245,171,192,34,44,44,35,50,50,50, + 50,50,162,0,0,50,122,0,0,162,162,0,0,0,50,187, + 0,94,212,0,0,162,162,162,78,0,0,122,162,162,162,0, + 0,122,166,182,211,224,162,162,221,162,122,122,0,150,162,162, + 162,78,192,225,224,210,244,36,217,36,36,105,105,105,105,105, + 105,105,105,105,105,210,63,105,210,105,105,105,105,105,63,105, + 63,105,208,63,105,208,63,63,208,63,63,105,63,208,63,105, + 208,63,63,63,105,208,63,63,105,208,105,63,208,63,63,105, + 240,153,134,134,134,134,134,153,134,240,153,134,240,153,153,240, + 153,134,240,153,153,153,240,153,153,240,218,240,134,153,153,240, + 153,184,153,236,184,108,190,79,73,8,247,184,153,153,153,153, + 153,184,153,153,153,236,153,236,153,153,184,184,184,236,184,153, + 184,236,153,153,153,184,184,153,184,184,153,153,153,153,236,153, + 184,159,184,184,153,153,153,153,159,184,153,153,159,184,236,153, + 153,153,184,153,58,134,184,159,184,184,153,153,159,58,184,184, + 159,58,184,236,153,58,159,184,58,153,236,184,236,58,58,58, + 184,159,58,184,159,159,58,159,184,159,159,153,153,236,184,236, + 153,153,236,153,159,184,184,159,236,58,58,184,159,184,153,159, + 159,58,159,159,58,159,159,236,159,159,159,119,159,119,159,143, + 159,159,159,159,119,159,119,159,119,108,119,108,33,137,222,40, + 14,14,31,50,47,12,94,164,104,50,50,104,226,168,50,22, + 50,61,37,241,162,0,162,162,162,50,50,0,0,0,162,50, + 50,162,111,111,37,50,164,50,22,162,47,141,126,166,177,228, + 0,221,0,203,203,95,229,151,221,47,50,47,20,172,47,241, + 75,130,84,209,37,162,122,162,50,22,50,22,22,162,50,50, + 162,40,50,164,37,0,0,241,164,164,22,221,94,187,221,0, + 183,0,183,42,227,126,122,0,0,162,37,61,162,42,50,162, + 224,0,0,0,59,34,40,50,22,37,162,64,29,34,111,50, + 212,163,35,34,135,20,183,111,111,183,183,183,183,166,162,95, + 0,122,111,150,166,183,183,126,166,99,94,183,162,171,241,22, + 73,0,26,26,219,122,111,171,227,122,26,26,122,162,50,162, + 0,0,50,50,50,254,192,224,95,111,50,35,162,56,0,0, + 0,0,0,0,50,50,50,164,0,50,122,42,34,0,162,221, + 132,163,73,14,162,183,59,0,162,162,0,0,0,0,122,26, + 42,0,0,162,162,162,162,162,22,209,24,14,61,0,192,64, + 0,0,0,0,0,152,59,0,162,0,187,99,225,44,47,141, + 64,99,64,99,0,42,44,59,109,224,187,111,162,50,162,162, + 162,162,162,0,122,0,0,0,0,94,50,162,162,94,94,50, + 50,162,162,0,162,0,0,162,0,162,162,122,0,162,0,0, + 162,0,122,99,254,99,187,0,0,0,94,162,122,78,78,162, + 0,219,171,225,200,191,36,36,105,217,105,217,217,186,105,105, + 210,105,105,105,63,105,105,210,105,63,63,63,63,208,63,63, + 63,208,63,63,208,63,105,208,63,63,208,208,63,63,63,208, + 63,63,105,63,63,105,208,63,63,63,63,63,63,63,208,57, + 153,153,240,134,153,153,134,153,134,153,134,153,153,153,153,153, + 153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,240, + 218,184,153,153,153,247,223,167,92,166,247,240,184,58,153,236, + 153,153,153,153,153,153,153,153,184,153,153,153,184,153,58,153, + 184,153,153,184,153,153,184,153,153,184,184,58,159,184,184,153, + 153,236,153,58,184,184,153,153,153,184,184,159,153,184,184,159, + 184,153,184,153,184,153,153,184,159,184,184,153,153,153,159,153, + 184,184,159,58,58,58,184,184,58,159,153,159,184,159,159,184, + 58,159,184,159,184,159,240,240,159,184,58,58,159,159,184,159, + 58,184,58,159,184,184,159,184,159,153,153,58,159,240,159,184, + 159,58,159,159,236,159,159,159,236,236,159,159,159,159,159,159, + 159,159,159,159,159,159,159,119,119,159,119,108,33,137,228,55, + 22,37,0,142,235,246,14,233,50,50,177,172,253,212,135,22, + 209,37,37,22,78,0,162,162,162,50,50,162,162,162,50,50, + 50,162,239,46,209,178,50,22,22,50,34,92,215,162,14,241, + 122,0,73,104,164,212,151,229,0,142,50,190,111,50,14,14, + 37,177,47,132,162,183,150,42,50,22,50,22,50,162,162,50, + 50,50,22,50,162,0,0,94,22,37,163,111,44,20,111,0, + 0,0,0,0,0,94,0,162,50,50,50,162,162,162,163,162, + 75,224,0,0,0,166,99,59,94,212,50,29,171,171,200,212, + 37,37,75,224,224,59,44,47,122,94,227,163,183,162,0,187, + 0,221,0,183,187,183,215,78,183,183,162,162,50,95,241,92, + 22,162,26,42,42,0,104,75,0,0,219,26,42,162,50,162, + 50,0,0,162,50,0,183,50,0,126,200,22,56,245,99,0, + 0,50,0,162,14,94,150,122,162,150,243,141,162,162,254,254, + 221,141,164,92,50,122,254,12,26,122,0,0,26,12,8,8, + 8,42,0,0,0,0,0,0,0,122,22,241,22,0,254,0, + 0,0,0,0,162,152,50,0,0,219,44,44,192,64,44,192, + 29,64,99,42,0,0,0,0,162,0,0,0,0,0,0,0, + 0,162,162,0,0,0,0,0,162,37,162,0,122,183,162,50, + 212,0,0,0,0,162,162,162,0,0,0,0,162,0,0,0, + 162,0,122,67,109,59,99,183,0,0,0,162,163,162,0,0, + 0,26,192,225,59,96,120,36,105,133,105,105,105,105,63,36, + 63,105,63,105,105,105,105,63,105,63,63,63,63,63,105,105, + 63,105,208,63,63,208,63,105,208,63,208,63,208,63,63,208, + 105,208,208,208,63,63,105,208,208,208,63,96,171,145,99,235, + 134,153,134,240,240,134,240,153,153,153,153,153,153,153,153,153, + 153,153,153,134,153,153,153,153,153,153,153,153,153,153,153,153, + 184,153,153,153,184,108,190,167,226,243,247,184,153,153,184,153, + 153,184,153,184,153,236,184,184,153,153,153,184,153,58,153,58, + 153,153,153,153,184,184,153,236,58,153,236,153,153,153,153,153, + 153,153,159,153,153,153,184,184,159,153,184,153,159,153,153,153, + 153,159,153,184,184,184,184,153,153,184,159,184,153,184,153,159, + 184,153,153,184,159,58,58,58,184,159,58,184,159,236,159,236, + 153,184,184,184,159,159,58,58,159,58,159,58,236,236,153,236, + 159,236,159,236,236,153,236,159,236,58,58,159,159,236,159,184, + 184,153,159,159,240,184,159,159,159,159,159,159,119,159,159,159, + 159,159,159,159,119,159,159,159,159,119,108,108,33,130,29,79, + 48,122,122,50,94,164,50,233,162,50,226,212,50,0,20,164, + 151,50,37,22,94,221,162,50,50,50,22,0,162,50,50,50, + 162,162,50,84,209,37,50,50,50,162,246,113,37,123,84,233, + 246,221,251,104,50,163,33,151,162,97,0,123,0,212,123,142, + 47,142,26,26,26,42,26,0,50,22,50,50,162,50,0,212, + 162,162,37,37,212,0,0,162,50,22,97,50,64,47,59,0, + 37,209,209,212,75,50,162,50,50,50,78,162,0,162,50,50, + 162,34,122,0,0,0,0,95,64,224,95,47,200,200,50,162, + 94,221,95,64,64,64,183,78,42,122,0,95,59,224,183,126, + 0,122,0,183,50,42,122,95,183,122,42,0,0,166,94,22, + 92,0,219,42,219,162,212,162,162,122,42,26,122,0,162,0, + 162,162,0,162,162,162,162,0,122,162,78,166,47,225,44,209, + 0,92,212,22,92,0,243,141,219,141,187,183,0,243,47,111, + 0,254,215,94,183,122,187,150,42,122,26,26,12,12,150,12, + 26,26,122,26,26,26,0,26,12,26,26,26,122,34,34,245, + 166,0,0,0,56,245,215,0,215,235,64,254,47,225,192,192, + 99,141,56,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,183,187,0,0,0,0,0,162,221,162,0,0,0,50,94, + 0,0,0,0,162,162,0,162,162,162,0,0,162,0,0,162, + 162,0,0,183,225,99,243,14,164,164,162,183,239,50,0,162, + 0,0,162,0,0,63,120,105,105,105,36,63,105,105,105,63, + 105,63,105,105,63,63,63,105,63,105,105,63,105,208,208,208, + 105,63,208,105,208,63,208,208,63,208,63,208,208,105,208,63, + 63,105,105,105,208,105,208,234,64,64,214,67,214,139,158,139, + 153,153,134,153,134,153,134,153,153,153,153,153,153,218,153,218, + 218,153,153,153,240,153,153,153,240,153,153,153,153,153,153,153, + 153,184,153,184,184,247,142,79,92,215,247,240,153,153,153,236, + 236,153,218,153,153,153,236,236,236,236,153,184,236,184,153,153, + 153,153,153,236,153,236,153,153,236,184,153,153,153,184,184,184, + 184,153,184,184,159,153,184,134,184,153,184,153,184,184,159,184, + 153,184,159,153,159,134,184,184,134,184,184,159,153,159,153,153, + 184,159,236,153,184,159,153,58,236,184,159,153,184,153,159,184, + 159,184,159,184,159,159,159,58,159,236,159,184,159,58,159,153, + 159,236,184,159,184,184,153,159,159,159,159,58,159,184,184,159, + 184,159,159,159,159,159,159,184,159,159,58,159,159,159,159,159, + 159,159,159,159,159,159,159,159,159,159,159,108,33,22,223,201, + 201,200,166,254,94,50,94,226,164,46,129,162,129,226,50,94, + 222,50,22,22,122,162,162,22,50,50,50,162,162,50,50,50, + 50,94,122,223,209,50,50,22,50,162,162,50,162,167,73,35, + 0,162,0,162,0,94,88,38,162,200,42,92,37,78,42,215, + 219,42,215,40,221,40,94,0,0,0,162,162,162,162,42,20, + 34,40,37,50,0,0,0,0,50,22,50,0,162,0,0,162, + 200,209,209,209,22,0,162,162,162,0,0,221,187,0,162,50, + 50,46,187,0,0,0,0,0,0,78,111,47,64,47,59,59, + 254,111,99,95,221,183,0,183,122,122,219,40,47,59,111,99, + 0,0,0,42,183,162,162,183,78,221,56,99,50,95,241,14, + 92,0,17,17,122,162,50,162,50,162,0,26,26,0,0,162, + 50,162,162,162,0,162,162,162,122,0,0,225,225,187,163,44, + 254,75,162,162,187,0,12,141,183,183,162,0,122,243,183,50, + 94,44,64,183,224,221,187,122,122,12,12,17,17,26,12,17, + 26,0,26,219,26,26,122,26,26,42,17,26,42,248,192,245, + 245,64,0,0,183,245,183,141,192,192,34,214,44,44,141,215, + 219,0,0,0,162,0,0,162,162,162,162,0,0,0,0,0, + 187,64,126,0,122,0,0,0,78,42,94,0,0,162,50,162, + 0,122,0,122,0,162,0,162,162,162,0,0,50,162,0,0, + 162,0,0,0,214,64,212,22,22,22,50,97,215,122,78,162, + 0,0,0,0,0,208,120,105,105,105,36,105,63,105,105,105, + 105,105,63,105,105,105,63,105,63,63,105,208,105,105,63,208, + 208,105,208,63,208,63,63,208,63,208,63,63,208,63,105,105, + 208,63,208,152,225,214,64,235,64,235,235,67,234,67,192,64, + 153,153,153,153,153,153,134,153,153,153,218,218,134,218,134,218, + 153,153,218,153,153,153,153,153,153,153,153,153,153,153,153,153, + 153,153,184,236,153,108,226,167,73,187,247,240,236,218,153,153, + 153,236,153,143,153,143,153,153,153,184,236,153,153,153,153,184, + 184,236,153,153,153,153,184,153,184,153,153,153,184,153,236,153, + 153,153,159,184,153,184,153,184,153,159,184,159,153,153,153,153, + 159,153,153,184,153,184,153,153,184,159,184,153,184,153,184,159, + 153,184,159,58,153,236,58,184,159,184,58,58,184,58,159,58, + 236,58,153,184,153,159,58,159,236,159,58,58,236,153,236,58, + 153,159,184,153,153,184,58,184,236,159,236,153,159,236,58,184, + 184,184,159,159,240,159,240,240,159,159,240,159,159,159,159,159, + 159,159,159,159,159,108,159,159,108,159,119,108,197,50,253,103, + 55,228,162,92,92,164,14,75,40,201,209,47,201,223,22,212, + 190,162,22,37,122,0,50,22,50,50,50,0,162,162,0,162, + 50,50,122,223,209,162,50,162,50,95,50,221,221,42,22,24, + 221,0,221,212,162,212,38,55,183,190,0,92,212,17,246,212, + 56,40,163,203,212,92,226,50,94,122,26,42,42,26,12,135, + 229,133,241,24,223,142,223,223,223,223,142,162,0,162,162,221, + 162,162,0,183,15,15,20,172,47,46,47,47,47,0,162,162, + 162,183,95,0,0,0,0,0,0,0,0,0,0,0,183,15, + 29,20,95,37,141,224,0,183,0,183,183,42,224,224,215,95, + 0,122,0,126,183,0,0,183,126,166,141,29,94,35,137,206, + 92,122,26,26,0,162,162,162,50,50,122,26,26,122,0,162, + 162,162,162,162,162,162,0,0,0,0,212,166,47,209,50,42, + 224,50,59,183,94,162,219,166,162,162,162,26,56,122,0,162, + 94,26,224,59,59,0,56,12,219,17,132,17,26,17,219,122, + 122,0,17,26,122,219,0,0,122,26,26,42,162,155,47,171, + 29,245,29,122,219,186,0,95,152,99,254,254,183,221,0,150, + 64,59,0,162,162,111,0,0,78,162,162,162,162,0,0,126, + 64,99,40,0,122,42,162,122,162,50,162,0,162,42,94,162, + 122,64,183,0,162,162,0,162,162,162,0,0,50,162,0,0, + 0,162,0,0,219,50,162,212,42,215,221,40,42,94,50,162, + 0,219,64,111,0,63,105,36,105,105,63,105,105,105,105,63, + 105,63,105,105,63,105,105,63,208,63,208,63,63,208,105,105, + 63,63,208,105,208,208,105,105,105,105,105,105,105,105,208,57, + 234,158,99,235,99,145,99,235,235,158,214,44,158,158,158,214, + 153,134,134,153,153,218,134,153,218,218,153,218,218,218,218,134, + 218,153,153,218,153,153,153,153,153,153,153,153,153,153,153,153, + 153,153,153,184,240,247,47,167,92,215,247,240,153,236,153,218, + 218,153,153,153,153,153,184,153,153,184,153,153,153,153,153,153, + 184,153,184,159,184,153,184,153,153,184,236,153,184,184,159,184, + 159,153,153,184,153,159,184,184,153,153,159,184,159,184,159,153, + 184,184,153,159,184,184,159,184,159,153,184,159,159,159,153,58, + 153,159,153,159,184,159,153,159,58,153,58,58,159,236,184,184, + 159,159,159,184,153,184,159,184,58,153,153,159,58,159,153,58, + 236,236,159,58,153,184,236,159,153,159,184,159,159,153,236,159, + 184,184,240,159,240,159,159,240,159,159,159,108,159,159,159,159, + 159,159,159,108,119,159,108,159,159,108,159,108,38,22,129,79, + 228,201,226,22,14,164,14,50,0,200,104,172,203,0,164,84, + 223,22,164,22,94,162,10,50,50,37,50,162,162,162,94,122, + 162,162,50,24,24,50,50,50,50,46,84,84,46,215,226,62, + 42,123,163,164,137,40,151,229,212,177,183,226,50,17,132,40, + 221,203,24,46,46,209,200,223,75,122,122,42,219,26,150,29, + 135,29,64,29,171,229,245,186,186,229,171,221,0,162,162,162, + 162,162,162,95,38,244,102,102,245,151,133,229,42,0,162,162, + 162,50,254,0,162,162,42,26,42,42,42,42,42,122,42,133, + 20,20,35,50,183,126,126,166,42,221,227,95,187,95,183,47, + 0,183,183,111,126,166,126,95,224,59,111,227,0,24,168,73, + 73,0,17,42,0,64,59,59,59,163,94,26,219,122,0,0, + 162,50,162,0,162,162,162,0,111,212,92,187,162,75,183,59, + 47,111,224,183,17,162,162,0,219,243,141,67,141,150,141,221, + 221,0,59,47,224,221,122,26,219,26,219,219,219,42,122,122, + 0,0,17,26,42,42,0,122,26,12,219,0,162,192,187,224, + 224,224,64,187,183,171,122,122,95,64,44,254,254,99,47,192, + 254,152,162,162,122,171,225,224,162,122,122,78,122,0,254,99, + 224,111,162,0,122,78,78,162,162,50,50,0,162,162,0,162, + 0,111,254,187,162,162,0,162,162,0,0,0,162,0,26,224, + 109,99,122,0,0,0,187,254,12,243,17,42,0,94,183,0, + 122,234,192,158,95,63,36,105,105,105,63,105,105,63,105,63, + 105,63,63,105,63,105,105,105,105,63,105,208,105,63,208,208, + 208,63,208,63,105,208,208,208,57,191,208,57,192,225,99,64, + 64,214,99,214,235,158,214,158,158,158,158,158,158,158,158,214, + 153,218,134,153,134,218,153,134,218,134,218,218,153,218,218,218, + 218,218,218,153,218,153,218,153,218,218,153,218,153,218,218,153, + 153,153,153,218,153,108,104,123,226,17,247,184,153,153,153,184, + 184,153,153,153,153,153,153,184,184,153,184,153,153,153,153,184, + 153,184,153,153,159,184,153,153,184,153,184,153,153,159,153,153, + 153,159,159,153,184,159,153,184,184,184,134,184,159,184,153,159, + 184,153,184,134,159,184,153,184,134,159,184,153,184,153,159,184, + 159,184,159,153,184,159,58,236,159,58,159,184,159,184,159,184, + 153,236,153,184,159,159,236,159,153,58,58,58,184,153,58,153, + 159,159,236,159,184,236,159,153,58,153,184,236,159,159,184,159, + 159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159, + 159,108,159,159,159,159,119,159,159,159,108,83,38,14,228,18, + 55,18,201,0,40,50,22,22,40,103,103,242,164,162,14,249, + 37,164,22,164,0,50,22,22,22,22,22,162,50,50,50,50, + 162,162,14,37,229,50,50,37,162,92,130,14,22,226,104,233, + 237,30,129,221,137,177,209,75,173,129,0,56,246,17,219,104, + 162,126,241,75,126,22,75,24,75,26,26,26,219,42,150,34, + 135,162,0,227,34,183,0,0,0,34,142,162,0,0,0,0, + 122,0,0,122,95,162,0,0,0,0,0,0,162,50,162,50, + 50,212,47,162,50,162,42,12,150,219,42,132,150,17,42,34, + 20,34,34,37,203,183,215,166,59,109,126,95,95,254,183,47, + 59,162,95,183,59,227,34,254,142,95,166,50,221,73,14,14, + 14,0,219,42,0,59,59,44,192,171,171,122,8,26,0,162, + 162,0,162,0,162,162,162,163,225,209,14,63,171,95,94,166, + 141,254,0,42,141,0,50,0,17,150,132,183,219,132,150,50, + 22,215,0,94,126,0,162,162,162,0,0,0,0,162,162,78, + 42,122,12,12,219,26,0,42,12,12,42,0,0,64,111,166, + 111,224,64,192,171,171,0,122,0,56,99,192,29,192,192,171, + 192,59,0,162,0,192,171,192,34,187,0,0,162,162,94,183, + 50,162,162,78,0,0,162,0,162,37,50,0,0,0,162,50, + 0,183,111,171,224,183,111,187,78,162,0,182,224,150,166,95, + 221,0,0,162,40,0,99,122,0,162,187,254,219,0,162,0, + 183,17,183,224,111,208,25,105,105,105,105,105,63,105,105,105, + 63,208,105,63,208,63,208,208,63,208,63,105,208,208,63,63, + 105,105,63,105,208,105,63,234,64,214,64,49,64,67,145,214, + 235,158,158,158,158,192,158,158,158,158,214,158,214,158,214,158, + 218,134,153,153,218,218,218,218,153,218,218,218,218,134,218,218, + 134,218,218,218,218,218,153,153,153,218,153,153,153,153,153,218, + 218,218,153,153,153,247,46,251,92,94,247,240,153,218,153,153, + 153,153,153,184,184,184,184,153,153,153,184,153,153,236,153,184, + 153,159,153,153,184,153,159,153,184,153,153,58,134,58,159,184, + 153,184,184,184,153,159,134,184,159,58,153,134,153,184,159,153, + 159,184,58,153,184,159,153,58,153,184,159,184,184,159,184,58, + 159,184,58,159,58,240,159,159,184,159,184,153,159,184,159,58, + 159,159,58,159,58,184,159,159,184,159,159,236,58,159,236,134, + 184,184,236,159,184,58,58,159,58,236,159,153,58,184,153,159, + 184,184,159,159,159,240,159,159,159,159,159,159,108,159,159,159, + 159,159,159,159,159,159,159,159,159,159,159,108,38,162,222,228, + 197,18,72,164,26,50,22,162,73,249,249,138,50,104,212,212, + 22,14,37,162,0,162,50,22,50,22,50,0,50,162,162,162, + 162,50,22,50,154,241,50,22,50,162,164,35,84,206,14,48, + 92,190,94,104,0,50,0,104,73,95,164,0,221,26,26,40, + 75,50,75,46,200,46,46,241,212,219,219,219,26,122,99,29, + 229,122,0,133,133,133,229,187,0,133,133,94,0,0,0,0, + 0,0,0,78,34,239,0,0,162,162,162,162,50,61,50,50, + 50,50,224,0,162,162,162,0,26,219,42,26,26,26,26,12, + 29,34,29,97,22,183,126,183,227,95,59,219,126,59,166,56, + 225,59,64,47,171,47,95,215,56,219,187,22,104,222,233,73, + 50,0,219,26,221,141,141,42,26,141,183,0,26,26,122,182, + 44,64,206,14,0,0,219,152,64,50,64,44,64,221,162,162, + 95,34,47,59,44,126,162,99,94,132,95,141,221,221,42,94, + 14,0,221,0,94,0,162,162,162,162,0,162,162,162,162,0, + 0,0,122,26,12,17,0,122,17,219,0,0,0,152,171,192, + 20,225,34,34,192,171,0,26,219,221,0,182,34,225,47,254, + 221,0,0,0,162,34,34,64,64,59,64,42,162,162,50,162, + 50,50,26,42,0,162,0,162,50,221,0,0,0,162,162,50, + 0,234,34,99,254,95,158,44,75,26,162,183,224,182,0,0, + 0,0,42,47,35,42,235,221,122,17,162,219,64,0,162,0, + 0,162,0,0,78,105,120,105,105,105,105,105,105,63,63,105, + 105,63,105,105,105,105,105,105,105,105,208,63,105,63,105,105, + 105,105,208,57,192,214,64,64,99,235,214,235,158,214,158,192, + 192,158,158,158,214,158,214,214,214,214,158,158,158,158,214,214, + 218,218,134,218,134,218,134,218,218,218,134,218,218,218,153,218, + 218,218,134,218,218,218,218,218,153,218,218,218,218,218,153,153, + 153,153,153,153,153,247,104,31,92,166,247,184,218,153,218,153, + 236,153,153,153,153,153,153,184,184,153,153,153,153,153,153,153, + 159,153,184,159,153,184,153,159,153,159,184,153,153,159,153,159, + 159,153,159,153,159,184,184,153,153,153,159,236,58,153,236,159, + 153,159,153,58,153,153,184,159,159,153,159,153,159,159,240,159, + 184,159,159,153,153,58,184,159,184,184,159,240,159,159,58,240, + 184,159,159,58,159,184,184,184,184,153,159,159,159,159,184,58, + 159,159,184,159,184,159,159,58,159,159,153,159,159,153,159,159, + 159,184,184,159,134,159,159,159,159,159,159,159,159,159,159,159, + 119,159,159,159,159,119,159,159,159,119,108,83,38,162,73,168, + 129,55,33,55,42,246,50,0,233,233,31,216,73,50,162,221, + 92,14,162,162,0,162,94,29,0,0,40,122,50,94,215,40, + 162,0,50,162,253,24,61,37,22,163,46,223,253,209,73,177, + 246,104,251,73,73,104,50,135,222,95,24,226,122,219,0,34, + 184,35,22,163,46,163,163,75,239,42,26,26,17,42,64,64, + 229,0,29,88,133,133,74,143,0,151,229,94,0,0,0,0, + 0,0,0,42,44,0,162,0,50,50,50,162,162,94,162,162, + 162,40,95,0,0,0,162,122,183,219,42,17,26,26,239,206, + 64,44,223,44,37,0,56,183,0,221,219,227,166,95,166,215, + 64,47,183,224,95,219,95,166,183,183,212,212,73,73,206,46, + 42,122,12,26,219,141,219,254,34,15,94,162,42,122,26,59, + 44,67,203,92,0,0,0,122,75,162,163,215,215,59,59,162, + 221,224,59,47,44,212,0,225,241,254,29,171,254,186,0,0, + 215,95,111,183,166,126,111,166,47,59,59,47,59,95,59,59, + 47,59,56,219,12,219,0,26,12,26,0,0,0,171,29,192, + 29,29,34,29,29,171,0,0,122,0,0,183,141,221,0,0, + 219,42,122,0,0,64,64,99,224,59,99,50,162,162,162,50, + 42,219,183,183,122,0,0,94,37,50,50,0,0,0,162,0, + 0,192,192,192,192,0,22,50,50,0,162,162,0,0,0,0, + 42,0,187,183,224,221,132,211,254,122,0,42,219,122,94,162, + 162,0,99,64,94,208,36,186,105,105,186,105,63,105,105,63, + 63,208,208,63,63,63,63,63,208,63,105,36,63,105,208,57, + 234,158,64,214,99,235,235,235,214,158,214,158,158,158,158,158, + 145,158,214,158,158,214,158,158,158,214,158,214,64,214,214,158, + 218,218,134,218,218,218,218,218,218,218,218,218,218,218,218,218, + 218,218,218,218,218,218,134,218,218,218,153,153,153,218,153,153, + 153,218,153,153,153,247,47,137,92,183,247,240,134,153,218,153, + 153,153,159,159,184,159,153,153,184,153,153,184,184,153,153,236, + 159,153,153,159,153,153,134,58,153,153,159,184,153,153,153,153, + 58,153,159,153,153,153,159,159,153,153,159,143,159,153,153,159, + 153,159,153,159,159,236,153,153,153,236,153,153,153,153,159,159, + 153,159,184,159,153,153,153,184,159,159,184,159,184,240,159,159, + 159,184,184,159,184,58,58,159,240,159,184,159,58,184,159,58, + 159,240,58,159,184,159,153,159,159,240,58,159,159,184,159,184, + 184,159,134,184,153,134,184,159,159,159,159,159,159,159,119,159, + 159,159,159,159,159,159,119,159,119,159,159,83,38,251,33,228, + 222,31,228,197,203,50,50,0,249,73,233,62,62,0,56,50, + 122,95,0,0,122,221,162,223,162,0,0,20,143,33,143,33, + 35,0,162,0,47,34,163,40,132,59,104,0,164,95,24,92, + 22,14,84,104,92,221,173,46,166,129,48,55,221,17,42,229, + 218,241,46,241,241,212,50,46,95,26,183,42,26,26,64,47, + 133,50,20,135,151,133,38,74,0,171,20,183,0,0,0,0, + 200,29,190,95,224,0,50,0,0,162,50,162,162,162,224,29, + 44,47,29,20,229,15,20,20,229,171,239,26,17,92,73,233, + 92,182,44,34,46,212,0,0,0,122,0,0,78,0,166,0, + 42,122,215,0,0,183,0,122,122,0,37,0,206,14,26,243, + 219,42,26,0,219,64,192,15,29,158,126,50,42,122,12,187, + 64,241,84,183,183,0,0,221,164,50,46,152,15,225,44,59, + 162,162,42,111,224,122,0,64,34,0,150,64,64,34,187,183, + 254,171,44,35,44,34,64,44,15,171,171,171,29,29,171,171, + 245,245,95,0,26,26,122,150,17,122,0,0,0,171,171,34, + 34,225,44,44,192,171,0,0,0,0,0,0,0,0,0,42, + 219,42,122,0,0,78,122,221,0,162,122,0,166,214,95,122, + 42,183,183,126,12,183,162,0,162,162,0,0,0,0,0,0, + 122,183,95,44,214,0,22,22,50,0,162,162,0,0,0,254, + 224,0,0,0,0,162,183,17,183,0,162,78,0,42,94,0, + 0,150,192,171,64,63,36,105,105,105,105,105,105,63,105,105, + 105,105,63,105,105,105,105,36,36,63,208,191,192,214,99,99, + 225,192,234,234,214,158,214,214,214,214,214,158,214,214,145,214, + 214,214,158,99,158,214,158,214,214,64,214,214,158,101,158,158, + 218,218,218,134,88,134,88,218,218,218,88,88,218,218,218,218, + 218,218,218,218,218,218,218,218,218,218,218,218,218,153,218,218, + 218,153,218,218,218,240,241,251,92,42,247,184,153,153,153,153, + 153,153,153,153,153,153,184,184,153,184,184,159,153,58,153,153, + 153,159,153,153,184,184,153,153,159,159,153,236,236,153,236,153, + 153,153,153,159,153,58,153,153,153,236,153,153,143,153,153,143, + 153,153,159,153,236,153,236,153,236,153,153,153,153,184,134,153, + 58,153,159,153,159,159,58,184,153,184,159,159,240,159,159,240, + 159,159,153,236,159,184,159,159,184,159,184,184,159,240,159,153, + 159,58,184,184,153,159,240,159,159,159,240,159,240,159,153,159, + 184,184,184,159,159,184,153,134,159,159,159,159,159,159,159,159, + 159,159,159,159,159,159,159,159,159,119,119,83,38,222,55,228, + 103,55,228,33,223,50,50,37,175,73,14,206,233,94,212,187, + 162,50,162,0,14,37,0,142,22,50,0,151,33,38,55,151, + 133,46,0,162,163,29,44,29,223,142,142,34,44,47,47,178, + 22,164,142,0,215,46,79,177,141,222,190,47,40,42,42,34, + 229,241,223,46,24,35,92,44,26,12,190,42,12,26,15,50, + 151,221,0,0,0,0,0,221,0,29,34,162,0,212,95,95, + 40,95,75,94,126,0,162,162,50,162,162,162,37,50,215,151, + 229,135,229,15,229,20,20,29,20,151,15,40,177,249,206,73, + 206,35,47,44,34,50,162,0,0,122,227,122,0,166,0,183, + 219,0,132,122,166,126,0,122,122,94,50,168,104,150,219,150, + 0,219,26,0,133,133,20,44,35,44,95,162,50,26,219,0, + 141,37,226,42,34,0,0,241,164,50,171,44,224,50,221,219, + 241,50,162,0,183,162,162,166,34,0,0,0,162,162,50,162, + 47,192,44,44,64,64,59,99,29,44,44,34,44,34,44,34, + 171,15,212,0,150,12,122,122,0,0,0,0,122,171,29,192, + 29,34,225,29,29,245,0,0,0,0,0,0,122,0,0,0, + 122,183,122,0,0,162,162,162,162,162,0,183,99,171,225,95, + 183,94,183,183,166,111,78,162,162,0,0,0,0,162,0,219, + 219,219,162,122,111,78,22,61,0,162,162,162,0,0,166,214, + 224,0,0,187,150,132,214,183,122,221,78,111,219,122,221,0, + 182,64,34,192,40,63,36,105,105,105,63,105,105,105,63,105, + 208,105,105,105,105,63,191,202,234,225,64,139,64,139,234,158, + 57,152,158,214,214,214,214,214,64,214,235,214,214,235,158,49, + 158,214,158,214,158,214,214,214,158,101,158,214,234,64,158,214, + 218,218,218,218,218,88,134,218,88,134,218,88,218,88,218,88, + 218,218,218,88,134,88,218,218,218,88,218,134,218,153,218,218, + 153,218,153,218,134,247,59,137,92,94,247,240,218,153,143,236, + 153,153,184,159,159,184,134,184,153,153,153,153,153,159,153,153, + 236,153,159,153,153,159,153,134,236,153,153,153,153,153,236,143, + 153,153,153,159,153,236,153,236,143,143,236,236,143,143,153,236, + 236,153,153,153,153,143,236,134,143,236,236,236,236,236,236,153, + 159,236,153,236,153,153,236,159,153,159,159,159,159,240,159,159, + 153,159,159,153,153,153,153,159,184,240,240,159,240,58,159,159, + 153,58,153,159,159,153,184,159,240,159,159,240,159,240,159,159, + 184,159,159,153,159,159,159,153,159,58,236,159,159,159,134,159, + 159,159,119,159,159,159,159,159,159,159,159,108,55,251,55,79, + 55,79,55,33,177,162,22,22,249,73,10,73,14,200,14,221, + 0,183,163,50,14,50,0,183,209,50,0,133,197,133,55,135, + 129,103,163,50,241,223,200,44,46,142,223,229,229,151,229,15, + 171,47,0,190,0,221,162,241,221,246,215,104,94,50,50,163, + 183,164,209,75,50,46,24,142,12,26,47,122,12,26,245,162, + 135,20,15,229,151,151,15,133,133,229,186,212,183,15,29,166, + 0,0,0,219,227,42,0,0,162,0,0,0,50,50,0,59, + 15,20,20,223,20,34,223,178,29,104,0,0,162,92,168,73, + 73,206,46,64,29,29,50,0,0,0,122,187,0,221,221,219, + 132,183,162,0,99,0,42,183,37,212,226,226,141,219,219,132, + 221,0,122,47,38,20,34,47,47,35,47,122,50,42,42,0, + 59,59,99,132,0,162,0,75,95,192,40,163,163,178,50,47, + 133,75,162,162,0,162,50,0,221,187,64,95,162,0,37,224, + 34,20,44,34,47,224,224,35,44,44,44,44,44,44,44,44, + 34,171,183,42,8,17,122,0,183,162,0,0,122,225,29,171, + 171,171,192,29,171,15,122,0,0,224,254,0,0,122,122,0, + 0,122,122,0,221,122,0,0,0,224,64,44,59,75,224,59, + 99,166,0,122,219,166,162,212,162,0,122,0,162,162,0,183, + 183,132,132,215,17,221,209,50,219,162,162,0,122,224,64,99, + 59,0,0,99,234,219,59,187,0,0,99,224,150,122,162,162, + 171,64,64,214,59,208,36,105,105,105,63,105,105,105,105,36, + 105,105,191,152,192,44,35,99,139,67,158,235,158,67,171,214, + 235,67,214,214,64,214,235,158,214,214,214,158,214,64,234,35, + 158,214,158,49,178,49,158,64,234,35,158,214,158,158,158,158, + 218,218,88,134,218,88,218,88,218,88,218,218,88,218,218,218, + 88,218,218,218,218,218,218,134,88,134,88,218,218,218,218,218, + 153,218,218,218,218,247,200,137,92,26,247,184,153,218,153,153, + 153,153,153,134,153,153,184,184,184,184,159,159,153,236,153,236, + 153,153,153,153,153,153,184,153,153,236,134,153,143,153,153,153, + 236,153,153,153,153,134,236,153,153,153,143,143,236,143,143,153, + 153,236,236,153,143,236,143,143,236,143,153,143,143,153,153,236, + 236,134,236,134,236,236,153,236,236,153,134,159,159,159,153,159, + 159,159,159,159,58,159,159,134,159,159,159,159,159,159,159,159, + 159,153,58,58,153,240,134,159,159,240,159,159,159,159,153,159, + 184,159,153,159,153,159,153,159,236,134,159,159,159,143,119,159, + 159,159,159,159,143,159,143,119,159,119,159,108,173,55,129,251, + 55,55,79,197,48,50,14,0,206,10,164,24,164,223,203,221, + 40,162,162,0,22,37,0,0,226,50,142,15,38,33,38,229, + 135,135,20,50,50,46,200,46,59,253,48,229,229,229,229,229, + 151,229,0,50,0,0,221,221,0,162,221,212,162,94,37,0, + 0,0,0,162,0,0,0,150,12,12,162,78,26,42,171,0, + 20,135,186,186,151,133,151,38,38,55,102,227,0,0,0,0, + 0,0,0,78,162,183,162,111,47,47,44,47,78,0,0,221, + 20,253,29,24,223,223,223,47,94,0,0,0,0,162,164,73, + 73,137,130,241,64,171,20,212,0,0,0,221,141,219,183,183, + 224,95,150,40,0,0,162,164,164,94,166,26,150,64,47,245, + 97,42,0,34,245,29,29,44,64,34,29,0,162,0,0,0, + 200,47,47,224,166,34,239,163,47,245,22,22,183,84,241,95, + 245,152,163,50,50,22,37,162,64,59,152,152,163,163,162,166, + 99,171,44,34,111,95,224,59,64,59,200,47,35,47,47,35, + 64,20,221,0,162,162,0,122,50,94,0,0,0,171,111,183, + 95,254,59,99,35,64,0,0,0,155,186,171,78,0,0,0, + 0,162,50,163,163,162,0,0,0,64,47,64,99,59,64,64, + 64,64,111,122,183,166,0,50,162,0,219,0,50,0,0,150, + 17,166,187,12,132,162,22,0,109,162,0,42,99,99,224,59, + 64,150,0,0,99,44,95,0,0,0,219,17,0,42,94,183, + 158,214,47,44,94,36,36,105,105,105,36,208,192,192,57,152, + 192,225,44,235,49,235,101,192,139,214,158,44,158,214,49,49, + 214,49,158,158,214,214,214,214,214,214,214,214,214,158,158,214, + 214,214,158,235,234,214,158,214,234,214,158,214,214,235,99,214, + 88,88,134,88,88,218,88,218,88,218,88,88,218,88,88,218, + 88,88,218,88,218,88,218,218,218,218,218,88,218,218,218,218, + 218,134,218,218,153,247,75,190,92,162,247,240,153,153,143,218, + 153,143,153,153,184,153,236,153,153,134,236,153,153,143,153,153, + 143,236,153,159,236,153,58,153,159,236,236,236,143,143,153,153, + 143,236,236,236,159,153,153,143,236,153,143,143,236,236,236,143, + 143,153,143,236,143,153,143,143,143,143,153,236,236,236,134,236, + 134,236,236,153,143,153,143,153,236,236,153,153,153,58,153,153, + 153,153,159,153,159,236,184,134,184,159,159,159,159,159,153,153, + 159,159,159,159,159,159,184,159,159,159,159,159,159,159,153,134, + 58,58,153,58,153,159,159,159,159,236,236,159,119,134,143,159, + 236,159,159,159,143,159,134,119,159,159,119,83,229,226,223,129, + 79,55,173,197,190,37,22,0,50,200,226,209,14,94,46,215, + 162,0,104,48,50,22,162,0,104,0,151,37,0,75,177,135, + 172,226,223,59,0,59,59,142,200,29,20,229,229,229,135,151, + 151,151,34,0,212,164,50,137,162,162,168,167,0,221,50,50, + 0,221,94,94,0,0,0,254,17,17,37,94,12,17,171,0, + 142,226,15,229,15,229,15,151,15,15,38,212,0,122,122,122, + 122,42,56,42,50,0,254,59,59,224,59,47,44,200,0,0, + 94,223,223,200,44,200,42,0,0,0,0,0,0,0,0,0, + 50,92,73,206,84,47,245,186,200,162,162,59,141,95,221,183, + 224,254,99,99,166,50,37,221,219,254,44,15,15,151,151,102, + 0,26,183,47,29,20,29,34,35,29,20,78,162,187,122,42, + 239,44,46,29,15,186,64,94,64,133,171,22,111,209,37,0, + 200,20,171,0,50,61,50,162,34,47,59,192,44,75,111,227, + 59,29,44,44,75,95,224,59,47,59,224,44,44,99,59,59, + 224,200,59,40,162,50,162,162,0,122,50,78,0,155,47,0, + 162,221,162,0,166,44,0,0,0,171,15,245,171,183,0,0, + 94,241,241,22,162,122,122,0,0,64,99,59,47,59,47,59, + 59,64,59,59,224,219,0,162,162,0,219,0,162,0,0,141, + 150,95,132,166,42,37,22,162,122,162,162,162,99,59,224,109, + 111,64,187,42,0,56,42,0,0,0,183,219,122,183,94,183, + 44,44,99,99,187,244,120,36,36,63,245,192,44,64,214,182, + 214,139,158,214,214,214,99,234,44,158,158,158,214,158,139,34, + 214,35,214,214,214,214,214,214,235,214,235,214,214,214,214,235, + 178,235,158,158,158,214,178,214,214,235,214,214,214,158,158,158, + 218,218,88,134,88,134,88,218,88,88,218,88,88,218,88,218, + 88,88,218,88,218,88,88,218,218,88,218,218,88,134,88,218, + 218,218,153,218,153,240,241,168,104,42,247,240,143,218,153,153, + 143,153,236,153,153,159,153,159,184,153,153,153,153,159,134,236, + 153,153,153,143,153,153,153,159,153,236,134,153,153,143,143,143, + 236,134,153,134,236,236,143,236,143,143,236,143,143,143,143,236, + 153,143,153,153,153,143,236,143,236,143,143,143,143,143,143,143, + 143,153,143,143,153,143,153,143,153,153,153,153,236,153,159,58, + 159,159,153,159,236,153,236,58,153,134,159,153,134,153,159,159, + 159,153,153,236,153,159,184,159,159,240,184,159,153,159,159,159, + 153,159,159,153,159,236,153,153,134,159,159,143,159,159,159,143, + 134,159,143,159,159,236,159,159,119,159,240,108,55,222,129,38, + 79,197,79,72,226,22,209,46,226,92,14,14,22,0,221,212, + 29,228,55,55,190,50,162,163,241,0,129,212,0,0,0,0, + 50,163,239,212,200,46,163,200,35,104,29,135,229,173,229,55, + 151,229,229,126,162,50,0,137,221,221,203,162,0,122,221,94, + 0,162,37,94,162,221,0,224,26,42,50,162,26,26,34,0, + 75,241,20,171,135,151,15,133,229,229,133,227,26,12,17,187, + 26,78,0,162,0,0,219,122,122,42,26,42,224,229,0,122, + 122,97,46,163,94,0,0,0,0,0,162,0,0,0,0,0, + 0,0,0,212,206,73,178,151,100,133,241,212,221,162,0,162, + 126,42,0,0,162,40,29,245,245,186,229,20,245,15,229,47, + 0,122,122,171,20,44,29,20,20,44,200,0,122,111,17,122, + 0,163,64,44,44,171,47,122,122,171,29,59,59,200,50,0, + 122,29,20,162,37,163,162,0,95,246,162,166,126,0,187,122, + 64,171,34,44,59,187,75,200,224,111,75,224,97,163,163,50, + 212,22,226,104,0,162,50,50,162,162,0,0,0,187,0,162, + 162,162,162,0,122,227,0,122,29,192,34,34,34,44,166,162, + 75,22,75,221,0,0,0,0,0,224,64,59,99,224,99,64, + 47,59,99,64,224,183,0,0,162,0,141,0,162,0,0,0, + 162,219,132,42,37,209,61,162,122,162,162,162,162,187,59,111, + 95,254,59,111,26,17,26,42,0,109,99,225,26,212,162,122, + 192,225,44,44,215,210,96,171,44,225,235,214,99,158,158,99, + 171,99,171,158,158,158,214,158,214,158,214,214,235,214,214,214, + 7,235,49,49,49,214,214,214,235,49,214,214,214,214,158,158, + 234,145,178,214,214,235,235,214,158,214,158,158,158,158,158,158, + 88,88,218,88,88,88,88,88,218,88,88,88,218,88,88,88, + 88,88,88,218,88,218,88,218,218,218,218,88,134,88,218,88, + 218,218,134,218,153,247,59,73,92,162,247,134,153,218,143,153, + 153,143,143,143,153,153,153,236,159,153,159,236,143,143,143,236, + 143,236,153,153,236,153,236,153,143,143,236,143,236,143,143,143, + 143,143,236,236,153,143,236,143,143,143,218,143,143,143,143,143, + 236,236,143,236,236,143,236,143,236,236,143,143,236,236,236,236, + 236,236,236,236,236,236,143,236,236,143,236,153,134,236,153,236, + 153,236,153,153,159,153,153,159,236,153,58,58,159,236,153,153, + 159,153,153,236,153,153,134,184,153,153,159,159,153,159,153,159, + 153,236,159,153,159,159,236,159,153,134,159,159,236,159,159,159, + 236,159,143,159,143,143,143,159,143,143,159,108,151,37,168,222, + 251,55,220,156,142,129,168,24,22,14,14,50,50,203,222,55, + 103,229,129,229,55,75,46,142,209,126,29,162,221,0,221,122, + 212,246,162,0,142,142,126,200,200,241,142,142,253,229,229,173, + 151,173,133,229,183,162,122,0,162,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,221,0,162,162,0,0,0,122,122, + 203,241,20,29,34,15,135,133,245,186,38,126,42,26,17,219, + 122,122,122,122,122,42,26,26,26,219,219,183,183,224,0,183, + 126,183,183,162,0,0,0,122,122,0,122,122,56,0,122,221, + 122,0,0,0,221,212,37,22,223,151,133,20,46,95,212,95, + 95,239,59,44,15,25,102,151,245,171,171,15,34,219,122,0, + 122,0,183,15,171,29,44,44,95,183,224,224,59,95,42,0, + 221,0,221,126,35,44,224,254,166,42,224,35,59,64,109,183, + 59,24,44,224,94,221,122,0,0,0,0,0,0,0,0,0, + 224,64,35,44,47,183,183,50,163,212,37,22,40,203,203,164, + 203,203,209,104,162,0,0,162,162,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,171,34,64,64,44,44,44,200, + 50,94,162,0,0,0,122,0,0,224,47,59,59,95,59,99, + 47,59,47,227,0,0,162,0,0,122,187,0,0,0,0,162, + 0,221,122,162,14,42,0,78,78,122,122,183,221,0,221,78, + 78,183,183,221,192,158,44,17,0,64,34,192,111,94,122,122, + 192,44,99,95,0,214,214,67,225,99,235,214,214,171,234,158, + 152,158,152,214,234,158,158,158,234,214,49,235,235,235,7,235, + 7,49,49,49,235,49,235,49,235,49,235,235,214,214,49,214, + 235,235,235,145,158,214,158,158,158,158,158,178,158,158,158,214, + 88,218,88,218,88,88,88,88,88,218,88,88,88,88,218,88, + 88,218,88,88,88,88,88,218,88,218,88,218,88,218,88,134, + 218,218,218,218,153,240,203,190,104,42,247,153,218,218,143,218, + 218,153,153,153,143,153,153,134,236,153,236,153,236,236,153,143, + 236,143,236,134,153,143,153,153,153,236,143,143,143,143,207,143, + 236,236,143,143,153,153,143,236,218,143,236,236,236,236,143,143, + 143,134,236,153,143,236,143,143,143,143,236,236,143,143,134,153, + 143,134,153,143,143,134,236,134,153,143,153,143,236,143,143,143, + 143,153,236,153,236,153,153,236,153,159,153,153,236,153,236,153, + 236,159,153,159,236,153,58,153,159,159,153,236,153,153,159,236, + 153,153,236,134,236,134,159,143,236,159,236,143,159,143,143,143, + 159,143,159,143,159,159,159,143,159,159,119,108,33,162,212,212, + 241,226,104,226,190,123,177,137,37,92,164,203,104,177,172,104, + 200,200,241,59,104,47,104,200,95,56,163,122,215,187,50,183, + 40,50,183,122,183,122,221,215,227,221,122,42,166,163,95,166, + 111,200,95,47,219,26,122,183,94,56,221,42,122,122,219,40, + 56,122,56,56,42,183,122,183,42,221,42,183,183,183,183,42, + 187,50,75,95,97,224,95,59,200,47,29,150,150,150,187,17, + 219,219,219,12,150,150,132,150,166,219,183,42,42,215,166,224, + 59,221,122,219,166,109,254,254,254,254,254,99,254,99,99,141, + 166,132,42,219,166,132,219,132,42,56,132,75,59,200,182,29, + 44,34,44,34,47,47,59,95,47,47,64,59,187,187,150,150, + 183,187,109,59,59,224,224,94,183,95,254,59,95,183,122,42, + 219,219,219,122,187,111,162,187,219,224,109,183,187,111,59,59, + 224,254,59,95,219,122,42,122,122,122,42,122,42,42,187,183, + 187,254,150,166,26,26,111,17,95,111,95,95,59,46,200,47, + 47,200,95,239,187,183,187,183,187,42,42,42,183,183,183,187, + 219,166,254,166,132,219,42,183,214,44,64,35,44,47,64,44, + 47,219,26,42,42,42,42,26,42,224,99,111,111,111,254,59, + 224,109,111,111,187,162,122,187,42,219,219,122,122,122,122,122, + 42,219,26,37,187,187,166,42,183,183,26,42,219,219,183,78, + 162,0,122,42,227,111,187,162,42,78,166,99,224,183,0,0, + 187,215,0,0,0,234,235,214,152,234,171,171,158,171,158,158, + 214,64,139,91,35,35,235,35,64,35,35,59,26,91,67,99, + 44,158,158,158,158,158,158,214,158,214,214,214,235,49,49,235, + 214,158,158,158,158,158,158,158,158,158,145,145,235,214,214,158, + 88,88,218,88,88,88,88,88,88,88,88,88,88,88,88,88, + 88,88,88,88,218,88,88,218,88,88,218,218,218,88,218,88, + 88,218,88,218,134,247,59,73,164,221,247,153,153,218,218,143, + 218,143,218,236,153,236,236,153,159,153,143,153,134,143,143,143, + 143,143,236,236,153,143,236,143,143,143,143,207,236,143,143,207, + 143,143,143,143,236,236,143,236,143,143,143,143,143,143,236,236, + 143,236,236,236,143,236,236,236,236,143,143,153,236,143,236,236, + 143,143,236,236,143,236,143,143,236,143,236,143,236,236,236,236, + 143,143,236,143,143,236,134,236,236,236,153,134,236,134,236,134, + 236,159,153,153,159,153,236,153,236,153,153,159,236,236,153,159, + 236,134,236,134,236,236,159,159,143,159,159,143,159,159,159,143, + 159,159,119,143,159,236,159,143,143,159,143,119,108,236,38,95, + 94,162,122,162,122,162,221,0,162,50,37,22,163,50,50,50, + 50,50,94,50,37,221,0,0,221,142,118,86,164,164,164,37, + 164,164,164,14,177,164,50,0,0,0,251,137,37,0,212,14, + 14,14,14,73,168,216,62,0,0,221,0,212,73,14,22,164, + 22,164,164,164,37,37,164,22,212,0,0,0,94,50,212,212, + 183,212,183,50,42,162,183,162,162,212,162,221,162,246,246,183, + 50,183,183,50,183,42,50,246,162,78,246,37,0,0,78,246, + 162,183,50,50,94,94,94,212,239,239,227,227,40,0,0,0, + 94,162,94,221,94,221,221,221,246,183,215,94,42,162,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,221,94,162,221, + 0,0,221,221,162,162,0,162,78,162,0,0,162,162,0,162, + 162,162,0,0,215,221,183,50,94,162,162,162,162,94,162,187, + 42,94,42,0,0,0,162,162,162,94,78,94,221,162,162,221, + 122,0,0,0,0,0,0,0,0,162,0,221,122,122,162,78, + 78,122,122,0,0,221,122,122,94,221,183,122,42,42,56,78, + 42,183,183,183,183,221,78,162,162,162,122,122,78,162,78,42, + 183,183,183,78,122,221,183,122,122,0,0,0,162,162,122,122, + 162,122,0,0,221,122,0,221,78,183,42,122,42,122,122,56, + 122,56,122,183,183,183,162,78,162,183,122,122,162,42,162,122, + 122,122,122,122,0,0,0,162,183,78,78,122,162,183,42,0, + 0,0,0,122,99,152,158,178,214,75,61,187,111,61,50,162, + 162,162,42,42,26,26,26,12,26,26,12,26,219,122,42,78, + 162,162,162,50,91,37,61,59,64,35,101,49,178,158,158,158, + 158,158,158,158,158,158,158,214,49,214,214,145,101,235,214,158, + 88,88,218,88,88,88,88,88,88,88,88,88,88,88,218,88, + 88,88,88,88,88,218,88,88,88,88,218,88,218,88,218,88, + 134,88,153,88,218,240,200,92,104,42,247,134,218,143,218,218, + 218,143,153,143,143,153,153,153,236,153,236,143,207,143,143,127, + 143,143,143,143,159,143,153,236,143,236,236,143,143,236,143,143, + 143,236,236,236,153,143,143,143,207,218,218,143,143,236,143,143, + 143,143,143,143,143,143,143,143,143,153,236,143,153,236,143,153, + 236,236,143,143,236,143,236,236,143,236,134,236,143,143,143,143, + 143,143,143,143,236,236,143,153,143,143,236,236,134,236,153,236, + 143,236,143,159,143,143,153,143,153,143,153,143,153,134,153,236, + 159,143,236,159,153,159,143,236,159,143,236,159,236,159,143,159, + 143,236,134,159,143,143,236,159,159,236,159,159,119,108,83,151, + 203,24,241,24,221,162,246,0,14,84,84,84,24,84,84,84, + 84,73,24,73,73,40,0,221,0,250,250,55,14,168,222,168, + 206,222,31,123,237,168,104,0,162,42,79,237,206,92,22,31, + 249,249,249,249,123,11,11,42,0,50,221,212,249,233,113,73, + 10,206,206,84,73,84,73,168,177,0,162,94,203,59,241,59, + 241,59,22,200,241,35,75,224,75,226,212,50,94,40,75,75, + 59,75,59,241,75,200,200,97,224,200,24,190,162,215,50,163, + 163,187,166,166,126,111,126,187,166,126,254,97,226,183,126,122, + 47,212,126,163,163,75,75,75,163,163,50,50,50,212,203,162, + 162,203,212,212,79,104,162,94,50,50,50,50,50,162,94,164, + 0,162,122,50,162,163,111,163,163,187,163,187,50,187,111,187, + 104,94,183,78,212,91,163,111,163,187,163,111,50,94,50,187, + 50,40,94,0,162,183,163,187,187,187,163,183,187,126,187,111, + 187,111,50,104,162,183,94,163,111,187,183,187,183,187,187,187, + 187,187,187,183,203,0,0,221,203,42,26,50,187,187,111,163, + 187,187,91,26,50,183,162,122,0,97,162,26,50,42,42,94, + 162,162,162,162,183,162,162,0,0,0,221,183,183,219,50,42, + 187,50,42,26,26,42,219,122,0,0,0,94,221,26,42,42, + 187,42,26,162,42,78,183,42,221,0,0,0,162,162,42,42, + 42,42,42,42,78,42,42,162,78,162,162,0,0,0,0,122, + 221,162,26,234,245,245,109,42,26,26,26,26,17,12,8,101, + 101,101,7,235,7,235,7,7,7,7,7,7,235,49,7,7, + 101,101,101,8,8,8,243,8,8,91,111,211,42,42,50,187, + 61,35,139,64,35,49,214,214,49,145,158,145,49,49,49,145, + 88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88, + 88,88,88,88,88,88,218,88,218,88,88,218,88,218,218,88, + 218,88,218,88,218,247,241,226,164,122,153,153,218,218,143,218, + 218,218,143,236,153,153,143,153,143,153,143,143,143,218,143,218, + 127,143,143,143,236,236,153,236,143,143,143,218,143,236,143,207, + 143,143,143,143,236,143,218,143,143,236,236,207,143,143,143,207, + 143,143,207,143,207,143,143,236,143,143,236,143,143,236,143,236, + 143,153,236,236,236,143,143,236,143,143,143,236,236,143,143,236, + 143,207,236,143,143,236,236,143,236,143,143,143,236,143,134,236, + 143,236,143,236,236,143,159,236,143,159,236,143,236,236,134,236, + 159,236,143,236,134,119,134,236,159,134,236,143,143,159,236,159, + 143,143,236,119,143,143,143,143,143,143,236,236,143,159,108,151, + 163,142,200,223,50,42,50,122,84,130,168,168,130,130,130,233, + 233,233,168,206,222,212,0,162,0,43,206,14,123,31,249,31, + 31,123,167,31,62,233,166,221,203,97,14,233,62,237,249,237, + 167,62,237,62,123,93,11,42,0,212,162,94,62,249,233,249, + 249,249,233,233,233,233,249,233,168,0,94,162,203,241,22,75, + 35,35,200,209,59,241,35,209,75,177,40,94,162,40,22,35, + 139,241,59,241,22,75,59,75,59,224,24,48,0,239,227,142, + 75,224,111,224,224,224,200,97,224,111,111,187,48,94,183,0, + 163,212,163,163,163,22,22,163,22,163,40,50,50,203,104,221, + 162,97,22,23,165,137,162,50,50,50,162,162,50,162,221,177, + 0,122,183,203,163,61,187,163,239,50,187,163,224,224,75,111, + 226,94,221,0,104,50,163,187,163,111,111,224,111,97,163,75, + 111,46,212,0,162,166,75,163,163,163,111,163,126,163,111,111, + 97,111,75,172,162,163,40,163,111,37,187,37,111,163,163,111, + 187,111,111,187,104,122,42,227,142,50,111,111,111,187,187,163, + 111,187,126,187,111,163,78,122,0,59,50,187,50,163,187,50, + 91,50,187,50,26,42,212,162,122,0,163,50,91,187,163,187, + 163,187,37,163,111,91,187,50,162,0,0,95,94,187,163,187, + 163,163,111,187,91,162,187,183,50,162,0,0,126,50,187,50, + 187,187,187,187,163,187,183,42,91,162,183,0,0,0,0,187, + 95,50,99,158,139,211,12,8,8,7,7,67,7,7,7,7, + 7,7,235,7,7,49,49,49,49,7,49,7,235,7,7,67, + 7,7,7,7,67,7,67,101,67,101,8,67,67,101,8,8, + 8,8,187,211,211,59,49,139,187,91,187,49,49,49,49,49, + 88,88,218,88,88,88,88,88,88,88,88,88,88,100,88,88, + 88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,218, + 88,218,88,218,88,240,200,92,104,91,153,153,218,218,218,218, + 218,127,218,127,143,143,236,143,159,143,236,236,207,236,143,207, + 143,207,207,143,153,143,236,143,143,207,207,143,207,143,207,143, + 143,143,143,143,143,236,236,236,207,143,143,143,218,143,207,143, + 143,207,143,207,143,207,207,143,207,143,143,143,236,143,236,143, + 143,143,153,143,236,236,143,236,236,236,143,143,143,236,236,143, + 236,143,143,236,143,143,143,236,143,236,143,236,143,236,143,143, + 236,143,236,143,236,236,143,143,236,143,236,143,153,143,236,236, + 143,134,236,236,143,143,143,236,143,143,236,143,236,143,236,143, + 236,159,143,143,119,143,236,236,236,236,143,236,236,236,108,151, + 177,46,75,29,227,162,221,0,73,31,31,130,31,222,233,31, + 222,233,249,113,65,94,122,162,221,92,249,31,31,123,31,233, + 130,130,177,84,31,233,95,50,227,183,22,216,41,237,237,216, + 216,220,216,138,220,93,11,42,0,183,0,37,41,62,62,62, + 62,41,41,167,167,103,62,41,135,0,183,122,46,178,24,241, + 35,241,241,209,209,209,200,35,241,226,50,183,26,75,46,209, + 75,22,75,35,24,22,209,59,35,241,142,177,0,227,183,223, + 59,200,59,200,200,35,59,200,35,59,59,61,79,212,94,0, + 241,37,163,37,50,163,37,163,22,203,163,200,163,92,40,122, + 221,40,203,137,92,122,50,163,50,183,50,163,50,50,212,129, + 0,122,94,92,224,200,224,111,111,111,75,95,224,224,75,37, + 142,50,183,122,172,91,75,75,75,75,200,22,109,75,97,111, + 75,142,163,78,162,254,241,97,163,61,97,97,111,97,163,109, + 97,61,97,129,122,215,215,200,61,111,111,187,97,111,111,97, + 163,163,163,61,47,0,94,183,142,26,187,111,163,61,97,111, + 163,163,187,50,163,75,122,162,0,47,50,163,50,187,50,187, + 50,187,50,91,163,183,200,183,0,122,104,26,50,187,91,163, + 187,91,187,26,50,183,91,126,221,122,0,47,50,163,50,187, + 187,183,61,50,183,187,50,91,50,78,122,0,95,111,50,187, + 163,163,37,187,91,163,187,94,187,212,162,0,0,42,78,166, + 224,166,101,8,8,49,67,7,49,49,182,7,67,49,67,67, + 67,235,7,235,67,67,7,67,235,235,67,67,7,235,235,235, + 49,141,67,7,67,49,49,49,7,67,67,67,67,7,67,7, + 49,7,101,101,101,139,139,67,101,67,8,141,182,182,7,182, + 88,88,88,88,88,88,88,88,88,100,100,88,100,88,88,100, + 88,88,88,88,88,88,88,88,88,88,88,218,88,218,88,218, + 88,218,88,218,218,240,59,92,104,221,153,153,218,88,88,218, + 218,88,218,143,143,153,236,143,236,143,143,143,127,143,127,218, + 127,143,143,143,236,143,236,143,143,143,207,143,207,143,143,207, + 143,236,236,143,143,143,143,236,143,207,236,207,207,143,143,207, + 143,143,143,143,207,143,207,143,143,207,143,143,143,143,143,236, + 236,143,143,143,143,236,143,143,143,143,143,143,143,143,143,143, + 143,207,143,143,143,143,143,236,143,236,143,143,143,143,89,143, + 236,143,236,143,143,143,236,143,143,143,236,143,236,143,143,236, + 236,236,143,236,236,236,143,236,236,143,159,236,236,143,236,143, + 143,236,236,143,236,143,143,143,143,236,143,143,143,143,159,151, + 73,48,46,34,215,122,78,122,209,233,222,222,31,31,233,233, + 222,222,222,113,118,50,162,94,183,168,249,62,249,233,31,31, + 206,206,233,233,62,73,183,0,0,122,73,216,216,216,138,138, + 138,138,216,216,237,93,11,219,0,50,0,50,216,41,41,62, + 62,237,167,62,62,228,167,62,222,0,78,0,203,253,168,24, + 223,24,35,35,35,241,241,241,22,35,94,183,221,126,163,75, + 209,35,35,35,35,75,35,59,35,35,46,177,0,50,227,226, + 59,59,59,200,59,35,35,35,47,59,47,109,197,246,183,0, + 104,50,126,75,163,163,75,97,163,75,203,75,22,209,203,122, + 0,95,92,0,122,42,50,212,50,37,22,22,163,37,246,129, + 0,122,183,24,95,241,97,223,253,253,253,24,97,224,200,163, + 223,50,221,122,172,91,75,200,111,75,200,75,75,75,59,97, + 22,172,200,0,162,95,241,75,111,97,61,97,75,200,111,75, + 224,75,75,129,0,183,40,95,97,97,97,61,97,61,97,111, + 111,111,163,50,223,0,94,183,142,50,111,111,95,61,97,61, + 111,163,111,187,187,46,0,0,0,47,50,187,91,37,37,37, + 37,111,50,50,50,50,46,183,122,0,47,183,111,126,187,163, + 111,200,241,187,163,111,50,95,94,122,162,47,187,187,163,91, + 163,187,50,187,163,91,183,183,187,162,0,0,95,50,91,187, + 91,91,187,163,187,163,187,50,187,212,0,0,0,187,183,166, + 59,95,7,49,7,67,67,141,7,141,49,235,235,49,235,141, + 67,67,235,7,141,7,141,49,141,7,141,7,67,235,235,7, + 141,49,141,49,49,235,235,7,235,49,67,67,49,49,141,67, + 67,49,7,49,49,67,67,7,67,7,67,7,49,67,141,67, + 88,88,88,88,88,100,88,100,88,169,169,100,88,100,88,88, + 100,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88, + 88,88,88,88,88,240,59,92,241,26,153,153,218,127,218,127, + 127,143,127,127,143,143,143,236,153,236,218,218,143,127,143,127, + 127,127,207,143,143,143,143,127,127,127,127,127,127,127,207,143, + 207,143,143,207,143,207,143,143,143,143,143,143,207,143,207,143, + 207,207,207,207,143,127,127,143,236,143,236,207,143,143,143,143, + 143,143,236,143,143,143,143,143,143,236,207,143,207,207,143,207, + 143,143,207,143,207,143,143,143,143,143,207,143,207,143,143,143, + 143,236,143,153,236,236,143,236,236,143,143,236,143,143,143,143, + 143,143,236,143,143,143,143,143,143,236,143,143,143,89,143,236, + 236,236,143,143,143,236,89,236,236,143,143,127,143,236,108,133, + 222,135,190,223,162,0,162,163,73,130,84,84,154,154,222,222, + 130,84,130,73,220,162,162,50,0,222,167,31,168,206,206,233, + 62,62,167,167,41,249,166,0,0,0,168,216,62,62,62,249, + 62,62,62,167,167,216,11,187,0,183,0,212,216,237,237,62, + 237,41,167,79,62,167,249,41,222,0,94,0,200,168,253,177, + 253,253,168,177,84,178,178,24,24,226,212,162,0,212,241,24, + 24,35,35,24,24,209,178,200,24,209,226,48,0,215,187,223, + 35,35,35,35,35,47,35,35,47,35,47,203,38,50,183,0, + 104,75,203,203,75,40,163,203,75,22,241,203,163,226,163,78, + 0,95,104,221,50,94,75,22,209,22,209,203,203,50,94,222, + 0,0,221,46,241,200,61,142,253,46,223,135,24,75,241,163, + 226,246,187,0,48,91,224,22,59,75,241,139,75,75,75,59, + 97,253,104,122,122,111,241,75,200,97,75,200,61,75,111,111, + 97,111,224,48,122,183,227,200,97,61,111,111,97,75,61,111, + 111,111,111,187,190,0,183,183,46,163,61,97,97,97,97,97, + 97,37,187,163,50,75,0,0,0,47,61,37,126,61,61,61, + 37,61,61,26,91,78,142,212,122,0,104,91,163,163,187,91, + 35,35,35,163,187,126,187,163,183,122,0,47,61,50,187,187, + 91,163,187,91,50,187,50,50,97,162,0,0,95,166,50,187, + 166,187,163,187,91,187,187,187,187,50,122,0,0,126,126,111, + 47,40,7,235,141,7,67,235,67,7,235,7,141,7,8,141, + 7,67,235,235,7,235,141,7,141,7,141,7,141,7,67,7, + 7,235,7,141,141,67,141,99,7,235,7,67,67,49,235,7, + 141,67,235,235,7,8,67,141,7,141,67,67,67,7,7,67, + 88,100,88,100,88,100,100,88,100,88,100,100,100,100,88,100, + 100,88,100,100,100,100,169,88,88,88,169,218,169,218,169,218, + 169,218,169,218,88,240,224,92,241,42,218,153,88,218,88,218, + 88,218,218,127,207,143,143,143,143,143,143,127,218,218,218,218, + 127,127,127,127,207,143,218,143,207,127,143,143,218,143,143,143, + 207,127,143,207,143,207,207,207,207,143,143,143,207,143,143,143, + 143,143,127,127,143,218,207,127,236,143,143,143,207,236,143,143, + 143,207,143,236,143,218,236,236,143,236,236,143,143,143,207,143, + 207,143,207,143,207,143,207,143,207,143,143,143,207,143,143,143, + 143,143,143,143,143,143,143,143,236,143,143,143,236,143,143,143, + 143,143,143,143,236,236,143,143,207,143,236,236,143,236,236,143, + 143,236,236,143,143,143,143,143,143,89,236,143,143,127,159,38, + 251,129,177,135,212,162,122,95,209,73,206,84,14,14,209,84, + 84,84,168,233,130,183,0,212,94,206,233,233,168,130,14,233, + 249,31,233,233,249,249,215,0,0,122,177,216,237,62,167,249, + 249,249,62,167,249,138,216,50,0,94,122,212,216,216,216,237, + 237,41,216,237,167,167,123,249,222,0,183,0,40,222,222,177, + 168,177,222,222,177,177,177,177,84,168,163,78,0,200,226,177, + 223,226,24,226,24,24,226,35,226,24,226,172,0,183,183,177, + 35,64,47,47,35,47,35,24,47,24,142,241,79,212,183,0, + 46,14,209,209,164,241,241,22,75,163,75,241,22,226,40,221, + 0,75,226,183,164,73,164,14,14,241,22,22,22,163,94,129, + 0,162,215,226,75,46,111,223,253,26,59,20,223,224,35,163, + 226,94,183,122,15,50,22,59,75,75,75,22,75,59,224,59, + 200,48,104,122,221,95,200,22,75,111,75,241,75,59,75,75, + 75,75,46,223,0,183,212,200,163,75,111,97,111,75,75,75, + 111,200,163,163,190,162,183,239,142,163,61,97,111,75,61,111, + 111,97,111,126,239,75,0,0,0,47,50,163,163,163,163,37, + 61,22,163,50,50,162,142,50,42,0,47,42,61,111,126,97, + 35,111,35,187,50,111,50,75,94,122,221,47,50,50,187,239, + 187,163,187,50,187,91,42,187,75,78,0,0,95,126,187,187, + 187,187,91,50,187,50,187,50,187,50,122,0,0,254,224,224, + 64,200,49,141,7,67,141,7,67,99,67,67,7,141,7,235, + 145,7,7,141,141,7,141,7,141,7,235,141,7,235,235,141, + 235,235,7,67,7,141,7,235,141,141,7,235,141,7,141,49, + 67,67,141,7,67,7,67,49,67,7,67,67,7,99,235,67, + 88,100,88,88,88,100,100,88,100,100,88,100,88,100,88,100, + 100,88,100,88,100,88,100,169,169,169,88,100,100,88,100,169, + 100,169,88,169,218,153,59,104,241,26,153,218,218,88,188,88, + 127,88,127,127,143,143,207,143,207,143,207,218,127,127,88,218, + 127,127,218,127,127,127,127,127,127,143,218,218,143,218,207,207, + 143,143,218,127,207,143,143,143,143,207,207,143,143,207,207,127, + 207,127,143,143,207,143,218,143,143,207,143,143,143,207,143,207, + 143,143,236,143,207,143,143,143,143,143,143,143,207,143,127,207, + 143,143,207,127,143,143,143,207,143,207,143,143,143,207,207,143, + 207,143,127,143,143,143,207,143,143,207,143,207,143,89,143,207, + 143,143,236,143,127,143,236,236,127,143,143,143,236,143,143,236, + 236,236,143,143,236,89,143,89,143,236,143,127,143,236,159,133, + 228,228,129,129,22,122,162,241,130,130,84,84,130,84,84,84, + 209,209,177,154,168,163,0,221,183,209,206,168,31,73,22,206, + 73,22,14,137,31,62,219,122,221,221,73,249,233,249,249,62, + 31,249,167,249,249,93,175,59,0,183,162,203,216,62,41,62, + 237,237,237,62,31,31,233,249,222,122,162,78,203,222,222,168, + 48,177,168,168,222,177,84,226,84,222,212,50,0,104,226,84, + 178,142,142,24,226,24,223,35,142,24,226,48,0,50,26,190, + 35,47,35,35,35,35,47,35,35,142,44,35,79,212,183,0, + 104,163,92,209,209,209,84,92,24,209,241,46,164,226,203,122, + 162,95,92,50,137,48,22,22,164,22,75,97,203,50,50,129, + 0,122,215,226,203,24,75,223,135,84,253,135,223,200,59,241, + 226,215,50,0,135,61,59,22,35,22,139,209,75,209,200,75, + 75,135,104,122,122,111,35,59,22,59,75,75,22,75,224,75, + 75,75,46,172,122,94,95,200,75,97,75,61,200,111,111,75, + 224,97,97,91,190,162,78,166,226,187,111,75,109,75,75,75, + 97,111,163,111,163,104,0,221,0,40,94,163,187,97,61,37, + 163,61,37,187,91,50,142,227,0,162,47,50,126,111,187,35, + 111,111,35,50,166,126,187,200,227,162,0,34,183,91,50,187, + 50,91,163,187,50,187,163,50,163,162,0,0,95,126,50,163, + 187,163,187,163,187,187,91,26,26,95,78,0,0,254,224,47, + 47,95,7,235,49,141,235,7,141,67,235,49,141,235,7,141, + 145,7,141,7,235,7,141,7,67,67,235,7,141,7,141,7, + 235,145,141,67,7,49,7,141,7,235,235,7,141,235,7,141, + 7,67,235,141,67,67,235,235,235,141,141,7,141,67,67,49, + 88,88,100,100,88,88,100,88,100,100,100,88,100,100,100,88, + 100,100,100,169,88,169,100,88,100,100,88,88,88,169,88,88, + 88,88,169,88,88,240,59,104,241,162,218,153,188,218,127,88, + 188,88,127,127,207,127,143,207,127,127,127,127,127,207,127,127, + 88,127,127,218,127,127,127,218,127,127,143,207,143,143,143,127, + 207,143,143,143,207,143,207,127,218,143,207,143,143,143,207,127, + 127,127,127,127,143,127,143,127,143,143,207,143,143,207,143,207, + 143,143,143,143,207,143,207,143,207,143,207,143,207,143,143,207, + 207,143,143,207,143,207,143,143,143,207,143,207,143,143,143,127, + 143,143,207,143,143,207,143,143,207,143,143,143,207,143,143,207, + 143,143,143,143,143,207,143,236,143,127,236,143,236,236,143,143, + 143,236,236,143,143,143,143,89,143,143,89,143,143,236,159,133, + 228,129,129,129,37,122,163,227,84,84,73,209,84,130,84,130, + 84,84,84,206,222,40,0,94,215,73,14,130,14,206,22,84, + 14,50,37,209,31,233,239,0,221,56,48,249,206,14,73,206, + 31,233,233,137,123,93,233,104,0,50,0,40,216,249,249,62, + 123,62,79,233,130,253,84,31,222,0,183,162,203,130,135,253, + 177,177,177,84,84,226,223,142,46,48,50,183,122,200,226,178, + 24,24,142,24,223,24,226,35,226,35,178,48,0,239,42,223, + 35,47,59,64,47,35,35,47,35,47,24,35,38,50,78,162, + 46,22,241,203,40,241,209,92,92,84,24,209,209,226,239,183, + 0,95,104,50,22,50,187,22,241,163,203,163,163,212,22,129, + 0,122,183,226,37,35,75,223,135,48,135,223,75,200,35,200, + 226,183,187,0,172,37,200,209,59,241,22,35,200,35,22,75, + 75,135,104,122,221,95,35,241,22,224,22,59,22,59,22,59, + 75,75,241,48,42,56,40,200,75,111,95,97,97,200,61,75, + 109,97,75,37,20,162,122,215,223,163,97,75,61,111,75,75, + 61,111,163,111,126,142,0,0,0,47,50,163,163,75,61,37, + 75,61,37,111,187,50,142,50,122,162,47,50,111,187,224,24, + 111,97,35,111,187,163,50,75,94,122,0,142,94,187,187,187, + 187,187,163,187,163,91,187,126,163,122,0,0,95,163,187,91, + 187,187,187,111,91,183,187,187,50,163,78,0,0,224,224,64, + 47,47,141,7,141,235,7,141,7,141,145,7,141,235,7,7, + 235,235,141,67,141,7,235,235,7,141,7,141,235,141,141,7, + 235,7,7,49,235,235,141,7,67,235,235,141,67,67,7,235, + 235,141,7,49,67,141,141,7,141,7,67,141,7,235,141,67, + 88,88,88,100,100,100,100,88,100,100,100,100,100,100,100,100, + 100,100,100,100,100,100,100,100,88,169,169,169,100,88,100,169, + 169,88,169,169,88,153,200,164,241,26,218,218,88,169,88,127, + 127,188,88,88,127,143,127,143,127,127,127,88,127,88,127,88, + 127,88,88,88,88,127,218,127,218,218,127,207,207,127,207,143, + 143,207,207,143,143,127,143,143,127,143,143,207,207,207,143,143, + 143,207,143,207,127,143,127,143,207,143,207,143,207,143,143,207, + 143,207,127,207,143,127,207,143,143,207,143,207,143,207,143,127, + 127,207,207,143,143,127,207,127,143,143,143,207,143,207,143,143, + 207,143,127,207,143,143,207,143,143,143,207,143,143,207,143,143, + 207,207,143,207,143,143,143,143,143,236,143,236,143,143,143,143, + 143,143,143,143,143,143,143,143,127,143,143,89,143,143,236,38, + 228,129,48,129,40,162,212,162,14,14,84,206,14,14,206,84, + 73,92,84,84,233,203,0,183,94,73,130,206,168,130,22,22, + 14,22,209,209,249,233,97,0,0,246,73,175,233,73,73,167, + 90,249,249,233,62,93,249,47,0,212,0,212,62,62,62,233, + 233,249,31,168,168,84,84,233,222,122,162,162,75,222,84,223, + 223,223,24,223,223,223,24,24,209,253,40,94,0,104,177,226, + 209,46,35,24,209,223,24,35,35,35,226,177,0,227,42,190, + 59,35,47,47,35,47,64,35,64,35,47,75,18,212,183,0, + 226,203,203,163,241,37,46,14,241,14,92,203,164,24,40,122, + 162,95,164,61,50,203,14,22,22,209,14,92,22,22,22,173, + 0,122,94,142,37,142,224,223,222,61,22,59,35,59,200,241, + 177,50,239,0,29,61,75,241,59,75,241,200,75,35,59,75, + 200,48,104,0,0,224,241,35,75,75,200,61,35,75,22,139, + 75,75,35,135,0,221,111,22,75,75,61,97,61,97,75,61, + 75,109,61,75,172,221,183,183,142,111,61,111,200,109,61,111, + 111,97,111,111,111,46,0,122,0,34,50,187,91,37,37,61, + 37,61,37,183,187,26,24,227,122,0,142,42,187,187,35,59, + 209,35,59,35,187,187,187,95,215,42,221,47,50,91,163,91, + 163,91,163,187,187,50,187,187,163,122,0,0,224,50,50,187, + 163,187,91,50,187,187,163,187,26,97,183,0,0,141,99,59, + 64,254,235,7,235,235,141,235,7,235,141,7,49,235,141,7, + 141,235,8,67,7,141,235,67,235,235,141,67,7,8,141,235, + 99,235,141,49,141,7,235,67,7,8,141,235,7,141,235,141, + 7,235,235,8,235,7,141,67,141,8,235,141,7,67,7,8, + 88,100,100,197,88,100,100,100,100,100,100,100,100,100,100,100, + 100,100,100,100,100,169,100,100,100,100,100,100,100,169,169,100, + 100,100,88,88,88,153,47,164,241,221,207,153,88,169,169,88, + 88,188,127,88,88,127,127,127,127,127,143,127,127,127,127,127, + 127,127,127,207,127,127,127,127,127,127,127,127,143,127,127,218, + 127,127,127,127,207,127,218,143,207,143,143,143,143,207,207,127, + 127,127,127,127,127,127,188,127,143,207,127,143,207,143,143,127, + 127,143,143,143,143,218,143,207,143,143,143,207,143,143,143,143, + 127,127,127,143,207,127,143,127,207,143,207,127,143,143,127,127, + 207,143,127,143,127,127,143,207,127,143,127,127,143,143,143,143, + 127,143,143,143,207,143,143,143,143,143,143,143,127,143,143,127, + 143,143,127,143,127,127,143,89,143,127,143,127,143,127,236,55, + 173,129,177,129,40,221,203,50,14,14,130,233,233,84,168,14, + 73,84,73,73,233,200,0,246,227,92,233,206,130,206,209,206, + 206,84,92,24,31,249,241,0,122,215,92,206,73,73,206,206, + 206,206,233,233,220,237,249,241,0,227,0,203,41,249,249,249, + 233,233,233,130,168,177,130,249,222,0,183,221,203,253,178,24, + 223,223,24,177,223,223,24,35,35,222,163,94,122,95,226,223, + 24,24,46,209,24,24,223,35,24,209,190,48,122,126,187,223, + 209,224,59,200,200,35,59,35,47,47,35,200,38,50,227,0, + 104,241,203,37,209,14,75,22,95,163,75,75,241,24,40,162, + 162,95,137,79,162,164,241,164,22,164,22,241,75,37,22,228, + 122,221,183,226,22,35,200,253,129,47,35,35,47,35,35,200, + 190,94,166,0,172,37,200,75,22,139,209,22,59,224,200,75, + 224,20,241,122,0,224,46,75,61,75,59,111,75,35,75,22, + 61,75,46,172,122,183,95,75,75,224,97,224,163,212,163,163, + 97,111,111,37,46,122,221,183,24,111,111,75,111,200,75,75, + 61,97,97,111,97,46,0,0,0,142,50,187,163,61,61,61, + 75,61,61,111,163,162,46,227,56,0,104,50,187,187,111,187, + 91,109,24,61,187,163,163,163,94,122,0,47,183,91,183,111, + 187,187,91,61,227,187,163,183,163,78,0,0,59,187,187,187, + 187,187,187,111,187,187,91,50,91,212,42,0,0,254,47,254, + 47,47,141,7,141,141,235,7,141,235,243,67,7,141,141,235, + 141,7,141,67,49,141,235,141,7,141,141,7,141,8,7,67, + 67,141,141,8,141,8,141,235,49,141,8,141,141,7,141,145, + 7,141,141,8,8,7,49,7,141,8,7,141,49,141,235,141, + 88,100,100,100,197,100,102,100,100,102,100,100,100,100,100,100, + 100,100,100,100,100,100,100,100,100,100,100,169,169,100,100,169, + 169,169,169,169,218,218,95,104,203,26,169,218,127,169,88,169, + 127,169,88,188,127,88,88,218,127,127,127,88,127,127,127,127, + 127,127,127,88,88,169,169,88,127,127,143,127,127,143,218,127, + 143,127,127,127,127,127,127,127,127,127,207,143,127,127,143,143, + 143,127,127,127,127,127,127,127,127,127,143,127,207,127,127,143, + 127,127,207,143,207,127,143,127,127,207,143,127,207,127,127,127, + 127,143,143,127,143,143,207,143,143,127,127,127,127,127,143,143, + 127,127,143,207,143,143,127,207,143,127,143,207,127,127,143,207, + 143,207,143,127,127,207,143,143,207,143,143,236,89,143,143,89, + 143,143,236,143,236,127,143,127,143,89,127,127,143,236,236,133, + 228,228,135,253,212,162,163,239,14,31,137,177,73,92,92,73, + 14,92,209,92,190,104,0,94,126,163,177,226,92,177,73,84, + 73,92,92,92,73,164,47,122,78,163,22,137,137,137,177,177, + 177,137,92,137,137,73,92,47,0,183,162,40,190,190,226,92, + 92,226,190,226,73,92,226,92,177,0,162,162,212,50,241,203, + 37,22,203,241,22,203,241,203,37,226,241,183,122,104,164,104, + 104,241,92,104,241,104,241,241,241,75,24,177,0,126,40,226, + 223,177,73,177,177,190,190,190,177,190,177,92,55,212,166,122, + 104,22,75,241,104,104,241,104,200,163,95,212,203,24,203,183, + 0,95,92,226,59,24,24,226,226,104,46,241,46,241,37,129, + 0,122,42,104,241,241,203,104,241,241,241,241,241,241,75,37, + 223,212,126,162,29,37,241,209,104,241,200,241,241,241,241,241, + 203,177,200,122,162,75,75,75,241,75,75,241,75,75,200,200, + 59,163,104,135,122,94,126,241,241,46,59,163,111,163,97,37, + 212,212,183,162,0,0,122,94,104,50,163,163,163,97,75,75, + 75,163,163,239,163,46,0,162,0,47,50,50,50,212,212,163, + 50,163,163,50,187,50,46,94,183,0,47,162,94,50,42,187, + 94,187,163,94,183,94,42,40,183,122,122,142,162,94,42,50, + 50,50,227,227,187,50,187,50,163,162,0,0,59,50,50,50, + 183,50,162,187,50,42,183,78,183,163,183,0,0,99,99,47, + 64,47,7,67,7,235,141,49,141,67,7,141,235,141,12,7, + 141,235,8,141,67,67,7,141,7,8,8,7,8,7,141,49, + 7,8,8,243,7,141,7,8,7,8,8,8,141,67,141,235, + 8,7,8,8,141,7,141,235,7,141,49,8,235,67,49,49, + 100,100,100,100,100,100,100,102,88,100,102,100,102,100,102,100, + 100,74,100,100,100,100,74,100,100,100,100,100,100,88,100,88, + 169,100,169,100,188,153,224,241,203,221,169,218,88,169,169,169, + 169,127,169,169,127,127,127,218,218,88,127,127,88,127,88,127, + 188,169,207,127,88,88,39,88,127,127,127,143,127,127,143,127, + 218,127,218,127,127,207,127,127,218,127,127,143,207,127,127,127, + 218,127,127,127,127,127,127,127,143,127,127,127,127,127,127,127, + 127,127,143,127,143,127,207,127,127,127,127,127,127,143,143,127, + 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127, + 127,127,127,127,127,127,127,127,127,127,127,127,143,127,127,127, + 207,143,143,143,143,143,207,127,143,127,127,143,143,127,143,143, + 127,143,143,127,143,143,127,127,143,127,143,127,127,143,159,133, + 251,229,173,129,22,0,163,183,14,249,249,249,233,73,233,130, + 130,233,233,233,31,200,0,94,239,209,206,233,168,130,168,233, + 233,206,233,249,62,168,241,0,215,126,37,233,233,62,233,206, + 233,233,31,220,237,216,233,40,162,163,221,203,62,41,167,62, + 167,62,167,31,249,123,249,123,135,0,122,94,215,168,31,222, + 222,168,168,168,168,168,177,84,177,177,203,94,122,95,14,24, + 24,209,209,209,209,92,24,226,24,24,177,190,0,126,200,226, + 104,46,47,46,24,24,24,92,209,24,209,241,55,221,183,0, + 104,241,164,163,40,14,209,14,92,167,31,123,212,226,40,221, + 0,95,92,138,142,241,203,75,59,24,104,24,24,46,37,129, + 0,162,215,104,142,209,47,46,35,46,226,24,241,35,35,203, + 223,94,183,162,190,35,24,35,24,46,95,200,75,200,59,241, + 200,190,203,221,0,111,46,46,163,241,75,75,22,200,200,75, + 75,75,200,135,0,215,221,94,221,221,215,221,162,0,0,162, + 162,162,0,162,212,0,0,183,40,183,163,163,111,163,163,95, + 163,75,111,126,163,200,0,122,0,47,50,111,163,126,227,163, + 239,40,95,187,239,212,46,183,42,221,104,187,183,50,50,126, + 50,50,215,94,183,50,42,40,50,122,122,47,50,126,187,187, + 183,183,183,50,227,50,187,183,75,42,0,0,47,162,42,50, + 183,183,162,42,94,94,94,183,162,163,183,0,0,47,64,47, + 64,47,141,235,141,235,7,141,145,141,235,7,141,7,8,235, + 8,235,8,7,7,141,145,7,235,141,7,141,8,7,150,7, + 141,7,8,8,8,8,235,150,235,67,7,8,8,8,7,141, + 7,8,8,8,8,141,141,7,141,7,141,141,235,235,145,214, + 100,100,100,100,102,100,102,100,102,100,100,102,100,100,100,100, + 102,100,74,74,33,74,100,100,100,169,102,100,169,100,100,100, + 100,169,100,169,169,153,200,104,241,26,169,236,39,169,88,100, + 88,169,88,169,169,169,169,100,100,188,127,127,127,127,207,127, + 127,127,169,127,140,169,169,39,169,88,127,127,127,127,127,127, + 127,127,88,127,127,127,127,127,127,127,127,127,127,127,127,127, + 127,127,88,127,127,127,169,39,169,127,127,127,127,127,169,127, + 88,127,127,127,127,127,127,127,127,88,127,88,127,88,169,88, + 127,127,127,169,127,127,127,127,127,127,127,88,127,169,127,127, + 127,127,143,207,143,127,127,127,127,127,127,127,127,127,127,127, + 127,127,127,127,207,127,127,143,127,127,143,127,143,127,127,143, + 127,127,127,143,127,127,89,127,127,89,127,143,127,143,207,55, + 129,228,129,228,203,0,203,221,209,73,130,249,31,113,233,31, + 233,222,130,206,222,104,0,162,40,164,130,31,73,168,168,168, + 73,233,73,206,137,92,104,0,78,40,241,206,14,73,206,113, + 206,206,73,31,249,62,62,95,0,221,221,241,206,233,233,73, + 154,168,84,177,84,84,168,31,168,0,122,94,246,223,178,24, + 24,24,226,178,209,209,209,24,209,48,203,215,162,40,241,24, + 46,241,241,209,209,35,35,209,104,24,177,223,0,183,95,226, + 241,111,97,200,75,209,22,75,200,75,200,241,173,212,94,0, + 241,209,14,212,22,209,22,14,22,216,92,138,130,226,203,56, + 0,40,203,246,187,200,200,200,75,75,95,200,59,22,241,129, + 0,0,183,97,29,44,24,44,24,24,24,223,75,46,35,46, + 24,40,187,122,226,46,34,34,34,44,163,163,212,163,59,200, + 59,226,40,122,0,111,223,24,97,75,61,75,200,75,75,200, + 200,200,104,172,0,221,0,221,162,0,162,94,162,221,0,0, + 162,162,183,50,223,162,122,183,203,126,111,111,111,111,109,111, + 224,109,224,109,97,241,162,94,0,104,111,97,111,50,91,111, + 111,111,111,111,187,187,46,50,56,122,104,187,111,109,187,132, + 111,166,187,187,187,111,187,163,227,122,0,142,239,187,187,187, + 91,187,50,187,26,183,187,42,40,162,0,0,59,163,111,26, + 187,91,111,50,187,26,50,91,187,212,42,122,0,99,47,47, + 64,44,8,235,141,141,7,7,235,141,235,235,141,67,7,235, + 67,235,141,141,7,141,235,67,7,243,7,141,141,49,141,235, + 235,7,8,8,8,141,7,141,7,67,7,8,67,8,49,8, + 7,141,7,8,7,8,7,141,49,8,8,8,235,225,225,158, + 100,102,102,100,100,100,102,100,102,102,100,102,100,102,100,100, + 102,100,100,74,100,74,100,74,100,33,74,100,74,140,100,100, + 100,74,100,100,88,153,224,164,40,162,169,218,169,169,140,169, + 100,169,169,169,127,127,88,169,88,88,127,218,127,127,127,127, + 127,127,127,127,39,169,169,127,140,169,169,169,88,169,88,127, + 169,127,88,127,88,127,127,88,127,127,127,127,127,88,88,88, + 88,127,88,88,169,88,88,127,169,127,88,127,88,127,169,127, + 88,169,169,127,169,88,169,127,127,169,127,169,127,127,39,169, + 169,88,127,169,127,127,127,127,127,127,127,169,127,88,127,127, + 88,127,127,127,127,127,127,127,127,127,127,88,127,127,127,127, + 207,143,207,127,143,127,127,127,127,127,127,127,127,127,127,127, + 127,143,127,143,143,127,143,127,127,143,127,127,127,143,236,133, + 228,173,229,38,164,162,75,183,14,62,233,249,233,73,233,233, + 130,222,233,130,222,164,0,94,212,92,31,233,84,233,233,73, + 73,31,209,73,233,73,241,122,162,126,203,206,164,14,14,73, + 73,206,233,137,137,62,249,40,0,183,221,104,73,73,14,22, + 253,168,84,177,84,24,84,222,177,0,221,183,246,226,209,59, + 46,35,35,209,46,46,75,46,22,172,241,122,78,95,241,35, + 35,241,241,241,209,209,24,35,35,35,177,223,0,183,95,226, + 241,75,59,59,75,35,59,209,200,241,200,200,228,239,78,0, + 200,14,163,183,203,209,241,14,22,31,164,50,22,223,40,122, + 0,219,251,173,47,164,226,209,24,46,75,75,254,212,37,251, + 0,221,94,75,223,35,35,47,47,35,35,35,163,200,46,104, + 104,212,78,0,241,241,241,200,203,212,94,221,0,162,212,200, + 241,104,212,122,221,111,47,35,111,200,163,75,61,75,111,75, + 75,200,203,104,0,221,162,0,0,0,162,162,162,94,162,0, + 94,162,126,95,241,122,78,183,104,111,224,111,111,111,75,61, + 224,166,162,50,183,162,162,162,0,40,163,187,126,126,50,187, + 187,111,111,111,111,239,104,227,122,122,104,111,187,111,187,187, + 187,50,50,187,50,111,126,239,187,122,0,104,239,126,126,166, + 91,183,187,163,187,50,187,50,163,78,0,0,59,187,126,187, + 187,91,42,163,50,26,187,50,42,37,183,0,0,99,64,99, + 47,47,235,141,235,67,235,235,141,7,150,7,150,235,67,7, + 141,235,141,49,141,7,235,67,235,141,7,8,7,8,7,8, + 235,141,7,141,8,7,243,235,141,235,141,7,8,8,49,141, + 235,141,7,8,141,8,7,8,7,67,7,243,8,8,235,235, + 100,102,100,102,102,197,102,102,100,100,102,100,102,100,102,102, + 100,102,102,100,102,100,102,74,74,74,74,102,74,33,100,169, + 74,88,140,169,100,218,47,104,241,42,100,236,140,33,169,74, + 140,74,74,140,100,74,140,140,140,140,100,74,100,100,100,100, + 140,140,74,74,74,140,140,74,169,140,140,39,127,39,127,140, + 88,169,39,88,39,88,169,127,127,88,88,88,88,127,127,127, + 127,140,140,169,140,39,140,169,169,74,127,140,127,169,169,140, + 169,127,169,74,127,127,169,140,127,127,88,140,140,169,127,169, + 140,169,169,169,127,169,127,127,127,169,169,127,88,39,169,169, + 207,39,39,169,127,127,127,169,88,169,88,127,127,88,127,127, + 127,39,127,127,127,127,127,39,143,127,127,127,127,127,127,127, + 127,127,127,127,127,127,127,127,127,143,127,127,127,127,207,38, + 129,129,103,33,241,221,164,183,73,249,168,62,233,206,130,73, + 84,84,233,233,123,46,122,50,166,209,130,233,209,73,168,14, + 73,233,209,168,206,168,46,122,212,40,203,206,14,14,14,14, + 22,10,206,206,249,249,62,95,0,162,183,104,206,73,14,92, + 168,154,168,84,84,84,154,233,48,0,78,50,50,84,168,24, + 24,24,84,84,84,209,24,209,24,222,241,221,162,40,92,35, + 241,209,241,209,209,241,35,35,209,209,177,48,0,212,95,223, + 22,75,224,59,75,35,75,200,35,59,200,209,129,215,50,0, + 104,92,162,94,241,164,209,14,212,37,22,212,50,190,241,78, + 162,40,190,138,26,35,24,24,209,209,177,97,200,241,104,129, + 0,183,183,241,34,64,35,35,35,35,35,24,75,75,200,46, + 24,212,78,0,104,203,239,94,0,0,0,162,162,162,246,212, + 94,212,246,162,162,126,46,35,163,61,163,61,200,111,200,109, + 109,97,212,212,0,221,215,221,221,0,0,0,0,246,212,162, + 162,221,221,183,94,122,221,183,97,111,111,111,224,109,111,224, + 109,111,212,0,0,221,221,162,0,212,187,95,187,187,126,163, + 111,111,254,111,109,50,75,239,122,0,200,111,111,109,187,111, + 111,187,126,26,187,163,187,212,95,122,42,104,187,187,187,187, + 187,187,126,50,187,126,187,187,97,94,0,0,47,163,187,91, + 50,187,163,26,91,50,91,187,183,212,183,122,0,99,44,47, + 47,47,7,141,7,235,141,235,12,235,12,235,8,235,235,67, + 67,7,8,141,49,141,235,67,7,141,67,141,235,243,235,141, + 7,8,7,8,141,49,8,7,8,7,8,235,8,141,7,8, + 235,141,235,8,67,243,67,141,7,141,235,8,67,8,49,8, + 100,102,100,100,100,100,100,102,102,100,102,102,102,100,100,102, + 100,100,102,74,102,100,100,102,100,102,169,100,74,74,71,100, + 100,100,74,100,169,218,47,164,203,221,74,188,169,140,140,33, + 140,169,74,140,169,140,140,74,100,140,169,140,140,140,140,74, + 74,140,140,140,140,140,169,140,33,140,140,140,140,140,169,39, + 140,140,169,169,127,140,74,169,127,39,127,127,127,140,169,140, + 88,169,169,33,140,127,140,127,133,74,169,102,140,169,33,39, + 74,133,38,140,143,89,143,127,143,236,127,102,74,127,133,74, + 74,127,127,169,127,169,127,127,143,207,88,39,127,127,127,169, + 169,88,39,169,88,127,127,127,127,127,39,169,127,169,127,127, + 39,127,127,39,127,127,127,127,127,127,127,127,127,127,127,127, + 127,127,127,127,127,127,127,127,127,127,127,127,127,127,143,133, + 228,229,129,38,164,0,37,212,164,233,130,31,130,31,233,233, + 233,233,233,31,130,241,221,163,212,22,84,168,73,168,31,206, + 130,206,206,168,31,73,241,0,239,40,50,233,233,206,233,31, + 31,233,249,237,237,62,31,40,0,212,221,104,233,31,31,31, + 31,228,249,31,31,222,123,123,177,162,94,227,212,177,31,222, + 222,168,222,168,168,130,168,168,168,177,104,239,183,126,46,178, + 24,209,209,209,24,24,24,84,226,178,226,177,0,239,126,226, + 209,209,209,35,35,24,24,209,35,209,209,46,222,239,95,0, + 241,14,241,241,14,241,209,14,164,203,241,241,14,142,164,183, + 221,200,164,104,75,24,24,24,226,24,84,46,35,24,241,48, + 162,94,94,46,29,24,44,24,64,24,44,24,75,35,35,24, + 104,50,183,122,40,94,94,78,162,221,246,50,94,162,212,40, + 162,212,94,221,221,126,200,35,224,75,75,75,75,75,75,75, + 75,163,94,215,0,0,94,162,221,0,0,221,0,246,104,40, + 212,94,162,221,94,162,94,227,95,111,224,111,224,111,75,61, + 109,109,187,94,215,122,0,0,0,0,0,183,187,50,187,37, + 111,111,224,111,111,163,104,187,122,221,241,111,111,111,111,111, + 163,187,187,50,187,111,163,50,126,183,122,46,187,132,132,187, + 187,111,187,91,183,187,187,183,40,42,122,0,47,50,187,187, + 187,187,187,50,26,183,50,91,183,163,187,0,0,47,44,64, + 44,44,141,235,141,199,141,235,8,235,8,7,67,235,7,141, + 7,67,8,67,67,67,7,141,7,182,67,8,7,141,7,182, + 49,141,7,141,8,67,141,7,254,7,243,7,141,141,67,8, + 7,67,67,8,7,141,67,141,67,67,235,8,7,150,49,182, + 102,100,102,102,102,102,102,102,100,102,100,102,102,102,102,102, + 102,102,74,102,33,71,102,74,71,33,102,102,74,71,33,169, + 74,71,100,169,169,236,95,40,203,0,74,143,140,74,74,74, + 74,74,74,33,144,33,74,169,140,74,140,140,140,140,140,169, + 140,33,140,169,74,33,140,74,140,33,169,102,33,140,33,74, + 140,33,140,140,133,133,151,102,127,114,127,127,127,169,71,33, + 140,169,144,127,140,140,88,71,15,71,133,33,102,140,114,38, + 186,15,133,159,127,102,102,58,133,47,29,15,38,71,245,15, + 25,133,140,39,169,127,169,100,71,140,127,169,140,169,140,127, + 39,127,169,127,207,207,143,207,169,169,169,169,127,127,169,169, + 169,169,169,39,127,127,39,127,39,39,127,127,127,39,127,127, + 127,127,127,127,127,127,127,127,127,127,88,127,127,127,207,133, + 228,173,129,197,104,0,203,221,183,221,246,0,221,0,221,215, + 221,162,122,0,221,212,0,163,246,183,94,221,215,221,221,221, + 215,246,221,221,162,162,40,162,239,94,122,40,104,40,40,164, + 40,40,40,212,50,94,162,212,0,166,221,221,246,94,183,215, + 50,212,40,215,221,212,221,162,94,0,227,50,0,215,221,183, + 221,221,221,94,221,215,221,221,221,246,75,40,94,221,50,215, + 94,94,212,163,40,212,246,221,94,221,94,203,0,126,40,212, + 183,183,162,50,42,50,239,94,50,50,227,221,200,227,40,0, + 215,221,183,94,221,215,221,40,215,183,94,246,246,162,40,183, + 94,221,221,215,0,221,0,221,162,221,221,122,221,162,162,37, + 0,183,183,0,0,56,162,122,162,42,162,122,162,162,162,0, + 94,227,50,78,221,162,162,162,162,221,221,221,162,162,0,0, + 0,0,221,122,0,221,221,221,162,162,162,42,50,42,42,42, + 162,162,0,162,0,0,0,0,0,0,162,212,50,94,164,164, + 212,94,162,0,215,78,162,162,221,162,78,162,162,42,183,246, + 212,94,221,221,221,246,221,0,0,221,162,0,162,221,183,42, + 162,162,122,0,56,0,94,94,183,0,227,162,78,162,78,78, + 162,162,162,122,162,162,122,221,94,78,0,246,162,162,162,78, + 162,162,162,0,162,162,162,162,162,94,183,0,166,0,0,0, + 162,162,162,122,162,162,0,0,162,162,183,183,0,64,44,44, + 47,44,8,7,7,8,235,67,7,235,67,141,7,235,235,141, + 235,7,141,141,67,141,67,49,141,67,141,67,67,67,150,235, + 141,49,67,235,243,8,141,141,49,150,7,67,235,12,8,141, + 150,7,150,7,8,235,12,8,141,12,7,141,235,141,235,243, + 102,100,102,102,102,102,102,102,102,102,102,102,102,100,102,102, + 102,102,71,102,102,74,102,102,74,71,100,102,100,102,71,169, + 100,102,74,100,127,218,59,40,40,122,248,153,169,140,169,74, + 74,33,144,74,140,140,140,140,169,74,33,74,33,140,169,140, + 140,74,74,140,140,74,140,140,140,74,71,71,71,71,71,74, + 140,169,38,133,15,15,248,140,33,74,127,127,140,127,127,140, + 39,169,169,33,169,127,127,140,151,15,133,39,143,143,236,127, + 71,15,224,96,235,67,7,235,215,95,215,141,34,34,192,42, + 152,126,15,74,127,127,140,102,38,71,236,127,169,88,169,39, + 169,127,140,88,74,133,155,207,127,169,127,140,169,127,39,127, + 39,127,39,127,39,127,140,169,39,127,39,39,39,39,39,39, + 39,140,169,127,39,127,169,88,127,127,39,127,169,127,143,38, + 129,151,173,197,104,0,50,183,20,190,172,172,142,104,219,15, + 172,29,29,190,142,212,221,163,94,29,172,142,142,29,142,0, + 20,172,172,172,15,129,212,94,126,40,87,142,172,29,172,172, + 162,18,133,15,172,172,229,212,0,239,162,47,173,15,172,172, + 34,40,47,15,172,29,142,172,47,0,227,94,227,20,142,29, + 172,29,142,40,29,172,29,142,34,47,0,40,183,0,29,29, + 172,44,142,46,183,29,142,29,142,29,142,122,221,126,50,47, + 15,20,15,15,15,47,95,29,142,142,142,142,183,162,75,122, + 166,142,142,44,142,47,47,215,142,142,142,142,142,47,162,227, + 50,162,20,159,173,192,20,15,166,95,142,99,47,47,142,227, + 0,94,162,95,142,47,47,47,142,40,59,47,47,142,142,34, + 40,56,221,221,122,212,212,246,221,56,221,221,0,0,0,0, + 0,0,0,0,221,0,215,95,166,95,97,95,162,59,200,47, + 95,215,221,0,162,0,0,0,0,0,0,40,212,94,164,164, + 104,40,162,162,162,221,221,221,183,40,95,95,97,212,162,246, + 40,221,0,0,0,221,221,0,0,94,212,221,0,0,0,221, + 42,126,95,166,166,166,183,0,166,0,122,183,183,183,183,183, + 221,162,183,183,183,183,183,56,221,183,162,0,42,183,221,183, + 221,122,0,183,56,183,122,183,78,162,187,0,221,78,183,183, + 162,183,0,0,122,183,162,122,183,0,162,183,0,47,44,47, + 44,47,235,8,235,243,145,141,235,141,235,141,235,141,235,141, + 235,67,8,8,7,141,235,7,141,7,141,67,141,7,17,7, + 254,7,141,7,150,8,67,150,235,141,67,141,7,243,141,67, + 150,235,141,7,141,7,243,141,7,150,49,141,7,8,7,150, + 197,102,100,100,102,197,102,102,102,102,102,102,102,102,102,100, + 102,74,102,74,102,102,100,102,74,102,102,74,102,100,102,102, + 74,74,100,169,100,188,95,37,203,0,102,143,74,33,74,74, + 74,140,74,100,74,33,74,74,74,140,140,140,127,88,127,127, + 127,33,140,169,140,140,140,74,140,74,74,133,102,102,127,169, + 169,114,71,133,15,142,64,71,39,71,74,127,127,169,169,127, + 33,140,127,89,143,127,143,143,140,245,248,159,127,71,102,58, + 133,44,227,122,122,8,141,42,122,254,95,254,142,64,95,254, + 219,47,203,133,217,133,169,140,140,127,169,169,39,127,169,140, + 169,127,153,140,171,44,224,152,108,127,169,88,140,127,169,169, + 140,169,140,39,127,127,127,127,39,39,127,39,39,127,39,169, + 169,127,127,169,39,127,127,39,127,127,169,169,127,169,89,133, + 228,228,15,33,241,0,203,94,20,135,172,48,48,48,0,172, + 48,172,48,172,48,50,162,37,246,142,15,172,172,172,15,94, + 172,15,172,190,172,229,163,162,40,40,65,47,172,15,172,173, + 40,190,47,172,172,172,173,163,0,239,0,47,15,15,20,172, + 172,104,95,172,172,29,172,172,142,0,95,94,215,29,29,172, + 29,172,172,166,15,172,172,29,172,142,162,75,50,0,142,192, + 47,172,34,172,246,15,29,172,29,142,29,0,122,75,42,172, + 208,15,15,15,105,142,95,29,29,29,29,172,200,162,59,122, + 40,15,142,192,34,172,29,40,80,172,172,192,172,15,94,183, + 215,0,191,161,108,80,15,105,132,47,142,142,34,142,171,95, + 94,183,221,47,15,172,172,15,172,142,145,172,29,80,172,34, + 95,0,215,122,212,200,212,246,94,0,0,0,0,221,94,0, + 0,0,0,0,0,0,166,254,47,47,47,29,215,34,29,34, + 29,40,246,0,221,0,0,0,0,0,221,203,164,246,104,104, + 190,203,94,221,94,122,162,0,95,142,225,29,47,40,212,221, + 0,0,0,0,221,0,0,0,0,0,162,212,162,0,0,0, + 215,47,34,44,47,34,95,162,183,0,166,64,47,47,64,47, + 99,215,47,47,64,99,47,47,26,50,122,221,44,59,47,99, + 47,95,183,59,47,254,47,99,224,162,187,0,42,59,59,254, + 47,99,111,162,47,99,254,47,99,126,78,183,221,64,44,47, + 59,47,7,141,235,7,235,7,235,67,235,12,235,141,7,141, + 235,141,7,67,141,49,141,235,150,49,8,49,150,235,150,235, + 67,67,67,141,49,243,67,243,67,67,7,141,67,7,12,67, + 150,67,235,67,67,182,7,150,67,12,235,182,67,182,182,49, + 102,100,102,102,100,102,102,102,102,102,102,102,102,102,102,102, + 102,38,102,74,102,102,102,33,71,102,102,74,74,74,33,74, + 169,100,88,74,100,188,59,37,203,0,25,236,140,140,74,74, + 74,33,144,74,74,74,74,140,33,74,88,169,127,140,169,127, + 127,39,140,33,140,33,140,33,144,140,38,36,127,140,140,33, + 169,127,140,133,142,99,225,71,127,133,74,102,140,143,127,236, + 236,143,127,140,102,58,186,34,192,95,132,96,235,67,7,235, + 122,56,122,78,0,182,145,17,219,221,183,221,183,183,215,162, + 0,221,40,47,44,224,245,143,169,127,140,169,127,127,169,127, + 140,108,47,47,221,132,102,58,127,127,39,127,140,39,140,88, + 127,143,127,127,127,39,39,39,140,140,140,140,127,140,127,39, + 127,140,127,127,140,169,140,169,169,127,127,140,127,88,143,133, + 173,228,129,33,104,0,203,215,172,173,48,172,190,48,0,172, + 172,172,172,172,48,212,221,50,183,47,172,172,172,190,48,246, + 47,172,190,172,190,172,212,78,40,50,47,142,172,172,142,15, + 246,83,173,142,172,172,15,212,0,50,221,95,15,172,172,29, + 142,47,95,172,29,172,29,29,142,0,163,94,215,29,142,29, + 142,142,172,166,34,29,142,142,29,142,0,95,246,0,142,47, + 47,142,47,29,215,172,142,142,142,47,142,221,56,200,212,192, + 15,15,15,172,186,47,40,190,142,142,142,34,142,162,200,0, + 95,29,47,47,47,47,47,40,142,142,142,47,142,172,221,212, + 221,221,15,180,254,180,192,161,40,254,47,47,47,142,192,40, + 221,183,0,47,29,192,47,192,172,47,47,142,47,142,47,47, + 215,0,94,162,215,40,122,0,212,94,162,221,221,40,227,0, + 162,221,122,0,0,0,215,215,141,95,95,47,215,47,47,142, + 44,47,95,162,221,94,221,162,94,94,40,104,40,246,40,221, + 40,40,221,0,0,0,0,0,166,47,47,47,40,215,246,94, + 221,162,0,0,122,0,0,0,0,0,221,246,94,0,0,0, + 0,215,95,47,47,214,99,162,183,0,95,47,254,254,99,254, + 95,187,254,254,99,95,254,47,56,166,122,215,64,254,95,99, + 47,95,227,141,141,95,141,254,95,162,183,0,183,254,254,254, + 254,47,166,122,141,95,141,95,95,95,162,183,0,64,44,44, + 59,47,67,235,235,7,99,7,235,141,235,141,7,150,7,141, + 145,67,67,141,7,67,8,7,243,49,243,49,150,49,8,141, + 67,67,49,141,235,243,141,141,67,67,67,67,141,235,150,67, + 141,141,49,141,7,141,49,141,141,8,67,67,67,49,141,235, + 100,88,100,100,102,102,197,102,102,102,102,102,102,102,102,102, + 102,74,102,102,102,102,102,74,102,74,102,102,248,102,240,240, + 159,159,100,74,188,247,142,203,241,0,102,127,100,74,74,74, + 74,74,74,169,140,140,169,140,39,127,127,39,169,127,127,140, + 39,127,39,169,140,39,169,140,102,120,133,38,140,88,127,39, + 127,169,127,71,20,95,47,38,71,229,15,25,245,248,159,127, + 71,102,184,192,7,235,221,221,183,47,0,0,122,8,67,122, + 0,126,26,0,0,183,243,219,122,219,215,227,0,0,78,183, + 0,122,122,183,126,25,143,127,127,143,143,127,143,143,127,127, + 133,20,99,183,0,122,12,74,236,39,127,169,33,140,127,127, + 127,119,34,127,236,127,169,169,127,169,127,127,140,127,140,127, + 140,127,140,169,127,127,33,169,127,140,169,127,140,127,143,133, + 129,129,129,21,226,0,241,183,29,48,251,142,190,48,221,172, + 172,190,190,190,172,94,122,203,246,142,172,142,190,190,15,162, + 142,172,142,142,142,43,104,122,163,221,142,34,142,142,142,172, + 246,180,173,142,142,190,15,40,0,126,221,40,172,172,142,190, + 142,142,141,172,29,142,172,142,104,0,126,40,215,29,47,142, + 142,47,172,215,47,172,142,142,142,104,0,183,94,0,172,47, + 142,47,47,172,215,192,142,47,29,142,29,221,221,95,246,142, + 15,80,15,180,191,142,141,142,47,142,47,142,142,0,200,0, + 141,172,142,47,47,142,142,141,142,142,142,142,47,29,94,183, + 183,122,15,15,114,34,172,120,40,47,47,47,47,47,29,200, + 0,94,0,47,142,172,47,64,180,142,47,47,199,142,47,47, + 47,0,239,221,221,227,56,162,40,203,246,221,246,200,95,162, + 221,94,162,0,0,0,0,141,95,47,47,142,141,47,142,192, + 34,29,171,94,162,94,221,142,40,40,246,94,0,162,162,221, + 40,95,215,221,162,162,0,246,246,215,221,221,221,215,94,246, + 246,215,221,0,0,0,0,0,0,0,0,221,162,162,0,221, + 0,221,246,141,47,47,47,162,126,0,215,95,95,47,47,47, + 47,215,47,254,47,254,99,59,221,166,0,183,47,95,47,95, + 95,95,166,166,95,95,254,47,95,78,126,0,215,95,99,95, + 254,47,183,122,95,254,95,254,254,111,78,183,0,64,64,47, + 47,47,8,145,141,145,141,235,235,67,235,67,235,243,145,141, + 235,141,49,8,141,235,67,235,150,235,150,235,150,235,235,141, + 7,8,235,8,235,8,141,8,182,67,141,235,8,235,8,141, + 8,141,49,141,235,8,145,8,141,8,141,49,141,235,8,235, + 133,133,245,133,88,102,102,102,102,102,102,38,102,102,102,102, + 102,102,102,102,102,71,102,102,102,102,102,102,127,88,176,128, + 185,179,247,247,240,38,47,40,212,0,245,207,74,33,74,33, + 74,33,140,88,169,127,169,38,217,127,127,140,169,140,127,169, + 169,169,127,127,169,169,140,33,102,133,133,248,169,127,127,143, + 127,143,143,236,151,95,141,34,192,192,26,171,26,187,152,235, + 67,7,235,219,67,122,0,166,183,122,0,0,0,141,145,219, + 219,122,122,0,0,0,122,122,42,219,227,40,42,0,0,0, + 0,0,0,0,183,182,102,240,127,71,71,236,186,34,171,127, + 245,95,132,183,122,122,67,188,83,245,248,127,39,127,39,127, + 89,133,56,71,245,127,127,127,39,169,140,127,140,127,140,127, + 140,127,127,140,169,127,39,169,33,39,169,33,127,127,127,38, + 228,129,135,33,226,0,241,94,29,190,172,190,142,48,0,172, + 172,142,29,223,190,50,78,203,215,142,172,142,190,142,129,221, + 142,190,142,190,48,98,14,0,97,246,172,142,142,172,142,172, + 212,254,47,142,172,172,172,40,0,212,94,95,15,190,142,142, + 142,104,40,142,172,142,142,142,104,56,126,40,215,47,142,190, + 47,29,172,215,142,142,142,47,142,142,0,239,215,0,34,47, + 47,142,47,142,40,142,47,142,142,47,142,221,221,200,212,192, + 180,20,20,15,151,47,40,47,142,47,47,47,142,0,104,0, + 47,142,142,47,47,47,47,40,47,47,47,47,142,142,221,215, + 94,162,71,55,250,192,172,114,142,254,142,47,180,225,172,95, + 221,227,221,47,47,142,47,47,44,142,141,142,47,47,47,47, + 95,221,227,162,183,40,221,50,40,212,203,162,94,40,200,227, + 183,227,162,0,0,0,40,95,47,47,47,192,246,47,40,40, + 40,215,47,94,122,0,0,215,221,221,94,221,221,221,97,203, + 40,162,221,221,215,221,0,246,246,221,221,215,221,0,0,0, + 0,0,94,212,94,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,221,246,246,215,221,221,162,221,221,0,221,221,215, + 166,95,254,95,47,141,47,141,122,187,0,215,47,254,254,47, + 95,40,166,95,254,254,141,141,126,162,187,0,183,47,141,95, + 254,95,166,221,95,95,95,95,254,227,162,187,0,64,44,47, + 44,47,141,145,7,199,141,235,141,7,235,141,235,243,235,141, + 145,141,7,67,141,49,141,235,12,7,150,235,243,67,235,150, + 235,12,235,141,7,182,243,141,141,7,150,7,141,49,8,8, + 141,141,49,150,49,141,49,141,8,141,8,49,150,49,141,49, + 91,91,91,91,102,88,100,100,100,102,102,102,102,102,102,102, + 102,102,38,102,74,38,102,102,102,102,102,102,74,66,189,32, + 32,93,135,186,74,122,212,241,75,221,43,184,74,74,71,74, + 88,39,88,127,143,74,192,64,182,15,240,127,169,88,169,39, + 127,140,169,248,38,140,127,71,133,133,151,133,245,248,159,127, + 71,102,58,186,47,166,59,47,47,95,254,187,99,0,0,122, + 8,67,122,132,145,17,26,78,0,0,0,0,0,183,243,26, + 56,122,221,78,0,0,0,0,0,42,50,94,94,122,0,0, + 0,0,122,221,122,243,219,152,235,67,7,235,221,221,0,25, + 15,126,126,183,187,122,145,247,252,183,171,89,127,127,127,71, + 96,225,0,67,26,119,89,33,140,39,127,140,127,140,127,140, + 169,140,140,127,127,169,169,39,127,169,140,39,88,140,127,102, + 173,129,129,72,226,0,241,215,142,190,190,223,190,48,122,172, + 172,172,190,142,48,212,162,241,212,47,172,190,142,190,15,94, + 47,172,142,190,251,195,162,221,95,215,173,190,190,142,190,15, + 40,47,142,190,105,172,129,50,122,50,221,215,15,15,47,190, + 142,47,40,29,142,172,172,172,200,221,163,215,215,47,47,142, + 190,142,172,246,192,172,172,47,142,47,162,126,94,221,142,142, + 47,142,47,172,215,172,142,47,142,47,142,94,0,104,246,192, + 15,80,15,180,191,142,141,142,47,190,47,142,142,0,47,221, + 141,142,47,142,47,47,190,141,142,47,142,47,47,172,50,183, + 212,0,69,172,80,180,15,208,40,47,47,145,47,142,29,47, + 162,183,0,99,180,142,142,47,142,142,47,47,142,47,47,142, + 47,162,94,0,212,40,215,246,40,40,203,50,221,94,95,95, + 95,47,94,122,183,221,47,47,47,47,142,172,40,141,141,215, + 141,215,0,0,0,0,0,221,215,183,246,162,94,215,40,40, + 203,104,246,221,221,221,221,0,221,0,0,0,221,0,0,221, + 0,221,221,212,203,50,0,0,0,122,221,0,0,0,0,0, + 0,0,0,0,0,0,0,0,221,221,221,227,221,0,0,0, + 221,215,141,40,141,95,254,47,183,227,122,215,47,95,95,47, + 95,126,166,95,95,95,95,59,95,94,166,0,221,95,95,95, + 254,47,183,122,95,141,95,95,254,187,94,166,0,64,34,47, + 44,47,7,235,141,235,67,145,150,235,141,67,7,8,235,67, + 145,141,7,141,67,235,141,235,150,49,8,49,141,141,235,150, + 235,12,235,67,99,49,12,182,17,99,17,235,67,67,235,12, + 67,12,67,12,235,67,67,49,12,141,150,67,12,49,8,99, + 0,0,26,26,139,234,152,245,133,102,102,102,102,38,102,38, + 102,102,102,102,102,102,102,71,102,102,71,102,127,66,118,157, + 32,52,38,133,100,234,47,212,163,221,66,247,74,140,74,134, + 169,39,127,108,47,47,215,219,102,58,127,127,127,39,140,169, + 127,140,127,245,158,25,88,71,133,133,172,234,219,219,152,145, + 67,7,235,183,215,183,215,219,187,215,122,0,162,0,0,0, + 141,145,219,122,150,219,122,122,0,0,0,0,0,0,56,221, + 42,219,183,0,0,0,0,221,221,183,162,122,0,0,0,0, + 0,122,183,166,78,64,162,0,122,8,67,122,0,166,17,99, + 47,95,227,132,56,162,162,17,158,162,122,245,58,236,127,35, + 95,221,219,183,8,248,74,143,140,169,127,140,33,39,127,140, + 33,127,140,140,127,127,140,169,169,33,140,127,169,127,88,38, + 228,129,135,21,226,0,241,212,142,172,190,190,223,48,56,190, + 172,190,190,142,190,50,78,241,212,47,172,142,190,142,48,246, + 142,172,142,190,190,92,61,94,75,246,15,190,142,142,142,129, + 40,47,190,47,173,18,18,122,122,95,94,215,142,18,40,190, + 142,47,215,142,142,142,47,142,200,215,75,40,215,142,47,142, + 142,142,172,215,142,142,47,142,142,142,0,75,212,221,142,47, + 142,47,142,172,215,47,142,142,47,142,47,221,122,47,50,34, + 15,172,20,15,15,142,40,47,47,142,47,47,104,0,104,0, + 95,190,47,142,47,142,47,40,172,47,47,142,47,142,246,183, + 212,221,15,199,29,15,172,180,111,47,47,47,47,47,34,40, + 221,212,221,47,47,47,142,47,199,47,47,47,47,47,142,192, + 95,0,212,221,183,95,95,241,47,246,40,246,94,215,40,95, + 47,47,94,122,183,183,47,142,47,192,47,80,246,215,40,40, + 215,104,40,0,221,162,0,50,241,40,40,221,221,162,227,47, + 142,104,246,221,122,0,94,221,246,94,221,227,126,221,0,215, + 215,215,221,0,221,246,221,0,0,0,0,0,0,0,221,0, + 0,183,0,0,0,0,0,0,162,0,221,95,40,219,183,94, + 183,215,99,47,254,47,141,95,221,227,122,183,141,95,254,99, + 47,227,166,95,95,95,254,95,95,183,183,0,183,95,95,95, + 141,95,183,78,95,95,141,95,95,227,42,187,0,44,44,44, + 142,47,145,235,141,235,141,145,243,235,141,7,254,67,235,8, + 235,141,49,141,49,7,141,235,141,235,141,67,235,8,7,141, + 49,8,67,67,150,235,243,67,150,141,8,182,235,12,235,150, + 182,243,141,8,182,235,150,145,243,67,141,141,8,141,182,243, + 0,42,219,26,50,26,91,12,91,235,102,102,25,102,102,102, + 102,102,102,102,102,71,102,102,74,33,100,100,169,143,83,179, + 176,106,247,181,58,142,142,164,241,0,133,240,127,74,140,153, + 127,39,133,29,99,183,0,42,12,74,236,39,127,169,33,140, + 127,127,127,245,133,134,161,66,144,15,34,95,99,0,0,122, + 8,67,122,0,132,215,221,0,0,42,221,0,0,0,0,0, + 42,150,42,0,122,183,122,219,0,122,0,0,0,0,0,0, + 0,122,187,122,0,0,0,122,215,183,122,122,0,0,0,0, + 0,183,219,42,162,122,0,0,0,141,145,17,26,221,0,221, + 95,95,126,166,254,215,227,162,0,122,0,171,247,108,171,221, + 0,122,219,0,150,192,74,159,143,169,140,127,39,169,39,127, + 114,33,169,140,140,127,33,140,127,39,127,33,169,140,207,133, + 228,229,135,21,226,0,104,183,29,48,172,190,190,15,56,172, + 29,190,142,142,177,163,94,241,40,47,172,190,142,190,15,94, + 142,172,172,142,190,172,37,246,46,215,142,142,142,190,190,15, + 104,141,172,40,201,118,23,78,0,40,246,132,173,83,172,47, + 142,142,141,142,142,172,142,172,104,221,59,239,40,142,142,172, + 142,34,172,215,142,142,190,47,142,47,162,95,212,0,172,142, + 47,47,47,172,254,142,47,190,47,142,142,94,162,59,221,142, + 57,172,171,180,15,47,47,47,47,142,47,142,142,0,47,162, + 141,180,47,47,142,47,142,254,47,47,47,47,142,34,50,239, + 227,0,191,173,244,192,15,191,47,47,47,47,47,47,34,200, + 0,239,122,47,64,180,47,47,142,142,47,47,47,47,47,142, + 47,0,95,162,239,142,47,40,221,162,162,0,0,183,40,97, + 126,95,221,122,221,215,47,47,47,47,142,172,215,215,215,246, + 221,0,0,50,50,94,162,221,221,221,162,0,0,0,0,221, + 215,221,215,162,0,0,246,246,94,246,0,40,95,40,0,215, + 166,183,221,221,0,162,94,221,0,0,0,0,0,0,221,221, + 0,227,183,0,0,162,212,94,40,0,122,183,215,215,221,221, + 221,221,40,254,47,95,99,95,183,187,0,215,47,95,95,95, + 95,95,227,141,95,95,95,254,239,183,239,162,221,141,95,95, + 95,47,221,42,95,95,95,254,254,183,94,166,0,64,34,47, + 47,47,145,67,235,141,7,235,8,235,17,235,150,235,7,141, + 145,141,49,141,67,235,141,235,12,7,141,150,235,141,235,182, + 141,49,141,235,12,235,235,8,182,150,67,150,235,12,235,67, + 8,182,150,67,243,235,17,235,235,8,67,150,49,12,67,17, + 0,0,0,0,0,187,243,187,12,235,102,102,102,133,102,133, + 102,102,102,102,102,102,102,102,102,71,74,33,140,127,159,83, + 161,66,161,59,102,19,35,40,203,0,133,240,88,33,140,133, + 15,127,151,141,141,221,221,122,67,188,83,245,248,127,39,127, + 140,127,38,43,77,45,194,170,86,173,94,0,221,0,0,0, + 141,145,219,183,42,40,126,183,0,0,0,0,0,0,0,0, + 0,122,122,0,0,0,0,42,243,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,122,215,219,162,122,122,0,0,122, + 162,183,183,166,221,183,0,0,0,183,150,219,42,0,0,221, + 215,95,40,166,132,126,59,0,0,0,0,133,236,25,171,0, + 0,78,0,0,56,243,8,186,74,143,127,127,39,127,169,88, + 127,39,127,33,140,127,127,127,169,169,140,140,169,169,127,133, + 251,173,229,72,226,0,241,94,142,190,190,172,190,48,162,190, + 190,190,142,190,177,212,221,241,215,47,172,190,142,190,129,221, + 172,172,172,29,172,15,22,162,203,40,172,142,172,190,142,15, + 40,104,172,47,173,250,19,162,122,126,94,215,86,250,250,190, + 190,104,40,172,142,172,47,172,142,221,97,203,215,142,142,199, + 190,142,172,141,190,34,142,142,142,142,0,95,163,122,142,47, + 47,142,47,172,40,142,47,142,47,142,172,215,221,200,94,29, + 180,171,171,15,191,104,40,142,47,142,142,29,142,0,200,162, + 95,34,47,142,47,47,180,95,142,142,47,47,47,172,215,215, + 40,221,15,144,173,172,15,15,40,47,47,47,47,47,142,95, + 221,239,162,47,47,47,142,142,180,47,141,142,47,47,47,47, + 47,0,75,162,95,172,47,215,221,221,0,221,183,122,221,40, + 95,95,94,122,183,221,34,47,47,47,141,40,221,221,162,0, + 0,0,0,162,221,94,221,221,0,0,0,0,0,0,0,183, + 166,221,0,0,0,0,0,221,0,0,0,56,215,40,183,47, + 95,40,221,0,162,0,0,0,0,183,227,78,215,166,95,221, + 0,94,95,95,221,183,227,162,183,0,221,221,0,221,0,0, + 0,221,221,221,215,40,254,47,94,187,0,183,99,95,95,47, + 141,215,166,95,95,141,95,95,95,94,219,0,183,95,40,141, + 95,47,183,183,95,95,254,95,95,227,183,183,0,44,44,47, + 34,142,235,141,235,141,49,141,67,235,17,235,12,235,141,67, + 235,141,49,141,67,49,243,235,8,67,235,150,235,243,49,67, + 150,49,141,235,243,141,145,150,67,219,67,243,235,150,67,235, + 141,67,219,67,243,235,150,141,235,150,182,166,67,150,67,182, + 0,0,0,122,122,132,158,4,235,49,102,102,102,102,102,102, + 102,102,102,102,38,100,71,33,100,102,100,100,88,143,127,236, + 66,247,88,0,251,70,224,212,75,26,38,240,127,169,140,15, + 40,217,15,40,187,132,17,122,158,247,252,227,171,89,127,127, + 127,245,222,242,128,32,117,231,23,79,73,22,162,0,0,0, + 42,243,26,0,183,94,246,162,122,0,0,0,0,0,0,0, + 122,122,122,0,0,0,0,0,122,122,0,0,0,0,0,0, + 0,0,0,0,0,0,0,122,162,183,56,122,122,0,0,122, + 221,94,183,183,183,215,0,0,0,0,122,56,122,26,122,0, + 215,95,95,239,183,221,0,122,122,0,122,34,171,42,166,0, + 122,0,122,0,221,42,0,254,186,39,39,38,140,102,140,236, + 127,127,143,236,143,236,143,127,127,127,33,127,169,39,39,38, + 228,229,129,72,177,0,241,221,47,177,190,48,48,48,221,29, + 190,142,142,142,177,212,78,209,212,47,190,142,190,190,48,94, + 47,172,172,172,190,48,203,221,163,215,47,142,190,142,190,172, + 40,47,172,142,190,15,173,50,0,97,40,246,47,47,15,142, + 190,47,141,142,29,172,142,29,104,94,95,40,215,47,47,142, + 47,190,15,40,47,142,142,142,142,142,162,163,40,42,180,47, + 142,142,47,142,47,142,47,142,142,47,142,50,221,166,221,29, + 57,172,15,15,208,142,40,47,142,47,47,142,142,0,200,162, + 47,47,47,47,47,47,34,40,47,47,47,47,47,142,212,183, + 163,50,124,15,80,15,180,208,40,47,47,47,47,47,44,104, + 221,239,221,47,142,47,47,99,47,190,40,235,180,47,47,142, + 142,0,95,221,40,47,212,221,122,122,221,78,212,183,0,0, + 215,40,0,122,0,56,47,142,47,246,246,246,246,162,221,0, + 0,0,0,0,221,246,246,221,0,0,0,0,0,0,0,183, + 183,122,0,0,0,0,0,0,0,0,221,221,221,246,246,95, + 47,95,221,0,0,0,0,0,0,56,95,59,59,47,47,95, + 0,215,95,59,95,212,212,0,0,162,221,122,0,0,0,0, + 0,0,221,221,221,0,221,95,227,239,0,215,47,95,141,95, + 47,166,40,95,95,95,95,254,166,227,183,0,56,95,95,95, + 141,59,221,42,95,95,254,254,59,126,78,227,0,64,44,47, + 47,214,235,8,235,12,235,141,235,235,12,235,150,235,141,8, + 235,243,7,141,67,235,150,235,141,141,67,17,235,150,235,49, + 150,235,182,49,49,141,235,243,99,150,182,182,67,235,141,145, + 243,182,150,182,182,49,49,141,145,243,67,132,99,182,243,49, + 0,0,0,0,0,0,42,99,234,158,102,102,102,102,102,133, + 102,102,102,102,102,102,102,102,100,33,100,88,88,88,88,143, + 66,161,135,0,173,98,40,212,40,122,133,247,88,88,127,186, + 59,99,47,95,215,166,183,0,122,187,158,122,0,245,71,173, + 15,50,162,122,223,66,106,242,130,75,187,50,94,162,0,0, + 0,122,0,162,0,162,122,0,0,0,0,0,0,122,122,122, + 122,122,0,0,0,0,0,0,122,122,0,0,0,0,0,0, + 0,0,0,122,0,122,0,122,221,221,122,0,0,122,0,122, + 122,162,162,0,0,0,0,0,0,0,0,0,0,122,42,0, + 246,40,95,246,215,183,122,122,0,0,0,0,187,0,0,0, + 0,0,0,0,0,183,0,0,12,248,133,25,245,133,15,102, + 240,127,71,102,236,133,34,171,127,240,207,140,33,114,127,133, + 129,129,135,21,226,0,203,221,215,203,203,241,104,226,0,203, + 241,104,104,104,92,212,221,200,50,183,200,75,75,200,104,221, + 95,40,47,47,104,29,212,221,50,40,141,40,47,40,104,142, + 40,215,40,104,95,203,47,163,221,40,227,221,215,221,246,246, + 95,40,221,40,95,47,47,47,40,212,126,40,221,40,40,40, + 141,47,47,221,95,47,40,40,40,95,221,163,163,0,59,95, + 47,254,47,47,40,47,47,47,47,47,47,50,221,239,50,29, + 15,15,180,15,15,47,40,141,47,47,47,40,142,0,200,50, + 40,47,40,141,47,40,47,215,40,47,40,40,141,104,246,215, + 50,42,217,105,15,15,208,120,40,40,47,254,254,47,254,95, + 221,187,221,254,47,47,47,40,47,47,254,47,254,47,47,47, + 95,0,212,221,183,246,94,94,221,221,221,0,0,0,0,0, + 183,227,221,42,221,221,99,47,40,221,221,94,50,246,221,221, + 0,0,221,0,221,221,162,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,221,221,94,40,95,95,163,47, + 95,40,50,0,0,0,0,0,0,122,215,95,141,95,95,95, + 227,227,40,40,215,246,221,221,0,0,221,162,0,221,122,221, + 221,221,215,246,40,212,94,162,221,183,0,215,95,141,40,141, + 40,187,166,95,215,95,40,141,215,183,50,0,183,95,95,95, + 95,95,183,183,95,95,95,95,95,126,42,183,0,64,44,34, + 44,142,67,141,235,141,235,8,235,235,150,235,12,235,141,67, + 235,132,67,141,67,235,12,235,67,67,49,150,235,141,99,67, + 141,99,141,49,235,141,235,182,182,141,99,67,182,235,141,235, + 182,182,141,182,67,99,235,243,141,99,182,182,235,141,235,182, + 0,0,0,0,0,0,0,122,91,139,102,102,102,102,102,102, + 102,102,102,102,102,102,102,100,102,74,33,88,88,88,88,218, + 66,223,172,0,40,137,183,75,75,122,102,240,127,127,39,102, + 95,183,95,95,126,166,254,183,227,0,0,122,0,64,142,95, + 183,0,0,0,183,24,20,34,59,163,221,221,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,122,122, + 122,0,0,0,0,0,0,0,0,122,122,0,0,0,0,0, + 0,0,0,0,122,0,0,122,122,122,122,122,0,0,0,0, + 122,221,221,221,0,0,0,0,0,0,0,0,0,0,0,0, + 122,227,111,95,183,183,122,122,122,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,150,59,234,26,152,17,17, + 152,235,8,7,235,122,0,0,151,102,71,169,140,169,39,133, + 24,226,35,103,104,0,50,122,50,50,162,221,221,94,215,162, + 221,162,0,0,0,50,0,94,246,0,221,246,246,215,221,0, + 0,0,0,0,0,0,37,122,212,221,246,221,221,215,221,215, + 215,215,215,122,221,122,221,215,0,183,221,215,0,215,40,215, + 40,40,215,215,221,0,0,0,94,40,183,183,221,215,246,40, + 246,246,246,246,246,215,215,215,215,94,94,221,183,221,215,40, + 40,40,40,215,215,40,215,141,215,215,227,212,56,40,122,215, + 183,17,183,215,56,221,215,141,40,141,95,99,47,0,40,0, + 141,95,40,95,40,141,95,40,141,47,95,215,95,95,94,183, + 212,0,47,47,47,47,142,142,40,141,40,47,95,141,47,212, + 221,40,221,183,40,141,132,141,141,215,215,132,141,141,141,141, + 95,162,227,0,0,227,94,122,78,221,0,0,0,0,0,0, + 0,42,221,221,221,221,215,40,246,221,50,212,94,162,94,215, + 221,0,221,162,221,162,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,162,0,215,215,40,95,239,95, + 59,212,227,221,221,162,122,0,0,78,126,227,95,126,95,75, + 187,183,122,0,0,0,0,0,0,0,0,0,0,0,0,221, + 215,122,221,221,221,246,212,0,221,50,78,0,215,215,221,221, + 56,221,183,56,56,122,0,42,162,183,183,0,162,183,221,221, + 221,122,0,94,183,183,56,221,0,221,162,94,0,64,47,59, + 47,254,141,7,235,7,235,243,235,141,182,49,8,145,150,67, + 235,150,235,141,141,235,219,235,67,141,235,12,235,243,254,235, + 243,182,150,67,145,243,235,182,243,141,17,235,141,235,12,235, + 99,243,8,132,235,141,235,243,182,12,235,243,235,187,235,99, + 0,0,0,0,0,122,0,0,0,42,139,245,102,102,102,38, + 102,38,102,102,197,102,102,100,102,102,100,88,88,33,88,218, + 66,0,40,97,48,164,47,40,40,0,245,153,102,236,236,140, + 40,0,212,95,97,166,111,126,224,0,0,0,0,183,221,0, + 162,162,162,162,0,0,0,122,221,162,162,50,221,162,0,0, + 0,122,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 122,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,122,122,0,0,122,0,122,122,122,122,122,122, + 122,122,122,122,122,0,0,0,0,0,0,0,0,0,0,0, + 183,215,126,95,94,183,0,122,122,0,0,0,0,0,0,0, + 122,0,0,0,0,0,0,0,0,0,0,132,99,219,99,0, + 0,42,8,49,122,0,111,17,219,0,20,127,140,140,140,33, + 55,18,55,66,48,0,212,94,249,249,249,233,31,233,206,233, + 206,206,233,31,206,241,0,212,227,14,73,73,92,73,233,73, + 73,73,206,206,31,206,48,0,94,239,203,62,168,206,137,137, + 206,206,206,168,206,206,233,177,0,162,183,190,237,233,137,206, + 168,137,137,206,73,73,73,206,222,104,162,94,203,226,226,190, + 226,92,226,226,226,104,92,241,164,164,142,0,162,215,212,164, + 104,104,104,104,92,104,104,92,164,164,14,172,0,227,183,164, + 10,73,10,233,62,41,237,62,73,14,14,22,48,40,183,221, + 104,50,40,241,104,104,104,104,104,104,104,40,203,40,241,162, + 162,40,104,212,40,246,40,40,104,104,104,40,104,203,162,190, + 122,215,215,203,212,212,37,203,212,104,104,104,104,164,164,92, + 50,94,78,0,203,203,203,212,246,221,0,0,221,0,221,0, + 162,0,0,0,221,221,221,221,246,212,212,50,50,212,212,221, + 221,221,246,162,162,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,221,0,221,42,221,183,221,215, + 183,162,0,0,122,200,162,78,0,95,246,40,183,215,183,94, + 221,0,0,0,0,0,0,0,0,0,0,0,0,0,162,0, + 221,122,221,162,221,221,221,215,183,162,183,162,246,0,221,56, + 0,56,40,0,221,183,40,221,162,94,122,0,122,0,122,122, + 0,0,122,0,0,0,0,0,162,122,122,122,0,141,95,95, + 95,166,243,67,141,235,235,141,235,141,49,235,150,235,132,67, + 145,150,235,141,67,235,17,235,235,141,235,150,49,141,243,99, + 150,141,141,182,145,132,99,49,187,67,219,235,254,235,254,99, + 99,150,182,219,99,99,235,109,99,219,235,254,235,254,99,235, + 0,0,0,12,94,42,122,0,162,26,91,61,214,213,102,133, + 102,102,133,102,102,102,102,102,102,102,102,71,74,74,74,134, + 23,104,190,0,48,50,111,241,163,0,245,240,133,108,108,171, + 0,0,215,40,95,239,215,215,0,0,0,0,0,0,0,122, + 0,0,0,0,0,0,0,0,0,162,162,221,162,0,0,221, + 0,0,0,122,122,122,0,122,122,122,122,122,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,122,122,0,122,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,215,40,227,227,221,78,0,0,122,122,0,122,0,0,0, + 0,0,122,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,141,145,17,42,122,0,122,0,246,127,140,74,114,38, + 18,38,55,66,177,0,163,40,168,73,73,73,206,14,92,168, + 73,73,206,130,167,48,0,183,104,206,249,206,73,31,62,206, + 249,249,31,249,62,41,228,0,183,246,92,41,249,249,249,233, + 206,233,206,249,62,249,41,228,162,183,221,251,216,93,62,62, + 62,249,249,249,249,62,62,237,220,94,122,0,172,137,168,206, + 177,168,137,73,177,73,84,73,168,222,173,122,227,104,92,73, + 14,14,14,14,14,14,14,73,73,73,73,173,0,239,221,190, + 10,73,206,206,206,206,137,206,113,73,73,14,18,40,221,246, + 251,14,168,137,168,206,92,92,137,137,137,123,137,168,142,221, + 221,47,92,251,73,216,216,226,73,92,190,137,249,249,206,55, + 0,227,183,222,31,31,18,79,79,220,79,18,220,18,18,43, + 48,94,94,221,226,226,37,203,212,221,0,0,0,0,0,0, + 50,14,246,50,162,0,113,22,246,246,94,40,164,212,0,0, + 0,221,162,221,221,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,50,92,94,14,209,0,84, + 50,94,0,0,162,40,162,183,0,142,40,47,22,50,50,94, + 0,0,0,0,0,0,0,0,0,0,221,47,246,180,180,162, + 112,180,0,162,0,246,0,221,212,183,122,40,2,0,2,142, + 124,124,1,0,180,180,47,1,47,187,122,0,95,162,50,162, + 94,162,94,183,50,162,163,162,162,203,187,122,0,29,29,29, + 29,47,141,67,150,235,182,12,49,150,182,8,150,67,219,141, + 235,17,67,150,141,49,183,67,67,12,235,132,99,182,26,182, + 12,109,243,219,235,254,17,64,150,254,132,150,64,219,254,17, + 235,150,182,150,150,99,219,141,182,132,150,64,219,254,17,99, + 0,0,219,235,145,42,12,26,0,26,205,26,26,145,245,102, + 155,102,102,102,133,102,102,102,102,102,102,102,74,74,140,176, + 137,203,251,246,0,40,104,75,203,0,104,102,248,184,248,171, + 0,0,183,183,221,183,183,221,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,122,0,0,0,221,221,122,0, + 0,0,0,0,0,122,0,0,0,0,0,122,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 122,227,166,215,183,221,122,42,0,0,0,0,122,122,122,122, + 122,0,0,122,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,183,150,219,122,122,0,183,150,122,151,127,140,140,15, + 18,18,55,43,190,0,212,203,92,164,22,73,73,73,73,206, + 206,92,73,92,31,48,0,162,104,92,73,206,73,206,73,206, + 233,206,206,137,137,249,173,0,183,50,73,249,233,249,249,249, + 31,233,233,206,233,73,206,123,0,221,183,173,216,175,249,62, + 167,249,167,167,137,123,222,31,220,183,42,0,190,222,84,84, + 190,177,177,24,24,92,226,24,209,222,228,122,183,142,14,22, + 14,14,92,22,14,14,22,14,14,73,84,79,122,239,183,190, + 14,50,14,14,164,22,164,22,164,22,14,14,242,203,42,221, + 251,22,190,222,73,168,92,92,177,137,177,137,73,190,226,0, + 221,104,137,198,123,93,216,92,226,92,104,206,31,233,175,79, + 0,183,40,173,73,222,21,251,173,173,103,79,79,55,79,87, + 137,221,183,246,40,246,94,221,162,0,0,0,0,0,0,0, + 162,37,94,221,0,0,131,5,22,162,94,40,50,221,0,221, + 94,221,162,246,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,221,221,162,22,50,164,22,0,50, + 0,162,94,162,50,0,0,0,0,172,40,221,92,212,212,22, + 0,0,0,221,0,221,215,0,183,0,40,2,124,1,124,162, + 81,2,0,50,162,246,246,0,78,183,162,35,246,0,81,47, + 2,81,2,0,112,40,40,47,190,221,0,0,44,50,94,50, + 78,78,50,0,61,0,163,162,50,97,187,162,0,225,34,29, + 20,44,243,141,150,67,141,8,49,150,235,150,141,141,219,49, + 235,17,67,17,67,49,183,67,235,150,235,141,182,49,17,49, + 254,243,99,243,67,235,17,67,49,132,67,17,67,182,243,67, + 182,99,150,99,12,67,182,150,150,67,17,67,182,243,67,182, + 0,0,0,219,141,235,145,199,49,235,100,67,91,139,245,102, + 102,155,102,133,102,102,38,102,102,102,74,102,71,102,18,127, + 246,246,251,92,190,164,200,97,203,0,122,22,179,30,241,166, + 0,0,0,122,162,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,162,0,162,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,122,0,122,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 122,227,227,166,94,162,122,0,162,0,0,0,0,122,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,122,56,42,219,0,0,99,47,114,127,88,71,135, + 38,38,55,72,190,0,163,40,10,10,65,10,22,14,22,209, + 14,206,73,14,31,129,0,162,104,73,14,73,206,206,233,233, + 31,31,233,233,73,206,55,0,42,40,92,206,233,164,73,206, + 206,62,249,233,233,92,10,55,0,78,0,251,93,249,233,249, + 233,249,233,31,130,168,130,233,18,50,162,0,172,73,104,226, + 92,73,177,24,46,46,209,46,241,222,173,0,94,223,14,37, + 22,22,14,37,50,164,22,22,37,37,24,18,0,239,42,190, + 94,164,37,164,22,14,209,37,37,50,164,14,18,40,183,221, + 228,50,164,29,73,73,164,203,164,92,241,73,164,177,142,221, + 0,47,137,31,14,93,175,215,14,164,164,113,22,246,50,38, + 0,50,183,251,92,190,21,48,173,203,129,135,137,173,251,55, + 203,0,162,94,212,221,221,0,0,0,0,0,0,0,0,0, + 0,246,94,0,162,162,5,230,160,5,221,162,0,221,0,221, + 0,221,94,221,162,50,0,0,0,0,0,0,0,0,0,0, + 50,203,164,48,200,0,0,95,203,14,212,215,162,162,0,0, + 0,162,162,0,221,0,0,0,0,190,22,0,164,162,37,164, + 0,162,0,162,0,221,104,50,183,221,162,180,112,1,2,40, + 81,180,122,40,0,104,180,162,50,221,221,142,47,221,1,180, + 180,2,81,215,124,180,40,2,190,219,162,0,142,162,0,50, + 162,162,162,0,50,0,163,50,50,200,166,0,0,29,44,29, + 29,44,7,7,141,235,8,49,235,12,235,182,7,235,12,235, + 145,8,235,150,49,145,219,235,145,141,235,49,67,145,8,235, + 49,8,49,235,182,235,235,67,145,99,67,211,150,49,141,99, + 49,182,49,49,12,49,235,101,99,49,12,49,49,67,145,235, + 0,0,0,219,49,235,192,225,158,145,25,234,91,205,102,155, + 102,133,102,25,133,102,102,102,102,102,102,102,140,240,21,40, + 246,40,246,246,173,92,111,40,75,0,0,0,237,168,92,0, + 0,0,0,0,0,0,0,0,0,0,0,162,162,162,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,221, + 56,221,221,122,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,122,0,0,0,122,0,122,122,122, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,183,183,215,183,162,122,122,0,0,0,0,0,122,0,122, + 122,122,122,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,42,145,150,0,183,127,127,39,140,48, + 79,38,173,72,223,0,40,95,62,73,220,50,50,22,22,94, + 50,14,73,22,167,48,162,162,104,14,123,233,73,233,233,233, + 14,14,73,233,206,206,55,0,78,212,92,233,233,206,206,233, + 206,233,233,249,113,22,14,103,0,221,183,222,116,11,206,233, + 31,249,233,168,73,84,24,73,201,50,122,162,48,209,241,209, + 241,35,92,241,241,59,22,75,37,222,55,0,94,190,164,50, + 50,50,22,37,37,37,37,50,50,22,73,33,0,212,219,249, + 131,37,162,50,37,14,84,22,50,162,37,14,220,40,183,221, + 251,50,50,241,226,14,22,0,162,14,22,164,50,177,92,221, + 122,104,48,50,92,11,13,162,241,40,22,164,94,162,22,79, + 0,227,95,228,22,226,251,24,177,200,190,48,48,222,129,104, + 212,221,221,162,50,50,162,162,0,0,0,0,0,0,0,162, + 0,221,0,0,0,0,10,11,110,82,221,221,0,0,0,162, + 162,0,0,50,221,94,0,0,0,0,0,0,0,0,0,0, + 162,246,94,190,251,183,221,50,50,37,50,94,0,162,0,162, + 0,162,0,0,0,0,0,0,0,0,162,0,162,221,162,162, + 0,0,0,0,162,162,229,163,183,162,241,246,1,1,1,221, + 81,2,0,212,0,124,112,61,40,42,183,104,2,40,180,112, + 112,124,81,81,112,47,124,124,183,219,0,0,44,0,0,50, + 162,163,162,50,78,162,42,22,183,241,126,0,0,225,29,34, + 29,142,219,17,150,141,17,150,150,219,12,26,219,17,219,150, + 17,183,219,56,42,26,122,42,26,42,183,42,0,42,0,183, + 122,122,42,183,122,42,42,0,122,183,122,42,0,42,42,0, + 42,56,42,122,42,122,42,122,26,42,122,42,122,122,122,26, + 243,145,235,141,235,141,145,8,158,145,25,155,54,102,133,133, + 25,133,155,102,25,25,133,102,120,38,71,71,18,250,79,164, + 0,104,40,190,104,40,224,40,203,0,162,162,137,0,138,0, + 0,0,0,0,0,0,0,0,0,0,0,0,221,221,221,0, + 0,0,0,0,0,0,0,0,0,0,0,122,122,122,122,122, + 221,122,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,183,221,162,221,0,0,0,0,0,0,0,0,122,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,182,132,0,0,244,119,127,102,151, + 79,38,55,87,177,0,212,50,237,233,233,206,206,73,168,73, + 168,206,206,73,31,48,0,162,104,14,73,113,73,137,168,31, + 73,92,73,206,73,73,173,0,94,40,164,206,73,73,73,168, + 73,168,206,137,206,73,206,251,0,42,0,48,216,138,237,206, + 73,206,73,168,168,168,73,73,79,162,122,162,190,73,24,177, + 177,84,177,24,226,24,226,24,14,222,173,122,183,142,14,73, + 73,92,73,73,92,92,73,92,73,73,177,18,0,50,183,206, + 131,131,164,164,162,50,61,162,162,50,14,14,55,203,94,246, + 251,37,164,14,226,92,92,241,164,73,73,92,92,190,142,122, + 162,104,48,50,226,92,31,50,92,22,212,14,14,37,22,55, + 0,50,212,190,212,37,203,40,104,226,190,190,48,190,142,104, + 104,221,162,94,203,203,162,246,94,0,0,0,0,0,94,104, + 37,203,221,0,162,50,10,5,175,14,42,0,0,0,0,221, + 162,50,164,190,162,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,40,190,221,56,0,0,0,0,0,0,0,0,162, + 0,0,0,0,0,0,0,0,0,162,0,162,162,94,0,221, + 0,162,0,0,0,0,172,203,183,183,104,0,180,112,1,47, + 81,124,0,50,50,81,180,24,95,56,221,47,221,1,40,112, + 180,81,1,1,180,180,124,0,241,187,0,0,29,162,122,50, + 50,163,163,94,94,162,94,162,0,104,126,0,0,64,34,34, + 29,64,78,183,183,183,183,94,221,183,183,221,183,94,221,183, + 94,162,183,221,221,94,94,221,183,221,0,221,122,221,122,162, + 221,42,221,221,162,221,221,183,78,162,162,162,94,221,162,162, + 221,162,0,183,162,183,221,162,221,221,42,221,94,162,183,246, + 219,235,145,145,235,7,225,235,225,235,155,102,25,25,102,155, + 155,102,155,133,25,248,25,25,248,25,248,248,190,40,92,92, + 173,246,104,104,203,40,75,126,126,0,40,137,0,162,0,0, + 0,0,0,0,0,0,0,0,0,0,0,221,0,0,0,0, + 0,0,0,0,0,0,162,0,0,0,0,0,0,122,221,221, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,183,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,122,0,0,0,171,159,39,15,142, + 33,38,55,87,177,0,40,241,14,123,11,237,249,206,233,206, + 206,14,14,73,137,222,0,78,104,206,70,6,249,73,73,206, + 233,249,249,62,233,233,251,0,42,40,92,62,31,73,73,206, + 206,137,206,249,233,233,175,251,0,94,183,173,175,10,41,93, + 62,233,31,233,206,168,206,73,79,50,122,78,226,73,14,14, + 92,14,73,14,14,14,14,14,14,137,103,122,94,190,14,73, + 209,73,92,73,206,168,137,168,73,73,73,21,0,50,126,190, + 14,164,215,113,160,11,93,93,93,41,73,73,103,40,227,221, + 251,22,92,226,177,177,73,168,137,190,137,48,137,206,142,162, + 162,47,137,43,137,73,92,137,251,31,137,168,137,137,14,173, + 0,94,0,0,0,212,203,164,104,190,48,137,137,190,104,92, + 92,40,212,40,203,212,203,246,164,212,162,246,37,212,94,246, + 50,212,246,162,162,40,104,22,22,73,22,212,37,22,37,50, + 94,246,163,190,0,162,0,0,0,0,0,0,0,0,0,0, + 0,0,0,162,104,183,221,162,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,94,162,221,162,221,162,221, + 0,212,50,94,221,0,0,0,183,221,142,162,162,40,40,124, + 180,47,221,50,50,50,0,104,200,183,183,142,0,180,122,47, + 40,124,47,180,246,40,40,221,104,183,0,0,29,162,122,78, + 78,50,162,122,78,221,50,42,0,104,187,0,0,44,34,142, + 44,47,151,151,151,55,151,55,186,55,133,55,133,55,38,55, + 38,55,38,38,38,38,38,38,197,38,55,38,38,38,197,38, + 197,197,38,33,197,33,197,33,33,33,33,33,33,33,197,33, + 33,33,197,33,197,197,197,197,33,197,197,38,33,197,197,33, + 0,0,0,132,141,235,225,199,158,158,155,133,155,155,133,155, + 133,155,133,25,25,133,133,25,133,25,217,89,142,48,40,173, + 79,0,104,79,173,190,59,40,203,0,190,11,212,0,246,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,221,221,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,122,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,122,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,95,57,244,171,92, + 18,38,55,72,48,0,203,40,14,0,237,10,164,14,162,92, + 14,249,73,50,168,48,0,162,241,73,195,13,10,14,22,249, + 14,37,14,206,233,175,251,0,183,203,164,73,206,73,73,73, + 73,73,14,249,94,14,175,173,0,122,0,173,131,249,22,206, + 41,22,14,22,22,22,14,22,55,162,122,94,104,14,14,164, + 22,14,14,22,14,37,22,22,162,222,129,0,219,190,22,22, + 22,22,61,22,14,50,22,22,50,50,73,242,0,227,239,73, + 22,203,113,82,160,116,11,116,160,131,50,37,173,203,183,221, + 103,50,162,37,37,104,14,94,215,37,40,164,92,251,142,221, + 162,104,251,173,92,241,104,92,177,14,164,203,164,22,14,203, + 0,94,221,0,221,50,37,104,104,73,223,190,104,104,226,226, + 164,94,94,94,221,221,246,221,104,37,221,40,92,164,50,94, + 221,221,0,0,0,246,212,22,14,73,22,164,14,14,37,37, + 22,37,0,162,0,221,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,183,221,94,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,221,0,0,0,0,0,0, + 162,22,212,94,221,0,0,0,0,162,142,162,246,40,40,1, + 180,162,40,94,212,162,162,142,200,122,227,104,0,50,0,50, + 0,0,0,162,221,0,246,162,104,187,0,0,29,162,162,0, + 50,42,162,78,94,162,163,162,162,104,111,0,0,44,44,34, + 34,224,151,151,229,151,151,151,151,229,133,151,151,133,151,133, + 186,38,133,55,133,38,38,151,102,38,38,33,38,38,33,102, + 33,33,38,102,33,38,33,38,33,33,33,33,72,33,21,33, + 21,21,72,33,102,38,102,33,72,33,33,38,33,102,33,33, + 0,92,173,94,235,99,145,99,225,235,155,102,155,155,155,155, + 25,133,155,133,25,248,25,102,25,25,155,83,18,40,190,18, + 48,104,87,203,137,123,203,40,40,0,40,104,246,0,0,94, + 94,162,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,122,0,0,0,0,0,122,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,78,95,184,99,142, + 33,38,55,87,48,0,203,163,73,61,216,206,206,206,14,233, + 73,167,206,206,249,190,0,94,241,14,216,249,233,249,206,62, + 206,22,22,14,14,206,251,0,94,241,14,22,22,14,73,233, + 233,249,175,233,162,113,41,137,0,162,183,79,37,233,206,50, + 249,22,10,14,14,14,14,22,79,50,42,227,104,22,14,22, + 22,14,22,22,22,50,37,22,162,222,173,122,78,190,22,22, + 37,22,37,22,22,93,93,10,22,50,92,242,0,212,95,226, + 50,212,10,131,5,41,160,160,82,82,113,212,228,40,183,221, + 173,50,212,212,37,104,92,22,212,209,92,92,14,137,142,221, + 221,104,190,162,0,162,212,37,50,221,0,0,221,0,0,221, + 221,94,221,246,246,246,50,212,40,164,164,203,40,104,190,92, + 212,0,221,221,0,221,221,0,246,0,0,221,246,212,221,162, + 162,0,0,0,0,162,162,162,0,94,162,0,0,0,0,94, + 50,50,0,221,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,162,162,162,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,162, + 94,162,40,50,162,162,94,221,0,0,212,162,0,221,221,0, + 50,162,22,42,37,50,162,190,97,122,239,104,0,50,0,162, + 0,37,162,37,162,22,221,61,104,183,0,0,190,162,50,0, + 50,37,0,212,162,0,162,163,94,104,187,0,0,34,34,34, + 44,224,229,229,229,151,151,229,229,229,151,151,151,55,151,151, + 151,228,151,151,55,133,38,173,55,133,151,38,133,38,38,173, + 38,135,55,151,38,38,18,38,38,38,38,197,38,38,197,33, + 38,33,33,38,48,55,151,38,33,38,20,151,103,38,38,38, + 0,116,128,212,42,219,235,99,225,158,54,186,155,102,133,155, + 155,102,155,25,133,25,133,133,25,25,244,250,138,221,221,48, + 18,40,251,221,18,168,111,40,200,0,94,164,0,0,0,212, + 94,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,122,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,122,42,0,190, + 18,38,55,87,177,0,22,40,73,22,216,249,233,233,206,249, + 233,31,233,249,167,177,0,221,203,92,11,233,128,216,113,249, + 249,249,206,14,22,10,129,0,42,203,92,249,233,14,22,22, + 14,14,14,206,50,10,131,173,0,221,221,79,14,14,233,113, + 31,203,14,14,14,22,14,22,103,50,162,212,226,14,14,164, + 164,22,14,22,164,37,22,22,162,168,129,122,183,190,14,37, + 37,22,50,22,10,98,70,206,212,50,73,21,0,227,215,168, + 175,50,162,50,50,162,94,50,22,22,164,162,173,75,50,221, + 228,0,22,37,246,212,14,164,37,164,164,203,164,251,226,221, + 0,104,137,43,250,162,164,164,40,22,22,22,162,50,5,104, + 0,162,221,104,22,246,246,50,0,0,37,104,241,203,22,164, + 221,221,221,221,0,221,0,0,0,0,0,0,0,0,162,162, + 0,162,0,0,0,0,0,0,0,94,221,0,94,246,94,212, + 37,162,0,0,162,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,203,92,162,162,162,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,162,94,94,50,221,246,94,183,0,0,0,221,0,94,37, + 50,50,37,50,50,221,162,226,104,122,215,142,162,50,162,50, + 0,22,50,37,162,212,0,50,46,239,122,0,29,162,50,0, + 163,162,0,162,163,0,122,50,163,104,111,0,0,225,34,142, + 44,59,245,229,15,229,15,151,229,151,151,151,151,151,103,133, + 55,151,151,151,151,151,55,151,38,38,38,46,173,133,38,151, + 20,173,151,129,38,38,38,38,38,55,38,18,38,38,38,38, + 33,18,33,20,173,229,229,38,38,38,38,38,55,38,18,38, + 92,95,37,192,99,17,225,225,225,225,235,91,145,25,102,155, + 133,155,133,25,25,248,25,248,248,55,83,18,92,137,48,190, + 190,40,0,0,0,0,95,40,40,0,221,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,221,183,0,122,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,223, + 33,55,55,72,190,0,75,203,73,22,249,31,249,233,233,62, + 249,14,31,206,233,223,0,162,200,14,230,233,137,206,22,206, + 249,249,249,233,249,206,222,0,183,203,164,206,249,14,206,14, + 14,22,164,233,50,37,113,251,0,122,56,173,14,14,14,206, + 249,14,164,14,14,22,14,22,167,162,122,215,142,22,22,22, + 22,22,14,22,164,50,164,14,50,168,129,0,78,172,14,22, + 22,22,22,10,22,216,93,14,22,22,73,21,0,183,215,137, + 41,11,131,41,175,50,122,0,122,162,164,50,251,95,221,221, + 173,162,94,37,162,162,22,164,104,37,92,104,137,167,104,221, + 221,104,168,43,43,37,22,40,212,50,22,10,22,37,82,10, + 221,162,221,73,82,82,0,50,73,137,167,123,137,167,92,221, + 0,221,94,246,162,0,0,0,0,0,162,0,0,0,221,162, + 0,162,0,0,0,0,0,0,221,221,0,0,50,10,10,10, + 0,22,50,0,0,0,0,0,0,0,221,0,0,0,0,0, + 0,0,0,0,0,0,0,0,212,164,50,94,162,0,0,0, + 0,0,0,0,0,221,0,0,221,0,0,0,0,0,0,0, + 0,162,94,94,50,221,246,0,221,221,142,162,162,0,0,162, + 162,50,50,50,50,78,50,142,95,122,227,104,162,37,50,22, + 122,50,162,78,162,122,162,0,46,183,0,0,172,162,162,162, + 22,162,162,0,50,50,50,0,50,104,187,0,0,34,44,34, + 44,99,38,133,38,38,38,38,102,38,33,38,38,33,102,38, + 33,33,33,38,33,38,229,38,133,21,33,38,143,38,21,38, + 102,33,33,33,134,21,72,33,33,38,72,134,87,72,72,134, + 72,72,134,38,33,127,33,87,72,72,21,33,38,87,134,72, + 13,221,246,95,47,47,202,171,192,192,49,49,8,152,155,186, + 155,155,155,133,155,245,96,217,114,190,220,0,0,104,173,18, + 0,162,162,0,0,0,95,163,163,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,162, + 221,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,142, + 18,38,38,72,177,0,40,37,14,50,73,14,73,73,14,31, + 233,22,233,249,249,48,0,94,40,92,11,206,130,206,73,73, + 206,206,233,233,249,249,251,0,122,104,92,14,233,14,233,233, + 206,73,22,233,50,221,10,103,0,215,221,79,14,164,22,73, + 233,73,22,22,14,164,22,22,103,50,221,50,226,14,14,164, + 22,164,14,22,22,94,22,22,22,73,129,215,212,223,14,22, + 22,37,22,22,10,22,233,73,37,50,14,18,162,183,26,31, + 82,6,116,60,116,93,216,233,209,14,94,50,228,203,122,50, + 123,0,0,221,0,0,0,162,22,73,10,137,79,220,97,122, + 221,40,137,18,138,50,221,212,203,162,162,37,10,5,5,104, + 221,0,246,113,5,10,246,18,32,32,32,198,85,32,85,104, + 251,0,94,94,0,0,0,0,0,0,0,0,0,221,162,162, + 0,162,162,0,0,0,0,0,0,0,0,162,10,5,10,22, + 0,50,162,0,0,0,162,0,0,0,0,221,221,0,0,0, + 0,0,0,0,0,0,0,0,0,221,162,221,162,0,162,50, + 50,162,0,0,0,122,0,0,0,0,0,0,0,0,0,0, + 0,0,0,221,162,162,104,94,221,221,226,162,50,162,0,0, + 162,0,0,50,50,162,0,190,75,122,227,142,50,22,40,37, + 162,50,22,0,0,0,37,0,46,50,0,0,172,162,162,42, + 50,162,162,162,162,163,50,122,162,104,126,0,0,34,44,142, + 29,47,29,135,20,135,20,48,129,104,212,47,241,226,241,75, + 142,229,151,129,229,151,129,55,253,229,151,79,38,84,226,177, + 201,201,38,79,38,55,79,55,33,201,33,201,197,197,197,197, + 197,197,242,38,197,55,38,38,55,38,55,33,201,33,201,197, + 9,56,141,141,99,47,80,34,202,152,67,235,8,26,139,101, + 101,139,139,101,67,44,64,7,199,40,104,0,0,246,221,0, + 221,221,212,162,246,162,95,40,163,0,0,0,0,0,0,0, + 0,0,0,162,0,0,0,0,162,94,94,183,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,142, + 33,38,55,72,190,0,40,40,14,50,249,206,206,14,14,73, + 73,14,14,14,31,190,0,221,40,73,30,73,233,233,73,206, + 206,233,206,73,10,233,48,0,122,200,14,73,14,22,22,14, + 175,233,233,249,50,50,22,251,0,215,183,251,10,206,22,22, + 14,14,22,22,14,22,14,22,167,50,183,246,223,37,22,164, + 22,22,164,164,22,50,22,37,50,73,135,221,227,172,14,50, + 22,37,212,22,14,22,233,73,22,162,41,79,0,183,219,177, + 131,11,11,11,11,116,11,6,82,82,0,37,251,163,0,215, + 251,104,0,48,51,250,28,50,13,128,23,220,18,138,164,162, + 221,164,23,198,170,65,14,40,40,246,0,162,22,22,22,92, + 162,0,215,249,82,5,5,93,115,117,117,198,117,117,32,79, + 43,221,0,162,0,0,0,0,162,50,246,162,0,162,162,221, + 221,164,0,0,0,0,0,0,0,0,0,0,50,162,162,0, + 0,0,0,0,0,0,221,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,162,0,0,0,0,0,94, + 162,0,221,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,221,0,0,162,0,15,40,122,221,203,0,0,0,0,0, + 0,162,0,122,122,162,0,48,241,122,183,104,50,50,50,37, + 122,22,37,122,0,0,50,162,46,183,162,122,142,162,37,50, + 162,163,37,163,0,50,61,0,50,104,166,0,0,34,34,44, + 29,47,0,0,0,0,183,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,162,0,0,0,0,0,0, + 0,122,0,0,78,122,122,0,0,0,0,0,0,0,0,0, + 221,0,0,0,0,0,162,0,0,162,0,0,0,0,0,0, + 118,7,145,44,47,214,99,99,215,183,141,235,101,12,12,7, + 101,7,8,7,7,20,18,43,137,0,40,164,164,104,104,0, + 221,0,246,164,190,164,95,163,97,122,122,0,0,0,0,50, + 221,221,162,162,162,0,0,221,221,0,0,162,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,223, + 21,18,55,87,177,0,75,203,14,50,62,206,233,206,14,206, + 206,22,14,92,249,177,0,94,40,168,93,206,113,233,206,14, + 206,206,73,73,14,206,222,0,183,241,164,22,37,164,14,162, + 164,73,73,233,22,37,10,251,0,0,215,251,14,113,73,50, + 14,22,22,212,164,22,22,22,103,162,0,94,226,22,37,22, + 22,164,14,22,22,22,22,22,50,177,48,122,78,190,14,50, + 22,22,22,22,164,164,206,73,22,162,216,18,0,163,187,251, + 175,216,60,60,11,11,160,60,160,160,0,37,228,40,183,215, + 137,18,173,79,115,32,117,79,115,117,32,9,118,204,14,221, + 0,73,32,157,32,9,50,10,73,10,50,162,162,50,131,177, + 122,162,183,175,5,10,22,233,23,65,19,123,173,43,87,18, + 18,0,162,221,0,0,0,190,40,246,212,221,94,94,162,0, + 123,137,0,0,0,0,0,0,0,0,0,0,0,162,0,0, + 0,0,0,0,0,221,162,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,162,0,0,0,0,0, + 0,0,0,0,0,0,0,0,122,40,0,0,0,0,0,0, + 162,162,162,0,0,0,129,75,122,0,212,0,122,122,162,0, + 162,162,0,0,0,162,0,172,104,122,227,241,50,46,162,14, + 122,22,50,162,162,162,50,162,46,183,162,0,142,162,50,22, + 61,22,22,22,162,162,22,162,37,46,187,0,0,192,34,44, + 171,34,0,0,0,0,59,0,0,0,0,0,0,0,0,0, + 0,0,162,78,162,59,0,0,0,0,0,0,0,0,0,0, + 0,122,0,0,59,215,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,59,212,0,0,0,0,0,0,0, + 19,141,254,215,132,254,221,0,0,0,42,182,150,8,8,235, + 235,235,7,235,7,67,173,11,190,221,40,92,40,164,40,50, + 104,0,221,221,92,164,40,40,75,0,221,0,221,0,0,37, + 50,162,0,0,0,0,0,162,221,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,162,0,142, + 21,38,55,87,177,162,22,40,14,50,206,206,92,22,50,206, + 73,237,206,14,206,190,0,221,40,251,216,73,206,206,14,73, + 73,10,22,14,14,73,177,0,212,37,164,14,10,73,233,73, + 14,10,37,14,22,50,113,251,0,78,215,251,14,14,206,14, + 73,22,22,22,22,37,164,50,167,78,221,227,226,22,37,164, + 37,37,164,22,212,22,22,22,50,168,48,0,78,29,14,22, + 22,50,22,50,22,164,14,73,22,50,14,197,0,40,42,48, + 249,130,179,30,250,51,93,11,10,82,221,22,251,212,183,221, + 251,0,190,19,170,170,194,237,53,85,193,189,27,117,177,221, + 0,206,32,157,32,250,162,82,82,5,10,0,10,10,82,175, + 0,212,94,104,0,0,0,0,0,162,162,0,221,0,0,0, + 0,221,221,0,0,0,0,190,221,0,94,246,246,50,162,0, + 167,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,94,37,162,0,0,221,221, + 0,0,0,0,0,0,0,0,0,221,0,0,0,0,0,0, + 0,0,0,0,162,0,173,200,122,0,0,0,0,0,0,0, + 0,0,0,0,162,0,162,162,221,42,215,241,22,209,162,209, + 0,22,78,50,0,162,50,0,24,183,0,0,35,162,0,50, + 50,162,50,22,50,78,37,162,50,104,111,162,0,34,142,47, + 29,44,0,0,122,0,64,0,0,0,0,0,0,0,0,0, + 0,0,0,42,0,64,0,0,0,0,0,0,0,0,0,0, + 0,122,122,0,44,239,0,0,0,0,0,0,0,0,0,0, + 122,78,0,183,0,122,0,122,0,0,0,0,0,122,122,239, + 43,166,122,221,221,0,0,0,122,0,122,0,122,183,42,7, + 225,99,145,235,145,141,215,92,246,221,0,221,0,221,212,40, + 221,221,0,0,221,122,212,94,40,122,122,0,0,0,0,162, + 50,50,162,0,0,0,0,0,0,162,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,190, + 33,38,38,72,177,162,75,203,14,50,62,249,206,73,206,31, + 206,41,233,233,31,177,0,50,94,167,113,73,206,73,14,175, + 73,206,14,14,22,113,48,0,126,40,50,93,93,162,113,73, + 73,206,206,73,206,0,73,251,0,94,246,48,14,22,22,73, + 73,22,37,22,22,37,22,50,103,162,122,94,226,22,50,37, + 22,37,22,37,50,37,22,50,162,177,48,0,94,142,14,50, + 37,37,37,22,164,37,92,73,50,37,92,18,0,40,246,177, + 175,233,130,5,5,5,113,73,0,50,162,50,228,212,221,56, + 137,173,172,87,251,92,22,50,50,22,23,189,107,204,22,221, + 162,73,117,193,118,137,162,10,5,50,164,0,50,10,10,173, + 0,164,94,162,0,221,0,0,40,0,0,0,162,221,162,162, + 221,0,0,0,0,162,0,162,162,162,0,162,162,221,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,162,0,246,0,0,0,0,221,190,221,162,0,0,0,0, + 0,0,0,0,0,0,0,0,0,162,162,162,0,162,0,0, + 162,162,162,162,221,0,203,221,0,78,212,0,0,0,0,0, + 0,0,0,0,0,0,0,221,0,162,215,104,37,37,164,22, + 50,50,50,0,162,122,50,162,104,183,162,0,200,50,162,50, + 50,78,122,162,50,50,162,50,50,241,95,183,0,44,34,44, + 29,142,0,122,75,0,64,0,0,0,0,122,0,0,0,0, + 0,0,0,227,0,35,0,0,0,0,0,0,0,0,0,0, + 0,122,203,94,44,212,0,0,0,0,0,122,0,0,0,0, + 122,183,122,162,0,0,0,0,122,0,0,0,0,122,183,122, + 43,246,183,183,0,0,0,0,122,0,122,42,122,42,221,235, + 215,221,95,246,95,40,221,50,0,221,183,212,0,0,0,0, + 0,0,0,0,162,0,221,0,162,162,122,221,0,0,162,0, + 162,50,162,0,0,50,221,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,190, + 18,103,173,72,190,162,75,40,92,73,233,73,206,92,73,206, + 73,14,14,73,233,226,0,212,212,168,22,14,73,22,14,249, + 73,233,73,73,14,73,190,0,50,40,50,110,230,0,233,14, + 37,22,22,73,233,14,14,130,122,183,163,48,14,73,14,22, + 14,22,14,164,14,14,22,14,123,162,56,94,104,14,22,164, + 22,50,22,14,22,22,73,22,22,73,190,122,221,142,14,22, + 14,22,37,22,14,22,137,73,37,14,73,79,122,126,227,190, + 249,233,233,123,222,14,10,5,22,212,22,37,129,50,183,122, + 48,246,48,104,79,48,162,203,162,190,70,18,23,65,0,221, + 162,22,65,65,220,162,61,22,50,14,104,94,94,221,164,129, + 0,0,0,0,0,0,0,0,246,0,0,0,162,221,221,162, + 94,0,0,162,50,50,162,50,203,50,94,162,162,0,0,0, + 0,0,162,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,162,162,226,221,0,0,0,104,173,246,0,162,0,0,221, + 0,0,0,162,162,0,0,0,0,221,221,162,162,37,162,50, + 37,37,50,0,0,0,0,0,0,0,162,0,0,0,0,0, + 0,0,0,0,0,0,0,0,221,122,122,212,50,37,209,37, + 22,162,22,0,50,162,50,162,35,94,78,0,200,162,50,50, + 37,50,162,122,162,42,122,212,94,40,126,78,0,44,34,44, + 29,47,0,122,104,0,64,0,0,0,0,0,122,0,0,0, + 0,0,162,47,0,64,0,0,0,0,122,0,0,0,0,0, + 0,42,226,212,192,50,0,122,0,0,0,162,162,0,0,0, + 50,59,215,122,0,122,0,0,162,162,0,0,0,50,200,94, + 79,246,122,0,0,0,0,0,0,0,0,42,219,221,221,40, + 0,0,0,0,40,0,0,0,0,162,94,221,0,0,0,0, + 0,0,0,0,40,0,162,221,0,221,0,215,0,0,0,162, + 162,50,50,162,246,40,215,0,0,162,50,162,162,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47, + 33,55,55,21,177,0,203,203,37,164,14,137,241,14,164,14, + 92,137,92,73,226,190,0,212,40,212,73,14,14,73,164,203, + 73,164,14,14,14,22,177,0,163,50,0,216,10,164,73,73, + 92,92,92,73,92,92,22,48,0,162,212,92,73,73,73,73, + 73,137,73,73,73,73,73,14,251,162,183,215,104,73,177,104, + 22,14,14,92,177,190,73,177,73,48,226,122,221,142,164,73, + 73,92,92,92,104,73,14,92,226,92,104,103,0,75,94,241, + 164,92,241,92,92,226,226,190,73,226,73,92,222,40,94,0, + 92,164,104,92,190,137,123,92,190,251,137,104,251,190,203,78, + 50,203,22,92,251,164,73,190,73,48,177,190,177,92,14,203, + 0,0,221,0,0,0,0,0,0,0,162,162,0,0,162,162, + 0,0,0,0,162,50,50,50,37,246,162,0,162,162,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,162, + 0,0,0,0,0,0,0,221,246,221,0,0,0,162,0,221, + 162,0,0,0,0,0,0,0,0,0,0,162,94,50,50,50, + 37,22,162,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,122,122,0,221,94,212,50, + 42,50,162,122,183,78,215,162,75,183,162,122,75,162,162,42, + 162,163,162,42,50,221,162,227,162,40,187,94,0,192,34,44, + 29,47,0,122,142,0,64,0,0,122,0,0,0,122,0,0, + 0,0,221,47,0,44,0,0,122,0,0,122,0,0,0,0, + 122,0,226,37,192,40,0,0,122,122,78,162,162,122,0,0, + 200,142,212,0,122,0,0,78,162,78,122,0,0,200,142,40, + 104,221,122,0,0,0,0,0,0,0,0,0,221,221,246,212, + 94,162,0,162,221,0,0,0,94,221,0,221,0,0,0,0, + 0,0,0,0,162,0,0,246,0,0,0,0,162,0,0,221, + 50,50,50,162,94,50,94,0,0,162,50,50,50,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,142, + 33,151,103,72,177,162,75,37,37,92,73,62,14,14,50,206, + 206,41,14,31,62,226,0,50,203,14,216,233,73,206,14,22, + 233,73,73,206,41,206,226,0,126,212,122,216,206,14,233,22, + 73,175,41,175,206,249,233,48,162,94,95,104,206,206,233,206, + 73,164,14,22,14,73,73,10,123,162,162,50,104,50,50,206, + 175,204,160,50,14,22,14,14,14,137,46,122,94,104,203,14, + 22,50,41,113,22,14,206,14,73,73,73,129,0,40,227,164, + 14,168,50,212,37,212,22,50,164,164,14,14,177,212,183,221, + 142,164,164,22,212,190,173,162,190,190,22,92,137,14,203,221, + 94,40,164,31,190,73,73,92,73,14,14,14,92,164,221,221, + 0,0,0,162,162,0,162,0,162,162,162,162,162,0,0,0, + 0,0,0,0,0,0,0,0,162,0,162,162,0,0,162,221, + 162,162,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,40,0,0,0,221,0,0,0,122,221,122,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,162,0,0,221, + 78,50,78,162,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,221,0,0,122,122,0,0,0,162, + 183,162,50,162,162,50,183,162,40,78,42,122,95,162,94,162, + 50,122,183,50,162,183,162,122,162,40,187,42,0,34,34,44, + 29,47,0,122,46,0,64,0,0,0,0,0,0,0,122,0, + 0,0,94,46,0,64,0,0,122,122,0,0,122,0,0,0, + 0,0,226,212,171,50,0,0,0,0,162,122,122,122,0,0, + 75,29,183,0,122,122,0,162,0,122,122,0,0,203,34,239, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,162, + 221,0,215,212,221,0,0,0,0,162,0,221,162,0,0,0, + 0,162,0,162,0,221,0,122,221,0,162,94,221,0,0,0, + 0,0,0,0,0,221,122,0,0,0,162,50,50,162,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,226, + 33,55,55,21,48,162,75,40,212,73,14,14,73,14,14,73, + 206,168,10,22,137,190,0,50,40,164,62,233,73,73,233,14, + 206,233,206,233,249,73,24,0,183,37,162,73,14,206,14,14, + 113,206,113,14,22,206,62,177,162,122,239,92,73,206,73,14, + 14,50,22,164,22,22,22,22,103,162,183,126,94,206,216,93, + 30,70,160,0,50,37,22,164,14,222,104,122,221,142,164,22, + 22,50,41,233,22,92,164,22,22,50,92,129,0,163,239,164, + 212,0,50,50,162,50,212,212,212,50,162,50,48,212,162,162, + 190,164,212,212,162,162,162,162,212,37,203,40,104,92,203,183, + 78,104,92,22,92,37,22,50,50,37,50,40,221,162,0,221, + 0,0,0,94,162,162,162,162,162,0,0,162,162,162,162,0, + 0,0,0,0,0,0,0,0,0,162,0,221,0,0,221,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,162,50,162,0, + 0,0,0,104,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,162,162,0,0, + 162,0,37,22,0,50,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,104,94,0,0,183,0,0,0,0, + 162,162,94,162,162,162,162,94,163,183,221,0,200,221,0,94, + 50,162,162,50,162,50,162,0,162,40,111,94,0,44,44,44, + 29,47,0,42,142,0,64,0,0,122,0,0,122,0,0,0, + 0,0,183,142,122,44,0,0,0,0,122,0,0,122,122,122, + 122,0,223,37,171,227,0,122,0,122,122,122,122,122,0,0, + 203,171,212,0,0,0,122,122,162,122,122,0,0,203,171,215, + 0,162,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,221,0,0,0,0,0,0,0,162,0,221,0,0,0, + 0,221,162,0,0,0,0,221,183,0,221,162,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,162,162,162,162,162,162, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,122,0,0,0,0,0,0,142, + 33,55,228,72,177,162,75,37,212,206,206,206,233,233,175,233, + 233,73,206,50,130,177,0,50,40,212,206,233,233,249,249,14, + 62,233,233,233,62,206,104,0,50,97,50,10,14,237,233,249, + 73,164,22,14,14,14,206,177,0,0,126,104,14,206,206,73, + 10,37,22,164,22,22,37,22,123,162,221,227,122,195,98,216, + 9,165,82,162,22,22,22,22,22,168,104,122,162,47,164,14, + 22,22,50,50,22,14,37,22,22,50,14,222,0,212,50,104, + 94,221,50,50,50,50,50,50,50,50,221,50,222,212,162,94, + 190,164,203,37,212,50,50,50,246,246,50,212,212,92,203,221, + 162,40,92,37,164,212,50,50,50,50,50,162,162,0,94,162, + 162,162,221,212,162,0,0,0,0,0,0,162,221,0,162,94, + 162,162,162,0,0,0,162,162,221,221,0,162,162,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,162,50,22,50, + 162,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,162,0,0,0,0,0, + 162,0,50,37,162,37,162,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,47,183,0,0,221,0,0,162,0, + 0,94,162,0,162,162,162,50,163,183,122,0,75,122,0,94, + 162,0,0,37,162,94,61,221,162,212,166,78,0,44,44,44, + 34,59,0,78,142,0,64,0,0,0,0,0,0,122,0,0, + 0,0,162,142,122,44,0,0,122,0,122,122,0,122,0,0, + 122,0,223,50,171,50,0,122,0,0,0,0,122,42,221,50, + 212,171,50,0,0,0,122,122,0,122,42,221,50,212,171,50, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,162,0,0,0,0,0,0,0,0,221,162,0,0,0, + 0,0,0,0,0,0,221,0,0,0,0,0,0,0,162,162, + 162,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,142, + 201,38,103,21,48,0,241,40,22,14,249,41,206,206,233,249, + 62,216,206,22,31,190,0,183,164,164,206,62,249,22,14,22, + 233,14,164,37,206,233,226,122,40,40,162,41,93,22,14,175, + 22,14,233,206,175,14,206,190,0,162,163,104,14,37,10,73, + 22,37,22,37,22,22,37,14,103,162,183,162,162,60,117,230, + 230,60,82,162,164,22,14,164,22,137,200,0,221,104,14,37, + 22,22,22,22,22,37,37,37,164,50,73,48,0,95,215,92, + 50,162,162,162,221,221,221,94,221,0,0,94,222,212,122,162, + 177,92,22,212,212,94,212,50,94,212,212,212,94,92,212,221, + 183,40,104,37,22,50,50,212,50,37,162,50,50,162,203,226, + 0,162,162,246,0,0,0,0,0,0,221,0,0,94,162,246, + 40,37,50,162,0,162,0,0,0,162,0,221,162,162,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,162, + 162,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,221,0,0,0,50,162,0, + 162,0,0,0,0,0,221,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,190,50,162,0,221,0,0,122,0, + 0,162,50,162,50,50,50,162,75,162,122,122,95,0,0,162, + 0,162,0,61,122,50,241,50,162,239,166,94,0,44,34,64, + 29,59,0,42,223,0,64,0,122,122,0,122,122,0,0,122, + 0,0,183,47,122,64,0,122,0,122,0,0,122,122,122,122, + 0,0,177,203,171,183,0,0,122,122,122,122,0,0,0,200, + 37,171,183,0,122,122,0,122,122,0,0,122,203,37,171,227, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,162,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,162,0,0, + 0,0,0,0,0,0,0,0,0,162,162,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,162,0,0,0,0,0,0,0,0,0,0, + 0,162,162,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,142, + 201,38,55,72,48,0,203,40,50,37,73,206,22,22,212,164, + 92,206,73,14,206,223,0,50,163,50,14,14,233,14,14,14, + 206,14,73,22,233,14,226,0,163,40,0,13,110,10,22,14, + 14,113,233,73,206,206,73,226,0,162,163,40,14,92,73,14, + 14,14,14,14,14,14,14,14,31,162,94,50,215,113,93,107, + 13,90,113,22,14,73,206,14,14,168,104,0,183,104,164,92, + 14,14,10,92,206,14,14,14,92,14,92,177,0,163,215,104, + 22,212,164,37,22,164,164,22,164,164,37,22,222,40,0,162, + 104,203,164,40,40,40,40,212,164,203,40,203,203,164,212,0, + 221,212,164,104,104,104,14,92,164,73,164,164,92,92,226,177, + 0,162,94,212,0,0,0,0,162,221,246,221,0,212,50,0, + 94,164,203,50,94,94,162,50,94,50,162,94,162,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,162,40,162,0,162,22,50,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,29,227,78,122,94,0,0,0,0, + 0,162,162,162,50,50,94,162,75,42,122,221,163,0,0,162, + 0,50,162,37,162,50,50,162,183,94,126,183,0,44,142,44, + 20,95,0,42,142,0,64,0,0,0,0,0,0,122,0,122, + 122,162,246,142,0,64,0,122,122,122,122,0,0,122,122,122, + 122,122,177,212,171,50,0,0,0,122,122,122,122,0,221,104, + 212,171,50,0,0,122,0,122,122,122,122,56,104,212,171,50, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,221,162,162,162,0,122,122, + 0,0,0,0,0,0,0,0,0,0,0,0,0,162,162,0, + 0,0,0,0,0,0,0,0,0,0,162,162,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,162,162,0,122,122,0,0,0,0,0,0,0,0, + 0,0,0,0,0,162,162,162,0,0,0,0,0,0,0,0, + 0,0,162,162,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,203, + 222,129,48,103,92,122,50,162,162,50,50,163,203,104,24,75, + 203,212,212,212,246,164,0,221,246,221,40,40,215,40,203,203, + 203,40,212,212,162,94,203,122,94,50,162,22,206,40,241,104, + 104,104,104,203,40,215,246,164,162,0,183,162,50,203,40,104, + 241,104,92,104,104,104,164,212,142,50,122,162,0,0,0,0, + 0,221,40,104,203,40,212,212,246,50,40,0,0,40,162,50, + 40,203,40,37,212,164,203,203,37,50,94,104,0,221,94,212, + 40,203,203,203,203,203,22,203,40,203,40,246,104,212,0,221, + 40,221,50,212,246,221,50,212,212,40,94,246,246,246,212,221, + 221,246,221,94,50,212,212,212,212,40,40,212,50,212,94,104, + 0,221,94,94,162,162,0,94,246,94,94,0,0,162,164,212, + 221,212,212,94,221,221,221,221,221,50,50,50,162,162,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,122,221,0,0,162,162,162,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,200,183,94,42,227,0,0,0,0, + 0,162,162,122,94,162,162,162,227,162,122,122,95,0,0,0, + 0,50,0,50,162,78,78,162,0,94,183,183,0,44,44,44, + 29,75,0,219,223,0,64,0,122,0,0,0,0,0,0,0, + 162,0,94,47,122,29,0,0,0,0,0,122,122,122,122,0, + 122,0,48,212,15,183,0,122,122,0,0,0,122,78,122,223, + 37,152,183,0,122,0,0,0,0,122,162,0,223,22,152,227, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,122,0,0,0,162,0,0, + 0,0,0,0,0,0,0,0,0,0,0,162,0,162,162,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,162,50,162,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,221,221, + 221,0,122,0,0,122,0,0,0,221,221,221,0,0,221,162, + 94,221,221,0,0,0,0,0,0,0,0,0,221,183,246,94, + 227,215,221,221,0,0,0,0,0,0,162,0,0,221,221,221, + 246,221,221,221,221,0,0,0,0,0,0,0,122,122,0,221, + 162,221,183,221,0,221,0,221,0,0,0,0,122,122,0,221, + 122,56,56,215,221,183,221,221,122,162,0,0,0,0,0,162, + 0,221,215,221,215,221,221,56,221,221,162,0,0,0,0,162, + 221,78,94,183,183,215,56,162,122,183,221,183,162,0,0,221, + 162,221,212,246,221,0,162,221,0,221,0,221,162,0,162,0, + 0,221,0,0,0,0,0,0,0,0,0,221,0,0,0,0, + 0,0,0,0,0,162,221,221,221,246,162,162,0,0,212,164, + 50,94,162,162,0,50,37,50,162,50,162,50,162,162,162,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,162,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,162,162,122,221,162,0,0,162,122,0, + 122,122,0,0,122,122,0,0,0,78,0,0,162,0,0,0, + 0,0,221,0,0,0,122,0,0,0,162,162,0,126,163,111, + 95,162,0,183,34,0,64,0,0,0,0,0,0,0,0,122, + 122,0,227,142,122,44,0,122,122,122,122,0,0,122,122,122, + 122,122,177,50,229,26,122,122,122,0,0,122,0,0,122,223, + 212,229,42,122,122,122,0,0,122,0,0,122,142,212,229,183, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,162,0,0,0,0,0,0,162,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,162,162,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,162,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,162,0,0,0,0,0,162, + 0,162,162,162,162,0,0,162,162,162,0,0,162,162,162,162, + 162,162,162,0,162,162,162,0,162,162,0,221,162,162,162,162, + 162,0,162,162,221,162,0,162,162,162,94,162,0,162,0,0, + 0,0,221,162,162,162,0,162,0,162,162,162,0,162,162,162, + 162,162,162,0,0,0,0,0,0,0,162,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,122,122,122, + 122,122,0,122,0,122,122,122,122,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,215,221, + 246,246,215,0,0,221,162,0,0,0,0,0,0,0,0,162, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,162,162,0,221,221,221,50,162,0,0,0,162,212, + 162,162,162,50,50,50,37,162,50,162,162,0,0,162,94,162, + 162,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,221,162,0,221,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,122,42,223,0,64,0,0,122,0,0,0,0,122,0, + 122,0,183,104,42,44,0,0,122,0,0,122,122,122,122,0, + 122,122,172,50,152,94,0,162,122,122,122,0,0,0,0,142, + 50,152,94,0,78,122,122,122,0,0,0,0,223,50,152,94, + 0,122,122,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,162,0,0,0,0, + 0,0,221,162,0,0,162,0,0,122,122,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 162,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,162,0,0,0,0,0,0, + 164,73,73,92,73,14,14,22,14,14,14,14,92,92,73,14, + 92,92,92,92,92,73,14,92,73,73,73,73,73,168,168,73, + 168,73,168,206,137,168,73,73,168,168,168,73,73,137,73,168, + 137,137,168,137,137,168,137,137,222,168,137,137,222,137,137,137, + 168,137,137,130,168,137,168,168,168,73,73,73,73,168,168,177, + 73,73,168,168,73,177,73,92,73,73,168,73,73,177,168,73, + 73,168,137,168,168,73,73,73,92,92,73,177,168,73,92,168, + 168,168,168,137,177,168,168,177,168,92,168,190,73,226,92,203, + 40,40,221,162,203,40,50,94,221,221,246,94,22,92,92,92, + 92,164,92,168,137,190,73,164,164,164,92,92,92,92,164,92, + 164,50,203,212,0,0,0,162,162,162,0,0,0,0,0,0, + 162,0,162,162,162,162,162,162,162,162,162,0,0,0,221,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,162,0,0,0,0,0,0,0,0,162,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,162,0,0,0,0,0,0,0, + 0,0,0,0,0,0,162,162,162,0,162,0,162,162,0,0, + 162,0,0,0,0,0,0,0,0,0,0,0,0,0,0,162, + 0,0,0,219,34,0,64,0,0,0,0,0,0,0,0,0, + 122,162,227,47,122,64,0,0,122,122,0,0,0,122,122,122, + 122,122,48,50,152,162,122,122,122,0,122,122,0,0,221,226, + 50,152,50,0,122,122,0,122,122,0,0,221,104,50,152,50, + 40,183,94,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,221,0,0,0,0,0, + 0,0,162,0,0,0,0,0,40,183,94,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,162,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 177,103,222,253,168,177,92,164,226,84,73,177,84,168,177,177, + 84,73,84,168,84,168,222,222,222,222,129,222,222,222,222,222, + 129,222,222,129,129,129,251,129,251,129,222,228,129,228,129,228, + 129,103,228,228,228,228,129,228,228,55,103,55,103,103,31,228, + 129,228,168,103,228,103,55,129,228,228,55,31,173,55,228,228, + 228,251,55,55,55,79,228,55,55,55,55,103,55,201,79,38, + 55,79,38,79,201,173,228,103,31,228,55,79,55,55,228,251, + 55,38,55,79,55,79,79,55,79,55,103,103,251,137,104,104, + 104,40,40,226,222,14,203,104,212,221,0,226,137,92,190,48, + 177,48,251,55,222,168,222,228,228,228,228,228,103,228,31,228, + 251,73,164,94,162,0,0,221,162,0,0,0,0,0,0,0, + 0,162,0,0,0,0,0,0,0,0,241,212,94,162,162,0, + 0,221,0,221,0,0,0,0,0,0,0,0,0,0,0,0, + 0,203,50,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,162,190,212,0,0,221,221,0,0,212,104,50,0,221, + 212,212,162,0,0,0,162,241,241,0,0,0,0,0,0,0, + 0,0,0,162,0,163,226,177,222,48,177,177,177,177,84,92, + 177,226,24,92,92,209,92,92,24,14,226,209,92,209,209,164, + 209,164,22,22,203,37,37,50,50,50,50,50,50,164,37,241, + 162,0,0,183,223,0,64,0,122,0,0,0,0,0,0,0, + 0,0,94,142,42,44,0,122,122,122,122,122,122,0,122,0, + 122,0,177,37,152,221,0,122,122,0,0,0,122,0,0,104, + 50,152,0,0,122,0,0,122,0,122,122,0,104,37,152,221, + 212,221,94,0,0,0,0,0,0,0,0,0,0,0,0,212, + 162,162,162,0,0,0,0,0,162,0,0,0,0,0,94,50, + 162,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,162,221,221,212,221,94,0,0,0,0,0, + 0,0,0,0,0,0,0,212,162,162,162,0,0,0,0,0, + 0,0,0,0,0,0,94,50,162,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 103,33,55,55,103,135,222,222,129,135,222,222,177,168,222,177, + 168,177,84,177,226,177,177,168,168,222,222,135,222,222,222,168, + 135,168,253,222,168,222,129,129,129,228,135,129,129,129,222,129, + 129,222,178,229,135,222,222,129,129,151,222,103,135,151,135,222, + 229,129,35,129,151,228,103,129,229,228,133,129,129,228,55,229, + 129,129,251,228,151,228,55,55,228,228,55,173,55,151,38,173, + 228,151,103,133,55,55,229,151,228,151,55,55,129,228,55,135, + 173,55,173,151,55,55,151,173,151,103,151,173,222,104,40,142, + 104,164,173,48,104,40,203,164,221,221,203,173,226,50,190,92, + 24,129,129,55,129,129,129,129,129,228,129,129,228,55,228,229, + 48,164,0,0,221,212,162,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,46,40,0,0,162,212, + 0,162,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,212,162,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,163,163,163,162,0,0,0,0,0,162,162,0,0,0,75, + 46,226,163,0,0,0,50,135,223,162,0,0,0,0,0,0, + 0,0,162,162,0,162,46,48,135,129,129,253,222,223,135,135, + 135,177,226,223,226,223,253,253,223,177,177,226,253,190,253,177, + 223,223,223,223,209,241,24,46,241,209,46,209,46,226,24,177, + 163,0,0,219,34,0,64,0,0,0,0,0,0,0,0,0, + 0,0,183,104,42,64,0,0,122,122,0,0,122,0,122,122, + 122,0,177,94,152,162,0,122,122,0,122,0,122,0,0,203, + 50,152,162,0,122,122,0,122,0,0,122,0,212,50,171,162, + 212,0,246,94,0,0,0,0,0,0,0,0,0,0,0,162, + 94,162,221,0,0,122,221,0,0,0,0,0,0,162,221,50, + 0,94,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,162,0,0,0,0,0, + 0,0,0,0,0,162,183,162,212,0,246,94,0,0,0,0, + 0,0,0,0,0,0,0,162,94,162,221,0,0,122,221,0, + 0,0,0,0,0,162,221,50,0,94,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,162,0,0,0,0,0,0,0,0,0,0,0, + 21,66,102,197,38,33,38,38,33,38,38,197,38,38,55,55, + 55,55,55,103,103,103,229,55,55,55,55,228,151,228,38,55, + 55,129,55,55,151,55,228,129,38,38,55,55,55,103,55,38, + 55,228,35,151,151,229,55,103,55,55,133,55,38,55,55,38, + 55,55,55,103,55,38,103,151,55,228,55,55,103,133,55,55, + 55,55,228,151,103,229,151,55,151,38,103,151,55,103,38,55, + 55,38,55,38,38,55,38,55,55,55,173,38,38,151,151,228, + 151,55,103,129,151,55,55,55,55,55,228,48,172,104,203,142, + 46,48,55,135,226,177,241,246,0,203,104,212,40,142,223,177, + 229,135,48,223,129,151,228,228,229,228,151,228,151,55,129,190, + 162,94,203,40,212,212,94,246,0,0,94,162,162,162,0,0, + 0,0,212,162,0,0,0,0,0,0,162,162,162,0,40,223, + 163,221,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,46,104,162,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,215,104,75,215,50,162,0,0,0,0,122,104,59,46,20, + 135,151,229,48,229,135,135,135,46,0,0,0,0,0,0,0, + 0,0,0,0,221,40,47,162,163,34,135,228,229,129,229,135, + 223,229,135,135,135,20,135,15,48,229,20,20,135,135,135,229, + 253,229,135,253,29,177,135,20,135,135,135,15,135,15,229,133, + 46,0,0,221,29,0,64,0,0,0,0,0,0,0,122,0, + 0,0,246,47,56,44,0,122,122,0,122,122,0,122,122,122, + 122,0,48,50,245,162,122,122,0,0,122,122,122,122,122,94, + 50,245,162,122,122,122,0,122,122,122,122,122,212,37,152,221, + 203,0,0,162,0,0,0,0,0,162,0,162,0,0,221,162, + 94,162,162,0,0,221,0,0,0,0,0,0,0,162,221,221, + 37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,162,0,0,203,0,0,162,0,0,0,0, + 0,162,0,162,0,0,221,162,94,162,162,0,0,221,0,0, + 0,0,0,0,0,162,221,221,37,37,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,162,0,0,0,0, + 66,170,66,66,134,66,66,66,250,247,66,66,66,66,134,66, + 134,66,134,66,134,43,33,72,134,134,156,134,134,72,72,143, + 156,103,88,242,197,72,197,33,72,197,72,134,197,33,197,197, + 38,197,38,103,38,201,197,38,197,201,38,55,55,151,103,38, + 197,102,38,38,33,33,197,197,127,33,33,33,88,33,33,38, + 38,38,129,103,38,55,38,33,38,197,33,38,55,201,38,72, + 197,228,103,55,38,201,103,55,55,55,228,229,79,33,38,55, + 38,38,38,55,201,38,33,38,33,33,229,55,251,48,129,251, + 103,38,55,151,48,48,200,0,0,212,162,0,40,212,47,104, + 200,162,97,142,135,55,151,55,55,55,55,38,55,31,223,241, + 212,40,241,212,0,0,221,162,40,40,40,50,94,162,0,0, + 0,0,94,162,94,200,94,221,94,40,212,0,0,162,0,162, + 0,162,162,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,183,94,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,162, + 221,0,0,0,0,183,0,0,40,183,227,59,229,38,197,33, + 55,55,55,151,33,38,135,163,0,0,0,0,0,0,0,0, + 0,0,0,221,0,94,226,75,122,47,223,229,38,38,38,229, + 229,186,151,151,229,151,229,151,151,151,135,229,229,229,151,151, + 229,186,151,133,151,151,151,151,133,151,151,151,151,133,55,102, + 200,0,0,183,29,221,64,0,0,0,0,0,0,0,0,0, + 0,0,183,47,0,64,0,0,122,122,0,122,0,122,122,122, + 122,0,48,50,152,162,0,122,122,0,122,122,0,122,0,0, + 163,171,0,0,122,0,0,122,122,0,0,0,0,40,171,162, + 212,162,0,0,0,0,0,221,162,162,0,0,162,162,162,162, + 0,162,0,0,0,0,0,0,0,0,0,0,221,221,94,37, + 203,221,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,162,221,0,0, + 0,0,0,0,0,0,0,0,212,162,0,0,0,0,0,221, + 162,162,0,0,162,162,162,162,0,162,0,0,0,0,0,0, + 0,0,0,0,221,221,94,37,203,221,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,221,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,162,0,0,0,0,0,246,0,0,0,0, + 172,129,177,142,104,142,142,142,226,190,142,226,223,177,190,190, + 48,48,222,15,135,15,24,29,135,229,48,129,48,177,29,29, + 48,223,172,253,29,223,24,24,223,24,223,223,223,223,44,241, + 200,64,224,35,59,59,142,64,75,75,97,163,42,26,26,50, + 203,241,75,46,29,48,20,48,129,135,135,135,129,222,253,48, + 253,24,177,177,253,129,48,177,29,190,172,129,48,172,223,20, + 172,20,48,177,177,48,223,178,48,178,223,226,226,222,177,222, + 222,177,177,129,253,129,129,129,229,229,129,20,129,129,151,151, + 55,229,222,223,241,163,212,0,212,94,0,0,0,0,221,162, + 0,0,221,24,226,226,24,177,177,177,177,253,24,92,226,223, + 104,164,212,162,0,0,221,0,50,162,94,0,0,0,0,0, + 0,0,0,0,94,246,0,162,227,50,75,203,0,0,0,0, + 0,0,0,0,0,0,0,0,0,162,0,0,0,221,0,0, + 0,0,0,0,200,46,0,221,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,162,183,59,34,135,133,55,38,38,135,135, + 229,55,38,38,129,200,162,0,0,0,0,0,0,221,246,221, + 0,40,0,0,221,40,212,104,59,162,104,163,75,229,38,38, + 33,38,197,33,102,197,197,38,197,38,55,102,38,38,102,33, + 102,33,33,197,102,38,33,102,38,88,33,33,102,102,33,143, + 223,0,0,78,223,0,64,0,0,0,0,0,0,0,0,0, + 0,0,221,200,183,64,0,0,0,0,0,0,0,0,0,0, + 122,0,48,212,171,0,0,0,0,0,0,0,0,0,0,0, + 162,224,122,0,0,0,0,0,0,0,122,0,122,162,224,162, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,221,0, + 0,0,0,0,0,0,0,0,0,0,0,50,50,0,162,50, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,162,162,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,221,0,0,0,0,0,0,0,0,0, + 0,0,0,50,50,0,162,50,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,162,37,162,0,0,0,0,0,0,0,22,0, + 0,0,0,0,0,94,50,0,0,0,0,0,0,162,162,0, + 0,0,0,0,0,0,78,212,183,42,0,0,0,0,0,0, + 0,162,0,162,162,162,162,0,162,162,162,162,50,50,94,221, + 221,162,221,162,0,221,0,0,0,212,212,94,0,0,0,0, + 0,0,0,0,0,0,0,221,0,0,0,0,162,0,0,0, + 0,0,0,0,0,0,40,94,0,0,0,163,104,94,0,0, + 0,0,0,203,137,246,0,221,79,190,40,104,0,162,162,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,162,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,183,94,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,162,0,221,94,50,75,241,163,221,0,0, + 162,75,241,241,50,0,0,0,0,0,0,0,0,78,0,0, + 0,221,0,0,94,94,221,246,40,162,94,212,0,0,50,241, + 226,46,241,209,92,46,142,24,142,46,24,190,177,177,177,177, + 226,223,46,104,226,46,226,223,24,24,226,223,177,226,46,142, + 94,0,0,0,75,0,224,0,0,0,0,0,0,0,0,0, + 0,0,221,94,56,99,0,0,0,0,0,0,0,0,0,0, + 0,0,24,221,171,46,75,200,200,200,97,42,219,122,227,122, + 40,241,75,241,200,200,200,97,42,183,122,183,162,95,241,200, + 0,0,0,0,0,0,0,0,0,0,162,221,221,162,162,0, + 0,0,0,0,0,0,0,0,0,0,0,37,50,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,162,221,221,162,162,0,0,0,0,0,0,0,0,0, + 0,0,0,37,50,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,200,129,46,239,0,0,0,0,0,0,135,226, + 94,0,0,0,0,47,135,221,0,0,0,0,0,95,24,162, + 0,0,0,0,0,0,75,46,46,46,126,78,0,162,162,162, + 50,94,94,50,50,50,50,50,50,50,203,164,203,22,212,164, + 37,203,164,37,203,37,203,50,163,223,223,142,47,183,0,0, + 221,50,212,0,246,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,172,104,0,0,162,229,201,142,95,183, + 0,0,0,190,173,221,221,172,92,104,48,6,203,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,221,162, + 162,221,0,0,0,0,0,0,104,246,0,0,0,0,0,0, + 0,0,0,162,221,0,0,0,0,162,0,0,0,0,0,0, + 162,162,162,221,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,221,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,122,78, + 122,0,0,0,0,0,0,0,0,0,0,0,0,0,78,0, + 0,0,0,0,0,0,94,164,50,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,59,187,0,0,0,0, + 0,166,235,182,171,187,0,0,0,122,0,0,0,44,15,171, + 229,151,49,15,44,0,245,133,133,133,133,133,186,133,133,133, + 38,152,235,15,122,15,102,38,38,133,38,133,55,133,133,38, + 186,8,29,0,152,55,151,151,151,55,151,151,55,186,55,186, + 55,38,192,55,29,15,229,151,151,133,229,133,229,151,135,29, + 0,0,0,0,0,0,0,0,0,0,162,183,94,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,162,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,162,183,94,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,162,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,162,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,162,162,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,59,228,142,59,162,0,0,0,0,0,253,135, + 50,0,0,0,0,241,154,212,0,0,0,0,0,97,24,162, + 0,0,0,0,0,0,75,46,59,47,163,183,0,0,78,212, + 212,212,40,40,203,203,203,241,164,241,241,241,104,104,241,104, + 164,164,104,164,104,164,164,37,75,34,253,142,47,227,0,0, + 162,94,241,0,0,246,203,221,0,0,0,0,0,162,162,162, + 0,0,0,0,162,0,48,104,0,0,162,20,228,142,59,212, + 0,0,0,0,0,0,162,173,0,0,0,104,0,221,0,0, + 246,246,0,0,0,0,221,0,221,0,0,0,0,0,0,221, + 0,221,0,0,0,0,0,0,104,246,0,0,0,0,0,0, + 162,0,0,0,0,0,0,0,0,221,0,0,0,0,0,0, + 246,212,0,162,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,221,183, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,221,215, + 78,0,0,0,0,0,246,164,40,221,0,0,0,0,78,0, + 0,162,221,78,183,162,122,122,0,0,245,15,0,0,0,0, + 162,95,192,49,186,97,0,0,75,200,183,162,162,133,38,245, + 133,38,235,245,29,0,133,33,38,102,197,102,38,197,100,33, + 72,133,158,151,26,186,134,72,143,72,143,88,72,72,143,242, + 72,7,38,162,245,66,30,66,43,66,156,66,30,66,30,66, + 30,179,152,72,234,201,171,197,20,33,229,33,135,33,44,38, + 0,0,0,0,0,0,0,0,0,162,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,162,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,162,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,162,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,162,162,162,0,0, + 0,0,0,0,46,151,223,47,187,0,0,162,122,162,29,253, + 164,0,0,0,0,46,20,37,0,0,0,0,0,95,223,162, + 0,0,0,0,0,0,241,142,200,47,95,94,0,215,94,212, + 104,164,226,92,92,226,73,190,177,226,137,177,190,137,48,92, + 190,226,92,190,190,92,92,226,241,142,29,142,59,126,0,221, + 221,40,226,162,0,172,18,0,0,0,40,0,0,246,162,0, + 162,0,0,0,221,246,172,226,0,0,42,135,55,20,75,166, + 0,0,0,0,0,0,221,173,221,215,221,94,221,40,221,246, + 40,221,0,0,0,0,0,221,221,162,162,0,0,0,0,0, + 0,0,0,0,0,0,0,0,104,246,0,0,0,0,0,162, + 0,162,0,0,0,0,0,0,0,40,0,0,0,0,0,221, + 162,221,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,162,0, + 0,0,0,0,0,0,0,0,0,0,221,0,0,0,0,40, + 200,212,94,162,94,0,0,50,203,227,0,0,122,0,221,183, + 0,0,0,0,162,95,227,50,94,0,183,162,0,0,0,0, + 0,0,162,162,162,162,0,0,46,24,162,183,42,162,162,162, + 183,162,122,162,221,42,64,162,94,94,94,50,94,221,50,50, + 50,50,42,162,162,35,212,37,50,37,37,212,91,37,75,111, + 163,219,50,122,171,22,22,75,209,22,200,75,75,75,75,241, + 241,14,219,37,42,163,42,163,227,22,42,75,122,37,56,22, + 0,162,94,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,162,94,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,221,0,111,56,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,162,0,0,162,0,0,0,0,162,0,0,0,0,0,0, + 0,0,0,0,142,228,223,44,227,0,0,0,0,212,229,177, + 212,0,0,0,0,48,44,212,0,0,0,0,0,47,223,162, + 0,0,0,0,0,0,46,24,59,59,95,183,0,246,94,37, + 104,241,104,104,226,226,226,92,226,92,190,226,226,190,177,92, + 177,226,92,73,190,190,177,92,164,142,20,223,47,166,0,221, + 94,203,226,162,221,212,104,0,162,162,212,0,0,212,162,0, + 162,0,0,0,0,221,190,104,0,0,78,229,55,15,163,126, + 0,0,0,0,0,0,0,173,221,215,0,40,221,221,162,40, + 221,221,0,0,0,0,0,246,246,221,221,221,0,0,0,0, + 0,0,0,0,0,0,0,0,40,246,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,40,0,0,94,162,162,50, + 221,162,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,42,183,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,215,212,0,0,0,221, + 104,104,241,40,37,0,0,183,75,166,0,0,0,0,162,0, + 221,227,40,94,122,212,104,226,104,0,95,111,0,0,0,0, + 162,122,219,183,122,78,0,0,44,223,162,221,187,126,183,42, + 166,42,183,42,78,221,224,122,42,183,56,219,42,183,26,219, + 26,26,94,183,219,64,42,42,42,42,42,42,122,42,122,42, + 42,162,42,0,152,122,42,42,42,42,26,42,26,26,42,42, + 26,26,122,42,221,183,122,42,42,42,42,42,122,219,221,219, + 0,221,221,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,162,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,221,221,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,162,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,183,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,162,0,0,162,0,0,0,0,0,0,0,0,0, + 0,0,0,122,29,228,223,44,126,0,0,0,0,221,197,223, + 50,0,0,0,0,222,135,50,0,0,0,0,0,46,135,78, + 0,0,122,0,0,0,35,46,200,47,126,50,0,94,183,203, + 241,104,92,24,104,226,226,223,226,223,190,177,190,190,226,223, + 190,190,223,223,92,73,190,177,163,35,48,223,95,126,0,162, + 183,203,190,0,0,0,246,162,221,162,94,0,162,40,162,162, + 162,0,0,0,0,0,48,226,0,0,91,135,201,48,59,111, + 0,0,0,0,0,0,221,173,122,221,0,0,221,0,221,246, + 246,246,0,0,221,221,221,221,0,0,0,0,0,0,162,0, + 0,0,0,0,0,0,0,0,40,221,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,162,162,0,0,0, + 162,0,162,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,183,111,78,183,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,94,190,162,0,0,0, + 227,104,241,164,212,0,227,37,200,183,162,0,0,0,0,0, + 0,183,239,239,94,122,227,75,104,122,20,34,0,0,0,122, + 162,183,150,47,142,200,0,0,253,177,42,0,42,20,59,44, + 35,141,59,47,241,0,29,29,172,29,190,29,29,29,254,44, + 243,254,190,223,183,20,142,172,29,172,172,34,48,99,99,47, + 150,219,48,0,245,129,15,129,229,129,129,229,129,129,15,150, + 29,12,29,129,47,129,229,129,129,129,229,135,150,20,26,129, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,162,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,162,0,0,0,162,0,0,0,0,0,0,0,0, + 0,0,0,162,129,38,223,64,126,122,0,0,0,221,197,228, + 183,0,0,0,0,48,103,183,0,0,0,0,0,46,129,162, + 0,0,0,0,0,0,46,142,163,59,227,183,0,212,42,212, + 241,104,142,226,104,223,190,177,190,177,190,177,177,48,190,177, + 223,190,177,190,190,226,226,48,75,59,29,223,47,126,0,162, + 227,75,142,221,221,0,221,162,221,221,94,0,221,212,94,221, + 0,0,221,221,0,0,48,92,0,221,183,135,38,172,47,42, + 0,0,0,0,0,0,221,173,56,122,0,0,221,246,246,221, + 246,246,0,0,221,221,0,221,0,0,0,0,0,0,0,246, + 221,0,0,0,0,0,0,0,40,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,94,50,94,162,162,221,94, + 162,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,183,187,163,0,0,0,0,0, + 0,162,0,0,0,0,0,0,0,0,0,200,203,162,42,94, + 0,40,104,203,212,122,223,46,221,0,0,0,0,0,0,0, + 0,0,0,0,0,122,221,0,163,122,47,200,0,0,0,122, + 0,183,219,95,241,212,0,122,135,177,126,162,183,47,141,47, + 95,17,95,241,226,122,34,104,104,46,200,104,104,104,166,104, + 187,187,104,24,56,171,142,172,142,190,29,142,48,59,95,47, + 219,42,48,162,245,251,251,129,129,129,129,251,129,251,129,187, + 20,150,48,251,129,251,129,129,129,129,251,129,12,20,17,135, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,162,122,219,122,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,162,162,162,0,0,0,0,0,0,0,0, + 0,0,0,162,251,55,190,44,111,162,0,0,0,221,201,103, + 50,0,0,0,0,48,201,37,0,0,0,0,0,24,228,50, + 0,0,122,0,0,0,47,46,163,59,163,162,162,95,239,200, + 104,46,104,226,190,142,223,223,223,190,48,48,135,135,172,177, + 135,48,48,177,48,177,48,48,241,35,177,142,59,126,0,95, + 166,203,223,162,221,0,162,0,221,0,162,0,162,221,221,0, + 0,0,221,0,0,221,172,190,0,0,26,151,201,48,59,187, + 0,0,0,0,0,0,221,38,0,122,0,0,221,246,221,246, + 221,0,221,221,221,0,246,0,0,0,0,0,221,40,246,221, + 221,221,221,221,221,0,0,0,0,221,0,0,0,221,0,0, + 0,0,94,94,221,94,94,212,162,0,221,162,162,162,50,50, + 212,162,0,162,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,95,142,162,0,0,0,0,0,0,0,221,104,34,46,59, + 183,122,200,46,37,122,223,177,94,0,0,0,0,0,0,0, + 0,0,0,0,0,0,215,187,162,162,0,0,0,0,0,0, + 42,162,0,0,221,0,0,26,253,223,187,122,212,0,0,0, + 0,0,0,215,142,219,59,0,0,122,221,122,122,122,0,0, + 0,0,0,0,215,64,0,0,0,0,0,0,0,0,0,0, + 0,0,135,162,171,0,0,0,0,0,0,0,162,162,162,0, + 0,221,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,162,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 162,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,192,132,122,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,162,162,0,0,162,162,0,0,0,0,0, + 0,0,0,221,228,103,29,142,95,122,0,0,0,221,38,79, + 75,0,0,0,0,48,201,164,0,0,0,0,0,35,55,50, + 0,0,122,0,0,0,47,46,97,46,95,187,162,200,95,241, + 104,46,226,142,226,142,190,190,223,20,135,135,129,129,129,129, + 135,135,129,129,129,129,222,129,104,29,172,223,47,187,0,75, + 95,200,172,162,78,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,190,92,0,0,42,151,38,190,95,183, + 0,0,0,0,0,0,0,79,0,0,221,246,221,221,221,40, + 221,0,0,0,0,0,221,0,221,0,0,246,40,40,40,246, + 221,0,0,0,0,0,0,0,221,0,0,221,221,94,0,221, + 0,0,162,212,221,94,221,212,162,162,162,162,162,162,94,162, + 94,94,162,0,162,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,183,200,221, + 0,122,20,142,221,0,0,0,0,0,0,122,227,34,29,223, + 44,46,75,142,75,122,35,46,221,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,94,166,122,0,0,0,0,122,162, + 42,162,0,0,126,239,0,26,135,253,187,122,126,0,0,0, + 0,0,122,219,142,42,64,122,183,183,166,219,166,26,166,95, + 200,95,183,94,187,47,0,0,0,0,0,0,0,0,0,0, + 0,0,135,162,229,42,0,0,0,0,0,0,0,0,0,0, + 0,59,0,0,0,0,0,0,0,0,0,0,0,0,0,97, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,40,162,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 40,162,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,171,254,12,12,122,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,162,0,0,0,162,0,0,0,0,0, + 0,0,0,122,228,103,177,44,111,78,0,0,0,221,201,201, + 209,0,0,0,0,48,55,164,0,0,0,0,0,142,55,212, + 0,0,122,0,0,0,35,46,241,104,97,183,122,35,224,59, + 104,142,24,142,142,190,29,223,177,172,135,15,129,229,129,135, + 15,135,135,135,135,253,135,129,46,223,135,142,47,166,0,75, + 59,46,48,183,94,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,190,104,0,0,50,129,55,223,224,126, + 0,0,0,0,0,0,221,173,42,42,221,40,246,246,246,246, + 221,0,0,122,0,0,0,221,0,0,221,221,221,221,94,40, + 0,162,221,0,0,0,0,221,0,221,0,0,221,221,0,0, + 0,0,94,221,221,221,162,37,50,246,162,162,0,162,0,221, + 40,221,94,162,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,227,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,75,34,142, + 95,162,183,75,47,122,0,0,0,0,0,227,221,46,20,29, + 223,34,223,226,46,122,223,50,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,162,162,0,0,0,0,122,78, + 162,183,0,0,95,227,0,187,253,135,111,162,126,0,0,0, + 0,0,122,227,200,122,171,209,142,24,24,223,142,223,223,226, + 46,59,35,46,64,64,0,0,0,0,0,0,0,0,0,0, + 122,0,135,50,152,0,0,0,0,0,0,0,0,0,0,0, + 0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,200, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,212,50,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 212,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,183,166,150,243,122,26,0,0,221,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,162,162,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,221,55,55,48,34,224,122,0,0,0,221,38,79, + 104,0,0,0,0,135,201,164,0,0,0,0,0,223,55,37, + 0,0,122,0,0,0,35,226,75,241,95,162,162,35,59,46, + 47,142,223,223,223,223,20,190,20,48,135,135,129,229,129,229, + 129,229,129,129,135,135,129,222,59,223,129,223,47,132,122,59, + 99,35,20,221,221,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,190,104,0,0,42,229,201,190,59,111, + 0,0,0,0,0,0,0,173,0,122,221,246,221,246,246,221, + 0,0,0,78,0,94,221,221,0,0,221,221,221,221,221,162, + 0,0,0,0,0,0,0,0,0,0,0,221,0,0,0,0, + 0,0,221,221,0,162,221,221,162,246,0,0,0,162,162,0, + 203,94,212,94,162,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,221,0, + 0,0,0,0,0,0,0,122,0,0,0,0,0,183,142,29, + 142,94,221,122,95,0,0,0,183,78,0,47,142,42,35,29, + 34,223,44,223,46,122,253,203,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,162,78, + 162,0,0,0,95,239,0,111,135,135,111,183,111,0,0,0, + 0,0,42,219,0,42,29,0,0,0,0,162,0,0,0,0, + 0,0,122,162,59,44,0,0,0,0,0,0,0,0,0,0, + 122,0,48,162,171,162,0,0,0,0,0,0,0,0,0,0, + 162,171,0,0,0,0,0,0,0,0,0,0,0,0,0,246, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,94,221,0,0,0,0,0,162, + 0,0,0,0,0,162,212,40,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 94,221,0,0,0,0,0,162,0,0,0,0,0,162,212,40, + 0,0,0,126,0,122,26,0,26,212,0,162,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,162,0,0,0,0,162,0, + 0,221,162,0,0,0,162,0,162,0,0,0,0,0,0,0, + 0,0,0,122,103,79,29,29,59,78,0,0,0,0,197,79, + 164,0,0,0,0,135,55,14,221,0,0,0,0,223,55,22, + 0,0,122,0,0,0,46,223,104,104,166,162,183,35,224,47, + 104,46,142,142,223,223,29,253,223,20,135,229,129,229,229,129, + 135,135,135,135,129,129,135,129,75,253,129,190,64,126,0,75, + 95,59,48,221,215,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,142,104,0,0,183,229,33,223,59,95, + 0,162,0,0,0,0,0,173,0,0,0,0,0,0,221,0, + 0,0,0,0,221,246,221,221,0,0,221,0,0,0,162,221, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,221,221,0,0,221,0,0,221,0,162,0, + 104,212,162,162,162,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,94,221,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,187,219,0,219,132,183,122,95,35, + 183,0,0,0,162,0,122,95,239,97,126,142,15,29,64,29, + 20,253,223,223,35,122,46,50,0,0,0,0,0,0,0,0, + 111,183,95,64,224,95,0,0,0,0,0,0,0,0,122,42, + 122,183,40,0,111,40,0,187,229,135,163,183,163,0,0,0, + 0,0,42,42,0,219,34,0,0,0,0,0,0,0,0,0, + 0,0,0,0,254,225,0,0,0,0,0,0,0,122,219,0, + 0,42,129,162,245,0,0,0,0,0,0,122,0,122,122,162, + 162,245,0,0,0,0,0,0,122,0,122,0,122,122,122,183, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,162,212, + 203,0,0,0,0,164,92,40,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,162,212,203,0,0,0,0,164,92,40, + 0,0,0,0,0,0,0,0,122,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,221,103,38,48,171,99,78,0,0,0,221,201,197, + 226,122,0,0,0,135,55,14,0,0,0,0,0,223,201,212, + 0,0,122,0,0,0,24,222,24,142,163,183,162,44,59,35, + 142,142,142,29,29,223,223,20,190,20,20,129,151,229,129,229, + 229,15,229,229,15,129,135,222,47,222,135,190,64,95,0,97, + 224,47,20,162,183,221,142,251,251,129,190,48,190,48,48,48, + 172,173,173,173,173,173,173,226,48,190,203,229,197,104,59,95, + 0,162,183,215,40,95,47,172,104,104,40,40,221,221,246,104, + 104,104,47,246,246,221,221,246,40,40,221,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 162,162,50,94,162,162,0,0,212,164,162,221,94,94,162,0, + 212,50,162,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,221,0,0,0,0,0,0,0,221, + 221,221,183,246,221,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,162,0,111,64,182,59,142,224,59, + 0,0,224,59,0,0,0,34,15,221,126,229,151,229,253,34, + 47,59,95,50,221,0,162,0,0,0,0,0,0,0,122,162, + 183,29,40,166,34,171,200,162,0,0,0,0,0,0,162,78, + 0,183,64,221,111,166,0,111,151,135,111,183,95,0,0,0, + 0,0,219,42,0,219,34,0,0,0,0,0,0,0,0,0, + 0,0,0,0,59,34,0,0,0,0,0,0,0,0,141,42, + 0,0,135,0,245,97,78,122,122,162,0,122,122,122,162,183, + 162,245,40,42,0,122,162,0,122,122,122,122,122,122,42,95, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,94,0,0, + 212,142,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,221,103,197,15,20,64,183,162,0,0,0,38,220, + 24,56,0,0,0,48,201,241,221,0,0,0,0,223,38,37, + 0,122,122,0,0,0,142,251,223,223,95,94,42,35,35,47, + 142,142,34,190,29,29,20,20,223,20,229,229,151,229,229,229, + 229,229,229,229,129,229,129,129,35,228,129,177,47,111,0,35, + 59,46,20,94,227,0,40,190,190,251,48,48,48,48,48,251, + 190,129,173,173,48,173,251,190,48,48,203,228,201,104,254,111, + 0,183,212,227,40,40,40,190,142,190,104,164,212,40,142,190, + 142,190,104,40,246,221,246,246,40,221,0,0,162,246,212,221, + 0,0,0,0,246,0,0,0,0,0,0,0,215,94,122,221, + 40,164,212,246,94,94,162,162,94,203,212,37,37,50,162,221, + 40,221,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,162,162,0,0,0,0,221,221,221, + 221,221,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,42,59,99,64,29,172,29, + 183,0,47,15,0,0,0,44,38,29,122,64,223,59,95,163, + 162,0,0,0,0,0,0,0,0,0,0,0,0,0,122,122, + 122,44,171,0,162,20,29,64,219,122,0,122,0,0,122,78, + 0,122,64,221,224,40,162,224,228,223,75,187,163,0,0,0, + 0,0,42,219,0,219,44,0,0,0,0,0,0,0,0,0, + 0,0,0,0,182,44,0,0,0,0,0,0,0,0,219,122, + 122,122,48,0,245,40,0,0,0,0,0,0,0,0,0,162, + 122,245,203,0,0,0,0,0,0,0,0,0,0,0,0,227, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,162,0,0,0,0,0,0,162,0,0, + 212,212,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,162,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,162,0, + 0,0,0,162,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,221,228,201,135,15,44,94,0,0,0,221,201,220, + 226,0,0,0,0,48,103,164,162,0,0,0,0,223,201,212, + 0,0,122,0,0,0,223,228,177,177,224,183,183,35,182,35, + 142,142,223,34,190,29,172,20,29,48,229,129,151,129,229,135, + 135,229,135,229,135,229,129,151,46,55,135,223,95,166,0,59, + 64,59,135,183,227,0,0,0,0,0,0,0,0,221,0,0, + 0,0,0,0,0,0,104,104,0,0,183,33,79,47,59,95, + 0,0,0,0,0,0,0,142,104,203,40,40,246,212,40,226, + 104,246,40,246,246,0,94,162,221,0,0,0,0,212,92,246, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,162, + 162,162,162,162,221,50,162,162,0,162,212,37,50,50,162,212, + 212,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,162,0,0,0,0,0,246,212,246, + 246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,183,254,150,64,223,29,20, + 34,64,29,15,29,187,95,224,229,29,212,221,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,162,59,44,99,47,29,20,34,56,0,0,0,0,162,122, + 0,56,64,221,224,227,122,61,103,135,111,166,126,0,0,0, + 0,0,219,219,122,132,44,0,0,0,0,0,0,0,0,0, + 0,0,0,0,224,64,0,0,0,0,0,0,0,0,42,42, + 122,122,48,122,245,200,0,0,0,122,0,0,0,0,0,0, + 0,245,200,0,0,0,122,0,0,0,0,0,0,0,0,221, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,221,50,0, + 0,50,162,162,162,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,122,0,122,122,122, + 122,122,42,221,228,201,15,15,44,183,219,235,219,221,38,79, + 24,56,0,0,0,135,201,164,162,0,0,0,0,223,55,241, + 0,122,122,0,0,0,177,228,48,223,75,94,219,35,111,44, + 223,223,44,223,223,20,20,20,20,20,229,129,229,229,229,229, + 229,229,229,229,229,135,135,129,226,79,222,223,59,126,0,75, + 224,59,20,221,40,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,142,104,0,0,42,242,55,104,95,126, + 0,0,0,0,0,0,0,172,190,0,0,246,104,40,40,251, + 104,0,246,246,221,221,221,246,0,0,0,0,0,246,104,94, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,162,162, + 0,0,0,162,162,246,162,162,0,94,0,221,162,50,162,94, + 50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,221, + 0,221,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 162,0,0,0,0,0,0,0,0,187,64,99,64,20,29,20, + 15,15,15,229,29,224,64,0,0,162,0,162,122,0,0,162, + 0,0,0,0,0,0,0,0,0,0,0,42,122,0,0,0, + 0,183,183,221,59,34,192,29,29,122,166,122,0,0,122,122, + 0,56,47,221,59,227,42,182,229,135,126,187,126,0,0,0, + 0,0,42,183,0,219,34,0,0,0,0,0,0,0,0,0, + 0,0,0,0,224,171,183,122,0,0,0,0,183,42,254,219, + 122,122,135,0,245,172,0,183,122,0,0,0,0,0,0,183, + 0,245,172,0,183,122,0,0,0,0,0,0,0,162,122,95, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,221,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,221, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,122,122,122,122,122,122,42,122,26,0,0,42,26,26, + 26,26,26,26,12,26,12,12,26,12,12,12,8,12,12,8, + 8,8,8,219,173,79,135,171,44,187,42,243,243,221,201,197, + 92,122,0,0,0,253,201,209,0,0,0,0,0,223,103,241, + 0,0,122,0,0,0,177,103,222,223,59,219,183,35,99,47, + 142,142,142,34,223,253,135,20,20,20,15,229,151,229,229,229, + 229,229,229,129,135,229,135,229,223,79,135,142,59,166,0,224, + 59,47,135,183,166,0,0,0,0,162,162,0,0,0,162,162, + 162,162,0,0,0,0,104,104,0,0,183,72,103,226,95,187, + 0,162,0,0,0,0,0,251,190,0,0,94,203,203,164,172, + 104,221,246,246,221,0,0,0,0,0,0,122,122,40,92,212, + 0,221,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,221,162,0,212,221,0,162,212,0,0,0,221,221,0, + 221,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,162,221,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 183,215,0,0,0,0,0,0,0,219,214,64,225,15,20,59, + 163,50,95,59,0,166,171,95,0,0,0,0,0,0,0,0, + 122,183,42,0,0,0,0,0,0,0,0,78,122,42,0,0, + 0,132,171,47,221,239,20,171,20,42,64,219,0,0,122,122, + 221,183,44,122,224,227,0,59,103,135,224,227,126,0,0,0, + 0,0,42,42,0,12,35,0,0,0,0,0,0,0,0,0, + 0,0,0,0,150,29,254,219,122,219,254,187,215,150,99,219, + 122,42,135,0,245,229,95,0,0,122,0,0,0,0,122,42, + 122,245,229,95,0,0,122,0,0,0,0,42,42,42,17,20, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,162, + 183,0,0,122,78,122,122,0,0,0,0,0,221,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,162,183,0,0,122,78,122,122,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,42,26,26,0,26,26,26,26,26,42,0,26,26,26, + 26,26,26,26,26,26,26,26,26,26,17,42,0,12,8,12, + 12,12,12,12,12,12,12,12,8,26,12,12,12,26,12,12, + 26,219,26,26,103,38,135,15,44,95,122,26,26,0,201,79, + 177,122,0,0,0,48,79,209,162,0,0,0,0,253,103,22, + 0,0,42,0,0,0,222,55,135,223,95,126,183,44,59,35, + 142,34,190,29,44,29,20,253,20,135,135,129,151,229,229,135, + 229,151,135,135,20,229,129,229,223,103,135,223,95,183,0,59, + 64,254,229,183,40,0,122,162,0,0,122,162,78,162,122,122, + 122,122,122,162,0,221,142,241,162,94,163,242,228,46,75,95, + 0,0,0,0,162,0,0,48,142,0,0,40,172,172,190,104, + 246,246,221,40,162,0,0,221,0,0,40,47,95,164,104,221, + 221,166,221,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,162,162,0,0,50,212,0,0,40,0,0,0,162,0,0, + 162,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,162,162,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,94,221,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,94,163,94,0, + 0,0,0,0,0,0,0,221,0,0,122,0,0,0,0,0, + 0,126,46,162,0,0,0,0,0,0,0,0,42,141,111,0, + 0,183,29,46,227,0,59,226,200,183,141,219,0,0,122,0, + 42,221,59,122,224,94,42,99,103,135,111,187,95,0,0,0, + 0,0,42,183,0,150,44,0,0,0,0,0,0,0,0,0, + 0,0,0,0,254,29,142,47,59,104,166,219,95,150,47,122, + 122,0,48,0,245,173,229,34,59,59,75,224,122,141,150,254, + 150,152,173,229,34,59,59,75,224,122,141,150,254,141,44,229, + 0,0,94,0,0,212,142,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,183, + 183,0,183,42,183,122,122,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,94,0,0,212,142,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,183,183,0,183,42,183,122,122,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,122,42,42,0,122,219,26,219,26,42,0,26,26,26, + 26,26,26,26,42,26,26,26,42,42,42,0,0,42,42,42, + 42,42,42,26,42,42,42,42,42,42,42,42,42,26,26,122, + 42,122,122,221,103,55,129,15,225,95,122,0,122,0,201,201, + 223,122,0,0,0,177,55,164,122,0,0,0,0,34,103,203, + 0,0,122,0,0,0,222,103,222,223,95,239,183,178,64,44, + 20,223,34,29,172,20,20,135,20,15,229,229,151,151,151,135, + 229,151,229,229,135,135,135,135,226,103,222,190,59,227,0,224, + 47,59,135,183,227,0,122,162,0,0,0,162,78,162,78,162, + 0,0,0,0,0,0,104,203,221,94,40,242,201,46,224,111, + 0,0,0,0,0,0,221,48,226,0,0,221,40,40,40,246, + 246,246,246,246,0,0,0,40,0,122,40,142,40,164,50,40, + 215,126,162,0,0,0,122,0,0,0,0,227,0,122,221,0, + 0,0,0,0,0,104,92,94,162,40,162,94,212,212,162,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,94,162,0,0,162,162,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,215,215,246,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,215,162,0,0,0,0,0,0,0,0,0,0, + 0,0,0,122,99,0,0,0,0,0,166,221,0,78,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,162,141,214,212, + 0,0,99,0,0,0,0,0,0,50,0,0,0,0,122,122, + 56,221,0,0,59,183,122,59,151,135,111,111,126,0,0,0, + 0,0,42,122,0,150,47,0,0,0,0,0,0,0,0,0, + 0,0,0,0,254,47,221,221,122,221,221,0,0,0,122,0, + 122,42,177,78,34,221,94,212,94,94,94,94,162,162,162,162, + 94,224,221,94,212,94,94,94,94,0,162,0,122,221,221,221, + 0,0,221,0,0,212,40,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,221,0,0,212,40,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,103,228,229,15,44,254,122,0,0,219,79,197, + 226,56,0,0,0,48,55,14,162,0,0,0,0,135,38,241, + 0,0,42,0,0,0,222,228,135,223,224,166,26,44,99,34, + 29,142,29,20,171,15,15,229,20,151,229,229,229,151,38,229, + 229,229,229,229,135,229,135,151,226,79,135,226,95,126,0,224, + 99,64,229,221,166,0,0,0,0,0,0,0,162,122,162,162, + 0,162,0,0,162,0,104,241,94,0,241,72,201,46,200,95, + 0,95,187,166,187,166,0,48,142,0,0,0,0,0,0,246, + 221,221,221,221,221,221,221,0,0,0,0,0,0,221,104,104, + 183,95,221,0,0,183,94,162,0,221,221,162,0,0,0,0, + 0,162,0,183,40,226,164,162,0,40,94,212,40,50,221,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,162,0,162,50,50,162,0,0,0,0,0,221, + 221,0,0,0,0,0,0,0,0,0,221,221,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,44,166,0,0,183,227,0,183,0,215,183,162, + 0,0,0,0,0,0,163,162,0,0,0,0,0,42,64,29, + 132,0,141,37,164,0,0,0,0,95,0,0,0,0,78,122, + 183,78,0,0,224,227,42,35,103,20,95,111,95,0,0,0, + 0,0,219,42,0,243,35,0,0,0,0,229,104,203,129,0, + 0,0,0,0,99,64,0,0,0,0,0,0,122,0,0,0, + 122,56,177,42,44,0,0,0,0,0,0,122,0,122,0,122, + 0,78,0,0,0,0,0,0,122,0,0,122,0,122,122,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,122,42,0,122,122,122,122,122,122,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 122,122,0,215,228,103,135,171,34,224,122,0,0,221,38,201, + 226,122,0,0,0,20,38,241,0,0,0,0,0,29,79,200, + 0,0,42,0,0,42,24,228,129,226,224,239,183,29,59,44, + 29,223,20,20,20,177,15,245,223,20,151,20,38,34,29,133, + 229,229,229,135,171,229,135,15,226,103,135,223,95,187,0,224, + 64,47,229,215,183,0,0,0,0,183,59,183,0,122,0,162, + 122,162,162,227,183,0,104,203,212,162,47,242,103,46,224,126, + 0,20,47,47,47,64,0,190,92,0,122,95,95,0,0,40, + 221,221,215,40,246,0,0,221,0,0,0,0,0,0,40,40, + 227,183,0,0,0,221,183,94,0,0,56,162,0,0,0,0, + 0,0,162,95,246,200,203,203,162,104,50,162,221,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,162,212,50,162,0,0,0,0,0,0,0, + 0,162,221,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,183,59,126,126,59,212,94,95,162,0,122,183, + 122,0,0,0,78,183,212,0,0,0,0,0,0,42,99,20, + 171,59,224,241,35,99,59,47,47,187,0,0,0,0,42,78, + 126,162,0,0,224,183,122,35,133,135,111,111,95,0,0,0, + 0,0,42,42,0,141,47,0,0,0,0,212,94,221,212,0, + 0,0,0,0,59,64,0,0,0,0,0,0,0,0,0,0, + 122,221,48,187,34,0,122,122,42,122,122,42,122,42,122,42, + 162,78,0,122,122,42,122,122,42,78,78,122,42,122,42,239, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,122,162,0,26,139,8,182,211,182,0,12,12,12, + 132,17,219,219,42,219,122,122,42,42,42,219,26,26,26,219, + 26,42,42,42,42,122,42,42,42,42,122,42,122,122,122,122, + 122,122,122,221,55,103,229,15,34,59,0,0,0,0,201,220, + 24,183,0,0,0,172,197,226,122,0,0,0,0,34,103,24, + 0,122,122,0,0,26,187,103,135,177,59,166,219,178,64,223, + 29,172,20,20,171,223,14,209,44,10,177,133,38,38,64,229, + 38,186,229,229,135,229,135,229,177,103,222,142,200,212,0,59, + 64,64,15,221,183,0,0,162,0,95,95,47,0,122,0,122, + 122,0,47,142,142,0,104,203,94,162,190,197,228,142,47,126, + 0,20,111,59,35,35,0,223,226,0,132,172,47,246,0,203, + 40,221,215,40,221,0,0,0,0,0,0,0,0,0,0,162, + 94,162,0,0,0,0,0,95,0,0,0,0,0,0,0,0, + 0,183,122,50,183,212,183,15,221,40,162,94,221,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,162,162,162,0,0,0,0,0,0,0,0, + 221,246,212,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,122,42,0,0,0,0, + 42,95,0,0,183,227,227,254,47,94,56,254,126,95,183,0, + 0,0,0,0,0,162,162,0,0,0,0,0,0,0,64,20, + 171,15,29,192,171,57,15,152,15,50,0,0,0,0,221,42, + 227,183,0,0,200,183,26,35,55,135,224,95,75,0,0,0, + 0,0,42,42,0,8,35,0,0,0,0,0,0,0,0,0, + 0,0,0,0,182,47,0,0,122,122,0,0,0,0,0,0, + 122,122,104,162,75,0,0,0,0,122,0,0,0,0,0,0, + 0,0,122,0,122,0,122,0,0,0,0,0,0,122,0,95, + 0,221,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,221,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,183,183,227,111,224,0,132,99,182, + 99,99,99,64,182,99,99,99,141,99,254,254,109,150,187,166, + 17,17,132,219,26,219,122,122,78,162,0,122,122,122,122,122, + 0,0,0,0,129,228,229,15,44,182,122,0,0,221,197,79, + 226,42,0,0,0,15,79,226,122,0,0,0,0,29,55,104, + 0,0,42,0,122,26,187,103,222,29,59,227,183,44,99,44, + 29,29,20,15,135,178,253,178,209,22,10,223,38,15,99,182, + 229,99,38,229,229,229,229,229,190,228,222,142,95,183,162,64, + 44,64,229,183,183,0,0,122,0,59,142,59,0,0,0,0, + 0,0,47,166,59,0,104,203,221,0,172,242,103,104,95,163, + 0,20,59,47,99,99,0,142,104,0,183,245,29,0,0,40, + 40,246,246,221,0,0,0,0,0,0,0,0,0,0,162,221, + 221,0,0,0,0,0,219,212,0,0,0,0,0,122,0,0, + 183,142,122,254,95,219,219,151,246,246,221,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,162,0,0,0,0,0,0,0,0,0,0, + 0,0,162,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,219,42,0,0,0,0, + 0,224,221,183,254,183,0,183,224,221,0,227,187,95,42,0, + 0,0,0,0,0,0,0,0,183,162,0,122,122,0,183,34, + 192,15,15,15,20,171,15,20,171,42,0,0,0,162,183,42, + 183,162,0,0,212,0,122,35,38,178,183,166,239,0,0,0, + 78,0,42,122,0,8,59,0,0,0,0,0,0,0,0,0, + 0,0,0,0,224,59,0,0,0,122,122,0,0,0,0,0, + 122,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,221,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,162,0,122,0,0,183,122, + 122,122,56,42,183,122,42,42,183,183,42,122,122,78,122,183, + 162,183,122,162,183,122,122,122,122,122,122,122,122,0,0,0, + 122,122,0,221,135,103,135,15,34,59,122,0,0,0,38,79, + 84,56,0,0,0,135,38,24,0,0,0,0,0,223,103,241, + 0,0,42,122,0,122,226,251,48,223,47,126,42,44,99,35, + 172,20,20,20,34,20,245,229,20,15,154,24,129,133,15,99, + 44,47,151,135,229,135,135,229,226,251,129,223,75,212,0,64, + 64,59,135,50,42,0,0,162,0,95,15,47,0,122,0,122, + 122,0,44,151,20,0,203,241,94,162,177,33,103,46,59,126, + 0,29,35,47,35,64,0,226,24,0,162,135,29,0,0,212, + 246,246,246,221,0,0,0,0,0,0,0,0,0,0,221,0, + 0,0,0,0,0,162,215,0,0,0,215,47,111,183,183,219, + 224,215,166,0,64,47,34,15,221,221,0,221,162,162,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,221,221,0,0,0,221,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,183,94,0,0,0,17,99,166,0,0,0,0, + 0,0,0,0,0,0,0,0,0,122,0,0,0,0,162,0, + 0,0,0,0,0,0,0,187,200,239,0,122,219,12,132,254, + 171,47,111,171,20,20,192,171,135,42,0,0,0,122,162,183, + 50,183,0,0,122,122,26,29,38,22,162,187,183,0,0,122, + 162,0,0,0,0,99,47,0,0,0,0,0,0,0,0,0, + 0,0,0,0,64,64,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,122,0,122,0,122,0,0,0,0,0,0,122,0,0, + 0,0,0,162,135,201,229,171,29,224,122,0,0,0,55,201, + 226,122,0,0,0,48,55,92,122,0,0,0,0,223,103,241, + 0,0,122,0,0,122,177,31,177,223,64,212,187,34,64,44, + 34,142,20,20,20,15,15,15,135,133,186,129,84,222,102,34, + 235,34,44,135,229,229,135,229,177,103,129,190,224,239,162,44, + 64,64,229,183,162,0,0,0,0,0,0,0,0,122,0,0, + 0,0,221,246,162,221,203,203,0,0,92,156,103,46,95,163, + 0,44,200,64,59,35,0,226,241,0,0,0,0,0,0,50, + 246,246,221,0,0,0,0,0,0,0,0,0,0,0,162,0, + 0,0,0,0,0,0,221,0,0,0,183,15,29,183,0,0, + 122,183,162,0,221,99,15,190,0,221,0,221,221,162,0,162, + 212,162,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,162,0,0,221,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,162,0,0,0,42,221,78,227,150,111,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,221,162,183,162,0,0,150,99,192,29, + 29,47,44,171,192,20,20,171,171,162,0,0,0,162,42,183, + 50,78,0,0,0,0,42,29,38,24,219,95,212,0,0,78, + 122,0,0,0,0,211,59,0,0,0,0,0,0,0,0,0, + 0,0,0,0,59,59,122,122,0,0,0,122,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,122,0,0, + 0,0,0,122,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,122,209,129,129,20,44,224,122,0,0,162,103,33, + 226,56,0,0,0,177,55,24,0,0,0,0,0,29,103,24, + 0,0,42,0,0,42,48,55,135,48,59,239,187,29,64,44, + 29,29,20,20,20,15,15,229,20,15,151,133,151,133,18,151, + 171,15,64,34,229,151,229,186,177,201,103,177,47,163,122,192, + 34,34,151,221,183,0,0,122,0,0,122,0,122,0,122,0, + 122,0,0,0,0,0,104,241,162,0,104,242,33,190,224,97, + 162,15,224,224,99,99,0,104,104,0,0,0,0,0,221,246, + 221,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,221,0,0,0,0,95,38,133,245,29,227, + 0,111,56,56,183,47,20,84,162,212,162,162,0,221,0,40, + 212,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,221,221,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,221,221,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,183,59,95,227,162,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,162,0,0,0,122,243,141,141,34,29, + 29,171,29,20,29,192,34,171,135,183,0,0,0,0,78,183, + 95,183,0,0,0,0,26,29,38,253,111,111,95,0,122,183, + 42,0,0,122,0,183,183,0,0,0,0,0,0,0,0,0, + 0,0,0,0,122,187,122,122,42,122,122,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,122, + 122,122,0,122,122,0,122,0,0,0,0,0,0,0,0,0, + 0,0,0,221,35,177,55,171,29,224,0,0,0,0,103,220, + 226,42,0,0,0,253,55,92,122,0,0,42,162,46,129,92, + 0,0,122,122,0,122,177,55,48,253,47,95,50,152,44,34, + 29,29,15,171,20,135,15,245,15,229,151,133,38,133,38,133, + 38,38,133,34,171,38,55,133,48,55,103,172,47,163,162,192, + 34,214,151,221,42,0,0,0,0,0,122,0,122,0,122,122, + 122,122,0,122,122,0,203,203,94,162,241,197,220,177,224,200, + 0,135,64,64,35,64,122,59,241,0,0,221,40,246,246,221, + 221,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,162,0,0,0,40,95,142,142,142,215, + 0,221,215,221,221,95,40,203,0,212,162,221,0,0,162,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 162,246,162,0,0,0,0,0,162,221,0,0,0,0,0,0, + 0,0,0,0,0,164,94,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 221,0,0,0,162,47,75,162,0,56,122,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,59,183,0,78,64,214,67,192,172, + 171,29,192,29,34,29,29,15,229,187,0,0,0,162,78,122, + 126,221,0,0,42,42,78,253,133,20,224,59,95,0,0,183, + 78,122,122,78,42,162,78,42,42,42,219,26,26,219,187,183, + 42,187,111,111,166,187,187,183,187,187,187,187,187,166,183,42, + 78,42,78,122,122,78,42,78,78,122,122,78,78,78,42,78, + 78,78,122,122,122,78,78,78,42,78,78,78,78,122,122,183, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,122,75,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 122,75,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,227,126,0,0, + 0,0,0,94,94,0,0,0,0,122,122,162,122,162,0,0, + 0,0,122,0,122,122,122,162,122,122,78,78,78,42,42,42, + 78,183,42,78,78,78,122,162,122,162,122,122,122,0,0,0, + 0,0,122,122,34,84,151,20,44,224,122,122,122,78,55,79, + 226,42,0,0,122,48,103,84,162,0,0,95,227,162,162,0, + 0,0,122,122,122,0,223,167,135,177,59,163,187,192,44,34, + 29,20,20,20,15,15,229,15,20,15,229,229,151,142,29,38, + 151,151,38,55,186,55,151,133,177,103,228,177,59,97,42,34, + 34,44,151,162,122,122,122,78,183,0,0,0,0,0,0,0, + 0,0,0,0,0,0,104,241,94,94,104,28,242,253,59,46, + 162,15,35,64,64,64,0,200,104,0,0,221,40,246,221,221, + 162,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,221,0,162,0,0,0,0, + 0,221,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,246,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,221,92,104,0,0,0,0,162,221,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,94,0,0,0,219,17,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,29,59,0,0,183,132,254,29,29, + 34,34,34,20,34,20,171,171,20,183,0,0,0,122,162,183, + 163,183,0,0,162,0,26,178,55,253,132,35,163,0,26,166, + 219,122,0,42,187,126,187,126,187,183,126,224,126,187,187,187, + 50,183,183,224,224,224,224,50,111,111,224,166,111,111,187,111, + 111,111,111,111,111,111,111,111,109,111,111,111,109,111,111,111, + 111,111,109,111,111,109,111,111,111,109,111,111,111,109,111,111, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,221,226,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 221,226,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,122,111,221,0, + 0,0,0,166,224,224,95,111,111,111,111,126,166,183,183,183, + 183,183,187,183,187,126,111,111,111,111,111,75,95,95,47,75, + 95,126,126,111,163,111,111,109,111,111,111,111,187,187,219,219, + 219,166,132,26,177,177,228,20,34,95,183,224,95,42,103,201, + 226,122,0,0,111,48,31,226,162,0,0,56,42,219,187,42, + 42,42,26,26,42,122,226,103,48,177,47,163,183,34,64,44, + 29,142,20,29,171,171,15,229,20,15,151,15,229,226,228,186, + 151,229,186,151,151,133,55,133,48,103,103,190,46,163,0,225, + 225,44,151,122,122,42,187,59,40,0,122,0,122,122,122,122, + 122,122,0,42,183,183,227,212,212,94,163,48,48,104,111,111, + 162,166,162,111,224,254,0,40,59,0,0,246,221,246,94,0, + 221,0,0,0,0,0,0,221,221,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,221,0,0,0,0,0,0,0,0,0,0,0,0,221,221, + 162,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,221,104,164,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,42,183,162,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,50,212,162,0,0,0,122,59,34, + 29,44,34,171,192,29,29,20,35,187,42,122,0,162,42,183, + 163,187,26,26,219,122,56,29,55,178,187,59,163,0,187,224, + 182,109,224,254,150,111,132,187,94,187,187,183,183,126,111,166, + 150,132,183,187,187,187,219,166,132,166,42,183,183,183,221,166, + 111,111,132,187,42,227,111,111,111,187,42,183,126,111,111,132, + 219,183,183,187,187,126,166,166,183,166,166,166,187,187,183,126, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,122,0,0,0, + 0,0,0,50,59,97,111,75,97,75,75,95,59,46,35,35, + 35,24,223,44,223,44,46,44,44,44,35,99,35,59,111,111, + 187,183,187,187,219,219,219,187,219,219,219,219,111,75,200,200, + 224,224,163,187,177,222,129,15,34,111,183,203,187,42,228,79, + 24,42,0,0,95,187,246,94,162,0,0,0,122,78,78,183, + 122,78,42,122,122,0,223,228,253,223,200,111,183,44,109,75, + 47,47,34,34,20,20,20,20,253,20,15,135,151,24,223,151, + 151,186,55,151,228,151,151,151,223,55,103,177,47,75,0,34, + 44,64,20,221,122,122,166,95,200,0,0,0,0,0,0,0, + 0,0,162,50,162,162,221,94,78,0,215,203,203,183,50,50, + 122,166,0,44,64,99,0,163,46,0,162,221,246,40,246,94, + 246,221,0,0,0,0,221,221,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 162,162,0,0,0,0,0,0,0,0,0,0,0,0,94,50, + 0,0,0,0,0,0,162,0,0,0,0,0,0,0,0,0, + 0,0,0,0,221,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 56,122,0,0,0,0,0,78,0,0,0,0,78,122,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,162,221,0,122,221,0,0,0,0,0,221, + 44,34,47,142,34,44,29,34,47,183,26,122,0,122,94,183, + 203,187,26,42,219,26,122,171,103,34,166,59,75,0,0,122, + 183,122,219,187,187,150,111,150,183,187,183,183,162,187,219,183, + 183,162,183,183,187,183,183,187,183,187,183,42,183,26,26,183, + 183,42,183,183,183,219,183,42,221,183,183,183,183,183,183,42, + 183,187,42,183,221,183,42,187,183,42,183,42,183,183,42,42, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,162,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,162,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 183,78,0,75,59,200,200,24,34,29,253,177,253,29,253,20, + 29,223,34,223,223,35,59,224,95,141,224,150,111,187,26,26, + 187,183,183,166,126,78,183,94,50,163,104,142,142,35,35,200, + 46,59,75,126,129,222,229,15,20,109,97,223,46,46,253,251, + 164,122,0,0,94,183,183,42,183,183,183,94,94,221,221,221, + 162,221,0,0,0,0,226,123,135,177,47,111,162,99,182,59, + 104,44,46,47,46,64,29,20,34,20,229,15,229,24,209,178, + 151,15,229,15,135,135,135,135,226,55,103,223,47,111,122,99, + 64,64,135,56,122,122,219,95,40,0,0,0,0,0,0,0, + 0,0,162,162,0,0,221,221,0,0,104,55,103,46,59,59, + 42,34,0,44,64,99,0,40,200,0,221,221,183,40,183,221, + 162,0,221,221,221,221,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,94,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,221,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,122,59, + 239,94,183,0,0,0,0,126,97,219,78,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,94,0,0,0,0,0,0, + 0,0,0,0,0,122,0,0,166,183,0,0,0,0,0,0, + 64,34,192,142,47,47,47,34,24,0,26,0,0,0,162,219, + 95,183,26,26,219,26,42,29,229,35,111,59,163,219,26,122, + 122,0,0,0,0,42,187,111,166,109,187,187,219,187,42,187, + 187,187,111,187,187,183,187,126,187,187,126,187,111,111,187,132, + 111,187,111,111,187,166,150,187,111,111,187,132,187,187,111,111, + 187,126,187,187,111,111,187,111,187,187,111,111,187,111,111,132, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,221,0,0,0,0,0,0,0,0,0,94,126, + 0,0,0,0,0,0,0,40,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,221,0,0,0, + 0,0,0,0,0,0,94,126,0,0,0,0,0,0,0,0, + 50,162,183,223,253,253,253,29,177,24,223,29,44,46,224,99, + 59,224,59,109,224,99,59,35,24,142,223,177,223,135,48,177, + 253,48,177,253,177,177,253,48,253,48,223,177,223,223,223,177, + 223,253,190,223,222,168,103,229,29,183,241,251,168,226,94,162, + 0,0,0,221,122,162,42,94,78,94,162,183,183,162,78,162, + 122,122,122,122,0,122,226,103,135,253,24,163,78,75,111,111, + 97,47,47,44,35,47,47,29,34,20,171,229,135,135,229,135, + 245,135,135,171,135,135,135,29,241,79,103,177,59,163,122,59, + 64,254,20,221,122,122,122,215,183,0,0,0,0,0,0,0, + 0,0,162,50,0,40,173,135,48,203,223,103,48,135,241,95, + 221,29,0,214,214,64,0,200,104,0,0,0,42,219,221,246, + 221,0,0,0,221,246,221,0,0,0,0,0,0,221,221,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,221,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,221,221,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,42,34, + 44,29,46,50,212,0,0,221,246,111,78,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,221,162,0,0,0,0,122, + 0,0,0,0,0,0,0,122,200,97,0,17,150,0,0,0, + 132,34,99,142,44,99,34,64,200,122,122,122,0,0,0,78, + 94,183,17,12,12,12,26,135,55,226,141,59,141,17,243,243, + 150,243,187,26,42,0,0,0,122,162,187,99,64,224,187,109, + 187,183,183,221,94,42,183,219,187,187,187,187,111,109,187,111, + 150,111,109,109,187,109,111,111,109,109,187,109,111,111,109,109, + 187,109,111,111,109,254,187,111,111,111,109,109,187,254,150,111, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,56,246,163, + 0,0,0,0,0,0,0,40,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,56,246,163,0,0,0,0,0,0,0,0, + 0,0,215,111,95,187,111,26,187,150,109,95,111,59,59,35, + 24,223,223,177,135,222,135,222,222,135,222,129,222,222,129,129, + 222,222,222,135,222,135,48,135,253,135,135,222,135,168,177,222, + 48,222,222,129,222,177,223,35,200,162,50,104,126,183,163,163, + 163,239,50,50,163,37,40,50,163,50,94,94,162,78,122,0, + 122,0,0,122,0,122,92,103,129,223,35,183,122,211,187,59, + 47,47,34,29,34,44,44,171,20,229,245,133,133,133,38,186, + 133,38,151,151,135,29,135,29,177,201,79,20,47,111,78,224, + 64,182,29,183,0,122,183,40,200,104,104,95,95,95,97,95, + 97,95,50,162,183,163,28,135,72,226,173,79,173,21,251,26, + 42,200,0,99,59,182,166,95,200,200,59,47,40,221,94,246, + 212,246,221,94,94,162,221,221,0,0,0,0,0,221,221,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,162,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,162,50,162,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,126, + 44,223,239,122,177,212,122,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,122, + 0,0,0,0,0,0,0,0,183,183,162,109,99,17,0,215, + 95,59,64,142,47,59,44,64,75,0,0,0,0,0,0,0, + 0,0,122,122,122,26,42,24,135,178,111,200,126,42,219,219, + 187,141,254,150,243,12,12,26,56,122,0,0,166,95,111,99, + 109,243,150,150,187,17,215,219,183,56,183,0,122,162,219,111, + 166,166,166,183,183,166,150,227,166,94,183,166,132,126,166,94, + 215,132,132,187,187,94,219,132,132,126,166,183,183,126,111,166, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,212,203,142,162,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,162,0,0,0,0,0,221, + 26,0,0,0,0,0,0,40,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,212,203,142,162,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,162,0,0,0,0,0,221,26,0,0,0,0,0,0,0, + 42,183,42,24,223,223,253,222,222,222,129,31,228,103,228,103, + 228,222,103,103,129,31,129,251,129,31,222,222,129,222,222,222, + 135,253,135,222,48,222,135,222,222,222,222,222,222,129,129,222, + 222,31,228,228,46,203,162,162,162,0,219,17,219,219,187,59, + 126,187,166,227,239,239,50,50,183,221,42,122,122,122,122,122, + 122,122,122,0,122,42,37,177,177,200,50,162,0,162,0,221, + 122,162,94,221,94,94,246,95,40,227,40,40,200,75,163,203, + 75,95,163,239,187,227,212,94,37,48,222,24,163,215,0,221, + 183,42,40,0,0,0,0,162,221,221,94,246,246,246,246,246, + 221,94,94,162,0,183,242,15,38,104,133,55,38,87,55,0, + 221,0,0,0,0,122,122,221,221,40,40,40,212,94,212,212, + 246,221,246,246,221,94,221,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,221,0,0,162,162, + 0,0,0,0,0,0,0,162,0,0,0,0,0,0,94,162, + 0,0,0,0,162,212,162,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,183, + 126,75,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,78, + 0,0,0,0,0,0,212,162,0,162,183,99,243,99,0,183, + 47,47,44,99,47,59,59,47,59,0,122,0,122,122,0,0, + 0,122,122,42,122,42,42,50,46,75,166,75,111,17,219,111, + 166,42,26,166,132,243,243,150,150,243,12,17,26,122,0,162, + 221,94,126,187,166,254,211,99,99,235,182,243,150,187,132,166, + 150,187,219,187,17,111,150,187,219,187,187,132,132,187,187,187, + 17,111,132,166,166,187,132,111,132,132,183,187,219,150,17,187, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,221,0,0,0,129,103,209,162,0,0, + 0,0,0,221,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,221,0,46,0,0,0,0,0,162, + 55,135,0,0,0,0,0,40,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,221,0, + 0,0,129,103,209,162,0,0,0,0,0,221,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,221, + 0,46,0,0,0,0,0,162,55,135,0,0,0,0,0,135, + 201,103,190,55,103,55,55,201,201,55,103,103,103,228,31,222, + 103,222,228,228,103,228,31,103,228,129,228,228,222,222,31,222, + 129,228,129,31,135,222,129,222,129,222,129,31,129,31,228,129, + 222,177,223,241,0,0,0,0,0,0,0,246,241,203,40,221, + 215,40,40,0,122,122,122,0,122,122,122,0,0,122,0,0, + 122,0,122,0,0,122,212,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,162,0,0,0,0,221,94,212,0,0,0,0,0,0, + 0,0,0,0,0,0,122,0,122,122,0,0,0,122,0,0, + 0,0,162,162,0,212,72,72,48,173,134,72,72,15,242,0, + 0,221,0,0,0,0,0,0,122,0,122,221,221,246,221,221, + 221,0,246,221,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,162,162,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,162,0, + 0,0,162,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,162,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,94,94,0,0,0,0,0,0,0,0, + 0,221,221,0,0,162,162,162,0,0,0,0,0,122,42,42, + 42,26,26,26,42,26,0,0,94,162,94,227,183,17,219,219, + 219,219,17,17,17,150,150,12,12,12,243,8,8,8,8,12, + 17,26,42,0,0,0,0,0,122,183,99,99,235,99,182,182, + 182,224,109,182,182,182,182,224,211,182,182,182,99,254,109,182, + 182,182,182,254,109,182,99,182,224,254,109,182,182,99,182,254, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,94,162,241,0,22,50,0,0,0,0, + 0,162,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,162,0,0,0,0,122,122, + 241,203,0,0,0,0,0,40,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,94,162, + 241,0,22,50,0,0,0,0,0,162,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,162,0,0,0,0,122,122,241,203,0,0,0,0,0,201, + 242,55,201,201,103,103,201,177,103,55,103,228,228,228,103,103, + 228,55,103,201,48,129,55,228,228,228,103,129,129,253,223,177, + 135,142,226,135,129,222,222,228,222,129,228,151,31,79,177,177, + 135,241,177,177,226,177,190,223,190,92,226,223,104,223,92,203, + 241,226,226,241,104,203,241,241,104,200,92,241,104,104,104,104, + 104,46,212,50,212,104,122,241,46,104,104,46,104,104,241,241, + 203,104,104,104,142,97,203,241,203,203,203,212,40,203,212,37, + 163,40,95,227,94,0,0,122,122,94,183,212,221,0,94,47, + 94,212,221,183,94,78,162,183,162,162,162,183,227,183,0,183, + 94,227,162,0,0,95,21,20,18,38,38,190,173,40,197,0, + 122,162,0,122,183,42,162,122,221,221,246,0,0,221,221,0, + 221,221,221,0,94,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,162,94,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,122,42,122,0,0,122,42,122,122,122,42,122,0,122, + 122,122,122,122,42,122,0,0,0,0,0,0,0,122,122,219, + 219,219,17,12,17,187,26,17,17,17,12,8,182,141,49,141, + 67,67,8,8,8,26,42,122,0,0,50,61,200,59,64,99, + 182,99,99,224,64,99,182,99,67,59,64,99,254,67,59,182, + 64,99,182,67,59,182,99,99,224,67,99,59,64,99,99,99 + }; + +static char hdl_huge_off[] = { + 213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, + 213,213,213,68,213,213,68,213,213,68,213,68,68,213,68,68, + 68,68,68,68,68,68,68,68,68,68,125,68,68,68,68,68, + 68,68,125,68,68,125,68,68,125,68,68,68,68,68,68,68, + 68,68,68,125,68,68,213,213,174,121,213,174,213,213,213,213, + 213,213,213,213,213,213,174,213,213,213,213,213,213,213,174,213, + 213,213,213,174,213,152,213,205,205,213,213,213,205,213,68,174, + 213,205,68,205,68,125,213,68,125,213,125,213,125,213,68,125, + 174,213,125,213,174,125,68,125,125,174,174,213,125,68,125,125, + 125,68,125,174,68,125,125,125,68,174,205,174,205,68,205,125, + 68,68,68,205,125,68,68,205,213,68,125,68,125,125,125,68, + 205,205,205,174,125,174,205,125,174,205,125,205,125,205,125,125, + 205,205,125,125,125,205,125,125,125,125,125,125,4,205,202,205, + 202,205,205,205,125,202,205,205,152,205,202,205,202,202,125,202, + 205,202,202,234,205,205,202,205,202,234,125,205,202,234,205,205, + 205,202,205,202,234,202,234,202,205,234,205,202,80,69,205,80, + 202,205,80,80,205,205,202,80,205,80,205,80,80,234,234,205, + 4,145,80,205,80,202,69,80,205,69,80,80,80,199,234,234, + 80,80,202,80,205,80,80,4,80,199,80,80,80,80,80,80, + 80,80,80,80,80,80,80,80,80,202,80,80,80,80,80,80, + 80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80, + 80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80, + 80,80,80,80,80,69,80,80,80,80,80,80,80,80,80,80, + 80,80,80,80,4,80,80,4,80,80,80,80,80,80,80,80, + 80,80,69,80,69,80,69,80,69,80,80,69,80,69,80,80, + 80,80,80,69,69,80,69,80,69,80,69,80,202,69,202,202, + 202,80,69,202,202,69,202,202,202,69,202,202,238,202,69,69, + 238,69,202,238,238,238,238,238,202,121,202,238,57,69,69,191, + 69,69,191,69,191,69,191,69,191,80,238,202,69,202,202,238, + 238,69,238,69,69,69,69,80,69,69,69,69,69,69,80,69, + 69,69,69,69,69,69,69,69,69,69,69,69,80,69,69,69, + 69,69,69,69,69,69,80,69,69,69,69,69,80,69,69,69, + 3,3,69,3,69,3,69,80,69,3,80,69,3,3,3,3, + 3,3,3,3,3,3,199,3,3,3,3,3,3,3,3,3, + 3,3,199,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4, + 213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, + 213,68,68,213,213,68,213,213,125,213,125,213,213,125,213,213, + 125,174,213,125,213,174,174,174,174,174,68,213,125,68,213,121, + 68,68,213,174,125,213,125,68,68,68,68,68,96,54,96,68, + 68,68,68,68,213,125,174,213,121,213,213,16,213,16,213,213, + 213,213,213,213,174,213,213,174,213,213,213,213,213,213,213,174, + 213,174,213,213,213,174,213,213,213,68,205,68,68,213,205,213, + 68,68,213,68,213,68,213,174,68,213,174,125,213,125,174,68, + 68,68,174,125,213,125,213,174,68,68,68,125,68,174,68,68, + 68,125,68,125,125,174,213,205,205,68,68,68,68,205,68,68, + 125,125,125,68,68,205,125,68,125,125,68,125,125,68,125,205, + 68,125,125,125,205,125,125,205,205,125,205,125,205,125,125,125, + 125,125,125,125,205,125,205,205,69,125,125,205,125,125,125,202, + 152,202,125,125,205,205,205,205,205,234,202,205,205,202,205,202, + 125,205,205,125,202,205,202,205,205,205,202,80,205,125,202,202, + 202,205,80,205,202,205,202,202,80,202,80,205,202,202,80,202, + 202,205,202,202,202,205,80,205,234,202,80,234,205,4,80,4, + 4,235,80,205,80,80,80,80,202,80,205,80,205,80,69,69, + 205,80,80,234,80,234,234,4,234,4,199,80,80,80,80,80, + 80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80, + 80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80, + 202,205,80,202,80,80,80,80,80,80,80,80,80,80,80,80, + 80,80,80,80,80,80,80,80,80,205,80,205,80,202,125,80, + 125,80,202,205,80,202,202,205,80,80,205,80,80,4,80,4, + 80,4,80,80,80,80,80,80,80,80,69,69,80,69,69,69, + 69,80,121,80,80,69,80,202,80,202,69,202,202,202,202,69, + 202,202,202,202,202,202,238,202,238,238,238,238,202,238,202,69, + 202,121,57,202,69,238,202,121,238,238,69,57,69,191,69,57, + 238,238,69,57,69,238,202,238,238,238,69,238,202,121,238,69, + 238,69,69,121,69,69,69,69,121,69,69,69,69,69,69,69, + 69,69,69,69,69,69,69,69,69,80,69,69,69,69,69,69, + 69,69,69,69,69,69,69,80,69,69,3,69,69,69,69,80, + 69,80,69,80,69,3,69,3,69,3,69,80,3,80,3,3, + 80,3,3,3,3,3,3,3,3,199,3,3,3,3,3,3, + 3,3,199,3,3,3,3,199,3,3,3,3,3,3,3,3, + 3,3,3,3,3,69,3,69,3,3,69,4,3,69,69,69, + 213,213,213,213,213,213,213,213,213,213,213,68,213,68,213,68, + 213,213,213,68,174,213,68,213,213,213,174,213,125,213,125,213, + 213,213,125,213,213,68,213,213,213,68,125,213,68,125,213,68, + 68,121,68,213,68,121,213,68,125,68,96,68,68,68,68,68, + 68,68,68,125,213,213,68,213,213,125,213,16,213,54,213,213, + 213,213,213,213,213,213,213,213,174,213,213,68,213,213,213,213, + 213,213,205,213,213,68,68,125,213,68,213,213,68,68,213,68, + 174,68,68,125,68,125,213,68,68,68,213,68,121,213,213,125, + 213,68,205,213,174,125,68,125,213,125,68,125,68,125,125,68, + 125,68,205,68,68,205,68,68,125,125,125,125,68,125,125,68, + 68,68,125,125,68,68,125,68,125,125,68,205,205,205,68,205, + 125,125,68,125,205,68,125,68,205,125,125,125,125,125,125,125, + 125,125,4,125,125,125,125,125,205,205,125,205,125,4,125,125, + 125,80,205,125,202,152,80,205,125,205,205,152,205,205,152,80, + 205,202,80,205,125,202,205,202,125,202,152,80,80,202,234,205, + 234,205,205,202,80,80,202,234,80,205,202,234,202,234,205,234, + 80,202,234,205,80,202,80,202,202,234,202,80,205,202,205,80, + 80,235,202,80,205,80,205,80,80,202,80,202,202,80,80,80, + 202,202,202,205,80,80,205,69,80,80,80,202,80,80,80,80, + 80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80, + 80,80,80,80,80,80,80,80,80,80,80,80,171,80,202,80, + 202,202,80,205,205,80,205,80,205,80,205,80,125,80,205,205, + 202,125,80,202,80,202,202,202,202,202,202,202,80,80,202,80, + 80,80,202,80,202,80,80,80,202,80,205,202,125,80,205,202, + 202,80,202,80,69,69,69,202,69,80,80,202,80,80,80,80, + 238,80,80,238,80,202,202,69,202,202,238,202,69,238,202,238, + 238,69,238,238,238,80,238,80,69,202,69,238,69,57,121,238, + 202,238,121,238,202,238,202,238,69,57,238,69,57,69,57,69, + 69,57,69,238,57,69,238,202,238,238,238,121,202,238,69,69, + 57,69,69,69,238,69,69,191,69,69,69,69,69,69,69,69, + 69,69,69,69,69,69,69,69,3,69,69,80,69,69,80,69, + 69,69,69,69,69,3,69,69,69,80,69,3,69,3,3,69, + 3,69,3,69,80,69,80,69,3,69,3,69,3,80,3,3, + 3,80,3,3,3,3,3,3,3,199,3,199,3,3,3,3, + 3,3,3,3,3,3,3,3,3,199,3,3,3,199,3,3, + 3,3,3,69,3,4,3,69,4,3,69,4,3,3,3,69, + 213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, + 213,121,213,213,213,125,213,213,174,213,213,213,213,213,174,213, + 125,213,68,213,125,213,68,125,213,174,68,68,213,68,68,68, + 68,68,213,125,68,213,125,213,68,68,68,16,16,54,68,68, + 125,68,213,68,68,125,68,205,68,68,125,68,96,54,16,213, + 174,213,213,213,213,213,213,213,213,213,68,213,213,68,68,213, + 152,213,213,205,68,68,213,213,68,213,68,174,68,213,205,68, + 213,68,213,68,213,68,68,213,125,213,125,68,68,68,125,213, + 125,68,68,205,68,68,68,68,125,68,174,68,68,68,174,68, + 68,125,68,125,125,68,125,125,205,68,205,68,68,205,68,125, + 125,125,68,68,205,205,68,125,68,205,125,68,152,68,125,125, + 68,205,205,152,68,205,205,205,125,205,125,125,125,125,125,125, + 125,125,125,125,125,125,125,205,125,125,125,125,205,125,125,125, + 4,152,125,205,125,205,205,125,205,205,125,205,202,125,205,205, + 125,205,202,205,80,152,125,205,80,205,80,152,205,205,125,80, + 125,205,80,205,202,205,205,202,202,202,202,205,202,205,80,125, + 234,202,202,80,205,234,202,80,205,202,202,202,80,202,205,205, + 80,99,202,202,80,202,80,80,202,80,202,80,80,202,80,202, + 80,80,202,80,202,202,80,199,202,205,202,80,80,202,80,202, + 80,80,80,171,80,202,80,80,80,171,80,202,80,202,80,202, + 80,202,202,202,80,202,80,80,171,80,202,80,80,80,202,80, + 202,202,202,202,80,202,80,202,80,202,80,202,80,80,80,202, + 80,80,80,202,202,80,80,202,80,202,80,80,202,205,202,202, + 202,202,80,125,80,202,202,202,202,80,202,80,80,80,202,202, + 202,202,202,202,80,80,80,202,202,80,238,80,238,80,238,80, + 69,80,202,80,238,202,202,202,202,69,202,238,80,202,69,202, + 202,238,202,69,202,238,69,57,69,57,202,69,238,202,202,69, + 238,202,238,202,238,238,238,69,238,238,69,57,238,238,202,57, + 69,57,69,69,238,238,202,238,69,238,69,238,238,69,238,238, + 238,69,191,69,69,238,69,69,69,69,121,69,69,121,69,69, + 121,69,69,69,69,69,69,69,69,69,69,3,69,69,69,69, + 69,69,69,69,69,69,80,69,69,69,69,80,69,69,3,80, + 69,80,69,3,69,3,69,3,3,69,3,69,3,3,80,3, + 3,3,80,3,3,3,3,3,3,3,199,3,3,3,3,199, + 3,3,3,3,199,3,3,3,3,3,3,199,3,3,3,3, + 3,3,3,3,80,3,4,4,4,4,3,69,4,4,4,3, + 213,213,213,213,213,213,213,213,213,213,68,213,213,174,213,174, + 213,213,68,213,213,68,213,68,174,205,213,205,68,213,125,213, + 68,174,68,68,213,68,213,68,213,213,125,68,68,68,174,68, + 68,125,213,68,68,68,125,68,125,68,68,68,54,68,68,68, + 213,125,68,68,68,213,68,68,174,68,68,213,68,68,96,213, + 213,213,213,213,213,213,213,213,213,213,125,213,213,213,213,213, + 174,213,213,174,213,205,68,205,68,205,213,68,205,213,213,205, + 213,125,213,125,68,125,68,68,68,68,213,68,68,68,125,68, + 205,174,68,68,174,205,68,68,174,68,125,174,125,68,125,68, + 125,68,68,68,125,68,68,68,68,68,125,68,68,125,205,68, + 68,125,68,68,68,152,68,152,125,68,68,125,125,68,152,205, + 125,68,205,205,68,152,125,68,125,205,125,125,125,125,125,125, + 125,125,125,125,125,125,125,125,125,4,125,125,125,205,205,125, + 125,69,202,205,125,125,205,125,125,205,125,125,205,125,125,202, + 205,152,202,205,205,80,205,205,205,152,4,80,205,80,205,205, + 80,152,205,202,202,202,202,202,202,202,205,202,202,202,234,80, + 205,202,202,202,202,205,202,205,80,202,234,205,202,80,202,202, + 202,235,205,202,234,234,205,202,202,202,202,202,202,202,202,202, + 202,80,202,202,202,234,205,80,80,80,202,202,80,202,234,202, + 202,202,202,80,202,171,80,202,202,202,80,80,80,171,80,202, + 80,80,80,171,202,80,80,202,80,80,202,202,80,202,202,80, + 202,80,80,202,80,202,80,202,80,202,80,202,202,202,202,202, + 202,202,202,80,202,202,80,202,202,202,202,202,202,202,80,202, + 202,202,80,202,80,80,80,202,80,202,202,202,202,202,202,69, + 202,202,202,125,202,202,202,202,80,202,80,69,202,202,80,69, + 202,238,80,202,80,238,80,238,69,202,80,238,202,238,238,202, + 202,69,202,238,202,69,202,238,202,238,69,202,238,238,57,238, + 238,69,238,238,238,238,238,238,238,238,238,202,238,238,238,238, + 238,238,191,202,238,238,238,238,202,238,202,238,238,69,202,121, + 238,69,69,238,69,191,69,191,69,238,69,69,121,69,69,69, + 69,121,69,69,69,69,69,69,69,80,69,69,69,69,69,69, + 69,69,69,69,80,69,69,80,69,69,3,69,69,80,3,69, + 3,80,3,69,80,69,80,69,80,3,3,69,80,3,3,3, + 80,3,3,3,3,3,3,3,3,3,3,3,3,3,199,3, + 3,3,3,3,3,3,199,3,3,3,3,3,3,3,3,80, + 3,80,3,3,80,3,4,69,4,4,4,69,3,69,4,4, + 213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, + 213,125,213,213,68,213,68,213,213,213,68,213,213,68,213,68, + 213,68,213,68,68,68,68,68,68,213,68,68,174,68,68,174, + 213,68,68,174,68,68,68,68,68,68,68,54,68,96,16,68, + 68,68,68,68,68,125,68,68,68,68,68,96,54,54,68,54, + 68,213,213,213,213,213,213,213,213,213,213,68,68,68,213,152, + 213,213,68,213,213,213,213,213,213,213,68,213,213,68,68,213, + 68,213,68,68,213,68,68,213,125,213,205,68,213,68,68,213, + 68,68,68,68,68,68,213,125,68,68,213,68,68,68,174,68, + 68,125,68,125,68,68,125,125,125,68,68,125,68,68,68,152, + 68,68,152,68,68,125,125,125,68,152,125,125,68,125,125,68, + 205,205,125,125,205,125,68,205,205,125,125,125,205,125,205,125, + 125,125,125,205,125,125,125,125,125,125,125,125,125,125,125,125, + 125,205,125,125,205,205,152,205,205,125,205,202,125,202,205,205, + 125,205,125,125,125,125,152,125,125,4,152,202,125,152,202,202, + 205,80,202,202,202,202,202,205,234,202,202,205,234,202,125,202, + 205,234,202,202,202,202,202,202,205,202,202,202,202,202,205,202, + 202,99,125,205,125,202,202,202,202,202,202,202,202,202,202,202, + 202,202,205,234,202,202,202,80,202,202,80,234,202,202,80,202, + 234,202,80,202,80,69,171,80,202,80,202,202,202,202,202,80, + 202,202,80,202,80,171,80,80,80,171,80,80,202,80,202,80, + 202,80,202,202,202,202,202,80,202,80,202,80,80,202,202,202, + 80,202,171,202,202,80,202,80,202,202,202,202,202,202,202,202, + 202,202,202,202,202,202,202,202,202,202,80,202,202,202,202,80, + 202,202,202,80,202,202,202,69,238,202,202,80,202,202,80,202, + 202,80,238,80,238,80,202,80,238,238,69,202,238,69,80,238, + 238,238,238,202,238,238,238,202,238,202,238,57,69,69,69,202, + 238,238,238,202,69,238,238,238,238,238,238,69,238,69,238,69, + 238,238,202,191,69,238,121,238,238,121,238,238,238,238,191,202, + 238,69,191,69,191,80,69,69,69,69,121,69,121,69,121,69, + 69,121,69,69,69,69,69,69,69,69,69,69,80,69,69,69, + 69,80,69,69,69,3,69,3,69,69,69,80,69,69,80,69, + 80,69,80,3,69,3,69,3,69,80,69,3,3,3,80,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,199,3,199,3,3,3,3,3,3,3,3,3,3,80,3, + 3,3,80,3,69,4,4,3,69,4,69,3,69,4,3,69, + 213,213,54,213,213,213,213,213,213,213,213,213,213,213,213,213, + 213,213,213,121,213,213,68,68,68,213,68,68,213,68,68,68, + 213,125,213,68,213,68,68,68,68,125,213,68,213,68,68,125, + 213,68,68,68,174,68,68,68,68,68,68,54,68,68,68,68, + 68,213,125,213,68,68,68,68,68,68,68,68,96,54,68,213, + 68,213,213,213,213,213,213,213,68,213,174,213,213,213,213,213, + 213,213,152,213,68,68,68,68,68,68,68,68,213,68,68,68, + 205,213,68,68,68,68,125,213,125,213,125,68,68,68,68,68, + 68,68,205,213,68,125,68,68,68,205,68,68,205,68,68,125, + 68,125,68,125,68,68,68,68,125,125,68,125,68,125,125,125, + 68,125,125,125,238,68,125,125,125,68,68,125,68,205,125,68, + 57,68,125,68,125,205,68,152,125,125,125,125,205,125,125,125, + 125,125,125,205,205,205,125,125,125,125,125,205,125,125,205,205, + 152,69,205,125,202,205,125,202,205,202,205,205,205,125,125,80, + 125,205,205,205,205,125,80,205,125,125,125,202,80,125,125,152, + 125,202,205,152,205,202,202,202,205,202,202,202,205,80,202,202, + 202,205,202,202,152,234,205,202,202,202,202,234,205,80,202,202, + 69,99,202,80,202,202,202,234,205,202,152,234,205,202,152,234, + 205,202,202,205,202,202,202,202,80,202,202,205,202,202,202,202, + 202,234,202,234,80,80,80,80,202,80,80,80,202,80,202,80, + 80,202,171,80,80,205,202,202,69,80,80,202,80,171,80,202, + 80,202,202,202,202,202,202,202,202,202,80,202,202,202,202,202, + 202,202,69,80,202,202,202,202,202,202,202,202,202,202,202,202, + 202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202, + 202,202,202,202,202,238,202,202,80,238,80,238,80,80,238,80, + 238,80,202,69,238,238,69,80,202,69,57,80,238,238,202,202, + 202,80,238,202,80,69,238,238,238,202,238,238,238,57,57,69, + 202,238,238,238,238,238,238,238,238,238,238,238,238,238,191,238, + 238,191,238,191,238,238,238,238,121,238,238,69,238,202,191,238, + 238,202,238,80,191,238,69,69,238,69,121,69,121,69,69,69, + 69,69,69,121,69,69,69,69,69,69,69,69,69,69,80,69, + 69,69,69,80,69,69,80,69,80,69,69,69,69,3,3,80, + 69,3,3,69,80,69,3,69,3,69,3,69,80,3,3,3, + 80,3,3,80,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,80,3,3,3,80, + 80,3,3,3,69,3,4,3,69,3,3,4,4,69,3,4, + 54,54,213,213,213,213,213,213,213,213,213,213,213,213,213,213, + 213,68,213,213,213,68,213,213,174,68,213,213,68,68,213,213, + 68,213,68,213,68,213,125,213,213,213,125,68,68,68,213,68, + 68,68,68,68,68,213,125,68,68,68,96,68,54,54,68,68, + 213,68,213,125,68,68,125,68,68,68,68,54,68,54,96,54, + 68,68,213,213,213,213,213,213,213,213,213,213,68,213,213,152, + 213,213,213,213,213,68,213,68,68,213,68,68,68,68,213,213, + 213,68,68,68,68,213,213,68,213,68,68,213,125,68,68,68, + 68,68,68,68,68,68,68,68,125,68,68,68,68,68,68,68, + 68,68,125,68,125,68,68,68,68,68,68,68,125,68,68,68, + 125,68,68,68,68,68,68,68,68,68,125,68,125,68,125,152, + 125,152,68,205,205,125,205,125,68,68,205,68,125,68,205,125, + 125,125,68,125,68,125,205,125,125,125,125,125,202,125,125,125, + 69,152,125,80,125,125,205,125,202,152,202,125,125,205,205,152, + 205,202,125,202,125,4,152,125,202,205,69,152,202,205,80,202, + 125,202,205,202,202,205,152,202,205,202,202,125,80,152,205,80, + 152,202,205,205,80,125,80,234,152,202,202,202,152,202,202,125, + 80,235,125,202,202,205,152,202,202,205,80,202,202,205,80,202, + 202,202,202,202,202,152,202,202,202,202,202,80,152,202,202,202, + 205,202,202,202,202,202,202,202,202,202,202,202,202,202,80,202, + 202,80,202,202,202,80,80,80,80,202,202,202,80,202,202,80, + 202,80,80,202,202,80,202,202,80,80,171,80,80,202,202,202, + 202,202,80,202,202,202,202,202,202,202,202,202,202,202,202,202, + 202,202,202,202,202,202,202,202,202,202,202,202,69,202,202,202, + 69,238,202,202,202,80,202,202,69,202,80,202,238,80,202,69, + 80,202,238,80,80,202,238,202,202,69,202,69,202,202,69,238, + 238,238,69,57,238,69,238,80,238,238,238,202,69,69,238,238, + 238,238,238,238,69,238,238,69,191,69,238,238,238,238,238,238, + 238,238,238,238,69,238,69,191,238,238,202,238,121,191,238,238, + 238,238,238,238,238,69,238,69,121,69,121,69,121,121,69,121, + 69,69,69,69,121,69,69,69,69,69,69,69,80,69,69,69, + 80,69,69,69,80,69,69,69,3,69,69,3,69,69,3,69, + 3,80,80,69,3,69,3,69,3,69,3,69,3,3,80,3, + 3,3,3,3,3,3,3,3,3,3,3,80,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,80,3,3, + 3,80,3,80,3,69,69,4,3,4,4,4,3,4,4,4, + 213,213,54,213,213,213,213,213,213,213,213,213,213,213,213,213, + 213,213,68,68,213,68,213,213,213,152,213,213,68,68,68,68, + 68,68,68,68,68,213,68,68,68,213,213,125,213,68,68,68, + 68,68,68,68,125,213,68,68,68,68,96,68,68,54,68,68, + 68,68,68,213,68,213,68,68,68,68,125,54,68,54,68,54, + 213,68,213,213,213,213,213,213,68,213,68,213,213,213,213,213, + 213,152,213,68,68,68,213,68,68,213,68,213,68,68,68,68, + 68,68,68,68,125,68,68,68,68,68,125,213,68,205,68,68, + 205,68,68,68,68,125,68,68,68,68,205,68,125,68,125,125, + 68,68,68,68,125,68,125,68,125,125,68,68,68,68,125,68, + 238,68,68,68,125,68,125,152,125,68,152,68,125,68,238,68, + 125,125,152,238,68,57,125,125,125,125,125,68,125,125,125,125, + 125,125,125,125,125,152,125,57,125,125,125,125,125,125,125,125, + 125,205,125,125,125,125,125,125,125,125,125,125,202,125,125,125, + 125,80,125,205,125,125,202,125,125,125,125,125,125,152,125,80, + 152,125,202,205,202,202,205,202,152,205,80,152,80,125,202,125, + 205,202,202,202,125,202,125,205,205,202,202,80,205,202,202,125, + 202,99,57,125,80,202,125,202,202,152,202,205,202,202,152,205, + 152,202,202,202,202,202,202,202,202,152,202,202,202,202,152,80, + 202,202,202,202,202,202,202,80,202,202,202,80,202,202,171,202, + 202,202,202,234,205,202,202,202,202,202,80,202,202,202,202,202, + 202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202, + 202,202,202,202,80,202,202,202,202,202,202,202,202,57,202,202, + 202,202,202,202,202,202,202,202,57,202,202,202,202,202,57,202, + 80,202,238,238,202,238,202,238,80,238,202,80,238,238,80,238, + 238,80,238,238,202,202,202,238,69,57,69,238,69,238,202,80, + 238,69,238,238,238,202,238,69,238,202,238,238,238,202,238,238, + 69,202,238,238,238,238,238,238,69,191,238,69,238,69,57,121, + 69,69,238,191,191,121,69,191,69,191,238,121,238,202,121,238, + 238,238,238,80,191,238,238,69,238,238,238,121,69,121,121,69, + 121,121,69,69,69,121,69,69,69,69,69,69,69,69,69,69, + 69,69,3,69,69,69,80,69,69,69,80,69,69,80,69,80, + 69,3,3,80,3,80,69,80,69,80,69,80,3,80,3,3, + 3,80,3,3,3,80,3,80,3,3,3,3,80,3,3,3, + 3,3,3,3,3,80,3,3,3,80,3,80,3,69,69,69, + 3,3,69,3,4,3,69,3,4,69,4,4,3,4,4,3, + 213,54,213,54,54,213,54,213,213,54,54,213,213,213,213,213, + 68,213,213,213,213,213,68,213,213,213,213,68,68,213,68,213, + 68,213,68,213,68,68,213,213,68,68,68,68,68,68,68,68, + 68,68,68,68,68,68,68,68,68,68,68,54,63,68,54,68, + 68,68,68,68,68,68,68,68,68,68,68,54,96,68,208,68, + 54,213,68,213,213,213,213,213,213,213,213,213,213,68,68,213, + 213,213,213,213,213,68,68,68,213,68,213,68,213,68,68,68, + 213,213,174,213,68,68,68,68,68,213,68,68,68,68,68,68, + 68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68, + 125,68,238,238,68,125,68,68,68,68,152,68,125,125,152,68, + 68,152,68,68,57,68,68,238,68,68,238,125,152,68,68,125, + 125,125,57,68,68,125,152,68,68,238,152,125,125,125,125,125, + 125,125,152,125,125,238,125,125,125,125,125,125,125,125,125,125, + 205,125,125,205,205,125,205,125,125,125,205,205,125,202,125,125, + 69,152,205,125,125,125,125,125,125,205,205,202,202,125,125,125, + 202,202,125,152,202,205,152,205,80,125,125,80,152,80,152,80, + 125,80,152,202,205,202,202,80,202,202,205,152,202,202,205,202, + 121,235,125,202,152,202,202,205,205,202,202,202,152,205,202,202, + 202,202,152,202,152,202,202,152,202,202,80,152,202,202,202,205, + 171,202,205,171,205,171,202,152,80,152,80,152,80,202,202,80, + 202,202,202,202,202,152,80,152,80,171,202,202,202,202,80,202, + 202,202,202,202,202,202,80,202,80,202,202,202,202,202,202,202, + 202,202,202,202,202,202,202,202,202,202,238,202,202,80,57,202, + 57,202,202,57,202,202,57,202,80,57,202,202,238,202,202,202, + 202,238,202,202,238,80,238,202,57,202,238,69,202,202,69,202, + 202,69,80,202,238,238,238,80,238,202,238,80,238,202,238,238, + 80,238,238,80,238,238,238,238,80,238,121,238,202,57,69,238, + 238,238,238,238,238,202,238,238,191,202,57,191,69,191,69,191, + 191,191,69,69,69,191,121,238,121,191,191,238,238,238,238,238, + 238,238,238,238,238,69,191,69,238,69,121,238,69,121,69,121, + 69,69,121,69,69,69,69,121,69,69,69,69,69,69,69,80, + 69,69,69,3,69,69,69,80,69,69,69,80,69,69,69,3, + 3,69,3,80,69,3,3,69,3,69,3,3,3,3,3,80, + 3,3,80,3,3,3,3,3,80,3,80,3,3,3,3,3, + 80,3,3,80,3,3,3,80,3,3,69,3,69,3,3,3, + 69,69,3,69,80,3,4,69,69,3,3,4,4,4,4,4, + 213,54,213,213,54,213,54,54,213,213,54,54,213,54,213,213, + 213,68,213,68,68,213,68,213,68,68,213,213,68,213,68,213, + 68,213,68,213,68,125,213,68,213,213,68,68,68,68,68,68, + 68,213,68,68,68,68,68,68,68,96,54,68,54,68,68,68, + 68,213,68,68,68,68,68,68,68,54,68,16,54,68,63,68, + 54,54,54,213,213,213,213,68,213,68,213,68,213,213,68,213, + 68,68,68,68,213,68,213,68,68,68,68,68,68,68,213,68, + 68,213,68,68,68,68,68,68,68,68,68,68,68,68,68,68, + 68,68,68,68,68,68,68,68,68,68,68,68,125,68,68,68, + 68,68,68,68,68,68,125,68,68,238,68,68,68,68,68,68, + 238,68,68,68,152,125,68,57,68,68,68,238,68,125,68,68, + 68,125,125,125,68,238,125,125,152,125,68,125,57,68,152,125, + 125,125,68,125,125,125,125,125,125,125,125,125,125,125,125,125, + 125,125,125,125,125,125,125,202,125,125,125,125,125,125,125,125, + 125,125,202,205,125,202,205,125,202,125,125,202,125,202,125,125, + 202,205,202,205,125,202,205,202,202,205,152,69,125,125,125,205, + 152,80,205,125,202,152,125,202,152,80,205,202,205,202,202,205, + 202,99,202,125,205,125,202,202,152,125,125,202,125,202,125,202, + 152,80,202,202,202,152,202,202,152,202,202,202,152,205,202,202, + 205,202,202,202,202,125,80,202,202,202,202,202,202,202,202,202, + 202,202,202,202,80,202,202,202,202,80,202,202,80,202,202,202, + 202,202,57,202,202,202,202,202,202,202,202,202,202,202,202,80, + 202,202,202,202,202,57,202,57,202,202,202,238,202,80,202,202, + 202,57,80,57,202,202,202,202,202,202,57,80,238,202,238,238, + 202,202,202,202,238,202,202,202,80,202,238,57,69,57,238,69, + 57,69,238,202,202,202,238,202,238,80,238,202,238,80,238,69, + 57,202,238,202,238,202,238,238,238,238,238,238,121,238,69,238, + 238,238,238,238,238,238,238,238,191,238,238,191,57,69,57,69, + 238,191,191,191,191,191,121,191,69,69,121,69,121,238,238,238, + 238,238,238,69,57,238,238,191,69,191,69,238,121,69,121,69, + 121,121,69,121,121,69,69,69,69,69,69,69,69,69,69,69, + 69,69,69,69,69,69,3,69,69,3,69,69,69,80,69,69, + 80,80,3,3,80,69,80,69,80,69,80,3,69,80,3,3, + 3,3,3,3,3,3,3,3,3,3,3,80,69,80,3,3, + 80,3,3,3,80,3,3,80,69,3,80,3,80,3,80,3, + 80,3,3,69,69,69,4,3,4,69,69,4,4,4,4,3, + 54,213,54,54,213,54,54,213,54,54,213,213,54,213,54,213, + 54,213,68,213,213,68,213,68,213,213,68,68,213,68,68,68, + 68,68,68,68,213,68,68,68,68,68,68,68,68,213,68,68, + 213,125,68,68,68,68,68,68,54,68,68,96,54,54,54,68, + 68,68,68,68,68,68,68,68,68,68,68,68,54,54,68,54, + 68,213,213,54,54,213,54,213,54,213,68,213,68,68,213,68, + 213,213,213,213,68,213,68,213,213,68,213,68,213,68,68,68, + 68,68,68,68,68,213,68,68,68,68,68,68,68,68,68,96, + 68,68,68,68,68,68,57,68,68,68,68,68,213,238,68,68, + 68,68,68,68,68,57,68,68,125,68,68,68,68,238,125,68, + 68,68,125,68,238,68,68,68,68,152,68,68,125,68,152,238, + 57,68,125,152,125,68,125,68,125,238,125,152,68,125,57,68, + 68,125,125,152,68,125,152,125,125,125,152,125,125,125,152,125, + 125,152,125,125,125,125,125,125,125,125,125,125,125,205,125,125, + 205,125,125,125,205,125,125,205,125,125,202,238,238,202,125,125, + 57,202,152,125,80,152,125,152,205,202,125,125,202,202,202,69, + 202,152,125,202,152,125,80,205,80,152,202,152,125,152,202,125, + 238,235,125,125,202,202,202,125,202,202,202,125,202,152,202,125, + 202,125,152,202,205,202,202,125,202,125,152,202,202,202,152,202, + 202,205,202,125,202,80,152,202,202,152,80,152,202,202,152,205, + 171,202,152,202,202,152,202,202,202,202,202,202,202,202,202,202, + 57,202,80,202,202,202,202,202,57,80,57,202,202,202,57,202, + 202,57,202,202,202,80,69,80,57,80,202,80,57,202,57,202, + 238,202,202,202,57,202,238,238,202,238,202,202,202,238,202,202, + 202,238,238,202,202,202,238,238,238,238,202,80,238,202,80,238, + 202,238,202,69,238,238,202,238,80,57,69,238,202,238,80,238, + 202,238,238,238,202,238,80,238,238,202,80,238,57,238,238,238, + 238,202,238,69,238,238,238,238,238,238,69,238,57,69,238,191, + 69,121,69,191,69,69,191,69,191,191,191,121,191,69,238,238, + 238,238,238,191,69,238,69,238,191,69,238,121,238,69,121,69, + 69,191,69,121,69,69,69,69,69,121,69,69,69,69,69,69, + 69,69,69,69,69,69,69,69,69,69,69,3,69,69,69,80, + 69,3,80,69,3,3,3,69,3,69,3,80,3,3,3,80, + 3,3,80,3,80,3,3,80,3,80,3,3,3,69,80,3, + 3,3,80,3,3,69,3,3,69,3,69,3,3,69,69,69, + 3,69,69,3,4,3,4,4,4,4,3,69,69,4,3,69, + 54,54,54,54,54,213,208,213,54,54,54,213,54,213,54,213, + 213,54,213,68,213,54,213,68,213,54,54,68,213,213,213,213, + 68,213,68,68,68,68,213,68,68,213,68,68,68,68,68,68, + 68,213,68,68,68,68,68,68,68,68,54,54,96,54,54,68, + 68,68,68,68,68,68,68,68,68,68,54,68,54,63,54,54, + 96,54,213,54,54,213,54,213,213,54,213,213,213,54,213,68, + 213,54,68,54,68,54,68,54,213,68,68,68,68,68,213,68, + 68,68,213,68,68,68,213,68,68,68,68,68,68,68,68,68, + 68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68, + 152,68,57,68,68,68,152,68,68,125,68,152,68,68,125,68, + 57,96,68,68,68,152,68,152,238,125,68,152,68,238,68,68, + 57,68,238,68,125,152,125,238,68,125,125,125,68,125,125,125, + 57,125,125,125,68,238,68,125,125,125,125,125,125,125,125,125, + 125,125,125,125,125,125,125,125,125,125,125,202,57,125,152,238, + 125,125,125,125,125,125,125,202,125,57,202,125,57,125,202,125, + 57,125,202,125,205,80,205,125,125,202,205,202,152,202,125,125, + 125,202,125,125,80,152,125,152,202,202,125,202,202,57,125,125, + 202,235,202,57,125,152,202,152,125,202,205,202,202,125,80,152, + 202,202,202,152,125,202,202,152,202,202,202,152,202,125,202,152, + 202,152,202,152,125,202,202,171,202,202,202,202,202,202,202,202, + 205,80,202,202,202,202,202,152,202,202,202,202,152,202,202,80, + 202,202,202,202,202,202,57,80,202,202,202,57,80,202,202,57, + 80,202,57,202,202,202,202,202,202,57,202,202,57,202,57,80, + 202,57,202,202,202,202,202,57,80,202,57,202,202,202,202,57, + 202,202,238,202,238,202,202,202,202,238,57,69,57,69,57,69, + 202,238,238,202,202,202,238,238,202,238,80,238,202,57,57,238, + 238,202,238,69,238,238,238,202,191,238,69,202,238,69,69,238, + 238,69,57,238,238,238,238,238,238,191,238,238,191,238,238,191, + 191,238,69,191,238,238,191,238,69,191,238,69,191,69,238,69, + 69,69,238,238,238,191,238,202,191,238,69,238,121,121,121,121, + 69,191,69,121,121,121,69,69,121,69,69,69,121,69,69,69, + 69,69,69,69,69,69,69,69,69,69,69,69,69,3,69,69, + 3,3,69,80,69,69,80,69,3,69,3,69,80,80,3,3, + 80,3,3,3,3,3,3,3,3,3,80,69,3,3,3,3, + 80,3,3,80,69,3,80,69,3,3,80,3,3,3,3,80, + 3,3,80,3,4,3,4,69,3,3,3,3,4,69,4,4, + 54,213,54,54,213,63,213,54,213,54,54,54,54,213,54,213, + 54,213,68,213,68,213,68,213,68,213,213,213,68,68,68,68, + 213,54,68,68,213,68,68,54,68,68,68,213,68,213,68,213, + 68,68,68,68,96,68,68,68,68,16,96,68,54,68,96,54, + 213,68,54,68,68,68,96,68,68,54,68,54,54,96,54,54, + 68,213,54,213,213,213,54,213,213,213,68,68,68,213,68,213, + 213,68,213,54,213,68,213,68,54,68,213,68,213,68,54,68, + 213,68,68,213,68,68,68,68,213,68,68,68,68,68,68,68, + 68,68,96,68,96,68,68,68,96,57,68,68,68,68,68,68, + 238,68,68,57,68,68,238,68,68,68,68,68,152,68,68,96, + 68,68,68,57,68,68,68,68,68,68,68,68,125,68,68,152, + 68,57,68,125,68,121,152,68,125,68,68,125,125,68,238,152, + 68,68,238,68,125,125,125,68,57,238,125,152,125,125,57,125, + 125,57,125,125,125,125,125,125,152,125,125,57,125,202,125,125, + 125,125,125,125,125,125,125,57,202,125,125,125,125,125,125,125, + 125,202,125,125,202,152,202,202,125,125,202,125,125,202,125,202, + 125,202,125,80,125,125,80,125,125,125,202,125,125,202,202,202, + 57,235,57,202,125,238,125,202,125,57,125,57,57,57,202,125, + 202,152,202,202,202,202,125,57,202,152,125,202,202,202,57,202, + 125,57,202,202,202,152,125,125,202,152,57,152,202,152,202,202, + 202,152,202,152,202,202,152,80,202,152,202,202,202,202,202,152, + 202,202,57,202,57,202,80,202,57,80,202,80,57,80,202,202, + 202,202,202,202,57,202,57,80,57,202,238,80,202,202,202,69, + 238,202,238,202,238,202,202,202,69,57,80,57,202,238,238,202, + 80,238,202,57,202,202,238,238,69,57,202,69,57,238,80,57, + 69,202,202,238,238,238,202,202,69,238,238,202,238,238,202,238, + 202,238,238,238,238,238,69,57,69,238,238,191,202,57,238,238, + 57,238,238,238,202,69,238,238,238,238,238,238,202,57,69,69, + 57,191,191,69,238,191,57,238,191,57,191,191,238,191,238,238, + 238,191,202,238,238,238,202,191,80,238,238,238,69,238,238,69, + 191,69,69,121,69,121,69,121,69,69,69,69,69,69,69,69, + 69,69,69,69,69,69,69,69,69,69,69,80,69,69,80,69, + 69,80,3,69,80,69,3,69,80,69,80,69,69,69,80,3, + 69,80,3,80,3,69,3,3,69,3,3,69,3,69,80,3, + 69,69,3,3,69,3,69,3,3,80,3,3,80,3,3,69, + 80,3,3,4,4,4,3,4,4,4,4,4,4,4,3,69, + 54,54,54,54,213,54,54,54,213,213,213,213,54,213,213,213, + 54,213,213,54,213,54,213,213,68,54,54,68,54,213,54,54, + 213,54,54,54,54,54,68,54,68,54,68,54,68,68,68,68, + 68,54,68,68,68,96,68,68,68,68,54,54,63,54,54,54, + 68,68,54,68,54,68,54,68,68,96,68,68,54,54,54,63, + 54,54,54,54,54,213,54,213,54,213,54,213,54,213,68,54, + 213,68,54,68,54,68,213,68,54,54,68,54,54,68,54,54, + 54,68,54,68,54,68,213,68,68,54,68,96,68,68,68,68, + 68,68,68,68,68,96,68,68,68,68,96,68,68,68,68,68, + 68,68,68,68,68,68,68,125,68,57,238,68,68,68,68,96, + 68,96,68,68,68,57,68,57,96,152,238,96,68,57,238,68, + 68,57,57,68,152,238,68,57,152,125,57,68,125,152,125,125, + 125,152,125,152,125,68,125,152,125,68,238,68,57,68,152,125, + 125,57,125,125,125,125,125,125,125,238,125,125,57,238,125,125, + 57,125,125,125,125,125,125,57,125,202,125,202,125,202,125,202, + 125,202,125,57,125,125,125,202,202,125,202,205,57,125,125,125, + 57,80,152,69,125,202,125,202,202,202,125,202,202,152,238,125, + 202,64,238,238,202,125,125,202,125,202,202,202,125,57,125,57, + 202,152,57,152,57,125,202,57,125,202,152,57,125,202,57,125, + 202,57,57,125,57,202,57,202,202,202,202,57,125,202,125,202, + 202,202,202,202,152,202,202,202,202,202,152,202,202,152,202,202, + 57,202,57,202,238,202,57,202,57,57,69,202,57,57,202,57, + 57,80,57,202,57,80,202,202,202,202,57,202,57,202,57,202, + 202,202,57,202,57,69,202,57,202,57,202,57,80,202,57,238, + 202,57,69,238,238,202,202,57,202,238,57,69,57,69,57,69, + 57,69,202,202,202,238,238,238,202,238,69,238,202,238,69,57, + 238,202,238,238,238,238,238,238,57,238,69,57,238,121,202,238, + 238,238,238,191,238,238,202,238,238,238,238,191,238,191,191,57, + 238,238,191,191,69,238,238,69,238,69,57,238,238,238,69,238, + 202,191,238,238,80,191,238,238,238,69,69,238,69,238,69,238, + 69,191,69,238,121,69,121,69,121,69,69,69,121,69,69,121, + 69,69,69,69,69,69,69,69,69,69,69,69,69,3,69,69, + 3,69,3,3,69,80,69,3,69,3,69,69,3,69,3,3, + 3,69,3,3,3,3,69,3,80,3,69,3,69,3,3,80, + 69,3,80,69,3,3,3,80,3,69,80,3,3,3,3,3, + 3,69,69,69,3,4,3,3,4,4,3,69,3,4,3,69, + 54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,213, + 54,213,68,213,68,213,54,68,213,213,213,54,213,54,68,68, + 68,213,68,68,213,68,213,213,213,54,68,68,54,68,54,54, + 68,68,68,68,54,68,68,96,68,54,68,54,96,54,96,68, + 54,68,68,54,68,54,68,96,68,68,54,96,54,54,96,54, + 68,54,213,54,54,213,54,213,213,213,213,213,213,213,54,213, + 213,54,213,213,54,213,54,213,68,213,54,68,68,68,213,68, + 213,54,68,68,54,68,54,96,213,68,68,54,68,96,68,68, + 68,68,54,68,96,68,96,68,96,68,68,96,238,96,68,68, + 57,68,96,68,57,68,68,68,68,68,68,68,57,68,125,68, + 68,68,96,68,68,96,68,68,68,68,96,57,68,68,68,152, + 68,68,152,68,238,68,125,68,238,68,152,125,68,125,238,68, + 68,238,68,121,152,125,238,125,68,125,125,125,68,125,238,238, + 152,125,125,57,152,125,125,125,125,125,125,238,125,125,57,57, + 202,125,125,125,125,125,125,125,125,57,125,125,125,57,125,125, + 125,57,125,125,202,125,125,202,125,125,57,125,202,125,125,202, + 125,57,202,152,125,57,125,57,125,152,202,125,125,57,202,238, + 238,235,125,125,202,202,125,152,125,57,125,152,202,202,202,202, + 125,57,202,125,202,202,152,202,202,202,125,202,202,152,202,202, + 125,202,202,57,202,57,125,57,57,125,57,80,202,152,202,202, + 152,125,152,202,202,202,202,152,202,57,202,202,202,57,202,152, + 80,202,202,202,202,57,202,202,202,202,69,57,80,80,57,80, + 202,57,202,202,202,152,202,202,57,69,202,238,202,57,57,80, + 238,57,80,57,202,57,57,80,57,202,238,202,57,238,202,202, + 238,202,238,202,202,57,238,80,238,202,80,191,80,238,80,238, + 238,238,238,69,57,238,80,238,238,202,57,202,238,57,238,238, + 202,238,238,238,202,238,238,238,238,57,238,238,238,238,191,69, + 238,69,57,238,238,69,238,238,238,238,238,238,238,238,238,238, + 238,57,69,57,191,238,238,191,57,69,238,238,202,238,238,238, + 191,202,238,238,238,69,238,69,191,69,191,69,191,69,238,202, + 191,69,121,69,121,69,121,69,69,69,69,121,69,69,121,69, + 69,69,69,69,69,69,69,69,69,69,69,80,69,69,3,69, + 80,69,80,69,3,69,80,69,80,69,80,69,69,3,69,80, + 3,69,80,3,3,80,3,3,3,3,69,3,80,69,3,3, + 3,69,3,3,69,69,3,69,3,3,69,80,3,80,3,80, + 69,3,3,3,80,3,4,4,4,69,4,3,4,69,4,3, + 54,54,54,54,54,54,54,54,54,54,213,54,213,213,54,213, + 54,213,213,213,68,213,54,213,54,54,213,68,213,213,54,68, + 68,213,68,68,68,54,68,54,68,54,68,96,213,68,68,54, + 68,54,68,68,54,54,68,54,68,96,68,54,54,54,54,68, + 54,68,68,68,68,54,54,54,96,68,54,68,96,54,54,63, + 68,54,54,213,54,54,213,54,54,213,68,245,213,213,213,54, + 213,213,54,213,68,68,54,213,68,213,68,54,68,68,54,68, + 68,54,68,68,68,68,54,68,68,54,68,68,54,68,96,54, + 54,68,54,68,68,68,96,68,96,68,68,68,68,68,96,68, + 68,238,68,68,96,68,96,68,68,68,96,68,68,68,68,96, + 68,68,96,96,68,96,68,57,96,238,68,68,57,96,191,68, + 57,68,68,68,57,68,152,68,57,238,68,57,68,68,57,57, + 68,125,152,238,68,68,57,125,152,68,125,125,152,125,68,125, + 68,152,125,238,68,125,125,125,125,125,125,125,125,125,125,57, + 57,125,125,125,57,125,125,125,125,125,57,125,202,125,125,202, + 125,125,202,57,125,125,57,125,202,125,202,152,202,125,202,125, + 125,57,125,202,125,125,202,125,57,202,125,202,202,202,202,125, + 202,235,191,152,57,125,238,202,125,202,57,152,125,57,152,238, + 202,125,238,202,202,57,125,57,57,125,152,57,202,57,57,125, + 202,57,202,57,202,202,202,202,202,202,57,202,57,125,57,125, + 202,57,125,152,125,202,202,57,202,152,202,57,202,202,57,202, + 202,57,57,202,202,202,57,202,202,202,202,202,57,80,202,202, + 202,202,57,80,57,202,202,202,57,57,202,57,80,202,238,202, + 202,57,202,202,202,80,57,80,238,202,57,202,80,57,238,202, + 238,202,238,57,202,238,57,238,57,57,202,57,57,238,57,238, + 57,238,238,202,202,238,202,57,238,238,238,238,202,69,202,57, + 238,238,202,191,238,69,191,238,238,238,238,238,202,238,238,202, + 191,238,69,191,191,191,238,238,238,238,238,238,238,238,238,238, + 238,191,57,238,69,238,238,238,191,238,238,238,238,238,238,238, + 191,238,69,238,238,80,238,80,238,202,238,202,69,191,69,69, + 238,191,69,238,69,121,69,69,121,69,69,69,69,69,69,69, + 69,69,69,69,69,69,69,69,69,69,69,69,69,80,69,80, + 69,69,69,80,69,3,69,3,3,3,80,69,3,69,3,69, + 3,69,3,69,69,3,3,80,3,3,69,3,69,3,80,3, + 69,3,80,69,80,3,3,69,80,3,3,3,3,80,3,3, + 80,3,80,3,3,4,69,3,3,69,69,69,3,69,4,4, + 54,54,54,54,54,54,54,54,54,54,54,54,54,54,213,54, + 213,54,68,54,54,213,54,213,68,54,68,54,68,54,213,54, + 54,54,54,54,54,68,54,54,213,54,213,68,54,96,68,68, + 54,68,54,54,68,68,96,213,96,54,54,68,54,54,54,54, + 68,54,68,54,54,16,96,68,54,54,68,96,54,54,54,54, + 54,54,54,54,213,54,54,213,54,213,54,213,54,68,213,54, + 68,54,213,54,213,213,54,68,54,68,54,213,54,54,213,54, + 54,68,54,68,54,68,68,54,213,96,213,54,68,54,68,96, + 68,96,68,96,54,96,68,54,68,96,96,96,68,96,68,68, + 96,68,96,96,68,68,68,57,68,68,238,68,68,96,57,68, + 68,68,68,68,68,238,96,96,68,96,96,96,68,68,68,96, + 57,68,57,57,68,68,238,57,68,68,57,68,238,152,68,68, + 125,68,238,68,57,125,68,152,57,125,152,68,238,68,125,57, + 125,68,152,125,125,152,57,57,125,57,152,125,125,125,125,152, + 125,57,125,57,125,125,57,125,125,125,125,57,57,125,125,57, + 125,125,125,125,57,202,125,125,57,125,238,57,202,125,57,125, + 125,202,125,125,125,202,125,202,125,57,125,125,152,57,152,57, + 191,235,202,57,125,202,125,202,125,57,202,57,125,125,57,202, + 238,57,202,57,57,202,202,125,202,202,57,125,57,202,202,238, + 57,202,238,202,57,238,57,57,57,57,152,57,202,202,202,125, + 57,202,125,202,202,57,57,125,202,57,57,202,152,57,202,57, + 57,202,202,57,57,57,202,57,57,57,202,57,202,57,57,57, + 202,238,202,57,202,57,57,57,202,80,57,238,57,57,202,57, + 57,202,57,57,57,238,202,57,202,238,202,57,69,57,202,238, + 202,57,238,57,69,57,238,80,57,238,57,69,57,238,57,238, + 202,202,238,238,238,238,238,238,238,69,57,69,57,238,238,238, + 238,238,191,202,238,69,57,69,238,238,238,238,191,57,238,191, + 238,57,191,57,238,238,238,238,238,238,238,238,238,238,238,238, + 238,238,238,57,191,191,238,238,238,238,238,238,238,238,238,69, + 69,238,238,238,191,69,238,191,69,238,238,69,191,80,191,69, + 238,69,69,121,69,121,69,69,121,69,121,69,69,69,69,69, + 69,69,121,69,69,69,69,69,69,69,80,69,69,3,69,69, + 3,69,69,69,69,80,69,80,80,69,3,80,69,80,69,80, + 69,3,69,80,3,69,3,3,80,3,3,80,3,80,3,3, + 80,3,69,3,3,80,3,3,3,3,69,69,3,3,80,3, + 3,3,3,80,3,69,4,69,4,4,4,3,4,4,3,69, + 54,54,54,54,54,210,54,54,54,54,54,54,213,54,54,213, + 54,54,213,54,213,54,213,54,213,54,213,54,213,68,213,68, + 68,68,213,68,54,68,68,54,68,54,68,54,213,54,68,68, + 68,68,68,54,54,54,54,16,54,68,96,68,96,54,54,54, + 68,54,68,68,213,213,54,68,96,16,54,68,54,96,54,63, + 54,54,54,213,54,54,213,54,213,54,54,213,54,213,54,213, + 68,68,54,54,68,54,213,68,54,213,68,213,68,54,213,68, + 54,68,54,68,54,68,96,68,54,68,54,68,68,54,68,54, + 68,96,213,68,68,54,68,68,68,68,68,96,68,96,54,68, + 96,68,68,96,96,68,96,96,68,68,68,68,68,96,68,96, + 96,68,96,96,68,68,68,96,68,68,57,96,68,96,68,68, + 57,96,68,68,57,96,68,68,57,57,152,68,238,68,57,57, + 57,68,57,68,57,125,238,125,68,57,125,125,125,152,125,125, + 57,238,68,57,238,68,68,152,125,125,125,125,152,125,125,125, + 125,57,125,125,125,125,57,125,57,125,125,152,238,57,125,125, + 125,57,125,125,57,125,57,125,125,125,125,57,57,125,125,125, + 125,125,125,202,152,202,57,125,202,125,202,57,69,57,202,238, + 202,47,121,202,57,125,57,125,202,152,69,57,125,202,125,202, + 202,238,125,202,152,57,125,202,57,125,202,125,152,125,202,202, + 57,202,238,125,202,202,125,152,202,57,202,57,57,152,202,202, + 202,202,57,57,125,202,125,152,202,202,152,125,202,57,202,202, + 57,238,202,202,238,57,202,202,202,57,202,57,202,202,202,57, + 202,57,202,57,202,202,202,57,238,202,202,202,202,238,202,202, + 238,80,202,80,202,57,202,238,80,57,57,57,202,238,202,57, + 202,202,238,57,202,57,69,57,202,238,238,57,238,202,238,238, + 238,202,57,238,202,238,202,202,238,202,57,238,238,238,202,202, + 57,69,57,238,238,238,191,57,69,57,238,238,238,238,238,238, + 238,238,69,57,238,238,57,238,238,238,238,238,238,238,238,238, + 191,191,238,238,238,238,238,238,238,238,238,238,238,69,238,57, + 202,238,238,238,238,238,69,238,238,69,238,202,238,202,238,238, + 69,238,69,238,69,121,69,69,69,69,69,69,69,69,69,69, + 69,69,69,69,69,69,69,69,69,3,69,69,69,69,80,80, + 69,69,3,69,3,80,3,69,3,80,3,69,3,69,3,69, + 3,69,3,69,3,80,3,69,3,69,3,69,3,3,80,69, + 3,3,80,3,3,69,80,3,80,3,80,3,80,3,3,80, + 80,3,69,3,4,3,80,69,3,4,4,4,4,69,3,4, + 54,155,54,210,54,210,54,54,155,213,54,54,54,54,213,54, + 213,54,213,54,213,54,54,213,54,213,54,213,54,54,54,54, + 213,54,68,54,68,54,213,54,54,68,54,96,68,54,54,213, + 54,54,54,68,68,213,96,68,68,54,54,54,54,96,54,54, + 54,68,54,54,54,96,54,54,54,54,68,54,54,54,54,54, + 54,54,54,54,54,213,54,54,213,54,213,54,54,54,54,213, + 54,213,54,213,54,213,54,68,213,54,54,54,54,68,54,54, + 213,54,54,213,54,213,54,54,68,54,68,54,54,68,54,96, + 54,54,54,96,16,68,16,54,16,54,54,68,68,68,68,68, + 68,96,68,68,68,96,68,68,96,96,68,96,68,68,96,68, + 238,96,68,57,96,96,96,68,96,57,68,68,96,152,68,152, + 96,68,57,68,68,152,57,68,68,68,238,57,68,57,68,68, + 152,57,68,152,68,68,68,57,125,68,57,68,68,238,125,152, + 125,125,125,152,125,125,125,238,125,125,152,57,238,57,238,125, + 152,125,125,57,57,125,125,57,125,57,125,57,125,125,57,57, + 57,125,125,125,125,125,125,125,125,125,125,125,125,125,202,125, + 57,125,125,57,238,57,125,125,125,238,57,125,125,125,57,191, + 158,254,238,57,125,125,202,125,238,57,152,202,125,57,57,57, + 57,202,57,57,57,202,125,57,125,202,152,202,57,125,57,57, + 202,57,202,238,57,238,57,57,57,202,57,202,125,125,57,152, + 57,57,125,152,202,152,202,57,125,152,202,125,202,125,57,57, + 202,202,57,57,202,202,57,57,238,57,57,202,57,57,238,238, + 238,238,57,69,57,57,57,202,202,57,238,57,238,202,238,57, + 202,57,238,57,69,238,57,57,69,238,202,202,57,238,57,238, + 57,238,80,238,57,202,238,202,57,57,238,202,202,238,202,238, + 57,238,238,202,57,202,238,57,238,191,202,238,202,238,238,238, + 202,238,238,238,57,238,80,238,191,191,238,238,238,57,69,238, + 238,57,238,191,191,191,238,238,121,238,191,238,238,238,238,238, + 238,238,191,238,238,238,238,238,121,238,238,238,238,191,121,238, + 238,238,238,202,121,238,238,238,69,238,238,238,238,69,238,238, + 238,238,69,238,69,121,69,69,121,69,69,69,69,69,69,69, + 69,69,69,69,69,69,69,69,69,69,69,80,69,69,69,3, + 69,69,80,69,69,3,80,3,69,3,80,69,80,69,3,69, + 3,69,80,69,3,3,80,69,3,80,3,69,80,69,3,3, + 69,69,3,80,3,3,3,69,69,3,3,3,3,80,3,3, + 3,80,3,69,4,3,69,3,4,3,69,69,3,4,4,4, + 54,54,210,54,54,54,54,54,54,54,54,54,54,54,54,54, + 54,54,54,213,54,213,54,213,54,213,54,68,213,68,213,54, + 213,54,213,54,68,54,68,54,54,213,54,54,213,54,54,68, + 68,68,54,54,96,213,54,54,96,54,16,54,54,54,54,54, + 54,68,68,68,54,68,54,54,16,54,54,16,54,16,54,54, + 54,54,54,54,54,54,54,213,54,54,213,54,213,213,54,213, + 54,213,54,213,96,54,54,68,54,68,68,68,54,68,54,68, + 54,68,54,54,68,54,213,54,68,54,68,68,54,54,68,54, + 68,96,213,54,54,68,68,68,68,68,54,16,96,68,96,68, + 68,54,96,16,68,68,96,68,68,96,68,96,68,68,96,54, + 68,96,68,96,68,191,96,238,96,96,96,68,96,68,96,68, + 68,152,96,96,191,68,96,57,96,152,68,57,68,96,152,238, + 68,68,57,68,57,152,68,57,68,152,68,57,152,68,238,125, + 68,152,238,68,152,125,68,68,57,238,68,68,152,68,152,238, + 68,57,125,125,238,125,125,125,125,57,125,57,238,125,125,125, + 125,57,57,125,125,125,202,57,125,202,57,125,202,57,125,125, + 57,57,125,125,125,125,125,202,152,125,125,125,152,202,125,16, + 235,235,57,125,125,152,125,125,125,57,57,125,152,202,125,57, + 57,125,125,57,57,57,202,125,57,57,238,57,238,202,238,57, + 125,57,202,57,238,202,125,125,57,125,57,125,57,202,57,125, + 125,202,125,57,238,238,202,57,57,57,238,57,202,57,57,238, + 238,238,238,238,238,202,238,238,202,238,238,202,57,238,202,57, + 202,238,57,202,57,238,238,57,202,202,238,202,57,238,57,238, + 238,238,57,238,202,57,80,191,57,57,238,238,202,238,80,238, + 57,238,202,57,238,238,238,57,238,238,57,191,238,191,57,238, + 57,238,57,238,238,238,238,202,238,57,238,238,202,238,238,238, + 238,238,238,238,69,191,191,57,69,57,238,238,238,191,57,238, + 191,191,69,57,69,191,191,191,191,238,238,238,191,238,191,69, + 191,238,191,238,238,238,238,238,238,238,238,238,238,238,238,238, + 69,238,238,238,238,238,238,238,238,238,238,69,191,238,80,238, + 238,69,191,69,238,69,69,121,69,80,69,69,69,69,69,69, + 69,69,69,69,69,69,69,69,69,69,69,69,69,3,69,69, + 80,69,3,69,80,69,69,80,69,3,69,3,69,80,69,80, + 3,3,69,3,3,3,3,3,3,69,3,80,69,3,3,69, + 3,3,3,80,3,80,3,3,3,80,80,69,69,3,80,4, + 3,4,3,69,69,3,4,69,69,3,3,4,3,4,4,3, + 54,155,54,155,54,54,155,54,54,54,54,54,54,54,54,213, + 54,213,54,54,54,213,54,54,54,54,213,54,54,54,54,68, + 54,54,54,213,54,54,213,54,54,68,54,68,54,68,54,54, + 54,54,54,68,54,54,96,54,68,54,68,54,54,63,54,54, + 54,54,54,54,54,54,54,54,213,96,54,68,54,54,54,54, + 54,54,54,54,54,54,54,54,54,213,54,54,54,213,54,54, + 54,213,54,54,213,54,213,54,213,54,54,54,68,54,54,54, + 54,213,54,68,54,54,54,68,54,68,54,54,54,68,54,68, + 54,54,96,68,96,54,96,54,54,96,68,68,68,96,54,96, + 96,68,68,68,96,54,68,54,68,68,96,68,54,96,68,68, + 96,54,96,68,96,68,96,54,68,96,96,96,68,96,57,68, + 96,68,68,68,68,96,57,68,238,96,96,57,68,125,68,96, + 57,57,68,57,68,238,152,68,238,57,125,68,238,57,68,57, + 68,238,152,68,238,57,125,125,125,152,125,125,125,125,57,125, + 125,125,57,57,125,57,125,238,152,238,57,125,125,57,57,57, + 57,125,125,57,57,125,57,125,57,57,152,125,57,152,57,125, + 125,125,125,125,57,57,125,57,57,125,125,125,57,57,125,96, + 141,235,238,57,57,57,125,202,125,125,125,57,125,57,125,125, + 202,125,125,202,152,125,57,57,125,125,125,125,125,57,202,125, + 57,125,57,202,125,57,57,57,202,57,152,125,125,57,202,125, + 202,57,238,202,202,202,57,125,57,57,202,57,57,238,57,238, + 57,238,202,57,238,57,57,202,191,202,57,238,57,202,191,202, + 238,57,202,57,238,202,238,57,57,57,80,57,238,202,202,57, + 80,238,202,57,238,57,238,202,80,238,57,202,57,57,69,57, + 238,238,57,238,57,202,238,238,202,69,57,80,57,238,238,238, + 238,238,238,238,57,69,238,238,202,238,202,238,191,238,191,238, + 238,238,238,57,191,238,238,57,191,238,238,238,191,57,238,238, + 238,57,191,191,191,191,238,57,238,191,238,191,238,191,57,191, + 238,191,238,191,238,238,238,238,121,191,238,238,238,238,238,238, + 238,238,238,238,238,69,238,238,57,69,238,57,69,238,238,238, + 69,191,80,238,69,238,69,69,69,69,69,69,69,69,69,69, + 69,69,69,69,69,69,69,69,69,69,69,69,69,69,80,69, + 3,69,80,69,69,3,69,3,69,80,69,3,69,3,80,69, + 80,3,80,3,80,3,69,80,3,80,69,3,3,69,3,80, + 3,80,3,69,3,3,80,3,69,69,3,4,3,4,3,3, + 69,3,69,80,3,3,69,3,4,4,4,4,4,4,4,4, + 54,54,155,54,54,155,213,155,54,155,213,155,213,54,54,54, + 54,54,213,54,54,54,213,54,213,54,213,54,213,54,54,213, + 54,213,54,213,54,68,54,54,213,54,54,54,54,68,54,213, + 54,68,54,213,54,54,68,54,68,54,68,96,54,54,96,54, + 54,54,96,54,54,96,54,63,54,54,63,54,54,54,54,54, + 54,54,54,54,54,54,54,54,54,54,213,54,54,54,213,54, + 54,54,213,54,213,54,54,54,213,54,54,54,213,54,213,54, + 54,54,54,68,54,68,54,54,54,68,54,68,54,54,16,96, + 213,96,54,68,96,54,96,68,54,54,54,54,68,68,54,54, + 16,54,54,68,96,96,68,96,96,68,96,68,68,96,96,96, + 238,54,96,96,96,96,68,208,68,96,68,96,96,68,96,68, + 96,152,68,57,68,68,96,68,68,57,96,96,57,96,125,68, + 68,57,68,57,68,57,68,152,68,57,68,57,68,57,68,57, + 68,238,125,68,152,68,152,68,57,68,68,57,68,125,68,152, + 68,125,125,57,152,68,152,238,68,68,96,96,68,68,68,68, + 96,96,238,57,96,68,57,238,68,96,191,57,16,238,96,57, + 238,57,96,57,238,191,68,238,16,191,57,238,68,191,96,208, + 80,235,57,125,125,57,57,57,125,125,202,57,125,57,125,57, + 57,57,57,57,125,125,125,202,57,57,57,125,202,57,57,125, + 57,57,57,57,57,125,202,96,202,57,57,125,152,57,57,57, + 152,57,238,57,57,57,57,202,57,57,57,238,57,238,57,57, + 202,191,57,238,238,238,57,202,191,57,57,57,191,202,191,57, + 202,191,57,238,57,57,57,238,238,238,57,202,191,57,57,238, + 57,238,202,238,202,57,238,57,57,202,191,57,202,191,57,202, + 238,57,202,238,238,238,202,191,57,57,238,57,238,238,238,238, + 57,57,202,238,238,238,238,57,238,191,57,238,191,238,191,238, + 57,238,238,69,57,69,191,57,121,191,191,191,191,191,191,191, + 191,191,191,191,191,191,191,191,191,191,191,191,191,191,208,191, + 191,191,191,191,208,191,191,208,191,191,191,16,16,208,208,191, + 191,16,191,191,191,16,121,191,16,191,191,16,191,191,121,191, + 121,238,238,69,191,69,69,191,69,69,69,69,69,69,69,69, + 69,69,69,69,69,69,69,69,69,69,69,69,80,69,69,80, + 69,3,80,69,69,80,69,3,69,3,69,80,80,69,3,3, + 80,69,3,3,3,3,3,3,69,3,3,80,69,3,3,69, + 3,69,3,69,80,3,3,3,3,69,3,69,69,69,69,3, + 69,3,69,3,80,3,4,3,4,4,69,4,4,4,4,3, + 54,155,54,155,54,54,155,54,54,54,54,54,155,54,54,54, + 54,54,54,213,54,54,54,54,213,54,54,213,54,213,54,54, + 213,54,54,54,54,54,54,213,54,213,54,68,54,54,68,63, + 68,54,54,96,54,68,54,96,54,54,96,54,68,54,63,54, + 54,68,54,68,54,54,54,54,54,68,54,54,54,54,54,54, + 54,54,54,54,54,54,54,54,54,54,54,213,54,54,54,213, + 54,213,54,54,54,54,54,213,54,213,54,213,54,54,213,54, + 213,54,68,54,54,54,68,54,68,63,68,54,54,54,54,54, + 54,16,54,54,213,96,213,96,68,96,96,16,54,96,68,68, + 96,68,68,16,54,68,54,54,68,54,68,96,96,54,68,68, + 96,213,16,96,54,96,96,96,96,96,96,96,68,96,96,96, + 68,57,68,96,96,96,152,96,68,96,68,68,96,57,68,152, + 96,57,96,68,57,68,57,68,57,68,96,57,68,152,68,152, + 57,68,57,125,57,68,238,152,57,57,57,68,57,68,152,57, + 68,57,57,68,238,57,125,57,125,125,80,202,238,202,57,238, + 202,69,57,125,202,202,125,125,202,202,202,125,125,205,69,125, + 69,125,202,125,125,202,57,125,202,205,125,125,202,69,69,16, + 57,235,57,57,57,125,57,125,57,57,57,125,57,125,57,57, + 125,125,125,202,57,57,125,57,152,125,125,57,57,57,125,125, + 125,57,57,57,125,57,57,57,57,57,125,238,57,57,125,57, + 57,125,57,238,57,125,125,57,125,57,202,57,57,238,238,57, + 191,238,57,57,238,57,57,191,57,57,57,57,57,191,57,57, + 191,57,238,238,57,238,57,238,57,57,57,191,238,238,202,238, + 57,57,238,57,191,238,57,238,57,191,202,238,191,202,238,57, + 238,238,57,238,57,57,57,238,57,238,238,191,57,191,238,238, + 238,238,191,238,191,238,191,57,238,238,57,238,238,69,57,191, + 69,57,57,191,191,191,69,191,191,69,80,80,121,69,69,191, + 69,69,191,121,238,238,238,121,80,121,121,121,69,191,80,238, + 80,69,121,69,80,69,69,69,69,69,80,80,80,80,80,80, + 80,80,80,80,80,80,69,69,80,69,121,69,69,69,238,80, + 80,238,238,69,202,191,69,202,69,69,69,121,69,69,69,121, + 69,69,69,69,69,69,69,69,69,69,69,69,3,69,69,69, + 3,69,3,80,69,80,69,3,80,80,3,69,3,80,3,80, + 3,3,3,80,3,80,3,80,3,69,3,3,69,3,69,80, + 69,80,3,3,69,69,69,3,80,3,80,3,4,3,80,3, + 80,3,3,69,69,4,4,4,69,3,3,69,69,4,3,69, + 54,155,54,155,54,155,213,155,54,155,213,54,54,54,54,54, + 54,213,54,54,54,213,54,54,54,54,54,54,54,213,54,54, + 54,68,54,68,54,213,54,54,54,54,54,68,54,54,68,54, + 54,54,16,68,208,54,54,16,68,54,54,54,96,54,54,54, + 63,54,208,54,96,54,96,54,63,54,54,54,63,54,54,54, + 54,54,54,54,54,54,54,54,54,213,54,54,54,213,54,54, + 54,54,54,213,54,213,54,54,54,54,54,54,68,54,54,54, + 54,68,54,96,54,54,68,63,68,54,54,96,68,54,68,54, + 68,54,54,96,54,54,54,54,54,54,213,96,54,16,54,68, + 54,96,96,68,96,96,16,54,238,54,68,54,68,96,54,96, + 54,68,54,96,68,96,68,96,54,16,96,96,96,68,68,96, + 96,96,68,152,68,68,57,96,152,152,96,68,152,96,68,57, + 96,68,96,57,68,57,96,68,57,152,68,96,238,57,238,68, + 152,68,57,68,57,68,191,68,68,152,68,152,57,238,125,125, + 152,68,125,152,68,57,68,57,68,192,17,187,132,122,17,150, + 187,187,132,219,166,132,219,166,166,166,132,227,183,187,166,187, + 187,166,132,17,187,219,219,187,166,219,219,166,17,166,183,158, + 202,141,238,57,57,125,57,125,152,57,57,125,57,125,125,57, + 57,57,57,152,125,57,57,57,238,57,125,57,125,57,57,57, + 125,57,57,57,57,57,57,57,57,57,57,57,125,57,57,57, + 238,57,57,125,57,57,57,57,57,57,57,57,57,57,238,57, + 238,57,238,57,57,57,238,57,238,191,57,57,57,57,57,57, + 57,57,57,238,57,57,191,57,238,57,238,57,57,191,57,57, + 191,57,238,57,57,238,57,238,238,191,57,57,191,57,57,238, + 57,57,238,238,57,57,238,191,238,191,57,191,69,191,57,238, + 191,238,191,238,57,238,191,191,57,191,238,191,191,191,238,191, + 191,191,238,57,191,191,191,191,191,56,183,132,219,215,219,183, + 132,183,183,219,183,219,219,183,183,183,183,183,132,132,132,219, + 183,183,183,183,219,215,56,56,183,215,183,219,219,42,183,26, + 219,219,219,183,132,183,219,219,219,219,219,122,219,132,215,0, + 199,191,69,69,238,69,57,238,69,238,69,80,121,69,69,69, + 69,69,69,69,69,69,69,69,69,69,80,69,69,69,80,69, + 69,80,3,3,3,3,80,69,3,80,69,80,3,69,3,80, + 3,80,3,3,69,3,3,80,3,3,80,69,3,80,3,3, + 3,3,80,3,3,80,69,3,3,69,3,3,69,3,4,3, + 4,80,3,3,69,69,4,4,69,3,3,3,4,69,4,4, + 155,155,155,54,155,54,155,54,155,54,54,155,54,155,54,54, + 54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54, + 213,54,54,54,54,54,54,68,54,68,54,63,54,54,63,54, + 54,54,54,63,54,54,54,54,54,54,54,54,54,54,96,54, + 96,54,54,54,54,54,54,54,54,54,54,54,54,54,210,210, + 210,54,54,155,54,155,54,54,54,54,54,54,54,54,54,54, + 54,54,54,54,54,54,54,213,54,213,54,54,54,54,213,54, + 54,54,54,54,54,54,63,68,63,54,54,54,208,54,54,96, + 63,68,54,208,68,54,96,16,54,68,54,54,68,54,96,54, + 96,54,213,96,54,68,213,96,54,68,96,68,96,68,68,54, + 96,54,16,54,96,96,96,96,68,96,68,54,96,96,96,96, + 68,68,96,68,96,96,96,68,96,96,68,68,96,68,96,57, + 68,96,57,68,96,96,57,57,68,96,68,152,68,152,68,57, + 68,57,57,68,96,57,68,57,57,68,125,238,57,68,57,68, + 57,68,57,238,125,152,68,152,57,80,182,67,211,12,99,99, + 99,182,67,67,99,182,67,99,67,99,67,67,182,182,67,67, + 99,99,182,182,99,182,109,67,182,67,99,67,141,211,109,235, + 80,99,68,125,125,57,125,238,57,125,57,57,125,57,57,125, + 125,125,57,57,57,57,57,57,125,125,57,152,57,125,57,125, + 57,57,57,57,57,57,57,57,125,57,57,57,57,57,125,57, + 57,57,125,57,125,125,125,125,125,57,57,57,57,57,57,57, + 57,191,125,191,191,57,238,57,57,238,238,238,57,57,238,57, + 238,57,57,191,57,191,57,238,191,57,57,57,191,57,57,57, + 57,191,191,57,57,238,57,57,57,57,57,238,57,57,191,57, + 57,191,57,191,57,191,57,57,191,69,191,57,191,57,191,191, + 57,238,238,191,191,191,238,238,191,238,191,57,191,57,191,191, + 191,57,191,191,191,57,57,208,80,26,17,141,243,8,243,67, + 243,211,141,8,182,182,243,67,12,243,49,141,243,12,243,182, + 182,182,182,182,8,67,182,182,182,139,243,182,67,49,49,49, + 67,182,141,67,182,67,211,8,139,243,8,243,17,8,8,26, + 80,121,238,238,202,238,202,80,238,80,69,69,69,69,69,69, + 69,69,69,69,69,69,69,69,69,69,69,69,80,69,69,80, + 3,3,80,80,69,3,3,69,80,3,69,3,80,3,80,3, + 3,3,80,3,80,3,3,3,80,69,3,3,69,69,69,80, + 3,69,3,3,69,3,3,69,3,4,4,69,4,69,69,3, + 69,4,4,3,3,3,3,3,4,4,4,4,4,4,3,69, + 210,210,210,155,54,155,54,54,54,54,155,213,54,54,54,54, + 155,54,54,54,54,54,213,54,54,54,54,54,54,213,54,54, + 54,54,54,213,54,54,54,54,54,54,54,54,54,54,96,54, + 54,54,54,68,54,54,54,54,96,16,54,16,68,63,54,54, + 54,54,54,54,54,208,63,54,54,54,54,54,63,54,54,54, + 210,210,54,54,54,54,54,54,54,54,54,54,54,54,54,213, + 213,54,54,54,213,54,54,54,54,54,213,54,68,54,54,54, + 54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,68, + 54,54,54,54,96,54,54,68,63,96,54,96,68,96,54,96, + 96,54,96,96,54,54,68,96,54,54,16,54,96,96,68,96, + 96,68,54,96,208,54,54,208,54,96,96,16,96,96,68,208, + 96,68,96,68,68,68,96,68,57,96,96,57,96,96,152,68, + 57,96,96,152,68,68,68,68,57,68,191,68,96,68,152,57, + 68,152,68,125,68,152,68,68,96,57,68,152,68,57,57,68, + 152,68,57,68,57,238,57,68,152,192,182,67,182,243,49,67, + 49,67,224,99,99,67,67,182,139,67,67,67,182,99,182,182, + 67,67,99,67,182,67,224,67,109,67,99,67,99,49,182,219, + 80,235,191,57,152,57,57,57,57,125,125,57,57,152,57,57, + 57,152,57,57,57,57,57,57,57,57,57,68,57,57,57,125, + 152,57,96,57,96,57,57,191,57,57,57,57,57,191,57,57, + 57,191,57,57,57,57,191,191,57,57,57,57,57,57,57,191, + 96,80,199,191,191,57,191,191,57,191,191,57,238,191,191,57, + 191,191,57,191,57,191,191,57,191,57,57,57,57,191,57,191, + 192,80,191,191,191,191,57,238,238,191,238,57,238,238,57,191, + 57,191,57,191,57,57,238,191,191,57,191,191,191,191,191,191, + 191,191,57,191,238,191,191,191,191,191,191,57,191,57,238,57, + 191,191,191,57,191,191,191,208,235,219,182,8,183,12,42,12, + 219,12,150,150,12,17,219,243,219,141,243,182,12,12,12,8, + 141,8,8,141,12,182,243,12,243,67,67,49,132,12,17,17, + 182,8,243,8,141,141,182,8,243,17,67,8,26,8,182,12, + 69,121,191,69,238,121,238,69,238,238,69,69,121,69,69,69, + 69,69,69,69,69,69,69,69,69,69,69,69,69,3,69,69, + 69,3,69,80,3,80,80,3,69,80,3,80,69,80,3,80, + 3,3,80,3,69,3,80,3,3,3,80,3,3,3,69,69, + 3,69,80,3,69,3,80,69,3,69,3,69,3,3,69,3, + 69,3,4,4,80,3,4,3,4,4,3,69,3,4,3,69, + 210,155,54,155,54,155,155,54,155,54,54,210,54,210,54,54, + 54,54,54,54,54,54,63,54,54,54,54,54,213,54,54,54, + 213,54,54,54,54,54,54,54,54,54,54,96,54,54,54,54, + 96,54,213,208,54,16,54,54,54,54,54,54,63,68,208,54, + 54,54,54,54,54,54,54,63,63,63,63,54,54,210,54,210, + 54,54,54,210,54,155,54,155,54,54,54,54,54,54,54,54, + 63,54,54,54,54,54,54,54,54,54,54,54,63,54,213,54, + 213,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54, + 54,54,54,54,68,54,54,54,68,54,68,54,54,54,68,54, + 54,96,54,68,96,54,54,16,54,68,54,68,16,54,96,54, + 96,54,96,208,54,96,96,96,96,96,96,68,96,96,96,96, + 96,96,96,96,96,96,57,68,96,96,96,96,68,68,96,96, + 96,68,68,96,57,96,96,96,68,57,96,96,57,68,57,68, + 96,68,57,96,96,57,125,254,192,68,96,68,68,152,96,57, + 68,57,68,57,68,68,57,68,57,199,182,49,182,211,235,99, + 67,99,67,49,99,67,99,49,99,99,99,99,99,67,49,99, + 99,235,67,182,99,182,8,49,91,235,235,67,182,235,182,42, + 121,145,63,96,208,96,68,54,96,96,96,96,68,16,96,96, + 96,16,96,96,96,68,96,96,96,96,191,96,96,68,96,96, + 208,96,191,96,96,96,208,96,208,96,96,96,63,96,96,96, + 96,96,96,96,96,96,96,96,96,96,96,96,96,208,208,208, + 63,202,199,105,208,191,96,208,208,191,191,208,191,191,191,191, + 191,191,208,208,208,208,191,208,191,208,191,208,208,191,208,105, + 199,191,105,191,191,208,208,191,208,191,191,208,208,191,208,191, + 208,191,208,191,208,191,208,191,191,191,208,191,191,191,191,191, + 191,191,191,191,191,191,191,191,191,191,191,208,191,208,208,208, + 208,191,191,208,191,208,208,105,139,8,67,49,67,211,67,139, + 67,67,99,67,8,67,182,67,67,211,211,49,182,141,67,67, + 67,67,67,8,139,8,67,182,67,67,49,141,0,0,0,122, + 8,8,67,49,101,182,67,67,26,139,7,182,17,12,12,12, + 208,208,16,16,16,16,121,16,121,121,191,121,191,191,121,121, + 16,121,121,121,121,121,121,69,121,121,121,121,121,69,69,80, + 69,3,69,3,80,69,3,80,3,69,80,3,3,3,80,3, + 80,3,3,3,80,3,3,80,3,3,3,80,80,3,3,80, + 3,3,69,69,4,3,3,4,3,4,4,3,69,4,80,3, + 3,69,69,80,3,3,4,4,4,69,4,3,4,69,4,3, + 210,54,155,155,155,54,155,54,155,54,155,54,54,54,54,54, + 54,54,54,54,54,54,213,54,54,54,54,63,54,54,54,63, + 54,54,54,54,54,54,54,54,54,54,54,54,54,208,54,54, + 54,63,68,54,54,54,54,54,54,54,54,54,54,54,54,54, + 54,54,208,54,54,54,54,54,54,54,63,54,54,210,54,63, + 210,210,54,210,54,54,54,54,54,54,54,54,54,54,54,54, + 54,54,213,63,54,213,54,54,54,54,213,54,54,54,54,63, + 54,54,54,54,54,63,54,54,96,54,54,16,54,54,16,54, + 68,54,54,16,54,68,96,54,96,63,54,96,54,96,68,54, + 16,68,96,54,96,54,68,54,96,68,54,68,68,96,16,63, + 96,54,68,96,208,96,54,96,208,54,54,96,96,16,96,96, + 96,96,96,68,96,96,96,68,68,57,96,96,96,96,96,96, + 54,96,96,96,68,68,57,96,68,57,68,96,96,68,96,57, + 96,68,57,125,68,208,215,0,95,68,191,57,238,68,57,57, + 152,152,57,57,57,57,191,238,57,202,187,49,182,67,49,99, + 67,67,67,67,235,49,49,99,49,49,145,67,99,49,67,67, + 67,99,67,49,49,99,99,235,12,99,49,99,49,99,139,0, + 121,145,191,121,121,191,238,69,238,238,238,57,57,121,238,238, + 238,238,238,69,57,69,69,238,121,238,238,121,57,69,202,202, + 202,125,238,121,191,57,202,202,191,121,191,238,69,238,121,202, + 202,121,238,238,121,202,57,121,238,238,238,191,238,57,238,191, + 191,80,225,69,57,69,80,57,57,202,57,57,69,57,69,57, + 57,57,80,57,80,57,57,57,69,69,80,80,57,57,69,238, + 199,238,191,69,57,80,57,57,57,57,80,80,57,80,202,80, + 57,80,57,80,57,80,57,69,57,80,69,69,69,57,69,57, + 69,57,69,69,69,69,57,80,69,80,80,80,80,80,80,199, + 199,80,80,80,80,80,80,238,26,12,150,243,243,150,243,12, + 150,243,243,141,8,243,243,8,141,17,243,8,12,12,243,243, + 243,243,243,12,141,243,243,150,141,211,211,17,0,0,0,0, + 12,243,243,243,12,12,8,141,122,12,26,26,26,12,12,12, + 69,69,80,199,225,199,145,80,80,199,199,80,80,80,80,80, + 199,80,80,199,199,199,199,80,199,199,199,80,199,199,80,69, + 80,69,80,69,3,80,3,69,80,3,3,80,69,80,3,3, + 3,80,80,3,3,3,3,3,80,3,3,3,69,3,80,3, + 80,3,3,80,3,4,4,69,4,69,80,4,69,3,69,4, + 4,3,3,3,80,69,3,4,3,69,69,69,3,69,4,4, + 155,155,210,155,210,155,155,54,155,54,155,54,210,54,210,54, + 54,54,54,54,54,54,210,54,54,54,54,54,54,213,54,54, + 54,213,54,54,54,54,54,54,54,213,208,54,54,54,54,54, + 63,68,63,54,54,54,54,54,54,54,54,54,63,54,63,63, + 54,63,54,63,54,63,63,63,63,63,54,63,63,54,210,54, + 54,54,210,54,210,210,210,155,54,54,54,54,54,54,210,54, + 54,54,54,54,54,54,54,54,54,54,63,54,54,54,54,54, + 54,54,54,54,68,54,54,54,208,68,54,54,54,54,63,54, + 208,54,54,54,54,54,208,54,16,54,54,54,68,54,54,54, + 68,96,54,96,54,68,63,68,54,54,54,54,54,54,68,54, + 208,68,54,54,68,208,54,96,54,96,96,54,96,96,68,96, + 96,96,57,96,68,68,96,96,96,96,68,68,96,238,96,152, + 254,99,254,254,59,141,254,141,59,141,95,141,166,141,141,111, + 141,141,95,254,254,132,219,183,187,141,254,254,254,254,224,182, + 254,254,254,111,109,111,111,132,111,111,166,111,187,187,111,109, + 187,224,111,109,183,187,109,132,187,219,26,111,187,187,132,111, + 187,12,111,219,224,150,12,132,187,183,254,187,132,109,150,17, + 150,132,141,246,141,187,219,166,132,166,150,132,166,187,132,132, + 17,132,17,215,132,166,166,132,183,132,166,187,166,187,166,111, + 166,132,183,215,219,219,183,215,221,221,42,183,221,219,219,215, + 56,122,183,183,219,166,219,219,219,132,132,17,132,132,215,56, + 215,183,221,132,215,215,215,215,56,215,56,56,215,183,215,183, + 219,215,215,183,183,215,215,215,215,215,215,215,183,215,215,215, + 215,132,215,215,183,183,215,219,215,219,215,215,183,215,215,215, + 183,215,183,215,183,215,0,215,215,215,215,215,215,215,215,183, + 215,56,215,215,215,215,215,215,215,215,183,215,215,221,221,215, + 215,221,221,221,221,221,219,17,187,254,109,111,150,111,109,254, + 109,211,187,187,12,150,150,150,187,132,187,109,150,109,12,187, + 150,150,109,109,12,211,12,109,187,150,141,139,109,8,211,109, + 211,187,243,150,243,109,109,12,211,150,243,243,243,243,243,12, + 132,56,42,42,219,219,221,42,122,221,56,183,183,183,219,183, + 183,221,219,183,183,219,183,219,219,219,219,26,122,215,3,69, + 3,69,3,80,69,3,3,80,69,80,80,3,69,3,80,80, + 3,3,3,80,3,80,3,3,3,80,3,80,3,3,3,3, + 3,80,3,4,69,3,80,3,3,4,3,3,3,69,4,69, + 4,4,69,4,3,4,4,69,4,4,4,3,4,4,3,69, + 155,210,155,54,155,54,210,54,210,54,54,210,54,210,54,54, + 54,54,54,54,54,54,54,54,54,54,54,63,63,54,54,54, + 63,54,54,54,54,54,54,63,63,54,54,54,54,63,54,54, + 63,54,63,54,54,54,54,54,63,54,54,54,63,54,54,63, + 54,54,54,63,54,54,54,54,54,63,54,54,63,63,63,210, + 210,54,210,54,54,54,54,210,210,54,54,54,54,54,54,54, + 54,210,213,54,210,54,54,54,54,213,54,54,54,54,54,54, + 54,54,63,63,54,54,54,54,63,68,54,63,54,54,54,54, + 96,54,54,96,54,54,54,54,54,54,54,208,54,96,54,63, + 54,54,16,54,63,68,54,96,96,54,96,96,96,54,96,54, + 63,96,54,208,96,96,96,68,54,96,96,96,54,96,96,96, + 96,54,96,96,96,96,96,68,57,96,96,96,96,96,208,96, + 56,122,243,243,187,122,182,26,109,219,12,17,109,211,182,187, + 139,17,26,254,187,42,67,67,182,122,42,26,26,91,182,109, + 211,139,109,12,182,182,67,182,182,211,67,99,182,49,182,99, + 67,235,99,99,17,17,211,150,139,109,219,182,182,67,99,49, + 99,235,182,26,64,235,99,99,182,42,99,182,99,182,99,49, + 99,211,99,187,150,109,67,99,67,111,12,99,67,67,182,67, + 99,182,182,211,12,182,139,182,243,182,182,99,182,67,224,67, + 99,182,182,182,139,99,182,99,139,132,26,182,8,99,49,99, + 67,254,139,182,211,182,182,182,139,211,182,211,182,99,150,182, + 17,109,99,182,182,67,182,182,182,99,182,211,139,182,182,182, + 99,67,182,182,211,182,67,182,99,182,182,99,67,182,99,243, + 99,141,182,182,141,99,8,211,182,8,182,182,182,67,139,182, + 67,182,182,182,211,182,141,67,243,182,243,211,182,182,182,182, + 182,182,99,99,67,182,182,182,182,182,67,182,211,182,139,211, + 182,8,67,67,182,99,182,243,139,99,235,99,99,67,67,99, + 67,182,49,49,67,99,67,67,235,99,67,182,67,99,49,67, + 67,182,49,99,67,99,49,99,182,67,182,49,99,67,182,67, + 67,211,49,182,67,67,67,182,182,99,99,67,67,182,67,182, + 141,182,182,67,243,67,141,67,67,182,182,182,141,182,67,182, + 67,182,141,67,182,141,67,182,182,182,182,67,17,12,69,69, + 69,3,3,69,80,69,69,3,3,3,80,80,80,69,3,3, + 80,3,3,80,69,3,80,3,3,3,3,3,69,80,3,69, + 3,4,4,4,69,69,3,4,3,69,69,80,4,69,3,4, + 4,4,4,69,3,69,3,69,3,4,4,4,4,69,3,4, + 155,210,155,155,155,155,54,210,155,54,54,210,54,54,54,54, + 210,54,210,54,54,54,54,210,54,54,54,54,54,54,54,54, + 54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54, + 54,54,54,63,54,63,54,63,54,63,63,210,54,63,63,63, + 63,63,63,54,54,210,63,63,63,54,210,210,54,210,54,210, + 54,210,54,210,210,155,210,54,54,54,210,54,54,54,54,54, + 54,54,210,54,54,54,54,54,54,54,63,54,54,54,54,54, + 54,54,54,54,54,54,54,54,54,63,54,54,54,54,54,54, + 54,54,54,54,54,54,96,54,54,96,54,54,54,208,54,96, + 54,96,54,96,96,54,96,54,54,96,54,54,54,96,54,96, + 96,54,96,54,54,54,96,63,54,96,96,54,96,208,54,96, + 54,96,96,96,96,96,68,96,96,96,96,96,96,68,96,96, + 219,243,139,99,211,26,49,182,182,182,211,211,211,182,243,109, + 182,243,26,243,99,182,12,12,141,91,26,67,243,219,12,150, + 150,182,182,187,182,182,235,67,211,67,99,139,99,99,99,182, + 182,211,99,67,12,26,182,67,182,182,182,139,67,182,182,67, + 182,99,139,42,8,235,235,99,109,42,17,109,67,26,182,254, + 67,99,211,67,26,26,64,182,109,187,26,99,139,59,59,67, + 99,224,67,182,99,182,182,211,109,139,67,139,59,182,99,182, + 182,243,64,182,99,211,219,67,67,99,132,219,67,99,182,99, + 99,67,182,99,99,67,182,182,182,182,99,182,211,17,243,182, + 26,141,99,182,99,109,219,150,67,99,182,182,182,182,99,182, + 182,182,182,99,243,99,182,182,67,182,182,243,99,99,243,254, + 109,67,182,182,182,182,182,182,182,182,211,182,182,182,224,182, + 109,109,211,182,141,182,211,182,254,67,141,99,67,182,182,211, + 182,182,182,182,99,8,243,243,99,182,109,182,141,182,182,141, + 182,182,254,67,182,182,182,109,109,182,67,141,182,99,211,211, + 182,150,109,99,211,12,182,99,139,243,150,150,182,141,99,182, + 139,67,182,182,182,8,67,182,150,211,211,99,182,8,243,211, + 182,243,211,211,182,141,182,243,17,8,67,8,182,182,8,8, + 182,67,8,141,8,182,243,182,8,67,8,8,67,141,67,141, + 67,67,182,8,67,182,182,8,8,141,67,8,17,12,69,69, + 69,80,3,80,3,80,80,80,80,3,3,3,80,3,69,80, + 3,69,3,3,3,3,3,80,3,80,69,80,3,3,80,3, + 69,69,69,80,3,3,80,69,80,3,4,4,3,3,69,69, + 69,69,69,4,3,3,69,4,4,3,69,69,3,4,4,4, + 155,155,155,210,210,210,155,54,155,54,155,54,210,54,54,54, + 54,54,210,54,210,54,54,54,54,54,54,54,54,54,54,54, + 54,54,54,54,54,54,54,54,54,63,54,63,54,63,54,63, + 54,54,54,54,54,63,54,54,63,54,54,210,210,210,63,210, + 54,54,210,210,54,54,210,54,210,54,54,210,54,210,63,210, + 210,210,54,54,210,210,210,210,155,54,54,155,54,54,210,54, + 54,54,54,54,54,54,54,54,54,54,54,63,54,54,63,54, + 63,54,54,54,63,54,54,54,54,54,54,54,54,54,96,54, + 208,54,54,208,54,63,54,54,54,96,54,54,54,54,54,96, + 208,54,54,54,96,54,54,54,54,16,96,96,54,68,54,54, + 63,63,54,96,54,63,96,96,208,54,96,96,96,96,96,68, + 96,54,96,96,96,96,96,96,96,96,96,96,96,96,54,208, + 219,67,67,141,211,182,99,182,67,139,182,182,182,67,182,211, + 99,182,211,67,139,99,211,67,182,219,109,109,183,219,182,99, + 12,17,150,150,67,211,224,132,211,67,182,8,211,8,182,182, + 182,211,211,182,109,109,64,99,99,139,182,182,67,182,99,64, + 99,235,187,187,162,42,254,26,187,99,109,109,99,187,211,12, + 211,99,109,59,187,67,67,64,99,111,224,214,182,49,99,99, + 99,67,182,59,99,67,99,109,182,109,99,64,67,64,99,99, + 99,26,99,211,182,182,182,99,99,49,99,182,182,99,182,182, + 99,99,99,67,109,182,187,182,99,67,182,182,99,99,111,67, + 12,182,67,211,182,182,224,111,67,99,182,182,99,182,235,182, + 99,182,182,99,67,99,99,99,99,182,254,182,99,182,211,182, + 182,99,99,109,254,182,182,67,182,99,109,182,99,99,59,99, + 182,182,182,67,182,182,182,182,182,182,182,182,99,182,211,182, + 182,211,182,211,99,182,150,17,182,99,211,182,99,12,182,99, + 182,211,182,182,254,67,182,182,211,182,67,254,182,182,182,182, + 182,182,211,182,211,243,8,182,254,243,211,182,182,182,182,182, + 182,67,182,67,182,182,67,211,67,182,211,211,182,211,182,182, + 182,182,182,211,182,139,67,8,8,8,67,67,67,182,182,211, + 182,67,8,182,67,139,182,67,182,182,182,8,182,8,67,8, + 67,8,67,139,182,67,182,141,101,8,8,243,12,12,69,3, + 3,80,69,3,3,3,3,3,80,80,3,80,3,80,3,80, + 69,80,80,69,80,3,3,3,3,3,69,3,69,3,4,4, + 4,3,3,3,80,3,3,69,3,80,3,69,69,80,3,80, + 3,3,3,69,80,4,3,69,69,3,3,4,3,4,4,3, + 217,210,155,155,210,155,210,155,54,155,54,155,54,155,155,210, + 210,54,54,54,54,54,54,210,54,210,54,54,54,54,54,54, + 54,54,63,54,54,63,54,63,63,54,54,54,63,54,63,54, + 54,63,54,63,63,54,63,210,54,210,210,210,54,210,210,63, + 155,210,54,63,210,210,210,210,54,210,210,54,210,210,54,210, + 54,210,210,210,54,210,210,54,155,54,210,54,54,210,54,54, + 54,54,54,54,54,54,54,54,63,54,54,54,54,54,54,63, + 54,54,54,63,54,54,63,54,54,208,54,54,54,54,54,63, + 54,63,54,54,54,54,54,54,54,208,54,96,54,96,54,63, + 54,54,96,54,208,54,96,96,54,54,208,96,208,208,96,54, + 96,54,54,54,96,54,54,96,54,96,96,63,54,96,208,63, + 96,96,208,96,96,96,96,96,54,16,96,96,208,96,208,54, + 78,26,42,0,150,182,8,182,99,99,182,99,182,139,182,182, + 109,99,182,67,99,99,182,67,150,42,99,235,224,67,99,99, + 99,150,99,99,254,99,187,182,182,111,211,99,254,109,182,99, + 182,182,182,99,67,67,235,99,67,99,67,99,182,99,235,139, + 109,26,78,187,26,187,187,187,187,211,221,187,139,182,99,99, + 235,182,99,182,59,67,44,67,99,182,139,64,109,139,64,99, + 99,99,99,67,99,67,59,182,99,182,109,187,99,99,67,182, + 99,141,182,99,99,182,99,150,17,99,99,67,224,139,59,187, + 109,99,187,111,99,224,109,111,182,111,132,182,182,67,99,99, + 99,109,67,59,182,182,67,99,99,59,109,109,182,224,182,182, + 182,182,182,182,182,182,99,182,182,99,211,182,99,99,182,67, + 99,99,182,254,12,99,182,111,99,99,182,59,182,182,67,99, + 224,99,182,59,99,99,182,99,182,182,182,67,139,182,182,224, + 182,182,182,182,182,99,182,182,109,254,182,182,182,182,182,182, + 224,182,99,109,122,224,182,182,224,109,139,182,182,182,211,182, + 67,182,182,182,99,99,109,182,182,211,182,243,224,182,182,224, + 182,182,254,139,99,182,243,42,182,182,182,182,182,182,8,211, + 182,182,182,182,211,182,8,182,99,182,141,26,17,182,139,182, + 182,182,182,182,8,182,182,141,67,67,182,182,8,182,211,182, + 211,182,141,182,8,8,8,8,8,182,182,8,12,12,69,69, + 69,3,69,80,3,80,80,80,3,3,80,3,80,3,69,3, + 80,3,3,69,3,80,3,80,69,80,3,69,4,69,3,4, + 3,3,4,4,3,80,3,3,3,3,69,3,3,69,69,69, + 3,80,3,4,3,3,69,3,4,4,4,4,4,4,4,4, + 217,210,155,155,155,210,210,155,210,210,54,155,54,54,54,54, + 210,210,54,210,54,210,54,210,54,54,210,210,54,54,54,54, + 210,54,63,54,54,210,54,54,63,63,54,54,54,54,63,63, + 54,63,54,54,63,63,63,210,210,210,54,210,210,210,210,63, + 210,210,210,54,210,54,210,210,63,63,210,54,210,210,210,210, + 210,54,210,210,54,210,210,54,210,54,210,54,54,54,210,54, + 210,210,54,210,54,54,54,54,54,210,54,210,54,54,54,54, + 63,63,54,54,63,54,54,54,54,63,54,54,54,63,54,54, + 54,63,54,54,54,54,96,54,54,54,54,54,54,54,54,68, + 54,208,54,54,63,54,54,54,54,54,54,54,54,63,96,54, + 54,54,54,54,54,54,54,54,96,54,96,54,96,54,96,54, + 96,54,208,96,208,96,96,96,96,96,96,96,96,96,210,210, + 215,99,211,109,211,254,211,99,235,67,67,139,67,99,67,182, + 211,182,99,235,235,67,67,99,99,12,182,67,211,99,235,64, + 67,49,64,139,211,235,109,182,12,42,12,67,99,99,49,99, + 99,99,99,99,99,64,235,224,111,99,67,99,99,214,109,78, + 187,187,187,187,132,187,12,141,12,187,182,224,99,109,139,182, + 182,219,187,26,187,187,187,26,187,219,26,211,26,78,211,235, + 59,67,64,67,99,99,235,99,214,64,26,42,211,64,139,99, + 64,99,99,99,235,187,26,17,26,182,109,67,219,187,182,42, + 26,150,132,219,182,187,17,187,132,187,49,235,99,219,99,211, + 99,99,99,49,99,109,182,109,64,211,67,99,99,67,99,235, + 64,182,182,182,109,182,99,235,99,99,150,182,67,99,99,64, + 67,64,67,211,109,214,99,99,64,99,99,99,67,64,67,109, + 187,99,49,99,99,99,67,99,99,99,182,99,99,99,99,99, + 99,99,99,182,99,67,187,150,99,67,67,99,99,150,182,12, + 99,235,109,211,26,42,139,99,99,99,49,224,99,49,67,99, + 99,182,67,67,67,67,187,67,67,182,182,67,67,99,49,99, + 67,67,99,211,139,99,17,42,99,67,99,67,211,99,49,99, + 49,182,67,182,67,99,67,67,182,67,99,42,187,67,182,139, + 67,67,67,67,67,49,67,67,49,67,67,67,67,49,67,67, + 182,67,67,67,67,67,67,67,67,8,49,17,182,243,16,121, + 3,69,3,69,80,3,3,3,80,3,3,80,3,80,80,3, + 69,80,3,80,3,3,69,3,3,3,80,3,3,4,4,69, + 3,69,3,69,3,4,4,69,69,80,3,80,3,3,3,69, + 3,69,3,69,3,4,4,3,4,4,69,4,4,4,4,3, + 155,217,155,210,210,210,210,210,54,210,210,210,155,54,210,54, + 54,54,210,54,54,54,54,54,54,210,54,54,54,210,210,63, + 54,63,54,210,63,54,54,54,54,54,54,63,63,63,54,54, + 63,54,54,210,54,54,210,210,54,210,155,210,210,210,210,210, + 210,210,210,210,210,210,63,210,54,210,210,210,54,210,210,54, + 210,155,54,210,210,210,155,210,54,210,54,210,54,210,54,210, + 54,54,210,54,210,210,54,210,63,54,63,54,210,63,63,63, + 54,54,54,54,54,54,63,63,54,54,54,208,54,54,54,54, + 54,54,63,54,54,54,54,63,54,54,63,54,208,54,54,63, + 208,54,96,54,96,63,96,96,54,54,96,54,96,96,63,54, + 210,245,63,54,63,245,63,54,63,96,54,96,63,96,96,96, + 54,96,96,54,68,96,96,96,96,96,96,68,96,96,63,191, + 219,109,49,182,182,243,219,139,64,67,111,109,182,109,67,99, + 235,211,211,187,182,132,182,109,182,183,187,67,182,211,139,99, + 187,224,235,59,150,211,99,109,150,132,187,67,99,145,64,109, + 67,67,235,99,109,91,139,182,187,99,67,211,64,224,111,12, + 243,8,109,12,12,243,150,12,243,17,254,99,64,111,243,182, + 166,26,12,109,12,150,132,150,187,211,150,187,109,187,109,139, + 182,187,67,64,182,224,8,99,67,64,12,187,109,111,219,211, + 49,64,235,182,67,111,187,150,166,111,111,182,26,150,187,8, + 12,187,12,12,166,12,8,12,150,187,254,182,254,219,12,187, + 26,67,67,99,64,182,111,17,99,219,99,99,182,150,64,67, + 49,99,99,17,8,99,182,99,182,99,182,99,109,187,182,187, + 12,99,182,109,12,99,49,99,49,99,99,182,182,99,59,99, + 78,109,99,211,64,99,67,99,235,224,109,139,99,235,99,67, + 67,99,67,99,99,187,26,187,99,99,99,235,64,26,182,150, + 99,99,166,17,132,187,150,49,49,235,99,26,109,109,235,99, + 111,162,67,182,67,99,182,99,49,182,182,182,49,182,187,12, + 99,99,49,150,17,67,12,12,235,49,139,211,17,243,182,182, + 182,8,99,141,67,182,67,141,8,211,67,139,182,67,211,182, + 99,67,67,182,182,99,67,141,67,219,49,99,67,67,182,67, + 182,67,67,182,243,132,12,67,67,182,8,141,8,8,69,80, + 69,80,69,80,3,80,3,80,3,80,3,3,80,3,3,80, + 69,69,3,69,80,3,3,80,3,69,3,4,4,69,4,3, + 69,4,4,4,69,69,80,3,4,3,4,4,3,3,80,3, + 69,4,4,4,69,4,4,4,69,3,3,69,69,4,3,69, + 155,210,217,210,155,210,210,210,210,54,210,54,210,210,54,210, + 54,54,54,210,54,210,54,54,54,54,210,54,54,54,54,63, + 54,210,54,54,63,63,210,54,63,63,54,54,54,210,63,54, + 63,63,54,210,210,54,210,210,210,210,210,210,210,210,210,155, + 210,210,210,210,210,210,210,210,210,210,54,155,210,210,210,210, + 210,210,54,155,210,54,210,155,210,54,54,54,54,54,54,54, + 54,54,54,54,54,210,54,54,210,54,63,54,54,54,54,63, + 54,63,63,54,63,54,54,63,54,63,54,63,54,63,54,54, + 54,54,63,63,63,54,54,54,54,54,54,54,63,96,54,54, + 96,63,54,54,96,63,54,54,54,63,54,63,54,54,245,54, + 63,54,63,245,63,54,54,54,63,245,54,54,96,210,54,54, + 245,54,96,63,96,54,96,208,96,63,96,208,63,54,211,7, + 235,49,235,7,49,7,49,7,49,49,49,67,139,67,49,67, + 67,67,211,139,49,49,49,101,49,101,8,101,49,49,49,235, + 7,67,7,49,49,49,49,7,8,67,7,49,7,7,49,49, + 49,49,49,7,49,67,67,8,7,49,139,49,7,67,67,49, + 67,49,67,49,139,8,7,49,49,49,7,49,7,49,235,7, + 7,235,7,49,49,49,49,49,49,49,67,49,49,49,7,49, + 235,49,67,7,67,67,67,49,67,101,49,139,67,139,67,67, + 8,49,67,49,49,49,49,67,67,49,49,49,101,49,67,182, + 235,49,49,7,49,49,235,7,235,7,235,7,7,235,7,7, + 67,49,49,7,49,7,49,7,7,7,49,7,49,7,49,49, + 7,7,67,49,235,7,7,49,7,7,49,7,49,49,67,7, + 67,67,67,67,49,7,49,49,49,101,7,49,49,7,49,49, + 67,7,182,49,49,49,49,67,101,7,67,101,101,7,139,67, + 67,7,67,139,101,7,12,101,7,139,101,8,7,67,7,139, + 49,8,7,8,101,8,49,67,101,101,7,7,67,67,7,7, + 7,49,49,101,49,49,49,67,7,67,7,7,49,7,7,7, + 7,67,8,101,101,67,8,101,8,8,8,8,8,101,8,8, + 8,7,8,8,101,8,101,8,7,8,8,67,8,7,8,7, + 7,101,7,7,7,8,7,7,67,8,8,8,8,141,8,8, + 8,8,8,7,7,7,7,7,7,7,7,7,7,7,7,8, + 121,3,69,3,69,3,80,3,3,80,69,80,3,80,3,69, + 3,69,3,3,69,3,3,3,80,3,69,3,80,3,4,4, + 3,69,4,4,3,69,3,4,4,69,69,3,69,3,80,3, + 80,3,80,3,69,69,4,4,69,3,3,3,4,69,4,4, + 217,217,210,217,210,210,210,155,210,210,210,210,210,54,210,54, + 210,210,210,54,210,54,210,210,54,210,54,54,210,54,210,54, + 63,54,54,210,54,54,54,63,54,54,54,63,210,54,54,210, + 63,54,210,54,63,210,63,210,210,210,155,155,155,155,155,210, + 155,210,210,210,210,210,210,210,210,210,155,210,210,210,210,210, + 155,210,155,210,210,155,210,54,210,210,210,210,54,210,210,54, + 210,210,54,210,54,54,54,210,54,54,54,54,210,63,63,54, + 63,54,54,63,54,54,63,54,63,54,54,54,63,54,63,54, + 63,54,54,54,54,63,54,63,63,63,54,63,54,63,63,54, + 63,54,54,63,54,96,54,96,63,54,245,54,54,54,54,54, + 96,54,54,54,54,54,63,54,54,96,63,54,63,245,54,54, + 54,96,54,96,54,96,63,96,96,96,63,96,54,155,243,8, + 67,49,67,49,49,67,49,67,67,49,7,8,12,67,67,8, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,150,150,243,12,17,243,12,26,12,150,150,12,12,12,12, + 12,12,12,17,12,12,26,12,17,12,12,26,12,12,12,12, + 17,17,150,243,12,26,12,150,12,17,150,150,8,12,8,12, + 12,26,12,12,12,26,26,12,26,17,8,17,150,150,12,26, + 12,17,26,26,26,12,26,26,26,26,26,12,17,219,17,26, + 26,26,26,219,219,17,26,26,26,17,150,26,219,12,26,12, + 12,243,150,12,8,150,12,150,12,150,12,243,150,17,219,219, + 26,17,26,219,132,219,17,26,219,26,219,219,219,17,219,132, + 219,132,12,12,17,132,17,219,26,166,219,42,17,219,219,26, + 219,17,26,17,26,42,26,26,26,42,26,17,26,26,17,17, + 219,219,12,17,12,12,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,26,26,26,26,26,12,26,17,26,26,26,12, + 26,26,26,26,12,26,150,8,26,17,219,12,12,12,12,12, + 12,12,12,12,12,12,12,12,26,150,17,150,12,12,12,12, + 12,12,12,12,26,12,12,12,243,26,8,150,12,12,12,12, + 26,8,12,12,8,8,12,12,12,12,26,8,150,12,243,12, + 12,12,17,12,12,150,12,12,26,26,12,26,12,12,12,12, + 12,26,26,26,12,12,12,12,26,8,12,26,12,26,42,7, + 121,69,80,69,80,69,80,69,3,69,80,3,69,3,80,69, + 80,69,69,80,69,3,80,69,3,69,3,4,4,3,4,4, + 4,4,3,3,4,3,4,3,3,3,3,3,80,3,3,3, + 3,3,69,4,80,4,3,3,4,4,4,4,4,4,3,69, + 155,155,155,217,210,155,210,155,210,210,210,210,210,54,210,54, + 54,54,54,54,54,210,54,210,54,210,54,54,54,54,210,54, + 210,210,54,63,210,54,54,63,63,63,54,54,210,210,63,54, + 210,54,210,210,210,210,210,210,210,210,155,155,155,155,155,155, + 155,155,210,210,210,155,210,155,155,210,210,210,210,155,155,210, + 210,210,155,155,210,155,155,210,210,210,54,210,210,54,210,54, + 54,54,54,210,54,210,54,63,210,210,210,54,54,54,63,54, + 63,54,54,63,63,54,63,54,63,63,54,54,63,54,63,54, + 63,54,54,54,54,63,54,54,54,63,54,54,54,54,54,54, + 63,245,54,63,63,54,63,54,54,54,54,54,54,63,96,210, + 63,63,210,63,63,245,63,245,63,54,245,54,96,54,63,96, + 63,96,54,96,54,96,96,208,96,96,96,96,63,210,192,122, + 26,26,219,12,8,0,12,0,0,0,0,0,0,0,0,0, + 0,0,122,122,122,42,26,42,122,0,0,0,0,0,0,0, + 0,0,0,0,0,122,122,219,42,0,0,0,0,0,122,122, + 122,0,0,0,0,0,122,122,26,42,0,122,0,0,0,0, + 0,0,0,0,0,0,0,122,122,42,42,0,0,122,0,0, + 122,122,122,0,0,122,122,122,122,122,26,42,0,0,0,122, + 122,0,0,122,122,0,122,122,122,122,42,26,42,0,0,0, + 0,0,0,122,0,0,0,0,122,0,122,122,26,42,0,122, + 0,0,0,0,0,0,0,0,0,0,0,0,122,26,122,0, + 122,0,0,0,0,0,0,0,0,0,0,0,122,122,42,42, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,122,26, + 42,0,0,0,0,0,0,0,0,0,0,0,0,0,0,122, + 42,42,0,0,0,0,122,0,0,0,122,0,0,0,0,0, + 122,26,42,0,0,0,0,0,122,122,122,0,0,0,0,122, + 42,42,219,26,122,122,122,0,0,122,0,0,0,0,0,0, + 0,42,122,26,42,0,122,0,0,0,0,0,0,0,0,0, + 122,122,122,42,26,26,122,122,0,122,0,122,122,122,122,122, + 122,122,122,42,122,26,26,122,122,122,122,122,122,122,0,0, + 122,0,0,0,0,122,26,42,122,42,122,122,122,122,122,122, + 122,122,122,122,0,0,122,219,26,26,12,12,12,26,26,3, + 121,3,69,3,69,3,69,80,69,3,69,80,3,69,69,3, + 69,80,3,69,80,69,3,3,80,3,3,4,4,4,4,4, + 4,69,4,69,4,69,69,69,3,80,4,3,80,3,80,4, + 69,3,3,4,3,69,4,3,4,4,3,69,3,4,3,69, + 217,217,217,210,217,217,217,210,210,210,210,210,210,210,54,210, + 210,210,210,210,210,54,210,54,210,54,210,210,210,54,54,54, + 63,54,210,54,54,210,210,54,210,54,63,63,63,54,54,210, + 63,210,54,210,54,210,210,210,210,155,210,155,155,210,210,210, + 210,155,155,155,155,155,155,210,155,155,155,155,155,155,155,155, + 155,155,155,155,155,155,155,210,210,210,210,54,210,54,210,54, + 210,210,210,54,210,54,210,54,63,54,54,54,210,210,54,63, + 54,63,63,54,54,210,54,63,54,54,63,63,54,63,54,63, + 54,63,63,63,63,54,54,63,54,54,54,63,63,54,63,210, + 54,63,245,54,54,210,245,54,63,63,245,63,63,54,63,54, + 245,54,54,54,54,63,54,63,54,54,96,63,54,63,96,54, + 245,63,96,63,63,96,63,96,96,96,63,96,96,210,68,12, + 8,8,101,8,12,17,8,0,219,122,56,122,42,42,42,122, + 42,42,122,42,243,219,219,17,0,26,78,183,42,42,42,122, + 42,42,122,42,42,12,26,26,17,122,42,42,122,42,122,42, + 122,42,42,122,42,42,12,26,26,17,0,42,42,42,42,42, + 42,42,42,122,42,122,42,150,26,26,17,122,26,122,42,122, + 42,42,42,122,42,42,42,42,12,26,26,17,0,219,42,42, + 122,42,42,122,42,42,122,122,42,12,219,26,17,0,219,42, + 122,42,42,42,122,42,42,122,42,42,12,26,219,17,0,42, + 122,42,122,42,42,122,42,42,122,122,42,12,26,26,17,0, + 42,42,42,122,122,42,42,122,122,42,122,42,12,219,26,17, + 0,219,42,42,122,122,42,122,42,122,122,122,42,12,219,26, + 17,0,219,42,122,122,122,42,42,42,122,42,122,42,243,26, + 26,17,0,219,42,42,122,42,42,42,122,42,42,122,42,243, + 26,26,17,0,219,42,42,122,42,42,42,42,42,42,42,122, + 243,26,26,26,122,26,122,42,42,122,42,42,42,122,42,122, + 42,243,26,26,17,122,42,42,42,122,42,42,122,42,122,42, + 122,42,12,219,26,26,122,42,42,42,122,42,122,42,42,122, + 42,122,42,12,26,26,17,0,26,42,42,122,42,122,42,42, + 42,122,42,42,12,26,26,17,0,42,42,122,42,42,42,122, + 42,42,122,122,26,12,219,26,12,12,8,8,7,7,12,69, + 69,69,69,80,69,80,69,3,69,3,69,69,80,3,69,80, + 69,69,3,69,3,3,69,3,3,80,69,4,4,4,69,4, + 3,4,4,4,3,3,80,4,4,3,80,3,3,3,3,3, + 4,3,69,69,80,3,69,4,4,69,4,3,4,69,4,3, + 155,155,217,217,210,210,210,155,210,210,210,210,54,210,210,54, + 54,54,54,54,210,54,210,54,54,54,54,54,210,210,210,54, + 210,54,210,63,54,54,210,54,210,54,54,54,210,210,54,210, + 54,155,210,210,210,210,210,210,210,155,210,210,155,217,217,155, + 210,155,155,210,210,155,155,210,217,155,155,155,217,155,155,155, + 155,155,155,217,210,155,155,210,210,210,210,210,210,54,210,210, + 54,54,54,54,54,54,210,54,210,210,210,54,54,210,54,210, + 54,63,210,210,54,210,54,210,63,54,54,63,54,63,54,63, + 54,54,54,54,63,210,54,63,63,63,245,54,210,54,54,54, + 54,63,54,54,54,54,63,54,54,63,54,54,245,54,63,63, + 210,54,186,210,54,54,54,63,63,63,54,63,245,54,63,54, + 54,63,96,96,63,96,54,63,96,96,245,63,96,63,63,12, + 7,7,7,7,12,67,8,26,101,139,139,139,8,211,211,211, + 8,8,139,139,67,26,26,8,42,101,139,139,8,211,139,8, + 8,8,139,139,139,67,17,26,12,42,49,139,139,8,139,8, + 8,211,8,139,67,139,49,17,17,243,42,101,139,139,8,211, + 8,211,211,211,139,139,139,67,17,26,12,26,101,139,139,139, + 8,8,211,211,8,8,139,139,49,17,26,243,42,49,139,139, + 8,139,8,211,8,8,8,139,139,49,17,26,8,42,101,139, + 139,8,211,8,211,8,8,8,139,139,49,17,17,12,26,101, + 139,139,139,8,139,8,8,8,8,139,139,49,17,26,243,42, + 49,139,139,8,139,211,211,139,8,8,139,139,101,17,26,243, + 42,49,139,139,139,211,139,8,211,8,8,139,139,101,17,26, + 243,42,49,139,139,8,8,211,211,8,8,8,139,139,67,17, + 26,8,42,101,67,139,8,139,8,8,211,8,8,139,139,67, + 17,17,12,42,49,139,139,8,139,8,211,8,8,8,139,139, + 67,17,12,12,26,101,139,139,8,139,8,211,8,211,8,67, + 211,67,17,26,12,42,49,139,139,139,8,211,211,8,8,8, + 139,139,67,17,12,12,26,101,139,139,8,8,139,8,8,8, + 8,139,139,49,17,26,8,42,101,139,139,8,8,211,211,8, + 8,8,139,139,49,17,17,12,26,101,139,139,8,139,8,8, + 211,8,8,139,139,101,12,26,8,12,7,8,7,8,8,3, + 69,3,69,69,3,69,80,69,80,3,80,3,69,80,3,69, + 3,3,69,80,80,3,80,3,3,3,3,69,3,3,4,4, + 4,3,4,4,4,3,4,69,3,4,3,4,80,69,69,80, + 69,3,3,3,3,4,3,4,3,69,69,69,3,69,4,4, + 217,217,155,210,217,217,217,210,210,63,210,210,155,54,210,210, + 210,54,210,210,54,210,210,210,210,210,210,210,54,63,54,210, + 63,63,54,210,63,210,54,210,210,210,210,210,63,210,210,210, + 210,210,210,210,210,210,210,155,217,210,155,217,217,210,155,217, + 217,217,155,155,155,210,217,217,210,217,217,217,155,217,217,217, + 217,217,217,155,217,217,155,155,155,210,210,210,210,210,210,210, + 54,210,210,210,54,210,63,210,54,54,54,63,210,63,210,54, + 210,210,54,63,63,54,210,63,54,210,210,54,210,54,210,210, + 63,63,63,210,210,54,210,245,54,54,54,210,245,210,54,63, + 63,54,63,63,63,63,54,54,54,54,210,54,63,63,54,54, + 63,63,54,63,186,63,210,245,54,245,63,54,54,63,54,245, + 63,245,63,63,63,186,63,96,63,54,63,96,63,210,54,12, + 8,67,67,7,12,8,8,42,49,8,8,8,211,8,8,8, + 211,8,139,8,101,150,150,243,42,49,8,8,211,8,8,8, + 139,8,8,8,211,67,150,12,109,42,101,8,211,139,8,8, + 211,8,8,8,8,8,139,150,17,243,42,49,8,211,211,8, + 211,8,8,8,8,211,8,101,150,17,211,42,49,211,8,8, + 8,211,8,8,211,8,8,139,101,150,17,243,42,139,8,8, + 211,8,8,8,211,211,8,211,8,101,150,17,243,42,49,8, + 139,8,8,211,8,211,211,8,211,139,139,12,12,243,42,49, + 8,8,211,8,8,8,211,211,8,139,8,101,150,17,243,42, + 101,8,8,211,8,8,8,8,211,8,139,8,67,150,17,243, + 42,139,8,8,8,8,8,211,8,211,8,139,8,67,150,17, + 243,42,101,8,8,211,211,8,8,211,211,8,139,8,101,150, + 17,243,42,101,8,8,211,8,8,211,8,211,8,139,8,139, + 150,17,109,42,101,8,8,211,8,8,8,211,211,8,139,8, + 139,150,17,211,42,49,211,8,139,8,8,8,139,8,8,8, + 139,101,150,12,109,42,101,8,8,8,8,8,8,211,211,8, + 139,8,101,150,17,211,42,49,8,8,211,211,8,8,211,211, + 8,139,8,101,150,17,243,42,49,8,8,211,211,8,8,211, + 211,8,211,8,139,150,12,109,42,49,8,8,8,8,8,211, + 8,211,8,139,8,67,12,12,8,26,7,8,8,8,12,69, + 121,80,69,69,80,69,3,80,3,69,3,3,69,3,80,69, + 80,69,3,3,3,69,69,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,3,69,4,69,3,3,3,69, + 4,4,80,69,4,4,69,69,4,4,4,3,4,4,3,69, + 155,217,36,155,210,210,210,155,155,210,210,210,210,210,210,54, + 210,210,54,210,54,54,210,54,54,63,54,210,54,210,63,54, + 210,210,63,54,63,210,63,54,54,210,54,210,54,210,210,210, + 210,210,155,210,155,217,217,210,217,217,155,210,217,155,155,155, + 210,217,217,217,217,210,155,217,155,217,217,217,217,217,217,217, + 217,217,217,217,217,217,155,155,155,155,210,210,210,210,210,210, + 210,54,210,210,54,54,54,210,63,63,210,54,63,54,210,54, + 54,63,54,54,210,63,54,210,54,54,210,54,210,54,54,54, + 210,54,54,54,210,54,63,210,210,210,54,63,54,210,54,245, + 210,54,54,245,54,63,186,210,54,54,63,54,54,245,210,54, + 210,210,54,54,210,54,63,210,63,54,210,63,245,63,63,54, + 63,54,54,96,54,96,63,96,63,96,96,96,54,63,63,12, + 7,67,8,7,132,8,8,42,67,8,211,8,211,8,211,8, + 211,12,211,8,101,12,17,243,122,101,211,8,139,187,211,187, + 211,8,211,8,8,139,150,132,243,122,49,8,8,8,211,211, + 8,211,109,8,187,8,101,150,17,243,122,139,8,8,139,8, + 187,139,8,8,8,211,8,101,150,132,243,122,101,8,211,211, + 8,211,8,211,8,109,8,8,8,243,17,243,122,101,211,8, + 211,8,211,211,8,211,8,8,8,139,150,17,243,122,101,8, + 211,8,211,8,211,8,211,8,8,8,67,150,132,243,122,101, + 211,8,8,109,211,211,8,211,187,211,8,101,150,17,141,122, + 101,211,8,211,8,211,8,211,8,8,187,8,101,150,17,243, + 122,49,8,211,8,211,8,211,8,211,8,8,8,139,150,17, + 243,122,101,139,8,211,8,211,8,211,8,187,211,8,101,150, + 17,243,122,101,211,8,211,8,211,8,211,8,187,211,8,67, + 12,150,243,122,101,211,8,211,8,109,8,211,8,187,211,8, + 101,150,132,243,122,101,8,8,211,8,109,187,8,211,211,187, + 8,101,150,150,141,122,101,211,8,211,211,8,211,8,211,8, + 187,8,101,150,132,243,122,101,211,8,211,8,211,211,8,211, + 187,211,8,101,150,17,243,122,101,211,8,211,8,211,8,211, + 8,8,211,8,139,150,150,243,122,101,211,211,211,211,8,211, + 8,211,8,8,8,67,150,12,8,12,8,7,8,7,8,3, + 121,3,69,69,69,80,69,69,80,69,80,80,3,3,69,3, + 69,3,80,69,3,80,3,3,4,4,3,69,4,205,4,3, + 4,3,3,3,4,3,3,4,3,4,4,69,3,4,4,3, + 69,3,3,4,3,4,3,4,3,4,4,4,4,69,3,4, + 217,217,217,217,217,210,210,210,155,210,210,210,155,54,210,210, + 210,54,210,210,210,210,210,210,210,210,210,63,210,54,210,54, + 210,54,210,210,210,54,210,210,210,63,210,210,210,210,210,155, + 210,210,210,210,210,210,210,217,155,210,217,217,155,217,217,217, + 217,210,210,210,155,217,210,155,217,155,155,217,155,217,217,217, + 217,25,217,25,25,217,217,217,217,155,155,155,155,155,210,210, + 210,210,210,63,210,210,210,63,210,54,54,210,54,210,63,63, + 63,63,210,210,54,210,210,63,210,210,54,210,54,210,210,210, + 210,54,210,210,210,210,54,210,54,54,210,54,210,54,210,210, + 54,210,54,210,210,54,63,96,210,186,54,210,210,63,54,186, + 54,63,210,63,54,63,63,54,210,63,54,54,63,54,54,63, + 54,245,63,63,63,63,96,63,245,63,63,96,63,210,54,12, + 8,67,67,101,12,12,8,122,139,211,211,211,8,211,187,109, + 8,211,8,8,67,150,219,182,42,101,211,211,8,139,8,211, + 211,187,109,109,8,139,150,26,182,42,139,211,211,8,109,211, + 187,109,8,211,211,211,139,12,17,182,122,49,211,8,211,8, + 211,187,211,187,211,187,8,67,150,26,182,42,101,211,211,211, + 211,187,211,187,109,8,109,211,67,150,17,182,42,101,211,211, + 211,211,187,109,8,109,109,211,8,67,150,219,182,42,101,211, + 211,211,211,8,211,187,109,8,187,211,8,12,26,182,42,101, + 211,211,211,8,211,187,211,8,211,211,8,139,150,17,139,42, + 101,211,8,211,211,211,187,109,8,211,211,211,139,150,17,211, + 78,139,8,211,211,211,187,109,8,109,211,187,211,67,150,17, + 182,42,101,211,8,211,211,8,109,211,8,211,211,8,67,150, + 17,211,42,101,211,211,211,211,187,109,211,8,211,8,211,8, + 150,26,211,42,101,211,211,211,211,211,187,211,8,211,211,8, + 139,150,26,182,42,101,211,211,211,211,8,211,211,8,187,139, + 8,67,150,26,211,42,101,211,211,211,211,187,211,8,187,211, + 139,8,139,12,26,182,42,101,211,211,211,8,211,187,211,8, + 211,211,8,139,150,219,182,42,101,211,211,211,8,211,187,109, + 211,187,109,8,67,12,26,182,42,101,8,211,211,8,109,109, + 8,211,109,109,8,139,150,12,8,12,8,7,8,8,12,121, + 69,69,3,69,69,69,3,69,69,69,69,3,69,80,69,3, + 80,69,3,80,3,3,69,4,4,4,4,4,4,69,4,3, + 4,4,4,4,4,4,4,69,3,69,80,3,69,4,3,69, + 3,69,4,3,69,4,4,69,4,3,69,69,3,4,4,4, + 155,155,217,155,217,217,155,210,155,210,210,210,210,210,210,210, + 210,63,63,210,63,63,63,63,63,54,210,63,210,63,210,63, + 210,63,54,63,210,63,54,210,210,63,63,210,210,210,210,210, + 155,155,217,217,217,217,155,217,217,155,217,217,217,210,210,155, + 217,217,217,217,210,217,217,210,217,217,217,217,217,217,217,25, + 155,155,155,155,217,25,155,155,217,217,217,155,210,155,210,210, + 210,63,210,210,63,63,210,210,210,210,63,210,63,54,54,210, + 54,210,54,210,63,54,210,54,63,210,54,210,54,210,210,54, + 210,210,54,54,210,210,210,210,210,210,210,54,210,54,54,210, + 210,63,54,54,63,54,210,54,63,54,54,96,54,210,63,210, + 210,54,186,210,63,245,210,63,245,210,63,54,63,63,245,63, + 63,54,54,63,245,63,96,63,96,63,186,54,96,63,63,12, + 8,7,8,7,17,12,8,42,101,139,211,8,211,211,211,8, + 109,109,211,8,139,12,26,8,122,101,139,211,8,211,211,187, + 139,8,211,211,8,139,150,26,8,122,101,139,211,211,211,211, + 8,211,8,211,211,211,67,12,26,8,122,101,139,211,211,139, + 211,8,211,8,139,139,8,139,150,26,8,122,101,139,211,8, + 211,211,8,211,8,211,211,211,139,12,26,8,122,101,139,211, + 8,211,211,8,211,211,187,139,8,139,12,26,8,122,101,139, + 211,8,91,211,8,211,8,211,139,139,67,150,26,8,122,101, + 139,211,8,211,211,211,8,187,8,139,8,139,12,26,8,122, + 101,139,211,211,91,8,211,8,109,8,139,8,139,12,17,8, + 122,101,139,211,211,8,211,8,91,8,211,139,8,139,150,26, + 8,122,101,139,211,211,91,211,187,211,187,8,139,8,139,12, + 17,243,122,101,139,211,91,8,211,8,109,187,211,211,139,67, + 150,17,8,122,101,139,211,91,8,211,211,187,211,8,211,211, + 139,150,26,8,122,101,139,211,8,211,211,187,211,211,8,139, + 187,101,150,17,8,122,101,139,211,91,139,211,8,211,211,211, + 211,211,67,150,26,8,122,101,139,211,91,211,211,8,211,187, + 8,139,8,139,12,26,8,122,101,139,211,91,211,211,8,211, + 211,8,139,8,67,150,26,8,122,101,139,211,91,211,211,91, + 8,109,8,211,8,139,12,17,8,12,8,7,8,8,8,3, + 121,69,69,69,80,69,69,69,3,69,80,69,3,69,3,69, + 80,3,3,80,3,80,3,4,4,205,205,4,4,69,69,69, + 4,205,4,4,69,4,4,4,3,3,69,3,69,69,3,4, + 4,4,69,4,4,4,4,69,69,3,3,4,3,4,4,3, + 217,217,217,217,155,155,155,155,210,155,210,210,210,210,210,63, + 210,54,210,63,210,54,210,210,63,210,210,54,210,210,210,54, + 63,210,210,210,54,210,210,63,63,210,210,210,210,210,210,155, + 210,217,155,217,217,217,217,217,217,217,155,217,155,217,217,217, + 217,155,217,155,217,217,210,217,217,217,217,217,25,217,217,217, + 217,25,217,25,217,217,217,217,217,155,155,217,217,155,217,210, + 210,210,210,63,210,210,63,63,210,210,210,54,210,210,210,210, + 210,63,210,54,63,210,63,210,54,63,210,210,210,54,210,210, + 54,210,210,210,54,210,210,54,210,54,210,210,210,210,210,54, + 54,210,63,210,245,63,54,63,63,63,210,210,63,54,63,54, + 210,210,210,63,210,210,54,210,63,63,54,186,54,210,63,54, + 54,186,54,54,63,63,63,245,63,96,208,63,210,210,63,12, + 8,8,67,8,12,26,8,122,101,211,211,211,211,8,211,187, + 109,8,211,211,67,150,17,211,42,101,211,211,211,8,211,139, + 187,109,8,211,8,67,150,17,211,42,101,211,211,91,211,211, + 187,211,187,109,8,8,139,150,17,211,78,101,211,211,211,187, + 211,109,109,8,187,211,8,67,150,17,211,42,101,211,211,91, + 211,211,211,187,211,187,211,8,139,150,17,211,42,101,211,211, + 91,211,8,91,109,8,211,8,211,67,150,17,211,42,101,211, + 211,211,8,211,109,8,211,187,109,8,139,150,17,211,42,101, + 139,91,211,211,211,187,211,139,187,211,211,67,150,17,211,42, + 101,211,211,211,211,211,187,109,211,187,211,8,67,150,26,211, + 42,101,211,211,211,211,211,8,211,211,187,211,8,139,132,17, + 211,42,101,211,211,8,8,211,211,8,139,187,109,211,67,150, + 26,8,42,101,211,211,211,211,211,109,8,139,187,211,8,139, + 150,26,8,42,101,211,211,8,211,211,8,211,8,187,211,8, + 67,150,17,211,42,101,211,211,91,8,211,211,8,109,8,211, + 8,67,150,26,8,42,101,211,211,211,8,211,187,109,8,187, + 211,8,139,150,17,211,42,101,211,211,8,211,211,109,8,211, + 109,8,211,67,150,17,211,42,101,211,211,8,211,211,8,211, + 187,8,109,8,139,150,17,211,42,101,211,211,8,211,8,211, + 187,211,109,211,8,67,243,26,8,12,8,7,8,7,12,69, + 69,69,69,69,69,3,69,69,69,69,69,69,80,69,3,80, + 69,3,69,69,4,3,4,4,69,3,3,4,4,4,4,4, + 4,3,205,4,4,4,3,69,3,69,3,69,4,4,4,4, + 3,69,4,3,4,69,3,4,4,4,4,4,4,4,4,4, + 217,217,217,217,217,217,155,155,210,217,210,210,210,63,210,210, + 210,210,210,54,210,210,54,210,54,210,210,210,210,54,210,210, + 210,54,210,210,210,210,210,210,210,210,210,210,217,217,217,217, + 210,217,155,217,217,217,155,155,217,217,155,217,217,217,217,155, + 217,155,217,217,155,217,217,217,217,155,25,155,25,155,25,217, + 25,217,25,25,25,217,217,155,217,217,217,155,217,155,155,155, + 155,210,210,210,210,210,210,63,63,210,210,210,54,210,54,63, + 210,210,210,210,210,210,210,210,210,54,210,54,210,210,210,210, + 210,210,210,63,210,63,210,210,210,210,54,210,54,210,210,210, + 210,54,63,210,54,210,245,210,54,63,245,210,63,245,210,63, + 63,63,210,54,63,63,63,245,210,63,63,210,54,54,186,210, + 63,210,63,245,63,96,63,54,63,245,54,96,63,210,210,12, + 8,101,8,8,12,12,8,42,139,211,211,91,8,211,211,211, + 8,109,211,91,67,12,17,243,122,101,139,109,211,91,8,211, + 8,211,187,211,211,139,150,219,243,122,139,211,211,8,211,211, + 211,8,211,8,211,8,67,12,17,243,122,101,211,211,211,211, + 211,8,109,8,211,211,91,67,12,17,243,122,101,139,211,8, + 211,211,8,211,8,211,211,8,67,12,17,243,122,101,139,211, + 8,211,8,211,187,211,187,211,8,139,12,219,243,122,101,211, + 211,211,211,211,91,8,211,211,8,211,67,12,17,243,122,101, + 211,8,211,211,211,8,8,211,8,211,8,67,17,17,243,122, + 101,211,211,8,211,211,211,8,211,8,211,8,67,132,17,243, + 122,101,211,211,91,211,91,243,8,211,8,211,8,139,12,17, + 243,122,101,211,211,211,211,211,187,8,211,211,8,8,139,150, + 12,243,122,101,139,8,211,8,211,91,8,211,8,211,8,139, + 150,150,243,122,101,139,211,8,211,91,8,211,211,8,211,8, + 139,12,17,243,122,101,139,211,8,211,211,187,211,187,211,211, + 8,139,150,150,243,122,101,139,8,8,211,211,211,8,211,8, + 211,8,67,12,17,243,122,101,139,8,211,211,91,8,109,8, + 109,211,91,67,150,17,243,122,101,139,211,8,211,91,8,211, + 211,8,109,211,139,150,17,243,122,101,139,211,211,8,8,211, + 8,211,91,8,211,67,150,12,8,12,8,8,8,8,8,3, + 121,69,69,80,69,69,69,69,69,69,69,3,69,80,69,3, + 80,3,80,3,80,3,4,4,4,4,69,4,4,69,4,69, + 69,4,4,205,4,4,4,69,80,3,4,3,3,3,4,4, + 4,4,4,4,3,4,3,4,4,4,69,4,4,4,4,3, + 25,217,217,217,217,155,217,155,155,210,155,217,210,210,210,210, + 210,210,210,210,54,210,210,210,210,210,63,63,63,210,210,210, + 63,155,54,210,63,63,210,210,210,210,210,217,210,210,210,210, + 217,155,217,155,155,217,217,217,217,217,217,217,155,217,155,217, + 217,217,217,155,217,217,155,155,25,217,217,25,25,217,25,25, + 25,25,25,155,25,217,25,217,217,217,155,217,155,217,217,217, + 155,155,155,155,210,210,210,210,210,210,210,210,210,63,210,210, + 63,63,210,210,54,210,210,54,210,210,54,210,210,210,210,210, + 54,210,210,210,63,63,63,63,210,210,210,210,210,63,54,210, + 186,210,63,63,210,210,210,210,54,210,63,54,210,210,54,210, + 210,186,210,210,186,54,210,63,210,186,63,63,210,210,63,63, + 63,54,210,63,63,63,186,63,63,63,186,63,63,63,54,12, + 8,7,8,101,12,12,8,122,49,211,139,8,211,211,109,211, + 211,211,8,211,67,132,17,109,42,101,211,211,139,211,211,109, + 211,211,211,211,8,67,132,17,211,122,49,139,8,211,211,211, + 211,211,211,211,211,211,139,132,17,109,42,101,211,211,8,211, + 211,111,139,8,211,8,139,8,132,17,109,122,49,139,8,8, + 211,139,61,211,8,211,211,211,139,132,17,109,122,49,139,8, + 211,139,211,211,139,211,211,211,211,67,150,17,109,42,101,211, + 211,8,211,211,211,211,211,211,8,211,139,132,17,109,122,49, + 139,211,211,211,211,109,109,211,211,211,211,139,150,17,109,42, + 101,211,211,8,211,211,211,211,211,109,211,211,139,132,17,109, + 42,101,211,139,8,139,211,211,109,211,211,211,211,67,150,17, + 109,42,101,211,211,211,211,211,211,211,211,211,211,211,67,132, + 17,211,42,101,211,211,211,211,139,211,109,211,211,211,211,67, + 150,26,109,42,101,211,139,8,211,211,109,211,211,211,211,8, + 67,132,17,109,122,49,139,8,211,211,211,211,211,139,211,211, + 211,67,132,26,109,42,101,139,211,8,211,211,211,211,211,211, + 211,211,8,132,17,211,42,101,139,211,8,211,211,211,211,211, + 211,8,8,67,132,17,211,42,101,211,139,8,211,139,211,109, + 211,211,211,8,67,132,17,109,42,101,211,211,211,139,211,109, + 211,211,211,8,211,8,150,26,8,12,7,8,7,8,12,69, + 69,69,69,69,69,69,80,69,69,69,69,3,80,3,3,69, + 3,69,3,4,3,69,4,4,69,69,4,69,4,4,4,4, + 4,4,69,4,69,69,3,4,3,4,3,69,4,69,69,4, + 3,3,4,3,4,4,4,3,69,3,3,69,69,4,3,69, + 217,25,25,155,217,217,217,217,155,217,210,155,155,155,210,210, + 210,210,210,155,210,210,210,210,63,210,210,210,210,210,210,54, + 210,210,210,210,54,210,210,210,210,155,210,210,217,217,217,155, + 217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217, + 217,217,217,217,217,217,217,217,25,217,217,25,25,25,217,217, + 25,217,25,217,25,155,25,217,25,217,217,25,217,217,155,217, + 155,155,155,155,155,155,155,210,210,210,210,210,210,210,210,210, + 210,63,210,210,210,210,210,210,54,155,210,210,54,210,210,210, + 210,210,54,210,210,245,210,210,54,210,63,210,210,186,210,63, + 210,54,210,54,63,54,210,210,210,54,155,210,54,210,63,63, + 210,210,210,63,210,210,54,63,63,210,63,186,63,63,63,245, + 210,63,54,63,63,63,96,63,96,63,63,96,63,210,210,12, + 8,8,8,8,12,26,8,42,67,139,211,211,211,211,211,91, + 8,211,8,8,67,132,219,109,122,67,211,211,211,139,211,211, + 211,211,8,211,8,139,150,219,211,122,67,211,211,211,211,211, + 91,211,211,187,211,8,67,12,219,211,122,49,139,211,211,211, + 211,211,109,211,211,8,139,67,150,219,211,0,67,211,211,211, + 211,211,211,211,211,109,211,8,67,150,219,211,0,67,211,211, + 211,211,8,91,139,8,211,211,8,67,17,17,109,122,49,139, + 211,211,211,211,109,109,211,211,211,8,67,150,219,211,0,67, + 139,211,8,211,211,211,109,211,187,211,8,67,132,17,109,122, + 49,139,211,211,211,211,91,211,211,211,8,211,139,150,219,211, + 122,49,211,139,211,211,8,211,61,211,211,8,8,67,17,219, + 211,122,49,139,211,211,211,211,91,139,187,211,211,8,139,150, + 219,211,122,49,139,211,211,8,211,211,109,211,8,211,8,139, + 150,17,109,122,67,211,211,139,139,8,91,139,187,211,211,8, + 67,150,219,211,0,67,211,211,211,211,211,211,211,187,211,211, + 8,139,150,17,211,122,67,211,211,211,211,211,61,211,8,211, + 211,139,67,150,219,109,122,67,211,211,139,8,211,91,139,8, + 211,139,187,101,150,219,211,122,67,211,211,139,8,211,91,139, + 187,211,211,8,139,150,219,211,122,49,211,211,211,211,211,211, + 211,8,211,211,139,139,150,26,8,12,8,8,8,8,8,3, + 121,69,69,69,80,69,69,69,80,69,80,69,69,80,69,3, + 69,80,69,3,4,69,69,3,4,69,4,69,69,69,4,4, + 69,4,69,4,4,69,4,69,69,69,3,4,4,4,3,4, + 4,4,4,3,69,4,4,3,69,4,3,3,4,69,4,4, + 25,155,25,217,217,155,217,155,217,210,155,210,210,210,210,210, + 210,210,210,210,54,210,210,63,210,210,210,210,210,210,210,155, + 210,210,210,210,210,210,210,210,210,210,155,217,210,155,217,217, + 155,155,217,217,155,217,217,155,217,217,217,217,217,217,155,155, + 155,155,25,155,25,25,25,217,25,155,25,25,217,25,25,25, + 25,25,25,25,25,25,155,25,217,25,217,217,217,217,217,155, + 217,210,210,155,210,210,210,155,210,210,210,210,210,210,63,210, + 54,210,63,210,63,210,54,210,210,210,210,210,155,210,210,63, + 210,210,210,210,210,210,210,63,210,63,210,210,210,210,54,210, + 210,186,210,210,186,63,210,54,210,63,54,63,63,210,245,210, + 63,63,210,155,210,186,210,210,210,210,210,210,63,63,210,63, + 63,186,210,210,245,63,63,63,210,96,63,63,63,210,63,12, + 8,7,8,8,12,12,8,42,101,139,139,139,139,139,139,139, + 139,211,139,211,139,12,26,211,26,101,139,139,8,211,139,211, + 211,139,211,139,139,139,17,26,109,42,101,139,139,139,139,139, + 139,139,211,139,139,139,139,132,26,109,42,101,139,139,139,139, + 139,211,139,211,211,139,211,67,17,26,109,26,101,139,139,139, + 139,139,139,211,211,211,139,139,139,17,26,109,26,101,139,139, + 139,139,139,139,211,211,211,139,139,139,132,26,211,42,101,139, + 139,139,139,139,211,139,211,211,139,139,139,17,26,243,42,101, + 139,139,139,139,139,211,139,211,139,139,139,139,17,26,211,42, + 101,139,139,139,139,139,139,211,139,211,211,139,67,17,26,109, + 42,101,139,139,139,139,139,139,139,139,139,139,211,139,150,26, + 109,26,139,139,139,139,139,139,139,211,139,211,139,211,67,17, + 26,109,42,101,139,139,139,139,139,211,211,211,211,139,211,67, + 132,26,211,26,101,139,211,139,139,139,139,139,139,211,139,139, + 139,17,26,109,26,101,139,139,139,139,139,139,139,139,211,139, + 211,67,132,26,109,42,101,139,139,139,139,139,139,211,211,211, + 139,139,139,17,26,109,26,101,139,139,139,139,139,139,211,211, + 211,139,139,67,17,26,109,42,101,139,139,211,139,139,139,139, + 139,211,139,139,139,17,26,109,42,101,139,211,139,139,139,211, + 211,211,211,139,139,67,150,12,8,12,7,8,7,8,12,69, + 69,69,69,69,69,69,3,69,69,69,69,69,69,69,69,69, + 69,69,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,69,4,4,69,4,80,3,3,80,4,69,4,3,4,4, + 4,4,4,4,3,3,4,4,4,4,4,4,4,4,3,69, + 25,217,25,25,217,217,25,217,217,217,210,155,210,155,210,210, + 210,210,210,155,210,210,210,210,210,54,210,210,210,54,210,210, + 210,210,210,210,210,210,210,155,210,210,210,155,217,210,155,217, + 217,155,155,217,217,217,217,155,217,155,217,155,217,217,217,25, + 217,155,25,155,155,217,25,217,25,217,25,25,25,25,25,25, + 25,25,25,217,25,25,217,25,217,25,25,217,25,217,217,217, + 217,217,210,217,155,155,210,155,155,210,210,210,210,210,210,210, + 210,210,210,210,210,210,155,210,210,54,155,210,210,210,210,210, + 210,210,210,210,210,210,210,210,210,210,210,210,210,155,210,210, + 63,210,210,63,210,210,63,186,210,210,210,210,63,210,210,210, + 155,63,63,210,210,210,210,186,210,210,63,186,210,63,155,63, + 63,63,63,210,210,186,210,96,186,63,245,210,63,210,210,12, + 8,8,8,101,26,12,8,122,8,26,91,91,26,91,26,91, + 26,91,26,12,182,150,26,12,78,8,91,26,91,91,91,26, + 91,26,91,26,26,67,150,26,187,42,8,91,26,91,91,26, + 91,26,91,26,91,26,67,150,26,12,78,91,91,26,91,91, + 26,91,26,91,26,91,26,67,132,26,8,162,8,91,91,26, + 91,26,26,91,91,91,26,26,67,132,26,8,162,8,91,26, + 91,91,187,26,91,26,91,26,91,182,150,26,12,78,91,91, + 26,91,26,91,26,91,26,91,26,26,67,150,26,8,162,8, + 91,26,91,26,91,91,26,91,26,91,26,67,150,26,187,42, + 187,91,26,91,91,26,91,26,91,91,26,12,67,132,26,8, + 162,8,26,91,26,91,26,187,26,91,26,91,12,182,150,26, + 12,42,187,91,26,91,91,17,26,91,26,91,26,91,182,150, + 26,12,78,91,91,26,91,26,91,91,26,91,26,91,26,8, + 150,26,187,42,8,91,26,91,26,187,26,91,26,91,26,26, + 67,150,26,187,42,8,91,26,91,26,91,26,91,26,91,26, + 12,8,150,26,8,162,8,91,91,26,91,187,26,91,26,91, + 26,26,67,150,26,12,78,8,91,26,91,26,187,26,91,26, + 91,26,26,67,132,26,8,162,8,91,26,91,26,187,91,26, + 91,91,26,26,67,150,26,187,42,8,91,91,26,91,26,91, + 91,26,91,26,26,8,150,26,8,26,8,8,8,8,8,69, + 121,69,69,69,80,69,69,69,3,69,69,69,69,69,3,80, + 3,69,69,69,3,4,69,69,69,69,4,4,69,69,69,4, + 4,69,4,4,3,69,3,4,4,3,4,4,4,4,4,3, + 69,69,4,4,4,4,4,4,4,4,3,69,3,4,3,69, + 25,25,25,217,25,25,217,155,155,155,217,210,155,210,155,155, + 155,210,210,155,210,210,210,210,210,155,210,210,210,155,210,210, + 210,210,210,155,210,210,210,210,217,217,155,217,155,217,217,217, + 217,217,217,217,155,155,217,217,155,217,217,217,25,217,25,217, + 155,25,217,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,155,25,217,25,217,217,25,217,25,25,217, + 217,155,217,155,210,210,217,217,217,210,155,210,210,210,210,210, + 210,210,210,210,210,210,210,210,210,155,210,210,210,210,210,210, + 210,210,210,210,63,210,210,210,186,210,210,155,210,210,210,210, + 155,63,63,210,54,210,210,210,63,63,210,186,210,63,63,210, + 186,155,155,155,210,210,210,210,63,155,210,210,210,186,63,155, + 210,155,63,210,210,63,210,63,210,210,210,96,210,210,210,12, + 8,67,8,101,12,42,211,0,26,219,219,219,26,78,187,183, + 26,183,187,26,8,150,12,211,0,26,17,219,219,219,26,26, + 183,26,26,187,219,8,12,12,211,0,26,219,219,26,183,219, + 183,187,219,219,219,219,8,150,12,211,0,219,219,219,26,187, + 26,42,187,42,219,183,26,8,12,17,211,0,26,219,219,219, + 187,183,187,219,42,26,219,219,8,12,17,211,0,26,219,219, + 219,183,42,187,183,26,42,219,219,8,150,12,211,0,219,219, + 219,219,219,42,187,183,26,26,187,219,8,17,187,211,0,26, + 219,187,26,42,26,42,187,219,26,219,219,8,150,12,211,0, + 26,219,219,26,219,183,187,183,42,26,183,26,8,12,17,211, + 0,26,17,219,183,187,26,42,183,42,26,183,26,8,150,12, + 211,0,26,17,219,42,187,42,187,219,219,26,219,26,8,150, + 12,211,0,219,219,219,219,219,42,183,187,219,26,219,26,182, + 150,12,211,0,26,219,219,183,187,42,187,183,187,26,187,219, + 8,12,12,211,0,26,219,219,26,187,42,26,183,219,26,187, + 26,211,150,17,211,0,26,219,219,219,219,42,187,219,219,26, + 219,219,8,150,12,211,0,26,219,219,219,187,42,187,183,26, + 219,219,26,8,150,17,211,0,26,219,187,183,187,42,183,183, + 219,26,219,219,8,150,12,211,0,26,219,219,187,26,26,219, + 183,219,26,17,26,182,12,12,8,8,8,7,8,8,12,121, + 69,69,69,69,69,80,69,69,80,69,69,69,69,69,69,69, + 69,69,4,4,69,69,4,4,4,4,69,69,4,4,4,69, + 3,4,69,4,69,3,69,69,4,4,4,3,4,4,4,4, + 3,4,4,4,205,4,4,4,4,69,4,3,4,69,4,3, + 25,217,25,25,217,25,25,217,217,155,155,155,217,217,210,155, + 155,155,155,210,210,155,210,210,210,210,210,210,210,210,210,155, + 210,210,210,210,210,210,210,210,210,217,155,210,155,155,155,155, + 155,217,155,217,217,217,217,217,25,155,25,155,217,217,155,25, + 155,25,155,217,25,155,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,217,25,25,25, + 217,217,217,217,217,210,210,210,217,217,155,155,155,210,155,210, + 210,210,155,210,155,155,210,155,210,210,210,210,210,210,210,210, + 186,210,210,155,210,210,210,210,210,210,210,210,210,210,210,210, + 210,210,186,210,210,63,63,210,210,54,210,210,210,245,210,155, + 155,155,155,155,155,155,155,210,186,210,155,210,210,155,63,155, + 186,63,186,210,210,245,210,63,245,210,186,210,245,155,155,12, + 8,8,8,8,12,122,8,0,211,139,139,67,139,139,139,67, + 139,139,139,67,8,187,219,243,0,211,67,139,139,67,139,139, + 99,139,139,139,139,139,150,183,243,0,211,139,67,139,139,139, + 139,139,139,139,139,139,8,150,219,243,0,8,139,67,139,67, + 139,139,67,139,139,139,139,8,150,42,243,0,211,139,139,139, + 139,139,182,67,182,139,139,139,139,150,42,243,0,211,139,139, + 139,67,139,139,67,182,139,139,139,8,150,219,243,0,8,101, + 139,139,67,139,139,67,182,139,139,139,139,150,42,243,0,211, + 139,67,67,139,67,139,139,182,139,139,139,8,150,219,243,0, + 139,139,67,139,139,139,139,67,182,139,139,139,139,150,42,243, + 0,211,139,139,139,67,67,139,67,182,139,139,139,8,150,219, + 243,0,211,139,67,139,67,139,67,139,182,139,139,67,8,187, + 219,8,0,8,139,139,139,67,139,139,139,67,139,139,139,8, + 150,183,243,0,211,67,139,139,67,139,139,139,182,139,139,139, + 139,150,183,243,0,211,139,67,139,67,139,139,139,67,139,139, + 139,8,150,42,243,0,211,139,139,139,67,139,67,139,182,139, + 139,139,8,150,219,243,0,211,139,139,139,67,139,139,67,139, + 139,139,139,8,150,42,243,0,211,139,139,139,139,139,139,139, + 182,139,139,139,8,150,219,243,0,211,139,139,67,67,139,139, + 139,67,139,139,139,8,12,26,8,12,8,8,8,7,8,3, + 121,69,69,69,3,69,69,69,69,3,69,69,69,69,69,80, + 3,3,69,4,4,69,4,4,69,3,3,69,69,69,4,69, + 69,4,4,4,4,4,4,3,4,4,4,4,69,4,4,4, + 4,4,205,4,4,205,4,4,3,69,69,69,3,69,4,4, + 25,25,25,217,25,217,25,25,217,217,217,217,155,210,155,155, + 155,155,155,155,210,155,155,155,155,155,210,155,210,210,155,210, + 155,155,155,155,155,155,217,155,155,210,217,217,155,217,210,217, + 217,155,217,25,217,155,25,217,155,217,155,25,155,217,25,217, + 25,155,25,25,217,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,217,25,25,25,25,25,25,217,217, + 217,155,155,217,217,217,217,217,210,210,217,210,155,155,210,155, + 155,155,210,155,210,210,155,155,210,210,210,210,210,155,210,155, + 210,210,186,210,155,155,155,210,155,155,210,210,210,155,155,210, + 155,210,210,210,186,210,210,186,210,210,210,210,210,210,210,155, + 155,155,155,155,155,155,155,155,155,155,155,186,155,210,186,63, + 155,155,210,186,210,155,186,210,210,210,210,210,210,210,63,12, + 8,8,8,8,12,0,8,0,8,139,139,211,211,211,139,109, + 8,211,139,139,211,150,122,109,0,8,211,139,139,211,139,139, + 8,211,211,139,139,243,12,122,211,0,8,139,139,211,139,211, + 211,211,211,211,139,139,211,17,122,211,0,211,139,211,211,211, + 109,139,109,211,211,139,182,211,187,122,211,0,8,139,139,139, + 211,211,139,8,8,139,139,139,8,187,122,211,0,8,139,139, + 139,109,139,211,211,211,211,139,139,211,12,122,211,0,8,139, + 139,139,211,211,211,211,211,211,139,139,243,12,122,211,0,8, + 139,211,211,211,211,211,211,211,211,139,139,211,12,122,211,0, + 8,139,139,211,211,211,139,211,8,211,139,139,243,187,122,211, + 0,8,139,139,211,211,109,139,211,211,211,139,139,211,17,122, + 211,0,8,139,211,139,211,211,211,8,211,211,211,139,211,150, + 122,182,0,211,139,139,139,211,211,139,109,8,211,139,139,211, + 187,122,211,0,8,211,139,139,211,211,211,211,211,211,139,139, + 243,12,122,211,0,8,139,211,211,211,139,211,139,187,211,139, + 139,211,187,122,211,0,8,139,139,139,211,211,211,109,139,139, + 139,139,211,17,122,109,0,8,139,139,139,211,211,211,8,211, + 139,139,182,211,187,122,211,0,8,139,139,139,211,139,211,139, + 8,139,139,139,211,17,122,109,0,8,139,139,109,139,109,139, + 211,8,211,139,139,211,150,26,8,12,8,7,8,8,12,121, + 69,69,69,69,69,69,3,69,69,69,69,69,69,69,3,69, + 69,69,4,69,69,4,69,69,3,4,4,4,4,4,69,4, + 4,3,69,4,69,4,3,4,4,4,4,3,174,4,4,174, + 4,69,3,205,69,4,4,69,4,4,4,3,4,4,3,69, + 25,25,25,25,25,217,217,25,217,217,217,217,217,217,155,155, + 155,155,155,155,155,155,155,210,155,155,155,155,155,155,155,155, + 155,210,155,155,210,155,217,217,217,210,217,217,155,217,210,155, + 217,217,155,155,25,155,155,217,155,25,155,217,25,155,217,217, + 25,217,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,217,25,25,25,217,25,217,25,25,25,25,25,217, + 217,217,217,155,155,155,155,217,217,210,217,210,210,155,210,210, + 210,155,210,155,155,210,210,155,155,155,210,155,155,210,210,210, + 155,155,210,210,210,210,210,210,210,210,105,210,210,210,210,210, + 155,210,210,210,210,210,210,210,210,63,63,210,210,210,210,210, + 155,155,155,155,155,155,155,155,155,155,210,210,155,210,210,155, + 186,210,210,210,155,210,210,210,186,210,210,210,155,155,155,12, + 8,8,8,8,12,42,8,0,8,211,109,211,109,187,211,109, + 187,211,211,211,243,17,26,243,0,8,211,109,109,109,109,187, + 139,187,8,211,182,243,17,42,8,0,8,211,109,211,211,109, + 8,187,211,8,211,139,243,17,42,8,0,8,139,109,211,211, + 187,211,187,8,211,211,67,243,17,42,243,0,8,211,109,211, + 109,187,211,109,109,211,211,182,8,17,42,8,0,8,211,109, + 211,109,109,187,211,8,8,211,211,243,17,42,211,0,8,139, + 109,109,109,211,187,211,8,211,211,182,243,17,42,243,0,8, + 139,109,211,109,211,187,211,8,8,211,139,243,17,42,8,0, + 8,211,211,211,109,187,211,8,211,8,211,182,8,17,42,211, + 0,8,139,254,211,109,109,109,8,8,8,211,139,211,17,42, + 8,0,8,139,109,109,109,109,211,211,8,139,211,139,243,17, + 42,8,0,8,139,109,109,109,109,8,109,211,211,211,139,243, + 17,42,243,0,8,139,109,109,109,211,8,187,8,211,211,182, + 243,17,42,211,0,8,139,109,211,109,109,187,139,8,8,211, + 139,243,17,42,243,0,8,139,109,109,109,109,8,187,8,109, + 211,139,211,17,26,211,0,8,139,109,109,109,211,109,211,187, + 139,8,139,8,17,42,243,0,8,211,109,211,109,109,187,211, + 187,211,211,139,211,17,26,243,0,8,211,109,187,139,187,211, + 109,211,8,211,182,8,132,26,8,12,8,8,8,8,8,69, + 69,69,69,69,69,69,69,69,80,69,69,80,69,69,80,69, + 3,69,69,69,69,4,4,4,69,69,69,69,69,4,69,4, + 69,4,69,4,4,69,69,69,4,174,4,4,4,69,3,4, + 205,4,3,4,69,69,4,69,3,3,4,4,4,69,3,4, + 248,25,120,248,120,25,25,217,25,217,217,217,155,155,217,155, + 155,155,155,155,217,217,217,155,155,155,155,217,155,210,217,210, + 210,217,217,217,217,217,155,210,155,217,155,217,217,217,217,217, + 155,155,217,217,217,217,25,217,217,155,25,217,155,25,155,25, + 217,25,155,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 217,217,217,217,217,217,217,217,217,217,217,217,217,210,155,217, + 217,210,155,210,210,155,155,105,155,155,155,155,155,155,155,217, + 210,155,155,210,210,210,210,210,210,155,155,217,210,210,155,210, + 210,210,210,63,210,210,210,210,210,186,210,210,210,186,155,155, + 155,155,155,186,155,155,155,210,155,210,155,155,186,155,210,210, + 210,155,155,186,63,210,186,155,210,210,155,210,210,155,210,12, + 8,8,8,8,17,42,8,0,8,139,139,67,139,139,139,139, + 139,139,211,67,211,150,122,187,0,8,139,67,139,139,139,139, + 139,139,211,67,139,211,150,122,187,0,8,139,139,139,139,139, + 139,139,211,211,211,67,211,150,122,187,0,8,139,139,139,67, + 139,139,139,211,139,139,139,211,150,122,187,0,8,139,139,139, + 139,139,139,139,211,211,139,139,211,150,122,187,0,8,139,139, + 139,139,139,139,139,211,211,139,67,211,150,122,12,0,8,139, + 139,139,139,139,139,139,211,211,139,139,211,150,122,187,0,211, + 139,139,67,139,139,139,139,211,211,211,67,211,150,122,187,0, + 8,139,139,139,139,139,139,211,211,211,139,139,211,150,0,12, + 0,8,139,139,139,139,139,139,211,211,211,211,67,243,150,122, + 187,0,8,139,139,139,139,139,139,211,211,211,211,67,211,150, + 122,187,0,8,139,139,139,139,139,139,139,211,211,211,67,211, + 150,0,109,0,8,139,139,139,139,139,139,139,211,211,139,139, + 211,150,122,187,0,8,139,139,139,139,139,139,139,211,211,211, + 67,211,150,122,187,0,8,139,139,139,139,139,139,139,211,211, + 211,67,243,150,122,187,0,8,139,139,139,139,139,139,139,139, + 211,139,67,211,150,122,187,0,8,139,139,67,139,139,139,139, + 139,211,139,67,243,150,122,187,0,8,139,139,67,139,139,139, + 139,211,211,139,139,211,12,42,8,12,8,7,8,8,8,69, + 121,69,69,69,69,69,69,69,3,69,69,69,80,69,69,69, + 69,4,3,4,69,69,69,69,69,69,3,4,4,69,69,69, + 69,69,4,69,69,4,4,4,3,4,4,4,4,4,4,4, + 3,69,69,4,4,3,4,4,4,4,69,69,3,4,4,4, + 25,25,25,25,25,217,25,25,217,217,217,217,217,217,217,217, + 155,155,155,155,210,210,217,217,217,217,210,217,217,155,217,217, + 155,155,217,217,155,217,217,217,155,217,155,155,217,217,217,217, + 217,217,25,217,217,217,25,217,25,217,25,217,25,217,25,155, + 25,25,25,25,25,25,25,25,25,25,248,248,25,248,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,155,25, + 25,155,217,217,217,217,217,217,217,217,217,217,217,217,210,210, + 217,217,217,217,217,217,155,210,155,155,155,155,155,210,210,155, + 210,155,155,155,155,105,210,210,105,210,210,155,210,210,155,155, + 105,217,155,155,155,210,186,210,155,155,155,155,210,210,155,155, + 155,217,217,155,155,155,217,155,155,217,155,155,155,155,155,155, + 155,155,210,155,155,155,210,155,155,186,186,210,155,155,155,12, + 8,8,141,8,12,26,12,0,187,187,187,187,187,211,91,12, + 187,12,26,91,12,150,42,8,162,26,187,187,187,187,211,91, + 187,12,91,12,26,187,243,42,8,162,187,187,12,187,187,187, + 211,91,12,12,26,12,187,243,42,8,162,187,187,187,187,187, + 211,91,187,12,12,187,12,109,150,42,8,162,187,187,187,8, + 187,109,91,12,91,12,187,12,109,150,42,8,162,187,187,187, + 187,8,111,187,187,187,12,26,12,187,150,42,8,162,187,187, + 187,187,8,111,187,187,187,12,187,12,243,150,42,8,162,187, + 187,187,187,187,8,111,91,187,12,26,12,187,150,42,8,162, + 187,187,187,187,8,111,91,187,187,12,187,12,243,150,42,8, + 162,187,187,187,187,109,91,111,91,187,12,91,12,12,150,42, + 8,162,187,187,187,187,187,187,109,91,187,12,26,26,187,12, + 42,8,162,187,187,187,187,187,111,91,187,12,12,26,91,12, + 150,42,8,162,187,187,187,187,187,187,109,91,12,187,187,12, + 12,150,42,8,162,187,187,187,187,187,8,111,91,187,12,91, + 12,150,150,42,8,162,187,187,187,187,187,211,91,187,187,12, + 91,12,12,132,42,8,162,187,187,187,187,187,109,91,187,187, + 91,26,12,109,150,42,8,162,187,187,187,187,187,8,187,187, + 187,12,26,12,187,150,42,8,162,187,187,187,187,109,187,187, + 111,91,12,12,91,150,150,42,8,12,7,8,7,8,8,69, + 121,69,69,69,69,69,69,69,69,69,80,69,69,3,80,69, + 69,69,69,4,69,4,69,4,4,69,69,69,69,69,4,4, + 4,69,4,69,69,69,69,69,3,4,4,174,4,174,4,4, + 4,4,4,69,4,4,69,69,69,4,3,4,3,4,4,3, + 248,25,25,25,120,25,217,25,25,25,25,217,217,155,217,155, + 217,217,217,217,217,217,217,210,210,217,217,217,217,217,217,217, + 217,217,217,217,217,217,217,217,217,217,217,217,217,217,155,25, + 217,25,217,155,25,155,25,217,217,217,217,25,217,25,217,25, + 25,217,25,25,25,25,25,25,248,248,25,25,25,25,25,248, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,217,217,217,217,217,217,217,155,217,217,217,155,217,217, + 155,210,210,217,210,210,155,217,210,155,155,155,155,217,155,155, + 217,155,155,210,155,155,155,217,155,155,210,210,217,155,155,155, + 155,155,210,210,210,155,210,155,155,210,186,155,155,155,210,133, + 217,155,155,217,217,210,133,155,217,155,155,217,186,155,155,155, + 155,155,155,155,155,210,186,210,210,210,210,186,210,217,210,12, + 8,8,8,8,26,12,219,0,0,0,122,122,0,0,0,0, + 0,0,0,0,219,187,26,187,0,0,0,122,122,0,0,0, + 0,0,0,0,122,219,17,219,187,0,0,0,122,122,0,0, + 0,0,0,0,0,0,219,17,219,187,0,0,0,122,0,0, + 0,0,0,0,0,0,0,26,187,26,187,0,0,0,0,0, + 0,0,0,0,0,0,0,0,26,187,219,187,0,0,122,122, + 0,0,122,122,0,0,0,0,0,219,187,26,187,0,0,0, + 122,0,0,122,122,0,0,0,0,0,26,187,26,187,0,0, + 0,122,162,0,0,0,0,0,0,0,0,219,187,219,187,0, + 0,122,122,0,0,0,122,0,0,0,0,0,26,166,26,187, + 0,0,0,0,0,0,122,0,0,0,0,0,0,219,187,219, + 187,0,0,0,122,122,0,0,0,0,0,122,122,122,219,132, + 219,187,0,0,0,122,122,122,0,0,0,0,0,0,0,219, + 17,26,187,0,0,0,122,122,122,0,0,0,0,0,0,0, + 219,187,26,187,0,0,0,122,162,0,0,0,0,0,0,0, + 0,26,187,26,187,0,0,0,122,0,0,0,122,0,0,0, + 0,0,219,187,26,187,0,0,0,122,0,0,0,0,0,0, + 0,0,0,26,187,26,187,0,0,0,122,162,0,0,122,0, + 0,0,0,0,219,187,26,187,0,0,122,122,0,0,122,0, + 0,0,0,0,0,26,17,26,8,12,8,8,7,8,8,121, + 69,69,69,69,69,69,69,69,69,69,69,3,69,69,69,69, + 69,69,69,69,4,69,4,69,69,4,4,69,69,69,69,69, + 69,69,69,4,4,4,4,4,3,69,4,4,4,4,69,4, + 69,4,69,4,4,69,4,4,4,3,4,4,4,4,4,4, + 248,248,120,25,248,25,217,25,25,155,25,217,217,217,217,217, + 217,155,155,217,217,155,217,217,155,217,217,217,217,217,217,217, + 217,217,217,25,155,25,155,217,217,217,25,217,25,217,217,25, + 217,217,25,25,25,217,25,25,25,25,217,25,25,155,25,25, + 25,25,25,25,25,25,248,25,25,248,25,248,25,248,25,25, + 248,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 155,25,25,217,217,25,155,217,25,155,217,217,217,155,155,217, + 217,217,155,217,217,217,210,217,217,155,155,217,155,217,217,155, + 155,155,217,217,155,217,155,155,155,155,217,155,155,155,155,155, + 155,217,155,155,155,217,155,155,155,155,155,155,186,155,210,155, + 25,155,133,155,217,155,217,155,155,155,155,217,155,155,217,155, + 155,133,155,155,217,155,155,155,217,105,217,155,210,217,155,26, + 8,8,8,7,219,12,12,42,26,26,26,26,42,42,26,17, + 17,219,219,26,17,132,219,12,42,91,26,26,26,42,42,26, + 219,17,219,219,26,17,219,219,12,42,26,26,26,26,26,78, + 219,17,17,17,17,26,17,219,219,12,42,26,26,26,26,42, + 42,26,17,219,219,219,219,219,132,219,12,42,12,26,26,26, + 42,42,26,219,219,219,219,219,219,219,219,12,42,26,26,26, + 26,42,42,26,17,17,17,17,26,17,132,183,12,42,26,26, + 26,26,42,42,26,17,17,219,219,219,219,132,219,12,42,26, + 26,26,26,42,42,26,17,17,17,17,26,17,219,219,12,42, + 26,26,26,26,26,42,26,17,17,219,219,219,26,132,219,12, + 42,26,26,26,26,42,42,219,17,219,219,219,26,17,219,219, + 12,42,26,26,26,26,42,42,26,17,17,219,219,26,17,17, + 219,12,42,26,26,26,26,26,42,26,17,17,219,219,26,17, + 219,219,12,42,26,26,26,26,42,42,219,17,219,219,219,26, + 17,132,183,12,42,26,26,26,26,42,42,219,17,219,219,219, + 219,17,132,219,12,42,26,26,26,26,42,42,26,17,219,219, + 219,26,17,132,219,17,42,26,26,26,26,42,42,26,219,17, + 219,219,219,219,132,219,12,42,26,26,26,26,26,42,26,17, + 17,17,17,26,17,132,219,12,42,26,26,26,26,42,42,26, + 17,219,219,219,219,17,219,26,26,12,8,7,8,8,8,121, + 121,69,69,80,69,69,69,69,69,69,69,69,80,69,69,3, + 3,69,69,69,69,69,69,4,69,69,69,69,69,69,69,4, + 4,69,69,69,69,69,69,69,3,4,69,4,69,4,69,4, + 69,4,69,69,4,4,3,4,69,4,69,4,4,4,4,3, + 25,25,120,248,25,25,25,155,25,25,25,217,25,217,217,25, + 217,217,25,155,217,217,217,217,217,217,217,217,217,217,217,25, + 217,25,25,217,25,217,25,25,217,25,217,155,25,25,25,155, + 25,25,25,25,217,25,25,217,155,25,25,25,25,25,25,25, + 25,25,25,25,248,25,25,25,248,25,248,248,25,248,25,25, + 25,248,25,25,25,25,25,25,25,25,25,25,25,25,25,217, + 25,217,155,25,25,217,25,25,155,25,25,217,217,217,217,217, + 217,217,217,217,155,217,217,155,210,217,217,155,217,155,155,155, + 217,217,155,155,155,155,133,217,217,217,210,155,105,217,105,133, + 217,155,217,155,155,155,155,217,155,155,155,155,155,155,155,133, + 155,217,217,217,155,217,155,133,217,217,155,155,155,155,133,155, + 155,217,210,133,155,105,186,105,186,155,155,63,155,217,217,12, + 8,8,12,8,219,12,12,26,243,12,150,17,219,17,17,243, + 12,243,12,150,17,219,42,12,26,150,12,150,17,219,17,12, + 243,12,150,12,150,187,17,26,187,26,243,12,150,187,219,12, + 17,243,12,150,12,150,187,17,42,12,26,243,12,150,17,219, + 17,12,243,12,150,12,17,12,219,26,187,26,150,12,150,17, + 219,17,12,8,12,150,12,17,12,17,26,187,26,243,12,150, + 17,219,17,12,243,12,150,12,150,17,17,26,187,26,243,12, + 150,17,219,17,12,243,12,150,12,17,12,219,26,187,26,243, + 12,150,187,219,17,12,243,12,150,12,150,17,17,26,187,26, + 243,12,150,17,219,17,12,243,12,150,12,12,150,219,42,12, + 26,243,12,150,17,219,17,12,243,12,150,12,150,17,17,42, + 12,26,243,12,150,187,219,17,12,243,12,150,12,12,187,219, + 42,12,26,243,12,150,17,219,17,12,243,12,150,12,150,187, + 17,26,187,26,243,12,150,17,219,17,12,243,12,243,12,12, + 17,219,26,12,26,243,12,150,187,219,17,12,243,12,150,12, + 12,17,219,42,12,26,243,12,150,187,219,17,12,243,12,150, + 12,150,12,219,26,12,26,243,12,150,17,219,17,12,243,150, + 150,12,17,12,219,26,187,26,243,12,150,187,219,17,12,243, + 12,150,12,150,17,219,26,187,26,243,12,150,17,219,17,12, + 243,12,150,12,12,17,12,26,8,12,8,8,7,8,8,121, + 69,69,69,69,80,69,69,69,69,69,80,69,69,69,80,69, + 69,3,69,69,69,69,69,69,4,69,3,3,69,69,69,69, + 69,69,69,69,69,69,4,4,69,4,3,69,4,4,4,4, + 4,4,4,4,4,4,69,4,4,69,3,69,69,4,3,69, + 248,25,248,120,248,120,25,25,25,155,155,25,217,25,217,217, + 25,155,25,155,217,217,217,217,217,25,155,25,217,25,25,25, + 217,217,25,25,217,217,217,25,217,25,217,25,155,217,25,25, + 217,25,217,25,25,25,25,25,25,25,25,217,25,25,25,25, + 25,25,25,25,248,25,248,25,248,25,248,25,248,248,25,248, + 25,248,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,217,217,25,155,217,25,217,217,155,217,217,217,155,155, + 217,155,155,217,155,217,217,217,217,155,217,217,217,217,217,217, + 155,155,155,217,217,217,155,155,217,217,105,133,155,155,217,155, + 155,133,217,217,217,217,155,155,155,155,155,155,155,155,155,217, + 217,25,155,133,217,133,217,217,25,155,217,133,217,217,217,155, + 155,217,217,155,155,217,155,105,217,210,186,155,155,217,217,12, + 8,8,8,8,12,12,8,219,150,17,17,17,17,17,26,243, + 150,150,12,17,12,17,26,150,219,150,17,17,17,132,17,26, + 8,12,150,17,17,17,219,26,243,219,150,17,17,17,219,12, + 26,243,150,150,17,17,17,17,26,243,219,150,17,12,187,132, + 17,26,243,12,150,12,17,12,219,26,150,26,150,17,17,17, + 17,17,17,243,12,150,12,17,17,17,26,243,219,150,17,12, + 17,17,17,26,243,150,150,17,17,17,17,26,243,219,150,17, + 17,187,17,17,26,243,12,150,12,17,17,219,26,243,219,150, + 17,17,17,17,17,26,243,150,150,17,12,17,219,26,243,219, + 150,17,12,17,17,17,26,243,12,150,12,17,12,219,26,243, + 219,150,12,17,17,17,17,26,8,150,150,17,12,17,17,26, + 243,219,150,17,17,17,17,17,26,243,12,150,150,17,12,17, + 26,243,219,150,17,17,17,17,17,26,8,150,150,12,17,17, + 219,26,243,219,150,17,17,17,17,12,26,243,12,150,150,17, + 12,219,26,243,219,150,17,17,17,17,17,26,243,150,150,17, + 12,12,219,26,243,219,150,17,17,17,17,17,26,8,150,150, + 17,17,17,219,26,243,219,150,17,12,17,17,17,26,243,150, + 150,12,17,12,219,26,243,219,150,17,17,17,17,17,26,243, + 150,150,17,17,12,219,26,243,219,150,17,12,187,17,12,26, + 243,12,150,150,17,17,17,26,12,12,8,7,8,8,8,121, + 121,69,69,69,69,69,69,69,69,69,69,3,69,3,69,69, + 69,4,125,69,69,69,69,69,3,69,69,69,69,69,69,69, + 69,69,174,69,174,69,69,4,69,4,4,69,69,4,69,4, + 69,69,69,3,69,4,69,4,3,4,3,3,4,69,4,4, + 120,248,25,25,25,25,25,25,25,25,25,25,217,217,25,217, + 25,155,25,217,217,217,217,217,217,155,25,217,25,217,217,217, + 25,25,25,217,25,25,25,217,25,217,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,248,25,25,25,248,25,248,248,248,248,25,248,25,248,248, + 25,25,248,25,248,25,25,248,25,25,25,25,25,25,25,217, + 25,217,25,25,217,25,25,25,25,25,25,25,217,217,217,217, + 217,217,217,217,217,217,217,217,155,217,217,155,217,155,25,217, + 133,217,217,217,155,155,217,217,155,217,217,217,217,217,155,217, + 217,217,155,155,155,155,133,155,155,155,155,25,155,155,155,25, + 133,155,217,217,217,36,217,133,217,217,155,217,217,155,133,217, + 217,133,155,217,155,155,133,217,186,217,217,155,155,217,155,12, + 8,8,8,67,26,12,243,219,12,12,132,187,150,150,219,150, + 17,132,12,132,17,187,26,109,219,12,17,132,17,17,150,219, + 150,150,17,12,132,17,187,26,109,219,12,17,132,187,12,12, + 219,150,17,17,12,132,17,187,26,109,219,12,17,132,17,17, + 150,219,150,150,17,150,132,17,187,26,109,219,12,12,132,219, + 132,150,26,150,150,17,150,132,17,187,26,109,219,12,17,132, + 187,150,150,219,150,17,17,12,132,17,187,26,109,219,17,12, + 132,17,150,150,219,150,150,17,150,132,12,187,26,109,219,12, + 17,132,17,150,150,219,150,17,17,12,132,17,187,26,109,219, + 12,17,132,187,150,150,219,150,150,17,150,17,17,187,26,109, + 219,12,17,132,17,150,12,219,150,12,17,17,132,17,187,26, + 109,219,12,17,132,187,150,150,219,150,150,17,17,17,17,187, + 26,109,219,12,17,132,17,150,150,219,150,17,132,12,17,17, + 187,26,109,219,12,12,132,187,132,12,219,150,150,17,17,132, + 17,187,26,109,219,12,17,132,17,150,12,219,150,12,17,150, + 132,17,187,26,109,219,12,17,132,17,150,150,219,150,12,17, + 17,132,12,187,26,109,219,12,17,132,17,150,150,17,12,17, + 17,150,132,17,187,26,243,219,12,17,132,187,150,150,219,150, + 17,17,12,132,17,187,26,109,219,12,17,132,219,150,150,219, + 150,150,150,17,17,12,17,26,8,12,8,8,7,8,8,121, + 121,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69, + 69,69,69,69,121,69,125,69,69,69,69,69,121,69,69,69, + 69,69,69,69,69,3,4,3,4,69,4,4,4,69,4,69, + 4,4,4,69,4,69,3,69,4,4,4,4,4,4,3,69, + 25,248,248,248,25,248,25,25,25,25,25,25,25,217,25,217, + 217,217,25,217,217,25,217,217,25,217,155,25,25,25,25,217, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,248,248,25,25,25,25,25,25,25,25,25, + 25,248,25,25,248,25,25,248,248,25,248,248,248,248,25,248, + 25,248,25,25,25,248,25,25,248,25,25,25,25,25,25,25, + 25,25,217,25,25,217,25,25,25,155,25,25,155,25,217,217, + 217,217,217,217,217,217,25,217,217,155,217,155,217,155,155,217, + 217,25,155,133,217,155,217,217,133,155,217,217,155,217,217,217, + 155,217,133,217,155,217,25,155,155,133,155,155,155,155,155,217, + 25,155,25,155,25,25,36,217,133,217,217,217,217,217,217,155, + 217,217,133,217,217,155,155,105,217,217,186,155,155,217,217,26, + 8,67,8,67,219,12,12,219,17,17,132,219,17,12,219,150, + 17,150,17,219,17,132,26,243,219,12,17,132,219,12,12,219, + 17,150,150,17,17,12,132,26,243,219,12,17,132,219,17,12, + 219,150,132,150,17,17,17,132,26,109,219,12,17,132,219,17, + 12,219,12,150,17,17,17,17,150,26,211,219,17,17,132,219, + 17,150,219,12,150,17,17,17,17,132,26,243,219,12,17,132, + 219,17,12,219,150,132,150,17,219,12,132,26,243,219,12,17, + 132,219,17,12,219,12,150,17,17,219,12,132,26,243,219,12, + 17,132,219,17,12,219,150,132,150,17,17,17,150,26,243,219, + 12,17,132,219,17,12,219,12,150,17,17,17,17,150,26,109, + 219,12,17,132,219,17,12,219,150,132,150,17,17,17,132,26, + 243,219,12,17,132,219,17,12,219,150,132,150,12,219,17,132, + 26,243,219,12,17,132,219,17,12,219,150,17,150,150,132,17, + 150,26,243,219,17,17,132,219,17,12,219,17,150,150,17,17, + 17,150,26,109,219,150,17,132,219,17,12,219,150,150,17,17, + 17,17,150,26,109,219,12,17,132,219,17,12,219,150,150,132, + 17,17,17,150,26,109,219,12,17,132,219,17,17,219,150,150, + 17,17,17,17,132,26,109,219,12,17,132,219,17,12,219,150, + 132,150,17,17,17,150,26,243,219,12,17,132,219,17,17,219, + 12,219,12,150,219,12,132,26,139,12,8,7,8,8,8,121, + 121,69,69,69,69,69,69,69,69,69,80,69,69,69,69,69, + 69,69,125,69,121,69,69,69,69,69,69,69,69,69,69,3, + 69,69,69,69,69,69,69,69,4,69,69,4,4,69,4,4, + 4,69,69,69,4,69,3,69,69,69,69,69,3,4,3,69, + 248,25,248,25,248,25,248,25,25,25,217,25,25,25,217,25, + 25,25,217,217,25,217,217,25,155,25,25,25,217,25,25,25, + 217,25,25,25,25,217,25,25,25,155,25,25,217,25,25,25, + 25,25,248,25,25,25,25,248,25,25,248,25,25,25,248,25, + 25,25,248,25,248,248,25,248,25,248,248,248,25,248,25,248, + 25,25,248,25,248,25,248,25,248,25,248,25,25,25,25,25, + 155,25,25,25,25,25,155,25,25,25,25,25,25,217,217,217, + 217,217,217,217,217,25,155,25,217,25,217,133,25,25,217,25, + 155,25,217,36,25,133,155,217,217,217,217,217,25,217,133,217, + 25,217,217,133,25,155,155,25,25,155,25,155,25,25,25,25, + 25,25,25,25,133,217,25,217,36,25,133,217,133,217,217,133, + 217,155,217,155,133,217,217,133,217,217,217,155,217,217,217,26, + 8,8,8,8,26,12,243,26,150,17,17,17,150,132,219,12, + 132,150,12,17,132,150,219,211,26,150,17,17,17,132,132,219, + 150,17,132,12,17,132,150,26,211,26,150,17,219,150,150,132, + 219,12,17,132,12,17,132,132,26,211,26,150,17,17,17,150, + 132,219,150,219,150,12,17,132,132,26,243,26,150,17,17,17, + 150,17,219,150,17,150,12,17,132,150,26,109,26,150,17,219, + 17,150,132,219,12,17,150,12,17,17,132,26,211,26,150,17, + 17,17,150,132,219,150,17,150,12,17,132,150,26,109,26,150, + 17,17,17,150,132,219,12,17,132,12,17,132,132,26,109,42, + 150,17,219,17,150,132,219,150,17,150,150,17,132,132,26,211, + 26,150,17,17,17,150,132,219,12,17,132,12,17,132,132,26, + 211,26,150,17,17,17,150,132,219,12,17,17,150,17,132,150, + 26,109,26,150,17,17,17,150,132,219,12,150,132,17,17,132, + 132,26,109,26,150,17,17,17,150,132,219,150,219,17,12,17, + 187,132,26,211,26,12,17,17,17,132,150,219,12,219,150,12, + 17,132,132,26,243,26,150,17,17,17,150,132,219,12,17,150, + 17,17,132,132,26,211,26,150,17,17,17,150,132,219,12,17, + 150,17,17,132,150,26,243,26,150,17,17,17,150,132,219,12, + 17,132,12,17,132,132,26,109,26,150,17,17,17,150,132,219, + 150,132,150,17,17,132,150,26,8,12,8,8,7,8,8,191, + 69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69, + 69,69,69,69,69,69,69,69,174,69,69,69,121,121,69,69, + 69,69,69,69,69,3,69,4,69,4,3,69,3,4,69,69, + 69,3,4,4,69,69,69,4,4,4,3,4,4,69,4,3, + 248,25,248,25,248,25,25,248,25,25,25,25,25,25,217,217, + 217,25,217,217,25,217,25,217,25,155,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,248,25,248,25,248,25,248,248,25,248,248,25,25,25,248, + 25,25,248,25,25,248,248,248,248,248,25,248,248,248,25,248, + 25,248,25,25,25,248,25,248,25,248,25,248,25,25,25,25, + 25,25,25,25,25,25,25,25,155,25,25,25,25,25,25,25, + 217,25,217,25,155,25,25,217,25,217,25,217,217,25,133,217, + 25,155,25,155,36,25,25,217,217,25,155,133,217,25,217,25, + 155,25,217,25,25,25,155,155,25,155,25,133,155,155,133,25, + 133,25,155,25,217,25,217,133,217,36,217,25,217,25,217,25, + 25,133,217,217,155,155,217,155,155,217,133,217,133,25,217,12, + 8,8,8,139,17,12,8,26,150,219,17,17,17,17,219,12, + 219,150,17,17,26,187,26,109,26,150,17,150,17,17,17,219, + 150,17,132,132,219,26,132,26,109,26,150,17,17,17,17,17, + 219,150,17,132,132,17,26,132,26,109,26,150,17,150,17,17, + 17,219,150,17,132,17,219,26,150,26,109,26,150,17,17,17, + 132,17,219,150,219,150,132,219,26,150,26,109,26,150,17,17, + 17,17,17,219,150,17,132,17,132,26,132,26,109,42,150,219, + 17,17,17,17,219,150,17,132,17,219,26,150,26,109,26,150, + 219,17,17,17,17,219,150,17,132,132,17,26,132,26,211,26, + 150,17,17,17,17,17,219,150,17,17,17,17,26,132,26,109, + 26,150,219,17,17,17,17,219,150,17,132,132,17,26,132,26, + 109,26,150,219,17,17,17,17,219,150,132,132,132,219,26,132, + 26,109,26,150,219,17,17,17,17,219,12,17,150,219,17,26, + 132,26,109,26,150,17,17,17,17,17,219,150,150,132,17,132, + 26,132,26,109,26,150,17,17,17,17,17,219,150,17,132,17, + 17,26,150,26,109,26,150,219,17,17,17,17,219,150,17,150, + 17,17,26,132,26,109,26,150,219,17,17,17,17,219,150,17, + 150,17,219,26,150,26,211,26,150,219,17,17,17,17,219,150, + 17,132,17,17,26,132,26,109,26,150,17,17,17,17,17,219, + 12,132,150,132,219,26,150,26,8,12,8,8,8,7,8,69, + 121,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69, + 69,121,69,69,121,125,121,69,69,69,69,69,69,121,121,121, + 121,69,69,69,69,4,69,4,4,4,4,69,69,4,3,4, + 69,69,69,4,4,4,125,69,69,69,69,69,3,69,4,4, + 248,248,248,248,248,248,25,25,25,25,25,25,25,25,25,25, + 25,155,25,25,25,25,155,25,155,25,25,25,25,25,25,25, + 25,25,248,25,25,248,25,25,25,25,25,25,25,25,25,25, + 25,25,248,25,248,248,248,25,25,248,25,25,25,25,248,25, + 25,248,25,248,248,248,248,25,248,248,248,248,25,248,248,248, + 248,25,248,248,25,248,25,248,25,248,25,248,25,248,25,25, + 25,25,25,217,25,25,25,25,25,25,25,217,25,155,25,217, + 25,25,25,25,25,217,25,155,25,25,217,25,25,217,217,25, + 155,25,217,25,25,155,217,133,25,25,217,25,25,217,133,217, + 25,155,25,155,155,133,25,25,25,155,25,217,25,25,217,25, + 217,217,25,25,133,25,217,25,217,25,25,217,133,217,25,217, + 217,25,133,25,133,217,217,133,217,217,217,217,217,217,25,26, + 67,141,12,139,26,17,243,42,12,17,150,17,150,17,219,150, + 132,17,150,219,17,187,219,243,26,17,17,17,17,150,150,42, + 12,132,17,12,219,17,187,219,243,42,12,17,17,17,150,17, + 219,12,132,12,17,219,17,187,219,243,42,12,219,17,17,150, + 12,42,12,132,17,150,17,17,187,17,109,42,12,17,150,17, + 17,17,42,12,132,17,12,219,17,187,17,243,42,12,219,150, + 17,150,17,219,12,132,12,132,219,17,187,17,109,26,12,17, + 150,17,150,12,42,12,132,12,132,17,17,187,17,243,42,12, + 17,150,17,150,17,219,12,132,12,17,219,17,187,17,243,42, + 12,219,150,17,150,12,42,12,132,150,132,219,17,187,219,243, + 42,12,17,150,17,150,150,219,12,132,17,12,219,17,187,219, + 243,42,12,17,150,17,150,12,26,12,219,12,17,17,17,187, + 17,243,42,12,17,150,17,150,132,219,150,132,12,12,219,17, + 187,17,243,42,12,17,150,17,150,12,26,12,219,17,150,219, + 17,187,219,243,219,12,219,150,17,150,17,219,12,132,12,132, + 219,17,187,17,243,42,12,17,150,17,150,132,219,12,132,17, + 132,219,17,187,219,243,42,12,17,150,17,150,150,219,12,132, + 17,150,219,17,187,17,243,42,12,17,150,17,150,17,219,12, + 132,17,150,219,17,187,17,243,26,17,17,150,17,150,12,26, + 150,219,17,17,17,187,12,26,8,12,7,8,8,8,8,191, + 69,69,69,69,69,69,69,121,69,69,69,69,69,69,69,69, + 69,69,69,174,69,69,69,69,69,69,121,125,69,69,69,69, + 69,69,69,69,69,69,69,69,69,4,69,4,4,69,69,69, + 4,4,4,69,125,69,69,69,69,174,69,69,69,4,3,69, + 248,248,248,248,248,25,248,25,248,25,25,25,25,25,25,25, + 25,25,155,25,155,25,25,25,155,25,25,217,25,25,25,25, + 25,25,25,25,248,25,25,248,25,248,25,25,25,248,25,248, + 25,25,248,25,248,25,248,248,25,248,248,248,248,25,248,248, + 25,248,25,248,25,248,248,248,248,248,248,248,248,25,25,25, + 25,248,25,248,25,248,248,25,248,25,248,25,25,248,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,155,25, + 155,217,25,155,25,25,25,217,25,155,25,155,25,25,217,25, + 25,25,25,155,25,25,217,217,217,25,217,217,25,25,217,25, + 25,25,217,25,217,25,155,155,25,155,25,155,155,25,155,25, + 25,25,25,36,25,25,25,133,217,133,217,25,25,25,133,25, + 217,36,217,25,25,133,36,155,217,217,217,133,217,217,217,12, + 8,7,8,7,219,12,243,26,17,219,12,17,150,219,219,17, + 132,17,17,219,17,12,26,150,42,17,17,12,17,17,17,219, + 17,132,17,17,17,17,187,26,150,42,17,17,150,17,150,219, + 219,17,132,17,17,17,17,187,26,150,42,17,17,12,17,150, + 17,219,132,132,17,17,17,17,187,26,150,42,17,219,12,150, + 150,17,219,132,132,17,17,17,17,187,26,150,26,17,17,12, + 17,150,219,219,17,132,17,17,17,17,187,26,150,26,17,219, + 12,17,150,219,219,132,132,17,17,219,17,187,26,150,26,17, + 219,12,17,150,219,219,17,132,17,17,17,17,187,42,150,26, + 17,219,12,17,150,219,219,132,219,17,12,17,17,187,26,150, + 26,17,219,150,17,17,219,219,17,150,17,17,17,17,187,26, + 150,26,17,219,12,17,150,132,219,150,219,12,17,17,17,187, + 26,150,26,17,219,12,17,17,17,183,17,132,132,17,17,17, + 187,26,150,42,17,219,150,17,150,219,219,150,132,17,17,219, + 17,12,26,12,42,17,17,150,17,150,219,219,132,132,17,17, + 17,17,187,26,150,26,17,219,12,17,17,17,219,219,150,17, + 17,17,17,187,26,150,42,17,219,12,17,17,219,219,132,132, + 17,17,17,17,187,42,150,26,17,219,12,17,150,219,219,17, + 150,17,17,17,17,187,26,150,42,17,17,17,12,150,219,219, + 150,132,17,17,17,17,150,26,8,26,8,7,8,8,8,121, + 121,69,69,69,121,69,121,69,69,69,69,69,69,69,69,69, + 69,69,121,69,69,69,121,69,69,69,121,121,69,69,69,69, + 121,121,69,69,4,4,4,3,69,4,69,69,4,4,4,69, + 69,69,69,69,69,3,4,69,69,69,3,3,4,69,3,4, + 248,248,248,248,248,248,248,248,25,25,248,120,25,25,25,25, + 25,25,25,25,25,25,25,25,25,155,25,25,25,25,25,25, + 25,248,25,248,25,25,248,25,248,25,248,25,25,25,25,248, + 25,25,248,25,25,248,248,248,248,248,25,248,248,248,25,248, + 248,25,248,25,248,248,248,248,248,248,248,248,248,248,248,25, + 248,248,25,248,248,25,248,248,248,25,248,248,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,133,25, + 155,25,25,25,155,25,217,25,25,217,25,25,25,217,25,25, + 133,155,25,25,25,25,25,25,25,25,25,25,25,25,133,25, + 25,25,25,25,25,25,25,25,25,25,25,217,155,25,217,133, + 25,25,25,217,217,36,133,217,133,25,217,217,25,25,155,26, + 12,8,12,8,26,26,219,219,17,26,17,17,12,17,26,132, + 17,17,132,219,17,187,26,150,219,219,26,17,17,12,17,219, + 150,17,17,219,183,12,12,26,150,219,219,219,26,17,12,17, + 219,150,17,17,132,219,17,12,26,150,219,219,26,17,17,17, + 17,219,17,17,17,219,183,17,132,26,150,219,17,26,17,17, + 17,17,219,219,12,219,132,219,17,17,26,150,219,219,26,17, + 17,12,17,219,132,17,17,219,219,17,17,26,132,219,17,26, + 17,17,17,17,219,219,17,219,132,219,17,17,26,150,219,17, + 26,17,17,12,17,219,132,17,17,132,219,17,12,26,150,219, + 17,26,17,17,17,17,219,17,12,219,132,219,17,12,26,150, + 219,17,26,26,17,12,17,219,132,17,219,132,219,17,12,26, + 150,219,17,26,17,17,17,26,219,17,17,219,132,219,17,12, + 26,150,219,17,26,17,17,12,17,26,17,17,219,132,219,17, + 12,26,150,219,17,26,26,17,17,17,219,17,17,17,219,219, + 17,187,26,150,219,219,26,26,17,12,17,219,17,17,219,132, + 219,17,17,26,150,219,17,26,17,17,17,17,219,132,17,17, + 132,219,17,12,26,150,219,17,26,17,17,12,17,219,17,12, + 219,132,219,17,187,26,150,219,17,26,17,17,12,17,219,132, + 17,219,132,219,17,12,26,150,219,219,26,17,17,17,17,26, + 219,12,17,132,219,17,187,26,8,12,8,7,7,8,8,121, + 191,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69, + 69,121,69,69,121,174,69,69,69,69,69,69,69,69,69,69, + 69,69,69,69,69,69,69,69,4,69,4,4,69,69,69,69, + 3,69,69,69,69,69,69,69,69,69,69,69,69,69,4,4, + 248,25,248,248,248,248,248,25,248,25,25,248,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,248,25,248,25,248,25,248,25,25,248,25,248,25,248, + 25,248,25,248,25,25,248,25,248,248,25,248,25,248,25,25, + 248,25,248,248,25,248,248,248,248,248,248,25,248,25,248,248, + 25,248,248,248,25,248,248,25,248,248,25,248,25,248,25,248, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,155,25,25,25,25,25,155,25,25,25,217,25,25,25,25, + 25,217,133,25,25,25,133,25,25,133,25,25,25,25,25,25, + 25,25,25,133,25,25,133,25,25,25,155,25,25,25,25,25, + 25,25,25,133,25,25,25,25,217,25,133,25,25,25,217,25, + 155,133,25,133,25,217,217,25,217,217,217,133,217,248,217,42, + 26,12,26,26,42,42,122,0,42,122,122,0,122,42,0,122, + 122,122,122,122,42,42,42,187,122,42,122,122,0,122,122,0, + 122,122,122,122,0,183,42,42,187,122,42,122,122,0,122,122, + 122,122,122,122,0,122,42,42,42,187,122,42,122,122,0,122, + 42,122,122,122,122,122,122,42,42,42,187,0,122,122,122,0, + 122,42,122,122,122,122,0,122,42,42,42,187,0,42,122,122, + 0,122,42,0,122,122,122,0,122,42,42,42,187,0,42,122, + 122,0,122,42,122,122,42,122,0,122,42,42,42,187,0,122, + 122,122,0,122,42,0,122,122,122,0,122,42,42,42,187,0, + 42,122,122,0,122,42,0,122,122,122,0,122,42,42,42,187, + 0,42,122,122,122,122,42,122,122,122,122,0,122,42,42,42, + 187,0,122,122,122,0,122,42,122,122,42,122,0,0,183,42, + 42,187,0,122,122,122,0,122,42,0,122,42,0,0,122,42, + 42,42,187,0,42,122,122,0,122,42,122,122,42,122,122,122, + 42,42,42,187,122,42,122,122,0,122,42,122,122,122,122,0, + 122,42,42,42,187,0,42,122,122,0,122,42,122,122,122,0, + 0,122,42,42,42,187,0,42,122,122,0,122,42,122,122,122, + 122,0,122,42,42,42,187,0,122,122,122,0,122,42,0,122, + 42,0,0,0,183,42,42,187,122,42,122,122,0,122,42,122, + 122,122,122,0,122,42,42,26,187,42,42,42,42,26,12,121, + 121,69,69,69,121,69,69,69,69,69,69,69,69,69,69,69, + 69,69,69,69,121,121,121,69,69,69,69,121,121,121,121,125, + 69,69,69,69,69,69,69,69,3,69,69,4,4,69,4,69, + 69,69,69,69,69,125,69,69,69,69,69,69,3,69,69,69, + 248,248,248,248,102,25,102,25,248,25,25,25,248,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,248,25,248, + 25,248,25,248,25,248,25,248,25,248,25,248,25,248,25,248, + 25,25,248,248,248,248,248,248,248,25,248,248,248,248,248,248, + 248,248,248,248,71,248,248,25,248,25,248,248,248,248,248,248, + 248,248,25,248,248,248,248,25,248,248,25,248,25,248,25,25, + 25,25,248,25,25,248,25,248,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,217,25,25,217,25,25,25,120,133,25,120, + 25,25,217,25,25,25,25,133,25,25,25,133,217,25,25,25, + 25,25,25,120,25,25,25,133,25,25,25,133,217,133,25,25, + 25,25,217,217,217,25,133,217,133,25,217,217,25,25,217,0, + 150,182,243,8,183,42,26,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,42,122,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,42,122,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,42,122,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,42,122,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,42,122,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,42,122,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,42,122,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,42,122,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,42,122, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,42, + 122,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 42,122,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,42,122,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,42,122,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,42,122,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,42,122,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,42,122,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,42,122,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,42,42,26,12,8,12,8,12,121, + 121,69,121,69,69,69,69,69,69,69,121,69,69,121,69,69, + 69,69,69,69,69,69,69,121,69,125,121,69,69,121,121,69, + 125,69,125,69,125,4,4,69,69,69,3,69,69,69,69,69, + 3,69,69,69,69,121,125,69,69,69,69,69,69,125,69,4, + 71,25,248,248,248,25,248,248,248,248,25,25,248,25,25,25, + 248,25,25,248,25,248,25,25,25,25,25,25,25,25,25,25, + 25,25,248,25,248,25,248,25,248,25,248,25,25,248,25,25, + 248,25,248,25,25,248,248,25,248,248,248,25,248,25,248,248, + 248,248,248,25,248,248,71,248,248,25,248,248,25,248,248,25, + 248,248,248,248,248,25,248,248,248,248,25,248,25,248,25,248, + 25,248,25,25,25,25,248,25,25,248,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,120,25,25,25, + 25,25,25,25,25,25,120,25,25,25,25,25,25,25,25,120, + 25,25,133,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,217,25,217,25,217,133,25,133,217,25,25,42, + 8,7,8,67,26,26,26,0,42,122,42,122,42,122,42,122, + 122,122,122,42,243,219,26,17,0,42,122,42,122,42,122,42, + 42,122,122,42,122,8,219,26,17,0,42,42,122,122,42,122, + 42,122,122,122,122,42,243,219,26,17,0,42,122,42,122,122, + 42,122,42,122,122,122,42,243,219,26,12,122,42,122,42,122, + 122,42,122,42,122,122,122,42,243,219,26,17,0,42,122,42, + 122,122,42,122,42,122,42,122,42,243,219,26,17,0,42,122, + 42,122,122,42,122,122,122,42,122,42,243,219,26,12,122,42, + 122,42,122,122,42,122,42,122,122,122,42,243,219,26,17,0, + 42,122,42,122,122,42,42,122,122,122,122,42,243,219,26,17, + 0,42,122,42,122,122,42,122,42,122,122,122,42,243,219,26, + 12,122,42,122,42,122,122,42,122,122,122,42,122,78,12,219, + 26,12,122,42,122,42,122,42,122,122,42,122,122,122,42,243, + 219,26,12,0,42,42,122,122,42,122,122,122,42,122,122,42, + 243,183,26,17,0,42,42,122,122,42,122,42,122,42,122,122, + 42,243,219,26,17,0,42,122,42,122,122,42,122,42,122,122, + 122,42,243,219,26,17,0,42,122,42,122,122,42,122,42,122, + 122,122,42,243,219,26,12,122,42,122,42,122,42,122,122,42, + 122,42,122,78,12,219,26,17,0,42,122,42,122,42,122,42, + 122,122,42,122,42,12,219,26,12,26,7,7,7,7,8,69, + 121,121,69,121,69,69,121,69,69,69,69,69,69,69,69,69, + 69,121,121,121,121,121,69,174,121,69,121,121,69,69,121,121, + 121,121,69,69,69,69,3,69,69,69,69,69,69,69,69,69, + 69,69,69,121,69,121,69,69,69,69,69,125,69,174,125,69, + 248,248,248,248,71,248,248,248,248,248,248,248,25,25,248,25, + 25,25,25,25,248,25,248,25,25,25,248,25,25,248,25,248, + 25,25,248,25,248,248,248,25,248,25,25,248,25,25,248,25, + 248,25,248,248,248,25,102,25,248,248,248,248,248,248,248,248, + 248,248,25,71,248,248,25,248,248,248,248,248,248,248,248,248, + 248,248,248,248,248,248,248,248,25,248,248,25,25,248,25,248, + 25,25,248,25,248,25,248,25,25,248,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,120,25,25,25,25,25,25,120,25,25,25,25,25,25,120, + 25,120,120,25,25,25,25,25,133,25,25,25,25,25,120,25, + 248,248,120,25,25,25,25,25,133,25,25,25,25,25,25,133, + 25,133,25,133,217,133,25,217,217,25,217,25,25,25,25,26, + 8,67,8,67,219,17,17,42,49,139,139,8,139,8,8,139, + 8,8,139,139,101,17,26,12,42,49,139,139,8,139,8,8, + 211,8,8,139,139,101,17,26,12,42,49,139,8,8,139,8, + 8,139,8,8,139,139,101,17,26,12,42,49,139,139,8,139, + 8,139,211,8,8,139,139,101,17,26,12,42,49,139,139,8, + 139,211,8,139,8,8,139,139,101,17,26,12,42,49,139,139, + 8,8,8,139,211,8,8,139,139,101,17,26,12,42,49,139, + 139,8,139,211,8,139,8,8,139,139,101,17,26,12,42,49, + 139,139,8,8,8,139,211,8,8,139,139,101,17,26,12,42, + 49,139,139,8,139,211,8,139,8,8,139,139,101,17,26,12, + 42,49,139,139,8,8,8,139,211,8,8,139,139,101,17,26, + 12,42,49,139,8,139,139,8,139,8,8,8,139,139,49,12, + 26,12,42,49,139,139,8,139,8,8,139,8,8,139,139,101, + 17,26,12,42,49,139,8,139,139,8,8,139,8,8,139,139, + 101,17,26,12,42,49,139,8,8,139,8,8,139,8,8,139, + 139,101,17,26,12,42,49,139,139,8,8,211,8,139,8,8, + 139,139,101,17,26,12,42,49,139,139,8,8,211,8,139,8, + 8,139,139,101,17,26,12,42,49,139,8,8,139,8,211,8, + 8,8,139,139,49,12,26,12,42,49,139,8,139,139,8,8, + 139,8,8,139,139,49,17,26,8,26,8,7,8,8,12,121, + 121,69,69,121,69,69,121,69,69,121,69,69,69,121,69,69, + 69,69,69,69,69,69,121,121,69,69,69,69,121,121,121,69, + 69,69,121,69,121,125,69,69,69,69,69,69,69,69,69,69, + 69,121,121,69,121,69,121,69,121,125,69,69,69,69,69,125, + 71,248,248,248,248,248,102,25,248,248,25,248,248,25,248,25, + 25,248,25,25,25,25,25,248,25,25,25,25,25,25,248,25, + 25,248,25,248,25,25,248,25,248,25,248,25,248,25,248,248, + 25,248,25,248,248,25,248,248,248,248,248,25,248,248,248,248, + 248,248,248,248,248,248,248,248,248,248,248,248,25,248,248,248, + 248,248,248,248,248,248,248,248,248,25,248,248,25,25,248,25, + 25,248,248,25,248,25,25,248,25,248,25,248,25,25,25,25, + 25,25,25,25,25,248,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,120,25,120,25,25,25,25,25,25,25, + 25,25,120,248,120,25,120,120,25,25,25,25,120,25,25,25, + 25,25,248,25,25,248,25,25,25,25,25,25,133,25,25,25, + 25,25,25,25,25,217,133,25,25,25,25,133,25,25,25,26, + 12,67,12,101,17,17,12,42,101,8,211,8,211,8,8,211, + 8,8,139,8,67,150,150,211,42,101,8,211,8,211,211,8, + 211,8,8,8,211,101,150,150,211,42,101,8,139,8,211,8, + 8,211,8,8,139,8,67,150,150,211,42,101,8,211,8,8, + 8,8,211,8,8,8,8,101,150,150,243,42,101,8,211,8, + 8,8,8,211,8,8,139,8,67,150,150,211,42,101,8,211, + 211,211,8,8,8,211,8,211,139,101,150,150,243,42,101,8, + 211,8,8,8,8,211,8,8,211,139,101,150,150,243,42,101, + 8,211,211,211,8,8,211,8,8,139,8,67,150,150,211,42, + 101,8,211,8,8,8,8,211,8,8,139,8,67,150,150,211, + 42,101,8,211,211,211,8,8,211,8,8,139,8,67,150,150, + 243,42,101,8,8,8,211,8,8,211,211,8,8,211,101,150, + 150,243,42,101,8,211,8,211,8,8,211,8,8,139,8,67, + 150,150,243,42,101,8,8,8,211,8,8,211,8,8,211,139, + 101,243,150,243,42,101,8,139,8,211,8,8,8,211,8,211, + 139,101,150,150,211,42,101,8,211,211,8,211,8,8,211,8, + 139,8,67,150,150,211,42,101,8,211,211,8,211,8,8,211, + 8,139,8,67,150,150,243,42,101,8,139,8,211,8,211,8, + 211,8,8,211,139,150,150,211,42,101,8,8,211,8,139,8, + 8,211,8,8,211,101,150,12,243,12,8,7,8,8,8,121, + 121,69,121,69,121,69,69,69,69,69,69,69,69,69,69,69, + 69,121,121,121,121,69,121,121,69,121,121,121,121,121,121,121, + 121,121,121,69,121,69,69,4,69,69,69,69,69,69,69,69, + 69,69,69,69,121,121,121,69,69,125,69,174,69,125,121,121, + 248,102,248,248,71,248,248,248,248,248,248,248,25,25,248,25, + 248,25,248,25,248,25,25,248,25,25,25,248,25,25,248,25, + 248,25,25,248,248,25,248,248,25,248,25,25,248,25,25,248, + 25,25,248,25,25,248,25,25,248,248,248,248,248,248,248,248, + 248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248, + 248,248,248,248,248,248,248,25,248,248,248,25,248,25,248,25, + 248,25,248,25,248,248,25,248,25,248,25,25,25,25,248,25, + 25,25,102,25,248,25,25,102,25,25,25,248,25,25,102,25, + 25,248,25,25,25,25,102,25,25,248,248,25,120,25,25,120, + 102,25,25,25,25,25,25,25,102,25,25,25,25,25,25,102, + 25,25,25,248,248,25,248,120,25,248,25,25,25,25,25,25, + 25,25,133,25,25,25,25,120,133,25,217,25,25,25,25,26, + 8,8,12,101,219,219,12,122,49,8,211,8,211,211,8,211, + 211,8,8,211,8,150,17,243,122,49,8,211,8,211,8,8, + 211,211,211,8,8,139,150,17,243,122,49,8,211,8,211,211, + 8,211,211,8,8,211,8,150,17,243,122,49,8,211,8,211, + 187,211,211,8,211,211,8,139,150,17,211,42,101,211,8,211, + 211,8,211,211,8,211,8,8,139,150,17,243,42,101,211,8, + 211,8,211,211,8,211,8,8,8,139,150,17,211,122,49,8, + 211,8,211,211,8,211,211,8,8,8,8,150,17,211,42,101, + 8,211,8,211,8,211,211,8,211,8,8,139,150,17,243,122, + 49,8,211,8,211,211,8,211,211,8,8,8,139,150,17,243, + 42,101,211,8,211,8,211,8,211,211,8,8,211,8,150,17, + 211,122,49,211,211,8,211,211,8,211,8,211,8,8,139,132, + 17,211,122,49,8,211,8,211,211,8,211,211,8,8,211,8, + 150,17,211,122,49,211,211,8,211,211,8,211,211,8,8,8, + 8,150,17,211,122,49,8,211,8,211,211,109,8,211,8,8, + 8,139,150,17,243,122,49,8,211,211,8,211,8,211,8,211, + 8,8,139,150,17,243,122,49,8,211,211,8,211,211,8,211, + 8,8,211,8,150,17,109,42,101,8,211,211,8,211,8,211, + 8,211,8,139,8,150,17,243,122,49,211,211,8,211,8,187, + 211,8,211,8,8,139,150,12,8,12,8,8,7,8,12,191, + 121,69,69,121,69,191,69,69,121,121,121,69,69,121,69,69, + 69,69,69,69,121,121,121,69,121,69,69,69,121,121,121,69, + 121,69,69,69,69,121,69,121,69,69,69,69,69,69,69,69, + 69,69,121,121,69,69,121,121,69,121,121,121,69,121,69,69, + 71,71,248,248,248,248,248,248,102,25,248,248,248,248,248,25, + 248,248,25,248,25,248,25,25,248,25,248,25,25,25,248,25, + 25,248,25,248,25,248,25,25,25,25,248,25,248,25,248,25, + 248,25,248,248,25,248,25,102,25,248,248,248,248,248,248,248, + 248,248,248,248,248,248,248,248,248,248,248,248,248,248,102,71, + 248,248,248,248,248,248,71,25,25,248,248,25,248,25,248,248, + 25,248,248,25,248,25,248,25,25,248,25,248,25,25,25,25, + 248,25,25,25,25,25,25,25,25,25,25,248,25,25,120,25, + 102,25,248,248,248,25,120,25,25,25,248,25,248,248,25,25, + 25,25,102,25,248,25,25,25,25,25,102,25,25,25,25,25, + 25,102,25,25,25,25,25,248,25,25,248,25,25,25,133,25, + 25,25,25,25,133,25,217,25,25,25,133,25,25,25,25,26, + 12,8,12,8,12,26,12,122,101,211,211,211,109,8,109,109, + 187,8,109,139,139,243,17,8,122,139,139,211,211,187,211,211, + 187,211,8,211,211,8,243,26,211,122,139,211,211,211,109,8, + 109,109,187,8,109,139,139,243,26,211,122,139,139,211,211,211, + 8,211,8,211,211,187,139,8,243,219,243,122,101,211,211,211, + 187,211,187,211,187,211,187,211,139,150,17,243,122,101,211,211, + 211,187,211,187,211,187,211,187,139,139,150,26,8,122,139,139, + 211,211,187,211,187,211,187,211,109,139,67,12,219,8,122,101, + 211,211,211,187,211,8,109,187,211,187,211,139,150,26,211,122, + 139,139,211,211,187,211,187,211,187,211,109,8,139,243,219,8, + 122,101,211,211,211,187,211,8,109,187,211,187,139,139,243,26, + 8,122,139,211,211,211,187,8,211,109,187,211,109,8,139,150, + 26,8,122,139,139,211,211,187,211,187,211,187,211,187,139,139, + 243,219,8,122,139,211,211,211,109,187,211,187,211,8,109,139, + 67,12,26,211,122,139,211,211,211,211,8,109,187,211,187,139, + 8,67,12,17,8,122,101,211,211,8,211,109,187,211,109,187, + 211,8,139,243,17,8,122,139,211,211,8,211,187,211,187,211, + 187,139,139,139,243,17,243,122,101,211,211,211,8,211,211,187, + 211,109,187,139,139,243,26,211,122,139,211,211,8,211,8,211, + 8,109,211,187,211,139,150,17,8,12,8,7,8,8,12,121, + 121,69,121,69,69,69,69,69,238,80,121,69,69,121,69,69, + 69,121,121,121,121,121,121,69,69,69,69,69,69,69,121,69, + 121,121,121,121,69,69,69,69,69,69,69,174,121,121,69,121, + 121,69,121,69,121,69,69,121,69,69,69,68,69,121,121,121, + 248,248,74,248,74,248,248,248,248,248,248,71,25,248,248,25, + 248,248,25,248,25,25,248,25,248,25,25,248,25,25,25,25, + 25,248,25,25,248,25,25,102,25,248,25,25,248,25,25,248, + 25,25,248,25,248,248,248,25,248,25,248,248,248,248,248,248, + 71,248,71,248,71,248,248,248,248,248,248,248,248,248,248,248, + 248,248,248,248,25,248,25,248,248,248,25,248,248,248,25,248, + 248,25,248,25,248,25,248,248,25,25,248,25,25,25,248,25, + 25,25,248,25,102,25,25,102,248,248,25,25,120,102,25,120, + 25,248,25,25,25,25,102,248,248,248,25,248,25,102,25,25, + 248,25,25,25,25,248,25,25,248,120,25,25,248,248,25,248, + 120,25,25,25,248,25,25,25,25,248,25,248,25,248,120,25, + 25,25,25,25,25,25,25,25,25,25,120,133,25,248,120,26, + 8,8,12,67,17,17,243,42,101,211,211,8,211,91,8,211, + 211,8,211,8,67,12,26,182,42,101,211,211,211,8,211,211, + 8,211,187,211,211,67,12,17,211,42,101,211,211,8,211,91, + 8,211,211,8,211,8,67,12,17,8,42,101,211,211,211,211, + 8,211,187,211,8,139,8,67,12,26,211,26,101,211,211,211, + 8,211,211,8,139,8,139,8,139,12,26,211,26,101,211,211, + 211,8,211,211,8,139,8,211,8,67,12,17,182,42,101,211, + 211,211,8,211,211,8,211,8,211,8,139,150,26,182,26,101, + 211,8,211,211,91,109,8,139,8,139,8,139,12,17,8,42, + 101,211,211,211,8,211,139,8,211,8,211,211,139,12,26,182, + 26,101,211,8,211,211,91,109,8,211,8,139,211,67,17,17, + 182,42,101,211,211,211,211,211,187,211,8,211,211,211,67,12, + 17,182,42,101,211,211,211,8,211,211,8,139,8,139,211,67, + 12,26,182,42,101,139,91,8,211,211,211,8,211,187,211,8, + 139,150,17,211,42,101,211,211,8,91,211,8,139,8,211,211, + 8,139,150,26,182,42,101,211,8,91,211,211,8,211,8,211, + 211,211,67,12,26,182,42,101,139,91,211,211,211,8,211,8, + 211,109,8,139,12,26,211,26,101,211,211,8,91,211,211,8, + 211,8,139,8,67,12,17,8,42,101,211,211,211,211,211,211, + 187,211,8,211,139,8,243,26,8,12,8,7,8,8,26,121, + 121,69,121,69,191,69,69,121,69,121,69,121,69,69,121,69, + 69,69,69,69,69,121,121,121,121,121,121,121,68,121,121,121, + 121,121,121,121,125,121,69,69,69,69,3,121,69,69,69,69, + 69,69,69,121,121,121,121,69,69,121,121,121,121,68,16,16, + 248,248,71,248,248,248,248,248,248,248,25,248,248,248,25,248, + 248,25,248,248,248,25,248,25,25,248,25,248,25,25,248,248, + 25,248,25,248,25,25,248,25,25,102,25,248,25,248,248,25, + 248,25,25,248,25,248,248,248,248,248,248,248,248,248,248,248, + 248,248,248,248,248,248,102,248,248,248,102,248,248,71,248,248, + 248,248,248,248,248,248,248,248,25,248,248,248,248,248,25,248, + 248,248,25,248,25,248,25,248,25,248,25,25,248,25,25,248, + 25,25,248,25,120,25,25,25,25,25,102,25,25,248,25,248, + 25,248,248,248,248,25,25,25,25,248,25,248,25,120,248,25, + 248,248,248,248,25,248,248,25,25,102,120,25,25,248,25,102, + 120,248,248,248,248,25,102,25,25,25,25,25,25,25,25,25, + 120,25,25,120,25,25,25,25,25,25,25,25,25,25,25,26, + 150,12,12,67,219,26,8,122,101,139,211,91,139,8,211,109, + 187,211,211,91,67,150,26,8,122,101,139,211,211,211,91,8, + 211,211,8,211,8,67,150,17,243,122,101,139,211,91,139,8, + 211,109,187,211,211,91,67,150,17,243,122,101,139,211,91,211, + 91,8,211,187,211,211,211,67,150,17,8,122,101,139,211,91, + 139,91,8,187,211,109,211,8,67,150,17,8,122,101,139,211, + 211,211,91,8,187,211,211,211,8,67,150,26,8,122,101,139, + 211,91,139,91,8,109,109,187,139,8,67,150,26,8,122,101, + 139,211,211,8,211,8,187,211,109,211,8,67,150,17,243,122, + 101,139,211,91,211,8,109,187,211,211,211,8,67,150,26,8, + 122,101,139,211,211,139,8,211,8,109,187,139,91,67,150,26, + 8,122,101,139,211,91,8,211,211,8,211,8,211,91,67,150, + 26,243,122,101,139,211,91,211,211,187,8,109,187,139,91,67, + 150,26,8,122,101,182,139,211,211,91,8,211,211,8,139,8, + 67,150,17,243,122,101,139,211,8,211,211,187,211,187,211,8, + 8,67,150,26,8,78,101,139,139,211,8,91,8,211,187,211, + 8,91,67,150,26,8,122,101,182,139,8,211,91,8,211,187, + 211,8,8,67,150,12,243,122,101,139,211,8,211,211,91,8, + 211,187,139,187,67,150,17,243,122,101,139,211,91,8,211,187, + 211,8,211,8,139,139,150,12,8,26,8,8,7,8,8,121, + 191,69,121,69,69,69,69,69,121,121,69,69,69,69,69,69, + 69,121,69,121,69,121,121,121,69,69,69,121,121,121,121,69, + 125,121,69,121,174,121,69,69,121,121,69,69,69,121,69,69, + 121,69,69,69,69,69,121,121,69,125,69,121,16,121,16,16, + 74,248,102,248,102,71,102,248,248,248,71,248,248,248,248,25, + 102,25,248,25,248,25,248,248,25,248,25,248,25,248,25,25, + 248,25,25,248,248,25,25,248,25,25,248,25,248,25,25,248, + 25,248,248,25,248,25,248,25,248,248,248,248,248,248,248,248, + 248,25,248,102,248,71,248,248,248,248,71,248,71,248,248,248, + 248,248,248,248,248,248,25,102,25,248,248,248,248,248,248,248, + 25,248,248,248,25,248,25,25,248,25,248,25,248,25,248,25, + 248,25,25,248,25,248,248,248,248,248,25,248,248,25,120,102, + 248,25,25,25,25,25,248,248,248,25,248,25,248,25,248,120, + 102,25,120,102,120,102,25,248,120,25,102,25,248,25,120,25, + 248,248,248,25,25,120,25,248,25,25,25,248,25,25,248,25, + 25,248,248,25,25,25,25,25,25,25,120,248,25,248,248,26, + 8,8,26,139,17,17,12,42,101,211,8,211,8,211,187,211, + 8,211,8,211,67,150,17,211,42,101,187,211,211,8,139,187, + 211,187,211,211,211,139,17,17,8,42,101,211,8,211,8,211, + 187,211,8,211,8,8,67,132,17,8,78,101,211,8,8,211, + 211,8,211,8,211,187,211,139,150,17,243,42,101,211,8,139, + 8,211,8,211,211,8,211,211,139,132,17,8,42,101,8,211, + 211,8,139,8,211,211,187,8,211,139,12,17,243,42,101,211, + 8,211,8,211,211,8,211,8,109,211,139,150,17,211,42,101, + 211,211,211,211,211,8,211,211,8,211,211,139,150,17,243,42, + 101,8,211,8,211,211,8,109,8,109,8,211,139,150,17,211, + 42,101,211,211,211,8,211,187,211,8,211,8,8,67,150,17, + 8,42,101,211,8,139,91,211,8,109,109,8,8,8,67,150, + 17,243,42,101,8,139,8,211,211,8,211,8,211,8,8,67, + 150,17,8,42,101,211,8,211,8,139,187,211,187,211,187,211, + 139,17,17,8,42,139,211,211,211,8,211,211,8,211,211,109, + 211,139,150,17,211,78,101,211,8,211,211,211,211,8,211,211, + 8,8,67,150,17,211,42,101,8,211,8,211,211,8,211,8, + 211,211,211,67,150,219,211,42,101,211,211,211,211,8,243,211, + 8,211,8,211,67,132,17,211,42,101,211,211,8,211,211,211, + 211,8,109,211,8,67,150,12,8,8,8,8,8,8,12,121, + 121,69,238,69,191,69,69,238,69,69,69,121,69,69,121,69, + 69,121,69,121,69,69,121,121,69,121,121,69,68,121,121,121, + 121,121,121,121,121,69,121,69,69,69,69,69,69,69,69,69, + 69,121,121,121,121,121,121,121,121,121,121,121,121,16,121,121, + 71,71,102,71,248,71,71,248,248,248,248,248,248,248,248,248, + 25,248,102,25,248,248,248,25,248,25,248,248,25,25,25,248, + 25,248,248,25,25,248,248,25,248,25,248,25,248,248,25,248, + 25,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248, + 71,248,248,248,248,248,248,71,248,248,71,248,248,248,248,248, + 248,248,248,248,248,248,25,248,248,248,248,248,248,248,25,248, + 248,25,248,25,248,25,248,248,25,25,248,25,248,25,248,25, + 248,25,248,248,248,25,102,25,25,248,25,102,120,102,25,248, + 248,248,248,248,248,25,25,248,248,248,248,248,248,102,25,25, + 248,25,25,248,25,120,102,25,25,25,248,25,248,102,25,25, + 248,248,248,248,248,248,248,248,248,248,25,248,25,38,120,25, + 25,25,25,248,25,248,25,25,25,25,25,25,25,25,25,26, + 150,8,12,8,17,187,12,122,101,139,139,139,211,211,211,211, + 211,211,8,8,139,132,17,109,122,101,139,211,211,8,139,211, + 139,211,8,211,8,67,132,17,109,122,101,139,139,139,211,211, + 211,211,211,211,211,8,139,150,17,109,122,101,139,139,139,211, + 139,109,211,211,139,211,8,139,150,17,109,122,101,139,211,211, + 211,139,109,211,211,109,8,8,139,150,17,109,122,101,139,211, + 211,211,139,109,211,139,211,211,8,67,132,12,109,122,101,139, + 139,139,211,139,109,211,211,211,211,8,139,150,17,109,122,101, + 139,211,211,8,211,109,109,211,211,8,8,139,150,17,109,122, + 101,139,139,211,211,211,211,211,211,211,211,8,139,150,17,243, + 122,101,139,211,211,211,211,211,211,211,211,139,187,139,150,17, + 109,122,101,139,211,139,211,211,211,211,211,211,211,8,139,150, + 12,109,122,101,139,211,211,211,211,211,211,211,211,211,8,139, + 150,17,109,122,101,139,211,211,211,139,211,139,139,211,211,8, + 67,132,17,109,122,101,139,211,211,211,211,109,211,211,211,8, + 8,139,150,17,109,122,101,139,211,211,211,139,109,211,211,8, + 211,8,139,132,17,109,122,101,139,211,211,139,211,109,211,211, + 109,211,91,67,132,17,109,122,101,139,211,211,8,139,109,109, + 211,211,211,91,101,150,17,243,122,101,139,211,211,8,211,211, + 109,211,211,8,91,67,150,17,8,12,8,8,7,8,8,121, + 191,121,69,80,69,238,69,69,121,69,69,121,121,69,121,69, + 69,69,121,69,121,121,69,121,69,125,121,121,121,121,121,121, + 125,121,121,121,121,121,121,69,69,174,69,174,174,121,121,69, + 69,69,69,121,121,69,69,121,121,121,16,16,16,16,16,16, + 102,248,71,248,74,248,248,248,248,248,248,102,248,248,248,248, + 248,248,25,248,25,248,248,248,25,248,25,25,248,248,25,248, + 25,25,248,248,25,25,248,25,248,25,248,248,248,248,248,248, + 248,25,248,248,248,248,248,248,248,248,248,248,248,248,248,248, + 248,248,248,71,248,248,248,248,248,248,248,248,248,248,71,248, + 248,248,248,248,248,248,71,248,248,248,248,248,248,248,71,248, + 248,248,248,248,25,248,25,248,248,25,248,25,248,25,248,248, + 25,248,248,25,25,248,25,248,248,248,248,25,248,25,248,120, + 248,248,248,248,248,248,248,248,248,25,248,248,120,120,248,248, + 248,248,248,25,248,248,25,248,248,248,248,248,25,25,248,244, + 248,25,248,248,25,248,25,120,248,248,248,25,120,248,25,120, + 38,25,248,25,248,25,248,120,248,25,25,120,102,248,248,26, + 17,8,12,8,219,26,12,122,67,139,8,8,211,211,91,211, + 8,109,211,8,67,132,219,211,42,49,139,211,211,211,211,211, + 109,211,211,211,211,139,150,219,211,78,67,211,211,8,211,211, + 211,211,139,187,211,211,67,132,26,211,122,67,211,211,211,8, + 211,211,109,211,8,211,211,67,132,219,211,122,49,139,8,211, + 139,8,211,109,211,211,211,211,67,132,219,211,78,49,211,211, + 139,8,211,211,211,187,8,211,211,139,132,219,211,122,67,139, + 8,211,211,8,91,211,211,8,211,211,67,132,219,211,122,49, + 211,139,211,211,211,91,211,109,211,211,211,67,132,26,211,78, + 49,211,211,8,211,211,61,211,109,8,211,211,67,132,219,211, + 122,49,211,211,211,211,211,211,211,8,211,8,211,67,132,219, + 211,122,49,211,139,211,8,211,91,211,187,211,211,211,67,132, + 26,211,122,49,211,139,211,211,211,109,109,139,187,211,211,67, + 132,219,211,122,67,139,211,211,211,211,211,211,187,8,211,211, + 139,132,219,211,78,49,211,211,211,211,211,211,109,109,211,211, + 211,67,132,26,211,122,49,211,211,8,139,8,91,211,109,211, + 211,8,67,150,219,211,122,49,211,211,139,8,211,91,109,211, + 8,211,8,139,17,26,211,122,49,211,211,211,211,211,91,211, + 211,8,211,8,67,132,26,211,122,49,211,211,211,211,211,109, + 211,211,211,211,8,8,12,219,8,12,8,8,8,8,12,121, + 191,69,191,69,191,69,69,121,69,121,69,69,69,69,69,69, + 69,69,121,121,69,121,121,121,121,121,121,16,121,16,121,69, + 121,121,121,121,121,69,69,121,121,121,125,121,121,121,69,121, + 69,121,121,121,69,121,121,69,121,121,121,16,121,16,16,121, + 71,102,248,248,74,248,74,248,102,71,248,248,248,248,248,248, + 248,248,248,248,248,25,248,71,25,248,248,25,248,248,25,25, + 248,248,25,248,248,248,248,25,248,248,25,248,248,25,248,248, + 248,25,25,248,248,248,248,248,248,248,248,248,248,71,248,248, + 248,248,248,248,248,248,248,71,248,248,71,71,248,248,248,248, + 248,102,25,248,248,248,248,248,248,248,248,102,248,248,248,248, + 25,248,25,248,248,25,248,25,25,248,248,25,248,248,25,248, + 25,248,248,248,248,248,248,248,25,248,248,25,248,248,248,248, + 248,248,248,248,248,248,25,248,248,248,248,248,248,248,248,120, + 248,248,248,248,248,248,248,248,248,25,248,248,248,25,25,248, + 71,25,248,244,248,71,248,248,248,248,248,248,120,248,248,248, + 120,25,248,25,120,25,25,25,248,248,25,25,25,248,248,26, + 12,12,17,8,17,187,12,42,101,139,139,139,139,139,139,211, + 139,211,139,211,101,12,26,109,122,101,139,139,139,211,139,211, + 211,211,211,139,139,139,12,26,211,122,101,139,139,139,139,139, + 211,211,139,139,139,211,139,150,26,211,42,101,139,139,211,139, + 211,139,211,211,139,139,211,139,12,26,211,122,101,139,139,139, + 139,211,61,139,211,211,139,139,139,150,26,109,122,101,139,139, + 139,211,139,211,139,139,139,139,139,139,12,26,211,122,101,139, + 139,8,139,67,211,211,211,211,139,139,139,12,26,211,122,101, + 139,139,139,139,139,139,139,211,211,139,139,139,150,26,109,122, + 101,139,139,139,139,139,139,139,211,211,139,211,139,12,26,211, + 122,101,139,139,139,139,139,211,61,139,139,139,139,139,150,26, + 211,122,101,139,139,139,139,139,139,139,139,211,139,211,139,150, + 26,211,122,101,139,139,139,139,139,211,211,139,139,139,211,139, + 150,26,211,122,101,139,139,139,211,139,211,139,139,139,139,139, + 101,12,26,109,122,101,139,139,139,139,139,211,139,211,211,139, + 211,139,150,26,211,122,101,139,139,139,139,139,139,211,211,211, + 139,211,139,12,26,211,122,101,139,139,139,139,139,139,211,139, + 211,139,139,67,150,26,211,122,101,139,139,139,139,139,139,211, + 139,211,139,139,139,150,26,109,122,101,139,139,139,139,139,211, + 211,139,211,139,139,67,12,17,8,12,8,7,8,8,8,121, + 191,69,69,69,69,191,69,69,238,238,69,69,121,69,121,121, + 69,121,69,69,69,121,121,121,121,121,121,121,121,16,121,121, + 121,121,121,121,121,121,69,121,69,121,121,69,69,121,69,121, + 69,69,69,121,69,121,121,121,121,16,16,16,121,16,16,16, + 248,71,74,74,248,74,248,248,71,248,248,248,248,248,248,248, + 248,102,25,248,102,248,248,25,248,248,248,248,248,248,248,25, + 248,248,248,248,248,25,248,248,248,248,248,248,248,248,248,248, + 248,248,71,248,248,248,248,248,248,248,71,248,248,248,248,248, + 248,248,248,248,248,71,248,248,248,71,248,248,71,248,248,248, + 248,248,248,248,248,248,248,248,248,248,248,248,248,248,25,248, + 248,248,248,25,248,248,248,248,248,248,248,248,248,25,248,248, + 248,25,248,248,248,248,25,248,71,248,248,248,248,248,248,248, + 248,248,248,248,248,248,71,248,248,248,248,244,248,248,248,248, + 248,248,248,248,248,248,248,248,25,71,248,248,248,102,248,248, + 120,248,102,248,248,120,248,248,248,248,248,248,248,248,248,120, + 248,248,25,102,25,120,38,25,25,25,25,248,248,248,248,26, + 12,243,17,8,26,26,187,42,187,187,26,91,91,187,26,91, + 26,91,26,91,182,132,17,8,122,8,91,26,91,91,26,91, + 91,26,91,26,91,8,132,17,109,42,8,187,26,91,26,91, + 26,91,26,91,26,91,182,132,17,243,162,8,187,26,91,91, + 91,26,91,26,91,26,91,8,132,12,243,42,187,17,91,26, + 91,91,12,26,91,91,26,91,8,17,12,243,42,8,91,26, + 91,91,91,26,91,26,26,91,26,182,132,12,243,42,187,17, + 91,26,91,91,26,91,26,91,26,91,182,132,17,243,42,91, + 91,26,91,26,91,26,91,26,91,26,91,8,132,12,243,42, + 8,187,26,91,91,26,91,26,91,91,26,91,182,132,17,243, + 42,8,91,26,91,26,91,91,12,91,26,91,26,182,17,17, + 243,42,8,12,26,91,26,91,26,91,26,91,26,91,182,132, + 17,243,42,12,91,26,91,26,91,26,91,26,91,26,91,182, + 17,17,243,42,8,91,26,91,26,91,26,91,26,91,26,91, + 8,132,12,243,42,8,91,26,91,91,91,26,91,26,91,26, + 91,182,132,12,12,78,8,91,26,91,26,187,91,91,26,91, + 26,91,182,132,17,243,42,8,26,91,26,91,187,26,91,26, + 91,12,26,182,132,12,12,78,8,26,91,91,26,187,91,26, + 91,26,91,26,182,132,17,8,78,8,91,26,91,91,26,91, + 26,91,26,91,12,182,150,26,8,12,8,8,8,8,8,191, + 69,191,191,69,121,80,191,69,69,69,121,69,69,69,69,121, + 69,121,121,121,69,69,121,69,69,121,121,16,16,16,16,121, + 121,121,121,121,121,125,121,69,121,69,69,121,121,69,121,121, + 121,121,121,69,121,121,121,121,121,16,121,16,16,121,121,121, + 74,248,248,102,248,71,71,248,248,248,248,248,248,248,248,248, + 25,248,248,25,248,248,248,248,248,248,25,248,248,25,248,248, + 248,25,248,248,248,248,248,25,248,248,25,248,248,248,248,248, + 248,248,248,248,248,248,248,248,248,248,71,248,248,71,248,248, + 248,248,248,248,248,248,248,71,248,248,71,248,71,71,248,248, + 248,248,248,248,248,248,248,248,102,248,248,248,248,71,248,248, + 248,25,248,248,248,25,248,25,248,248,25,248,248,248,25,248, + 248,248,25,248,248,71,248,248,248,248,248,248,248,248,248,248, + 248,248,248,248,248,248,248,248,248,248,248,248,248,248,25,248, + 248,248,248,248,248,248,248,71,25,248,248,248,120,248,248,248, + 244,25,248,248,248,248,248,248,248,248,248,248,248,25,248,248, + 248,120,120,248,248,120,120,25,25,248,25,25,25,248,71,219, + 12,12,26,139,219,42,12,0,26,187,219,219,26,187,183,26, + 26,219,219,26,8,12,26,8,0,219,219,219,219,219,42,219, + 187,42,219,219,219,8,12,26,211,0,26,187,219,26,219,26, + 183,26,42,219,219,26,8,12,26,8,0,26,187,219,42,219, + 42,219,187,42,219,219,219,8,12,26,8,0,26,17,219,219, + 219,219,187,183,26,219,219,219,8,12,26,8,0,219,219,219, + 219,219,183,187,183,26,187,183,26,8,12,26,211,0,26,17, + 187,183,183,26,187,183,26,219,219,26,8,12,26,8,0,219, + 219,17,219,219,26,187,183,26,26,219,219,8,17,26,211,0, + 26,187,219,219,219,42,187,183,42,219,219,26,8,12,26,243, + 0,26,219,26,26,219,219,183,183,183,26,219,26,8,12,26, + 243,0,26,219,219,219,219,26,187,183,26,219,219,26,8,12, + 26,8,0,219,17,26,219,219,26,187,183,42,219,219,26,8, + 12,26,8,0,219,219,219,219,219,187,183,187,183,26,219,219, + 8,12,26,8,0,26,219,26,26,42,26,183,26,26,219,219, + 26,8,12,187,8,0,219,219,219,219,26,42,183,183,26,219, + 219,26,8,12,26,211,0,219,219,219,219,26,26,187,183,42, + 26,183,26,8,12,187,211,0,219,219,219,219,26,42,187,183, + 219,219,219,26,8,12,26,211,0,219,219,26,26,26,42,187, + 183,26,219,42,26,8,150,12,8,26,8,7,8,8,8,16, + 121,69,69,191,69,69,69,121,69,238,69,121,121,69,69,69, + 121,121,69,121,121,69,69,121,121,121,121,121,121,16,121,121, + 121,16,121,121,121,125,174,121,121,121,69,69,121,69,69,69, + 69,69,121,121,69,121,69,121,121,191,121,16,16,16,16,16, + 71,102,71,74,71,71,71,102,71,71,71,102,248,248,248,248, + 248,248,248,248,248,248,248,248,25,248,248,25,248,248,248,248, + 248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248, + 248,248,248,248,248,248,248,248,71,248,248,248,71,248,248,248, + 248,248,248,71,248,71,248,248,248,71,248,102,248,248,248,248, + 248,71,248,248,248,248,248,71,71,248,248,248,248,25,248,248, + 248,25,102,25,248,248,248,248,102,25,71,248,248,248,71,248, + 248,248,71,248,248,248,248,248,248,248,248,248,71,248,248,248, + 248,248,248,248,248,248,248,248,248,248,248,248,248,248,71,248, + 248,248,244,248,244,248,248,25,71,248,25,25,248,120,248,248, + 248,71,248,248,248,248,248,120,248,244,248,248,248,244,248,248, + 120,102,25,120,25,248,25,248,248,25,248,248,248,102,248,26, + 8,243,17,8,26,162,12,0,139,139,139,139,67,139,139,67, + 67,139,139,139,8,150,219,211,0,139,101,139,139,139,67,139, + 139,67,139,139,139,139,150,219,243,0,139,139,139,67,139,99, + 139,67,67,139,139,139,8,150,219,211,0,139,67,139,67,139, + 67,139,139,139,139,139,139,139,132,219,211,0,139,67,139,139, + 67,139,139,139,139,139,139,139,139,132,219,211,0,211,139,139, + 139,139,139,139,139,67,8,101,139,139,132,219,243,0,139,67, + 139,139,139,67,139,139,139,139,139,139,8,150,219,211,0,139, + 139,139,139,139,67,139,139,139,139,139,139,139,150,219,243,0, + 139,139,139,139,139,67,139,139,139,139,101,139,8,150,219,211, + 0,139,139,67,67,139,139,139,139,139,139,139,139,139,150,219, + 211,0,211,49,139,139,139,67,139,139,139,139,139,139,8,132, + 219,211,0,211,139,67,139,139,139,67,139,67,139,139,139,8, + 150,219,211,0,139,101,139,139,139,139,139,139,139,139,139,139, + 139,132,219,211,0,211,139,67,182,67,67,139,67,139,139,101, + 139,8,132,219,211,0,211,101,139,139,67,67,139,139,67,139, + 139,139,8,150,219,243,0,139,101,139,139,67,67,139,139,67, + 139,101,139,8,132,219,243,0,139,139,139,139,67,67,139,139, + 139,139,139,139,139,150,219,243,0,211,139,67,67,67,139,139, + 139,182,139,139,139,139,17,26,8,8,8,8,8,8,8,191, + 191,191,191,69,69,191,69,121,69,69,191,80,69,69,69,121, + 69,121,121,69,121,69,121,121,121,16,16,16,16,121,121,16, + 16,121,16,16,121,16,121,121,121,69,69,121,69,121,121,69, + 69,121,69,69,121,121,121,121,121,16,121,121,16,16,16,16, + 74,71,71,71,248,102,71,248,102,248,71,71,248,248,102,248, + 248,102,248,25,248,248,248,102,248,248,248,248,248,248,248,248, + 248,248,248,248,248,248,248,248,248,248,248,248,248,71,248,248, + 248,248,248,71,248,248,248,248,248,248,71,248,71,71,71,248, + 248,248,248,248,248,71,248,248,248,248,71,248,71,71,71,102, + 248,71,248,71,71,71,248,248,71,71,248,248,71,248,248,248, + 248,248,248,248,248,25,248,248,71,25,248,248,248,248,248,248, + 248,25,248,248,248,248,248,248,248,248,248,248,248,248,248,248, + 248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248, + 248,248,248,248,248,248,71,25,25,248,248,71,248,248,248,248, + 248,248,248,248,248,248,248,248,248,248,248,248,248,102,120,248, + 120,248,25,102,25,248,248,120,248,38,120,25,248,71,25,26, + 12,243,26,139,219,183,12,0,8,139,139,109,139,211,211,111, + 211,8,139,67,243,150,122,243,0,8,139,139,211,211,211,211, + 187,211,8,139,211,8,150,122,243,0,8,139,211,139,211,139, + 211,109,8,8,139,67,8,150,122,243,0,187,139,211,211,211, + 211,211,211,8,211,139,139,243,150,122,243,0,187,139,211,211, + 211,211,211,211,8,211,139,182,8,150,122,243,0,8,139,211, + 211,211,211,211,211,211,211,139,139,243,150,122,243,0,187,139, + 139,211,211,211,139,211,8,211,139,67,243,150,122,243,0,8, + 139,139,211,211,211,211,139,109,211,139,139,243,150,78,243,0, + 8,139,211,211,211,211,211,211,8,8,139,182,211,150,122,243, + 0,8,211,211,139,211,211,211,211,211,211,139,182,8,150,122, + 243,0,187,139,139,139,211,211,211,211,8,211,139,67,8,150, + 122,243,0,8,139,139,211,211,211,211,187,8,211,139,67,243, + 150,122,243,0,8,139,139,139,211,211,211,211,211,211,139,139, + 243,150,122,243,0,8,211,211,139,109,211,211,211,211,8,139, + 182,8,12,122,243,0,8,139,139,211,211,211,139,187,211,8, + 139,67,243,150,78,243,0,8,139,139,211,109,211,211,211,8, + 211,139,139,8,12,122,243,0,8,139,139,211,109,211,139,8, + 8,139,211,139,243,150,122,243,0,8,211,211,211,211,139,139, + 211,8,139,211,139,8,150,42,8,12,8,8,8,8,8,16, + 121,69,238,121,80,191,69,191,69,80,191,69,191,69,121,69, + 121,69,121,121,69,69,69,121,121,191,121,121,16,16,121,121, + 16,121,121,16,121,121,69,121,121,121,69,121,121,69,121,121, + 69,121,121,69,69,121,121,121,121,16,16,121,121,16,121,16, + 71,248,71,102,74,71,248,71,71,248,248,248,248,248,248,71, + 25,248,248,248,248,248,248,25,25,102,25,102,25,248,248,248, + 248,248,248,248,248,248,248,248,248,248,248,248,248,248,71,248, + 248,248,248,248,248,248,71,248,248,71,248,71,248,248,248,71, + 71,71,248,248,248,248,248,71,248,248,248,71,248,248,248,248, + 71,248,71,248,248,248,248,71,248,248,71,248,25,248,248,248, + 248,248,248,248,248,248,248,248,25,71,248,248,248,248,248,248, + 248,71,248,248,248,71,248,248,248,71,248,248,248,71,248,71, + 248,248,248,248,248,248,248,248,248,120,71,244,248,248,248,248, + 248,248,248,248,248,248,248,102,244,248,71,248,248,248,248,102, + 244,248,71,248,244,248,71,71,248,248,248,248,120,248,248,248, + 102,248,248,244,248,102,25,25,25,248,25,248,25,248,71,26, + 12,12,26,8,122,42,17,0,8,211,109,211,109,211,8,211, + 211,211,243,139,211,187,42,211,0,8,211,211,8,109,211,8, + 211,211,211,8,182,109,17,26,211,0,8,211,139,187,139,187, + 211,109,109,211,211,139,109,187,26,211,0,8,211,211,211,109, + 109,8,109,109,8,8,182,243,187,26,211,0,8,139,211,211, + 211,211,8,187,109,8,8,139,211,187,42,211,0,8,139,211, + 211,211,211,8,211,187,211,243,67,243,187,26,211,0,8,211, + 109,211,109,139,187,109,109,8,243,139,243,187,42,211,0,8, + 139,109,211,211,109,8,187,211,211,8,182,211,187,42,211,0, + 8,139,211,211,109,211,8,187,211,211,243,67,243,187,42,211, + 0,211,139,211,8,211,211,8,8,211,8,8,139,109,187,42, + 211,0,8,211,109,211,109,109,8,109,109,8,243,139,211,187, + 42,211,0,8,211,109,139,109,211,211,211,211,8,8,182,211, + 187,42,211,0,8,211,109,8,109,211,8,187,109,8,8,182, + 243,187,42,211,0,8,211,139,187,139,109,109,139,187,211,8, + 139,243,132,26,211,0,8,211,109,211,109,109,8,211,211,211, + 243,139,211,187,42,211,0,8,139,109,211,211,109,211,109,109, + 211,211,67,243,132,26,211,0,8,211,109,211,211,109,8,109, + 109,8,8,182,211,187,26,211,0,8,139,211,109,109,109,8, + 211,187,211,8,67,141,219,26,8,8,8,7,8,8,12,191, + 121,191,69,191,69,69,69,69,191,69,69,69,69,69,121,69, + 69,121,69,121,69,121,69,121,121,121,16,16,121,16,16,16, + 16,16,16,121,121,121,121,121,121,121,69,121,69,121,69,69, + 121,69,125,125,238,125,121,121,16,121,16,16,16,121,16,16, + 71,102,71,248,248,74,248,102,71,248,248,248,248,248,248,71, + 248,102,248,248,248,248,248,248,248,248,248,248,248,248,248,248, + 248,248,248,248,248,248,248,248,71,248,248,71,248,248,71,248, + 71,248,248,248,248,248,71,248,248,248,248,71,71,248,248,248, + 248,71,71,71,248,71,248,71,71,248,248,71,248,102,71,248, + 71,248,71,71,71,71,248,71,248,248,248,71,248,102,248,248, + 248,248,248,248,248,248,248,71,25,248,248,248,248,248,248,248, + 248,248,71,248,248,248,248,71,248,71,248,71,248,71,248,71, + 248,71,248,248,248,248,248,248,248,248,248,248,248,248,248,248, + 248,248,248,248,248,248,244,25,102,248,248,71,248,248,244,248, + 71,248,71,248,71,248,248,71,248,244,248,248,248,248,248,244, + 120,248,102,248,248,248,102,248,248,248,38,248,102,248,248,42, + 12,243,26,8,42,26,12,0,211,67,139,139,139,139,139,211, + 211,139,139,182,8,150,0,187,0,211,67,139,139,139,139,139, + 139,211,139,139,67,211,187,0,187,0,8,139,139,139,139,139, + 139,139,211,211,211,139,8,132,0,12,0,211,67,139,139,139, + 139,139,139,211,139,139,139,8,132,0,12,0,8,67,139,139, + 139,139,67,139,139,139,211,67,243,150,0,187,0,8,67,139, + 139,139,139,139,139,139,139,211,139,8,187,122,187,122,8,67, + 139,139,139,139,139,139,211,139,139,139,211,150,0,187,0,8, + 67,139,139,139,139,67,139,211,139,139,139,8,187,0,187,0, + 8,67,139,139,139,139,139,139,139,139,139,139,243,187,0,12, + 0,8,139,139,182,139,139,139,139,211,139,139,67,243,187,122, + 187,122,8,67,139,139,139,139,139,139,211,139,139,139,243,150, + 0,187,0,8,139,139,67,139,139,139,211,211,139,139,139,243, + 150,0,187,0,211,67,139,139,139,139,67,139,211,139,139,139, + 211,150,0,187,122,8,139,139,139,139,139,139,139,139,139,139, + 67,8,132,0,187,122,8,139,139,139,139,139,139,139,211,139, + 139,139,243,187,0,187,0,8,139,139,139,139,139,139,211,211, + 211,139,67,187,12,0,187,0,211,139,139,139,139,139,139,211, + 211,139,139,139,8,187,0,187,122,8,139,139,67,139,139,139, + 139,139,139,211,139,211,150,0,8,12,8,8,8,8,8,121, + 191,121,69,191,121,69,69,238,69,191,69,191,69,121,69,69, + 121,69,121,69,69,69,121,69,121,121,121,16,121,16,121,16, + 121,121,121,16,16,16,121,121,121,121,69,121,121,121,121,69, + 121,69,121,125,121,125,121,121,16,121,121,16,16,16,16,16, + 71,71,74,74,74,248,71,71,102,102,71,71,102,248,248,248, + 248,248,248,248,102,248,248,248,248,248,248,248,248,248,248,248, + 248,25,71,248,248,71,248,248,248,248,71,248,248,248,248,248, + 248,71,248,248,71,71,248,71,248,71,248,248,248,248,71,71, + 71,248,248,248,71,248,71,248,248,71,71,248,71,71,248,71, + 248,71,248,248,248,248,71,248,248,248,248,248,248,25,248,248, + 248,248,248,248,248,248,248,25,71,25,71,248,248,248,71,248, + 248,248,248,248,248,71,248,248,248,248,71,248,248,248,244,248, + 248,248,248,71,248,71,248,248,102,244,248,71,248,244,248,71, + 248,248,71,248,71,248,102,244,248,25,248,248,248,71,248,71, + 248,248,248,102,248,248,248,248,71,248,248,71,248,71,248,248, + 248,248,248,248,248,248,244,248,25,248,248,120,25,71,248,26, + 12,12,17,91,42,12,26,0,26,187,187,187,187,91,111,12, + 91,91,17,91,109,187,42,211,0,26,187,91,109,187,111,187, + 187,12,91,17,91,12,150,26,211,162,26,187,187,109,187,211, + 187,187,26,91,187,12,109,12,26,211,0,26,187,187,187,187, + 111,187,187,187,91,187,12,109,12,26,211,0,26,187,187,187, + 111,187,187,187,187,91,12,91,187,187,42,211,0,26,187,187, + 187,187,111,187,12,91,26,91,12,109,150,42,211,0,26,187, + 187,187,187,187,109,187,26,91,187,12,12,12,26,211,0,26, + 187,187,187,111,187,187,187,12,91,26,12,109,150,26,211,0, + 26,187,12,187,111,187,12,91,91,91,26,91,187,150,26,211, + 162,26,187,187,187,111,187,187,187,187,91,17,91,187,150,42, + 211,162,26,187,187,187,111,109,187,187,26,91,187,12,187,187, + 26,211,162,26,187,12,91,111,111,187,187,187,26,91,12,187, + 12,42,211,0,26,187,187,187,109,187,187,187,187,91,12,12, + 12,187,26,211,0,26,187,187,187,109,187,187,187,91,91,17, + 91,187,12,26,211,162,26,187,91,109,187,111,187,187,12,91, + 187,12,187,150,26,211,162,26,187,187,187,187,111,187,12,91, + 91,26,91,109,150,26,8,122,26,12,187,111,187,91,109,187, + 187,91,187,12,109,150,26,211,0,26,187,91,111,187,111,187, + 187,187,91,187,12,243,150,26,8,12,8,7,8,8,8,191, + 121,191,191,80,191,191,121,69,69,121,69,69,69,121,121,69, + 69,69,121,121,69,69,121,121,121,16,16,16,16,121,16,121, + 16,16,16,121,16,121,121,121,121,16,121,69,69,121,69,69, + 125,121,125,69,121,16,121,121,121,16,121,121,16,16,68,16, + 71,71,248,102,74,102,71,71,71,248,248,71,71,248,248,248, + 248,248,248,248,248,248,248,248,71,248,248,248,248,248,248,248, + 71,248,248,248,248,248,248,248,248,248,248,248,248,248,71,248, + 248,71,71,248,248,248,248,248,248,71,71,248,71,248,248,71, + 71,71,71,248,248,248,71,71,248,248,71,248,71,244,248,71, + 71,71,71,71,71,248,71,71,71,248,248,248,248,248,248,248, + 248,248,248,248,248,25,71,25,71,248,248,248,248,248,248,248, + 248,248,71,248,248,71,248,71,248,248,248,71,248,248,248,71, + 71,71,248,71,248,71,244,71,248,248,248,248,248,248,248,248, + 71,248,71,248,248,248,248,248,71,248,248,71,248,248,248,71, + 71,71,71,248,248,71,248,248,71,71,248,244,248,244,248,102, + 248,248,248,248,102,25,38,248,248,248,102,248,248,71,71,219, + 12,12,17,8,42,187,42,0,0,0,122,122,0,0,0,0, + 0,0,0,0,219,132,26,12,0,0,0,0,0,0,122,0, + 0,0,0,0,0,219,132,26,12,0,0,162,0,0,0,0, + 122,122,122,0,0,0,219,132,26,12,0,0,0,122,122,122, + 122,122,0,0,0,0,0,219,132,42,12,0,0,0,0,122, + 122,122,122,0,0,0,0,0,219,150,42,12,0,0,0,0, + 122,0,122,0,0,0,0,0,0,219,17,26,12,0,0,0, + 122,122,122,0,0,0,122,0,0,0,219,132,42,12,0,0, + 0,0,122,122,122,0,0,0,0,0,0,219,132,42,12,0, + 0,0,0,122,122,0,0,0,0,0,0,122,219,132,42,12, + 0,0,162,122,122,122,0,0,0,0,0,0,0,219,12,26, + 12,0,0,0,122,122,122,0,0,122,0,0,0,0,219,150, + 26,12,122,0,0,0,0,0,122,122,122,122,0,0,0,17, + 132,26,12,122,0,0,122,0,0,0,122,0,0,0,0,0, + 219,150,42,12,0,0,162,122,0,0,0,0,0,0,0,0, + 0,219,132,42,12,0,0,0,0,0,122,122,0,0,0,0, + 0,0,17,132,42,12,0,162,162,122,122,122,122,122,0,0, + 0,0,0,219,132,26,12,162,0,0,122,122,0,0,0,0, + 0,0,0,0,219,132,26,12,0,0,0,0,0,122,0,122, + 0,0,0,0,0,26,132,42,243,26,8,8,8,8,8,16, + 121,121,121,69,69,69,121,191,69,191,69,191,69,121,69,69, + 121,69,121,69,69,121,121,121,121,121,121,16,16,121,121,121, + 16,121,16,121,16,16,121,121,121,121,121,121,69,121,121,121, + 69,121,121,125,121,16,16,121,16,16,121,121,121,16,16,16, + 74,71,74,74,71,71,74,248,71,71,71,248,248,248,248,248, + 248,248,248,248,248,248,71,248,248,248,248,248,248,248,248,248, + 248,248,248,248,248,71,248,248,248,248,71,248,71,71,248,71, + 71,248,248,248,71,71,248,71,71,248,248,71,248,71,71,248, + 248,71,248,71,71,71,248,248,71,71,248,71,248,248,71,71, + 248,71,71,71,248,71,248,248,248,74,248,248,248,248,248,248, + 248,248,248,248,248,71,248,71,248,248,248,248,71,248,248,248, + 71,248,248,248,248,248,71,248,244,248,71,248,71,248,71,248, + 248,248,248,248,71,248,248,244,71,71,71,71,71,71,248,71, + 248,244,248,244,71,248,248,71,248,102,71,248,244,71,71,248, + 102,248,248,71,71,102,248,102,248,248,248,248,102,248,248,248, + 120,102,248,248,248,71,244,120,102,120,248,248,248,248,71,26, + 150,12,26,8,42,211,122,26,26,26,26,26,26,42,26,219, + 219,219,219,26,17,17,26,187,26,26,26,26,26,26,42,26, + 17,219,219,219,26,26,219,26,187,42,12,26,26,26,42,42, + 26,17,219,219,219,26,17,219,26,187,26,26,26,26,26,42, + 42,26,17,17,219,219,26,17,219,26,187,42,91,26,26,26, + 42,42,26,17,219,219,219,26,17,219,26,187,42,91,26,26, + 26,26,42,26,219,17,219,219,26,26,132,26,187,26,26,26, + 26,26,42,42,26,17,219,219,219,26,17,219,26,187,42,91, + 26,26,26,42,42,26,17,219,219,219,26,26,219,26,187,42, + 91,26,26,26,42,42,219,219,219,219,219,26,26,17,26,187, + 42,187,26,26,26,42,42,26,17,219,219,219,26,26,132,26, + 187,42,91,26,26,26,42,42,26,17,17,219,17,26,17,219, + 26,187,42,187,26,26,26,42,42,26,17,219,219,219,26,219, + 17,26,187,42,26,26,26,26,26,42,26,17,17,219,219,26, + 17,219,26,187,42,12,26,26,26,26,26,26,219,219,219,219, + 26,17,219,26,187,42,12,26,26,26,42,42,26,219,219,219, + 17,26,26,17,26,187,26,26,26,26,26,42,42,26,17,219, + 219,219,26,26,219,26,187,42,12,26,26,26,26,42,26,17, + 17,219,219,26,26,219,26,187,26,26,26,26,26,42,42,26, + 17,219,219,219,26,219,219,26,12,12,8,8,8,8,8,191, + 191,238,191,69,191,69,121,69,69,238,69,69,69,121,69,121, + 69,121,69,121,69,69,69,121,121,121,121,121,121,16,16,16, + 121,16,121,16,121,121,121,121,121,121,121,121,121,125,125,69, + 121,69,121,16,121,121,121,16,121,16,16,16,16,16,16,208, + 74,71,71,71,71,71,71,248,74,248,71,248,71,248,74,248, + 248,248,248,248,248,248,71,248,248,71,248,248,248,248,248,248, + 248,71,248,248,248,71,248,248,248,248,71,248,248,248,248,248, + 71,248,71,248,248,71,248,248,71,71,248,71,248,248,71,71, + 248,71,71,71,248,71,71,248,71,71,71,71,71,71,248,71, + 71,248,71,71,71,71,71,248,248,248,248,248,102,248,248,248, + 248,248,248,248,248,248,248,248,248,71,248,248,248,71,248,248, + 71,248,71,71,71,120,102,248,71,248,71,248,71,248,71,71, + 71,71,244,248,71,71,102,248,248,248,248,248,71,248,102,71, + 102,248,102,248,71,248,248,102,248,248,102,248,248,102,71,71, + 71,71,71,248,71,71,71,71,248,71,71,248,248,102,248,71, + 248,248,248,248,248,248,102,248,248,248,102,248,71,71,74,26, + 12,17,26,243,42,8,42,219,243,12,17,17,219,12,12,243, + 12,150,150,17,17,219,219,187,17,243,12,17,187,219,12,17, + 243,12,243,150,150,12,17,219,187,26,150,12,12,187,219,17, + 12,243,12,150,150,17,12,17,219,187,17,243,12,12,187,219, + 17,12,150,12,243,150,17,187,17,219,12,219,150,12,12,219, + 219,17,12,243,12,150,150,17,12,17,219,12,219,150,12,12, + 187,219,12,12,243,150,150,150,150,12,219,219,12,17,243,12, + 12,17,219,12,12,243,12,243,150,17,187,17,219,12,219,150, + 12,12,17,219,17,12,243,150,150,150,150,12,17,219,12,219, + 150,12,17,17,219,12,12,243,150,150,150,150,12,17,219,12, + 26,150,12,12,17,219,12,12,243,12,150,150,150,12,219,219, + 12,219,150,12,12,17,219,12,17,243,12,150,150,17,12,17, + 219,12,26,243,12,17,17,219,17,17,243,12,243,150,12,17, + 17,219,187,17,243,12,12,187,219,12,17,243,12,150,150,17, + 12,17,219,187,26,150,12,12,187,219,17,12,8,12,150,150, + 12,12,17,219,187,26,150,12,12,187,219,17,12,8,12,150, + 150,150,17,17,219,187,17,243,12,12,187,219,17,12,150,243, + 150,150,150,187,17,219,12,26,243,17,12,219,219,17,17,243, + 12,150,150,150,12,17,219,187,17,243,12,12,17,219,12,12, + 243,12,243,150,12,12,17,26,12,17,8,8,8,8,8,16, + 191,69,121,69,191,121,69,191,69,121,121,69,121,69,121,69, + 121,69,121,69,121,69,69,121,121,121,121,121,121,121,121,16, + 16,16,121,121,121,121,121,121,121,69,69,121,121,121,121,121, + 121,121,121,16,16,16,16,16,16,121,16,16,16,16,16,16, + 71,71,74,71,71,71,102,74,248,71,248,248,248,248,248,102, + 248,248,248,248,71,248,248,248,248,248,248,248,248,102,248,248, + 248,248,71,71,248,248,71,71,71,248,248,248,71,71,71,71, + 248,71,248,248,71,71,71,71,248,248,71,248,71,71,71,248, + 244,71,248,248,248,71,71,71,71,248,71,71,71,71,71,71, + 71,71,71,71,248,248,248,71,248,71,248,248,71,248,71,248, + 71,248,248,248,248,248,248,248,248,248,71,248,71,248,71,248, + 248,71,248,248,248,71,71,71,248,71,248,71,248,71,248,248, + 248,71,248,71,71,248,71,71,71,71,102,71,248,71,71,248, + 248,71,244,102,248,71,71,71,71,71,71,71,71,71,248,71, + 71,102,248,71,248,248,248,248,71,102,248,71,71,71,71,248, + 102,248,248,248,248,102,248,248,248,248,244,248,248,248,71,219, + 12,150,17,187,42,8,42,26,150,12,150,219,17,17,17,243, + 150,150,12,17,12,17,42,243,26,150,12,150,17,219,12,26, + 243,150,150,12,219,17,219,26,243,219,150,12,132,219,17,12, + 26,243,150,12,12,17,187,219,42,109,26,150,12,132,17,219, + 12,26,243,150,17,12,12,17,17,42,150,26,150,17,132,187, + 17,12,26,150,150,150,12,17,12,219,42,150,26,150,17,132, + 17,219,17,17,243,12,12,12,17,17,17,42,109,26,150,12, + 132,187,17,12,26,243,150,17,12,17,17,17,42,150,26,150, + 17,132,187,17,12,26,243,12,12,12,17,17,219,42,150,26, + 150,12,150,17,17,17,17,243,12,150,12,17,17,219,42,243, + 219,150,12,132,187,17,12,26,243,150,150,12,17,17,17,42, + 150,26,150,17,132,187,17,12,26,243,150,12,12,17,17,219, + 42,12,219,150,12,150,187,17,12,26,243,150,17,12,17,12, + 219,26,12,26,150,12,132,219,17,12,26,243,150,12,12,17, + 12,219,26,243,219,150,12,132,17,219,12,17,243,150,150,12, + 17,17,219,42,243,219,150,12,132,219,17,12,26,243,150,12, + 12,219,17,17,42,243,26,150,12,132,17,219,12,26,150,12, + 150,12,17,12,219,42,150,219,150,12,132,187,17,12,26,243, + 150,12,12,219,17,219,42,243,26,150,17,132,187,17,17,26, + 243,150,17,12,219,17,219,26,8,12,8,7,8,8,8,16, + 191,191,121,191,69,191,121,69,191,69,121,191,69,121,121,69, + 121,69,121,69,121,69,121,69,121,121,16,68,121,121,121,16, + 121,121,121,16,16,121,121,238,121,121,121,121,121,121,121,121, + 121,121,16,121,16,121,16,121,16,16,121,121,16,16,16,208, + 74,71,74,71,74,71,71,71,102,71,71,71,71,248,71,71, + 248,248,248,248,71,248,71,71,248,248,248,248,71,71,248,71, + 248,248,248,71,248,248,248,248,71,248,71,248,248,248,248,71, + 71,71,71,248,248,71,248,71,71,71,71,71,248,248,71,71, + 71,71,71,71,248,71,71,248,71,71,248,71,71,71,248,71, + 71,71,71,71,71,71,248,74,248,248,71,248,71,248,71,248, + 248,248,248,248,71,248,71,71,248,248,71,248,71,248,71,248, + 248,248,71,71,248,71,248,71,248,71,248,71,71,71,71,71, + 248,71,71,244,71,71,71,248,248,71,248,71,248,248,71,71, + 102,71,71,71,102,248,71,248,248,248,102,248,248,71,248,71, + 71,71,71,71,71,71,71,71,71,71,102,248,71,102,244,71, + 71,248,102,248,244,71,248,102,248,102,248,102,244,71,71,219, + 26,26,26,8,42,8,219,26,150,219,12,17,150,17,26,150, + 17,150,17,17,17,17,26,109,26,132,17,219,17,150,150,26, + 150,17,150,17,12,12,219,26,109,26,150,17,12,219,150,150, + 26,150,150,150,12,17,12,17,26,243,26,150,219,17,17,150, + 150,26,150,150,132,17,17,17,17,26,211,26,150,17,17,17, + 150,150,26,243,17,150,12,219,12,17,26,211,26,150,17,17, + 17,150,12,26,150,150,150,17,17,17,17,26,109,26,150,219, + 17,219,150,150,26,150,150,150,12,17,17,17,26,109,26,150, + 17,17,219,150,150,26,150,150,150,17,12,17,17,26,109,26, + 150,219,17,17,12,12,26,150,17,150,12,17,12,17,26,109, + 26,150,17,219,17,132,150,26,150,12,150,17,17,17,17,26, + 109,26,150,17,219,17,132,150,26,150,150,132,12,17,12,17, + 17,109,26,132,17,219,17,150,150,26,150,150,150,12,219,12, + 17,17,109,26,150,17,17,187,132,150,26,150,150,150,17,17, + 187,17,26,109,26,150,17,219,17,150,17,219,150,17,150,17, + 12,17,17,26,109,26,150,17,12,17,132,150,219,150,150,132, + 12,12,17,17,26,109,26,150,219,17,17,150,150,26,243,17, + 150,12,219,12,17,26,109,26,150,17,17,17,150,150,26,150, + 150,150,12,17,187,17,26,109,26,150,17,17,17,132,150,26, + 150,150,150,12,17,12,219,26,109,17,8,8,8,8,8,16, + 121,121,121,121,69,69,121,69,191,191,69,69,121,191,121,69, + 121,121,69,191,69,121,69,121,121,121,121,121,121,121,121,16, + 16,16,121,121,121,121,121,121,68,16,121,121,121,121,121,121, + 16,16,121,16,16,16,121,121,16,16,16,16,16,16,16,16, + 71,71,71,74,71,74,248,74,71,74,248,248,102,71,248,248, + 71,71,71,248,248,71,248,248,248,248,248,248,248,248,71,248, + 71,71,71,248,71,71,248,71,248,71,248,71,71,71,244,71, + 248,248,248,71,71,71,71,71,71,71,71,71,71,71,71,71, + 71,71,71,71,71,71,71,71,71,71,71,71,248,71,71,102, + 248,71,248,71,74,248,71,248,248,71,248,248,248,248,248,248, + 71,248,248,248,248,248,248,248,71,71,248,71,248,248,248,71, + 248,71,248,248,71,248,244,248,71,248,71,102,248,248,71,71, + 71,71,71,71,71,71,248,71,71,244,71,102,71,71,102,71, + 71,71,248,71,71,71,248,71,71,71,71,71,71,102,71,71, + 71,71,71,71,71,102,71,71,248,71,71,71,244,71,102,71, + 248,71,71,102,248,120,102,244,248,120,102,248,102,71,74,26, + 17,12,17,12,42,8,26,219,17,17,132,17,17,12,219,17, + 150,12,17,132,187,187,219,243,219,12,17,132,17,17,17,219, + 12,150,17,17,132,17,187,219,243,219,17,17,132,17,17,17, + 219,12,17,17,17,132,17,187,219,109,219,12,17,132,17,17, + 12,219,12,17,17,12,132,12,187,219,243,219,12,17,132,219, + 17,12,219,17,150,17,12,132,17,187,219,243,219,150,17,132, + 17,17,12,219,150,219,17,12,17,17,187,219,243,219,12,17, + 132,17,17,17,219,12,17,17,12,132,12,187,219,243,219,150, + 17,132,17,17,12,219,150,17,17,12,132,187,187,219,243,219, + 150,17,132,17,17,12,219,150,150,17,17,132,17,187,219,243, + 219,12,17,132,17,17,12,219,12,132,17,12,17,12,187,219, + 243,219,12,17,132,17,17,17,219,12,17,17,12,132,17,187, + 26,243,219,150,17,132,17,17,12,219,12,17,17,12,132,17, + 187,26,109,219,17,17,150,219,17,17,219,12,17,17,17,132, + 12,187,219,243,219,12,17,132,17,17,12,26,12,150,17,17, + 132,187,187,219,243,219,17,17,132,17,17,12,26,12,17,17, + 17,132,12,187,219,243,219,12,17,132,17,17,12,219,150,132, + 17,12,132,17,187,219,243,219,17,17,132,219,17,17,219,12, + 17,17,17,132,12,187,219,243,219,17,17,150,219,17,12,219, + 12,17,17,150,132,17,150,219,8,12,8,8,7,8,8,191, + 191,121,191,191,191,191,191,121,80,69,121,121,69,69,121,121, + 69,121,121,69,121,69,121,69,121,69,121,69,121,121,69,121, + 121,121,121,121,121,121,121,69,121,121,69,121,121,121,121,121, + 121,16,16,16,16,121,16,121,16,16,16,16,16,16,16,208, + 74,71,71,71,71,74,71,248,248,102,74,248,248,74,248,102, + 248,102,71,248,248,71,71,248,248,102,248,248,248,248,248,248, + 248,248,248,248,248,71,248,248,248,71,71,248,248,71,248,71, + 71,71,102,248,71,71,248,71,248,71,71,71,71,71,248,71, + 71,71,71,71,71,71,71,71,102,71,71,74,71,71,71,74, + 71,71,71,248,248,74,248,248,102,71,71,248,71,71,71,248, + 248,102,248,248,71,248,248,248,248,248,248,71,71,248,248,71, + 248,71,71,248,71,71,71,71,71,248,71,71,71,71,102,71, + 71,71,71,71,71,71,71,71,102,71,71,71,248,71,71,71, + 102,71,71,71,71,71,71,71,248,71,102,248,71,248,248,71, + 71,71,71,71,71,71,71,71,71,71,71,71,248,71,71,71, + 71,71,244,102,71,71,248,102,71,244,71,244,248,71,71,26, + 219,12,17,12,42,8,26,219,150,17,132,17,150,17,219,12, + 132,150,17,132,132,187,219,109,219,150,17,132,17,150,17,219, + 12,150,150,17,132,132,187,26,211,219,150,17,132,17,150,17, + 219,150,150,150,17,132,132,187,219,243,219,150,17,132,17,150, + 17,219,150,150,150,17,132,132,187,219,211,219,150,17,150,17, + 132,17,219,12,132,150,17,132,132,187,219,211,42,150,219,132, + 17,150,17,26,150,150,150,132,132,132,187,219,109,219,150,17, + 132,17,150,17,219,150,132,150,17,132,132,187,219,211,26,150, + 17,132,17,150,17,26,150,150,132,17,132,150,187,219,211,42, + 150,219,132,132,150,17,26,12,132,150,17,132,132,187,26,211, + 219,150,17,132,17,150,17,219,12,150,150,132,132,132,187,219, + 211,219,150,17,132,17,150,17,219,150,150,150,17,132,132,150, + 42,211,26,150,17,132,17,150,17,219,150,150,132,17,132,132, + 150,219,243,219,150,219,150,17,150,17,219,150,150,150,17,132, + 132,187,26,211,219,150,17,132,17,150,132,219,12,150,150,17, + 132,132,187,26,211,219,150,17,132,17,132,132,219,150,150,150, + 17,132,132,187,219,243,219,150,17,132,17,150,17,26,12,150, + 150,17,132,132,187,26,211,219,150,17,132,17,150,17,219,150, + 150,150,17,132,132,187,219,211,219,150,17,132,17,150,17,219, + 150,132,17,17,132,187,150,26,211,26,8,8,8,8,8,16, + 191,121,69,69,69,69,191,121,121,191,69,191,121,69,191,121, + 121,69,121,191,69,121,69,121,121,121,121,121,121,121,121,121, + 121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121, + 16,121,16,121,16,121,16,16,16,16,16,16,54,16,54,208, + 71,71,74,74,71,74,248,74,74,71,248,74,102,248,248,248, + 71,71,102,248,71,248,248,71,248,71,248,71,248,248,248,248, + 248,71,71,71,71,248,71,71,71,248,248,71,71,71,71,248, + 71,248,71,71,71,71,71,71,71,248,71,71,71,71,71,248, + 71,248,71,248,71,71,71,71,71,71,71,71,248,71,71,71, + 71,71,102,102,74,248,248,71,71,102,248,71,102,248,248,71, + 248,71,248,71,248,248,248,248,71,71,71,248,248,71,71,248, + 71,248,248,71,248,71,71,248,248,71,71,71,71,71,71,71, + 71,102,71,102,71,71,102,71,71,71,248,71,71,71,248,71, + 71,71,71,248,71,71,102,71,71,71,71,71,71,71,71,71, + 71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71, + 71,71,71,71,71,248,71,244,248,102,248,102,71,140,71,26, + 26,26,26,12,42,8,219,42,12,132,17,150,132,132,219,150, + 17,132,17,17,26,150,26,243,42,12,132,17,150,132,150,219, + 150,219,132,17,17,26,150,26,187,42,12,132,17,150,132,17, + 219,12,219,132,12,219,26,150,26,8,42,12,132,219,150,132, + 132,219,12,17,132,17,219,26,150,26,12,42,12,132,219,150, + 132,150,219,150,17,132,17,17,26,150,26,187,26,12,132,17, + 150,132,132,219,12,17,132,12,219,26,150,26,8,42,12,132, + 17,150,132,17,219,12,17,132,17,219,26,150,26,187,26,17, + 132,17,150,132,132,219,12,219,150,17,219,26,150,26,187,26, + 12,132,17,17,132,132,219,150,17,132,17,219,26,150,26,12, + 42,12,132,17,150,132,132,219,150,219,132,17,219,26,150,26, + 12,42,12,132,219,150,132,150,219,12,17,132,17,219,26,187, + 26,187,42,12,132,219,150,132,17,219,12,219,150,12,219,26, + 187,26,8,42,12,132,17,150,132,150,219,12,219,150,17,219, + 26,150,26,187,42,12,132,17,150,132,17,219,150,219,132,17, + 17,26,150,26,243,42,12,132,17,132,150,17,219,12,17,132, + 17,219,26,150,26,187,42,12,132,219,150,132,132,219,150,219, + 132,17,17,26,150,26,187,42,12,132,17,150,132,150,219,12, + 219,132,12,219,26,150,26,243,42,12,132,17,150,132,132,219, + 12,17,150,17,219,219,187,219,8,12,8,8,8,8,8,208, + 191,191,191,191,191,121,69,191,191,69,191,69,121,121,69,121, + 121,121,69,69,121,121,121,69,121,121,121,69,69,121,121,121, + 121,121,121,238,121,121,238,121,121,238,121,69,121,121,121,121, + 121,121,16,121,16,16,16,16,121,16,16,16,208,208,208,16, + 74,71,71,74,71,74,248,102,248,102,248,248,74,102,74,248, + 248,71,71,248,102,71,248,74,248,71,248,71,71,71,71,71, + 248,248,248,248,71,248,71,248,71,71,71,248,248,71,71,248, + 71,71,71,71,71,71,71,71,71,71,71,71,248,71,74,71, + 71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71, + 71,71,71,248,74,74,102,71,71,248,102,71,248,102,248,74, + 248,71,248,71,71,71,71,248,248,248,71,71,248,248,71,248, + 71,71,71,71,248,71,71,71,71,248,244,71,71,71,71,102, + 71,71,71,71,71,71,71,71,248,71,71,71,71,74,71,71, + 71,102,71,71,71,71,71,71,248,71,71,71,71,71,71,71, + 71,71,71,71,71,71,71,71,71,71,71,74,71,71,71,74, + 71,71,71,71,71,102,102,244,71,71,244,102,248,74,71,42, + 12,12,91,12,26,12,219,219,17,219,17,17,17,17,26,150, + 17,150,17,132,26,187,26,211,219,17,219,17,17,17,17,26, + 150,17,150,17,132,26,150,12,211,219,17,17,17,17,150,17, + 219,150,17,150,17,132,26,187,26,211,219,17,17,17,17,17, + 17,219,150,17,150,17,132,26,187,17,211,219,17,17,17,17, + 17,17,26,150,17,150,17,132,26,187,12,211,219,17,17,17, + 17,17,150,219,150,219,12,17,132,26,187,26,211,219,17,17, + 17,17,150,17,219,150,17,150,17,132,26,12,12,211,219,17, + 17,17,17,17,132,219,150,219,150,17,132,26,187,12,211,219, + 17,17,17,17,17,132,42,150,17,150,17,132,26,150,17,211, + 219,17,17,17,17,17,17,26,150,17,12,17,132,26,187,12, + 211,219,17,17,17,17,17,17,219,150,219,150,17,132,17,150, + 17,211,219,17,17,17,17,150,17,219,150,219,150,17,132,17, + 187,26,211,219,17,219,17,17,17,17,219,150,219,150,17,132, + 26,150,12,211,219,17,17,17,17,17,17,26,150,17,150,17, + 132,26,150,26,211,219,17,219,17,17,17,17,219,150,219,150, + 17,132,26,187,12,211,219,12,219,17,17,17,150,42,150,17, + 150,17,132,26,150,17,211,219,17,17,17,17,17,17,219,150, + 17,150,17,132,26,187,26,211,219,17,17,17,17,17,17,219, + 150,132,150,17,17,219,187,26,8,26,8,141,7,8,8,16, + 191,121,121,191,121,191,191,69,121,191,121,121,191,121,121,121, + 121,121,121,121,69,121,69,121,69,121,121,121,125,69,69,121, + 121,121,69,69,69,121,121,238,121,121,238,121,238,121,191,16, + 121,16,121,16,121,16,121,16,16,16,208,16,16,16,208,208, + 74,74,74,248,74,71,74,71,74,74,74,71,248,71,102,248, + 74,248,248,71,71,102,71,248,248,248,71,248,248,248,248,248, + 71,71,71,71,248,71,248,71,248,102,248,71,71,71,71,71, + 71,244,71,71,71,71,71,71,71,71,71,71,71,71,71,71, + 71,71,248,71,71,71,71,71,74,71,71,71,71,71,71,71, + 71,71,71,71,248,248,71,248,248,71,71,248,71,71,74,248, + 248,248,71,248,248,248,248,71,248,71,248,71,71,71,71,71, + 248,248,248,102,71,71,71,248,71,71,71,71,244,71,71,71, + 71,71,71,248,71,71,248,71,71,71,102,71,71,71,248,71, + 71,71,71,102,71,71,102,71,71,71,71,71,71,71,71,74, + 71,71,71,74,71,71,71,71,71,71,71,71,71,71,71,71, + 71,71,71,71,71,244,71,102,248,102,71,244,71,144,71,219, + 150,150,12,8,26,187,26,42,12,17,17,150,150,132,219,17, + 132,17,17,219,17,150,219,187,26,12,219,12,17,150,132,219, + 17,150,17,17,219,17,187,42,12,42,12,219,12,17,150,132, + 219,17,132,17,17,219,17,150,219,187,26,17,17,17,12,150, + 132,219,17,132,17,17,219,17,150,26,187,42,12,219,12,12, + 150,132,219,17,132,17,17,219,17,150,26,187,26,17,17,17, + 150,150,219,219,17,132,150,17,219,17,150,219,187,42,12,219, + 12,17,132,132,219,132,132,17,17,219,17,132,42,12,26,17, + 17,17,12,150,219,219,17,132,12,17,219,17,132,26,12,26, + 17,17,12,150,150,17,219,17,132,17,17,219,17,187,26,187, + 42,12,219,17,12,150,132,219,17,132,150,17,219,17,150,26, + 187,26,17,17,17,12,150,132,183,150,132,12,17,219,219,187, + 26,12,26,17,17,17,12,132,132,219,150,132,17,17,219,219, + 132,219,187,42,12,17,12,17,150,132,219,150,150,17,17,219, + 17,187,42,12,26,17,17,17,150,150,132,219,17,132,17,17, + 219,17,187,219,187,42,12,17,17,12,150,132,219,150,132,12, + 17,219,17,150,42,12,42,12,219,12,12,150,219,219,17,132, + 17,17,219,17,187,26,12,42,12,219,12,17,150,132,219,17, + 132,17,17,219,17,150,219,187,26,17,17,17,12,150,132,219, + 17,17,17,17,219,17,12,219,12,12,8,8,8,8,8,208, + 191,121,191,121,191,121,191,121,191,69,191,121,69,121,121,121, + 121,191,121,121,121,121,69,121,121,69,69,121,121,121,125,125, + 121,69,121,121,121,121,121,69,121,125,121,121,69,121,121,121, + 121,16,16,16,16,16,16,208,16,16,16,16,16,54,54,54, + 74,74,74,74,102,71,74,248,248,248,74,71,71,71,71,248, + 74,102,102,248,71,248,74,248,74,248,74,248,71,71,248,248, + 248,102,71,71,71,71,248,74,71,71,74,71,248,71,71,71, + 248,71,248,71,71,71,71,71,71,71,71,71,71,71,71,71, + 71,71,71,71,248,71,71,71,102,71,71,71,71,71,71,71, + 71,71,71,71,74,248,74,74,248,102,248,102,248,248,102,71, + 74,248,74,248,71,102,248,71,248,71,248,71,248,102,71,71, + 71,71,71,71,248,71,71,71,248,71,71,71,71,71,71,71, + 71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,248, + 71,71,71,71,71,71,71,71,248,71,102,71,71,71,71,71, + 74,74,71,71,74,71,71,71,140,71,144,74,71,71,71,71, + 71,71,71,71,71,71,71,71,244,71,71,102,71,71,71,56, + 219,12,26,8,42,12,26,219,26,219,26,17,26,17,219,17, + 17,17,219,219,26,187,26,150,219,26,219,17,219,26,17,219, + 219,17,17,17,219,17,150,26,150,219,26,219,17,219,26,17, + 219,17,17,17,17,219,26,187,26,150,219,26,219,17,17,26, + 17,219,17,17,17,219,219,26,150,26,150,219,26,219,17,219, + 26,17,219,17,17,17,219,219,26,132,219,150,219,26,219,26, + 17,17,17,219,219,17,17,219,219,26,187,26,150,219,26,219, + 17,17,26,17,26,17,17,17,219,219,26,150,219,150,219,26, + 219,17,17,17,17,219,17,17,17,17,219,26,150,219,150,219, + 26,219,26,17,17,17,219,17,17,17,17,219,12,132,26,150, + 219,26,219,17,17,26,17,219,17,17,17,219,219,26,132,26, + 150,219,26,219,17,219,26,26,26,17,17,17,219,219,12,132, + 219,150,219,26,219,17,17,26,17,26,219,12,17,219,219,26, + 187,26,150,219,26,219,17,219,26,12,26,219,17,17,17,219, + 17,132,26,150,219,26,219,26,17,26,17,219,17,17,17,219, + 219,12,17,26,150,219,26,219,17,219,26,17,26,219,17,17, + 219,219,26,150,26,150,219,26,219,17,17,17,17,219,17,17, + 17,17,219,17,132,26,150,219,26,219,17,219,26,12,219,17, + 17,17,219,219,26,187,26,150,219,26,219,17,219,26,17,219, + 17,17,17,17,26,12,17,26,243,26,12,8,7,12,8,16, + 208,121,191,121,121,69,191,121,191,121,121,191,121,191,191,121, + 69,121,121,191,121,121,121,121,121,121,69,69,125,121,121,121, + 121,121,121,121,69,125,121,125,121,69,121,121,121,121,16,121, + 16,16,121,16,121,16,121,16,16,16,16,208,208,16,208,208, + 74,74,71,74,74,102,102,74,74,74,71,102,248,71,74,102, + 248,71,248,74,248,102,248,102,248,102,248,102,248,102,74,71, + 71,71,248,102,248,102,71,248,71,248,102,71,71,248,71,71, + 71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71, + 71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71, + 71,71,74,102,71,71,102,248,102,248,74,248,74,248,71,102, + 248,102,248,248,248,71,74,248,74,248,74,248,71,71,248,102, + 102,71,71,71,71,248,71,71,71,71,248,71,244,71,71,71, + 71,71,71,244,71,71,71,71,71,71,71,71,71,71,71,71, + 71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,140, + 71,74,144,74,71,71,74,71,71,71,71,144,71,74,71,71, + 71,71,71,71,71,71,71,71,71,102,244,71,71,74,140,122, + 0,122,122,42,0,183,0,0,42,122,122,122,122,42,122,122, + 42,122,122,122,183,42,219,187,0,42,122,122,122,122,42,122, + 122,122,122,122,162,42,42,183,187,0,42,122,122,122,122,42, + 122,122,122,122,122,122,183,42,183,187,0,42,122,122,0,122, + 42,122,122,42,122,122,162,183,42,183,187,0,42,122,122,122, + 122,42,122,122,42,122,122,122,219,42,42,187,0,42,122,122, + 0,122,42,122,122,122,122,122,122,183,42,219,187,0,42,122, + 122,122,122,42,122,122,42,122,122,122,183,42,42,187,0,42, + 122,122,0,122,42,122,122,122,122,122,122,219,42,42,187,0, + 42,122,122,0,122,42,122,122,122,122,122,162,42,42,183,187, + 0,42,122,122,122,122,42,122,122,122,122,122,122,219,42,183, + 187,122,42,122,122,122,122,183,122,122,42,122,122,122,42,42, + 42,187,0,42,122,122,122,122,42,122,122,122,122,122,122,219, + 42,183,187,0,42,122,122,122,0,42,122,122,122,122,122,122, + 42,42,183,187,122,42,122,122,122,122,42,122,122,42,122,122, + 122,42,42,219,187,122,42,122,122,122,122,42,122,122,42,122, + 122,162,183,42,183,187,0,42,122,122,0,122,42,122,122,122, + 122,0,162,42,42,183,187,0,42,122,122,122,0,42,122,122, + 42,122,122,78,183,42,219,187,0,42,122,122,122,122,42,122, + 122,122,122,122,162,42,42,183,187,122,42,26,26,26,17,16, + 191,191,191,191,191,121,121,121,191,191,121,191,121,121,69,121, + 191,121,121,121,121,121,121,69,69,69,69,121,121,69,69,69, + 69,125,125,69,121,121,125,121,121,238,121,121,121,121,121,121, + 16,16,121,121,16,16,16,16,16,208,208,16,16,208,16,96, + 71,74,71,71,74,74,71,248,102,248,74,74,248,248,71,74, + 102,74,248,102,71,74,71,74,248,74,71,71,71,248,102,248, + 71,71,71,71,71,71,71,248,74,71,71,248,74,248,248,71, + 248,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71, + 71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71, + 71,71,71,71,74,71,248,74,74,248,74,248,74,248,74,248, + 74,248,74,102,248,248,71,248,74,248,71,248,71,71,71,71, + 102,71,102,71,71,248,102,71,248,71,71,71,71,71,71,71, + 71,71,71,71,71,71,71,71,71,71,71,71,74,71,71,71, + 71,71,71,71,71,71,71,71,71,71,71,71,74,71,71,140, + 71,71,144,140,71,144,74,144,140,71,71,71,144,71,140,71, + 144,71,71,71,71,71,71,71,71,71,71,71,71,71,71,26, + 8,12,17,150,0,42,26,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,42,42,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,42,42,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,42,42,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,42,42,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,42,42,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,42,42,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,42,42,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,42,42,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,42, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,42, + 122,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 42,42,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 122,42,42,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,42,122,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,42,122,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,42,42,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,122,42,42,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,42,42,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,122,26,42,122,42,17,17,26,219,208, + 191,191,191,191,191,121,191,191,191,191,121,121,191,121,191,121, + 121,121,121,121,121,121,121,121,121,121,69,121,121,68,121,121, + 121,121,125,125,69,121,121,125,121,125,121,121,16,121,121,191, + 121,16,16,121,16,16,16,16,16,16,16,16,16,208,208,208, + 74,74,74,74,71,71,102,74,71,74,102,248,102,74,102,248, + 102,248,248,71,102,248,102,248,102,248,248,102,248,74,71,71, + 102,248,71,71,74,248,74,71,71,248,74,71,71,74,71,71, + 71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71, + 71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71, + 71,71,71,102,248,248,74,102,248,102,248,102,248,102,248,74, + 248,74,248,71,102,74,248,74,248,248,74,71,74,71,71,71, + 71,71,71,71,71,71,71,71,71,71,71,71,71,144,71,71, + 71,71,71,71,71,71,71,71,74,71,71,71,71,71,74,71, + 74,71,71,71,71,71,71,71,71,71,71,71,71,74,71,71, + 144,74,71,71,71,71,144,71,71,140,74,140,71,144,71,74, + 71,74,71,71,71,71,71,71,71,71,71,71,71,140,71,26, + 49,141,243,139,42,26,219,0,42,42,122,122,122,42,122,122, + 42,122,122,78,243,26,26,17,0,42,42,122,122,122,42,42, + 122,42,122,122,42,12,26,26,17,0,42,42,122,122,122,42, + 42,122,42,122,122,42,12,26,26,17,0,26,122,42,122,122, + 42,122,122,42,122,122,42,12,26,26,17,0,42,42,122,122, + 122,42,122,42,122,122,122,42,12,26,26,17,0,26,122,42, + 122,122,42,42,122,42,122,122,78,243,26,26,17,0,42,42, + 122,122,122,42,122,42,122,122,122,42,12,26,26,17,0,42, + 122,42,122,122,42,42,122,42,122,122,42,12,26,26,17,0, + 42,42,122,122,122,42,42,122,42,122,122,42,12,26,26,17, + 0,42,42,122,122,42,122,42,122,42,122,122,42,12,26,26, + 17,0,26,122,42,122,42,122,122,42,122,122,122,42,12,26, + 26,17,0,42,42,122,122,42,122,42,122,42,122,122,42,12, + 26,26,17,0,42,42,122,122,42,122,42,122,42,122,122,42, + 12,26,26,17,0,42,42,122,122,122,42,122,42,122,122,122, + 78,243,26,26,17,0,42,42,122,122,122,42,122,42,122,122, + 122,42,12,26,26,17,0,42,122,42,122,122,42,122,42,42, + 122,122,42,12,26,26,17,0,42,42,122,122,42,122,122,42, + 122,122,122,78,243,26,26,17,0,42,42,122,122,42,122,42, + 122,42,122,122,42,12,42,26,17,26,12,7,8,8,243,208, + 191,191,191,191,191,191,191,69,191,191,191,191,191,191,121,191, + 121,191,121,191,121,121,121,121,121,69,121,121,121,16,121,121, + 121,69,121,121,68,121,125,121,121,16,121,191,121,16,121,16, + 16,121,16,16,16,16,16,16,16,16,208,208,54,63,208,63, + 74,102,74,74,74,74,71,102,248,74,102,74,248,102,74,248, + 74,102,102,248,74,74,74,71,74,74,71,74,248,74,71,71, + 71,102,74,248,74,248,102,71,71,71,102,71,248,74,71,71, + 71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71, + 71,71,71,71,71,71,71,71,71,71,71,71,74,71,71,71, + 71,71,74,74,102,248,102,102,74,102,102,102,74,74,102,102, + 248,74,102,71,248,74,248,74,74,248,102,71,248,74,71,71, + 71,71,71,102,71,71,71,71,71,71,71,71,71,71,71,71, + 144,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71, + 74,71,71,74,71,71,71,74,71,71,74,71,71,144,74,71, + 144,140,144,140,144,74,144,144,71,144,71,144,74,144,144,74, + 71,74,71,71,144,71,71,71,71,71,71,71,71,140,71,26, + 101,8,243,8,42,26,26,42,101,139,139,139,8,8,8,211, + 8,8,139,139,67,17,26,12,26,101,139,139,139,8,8,211, + 211,8,8,139,139,49,17,26,8,42,101,139,139,8,139,8, + 8,211,8,8,139,139,49,17,26,12,42,101,139,139,8,8, + 8,139,8,8,8,139,139,49,17,26,8,42,101,139,139,139, + 8,8,211,211,8,8,139,139,67,17,26,8,42,101,139,139, + 8,8,8,211,211,8,8,139,139,67,17,26,12,42,101,139, + 139,139,8,8,211,211,8,8,139,139,67,17,26,12,26,101, + 139,139,8,8,8,211,211,8,8,139,139,67,17,26,12,26, + 101,139,139,139,8,8,211,211,8,8,139,139,49,219,26,8, + 42,101,139,139,139,8,8,139,8,8,8,139,139,49,219,26, + 8,42,101,139,139,8,8,8,211,139,8,8,139,139,67,17, + 26,12,42,101,139,139,139,8,8,211,211,8,8,139,139,67, + 17,26,8,42,101,139,139,139,8,8,211,211,8,8,139,139, + 49,219,26,8,42,101,139,139,139,8,8,211,211,8,8,139, + 139,67,17,26,8,42,101,139,139,139,8,8,211,211,8,8, + 139,139,49,17,26,8,42,101,139,139,8,139,8,8,211,8, + 8,139,139,67,17,26,8,42,101,139,139,139,8,8,8,211, + 8,8,139,139,67,17,26,12,26,101,139,139,139,8,8,8, + 211,8,139,182,139,49,17,26,243,26,8,8,8,8,8,208, + 16,191,191,191,191,191,191,191,191,191,191,191,121,191,191,191, + 121,191,121,16,121,121,121,121,121,69,121,121,121,121,121,69, + 121,121,121,16,121,121,121,121,121,16,121,16,121,16,16,16, + 121,16,121,16,16,16,16,16,16,16,16,208,16,208,208,63, + 74,74,74,74,74,71,102,74,74,248,71,102,248,74,248,74, + 102,102,74,102,102,248,248,102,102,248,102,248,102,71,102,71, + 74,71,71,71,71,71,74,71,74,71,71,71,74,71,74,71, + 71,71,71,71,71,74,71,71,71,71,71,71,71,71,71,74, + 71,71,74,71,74,74,144,71,71,71,74,71,71,71,74,71, + 74,71,102,248,102,74,71,74,248,71,71,71,102,248,74,71, + 102,102,71,102,74,248,74,248,71,71,74,248,74,248,71,71, + 71,74,71,71,71,74,71,71,71,71,71,71,71,74,244,71, + 71,71,71,71,71,71,71,71,74,74,71,74,71,74,71,71, + 71,71,71,71,74,71,74,71,71,71,74,144,74,71,74,144, + 74,71,71,71,74,71,74,74,144,74,144,74,144,71,74,71, + 144,144,140,140,71,74,71,71,71,71,71,71,71,140,140,26, + 67,12,12,67,122,187,17,26,101,8,8,8,211,211,211,8, + 211,211,8,8,101,150,17,211,26,101,8,8,8,8,211,8, + 8,211,8,211,8,101,150,17,243,26,101,8,8,211,8,8, + 211,8,211,8,211,139,101,150,17,211,26,49,8,8,211,211, + 211,8,211,211,8,139,8,101,150,17,243,26,101,8,8,8, + 211,211,8,8,211,8,211,139,67,150,17,243,42,49,8,8, + 211,211,211,8,8,211,211,8,8,101,150,17,211,26,101,8, + 8,8,211,211,8,8,211,8,211,139,67,150,17,211,42,49, + 8,8,211,211,211,8,8,211,8,211,139,67,150,17,211,26, + 101,8,8,8,8,211,8,8,211,8,211,139,101,150,17,243, + 26,101,8,8,8,211,8,8,211,211,8,211,139,101,150,17, + 243,42,49,8,8,211,211,211,8,8,8,211,8,139,67,150, + 17,211,26,101,8,8,8,8,211,8,8,211,8,139,211,67, + 150,17,243,42,49,8,8,8,8,211,8,8,211,8,211,139, + 101,150,12,243,26,101,8,8,8,211,211,8,8,211,211,8, + 139,101,150,17,243,26,101,8,8,8,211,211,8,8,211,8, + 211,139,101,150,17,243,42,49,8,8,8,8,211,211,8,211, + 8,139,211,67,150,17,243,42,49,8,8,8,211,211,211,8, + 211,211,8,8,101,150,17,211,26,101,8,8,8,211,211,211, + 8,8,8,8,139,101,150,17,8,26,8,8,67,8,8,208, + 191,191,191,191,191,191,121,191,191,121,191,191,191,191,121,191, + 16,16,121,191,121,191,191,121,238,121,121,121,121,16,16,121, + 125,69,121,121,121,16,16,16,16,16,121,121,16,121,16,16, + 16,121,16,16,16,16,208,16,208,16,16,54,208,208,208,63, + 74,248,74,74,74,74,74,102,74,102,74,102,248,102,102,71, + 71,248,74,248,74,102,74,71,74,74,74,71,102,71,74,248, + 71,248,74,248,74,71,71,71,74,71,71,71,71,71,71,71, + 71,71,71,71,71,71,74,71,71,71,71,74,71,74,71,71, + 74,71,140,71,71,71,74,74,71,71,71,71,71,71,74,71, + 71,74,71,74,248,102,248,74,102,102,102,71,102,248,102,71, + 74,74,71,248,74,102,74,102,74,248,71,71,71,74,248,74, + 71,102,71,74,71,74,71,71,71,71,71,74,71,144,71,71, + 144,144,144,71,71,71,71,71,71,74,71,74,71,144,140,71, + 71,74,74,71,74,71,71,74,71,71,71,71,74,71,74,144, + 140,144,140,144,144,144,144,74,144,74,144,71,140,144,144,74, + 74,71,71,74,71,144,74,71,74,71,144,74,71,140,140,26, + 182,12,12,8,219,26,17,122,101,139,8,211,8,211,8,211, + 8,211,8,8,101,150,132,141,42,49,211,8,211,211,8,211, + 8,211,8,211,8,139,150,17,141,42,49,211,8,211,8,211, + 211,8,211,8,8,8,139,150,132,243,122,101,211,8,211,8, + 211,8,211,8,187,211,8,139,150,17,141,42,49,8,211,8, + 211,8,211,8,211,8,8,8,8,150,17,243,122,101,211,8, + 211,8,211,8,211,8,211,8,8,101,150,132,141,42,49,8, + 211,8,211,8,211,8,211,8,8,8,139,150,132,243,122,101, + 211,8,211,8,211,8,211,8,8,8,8,139,150,132,141,42, + 49,211,8,211,211,8,211,8,211,8,8,8,139,150,17,141, + 42,49,211,8,211,8,109,211,8,211,8,8,8,139,150,12, + 243,122,101,211,8,211,8,211,8,211,211,8,8,8,139,150, + 132,141,42,49,211,8,211,211,8,211,8,211,187,211,8,139, + 150,17,243,122,101,211,8,211,211,8,211,8,211,8,8,8, + 139,150,17,141,42,49,8,211,8,211,8,211,8,211,8,8, + 8,139,150,17,141,42,49,8,211,8,211,8,211,8,211,8, + 8,8,8,243,17,243,122,101,211,211,211,8,211,8,211,8, + 187,211,8,139,150,17,243,122,101,211,8,211,8,211,8,211, + 8,211,8,8,101,150,132,141,42,49,8,211,8,211,8,211, + 8,211,211,8,8,139,150,17,8,26,8,8,8,8,8,208, + 16,191,191,191,191,191,191,191,191,121,191,121,191,191,191,191, + 121,16,16,121,16,69,121,121,121,121,121,191,121,16,16,121, + 121,121,121,121,121,121,16,121,121,121,16,16,16,16,121,16, + 16,121,16,16,16,16,16,16,54,208,208,54,208,63,208,63, + 74,74,74,102,74,74,74,102,74,74,248,74,102,74,71,74, + 102,74,248,74,102,71,102,248,74,248,71,102,71,74,248,74, + 102,74,71,71,71,248,74,71,71,71,71,74,74,74,74,71, + 71,71,74,71,74,71,71,71,74,74,74,71,74,71,71,74, + 71,71,71,144,71,74,71,71,74,71,140,71,74,74,71,71, + 71,71,74,102,102,74,74,248,74,71,71,102,74,102,74,71, + 74,248,74,74,102,71,71,71,71,71,74,248,74,71,74,71, + 71,71,74,71,71,71,74,71,71,74,71,71,74,71,144,71, + 71,74,71,71,71,74,144,71,71,71,71,144,71,71,71,74, + 71,71,71,71,71,71,71,71,74,71,74,74,144,144,71,74, + 144,71,71,74,71,74,74,144,74,144,71,140,144,74,74,144, + 144,140,144,144,144,71,144,140,144,74,74,144,71,140,140,26, + 8,243,243,8,42,12,17,42,101,211,8,211,211,8,211,109, + 8,109,211,8,67,150,26,211,122,139,211,211,211,8,211,109, + 8,211,187,109,8,67,243,219,139,122,101,211,211,211,211,187, + 211,187,211,187,109,8,67,150,26,182,42,101,211,8,211,211, + 187,109,211,8,211,211,8,67,243,219,139,122,139,211,211,211, + 8,211,109,8,211,187,109,211,67,150,17,182,42,101,211,8, + 91,211,109,8,109,8,109,211,8,67,150,26,211,122,101,211, + 211,8,211,211,8,109,8,109,109,8,67,150,26,182,26,101, + 211,211,211,211,187,211,211,187,109,109,8,67,150,26,211,122, + 139,211,8,211,211,211,187,109,8,109,109,8,67,150,219,139, + 122,139,211,8,211,211,8,211,8,187,109,109,8,67,150,219, + 182,42,101,211,8,91,211,211,187,211,187,109,109,8,67,150, + 26,211,122,139,211,211,211,8,211,109,8,211,8,8,8,67, + 150,17,182,42,101,211,8,211,211,211,187,109,8,109,109,8, + 67,243,219,139,122,139,211,211,211,8,211,8,109,8,109,109, + 8,139,150,17,139,122,139,211,211,211,8,211,211,8,211,187, + 109,211,67,150,17,182,42,101,8,211,211,211,187,109,211,8, + 211,8,8,139,150,17,182,42,101,211,8,211,211,8,109,211, + 8,109,211,8,67,150,26,211,122,139,211,211,8,211,211,187, + 109,8,187,109,8,67,150,17,67,26,8,8,141,12,8,208, + 191,191,191,191,191,191,121,16,16,191,191,191,16,121,16,16, + 16,16,16,121,16,121,16,121,16,121,121,121,16,16,16,121, + 16,121,16,16,16,121,16,121,16,16,16,16,16,16,121,16, + 16,16,16,16,208,16,208,16,208,16,16,208,16,208,208,208, + 100,74,74,100,74,102,74,102,74,74,102,74,248,102,102,74, + 248,74,248,74,102,71,74,248,74,102,74,102,248,74,102,71, + 71,74,71,74,71,71,74,71,74,74,71,71,71,71,74,74, + 71,74,71,74,102,71,74,71,74,71,71,71,74,74,71,140, + 140,74,74,74,144,74,71,71,71,71,144,74,71,71,71,74, + 74,74,71,74,248,102,74,248,74,74,248,248,74,248,102,248, + 74,102,248,74,102,102,74,102,74,71,74,71,71,71,74,74, + 74,71,71,74,74,71,74,74,71,74,71,71,71,71,74,71, + 71,144,140,144,71,71,71,144,144,71,71,71,71,71,144,71, + 71,71,71,71,144,74,71,71,71,71,71,74,71,144,71,74, + 140,144,144,140,144,144,140,144,140,140,144,74,144,144,74,74, + 71,71,74,140,140,74,71,74,144,71,74,144,71,140,144,26, + 139,12,12,211,26,26,26,42,101,139,211,211,91,211,8,91, + 8,109,211,8,139,150,26,8,42,101,139,211,91,211,91,8, + 211,211,8,139,187,139,12,26,8,122,101,139,211,91,8,211, + 8,211,211,8,139,8,139,150,26,8,122,101,139,211,211,91, + 139,8,109,187,8,139,187,139,12,26,8,122,101,139,211,8, + 91,211,91,8,211,8,211,211,139,12,26,8,122,101,139,139, + 211,8,91,8,109,211,187,139,8,139,150,26,8,122,101,139, + 211,211,211,91,8,109,211,187,211,8,139,150,26,8,122,101, + 139,211,91,8,211,8,211,8,211,211,8,139,150,26,8,122, + 101,139,211,211,91,8,211,8,109,8,211,8,139,12,26,8, + 122,101,139,211,211,91,211,187,139,211,8,211,8,139,12,26, + 8,122,101,139,139,211,8,211,211,8,211,8,211,8,139,150, + 26,8,122,101,139,211,91,211,91,8,211,187,211,211,211,139, + 12,26,8,122,101,139,211,211,91,8,211,8,109,8,211,8, + 139,12,26,8,122,101,139,211,8,91,211,91,8,211,211,211, + 8,139,12,26,8,122,101,139,211,8,91,211,91,8,211,8, + 211,211,139,12,26,8,122,101,139,211,211,8,211,8,211,187, + 8,139,8,139,12,26,8,122,101,139,211,211,91,211,187,211, + 8,109,211,8,139,150,26,8,122,101,139,211,211,211,91,8, + 211,211,211,211,8,139,150,26,182,12,8,8,8,8,8,208, + 208,208,121,191,16,191,191,191,16,16,16,191,16,191,16,121, + 191,121,16,16,121,121,121,121,121,16,121,16,121,16,16,121, + 121,121,121,16,16,121,121,16,16,16,121,16,16,16,16,121, + 16,16,16,16,16,16,16,16,208,208,54,208,16,208,208,16, + 74,74,100,102,74,74,74,74,102,102,74,102,102,74,71,102, + 74,102,74,248,71,74,248,74,102,74,74,71,74,248,71,74, + 102,71,74,71,74,74,71,74,71,71,74,71,140,71,71,71, + 74,71,71,71,74,74,74,74,74,74,74,74,74,71,71,71, + 71,71,71,71,74,140,144,140,140,71,74,71,71,74,74,71, + 71,102,74,102,102,102,102,74,102,102,74,74,248,74,74,71, + 74,74,74,248,71,71,71,71,71,74,71,74,74,71,71,71, + 74,71,74,144,71,74,71,71,71,144,71,71,74,71,144,71, + 71,71,71,71,144,71,71,74,71,71,74,144,144,71,71,74, + 71,144,144,71,71,144,71,144,71,140,144,71,140,71,140,144, + 144,74,74,144,140,140,71,140,71,144,140,144,140,140,144,144, + 144,140,144,71,144,144,144,71,74,140,71,71,140,140,39,187, + 8,12,12,8,219,12,187,122,101,211,211,211,8,211,187,211, + 8,211,211,8,139,150,17,211,122,101,211,211,211,8,139,187, + 109,109,8,211,8,67,150,17,211,42,101,211,139,211,211,211, + 211,187,139,187,211,8,67,150,17,211,42,101,211,211,211,8, + 8,187,211,211,8,211,8,67,150,17,211,42,101,211,211,8, + 211,8,211,211,187,211,211,8,67,150,17,211,42,101,139,8, + 211,211,8,211,8,211,8,211,8,67,150,17,211,42,101,211, + 91,211,211,8,109,8,211,211,211,8,67,150,17,211,42,101, + 211,139,8,211,211,211,109,8,187,211,211,139,150,17,211,42, + 101,211,211,8,139,91,211,109,8,109,211,211,67,150,17,211, + 42,101,211,211,8,8,211,211,187,8,211,211,211,67,150,17, + 211,42,101,139,8,211,8,91,109,211,8,109,211,211,67,150, + 17,211,42,101,211,211,211,8,211,8,211,8,211,211,8,139, + 150,17,211,42,101,211,211,8,139,91,211,109,8,109,211,109, + 67,150,17,211,42,101,211,211,8,211,8,243,109,8,187,211, + 211,67,150,17,211,42,101,211,211,8,211,8,211,211,187,211, + 211,8,67,150,17,211,42,101,211,139,91,211,211,187,211,139, + 187,211,211,67,150,17,211,42,101,211,211,211,8,211,8,211, + 187,211,211,8,139,150,17,211,42,101,211,91,211,211,8,211, + 8,211,187,211,8,67,150,17,8,12,8,8,8,12,67,208, + 208,191,191,208,191,208,16,191,16,191,191,16,191,121,208,121, + 16,16,16,16,16,16,121,16,121,121,16,16,16,16,16,121, + 16,121,16,121,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,208,16,208,208,16,208,208,16,208,16,16,208, + 74,74,100,100,102,100,102,74,100,102,74,74,102,102,71,248, + 74,102,74,102,102,102,74,71,71,248,74,102,74,74,71,74, + 71,71,74,71,71,71,71,74,71,74,71,74,71,140,71,71, + 74,71,74,71,71,74,71,74,74,74,71,71,74,74,74,71, + 140,140,140,71,71,74,71,71,71,71,144,140,74,71,74,74, + 74,102,74,74,74,102,102,71,74,248,102,74,248,102,74,248, + 74,102,74,74,102,74,74,248,74,71,71,71,74,71,71,74, + 74,71,74,71,144,74,71,74,71,74,144,71,144,74,144,144, + 74,71,71,71,71,144,71,144,144,144,71,71,144,140,71,144, + 74,71,144,140,71,144,74,144,71,71,140,71,71,71,71,74, + 144,140,74,144,140,144,140,140,140,71,140,144,140,140,140,140, + 144,140,140,74,74,140,140,71,71,140,140,71,71,140,140,94, + 211,109,12,8,26,26,17,122,101,211,211,8,211,211,8,8, + 109,8,211,8,67,12,17,243,122,101,139,8,211,8,211,211, + 8,211,8,211,211,67,17,17,243,122,101,139,8,211,8,211, + 8,8,211,8,211,91,67,12,17,243,122,101,211,211,211,211, + 211,211,8,109,8,211,211,67,12,17,243,122,101,139,211,211, + 211,8,187,139,8,211,8,91,67,12,17,243,122,101,139,211, + 211,8,211,111,91,8,109,211,91,67,150,17,243,122,101,139, + 8,211,211,211,187,211,8,109,211,91,67,12,17,243,122,101, + 139,8,211,211,91,8,211,8,211,211,8,67,12,17,243,122, + 101,211,211,8,211,211,8,109,91,8,211,91,67,12,17,243, + 122,101,211,211,211,211,211,8,211,109,187,211,91,67,12,17, + 243,122,101,139,211,211,211,211,8,109,91,8,211,91,67,12, + 17,243,122,101,139,8,211,8,211,111,8,109,187,211,8,67, + 150,17,243,122,101,211,211,8,211,211,8,109,91,8,211,91, + 67,12,17,243,122,101,139,211,211,211,211,211,187,211,211,8, + 8,67,12,17,243,122,101,139,211,211,211,8,187,139,8,211, + 187,211,67,12,17,243,122,101,211,211,8,211,211,211,187,211, + 8,211,8,67,12,17,243,122,101,211,211,211,8,211,91,8, + 211,8,211,8,67,12,17,243,122,101,139,8,211,211,211,187, + 8,139,8,211,91,139,150,17,8,26,8,141,8,8,8,208, + 208,191,191,208,191,191,16,16,208,16,191,16,191,16,191,16, + 16,16,121,16,16,16,16,16,16,121,121,16,121,16,16,121, + 16,16,16,16,16,121,16,16,16,16,16,16,16,16,16,16, + 16,16,208,16,16,16,54,16,16,16,16,16,208,16,16,208, + 100,74,74,74,100,102,100,102,74,74,102,102,74,74,102,74, + 102,74,248,74,71,74,248,74,102,74,74,71,102,248,74,71, + 74,74,71,74,74,74,71,74,71,140,144,71,71,71,74,74, + 74,71,71,74,74,71,74,71,74,71,74,74,71,74,71,140, + 71,71,71,140,140,71,71,140,140,144,74,71,74,74,74,102, + 74,74,102,102,102,248,74,74,102,74,74,248,74,74,102,74, + 71,74,248,71,74,102,71,74,71,74,74,74,71,71,74,71, + 140,71,71,74,74,144,140,71,74,71,71,71,71,71,71,74, + 144,144,74,144,71,74,144,74,71,74,71,74,71,71,144,71, + 71,140,71,71,140,71,71,71,74,144,71,144,140,144,140,144, + 140,144,144,140,71,140,144,144,144,39,144,140,71,144,144,140, + 140,144,144,140,144,71,71,140,140,144,144,114,140,114,114,17, + 243,12,187,8,219,12,187,42,101,211,211,211,139,211,109,211, + 211,211,211,211,139,132,17,109,42,49,211,139,8,211,211,211, + 109,211,211,8,211,139,150,17,109,42,101,211,211,211,211,211, + 109,211,211,211,8,139,8,132,17,211,26,101,211,211,211,211, + 211,211,211,211,109,8,211,139,132,17,109,42,101,211,211,8, + 139,139,211,211,211,211,8,211,67,132,17,109,42,101,211,211, + 211,211,211,211,211,211,211,8,139,8,132,17,109,42,49,211, + 211,211,211,211,211,211,8,211,8,139,8,132,17,109,42,101, + 211,211,8,211,211,211,211,211,8,211,211,139,132,17,109,42, + 101,211,139,211,211,211,109,139,211,211,8,139,8,132,17,109, + 42,101,211,211,211,211,211,109,211,211,211,8,211,139,132,17, + 109,42,101,211,211,139,8,211,109,139,211,211,8,139,8,132, + 17,211,42,101,139,211,211,211,211,211,211,211,211,211,211,139, + 132,17,109,42,101,211,139,211,211,211,109,139,211,211,8,211, + 139,132,17,109,42,101,211,211,8,211,211,211,211,211,211,211, + 211,139,132,17,109,42,101,211,211,8,139,211,139,8,211,211, + 8,211,139,132,17,109,122,49,139,8,211,211,211,211,139,8, + 211,211,211,139,132,17,109,42,101,211,211,211,211,139,211,211, + 211,211,211,211,139,132,17,211,122,49,139,211,211,211,211,139, + 211,8,211,8,8,67,150,26,8,12,8,8,8,12,8,208, + 208,191,191,191,191,208,191,191,191,208,16,191,208,191,16,16, + 121,16,16,16,191,16,191,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 208,208,16,16,208,208,208,208,208,208,208,208,16,208,208,16, + 100,74,100,74,74,74,74,102,74,74,74,248,102,74,102,74, + 248,102,102,74,102,74,102,74,71,74,74,74,74,74,74,71, + 71,74,71,71,71,74,74,71,74,74,74,74,74,140,71,71, + 74,74,71,71,74,71,74,71,74,74,74,74,140,74,71,74, + 74,140,71,71,74,74,71,71,74,74,71,74,71,74,74,74, + 102,74,74,74,74,102,102,74,102,102,74,102,102,74,248,102, + 71,74,74,74,71,74,71,74,71,71,74,74,74,74,71,74, + 140,144,74,71,71,74,144,74,74,144,140,144,74,71,71,71, + 74,144,71,144,71,71,144,140,71,144,71,144,140,71,140,144, + 71,71,144,71,144,140,71,144,74,140,74,71,140,71,140,144, + 74,140,74,114,144,74,140,140,144,140,140,114,140,140,140,144, + 140,140,144,140,140,140,144,74,74,74,74,144,74,39,39,26, + 243,187,12,8,42,26,17,122,49,139,211,211,211,211,61,211, + 211,109,8,8,67,12,17,109,0,67,211,211,211,211,211,91, + 211,109,211,211,8,67,17,17,109,122,49,211,211,211,211,211, + 91,139,187,211,8,139,67,150,219,109,122,49,139,139,8,211, + 211,61,211,211,211,211,8,67,17,219,211,122,49,211,211,211, + 211,211,109,109,211,211,8,8,67,132,219,211,122,49,211,211, + 211,211,8,211,211,211,211,8,139,139,150,17,109,0,67,139, + 211,8,211,211,211,91,211,211,8,139,67,150,219,211,122,49, + 211,211,139,211,8,61,211,211,211,211,8,67,150,219,211,122, + 49,211,211,8,139,211,91,211,211,8,211,139,67,150,219,211, + 122,49,139,211,211,211,211,211,211,211,8,211,211,67,150,219, + 211,122,67,211,211,8,211,211,211,187,139,8,8,139,67,150, + 219,109,122,67,211,211,211,211,211,211,211,211,8,211,8,139, + 150,219,211,122,49,211,211,8,139,211,91,211,211,8,211,211, + 67,150,219,109,122,49,211,211,211,211,211,211,211,211,211,8, + 8,67,17,219,211,122,49,211,211,211,211,211,61,139,211,211, + 211,8,67,12,219,211,122,139,139,211,211,211,211,211,211,109, + 211,211,8,67,132,219,211,122,49,139,211,211,8,211,211,109, + 211,211,211,8,67,150,219,211,122,67,211,139,8,211,211,61, + 211,211,211,139,8,139,150,17,8,26,8,8,8,243,8,208, + 208,208,191,208,121,191,208,16,191,191,16,16,16,191,16,208, + 191,208,191,16,16,16,16,191,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,208,16,208,16,16,16, + 16,16,16,16,54,16,54,16,16,54,16,16,16,16,208,208, + 74,100,74,102,100,100,102,74,102,102,102,74,74,102,74,102, + 74,74,74,102,74,102,74,74,102,102,71,102,71,71,74,74, + 74,74,74,74,74,74,71,74,71,71,74,144,140,71,74,144, + 71,71,71,74,71,74,74,74,74,71,74,71,71,140,74,140, + 144,74,74,74,71,140,71,74,71,74,74,74,74,74,102,74, + 74,74,102,74,102,74,74,248,74,74,102,74,74,102,74,74, + 102,74,102,248,74,74,74,74,74,74,71,74,74,71,74,71, + 71,74,71,74,74,74,71,71,144,71,71,71,144,140,71,74, + 71,71,74,74,144,74,71,71,144,74,140,71,71,144,71,74, + 144,140,71,74,71,71,140,74,144,71,140,144,71,114,71,74, + 114,71,140,140,140,114,144,140,140,140,144,140,144,140,144,140, + 140,144,140,140,140,140,140,140,144,140,140,74,144,140,114,187, + 12,150,91,8,219,12,26,42,101,139,139,139,139,139,139,211, + 211,139,139,139,139,132,26,109,26,101,139,139,139,139,139,139, + 139,211,211,139,139,139,132,26,243,42,101,139,139,139,139,139, + 139,139,139,211,139,211,67,17,26,211,26,139,139,139,139,139, + 139,139,139,211,211,139,139,139,150,26,109,42,101,139,139,139, + 211,139,211,139,211,211,139,211,139,12,26,243,42,101,139,139, + 139,139,139,139,211,211,211,139,139,67,17,26,243,26,101,139, + 139,139,139,139,139,139,211,211,139,211,67,17,26,109,26,101, + 139,139,139,139,139,139,211,211,211,139,139,139,17,26,109,42, + 101,139,139,211,139,139,211,139,211,211,139,211,67,17,26,109, + 42,139,139,139,139,139,139,139,211,211,139,139,8,67,17,26, + 109,42,101,139,139,139,139,139,139,139,211,211,139,211,67,17, + 26,211,26,101,139,139,139,139,139,211,211,139,211,139,139,67, + 17,26,109,42,101,139,139,139,211,139,139,211,211,139,139,8, + 67,17,26,211,42,101,139,139,139,139,139,211,211,211,211,139, + 139,139,150,26,109,42,101,139,139,139,139,139,139,211,211,211, + 139,139,139,132,26,109,26,101,139,139,139,139,139,211,211,211, + 211,139,139,139,12,26,109,42,139,139,139,139,139,139,211,211, + 211,211,139,139,139,17,26,109,42,101,139,139,139,139,139,139, + 211,211,211,211,139,67,150,17,8,12,8,141,8,8,141,208, + 191,191,191,191,191,208,121,16,16,16,16,191,208,16,191,16, + 16,121,208,16,16,16,16,16,16,16,16,16,208,16,16,16, + 16,16,16,16,16,16,16,16,208,16,16,16,16,208,208,16, + 16,16,208,208,208,208,208,208,208,208,208,208,208,208,54,16, + 74,102,100,74,102,100,74,74,74,74,102,102,74,102,74,102, + 102,102,74,102,74,102,74,74,74,102,74,74,74,74,102,74, + 71,74,74,74,74,71,140,71,140,144,74,74,71,140,71,74, + 140,140,144,74,71,71,74,71,74,74,74,74,74,74,74,74, + 74,71,144,74,74,140,74,74,74,144,74,74,74,74,74,102, + 74,102,74,74,102,102,74,102,102,74,248,102,74,74,102,74, + 74,74,74,102,74,74,71,74,74,74,71,74,71,74,74,74, + 74,144,140,71,71,140,74,71,140,140,140,74,71,144,140,74, + 74,144,71,71,144,140,144,74,144,71,144,74,71,71,71,71, + 71,140,144,144,144,71,144,74,144,71,144,140,140,140,114,74, + 114,144,144,140,140,140,140,144,140,140,140,140,140,140,140,140, + 140,144,140,144,140,140,140,140,140,144,114,140,144,39,39,187, + 12,150,187,8,42,187,26,78,91,91,26,91,91,26,91,26, + 91,26,91,26,67,150,26,187,42,187,91,26,91,91,26,91, + 26,91,26,91,26,67,150,26,8,162,8,91,26,91,91,187, + 26,91,26,91,26,26,67,132,26,12,78,91,91,26,91,91, + 26,26,91,26,91,26,91,182,150,26,187,42,8,91,26,91, + 26,91,91,26,91,91,26,12,182,150,26,187,42,8,91,26, + 91,26,91,26,91,26,91,26,26,67,132,26,12,78,8,91, + 26,91,26,91,26,91,26,91,26,26,67,132,26,187,42,8, + 91,26,91,26,187,26,91,26,91,26,26,67,150,26,8,122, + 8,91,26,91,26,12,26,91,26,91,26,26,67,132,26,8, + 122,91,12,91,26,91,26,91,91,26,91,26,12,67,132,26, + 8,122,8,91,26,91,91,26,91,26,91,26,91,26,67,132, + 26,12,78,8,91,26,91,91,26,91,91,26,91,26,26,67, + 132,26,12,78,8,26,91,91,26,91,26,91,26,91,26,26, + 67,132,26,8,162,8,91,91,26,91,26,91,91,26,91,26, + 91,182,150,26,187,42,187,91,26,91,26,187,26,91,26,91, + 26,26,67,132,26,8,162,8,91,26,91,26,91,26,91,91, + 26,91,26,67,132,26,8,122,91,91,26,91,26,91,26,91, + 91,26,91,26,67,150,26,12,78,91,91,26,91,26,187,26, + 91,26,91,91,26,8,150,12,8,12,8,12,8,12,7,208, + 208,208,191,191,191,191,191,208,191,16,208,191,191,16,16,16, + 16,208,121,208,121,16,16,16,16,16,16,16,16,16,208,16, + 16,16,16,208,16,16,208,16,16,208,16,16,16,16,16,16, + 208,16,208,16,208,208,16,16,16,208,16,54,16,208,208,208, + 100,100,74,100,100,102,100,102,102,102,74,74,102,102,74,74, + 74,74,102,74,74,74,102,102,74,74,74,102,71,71,74,74, + 74,71,71,74,74,71,74,71,74,74,74,71,140,74,71,71, + 71,71,74,74,74,74,74,74,71,74,74,74,71,74,74,74, + 74,140,74,140,74,71,140,71,74,74,74,74,74,74,74,74, + 74,74,102,74,74,74,74,74,74,102,74,74,102,74,74,102, + 102,74,74,74,248,74,74,74,71,71,74,74,71,74,71,74, + 71,74,71,140,140,71,71,74,71,71,71,71,140,74,71,140, + 144,74,144,140,71,71,74,144,74,140,74,144,144,140,144,140, + 144,71,74,74,71,140,71,71,74,140,144,140,71,114,71,114, + 140,140,140,71,144,140,144,140,144,144,140,144,140,144,144,140, + 144,140,140,140,74,140,144,140,140,140,140,71,140,114,114,166, + 8,12,187,8,219,17,12,0,219,219,219,26,219,219,183,187, + 42,26,183,219,8,150,12,211,0,26,17,219,26,183,219,183, + 187,26,26,183,219,8,132,187,211,0,26,219,219,26,183,42, + 187,183,219,219,187,26,8,150,12,211,0,219,219,219,26,183, + 187,187,183,42,26,219,219,8,150,12,211,0,26,219,187,219, + 187,42,26,183,42,183,187,26,8,150,12,211,0,26,219,187, + 26,26,42,187,219,42,219,187,26,8,150,187,211,0,26,219, + 187,26,187,42,187,183,26,219,187,26,8,150,12,211,0,26, + 219,219,219,187,42,187,187,26,26,187,17,8,132,17,211,0, + 26,219,219,219,187,42,187,183,219,219,219,26,8,150,17,211, + 0,219,26,26,26,26,26,42,183,219,26,183,26,8,150,17, + 211,0,26,219,219,26,183,26,183,187,183,219,219,26,8,150, + 12,211,0,26,219,219,219,219,42,26,183,26,26,187,26,8, + 150,12,211,0,26,219,219,219,219,219,187,219,219,219,187,26, + 8,150,17,211,0,26,219,183,187,26,26,26,183,26,42,219, + 219,8,150,12,211,0,26,17,26,183,187,42,187,183,26,219, + 187,219,8,12,17,211,0,26,219,187,26,26,26,26,183,42, + 26,183,219,8,150,17,211,0,219,219,219,26,187,26,26,183, + 42,26,183,219,8,12,12,211,122,219,219,219,219,187,26,187, + 183,219,219,219,26,182,17,17,8,26,8,8,8,12,8,208, + 208,191,191,208,208,191,16,191,208,191,191,16,208,191,208,191, + 121,208,121,208,16,121,16,16,16,16,16,16,208,16,16,16, + 16,208,16,16,208,16,16,208,16,16,16,16,208,16,208,208, + 16,208,16,208,208,208,208,16,208,16,208,208,208,16,208,208, + 74,100,74,100,100,100,100,100,100,102,100,74,74,102,74,102, + 74,74,102,102,102,74,74,74,102,74,74,102,74,71,74,71, + 74,74,71,74,74,71,140,74,74,144,140,71,71,140,71,140, + 74,74,71,74,71,71,74,74,74,74,74,74,74,74,71,140, + 74,74,74,74,74,74,140,140,74,71,74,74,74,74,74,74, + 74,74,74,74,102,100,74,74,74,74,102,74,102,102,74,74, + 102,102,74,74,74,248,74,74,74,74,71,74,140,74,74,140, + 140,140,71,71,74,74,71,140,74,74,140,71,71,140,71,74, + 71,140,71,140,144,144,74,144,71,71,71,74,74,74,71,140, + 144,144,144,140,71,140,144,144,74,71,71,140,140,114,140,144, + 140,144,39,140,144,140,140,140,140,140,140,144,140,140,140,140, + 144,140,144,114,74,140,140,140,144,140,114,144,74,39,114,26, + 12,12,187,211,26,42,26,122,8,139,67,139,139,139,139,67, + 182,139,139,139,8,150,219,8,0,211,139,67,139,139,139,139, + 182,67,139,139,139,8,150,42,243,0,211,139,139,139,67,139, + 67,139,139,139,139,139,8,150,219,243,0,8,101,139,139,139, + 139,139,67,182,139,139,139,8,150,219,243,0,211,139,139,139, + 67,139,139,67,139,139,139,67,8,187,219,243,0,211,139,67, + 67,67,139,139,67,139,139,139,139,8,150,219,243,0,211,139, + 67,139,67,139,139,67,139,139,139,139,8,150,219,243,0,211, + 139,139,139,67,139,139,182,182,139,139,139,8,150,42,243,0, + 211,101,139,139,67,139,139,139,139,139,139,139,8,150,26,243, + 0,211,67,67,67,139,139,139,139,67,139,139,139,8,150,42, + 243,0,211,139,67,139,67,139,139,139,139,139,139,139,8,132, + 219,243,0,211,139,139,139,67,139,139,67,182,139,139,139,8, + 150,219,211,0,211,139,139,139,139,139,67,139,139,139,139,139, + 8,150,42,243,0,211,139,139,67,67,139,139,67,67,139,139, + 139,8,150,219,243,0,211,67,139,139,67,139,139,67,139,139, + 139,139,139,150,42,243,0,211,139,67,67,139,99,139,67,67, + 139,139,139,8,150,26,243,0,8,101,67,139,67,139,139,67, + 67,139,139,139,139,132,219,243,0,8,101,139,139,67,139,139, + 139,139,139,139,139,8,12,219,141,12,8,8,8,12,8,208, + 208,16,191,191,16,191,16,191,16,16,208,191,16,16,16,191, + 208,191,16,16,121,208,121,16,16,16,16,208,16,16,208,16, + 16,16,16,16,16,16,16,208,16,208,16,16,16,16,16,16, + 16,208,208,54,208,63,208,16,208,208,208,208,208,208,16,208, + 100,102,100,100,100,102,100,102,74,100,102,102,102,102,74,100, + 102,102,74,74,74,102,102,102,74,74,102,74,74,102,74,102, + 74,71,74,71,74,74,74,74,74,74,74,74,74,74,140,71, + 74,74,144,74,74,74,74,74,74,74,74,74,74,74,74,74, + 74,74,71,74,74,74,74,74,140,140,74,74,74,74,74,74, + 74,74,74,74,74,74,102,100,100,102,74,102,74,74,102,74, + 74,74,102,102,102,74,102,102,248,74,71,74,71,74,74,74, + 71,74,140,74,74,140,140,71,144,71,71,140,140,71,140,71, + 140,71,144,71,74,74,144,71,140,144,140,144,144,140,144,74, + 74,74,74,71,144,71,74,74,144,140,140,144,71,140,140,140, + 140,140,144,140,140,140,140,144,140,144,140,140,114,140,144,140, + 140,144,140,140,140,140,144,140,140,140,140,140,114,114,39,166, + 243,17,12,12,26,0,187,0,8,139,139,211,211,139,211,211, + 8,211,139,139,211,12,122,182,0,8,139,139,211,139,211,139, + 211,211,8,139,139,211,12,122,211,0,8,139,139,139,211,211, + 139,187,211,211,139,182,211,12,122,211,0,211,139,139,211,211, + 211,139,211,211,211,139,139,211,187,122,109,0,8,139,139,211, + 139,109,139,109,8,211,139,139,211,150,122,109,0,8,139,211, + 211,211,109,139,187,211,211,139,182,211,12,122,211,0,8,139, + 211,211,211,211,211,8,211,211,139,182,211,17,122,211,0,8, + 139,139,139,211,109,139,139,211,211,139,139,211,187,122,211,0, + 8,139,139,139,211,211,139,211,109,139,139,182,211,187,122,211, + 0,211,139,211,211,211,139,139,211,8,211,139,139,211,187,122, + 211,0,8,139,211,139,211,211,211,211,211,211,139,182,211,187, + 122,211,0,8,139,139,139,211,211,139,211,8,139,139,182,211, + 187,122,243,0,8,139,139,211,211,211,139,187,211,211,139,182, + 211,187,122,211,0,8,139,139,211,211,211,211,109,8,211,139, + 139,211,12,122,211,0,8,139,139,139,211,211,139,187,211,211, + 139,139,8,187,122,211,0,8,139,139,211,139,211,211,109,211, + 8,139,139,211,187,122,211,0,139,139,109,139,109,139,211,109, + 211,8,139,139,243,12,122,211,0,211,139,139,211,139,109,139, + 211,211,211,139,139,211,150,42,8,12,8,243,8,8,141,208, + 208,191,208,191,191,16,16,16,191,191,16,191,208,191,191,16, + 16,208,121,208,191,16,191,16,16,16,16,16,208,16,208,16, + 16,208,16,208,16,208,16,16,208,16,16,208,208,16,208,208, + 208,16,208,208,208,208,208,208,16,16,208,208,208,208,208,208, + 100,100,100,100,100,100,100,100,102,100,74,100,100,102,102,74, + 74,102,102,102,74,74,74,74,102,74,74,102,74,102,74,74, + 74,74,74,74,74,74,71,140,74,71,74,140,71,74,74,74, + 71,74,74,74,140,74,74,144,74,71,74,74,74,74,74,74, + 74,169,140,140,74,74,74,74,74,74,74,140,74,74,74,74, + 74,74,74,100,74,74,74,102,100,100,74,102,102,100,74,102, + 74,74,74,74,74,74,74,100,74,74,74,74,74,74,71,74, + 74,74,71,140,71,74,74,74,74,140,71,71,140,74,140,74, + 140,74,144,140,71,74,140,71,140,71,140,140,71,144,140,144, + 144,144,140,144,140,144,144,74,144,140,140,140,144,144,140,114, + 140,140,140,140,140,140,140,140,140,140,140,140,114,39,140,144, + 140,140,144,140,140,140,140,140,144,140,140,140,140,39,39,187, + 243,132,187,8,219,122,26,0,8,211,211,211,109,109,187,211, + 211,8,211,139,243,17,42,243,0,8,211,211,109,109,187,211, + 187,211,8,211,139,243,17,42,8,0,8,211,109,109,109,109, + 211,8,211,211,211,139,243,17,42,8,0,8,211,211,211,109, + 187,211,8,8,8,211,139,243,17,26,243,0,8,211,109,187, + 139,187,211,187,211,8,211,139,211,17,26,243,0,8,139,109, + 211,211,109,139,8,8,139,211,139,243,17,42,243,0,8,139, + 109,109,211,109,211,187,139,211,211,139,211,17,42,211,0,8, + 139,109,109,211,187,8,109,8,211,211,139,243,17,42,243,0, + 8,139,109,109,109,109,8,211,187,139,211,139,8,17,42,243, + 0,8,139,109,211,109,109,187,211,211,211,211,139,243,17,42, + 211,0,8,139,109,109,211,211,187,8,211,211,211,139,8,17, + 42,8,0,8,211,109,109,109,187,211,109,187,139,8,139,8, + 17,42,8,0,8,211,182,211,109,109,211,8,211,211,211,139, + 8,17,42,243,0,8,139,109,109,109,109,211,187,139,187,139, + 139,243,17,42,211,0,187,139,109,109,109,109,211,8,211,187, + 211,182,8,17,42,8,0,8,139,109,109,211,211,8,109,211, + 187,139,139,243,17,42,243,0,8,139,109,211,109,109,8,109, + 211,8,211,182,243,17,42,8,0,8,211,254,8,109,109,8, + 187,211,211,8,182,243,17,26,211,12,8,243,8,12,8,208, + 208,191,16,191,191,191,208,16,16,191,16,16,16,16,208,191, + 208,121,191,16,121,208,16,16,16,16,16,16,16,16,208,16, + 208,16,208,16,16,208,16,208,16,208,16,16,208,16,16,16, + 208,208,208,208,208,208,208,16,208,208,208,208,208,208,16,208, + 100,100,100,100,100,100,102,100,100,100,100,102,74,100,100,102, + 100,100,100,74,102,102,102,102,74,102,102,74,74,74,102,74, + 102,74,71,74,74,74,74,71,74,140,74,74,74,74,140,140, + 74,74,71,140,71,74,140,74,74,140,74,74,74,74,74,74, + 140,74,74,74,74,74,74,74,74,140,140,74,74,74,74,74, + 100,74,74,74,74,100,74,100,74,102,100,74,74,102,102,74, + 102,102,74,102,102,74,74,102,74,74,74,71,74,74,74,74, + 74,74,140,74,74,74,74,74,140,74,74,140,74,74,71,74, + 71,140,140,71,140,140,71,140,71,140,71,74,140,74,74,140, + 74,74,71,74,71,74,74,144,140,71,74,144,140,140,144,140, + 140,140,140,144,140,140,140,140,140,140,140,140,140,140,140,114, + 140,140,140,140,140,144,140,140,140,144,140,71,144,114,39,17, + 91,187,12,91,183,91,26,0,8,139,139,139,139,139,139,139, + 211,211,211,67,211,150,122,187,0,8,139,139,139,139,139,139, + 139,139,211,211,67,211,150,122,187,0,8,67,139,139,139,139, + 139,211,211,139,211,67,211,150,122,187,0,8,67,139,67,139, + 139,139,211,211,211,211,67,211,150,122,187,0,8,139,67,67, + 139,139,139,139,211,211,211,67,243,150,122,187,0,211,139,139, + 139,139,139,139,211,211,211,211,67,211,150,162,187,0,8,139, + 139,139,139,139,139,139,211,211,139,67,243,150,0,12,0,8, + 139,139,139,139,139,139,211,211,211,211,67,211,150,122,187,0, + 8,139,139,139,139,139,139,139,139,211,211,67,211,150,122,187, + 0,211,139,139,67,139,139,139,211,211,211,211,67,211,150,0, + 12,0,8,139,139,139,139,139,139,139,211,139,211,67,211,150, + 122,187,0,8,139,139,139,139,139,139,139,139,211,139,67,211, + 150,162,187,0,8,139,139,67,139,139,139,211,211,139,211,67, + 211,150,122,187,0,8,139,139,139,139,139,139,139,139,139,211, + 67,211,150,0,12,0,211,139,67,139,139,139,139,139,139,139, + 139,139,211,150,122,187,0,8,139,139,139,139,139,139,139,211, + 139,211,67,211,150,122,187,0,8,139,139,139,139,139,139,211, + 211,211,139,139,211,150,122,187,0,211,139,139,139,139,139,139, + 139,211,8,67,139,211,150,0,8,26,8,12,8,8,141,208, + 208,208,191,208,208,191,208,191,191,16,208,191,208,191,16,191, + 208,208,16,16,16,16,16,16,16,16,16,16,208,16,16,16, + 208,16,16,208,16,16,208,16,16,208,208,208,16,208,208,208, + 16,208,208,63,208,208,208,208,54,208,16,208,208,63,208,208, + 100,100,100,100,100,100,100,102,100,102,100,100,102,74,100,102, + 102,102,100,100,100,100,100,74,74,74,102,74,74,74,74,74, + 74,74,74,74,74,74,74,74,74,140,74,140,74,74,71,140, + 140,140,74,74,74,74,74,140,74,140,140,74,169,74,100,100, + 74,100,74,74,74,74,74,74,74,74,74,140,140,140,140,74, + 74,100,74,74,74,100,74,74,100,74,102,100,74,100,100,74, + 100,102,74,100,74,102,100,74,74,102,74,74,74,74,74,74, + 74,74,74,74,74,74,74,74,74,140,74,74,144,169,140,140, + 74,74,140,74,74,140,144,140,144,140,140,140,144,140,74,144, + 140,140,144,140,144,144,74,71,114,144,74,140,140,140,144,114, + 140,140,140,140,140,140,140,140,114,140,140,140,144,140,140,140, + 140,140,140,140,74,140,140,140,140,140,39,144,140,114,39,166, + 8,12,17,12,219,12,91,0,187,187,12,187,187,8,111,91, + 12,12,91,17,12,187,26,8,162,187,187,12,187,8,187,109, + 91,91,12,26,12,109,132,42,8,162,26,187,187,187,187,109, + 91,187,12,187,91,12,12,150,42,8,162,26,187,12,187,187, + 211,91,187,187,187,91,12,12,150,42,8,162,26,187,187,187, + 109,187,109,91,12,187,91,26,12,150,42,8,162,187,187,187, + 187,187,111,187,111,91,12,26,12,12,150,42,8,162,187,187, + 187,187,187,187,111,187,187,26,91,12,12,150,42,8,162,187, + 187,187,187,187,211,91,187,91,12,26,12,109,150,42,8,162, + 187,187,12,187,187,109,91,187,187,12,91,12,150,150,42,8, + 162,187,187,187,187,187,8,111,91,91,12,26,12,109,150,42, + 8,162,187,187,187,187,187,109,187,187,12,187,91,12,12,150, + 42,8,162,187,187,187,8,111,187,187,187,187,91,26,12,12, + 150,26,8,162,26,187,187,187,187,187,109,91,187,187,91,12, + 150,150,42,8,162,187,187,187,187,109,91,187,187,12,12,26, + 12,12,150,42,8,0,26,187,187,187,187,109,91,187,12,187, + 12,12,150,150,42,8,162,187,187,187,187,187,111,91,187,12, + 12,26,12,243,150,42,8,162,187,187,187,187,187,187,109,91, + 91,12,187,12,12,150,42,8,162,187,187,187,187,109,91,187, + 187,12,91,17,26,187,150,26,8,26,8,12,8,12,7,208, + 191,191,208,191,16,191,208,191,191,191,191,191,208,191,208,16, + 16,16,208,16,16,16,16,16,16,16,208,16,16,208,16,16, + 16,208,16,208,208,16,16,208,16,208,16,208,16,208,16,208, + 208,208,208,208,208,208,208,208,16,208,208,208,208,54,208,208, + 100,100,100,100,100,100,100,100,102,100,100,74,100,102,74,100, + 100,100,102,74,102,74,102,102,102,100,100,102,74,100,102,74, + 74,100,74,74,74,74,74,74,74,74,74,74,140,74,74,74, + 74,74,74,140,140,74,140,74,74,74,74,74,74,100,140,74, + 100,74,74,140,74,100,140,140,140,100,140,100,74,74,74,140, + 140,140,74,74,74,74,74,100,74,100,100,102,100,102,102,102, + 102,100,100,102,100,74,74,102,74,74,100,74,74,74,74,74, + 74,74,74,140,74,140,74,74,74,74,74,140,74,74,74,74, + 140,74,74,140,140,74,74,140,74,140,71,74,140,71,140,140, + 140,140,140,140,140,74,140,140,74,74,114,140,144,140,140,140, + 140,140,140,140,140,144,140,140,140,140,140,140,140,140,140,140, + 140,74,114,140,140,140,144,140,140,144,140,140,140,39,114,132, + 91,17,150,12,26,12,219,0,0,0,122,162,0,0,0,0, + 0,0,0,0,219,132,26,187,0,0,0,162,0,0,0,0, + 0,0,0,0,0,26,187,219,187,0,0,122,122,0,0,0, + 0,0,0,0,0,0,219,187,219,187,0,0,0,122,0,0, + 0,0,122,0,0,0,0,219,187,26,187,0,0,0,122,0, + 0,0,0,0,0,0,0,0,219,187,26,187,0,0,0,122, + 0,122,122,0,0,0,0,0,0,219,132,26,187,0,0,0, + 122,122,122,122,122,122,0,0,0,0,17,166,26,187,0,0, + 0,122,0,0,0,0,0,0,0,0,0,26,187,26,187,0, + 0,0,122,0,0,0,0,0,0,0,0,0,26,187,26,187, + 0,0,0,122,162,0,0,0,0,0,0,0,0,26,166,26, + 187,0,0,0,122,0,0,0,0,0,0,0,0,0,219,187, + 219,187,0,0,0,0,0,122,122,0,0,0,0,0,0,17, + 166,219,187,0,0,0,0,122,122,0,0,0,0,0,0,0, + 26,187,26,187,0,0,0,122,0,0,0,0,0,0,0,0, + 0,219,132,26,187,0,0,0,122,122,0,0,0,0,0,0, + 0,0,26,187,219,187,0,0,0,122,0,122,0,0,0,0, + 0,0,0,26,187,26,187,0,0,0,122,122,0,0,0,0, + 0,0,0,0,219,17,219,187,0,0,122,122,0,0,122,0, + 0,0,0,122,122,219,17,26,8,12,8,8,12,17,8,208, + 208,191,191,208,191,208,191,208,208,208,208,16,208,16,191,208, + 16,16,16,191,208,16,16,208,16,16,16,16,208,16,16,208, + 16,16,16,208,16,208,16,208,208,16,208,16,208,208,208,208, + 208,54,208,208,63,208,208,16,208,208,208,208,208,208,16,208, + 100,100,100,100,100,100,100,100,102,100,100,102,100,100,102,100, + 102,100,102,100,102,100,100,100,102,102,100,102,100,100,100,102, + 74,100,74,74,100,74,74,74,74,74,74,74,74,74,74,74, + 74,74,74,74,140,74,74,74,74,74,140,74,74,74,100,74, + 100,74,100,140,140,100,100,100,140,100,74,100,74,100,74,100, + 74,74,74,74,74,74,74,74,74,74,100,100,100,100,100,100, + 74,102,100,102,100,74,100,74,100,74,100,74,74,74,74,140, + 74,140,100,140,74,74,74,140,74,74,74,74,140,140,140,74, + 140,140,74,71,74,140,74,140,140,140,140,71,140,74,71,140, + 71,140,71,140,144,140,144,140,144,74,144,140,140,140,140,140, + 140,140,140,140,140,140,140,140,140,114,140,140,140,140,140,144, + 114,74,140,140,144,140,140,140,140,140,140,144,140,39,114,166, + 12,17,12,8,26,12,42,122,26,26,26,26,26,42,26,17, + 219,219,219,26,17,132,183,12,42,12,26,26,26,42,42,219, + 219,17,219,219,219,219,17,219,12,42,26,26,26,26,26,42, + 26,17,219,219,219,26,17,219,219,12,42,91,26,26,26,42, + 42,26,17,219,219,219,26,17,132,219,12,42,26,26,26,26, + 26,42,219,17,17,219,17,26,17,132,183,12,42,26,26,26, + 26,42,42,26,17,17,219,17,26,26,132,219,12,42,26,26, + 26,26,42,42,26,17,219,219,219,26,26,132,219,12,42,26, + 26,26,26,42,42,26,17,17,219,219,219,17,132,183,12,42, + 26,26,26,26,42,42,26,219,219,219,219,219,17,132,183,12, + 42,26,26,26,26,42,42,26,17,17,219,219,219,26,132,219, + 12,42,26,26,26,26,26,42,26,17,219,219,219,26,17,219, + 219,12,42,12,26,26,26,42,42,26,17,219,219,219,26,26, + 17,219,12,42,26,26,26,26,42,42,219,219,219,219,219,219, + 17,132,219,12,42,26,26,26,26,26,42,26,17,17,219,219, + 26,26,132,219,12,42,26,26,26,26,42,42,26,17,219,219, + 219,219,17,219,219,12,42,26,26,26,26,26,42,26,17,17, + 219,219,219,17,132,183,12,42,26,26,26,26,42,42,26,219, + 219,219,219,26,17,17,219,12,42,26,26,26,26,42,42,26, + 219,17,219,219,26,17,132,219,17,26,12,243,8,12,141,208, + 208,208,208,191,191,16,208,208,191,191,191,191,16,208,191,16, + 191,208,16,16,16,16,16,16,208,16,16,16,16,16,208,16, + 208,16,208,16,208,16,16,208,208,208,208,16,16,208,16,208, + 208,208,16,208,208,208,208,16,16,16,208,208,208,208,208,208, + 88,100,100,100,100,100,100,100,100,100,100,100,100,102,100,102, + 100,100,100,100,100,102,100,100,100,100,102,100,100,102,74,100, + 102,74,74,74,74,100,100,100,74,100,100,74,74,140,74,74, + 74,140,140,140,74,74,140,140,140,74,74,74,140,100,74,74, + 74,100,74,100,100,74,140,74,100,74,74,140,169,140,100,74, + 74,140,140,169,140,140,140,74,100,100,100,102,100,74,100,100, + 100,100,102,100,100,102,74,100,102,74,74,74,100,100,100,100, + 100,100,74,100,74,140,74,74,74,140,140,169,74,74,74,74, + 74,74,74,169,144,74,140,140,140,140,140,140,140,140,140,74, + 140,74,140,74,140,140,74,140,140,140,140,140,140,140,140,140, + 140,144,140,140,140,140,140,140,140,140,140,140,140,140,140,140, + 140,39,140,114,140,140,144,74,140,140,140,140,144,39,188,26, + 12,17,12,12,219,91,219,26,243,12,150,187,219,17,17,243, + 12,150,12,12,17,219,26,187,26,150,12,150,187,219,17,12, + 243,12,150,12,12,12,17,42,12,26,243,12,150,17,219,17, + 12,243,12,150,12,150,17,17,26,187,26,150,12,150,17,219, + 17,12,8,12,150,12,150,17,219,42,12,26,243,12,150,17, + 219,17,17,243,12,150,12,150,17,17,26,187,26,243,12,150, + 17,219,17,12,243,12,150,12,150,150,219,26,187,26,243,12, + 150,17,219,17,12,8,150,150,12,150,150,219,42,12,26,243, + 12,150,17,219,17,12,243,12,150,12,17,17,219,26,187,26, + 243,12,150,17,219,17,12,8,12,150,12,17,17,17,26,187, + 26,243,12,150,187,219,17,12,243,12,150,12,12,150,219,42, + 12,26,243,12,150,17,219,17,12,243,12,150,12,150,17,17, + 26,187,26,150,187,150,17,17,17,12,243,150,150,12,150,150, + 17,26,12,26,243,12,150,17,219,17,12,8,12,243,12,17, + 17,219,26,187,26,243,12,150,17,219,17,12,243,12,150,12, + 150,150,219,26,12,26,243,12,150,17,219,17,12,243,12,150, + 12,12,187,17,26,187,26,243,12,150,17,219,17,12,243,12, + 150,12,17,17,219,26,187,26,243,12,150,187,219,17,12,8, + 12,243,12,12,187,219,26,187,26,243,12,150,17,219,17,12, + 8,12,150,12,150,17,219,26,12,12,12,150,8,8,141,208, + 208,191,191,208,191,208,191,208,191,208,208,16,16,191,208,16, + 16,16,208,16,16,208,16,16,16,208,16,16,208,16,208,16, + 16,16,208,16,208,208,208,16,208,16,16,208,208,16,208,208, + 16,208,208,208,16,208,54,208,208,208,208,208,208,208,54,208, + 100,100,88,100,100,102,100,100,102,100,100,100,100,100,100,100, + 100,100,100,100,100,102,100,102,100,100,102,100,100,100,102,100, + 100,102,100,100,74,100,74,100,74,74,100,100,100,74,100,140, + 74,100,74,74,140,74,74,74,140,74,140,74,74,74,100,74, + 140,169,74,74,100,100,140,140,74,169,74,74,74,140,169,140, + 74,74,74,74,74,100,140,74,74,74,100,74,100,102,100,102, + 100,100,102,100,100,100,102,100,100,102,100,74,100,74,74,74, + 74,100,74,100,100,74,100,169,100,100,74,74,74,74,140,140, + 140,140,74,74,74,74,74,74,74,74,74,74,74,74,140,140, + 140,140,140,74,74,140,140,140,140,74,140,140,144,140,140,140, + 140,140,140,140,140,140,140,140,140,140,140,140,144,140,140,140, + 140,140,140,140,140,140,114,140,144,140,140,140,140,39,207,17, + 12,17,187,12,219,150,219,219,150,12,17,17,17,17,26,243, + 150,150,150,17,12,219,26,243,26,150,17,17,17,17,17,17, + 243,150,150,17,17,17,17,26,243,219,150,17,12,17,132,17, + 26,243,150,150,17,17,17,219,26,150,219,150,17,17,187,17, + 17,17,243,150,150,12,17,12,17,26,243,219,150,17,12,187, + 17,17,26,243,150,150,17,17,17,17,26,243,219,150,17,12, + 17,17,17,17,243,150,150,17,17,12,219,26,243,219,150,17, + 17,17,17,17,17,243,150,150,12,17,12,17,26,243,219,150, + 17,12,17,17,17,17,243,150,150,12,17,12,17,26,243,219, + 150,17,17,17,17,17,17,243,150,150,12,17,17,219,26,243, + 219,150,17,17,17,17,17,17,243,150,150,12,17,12,219,26, + 243,219,150,12,17,187,17,17,26,243,150,150,17,17,17,219, + 26,243,26,150,12,17,17,17,17,26,243,150,150,17,17,17, + 219,26,243,219,150,17,17,17,17,12,17,150,150,150,12,12, + 12,219,26,243,219,150,17,12,17,17,17,26,243,150,150,12, + 17,12,219,26,243,219,150,17,17,17,132,17,26,243,12,150, + 12,17,17,219,26,243,219,150,17,17,17,17,17,26,243,150, + 150,12,17,12,17,26,243,219,150,17,17,17,17,12,17,243, + 17,150,150,17,12,219,26,243,219,150,17,17,17,17,17,17, + 243,12,150,17,12,17,219,26,243,219,8,243,12,12,7,208, + 208,208,208,191,191,208,191,208,208,191,208,16,208,16,16,208, + 16,16,208,16,208,16,16,208,16,16,16,16,208,16,16,208, + 16,16,16,208,16,208,208,16,208,208,208,16,208,208,16,208, + 16,16,208,208,208,208,208,208,208,16,208,208,208,208,208,208, + 100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100, + 100,102,100,102,100,100,100,100,100,100,100,100,102,100,100,100, + 100,100,100,74,100,74,100,74,74,100,74,140,74,100,74,74, + 169,74,74,100,74,74,74,74,100,74,74,74,74,169,140,169, + 100,74,140,74,169,74,100,100,169,74,74,100,100,100,74,100, + 140,169,140,169,140,140,100,140,100,100,100,100,100,100,100,100, + 100,100,100,100,102,100,100,100,100,100,100,100,74,100,100,74, + 100,74,74,74,74,169,74,74,74,74,74,100,74,169,74,74, + 74,74,74,74,140,140,71,140,140,140,140,74,140,140,74,74, + 140,71,74,140,140,144,74,144,140,114,140,140,140,140,140,140, + 140,140,140,140,144,140,140,140,140,140,140,140,140,140,140,140, + 144,140,140,140,140,140,140,74,140,140,140,144,114,140,39,187, + 12,219,12,243,219,12,219,219,12,17,132,17,150,150,219,150, + 12,17,17,17,17,187,26,109,219,12,17,132,17,132,12,26, + 150,12,17,150,132,17,187,26,109,219,12,17,132,187,17,150, + 219,150,12,17,12,132,12,187,26,109,219,12,17,132,17,132, + 150,26,150,17,17,12,132,17,187,26,109,219,12,17,132,17, + 150,12,17,150,17,132,12,132,17,187,26,109,219,12,17,132, + 17,132,150,26,150,12,17,12,17,17,187,26,109,219,12,12, + 132,187,132,150,26,12,17,17,12,17,17,187,26,109,219,12, + 17,132,187,132,150,26,150,12,17,150,132,17,187,26,109,219, + 12,12,132,17,132,150,26,150,17,17,150,132,17,187,26,109, + 219,12,17,132,17,132,150,26,150,17,17,150,17,17,187,26, + 109,219,12,17,132,17,150,150,219,150,12,17,12,132,12,187, + 26,109,219,12,17,132,187,150,150,219,12,12,17,12,17,187, + 187,26,109,219,12,12,132,187,132,12,26,150,17,17,150,132, + 17,187,26,109,219,12,17,132,187,150,150,219,150,12,12,17, + 17,17,187,26,109,219,12,12,132,17,17,150,219,150,150,17, + 150,132,12,187,26,109,219,12,12,132,17,150,150,219,150,17, + 17,150,132,17,187,26,109,219,12,17,132,17,132,150,26,150, + 150,17,12,132,17,187,26,109,219,12,17,132,17,150,150,26, + 150,150,12,17,132,12,187,219,211,26,12,12,8,26,141,208, + 208,208,191,208,191,208,191,208,191,208,191,208,16,191,208,191, + 208,16,208,16,16,208,16,16,16,208,16,208,16,208,16,16, + 16,208,16,208,208,208,16,208,208,208,16,208,208,16,208,208, + 208,208,16,208,208,208,208,208,208,208,208,208,63,208,208,208, + 100,88,100,88,100,100,100,100,102,100,100,100,100,100,102,100, + 102,100,100,100,100,100,100,100,100,100,102,100,100,100,102,100, + 102,100,100,102,100,100,100,100,74,74,100,140,140,100,100,74, + 169,100,140,100,140,140,169,74,169,74,74,74,74,74,74,74, + 74,100,100,74,100,74,100,74,100,169,140,140,74,100,74,100, + 74,74,74,100,74,140,100,140,74,74,100,100,100,100,100,102, + 100,100,100,102,100,100,102,100,74,74,102,100,100,100,100,74, + 100,100,140,140,74,74,100,169,140,169,74,169,74,74,74,100, + 74,140,140,74,74,140,74,74,74,74,140,74,74,140,74,74, + 140,140,144,140,140,140,74,74,74,140,140,140,140,140,144,74, + 140,144,140,140,140,140,144,140,140,144,140,140,140,140,140,140, + 140,140,114,140,74,140,114,140,114,140,140,140,114,39,39,187, + 12,219,17,8,42,8,26,219,12,17,132,219,17,12,219,150, + 150,150,12,17,12,132,26,243,219,12,17,132,219,17,150,219, + 150,150,17,17,17,17,132,26,109,219,12,17,132,219,17,12, + 219,150,150,150,17,219,12,132,26,243,219,12,17,132,219,17, + 150,219,150,150,150,17,219,17,132,26,109,219,150,17,132,219, + 17,12,219,150,17,150,17,17,17,132,26,243,219,12,17,132, + 219,17,150,219,150,150,132,17,17,17,132,26,243,219,17,17, + 132,219,17,150,219,150,150,150,17,17,17,132,26,109,219,12, + 17,132,219,17,150,219,150,150,17,17,219,12,132,26,243,219, + 12,17,132,219,17,150,219,150,150,17,17,17,12,132,26,243, + 219,150,17,132,219,17,150,219,150,150,17,17,17,17,132,26, + 243,219,17,17,132,219,12,12,219,150,150,150,17,219,12,132, + 26,243,219,17,17,132,219,17,12,219,150,150,150,17,17,17, + 150,26,109,219,17,17,132,219,17,150,219,150,150,17,17,219, + 12,132,26,243,219,12,17,132,219,17,12,219,150,132,132,12, + 17,17,132,26,211,219,17,17,132,219,12,12,219,12,150,17, + 17,219,12,132,26,243,219,17,17,132,219,17,12,219,150,150, + 17,17,17,17,132,26,243,219,12,17,132,219,17,150,219,17, + 150,132,17,17,17,150,26,243,219,12,17,132,219,17,150,219, + 17,150,150,17,219,12,187,26,243,17,8,8,8,12,141,208, + 208,208,191,208,191,191,208,191,208,208,191,191,208,16,16,208, + 16,208,16,208,16,16,208,16,16,16,208,16,208,16,208,16, + 208,16,16,16,208,208,208,16,208,208,208,16,208,208,208,208, + 208,208,208,16,208,208,208,54,208,208,208,208,208,208,208,208, + 88,100,100,88,100,100,100,100,100,100,100,102,100,100,100,100, + 100,100,102,100,100,100,100,102,100,100,102,100,102,100,100,100, + 100,74,100,100,100,74,100,140,169,100,74,74,100,140,140,100, + 74,140,74,74,100,100,74,140,74,140,140,140,74,74,140,169, + 100,100,140,100,140,169,74,100,100,74,100,100,169,140,169,100, + 100,100,140,140,169,100,140,100,169,100,100,100,100,100,100,100, + 100,102,100,100,102,100,100,102,100,100,100,100,100,74,100,100, + 74,74,100,74,100,100,140,74,100,74,140,74,74,169,169,140, + 140,140,74,74,140,74,140,140,140,140,74,140,140,74,140,74, + 140,140,74,140,140,140,140,114,140,140,140,140,140,140,140,39, + 140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, + 140,140,140,140,140,140,140,140,140,140,140,140,140,114,39,187, + 26,17,17,8,183,8,132,26,150,17,17,17,150,132,219,12, + 219,17,132,17,17,150,26,211,26,150,17,17,17,150,17,219, + 12,17,150,12,17,166,150,26,211,26,150,17,17,17,150,132, + 219,12,219,132,12,17,132,150,26,211,26,150,17,17,17,150, + 219,219,12,219,132,12,17,132,150,219,211,26,12,17,219,17, + 150,132,219,12,150,132,12,17,17,150,26,109,26,150,17,17, + 17,150,219,219,12,17,150,132,17,132,150,26,211,26,150,17, + 17,17,150,219,219,12,219,132,132,17,132,132,26,243,26,150, + 17,17,17,150,17,219,12,17,150,12,17,17,132,26,211,42, + 150,17,17,17,150,17,219,12,17,150,12,17,17,150,26,211, + 26,12,17,17,17,150,17,219,12,17,150,132,17,132,150,26, + 211,26,150,17,17,17,132,132,219,12,219,132,12,17,132,150, + 26,211,26,150,17,17,17,150,132,219,12,219,132,150,17,132, + 132,219,243,26,150,17,17,17,150,17,219,12,17,150,12,17, + 132,150,26,211,26,150,17,219,17,150,132,219,12,17,150,132, + 17,166,150,219,109,26,150,17,17,17,132,132,219,150,17,150, + 12,17,132,150,26,211,26,150,17,17,17,150,132,219,12,17, + 150,17,17,17,150,26,211,26,150,17,17,17,150,219,219,150, + 17,12,12,17,132,132,26,109,26,150,17,17,17,150,219,219, + 150,219,132,12,17,132,150,26,211,17,12,243,8,8,8,105, + 208,208,191,208,191,208,191,208,191,191,208,208,191,208,191,208, + 16,208,208,16,208,16,208,16,208,16,208,16,208,208,208,16, + 16,208,208,208,16,16,16,208,208,16,208,208,208,208,208,208, + 208,208,208,208,208,16,208,208,16,16,208,208,63,208,63,208, + 100,100,88,100,88,100,100,100,100,100,100,100,100,100,102,100, + 100,102,100,100,100,100,100,100,100,100,100,100,102,100,74,100, + 102,100,100,100,100,74,100,74,140,100,100,74,100,100,140,169, + 100,100,140,74,140,100,100,169,100,140,74,140,140,74,74,140, + 74,100,74,100,74,169,74,140,100,74,100,74,100,74,140,140, + 169,100,100,140,140,169,169,140,169,100,100,100,100,100,100,100, + 100,100,102,100,100,100,100,100,102,100,74,100,102,100,74,169, + 100,74,100,74,140,100,169,140,100,100,100,140,74,74,100,100, + 74,140,140,74,140,74,74,74,74,140,74,74,140,74,140,74, + 74,140,140,140,140,140,140,140,71,140,140,144,140,140,140,140, + 74,140,140,140,74,140,74,140,140,140,140,140,140,140,140,74, + 140,169,140,140,140,140,140,140,140,140,140,140,140,127,114,126, + 12,187,26,12,42,12,17,26,150,219,17,17,17,17,219,150, + 150,150,219,132,26,132,26,109,26,150,17,17,17,150,219,219, + 150,17,132,150,219,26,150,26,109,26,150,17,150,17,17,17, + 219,150,12,132,132,219,26,150,26,109,26,150,17,17,17,150, + 17,219,150,12,132,17,17,26,187,26,109,26,150,17,17,17, + 17,17,219,12,17,132,17,132,26,132,26,109,26,150,17,17, + 17,150,17,219,150,17,12,17,17,26,132,26,109,26,150,17, + 17,17,150,17,219,150,12,12,17,219,26,150,26,109,26,150, + 17,17,17,132,17,219,150,17,132,17,132,26,132,26,109,42, + 150,17,17,17,132,17,219,150,17,132,17,132,26,132,26,109, + 26,150,17,17,17,132,17,219,150,17,12,17,17,26,132,26, + 109,26,150,17,17,17,17,17,219,150,12,132,132,219,26,132, + 26,211,26,150,219,17,17,17,17,219,150,17,12,132,17,26, + 187,26,211,26,150,219,17,17,150,17,219,150,17,132,17,219, + 26,132,26,109,26,150,17,17,17,17,17,219,150,17,12,17, + 17,26,187,26,109,26,150,17,150,17,17,17,219,150,17,132, + 132,219,26,132,26,109,26,150,219,17,17,17,17,219,150,17, + 150,17,132,26,132,26,109,26,150,219,17,17,150,17,219,150, + 132,132,132,219,26,150,26,109,26,150,17,17,17,150,17,219, + 150,17,150,17,219,17,132,219,8,17,12,8,8,150,8,208, + 105,208,191,208,208,191,208,191,208,208,191,208,16,208,191,208, + 208,208,16,208,16,208,16,16,208,16,208,208,16,208,208,16, + 208,16,208,208,208,208,16,16,208,208,208,208,54,208,54,208, + 63,208,54,208,208,16,208,208,208,54,208,208,208,208,63,208, + 169,100,100,88,100,100,100,100,100,102,100,100,100,100,102,100, + 100,100,100,100,102,100,102,100,102,100,100,100,100,102,100,100, + 100,100,102,74,100,100,100,100,100,74,74,100,74,74,100,74, + 74,140,100,169,100,140,140,74,140,100,140,140,100,169,140,74, + 169,74,100,100,100,74,169,100,169,169,74,100,74,169,100,100, + 100,140,140,169,169,100,169,100,100,100,100,100,100,100,100,100, + 100,100,100,100,102,74,100,74,100,102,100,100,100,100,100,100, + 140,100,74,169,100,74,74,100,140,74,140,100,169,74,74,140, + 100,100,74,169,74,140,140,140,140,74,140,140,74,140,140,140, + 140,140,140,74,140,140,74,140,140,140,140,140,140,140,140,140, + 140,140,140,74,140,140,140,140,140,140,140,140,140,140,140,39, + 140,140,169,140,140,140,140,140,140,140,140,140,140,39,39,187, + 12,17,187,243,42,109,219,42,12,17,150,17,150,17,219,12, + 219,12,132,219,17,187,219,243,26,17,17,150,17,17,17,219, + 12,132,17,12,219,17,187,219,243,42,12,219,17,17,150,17, + 219,12,132,17,12,219,17,187,219,243,26,17,17,150,17,17, + 17,219,12,132,17,150,219,17,12,219,243,219,12,219,150,17, + 150,17,219,150,132,12,132,219,17,187,17,211,42,17,17,150, + 17,17,17,219,12,132,132,150,219,17,187,219,243,42,12,219, + 150,17,17,150,219,12,132,132,132,17,17,187,17,243,42,12, + 219,150,17,17,17,219,12,132,12,132,219,17,187,17,109,26, + 12,219,150,17,17,17,219,12,132,12,132,219,17,187,219,243, + 219,12,17,150,17,17,17,219,12,132,132,150,219,17,187,219, + 211,26,17,17,150,17,150,17,219,12,132,17,12,219,17,187, + 219,243,42,12,17,150,17,150,150,219,12,132,132,17,219,17, + 187,17,243,42,12,17,150,17,17,17,219,12,132,12,150,219, + 17,187,17,243,42,12,219,150,17,150,17,219,12,132,132,150, + 219,17,12,17,243,42,12,219,17,17,150,12,42,12,132,12, + 12,219,17,187,219,109,42,12,17,150,17,150,17,219,12,132, + 17,132,219,17,187,17,243,26,12,17,150,17,17,12,26,12, + 219,17,12,219,17,187,17,243,42,12,219,150,17,17,12,26, + 12,132,17,150,219,26,187,12,187,17,12,8,8,12,8,105, + 208,208,208,208,191,208,208,16,208,191,208,208,191,208,16,208, + 16,208,16,208,16,208,16,208,16,16,208,208,208,208,208,208, + 16,208,16,16,208,16,208,208,208,208,208,208,208,208,208,208, + 208,208,208,16,208,208,208,208,208,208,208,208,208,208,208,208, + 88,100,100,100,88,100,100,100,100,100,100,100,100,100,100,100, + 100,102,100,100,100,100,100,100,100,100,102,100,100,100,100,102, + 74,100,100,100,100,74,100,74,169,100,140,100,100,74,100,169, + 100,74,74,74,100,74,100,100,74,100,74,140,74,100,100,74, + 100,169,140,169,100,74,100,74,100,169,140,169,74,169,140,169, + 100,169,100,100,169,100,169,169,169,169,100,100,100,100,100,100, + 100,100,100,100,100,100,100,100,100,100,74,100,100,74,74,100, + 74,100,74,74,100,100,74,100,169,100,74,74,169,140,100,140, + 140,169,74,140,74,140,74,74,140,74,74,140,140,74,100,140, + 140,74,140,140,140,140,140,140,140,140,74,140,140,140,140,140, + 140,140,39,140,74,169,140,140,140,140,140,140,140,140,140,169, + 140,140,140,140,169,114,169,140,140,140,169,140,140,127,39,187, + 17,17,187,243,42,12,219,26,17,219,12,17,150,219,219,150, + 17,17,17,219,17,187,26,150,42,17,219,150,150,150,219,219, + 132,132,17,17,17,219,187,26,150,42,17,17,12,17,150,219, + 219,17,132,17,17,17,17,187,26,150,42,17,219,12,150,150, + 219,219,17,132,17,17,17,219,187,26,12,42,17,219,150,17, + 150,219,219,219,132,17,17,17,17,187,42,150,26,17,219,12, + 150,150,219,219,17,219,17,17,17,17,187,26,150,26,17,219, + 12,150,17,219,219,17,17,17,17,17,17,187,26,150,42,17, + 219,12,150,150,219,219,132,132,17,17,219,17,187,26,150,26, + 17,17,17,150,150,219,219,132,132,17,17,17,17,187,26,12, + 42,17,219,12,150,150,219,219,132,17,17,17,17,17,187,26, + 150,42,17,219,12,17,150,219,219,17,132,17,17,17,17,187, + 26,150,26,17,219,12,17,17,219,219,17,17,17,17,17,17, + 187,42,150,26,17,219,150,150,150,219,219,132,132,17,17,17, + 17,187,26,150,26,150,219,12,17,150,219,219,219,17,17,17, + 17,219,187,26,150,26,17,17,12,17,150,219,219,132,132,17, + 17,17,17,187,26,150,26,17,219,12,17,150,219,219,132,132, + 17,17,17,17,187,26,150,26,17,219,12,150,150,219,219,150, + 132,17,17,17,17,187,26,150,26,17,219,12,150,150,219,219, + 17,132,17,17,17,17,17,26,12,17,12,8,8,150,8,208, + 105,191,208,208,208,208,208,208,191,208,208,208,208,191,208,208, + 208,208,208,16,208,16,208,16,208,208,16,16,208,16,208,208, + 16,208,208,16,208,208,208,208,208,208,208,208,208,208,208,208, + 208,208,208,208,208,208,208,208,208,208,208,208,208,208,63,208, + 100,100,169,100,100,100,100,100,100,100,100,102,100,100,102,100, + 100,100,102,100,100,100,100,100,102,100,100,100,100,100,74,100, + 100,100,102,100,74,100,74,100,74,140,100,169,140,169,100,74, + 74,169,169,140,140,100,140,140,140,74,100,169,140,140,140,169, + 169,74,100,74,100,100,169,100,169,140,100,100,169,100,100,74, + 169,100,169,140,169,169,169,169,100,100,169,169,100,100,100,100, + 100,100,100,74,100,102,100,100,102,100,100,100,74,100,100,74, + 169,140,100,100,140,100,100,100,74,74,140,100,74,100,74,74, + 100,74,140,100,140,100,140,140,140,169,140,140,74,140,140,74, + 74,140,140,74,140,140,140,140,140,140,140,74,140,74,140,169, + 140,74,74,140,140,140,140,169,140,169,140,169,140,169,140,140, + 140,140,127,140,39,140,140,140,169,140,140,39,39,39,207,187, + 12,12,26,8,183,12,219,219,17,26,17,17,12,17,219,17, + 17,17,219,219,17,150,26,150,219,17,26,26,17,12,17,219, + 17,17,17,132,219,17,12,26,150,219,219,26,17,17,12,17, + 219,150,17,17,132,219,17,12,26,150,219,17,26,17,17,12, + 17,219,150,17,219,132,219,12,12,26,150,219,17,26,26,17, + 17,17,26,132,17,17,219,219,17,17,26,150,219,17,26,17, + 219,12,17,219,150,17,17,132,219,17,12,26,150,219,17,26, + 17,17,12,17,219,132,12,219,132,219,17,17,26,150,219,17, + 26,17,17,12,17,219,219,17,17,219,219,17,17,26,132,219, + 17,26,17,17,12,17,219,219,17,17,219,219,17,17,26,150, + 219,17,26,17,17,12,17,219,17,17,219,132,219,17,12,42, + 150,219,17,26,17,17,12,17,219,132,17,17,132,219,17,150, + 26,150,219,17,26,17,17,12,17,219,132,12,17,132,219,17, + 12,26,150,219,17,26,26,17,17,17,219,219,17,219,132,219, + 17,17,42,150,219,26,26,17,17,17,17,219,132,17,17,132, + 219,12,12,26,150,219,219,26,17,17,17,17,219,219,17,219, + 132,219,17,12,26,150,219,17,26,17,17,12,17,219,17,17, + 17,219,183,17,17,42,150,219,17,26,17,219,17,17,219,17, + 17,17,132,219,17,17,26,150,219,17,26,17,219,12,17,219, + 132,12,219,132,219,17,187,219,243,26,12,8,8,12,150,105, + 208,63,208,208,208,208,191,208,208,208,208,208,208,16,208,191, + 208,16,208,16,208,16,208,16,208,16,208,208,208,208,208,208, + 208,208,208,208,208,16,16,54,208,208,208,16,208,208,208,208, + 208,208,63,208,208,16,208,54,208,208,208,208,208,208,208,208, + 169,100,169,100,100,100,100,100,100,102,100,100,100,102,100,102, + 100,102,100,102,100,102,100,100,100,100,74,102,74,102,100,74, + 102,100,100,100,100,100,74,100,100,74,74,100,74,169,100,169, + 74,74,100,100,140,100,100,100,140,140,74,169,169,169,74,74, + 169,169,169,169,169,74,169,74,100,169,140,100,169,169,169,100, + 140,100,169,100,100,100,100,169,100,100,100,100,100,100,100,74, + 100,100,100,100,100,74,102,100,74,100,102,100,100,100,100,74, + 100,100,74,100,140,169,74,100,169,100,140,169,140,169,169,74, + 100,74,140,169,140,169,140,100,140,140,100,169,74,140,140,140, + 140,140,140,74,140,74,74,74,74,140,140,74,39,140,140,169, + 127,140,169,169,169,169,140,169,140,169,140,169,140,140,140,169, + 140,140,140,140,169,140,169,140,169,39,140,140,140,127,207,94, + 219,219,26,12,42,219,122,122,122,122,122,0,122,42,122,122, + 42,122,122,122,42,78,42,187,122,42,122,122,0,122,42,0, + 122,122,122,0,122,42,42,42,187,122,42,122,122,0,122,122, + 0,122,122,122,0,122,42,42,42,187,0,122,122,122,0,122, + 122,0,122,122,122,0,0,183,122,42,187,122,42,122,122,122, + 122,42,122,122,122,122,0,122,42,42,42,187,0,42,122,122, + 0,122,122,122,122,122,122,0,122,42,42,42,187,0,122,122, + 122,0,122,42,0,122,122,122,0,122,42,42,42,187,122,122, + 122,122,0,122,42,122,122,42,122,122,122,42,42,42,187,0, + 42,122,122,0,122,42,122,122,42,122,0,122,42,42,42,187, + 0,122,122,122,0,122,42,122,122,122,122,0,122,42,42,42, + 187,0,42,122,122,0,122,42,0,122,122,122,0,122,42,78, + 42,187,0,42,122,122,0,122,42,0,122,122,0,0,122,183, + 42,42,187,0,42,122,122,0,122,42,122,122,42,0,0,122, + 42,42,42,187,122,42,122,122,0,122,42,122,122,122,122,0, + 0,183,42,42,187,0,42,122,122,0,122,42,122,122,42,0, + 0,122,42,42,42,187,0,42,122,122,0,122,42,122,122,122, + 122,122,122,42,42,42,187,0,42,122,122,0,122,42,0,122, + 122,122,0,122,42,42,42,187,0,42,122,122,0,122,42,0, + 122,122,122,122,122,26,42,42,187,42,42,17,12,26,12,105, + 208,208,63,208,208,208,208,208,208,208,208,208,208,208,208,16, + 208,208,16,208,208,208,16,208,208,16,208,16,208,16,208,208, + 208,208,208,208,208,208,208,16,208,208,63,208,208,208,208,208, + 208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, + 100,169,100,100,100,100,100,100,100,100,74,74,74,100,102,74, + 100,100,74,100,100,100,74,74,74,74,100,100,100,74,74,100, + 100,74,74,74,74,100,100,100,100,100,100,74,100,74,74,100, + 169,169,140,74,74,140,140,140,100,169,169,74,100,74,169,169, + 169,100,100,74,100,169,100,169,169,100,169,140,74,74,169,169, + 100,169,100,169,169,169,169,100,169,100,100,100,100,100,74,100, + 100,74,100,74,74,100,100,74,100,74,100,74,74,74,100,100, + 100,74,169,100,100,74,169,169,74,140,100,74,74,74,74,169, + 140,169,74,74,140,74,100,140,140,169,140,140,169,74,169,140, + 169,74,140,140,100,140,140,140,140,169,140,140,74,74,140,74, + 140,169,140,169,140,140,169,140,169,140,169,140,169,169,169,140, + 169,169,169,169,169,140,127,140,140,140,127,169,169,127,188,183, + 42,122,183,42,0,122,122,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,42,122,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,42,122,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,42,122,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,122,42,122,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,42,122,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,42,122,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,42,122,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,42,122,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,42,122, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,42, + 122,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 42,122,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,42,122,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,42,122,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,42,122,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,42,122,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,42,122,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,42,122,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,219,122,0,122,122,122,122,17,105, + 105,63,208,96,208,208,191,208,208,208,208,208,208,191,208,208, + 16,208,208,208,16,208,208,208,208,208,208,208,208,208,208,208, + 208,16,208,16,208,208,208,208,208,208,208,208,208,208,208,208, + 208,208,208,208,208,208,208,208,208,54,208,208,208,208,63,208, + 100,140,169,140,74,74,100,74,74,100,100,74,74,74,100,102, + 74,102,74,74,102,100,74,100,100,74,74,74,100,74,74,74, + 100,100,100,74,74,100,100,100,100,100,100,74,100,169,74,100, + 74,169,169,169,100,100,100,140,74,74,169,169,169,100,169,100, + 169,169,169,169,100,169,100,100,140,100,100,169,169,100,74,169, + 100,169,100,100,100,169,169,100,169,169,169,169,100,100,100,74, + 100,74,100,74,74,74,74,74,102,100,100,74,100,74,100,100, + 169,100,74,74,100,74,74,88,140,169,169,169,169,169,140,169, + 74,169,169,100,169,140,169,100,74,140,140,140,169,74,100,140, + 169,169,169,140,169,169,140,169,74,169,169,140,127,140,127,100, + 169,88,140,169,88,140,88,140,169,140,88,140,169,140,88,140, + 169,140,169,140,127,140,169,127,169,169,39,140,169,207,127,187, + 8,12,109,211,26,26,26,122,42,122,42,122,122,42,122,122, + 122,122,122,42,12,219,26,17,0,42,122,42,122,42,122,42, + 122,122,42,122,122,243,219,26,17,0,42,122,42,122,42,122, + 42,122,122,122,122,42,243,219,26,12,122,42,122,42,122,42, + 122,42,122,42,122,122,42,12,219,26,17,0,42,122,42,122, + 122,42,122,42,122,42,122,42,243,219,26,17,0,42,122,42, + 122,42,122,42,122,122,122,122,42,243,219,26,12,122,42,122, + 42,122,122,42,122,42,122,122,122,42,243,219,26,17,122,42, + 122,42,122,122,42,122,122,122,122,122,42,243,219,26,17,0, + 42,122,42,122,122,42,122,122,122,42,122,42,243,183,26,12, + 122,42,122,42,122,122,42,122,42,122,122,122,42,243,219,26, + 17,0,42,122,42,122,42,122,42,122,122,42,122,42,12,219, + 26,17,0,42,122,42,122,42,122,42,122,42,122,122,42,12, + 219,26,17,0,42,122,42,122,122,42,122,122,42,122,122,42, + 243,219,26,17,0,42,122,42,122,122,42,122,42,122,122,122, + 42,12,219,26,12,0,42,122,42,122,122,42,122,122,42,122, + 122,42,243,219,26,17,0,42,122,42,122,122,42,122,42,122, + 122,122,42,243,219,26,17,0,42,122,42,122,42,122,42,122, + 122,122,122,42,243,219,26,17,0,42,122,42,122,122,42,122, + 42,122,122,122,42,12,26,26,17,42,26,243,8,8,12,105, + 208,105,208,208,208,208,208,208,208,208,208,208,208,208,208,208, + 208,208,208,208,208,16,208,208,208,208,208,208,208,208,208,16, + 208,208,208,208,16,208,208,208,208,208,208,208,208,63,208,208, + 54,208,208,208,208,16,208,208,208,208,208,208,208,208,208,208, + 169,100,169,100,100,100,74,100,100,74,74,100,74,74,74,100, + 100,100,100,74,100,74,100,74,74,100,74,100,102,100,100,100, + 100,74,74,100,100,74,100,74,169,169,169,169,169,74,169,140, + 169,74,169,140,140,169,140,169,169,169,140,140,169,169,100,169, + 169,169,169,169,140,100,169,169,100,169,169,169,169,169,169,169, + 169,100,169,169,169,100,100,169,100,100,140,100,169,169,100,100, + 100,100,74,100,100,74,100,100,100,74,74,100,100,100,100,100, + 100,100,169,169,169,100,169,74,100,169,74,74,140,74,100,74, + 169,140,74,140,140,100,74,169,140,88,100,169,169,169,140,100, + 169,74,140,88,140,100,100,140,88,100,140,169,100,100,74,127, + 169,140,88,140,169,169,169,169,39,169,140,127,140,169,169,169, + 140,88,169,127,140,169,127,140,39,127,39,127,39,127,207,187, + 12,109,243,8,219,150,219,42,49,139,139,8,8,211,8,139, + 8,8,139,139,49,12,26,12,42,49,139,8,8,139,8,8, + 139,8,8,139,139,101,17,26,12,42,49,139,8,8,139,8, + 8,139,8,8,139,139,101,17,26,12,42,49,139,8,8,139, + 8,8,139,8,8,139,139,67,12,26,12,42,49,139,8,8, + 139,8,139,211,8,8,139,139,101,17,26,12,42,49,139,8, + 8,139,8,8,139,8,8,139,139,101,17,26,12,42,49,139, + 139,8,8,211,8,139,8,8,139,139,101,17,26,12,42,49, + 139,139,8,8,211,8,139,8,8,139,139,101,17,26,12,42, + 49,139,139,8,8,211,8,139,8,8,139,139,101,17,26,12, + 42,49,139,139,8,8,211,8,139,8,8,139,139,101,17,26, + 12,42,49,139,8,8,139,8,8,139,8,8,139,139,49,12, + 26,12,42,49,139,139,8,139,8,8,139,8,8,139,139,49, + 17,26,12,42,49,139,139,8,8,211,8,139,8,8,139,139, + 101,17,26,12,42,49,139,139,8,8,8,139,211,8,8,139, + 139,49,17,26,12,42,49,139,139,8,139,211,8,139,8,8, + 139,139,101,17,26,12,42,49,139,139,8,8,211,8,139,8, + 8,139,139,101,17,26,12,42,49,139,8,139,139,8,8,139, + 8,8,139,139,101,17,26,12,42,49,139,139,8,139,8,139, + 211,8,8,139,139,49,219,17,243,26,8,8,67,7,8,105, + 105,208,105,208,63,208,208,208,208,208,208,208,208,208,208,208, + 208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, + 208,208,208,208,208,208,54,208,208,208,63,208,63,16,208,16, + 208,54,208,54,208,208,16,208,208,208,208,208,208,208,208,63, + 169,74,169,169,100,100,74,74,100,74,74,74,100,74,74,74, + 74,74,100,74,100,74,100,74,74,100,74,100,74,74,102,100, + 100,100,100,100,100,100,100,100,74,100,100,74,169,100,100,74, + 169,74,100,169,74,169,74,74,100,100,100,100,169,169,169,100, + 169,169,100,169,169,169,100,169,169,169,100,100,100,100,100,100, + 169,169,169,169,169,169,100,169,169,100,169,74,100,140,100,74, + 100,100,74,74,100,102,100,100,100,100,74,100,100,100,100,100, + 74,100,100,74,169,100,169,140,169,169,169,100,169,140,169,140, + 100,169,100,100,140,88,140,169,169,169,100,169,169,88,140,169, + 169,100,169,100,169,169,100,169,39,169,169,127,169,88,140,169, + 88,169,88,140,169,127,169,169,169,88,140,88,140,127,169,88, + 127,140,169,88,169,169,88,140,127,140,169,169,127,127,188,187, + 12,12,150,139,26,150,26,42,101,8,211,211,8,211,8,8, + 211,8,8,211,139,150,150,211,42,101,8,139,8,211,8,8, + 8,211,8,8,139,101,150,150,211,42,101,8,139,8,211,8, + 8,211,8,8,139,8,67,150,150,243,42,101,8,139,8,211, + 8,8,8,211,8,8,139,101,150,150,211,42,101,8,139,8, + 211,8,8,8,211,8,211,139,101,150,150,243,42,101,8,139, + 8,211,8,8,211,8,8,139,8,67,150,150,243,42,101,8, + 211,211,8,211,8,8,211,8,139,8,67,150,150,109,42,101, + 8,211,211,8,211,8,8,211,8,139,8,49,150,150,243,42, + 101,8,211,211,8,211,8,8,211,8,211,139,101,150,150,243, + 42,101,8,211,211,8,211,8,8,211,8,139,8,67,150,150, + 243,42,101,8,139,8,211,8,8,8,211,8,8,211,139,150, + 150,211,42,101,8,211,8,211,8,8,8,211,8,8,211,101, + 150,150,211,42,101,8,211,211,8,211,8,8,211,8,211,139, + 101,150,150,243,42,101,8,211,211,211,8,8,211,8,8,8, + 211,101,150,150,243,42,101,8,211,8,8,8,8,211,8,8, + 139,8,67,150,150,243,42,101,8,211,211,8,211,8,8,211, + 8,139,8,67,150,150,211,42,101,8,8,8,211,8,8,211, + 8,8,139,8,67,150,150,211,42,101,8,211,8,8,8,8, + 211,8,8,8,211,67,12,17,243,219,8,8,8,141,12,105, + 208,208,208,208,105,208,208,208,208,208,208,208,208,208,208,208, + 208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, + 16,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, + 208,208,208,208,208,208,208,208,208,208,208,208,208,63,208,208, + 169,169,169,140,140,140,169,100,74,100,100,100,74,100,74,100, + 74,100,74,74,74,102,74,100,100,100,100,100,102,100,100,74, + 100,100,74,100,100,100,100,100,100,100,169,100,100,169,100,169, + 100,169,169,100,169,100,169,169,169,169,169,169,100,169,169,169, + 169,169,188,169,169,169,169,169,100,100,169,169,169,169,169,169, + 169,169,169,100,100,169,169,169,100,169,100,169,169,100,140,169, + 74,100,100,100,74,100,100,100,100,100,100,74,100,100,74,100, + 169,100,100,100,100,169,100,100,100,100,140,169,140,88,74,100, + 169,74,169,140,88,140,88,169,140,169,169,169,74,169,88,100, + 169,88,169,169,169,169,169,169,169,169,140,169,140,127,100,127, + 127,88,169,88,169,169,169,169,140,127,169,127,127,169,140,127, + 169,127,127,39,127,39,127,169,169,127,127,39,169,218,218,187, + 150,109,17,182,132,187,219,42,101,8,211,211,8,211,8,211, + 8,211,8,139,8,150,17,243,122,49,8,211,8,211,211,8, + 211,8,211,8,8,139,150,17,243,122,49,8,211,8,211,211, + 8,211,211,8,8,211,8,150,17,211,122,49,8,211,8,211, + 211,211,8,211,211,8,8,139,150,17,243,122,49,8,211,8, + 211,187,211,8,211,8,8,8,139,150,17,211,122,49,8,211, + 8,211,211,8,211,211,8,8,211,8,150,17,211,42,101,8, + 211,211,8,211,8,211,8,211,8,8,139,150,17,243,42,101, + 8,211,211,8,211,211,8,211,8,8,211,8,150,17,211,122, + 49,8,211,211,8,211,211,8,211,8,8,8,139,150,17,211, + 42,101,8,211,211,8,211,211,8,211,8,8,8,139,150,17, + 211,122,49,8,211,8,211,211,8,211,8,211,8,211,8,150, + 17,243,122,49,8,211,8,211,211,187,211,8,211,8,8,139, + 150,17,243,122,49,8,211,211,8,211,211,8,211,8,8,8, + 139,150,17,211,122,49,8,211,8,211,8,211,8,211,211,8, + 139,8,150,17,211,122,49,8,211,8,211,211,187,211,211,8, + 8,8,139,150,17,211,122,49,8,211,211,8,211,8,211,8, + 211,8,8,139,150,17,243,122,49,8,211,211,211,8,211,211, + 8,211,8,8,139,150,17,243,122,49,8,211,211,211,8,211, + 8,211,211,8,8,139,150,17,254,26,8,141,67,8,243,105, + 105,105,105,208,105,208,208,208,105,208,208,208,208,208,208,208, + 208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, + 208,208,208,208,208,208,208,208,208,208,63,208,208,208,208,208, + 208,16,208,16,208,208,54,208,16,54,63,208,208,208,208,63, + 100,100,100,169,169,74,140,100,74,74,74,74,74,100,74,100, + 74,100,100,100,169,74,74,74,74,74,74,100,100,100,100,100, + 100,100,100,74,100,100,100,169,169,100,169,100,100,169,100,169, + 100,100,169,169,169,100,100,169,100,100,169,169,169,100,169,100, + 169,169,169,169,169,169,169,169,169,169,169,100,169,100,100,100, + 100,100,169,169,100,169,100,169,169,169,100,100,169,100,100,169, + 74,100,100,100,100,74,74,100,100,100,100,100,100,100,100,100, + 169,169,169,169,100,169,169,169,169,100,100,100,100,88,140,100, + 88,100,100,169,88,74,100,100,100,169,100,88,100,169,169,169, + 127,100,88,169,169,88,169,100,88,88,100,88,169,127,100,169, + 39,39,127,169,88,169,169,88,169,169,169,169,169,127,169,169, + 169,88,127,169,169,169,127,127,127,127,169,127,88,143,218,187, + 17,12,219,8,132,187,26,122,101,139,8,211,211,8,109,211, + 187,211,187,139,139,243,26,211,122,139,211,211,211,109,187,211, + 109,187,211,211,8,67,12,17,211,122,139,211,211,211,211,187, + 211,187,211,187,139,139,139,243,26,211,122,139,211,211,211,109, + 187,8,109,187,211,187,139,8,243,26,211,122,139,211,211,211, + 8,211,8,109,187,211,187,139,8,243,17,211,122,139,211,211, + 211,109,8,109,109,187,8,109,139,139,243,219,243,122,101,139, + 8,211,211,187,211,109,187,211,187,211,139,150,17,8,122,101, + 211,211,8,211,8,109,187,211,187,211,139,139,243,26,8,122, + 139,211,211,8,211,187,211,187,211,211,187,139,8,243,219,8, + 122,101,211,211,8,211,187,211,187,211,187,139,8,139,150,17, + 211,122,139,211,211,211,109,187,211,109,8,211,187,139,67,12, + 26,211,122,139,139,211,211,8,211,211,8,109,211,187,211,139, + 150,26,211,122,139,211,211,8,211,187,211,187,211,187,139,8, + 67,12,26,8,122,139,211,211,211,187,211,211,187,211,8,187, + 139,139,243,219,8,122,139,139,211,211,8,211,8,211,187,211, + 187,211,139,150,26,8,122,139,211,211,8,211,109,187,211,109, + 187,139,8,139,243,17,211,122,139,139,211,211,187,211,8,109, + 187,211,109,8,139,243,26,211,122,139,139,8,211,187,211,211, + 187,211,8,109,8,67,150,26,182,219,243,8,8,8,8,105, + 208,208,208,208,208,208,105,208,208,208,105,208,208,208,105,208, + 208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, + 63,208,208,208,208,208,208,63,208,208,208,208,208,208,208,208, + 208,16,208,208,16,208,208,208,208,16,208,208,208,208,208,208, + 169,140,39,169,140,169,100,74,100,100,74,100,74,74,74,74, + 100,74,74,74,74,100,100,100,100,100,100,100,100,100,100,100, + 100,100,100,100,100,100,100,100,100,169,100,169,169,169,169,169, + 169,169,100,100,169,169,169,100,169,169,169,169,169,188,169,188, + 169,169,169,140,169,169,100,169,169,169,100,169,100,169,169,169, + 140,169,140,169,140,169,169,169,100,169,169,169,100,169,169,100, + 100,100,100,100,74,100,100,100,100,100,100,100,100,100,100,169, + 100,100,100,100,169,100,100,100,100,169,169,169,140,88,100,140, + 169,169,88,100,169,88,169,88,169,88,140,88,127,100,88,169, + 100,127,88,169,169,88,169,127,169,88,39,88,169,169,127,169, + 88,88,169,169,169,88,169,127,127,169,88,127,127,88,127,127, + 39,127,88,127,127,127,88,169,88,127,127,39,207,218,236,132, + 26,187,26,141,187,12,132,42,101,139,91,211,8,91,211,8, + 211,8,139,8,67,12,17,211,42,101,211,91,211,211,211,8, + 211,8,211,211,8,139,150,26,211,42,101,211,91,211,211,211, + 8,211,8,211,109,8,139,17,17,211,42,101,211,91,211,211, + 211,211,8,211,8,139,8,67,12,17,211,42,101,211,211,211, + 211,91,109,8,139,8,139,8,67,12,26,211,42,101,211,211, + 8,211,91,8,211,211,8,211,8,67,12,26,211,42,101,211, + 211,211,8,91,211,8,139,8,139,8,139,12,26,182,26,101, + 211,211,211,91,211,8,211,8,211,211,8,139,12,17,182,42, + 101,139,91,8,211,211,211,8,211,8,139,8,67,12,26,182, + 26,101,139,91,211,211,211,8,139,8,109,211,211,139,12,26, + 211,42,101,211,91,8,211,211,109,8,109,8,139,8,139,150, + 17,8,42,101,211,211,211,211,8,211,187,211,8,139,8,67, + 12,17,8,26,101,139,91,211,211,211,8,139,8,211,109,8, + 139,150,17,182,26,101,211,8,211,211,211,8,211,211,8,139, + 8,67,12,26,182,42,101,211,211,211,211,211,211,187,139,8, + 139,8,139,12,17,182,26,101,211,8,91,211,211,8,211,8, + 109,8,211,139,12,26,8,42,101,211,8,211,211,91,109,8, + 211,8,211,211,139,12,17,8,42,101,211,211,211,211,8,211, + 211,8,109,211,211,139,12,17,8,26,8,8,141,8,12,105, + 105,208,105,208,105,208,105,208,105,208,105,208,105,208,208,105, + 208,208,105,208,208,208,208,208,208,208,208,105,208,208,208,208, + 208,208,63,208,208,208,208,208,208,208,208,208,208,208,208,208, + 208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,63, + 169,100,140,100,169,140,169,169,74,100,74,100,100,100,100,74, + 100,100,100,100,100,74,100,74,100,100,100,100,74,100,100,74, + 100,100,100,100,169,100,100,169,100,169,169,169,100,169,100,100, + 100,169,169,100,100,100,169,100,169,100,169,169,169,88,169,169, + 169,169,169,169,140,140,169,169,100,169,169,169,169,169,169,169, + 169,169,169,169,169,140,169,169,100,169,140,169,169,100,169,169, + 169,100,100,100,100,100,100,100,100,100,169,100,169,169,100,169, + 169,169,169,100,169,169,169,169,100,169,100,88,100,169,100,100, + 169,169,169,100,169,169,88,169,169,88,169,100,127,169,88,39, + 88,39,88,169,127,100,88,169,169,169,88,169,88,169,169,88, + 169,169,88,169,127,127,169,88,127,127,169,169,127,169,88,88, + 88,39,169,88,39,127,39,127,127,127,127,127,127,218,153,111, + 17,12,26,8,12,91,219,122,101,182,211,211,8,211,187,211, + 211,187,139,187,67,150,17,243,122,101,67,211,8,211,91,8, + 109,109,187,139,8,67,150,17,8,122,101,67,211,8,211,91, + 8,211,187,211,8,8,67,150,17,243,122,101,67,211,8,211, + 91,8,211,211,187,139,8,67,150,17,243,122,101,139,211,211, + 8,8,211,187,211,187,139,187,67,150,17,243,122,101,139,211, + 91,139,8,211,109,187,211,211,91,67,150,17,8,122,101,139, + 211,91,139,8,211,187,211,187,139,8,67,150,26,8,122,101, + 139,211,8,211,8,211,109,187,211,8,8,67,150,26,8,122, + 101,182,139,211,211,91,8,109,187,211,211,8,67,150,26,8, + 122,101,182,139,8,211,91,8,109,8,109,8,8,67,150,17, + 8,122,101,67,211,211,211,91,8,211,187,211,211,8,67,150, + 17,243,122,101,139,211,91,8,211,211,8,211,187,139,91,67, + 150,17,243,122,101,182,139,8,211,91,8,109,187,211,8,8, + 67,150,26,243,122,101,139,211,211,211,91,8,109,187,211,211, + 91,67,150,26,8,122,101,139,211,91,8,91,211,8,8,109, + 211,8,67,150,26,8,162,101,139,139,211,8,91,8,211,8, + 109,211,8,67,150,17,243,122,101,139,211,211,211,8,211,187, + 211,211,211,8,67,150,17,243,122,101,139,211,91,8,91,8, + 109,8,211,211,8,67,150,17,8,26,12,8,8,8,8,105, + 105,105,208,105,208,208,208,105,208,105,208,105,208,208,105,208, + 105,208,208,105,208,208,208,105,208,208,208,208,105,208,208,208, + 208,208,208,208,63,208,208,208,208,63,208,16,208,208,208,208, + 208,208,208,208,208,208,208,208,208,16,208,208,208,208,208,208, + 169,140,169,169,100,169,169,74,169,140,100,74,74,74,74,100, + 74,100,100,100,100,100,100,100,100,100,74,100,100,74,100,100, + 100,100,100,169,100,169,100,100,169,169,100,100,169,100,169,169, + 88,169,100,169,88,169,100,169,169,88,169,88,169,39,169,169, + 169,169,169,169,169,169,140,169,169,169,100,169,100,140,100,100, + 169,169,169,169,169,169,169,169,169,169,100,169,100,169,100,100, + 100,100,100,100,74,100,100,100,100,100,100,100,100,100,100,100, + 100,169,100,169,169,88,169,169,88,100,88,100,88,100,88,88, + 100,169,100,88,169,169,169,169,88,169,169,127,169,169,88,169, + 88,169,88,169,100,88,169,88,169,88,39,169,88,169,39,88, + 169,88,169,127,88,169,169,127,88,169,127,127,127,127,39,127, + 127,127,127,127,88,169,127,127,127,127,127,188,188,218,218,132, + 26,150,187,141,150,12,12,42,101,211,8,211,211,211,8,211, + 187,139,8,211,67,132,17,8,42,101,8,211,8,211,211,211, + 8,211,8,109,211,139,150,17,243,42,101,8,211,8,211,211, + 8,211,8,211,211,211,67,132,17,8,42,101,8,211,211,8, + 139,187,211,8,211,109,211,139,132,17,8,42,139,8,211,211, + 211,211,8,211,8,139,8,211,67,150,17,243,42,101,211,8, + 211,8,211,187,211,8,211,8,211,67,132,17,211,42,101,211, + 8,211,8,211,187,139,8,211,211,211,139,150,17,211,42,101, + 8,211,211,91,211,187,211,8,211,211,211,67,150,17,211,42, + 101,211,8,211,8,211,211,8,211,8,109,211,139,150,17,211, + 42,101,211,8,211,8,139,187,211,109,8,211,211,139,150,17, + 243,42,101,211,211,8,211,8,211,8,211,8,109,211,139,187, + 17,211,42,139,211,211,8,211,211,187,211,8,139,8,8,67, + 132,17,211,42,101,211,8,211,8,211,109,8,211,211,211,211, + 139,187,17,211,42,101,211,211,211,8,139,187,211,8,211,8, + 211,67,150,17,211,42,139,8,211,139,8,211,211,187,109,8, + 211,211,67,150,17,211,42,101,211,8,211,211,139,211,187,109, + 8,211,211,139,132,17,211,42,101,109,211,211,8,211,8,211, + 8,109,8,211,139,132,17,211,78,101,211,8,139,211,211,109, + 211,8,187,211,211,8,17,12,141,17,8,8,8,8,150,36, + 105,105,208,105,105,208,105,208,208,208,105,208,105,208,208,105, + 208,208,208,208,105,105,208,208,105,208,105,208,208,208,63,208, + 208,208,208,63,208,208,63,208,63,208,208,63,208,208,208,208, + 208,208,16,63,208,208,208,16,208,208,208,208,208,208,208,63, + 169,100,39,169,100,100,169,100,169,169,100,100,100,169,100,100, + 74,100,100,100,100,100,100,100,100,100,100,100,100,100,100,169, + 169,169,100,100,100,169,100,100,100,169,88,100,169,88,169,169, + 100,169,100,169,88,169,88,100,169,100,169,169,169,169,169,169, + 39,39,169,140,169,169,169,140,140,39,169,39,100,169,39,100, + 169,169,140,169,39,169,39,39,169,188,169,169,169,169,169,100, + 169,100,100,100,100,74,100,169,169,100,169,100,100,100,100,169, + 88,169,88,100,100,88,100,100,88,169,169,169,88,169,169,169, + 100,88,169,100,100,169,88,169,169,169,169,169,169,169,169,88, + 140,88,169,169,88,169,88,169,100,169,88,39,88,88,169,88, + 127,169,169,127,88,127,169,127,127,88,88,169,127,127,127,127, + 127,127,207,207,127,127,127,169,127,127,127,207,207,153,218,166, + 12,187,219,243,187,12,187,122,101,139,211,211,211,211,211,139, + 8,211,211,8,139,150,17,109,122,101,139,211,211,8,139,109, + 211,211,211,211,8,139,150,17,109,122,101,139,211,211,139,211, + 109,211,211,109,211,91,101,150,17,109,122,101,139,211,211,8, + 139,211,211,211,211,211,8,139,150,17,109,122,101,139,211,211, + 139,211,109,211,8,109,211,8,139,150,17,109,122,101,139,139, + 139,211,211,211,211,211,211,8,8,139,150,17,109,122,101,139, + 211,139,139,139,211,211,211,109,8,8,139,150,17,109,122,101, + 139,211,139,139,139,211,211,211,109,211,91,139,150,17,243,122, + 101,139,211,211,211,139,109,211,211,211,211,8,139,150,17,243, + 122,101,139,211,211,211,139,211,211,211,109,211,8,139,150,17, + 109,122,101,139,211,211,211,211,109,211,211,211,211,8,67,132, + 17,243,122,101,139,211,211,211,211,211,211,8,211,211,8,139, + 150,17,243,122,101,139,211,211,211,139,211,211,211,109,8,8, + 67,150,17,109,122,101,139,211,211,8,139,211,211,211,109,8, + 8,139,150,219,109,122,101,139,211,211,211,139,139,211,211,211, + 8,8,139,150,17,243,122,101,139,211,211,211,139,109,211,211, + 109,211,8,139,150,219,109,122,101,139,211,211,211,211,211,109, + 211,211,211,8,139,150,26,211,122,101,139,211,211,211,139,109, + 211,211,211,211,211,67,150,26,141,26,12,8,141,8,8,105, + 36,208,105,208,208,105,208,105,208,105,208,208,105,208,105,208, + 105,105,208,208,208,208,105,208,208,208,208,105,208,105,208,105, + 208,63,208,208,63,208,105,105,208,208,208,208,208,208,208,208, + 208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, + 169,39,169,169,169,140,100,169,100,100,140,140,169,100,140,169, + 169,169,169,100,100,100,100,100,100,100,100,100,100,100,169,100, + 100,100,100,169,100,100,169,88,100,100,169,88,169,100,100,88, + 169,100,88,100,100,88,100,88,169,169,169,169,169,169,169,169, + 169,169,39,169,140,169,140,169,169,169,140,169,188,140,169,39, + 140,39,188,39,169,39,169,169,169,169,169,169,169,169,169,169, + 100,169,169,100,169,100,169,100,100,169,100,169,88,169,88,100, + 100,100,100,88,88,100,100,169,100,100,88,100,100,100,100,88, + 169,100,100,88,169,74,88,100,88,169,169,169,169,169,169,169, + 88,127,169,169,39,100,169,169,169,169,88,169,88,169,169,127, + 169,127,88,88,188,88,188,88,88,169,127,218,188,188,188,188, + 88,127,127,127,127,218,127,127,127,188,127,127,188,218,218,187, + 12,187,219,243,187,150,17,42,49,211,139,8,211,211,91,109, + 8,211,211,211,139,132,219,211,78,49,211,211,211,211,8,91, + 211,211,8,211,211,67,132,219,211,78,49,211,211,211,8,211, + 211,109,211,8,211,8,67,132,219,211,78,49,211,211,211,211, + 211,109,211,109,8,211,211,67,132,219,211,78,49,211,211,211, + 8,211,91,109,211,211,211,211,67,132,26,211,78,67,211,211, + 8,211,211,91,211,8,109,211,8,67,132,219,211,122,49,139, + 139,8,211,8,109,211,8,211,211,211,67,132,219,211,78,49, + 211,211,8,8,211,211,211,211,8,211,8,67,132,219,211,122, + 67,139,211,211,8,211,211,109,109,8,211,211,67,132,219,211, + 122,49,211,211,139,8,211,109,211,211,8,211,211,67,132,219, + 211,122,49,211,211,211,211,211,211,109,109,211,211,211,8,132, + 26,211,122,49,211,211,211,211,211,91,109,109,211,211,8,67, + 132,26,211,122,49,211,211,8,139,8,61,109,211,211,211,211, + 8,132,26,211,122,49,211,211,211,211,211,211,109,8,211,211, + 8,67,132,219,211,78,67,139,8,211,211,8,109,211,211,211, + 211,211,139,132,219,211,122,49,211,211,8,211,8,211,211,211, + 8,211,211,67,132,26,211,122,67,139,211,8,211,211,61,211, + 211,8,211,211,67,150,219,211,122,67,139,8,211,139,91,211, + 109,211,211,8,211,139,12,17,8,26,8,8,8,8,150,36, + 105,105,105,105,208,105,208,208,208,105,208,105,208,208,208,208, + 208,208,105,208,105,208,208,208,105,208,105,208,208,208,208,208, + 208,105,208,208,208,208,208,208,208,208,208,208,208,208,63,208, + 208,208,208,208,208,208,208,208,208,54,208,208,208,208,208,208, + 169,169,169,169,169,169,74,169,140,100,100,74,140,100,74,100, + 100,100,140,169,140,169,100,100,100,100,100,100,169,100,100,100, + 169,169,100,169,169,100,100,169,100,100,169,100,169,88,100,100, + 169,100,169,169,100,169,169,100,169,88,169,169,188,188,188,169, + 169,169,169,169,169,169,39,169,140,169,140,169,169,169,140,169, + 169,169,169,169,169,169,169,39,169,169,169,169,169,169,169,169, + 100,100,169,100,169,100,100,100,100,169,100,100,100,100,100,100, + 100,169,100,169,169,88,100,169,100,100,169,169,169,169,100,100, + 169,169,169,169,169,169,169,169,88,169,169,169,169,169,88,74, + 100,169,127,100,127,88,100,88,169,169,88,39,88,127,169,88, + 88,188,188,88,127,88,188,188,218,88,88,188,218,127,88,207, + 188,218,218,218,88,88,127,127,127,188,127,127,188,236,218,187, + 219,26,26,243,187,150,219,122,101,139,139,139,139,139,139,211, + 211,211,139,139,139,12,26,109,122,101,139,139,139,139,139,139, + 211,211,211,139,211,139,12,26,109,122,101,139,139,139,139,139, + 211,211,139,211,139,139,139,12,26,109,122,101,139,139,139,139, + 139,211,211,211,211,139,211,139,12,26,109,122,101,139,139,139, + 139,139,139,211,211,211,139,211,139,150,26,211,122,101,139,139, + 139,139,139,139,211,139,211,139,211,139,12,26,211,122,101,139, + 139,211,139,139,211,211,211,139,139,139,139,12,26,211,122,101, + 101,139,139,139,211,211,211,139,211,139,139,139,12,26,211,42, + 101,139,139,139,139,139,211,139,211,211,139,211,139,12,26,211, + 122,101,139,139,139,211,139,211,211,211,139,139,211,139,12,26, + 211,122,101,139,139,139,139,139,211,139,91,139,139,139,67,150, + 26,211,122,101,139,139,139,139,139,139,139,211,211,139,211,139, + 150,26,211,122,101,101,139,139,139,139,139,211,139,211,139,139, + 67,150,26,211,122,101,139,139,139,139,139,211,211,211,211,139, + 211,101,12,26,109,42,101,139,139,139,139,139,211,211,211,211, + 139,139,139,12,26,211,122,101,101,139,139,139,139,211,211,139, + 211,139,139,139,150,26,211,122,101,139,139,139,139,139,139,211, + 211,211,139,139,139,150,26,211,122,101,139,139,8,67,211,139, + 211,139,211,139,139,67,150,26,141,26,8,8,8,8,8,36, + 36,208,105,105,208,105,105,105,105,208,105,208,105,105,208,105, + 208,208,208,208,208,105,208,208,208,208,208,105,105,208,105,208, + 208,208,105,208,105,208,208,208,208,208,208,208,208,208,208,208, + 208,208,63,208,208,63,16,208,208,208,208,208,208,208,208,208, + 169,140,39,169,169,169,169,169,100,169,140,169,100,169,169,140, + 140,74,100,74,100,74,169,140,169,74,100,169,100,100,100,100, + 100,100,100,100,100,100,169,100,169,100,88,100,100,100,100,100, + 100,88,169,169,169,169,100,169,100,169,88,169,39,169,169,39, + 39,39,39,39,140,169,169,39,169,169,169,169,140,169,169,169, + 140,169,39,39,39,39,39,169,169,169,188,140,169,169,140,100, + 169,169,74,100,100,100,100,169,100,100,100,169,169,169,169,169, + 169,100,169,100,100,100,100,88,169,169,169,169,88,169,169,169, + 169,100,88,169,88,100,169,169,169,169,140,88,169,100,88,169, + 88,169,169,127,169,169,169,169,88,127,169,169,88,169,88,127, + 188,88,88,188,88,188,88,88,88,188,188,218,188,188,188,127, + 88,169,127,127,207,207,188,88,127,127,127,39,207,236,236,166, + 12,187,42,243,187,12,187,122,8,91,26,91,26,91,91,26, + 91,91,26,91,182,132,12,109,42,8,91,26,91,91,187,91, + 26,91,91,26,91,8,132,12,109,42,8,91,26,91,91,26, + 91,26,91,26,91,26,182,132,12,243,42,8,91,26,91,26, + 91,91,26,91,91,26,91,8,132,12,109,42,8,91,26,91, + 91,187,26,91,26,91,26,91,8,132,12,243,42,8,187,26, + 91,91,187,26,91,26,91,26,91,182,132,12,12,122,12,187, + 26,91,26,91,91,26,91,26,91,26,182,132,12,187,78,8, + 26,91,91,26,91,91,26,91,26,91,26,182,132,12,12,122, + 8,91,26,91,91,26,91,91,26,91,26,91,182,132,12,12, + 122,8,91,26,91,91,91,26,91,26,91,26,91,8,150,17, + 243,42,8,26,91,91,26,91,26,91,12,91,26,91,8,132, + 187,12,122,8,91,26,91,91,91,26,91,26,91,26,91,182, + 132,12,12,78,8,91,26,91,26,187,26,91,26,91,26,91, + 8,132,17,243,42,91,91,26,91,91,26,91,91,26,91,26, + 91,182,132,17,243,162,8,187,26,91,26,91,91,26,91,26, + 91,26,182,132,12,12,122,211,26,91,26,91,26,91,91,26, + 91,26,91,8,132,17,243,42,8,91,26,91,91,26,91,91, + 26,91,26,91,8,132,12,12,78,8,17,91,91,26,91,26, + 91,26,91,26,91,8,132,12,8,17,12,243,8,8,8,36, + 36,105,105,105,208,105,208,105,208,105,208,105,208,105,208,105, + 105,105,105,105,105,208,208,105,105,208,105,208,208,105,208,105, + 208,105,208,208,208,208,105,208,208,208,54,208,208,208,208,208, + 63,208,208,208,96,208,208,208,208,16,208,208,208,208,208,208, + 169,169,39,169,169,140,100,169,169,169,74,74,74,74,100,100, + 169,140,169,140,169,100,100,100,169,74,100,74,140,169,140,100, + 169,169,169,100,169,100,169,169,169,100,169,169,169,169,88,169, + 169,100,100,169,88,169,169,169,169,169,169,169,39,39,39,39, + 169,39,188,188,39,169,169,169,169,169,169,169,169,169,39,169, + 39,169,169,39,39,39,39,39,39,169,169,169,140,169,39,74, + 100,169,74,100,140,140,100,140,100,169,100,100,100,100,169,169, + 169,100,169,169,169,169,100,100,100,100,169,169,100,169,169,100, + 169,169,100,169,169,100,100,169,169,88,140,169,169,169,88,169, + 169,169,169,88,88,169,88,169,88,88,88,127,88,169,88,88, + 188,188,188,188,88,188,188,188,188,218,88,88,188,218,188,207, + 127,188,188,127,88,127,207,88,188,188,127,127,127,207,218,187, + 17,166,42,109,111,187,12,0,219,219,219,219,219,219,187,183, + 26,219,219,26,8,17,26,8,0,219,219,219,219,42,42,187, + 183,26,219,219,17,8,17,26,8,0,219,219,219,219,219,42, + 187,219,219,219,219,26,8,12,26,211,0,219,219,26,26,219, + 42,187,183,26,219,219,17,8,17,26,8,0,219,219,219,219, + 26,187,187,183,26,219,219,17,8,17,26,211,0,26,187,219, + 219,26,187,183,26,26,219,219,26,8,12,187,211,0,26,187, + 219,219,183,42,187,183,26,219,219,26,8,12,17,211,0,219, + 219,219,219,219,42,187,183,26,219,219,26,8,12,187,8,0, + 219,219,219,26,42,42,183,42,26,219,219,26,8,187,187,211, + 0,219,219,219,42,42,26,187,183,26,183,219,17,8,12,26, + 211,0,219,17,26,26,26,26,187,42,42,219,219,219,8,12, + 187,8,0,219,219,219,219,219,42,219,187,183,26,219,26,8, + 187,187,211,0,219,219,219,219,26,26,187,183,26,219,219,219, + 8,12,26,8,0,219,17,26,219,219,42,219,187,42,219,219, + 26,8,12,26,8,0,26,187,219,219,183,42,187,183,26,219, + 219,26,8,12,187,8,0,219,17,26,219,187,42,183,42,26, + 26,219,219,8,12,26,8,0,219,219,219,219,219,42,219,183, + 26,26,219,219,8,12,187,211,0,26,219,219,219,26,26,187, + 183,26,219,219,219,8,12,26,8,219,8,141,8,8,8,36, + 36,105,105,105,105,105,105,208,105,208,105,208,105,208,208,208, + 105,208,208,208,105,208,208,208,208,208,208,105,208,208,105,208, + 208,208,105,208,105,208,208,63,208,208,208,16,208,208,208,208, + 208,208,208,208,208,208,16,208,208,208,208,16,208,208,16,208, + 169,74,169,140,169,169,39,140,140,100,140,169,100,169,140,140, + 140,100,74,100,74,140,169,140,100,169,74,169,100,74,100,169, + 100,169,100,169,100,169,169,100,169,169,100,100,100,169,169,100, + 100,169,169,169,169,169,100,169,74,169,88,169,169,169,169,169, + 188,188,39,39,169,39,169,169,39,39,39,39,169,169,169,169, + 169,39,39,169,169,39,39,39,140,169,169,169,169,169,100,169, + 169,100,169,140,100,100,74,100,169,169,140,169,169,169,100,100, + 169,169,100,100,169,169,169,169,88,169,100,169,169,100,100,169, + 140,100,88,169,169,169,88,100,169,140,88,100,169,140,88,169, + 100,100,100,169,169,88,127,88,169,188,188,169,127,188,88,218, + 188,188,88,88,188,188,218,218,88,88,188,218,127,88,127,88, + 218,88,218,188,188,127,127,188,127,127,127,127,188,236,58,17, + 26,17,183,12,17,26,150,0,139,101,139,139,139,139,67,139, + 139,139,139,139,8,150,219,211,0,139,139,139,139,67,182,139, + 139,139,139,139,139,139,150,219,211,0,211,139,139,139,139,139, + 139,139,139,139,139,139,139,132,219,243,0,211,139,67,67,139, + 182,139,139,139,139,139,139,139,150,219,211,0,211,139,139,139, + 67,139,139,139,139,139,139,139,139,150,219,243,0,211,139,139, + 139,67,139,139,67,67,139,101,139,8,132,219,8,0,139,67, + 139,139,139,139,67,139,139,139,139,139,139,132,219,243,0,139, + 101,139,139,139,139,139,139,67,139,139,139,139,132,219,211,0, + 211,101,139,182,67,67,139,67,67,139,101,139,8,150,219,243, + 0,211,139,139,67,182,67,139,139,139,139,139,139,139,132,219, + 243,0,139,139,67,67,67,139,67,182,67,139,139,139,139,150, + 219,211,0,139,101,139,139,139,67,139,139,139,139,139,139,8, + 150,219,243,0,211,101,139,139,67,67,139,139,67,139,139,139, + 139,150,219,211,0,211,139,67,139,139,139,67,139,67,139,101, + 139,8,150,219,211,0,211,67,139,139,139,139,139,139,139,139, + 139,139,139,132,219,211,0,139,139,67,139,139,139,139,67,67, + 139,139,139,139,150,219,211,0,211,101,139,139,139,67,139,139, + 139,139,139,139,139,132,219,243,0,211,67,139,139,67,139,139, + 139,139,139,139,139,139,150,219,141,219,8,8,141,141,141,36, + 105,105,105,105,208,105,105,105,208,105,105,105,105,105,105,208, + 208,105,208,105,208,105,105,105,208,105,208,105,208,105,208,208, + 105,208,208,208,208,208,105,208,63,208,208,208,208,208,63,208, + 208,208,208,208,208,208,208,208,208,16,208,63,208,208,208,208, + 188,140,169,140,140,169,169,100,140,100,74,140,74,169,169,74, + 140,140,140,169,140,74,100,140,169,169,100,100,169,169,74,74, + 100,169,100,169,100,100,169,100,169,169,88,169,100,88,169,169, + 169,169,100,100,169,169,100,169,100,169,169,88,39,188,188,39, + 169,169,169,39,140,39,39,169,169,169,169,39,39,169,39,39, + 169,169,39,39,169,39,169,188,39,39,140,169,140,140,169,140, + 140,169,100,100,169,169,100,74,100,100,74,100,100,169,169,100, + 88,169,88,100,88,169,169,169,169,169,100,169,169,169,169,88, + 169,169,100,169,169,169,140,169,88,140,127,169,88,169,169,127, + 88,127,88,88,169,169,169,127,169,88,88,88,88,188,88,88, + 88,218,218,218,88,88,88,218,207,218,88,218,207,218,207,127, + 127,127,218,218,127,88,207,127,188,127,188,127,127,218,236,187, + 26,17,42,150,187,26,17,0,8,139,139,139,211,211,211,211, + 8,211,139,67,243,150,122,243,0,8,139,139,211,139,211,211, + 211,8,211,211,139,243,150,122,243,0,8,139,139,211,139,211, + 139,211,8,211,139,139,243,150,122,243,0,8,211,211,139,139, + 211,211,211,8,211,139,139,243,150,122,243,0,8,139,211,211, + 211,211,211,139,187,139,211,139,243,150,78,243,0,8,139,139, + 109,139,211,211,109,109,8,139,182,8,12,122,243,0,8,139, + 139,139,211,211,211,211,8,139,211,139,8,187,42,243,0,8, + 139,139,211,211,211,211,211,8,211,139,139,243,12,122,243,0, + 8,139,211,139,211,211,211,109,8,8,139,182,8,12,122,243, + 0,8,139,211,211,139,211,211,211,8,8,139,211,8,150,122, + 243,0,8,211,211,109,211,109,139,187,8,211,139,211,243,12, + 122,243,0,8,139,211,211,211,211,211,211,211,211,139,67,8, + 12,122,243,0,8,139,139,211,211,211,211,211,211,8,139,211, + 8,150,122,243,0,8,211,139,211,211,211,109,8,211,8,139, + 67,243,150,122,243,0,8,139,139,139,211,139,139,211,8,139, + 139,139,8,12,122,243,0,8,211,139,211,139,211,211,109,211, + 211,139,139,243,150,122,243,0,8,139,139,211,211,211,139,211, + 211,211,139,211,8,12,78,243,0,8,139,139,109,139,211,139, + 211,8,211,139,211,8,150,122,8,26,12,8,8,8,8,36, + 36,105,105,105,105,208,105,208,105,208,105,208,105,208,105,208, + 208,105,208,208,105,208,208,208,105,208,208,105,208,105,208,105, + 208,105,208,105,105,208,208,105,208,63,63,208,208,208,208,208, + 208,208,208,208,208,208,208,63,208,208,208,208,208,63,208,208, + 169,169,188,169,169,140,140,140,169,140,140,169,140,74,74,140, + 74,100,74,74,100,140,140,169,74,169,74,169,74,74,100,169, + 140,74,140,169,169,169,100,169,100,169,188,169,188,169,169,169, + 169,100,169,169,100,169,88,169,169,169,169,188,169,169,39,188, + 39,39,39,39,188,169,140,169,140,169,39,169,169,39,169,169, + 39,39,169,39,39,169,39,39,140,169,188,140,100,169,140,169, + 169,74,100,169,74,100,140,169,140,169,100,140,169,100,100,169, + 169,169,169,188,169,169,169,169,169,169,169,169,169,169,88,169, + 169,88,169,169,169,169,88,100,169,169,100,100,169,169,88,169, + 88,169,169,127,169,88,188,88,88,169,169,88,88,88,88,218, + 218,188,188,88,218,207,188,88,218,188,188,188,88,127,218,188, + 218,188,127,127,188,207,127,127,127,218,207,127,218,218,218,111, + 26,187,42,187,17,42,187,0,8,211,109,211,109,109,8,187, + 109,8,243,139,211,17,42,211,0,8,211,109,109,109,211,8, + 8,109,8,8,182,243,17,42,211,0,8,211,109,211,109,109, + 109,211,187,211,243,67,243,187,26,211,0,211,139,139,187,109, + 211,8,187,109,8,243,182,211,17,42,211,0,8,139,211,211, + 109,109,211,8,211,8,8,182,211,187,42,211,0,8,211,109, + 211,187,109,211,109,8,211,8,67,243,132,26,211,0,8,211, + 109,8,109,109,211,109,109,8,243,67,243,132,42,211,0,8, + 139,109,211,211,211,8,211,187,211,8,182,243,132,26,211,0, + 8,211,139,187,211,109,109,211,109,211,8,67,243,132,26,211, + 0,8,139,211,211,109,109,8,109,109,211,8,182,109,187,26, + 211,0,8,211,211,211,109,211,211,211,211,8,243,67,243,132, + 42,211,0,8,139,211,211,211,109,8,8,109,8,243,139,243, + 132,26,211,0,8,139,109,211,109,109,211,187,109,211,211,182, + 243,187,26,211,0,8,139,109,211,109,211,211,187,109,211,243, + 139,211,187,42,211,0,8,211,211,187,109,211,187,211,111,8, + 8,182,243,132,26,211,0,8,139,211,109,109,109,211,211,187, + 211,8,182,243,187,42,211,0,8,211,211,211,109,109,8,109, + 109,211,8,182,243,132,42,211,0,8,211,109,211,109,109,8, + 109,109,8,8,182,211,187,26,8,219,8,8,8,8,8,244, + 36,105,105,105,105,105,105,105,105,105,105,208,105,105,105,105, + 208,105,208,105,208,208,105,208,208,105,208,105,208,105,208,105, + 208,105,208,105,208,105,105,208,208,208,208,208,208,208,208,208, + 208,63,208,208,208,208,208,208,208,208,208,208,208,208,208,208, + 169,169,169,39,169,169,169,140,169,140,140,140,39,39,140,169, + 140,169,140,140,169,74,74,169,74,169,74,169,169,140,169,100, + 169,169,74,100,100,169,100,169,169,169,169,169,169,169,169,100, + 169,169,169,169,169,169,169,88,169,88,169,188,169,169,169,39, + 188,39,169,140,39,169,39,169,140,169,39,39,39,39,39,169, + 39,39,169,188,39,39,39,188,140,140,169,39,140,169,74,74, + 169,140,74,169,140,100,74,100,74,169,100,169,169,169,100,100, + 169,169,74,169,169,169,169,88,100,88,169,169,169,169,100,169, + 88,169,88,169,169,88,39,88,169,169,127,169,169,88,74,127, + 169,88,169,88,169,169,169,188,188,188,188,88,188,188,88,88, + 218,88,218,218,88,218,218,218,88,218,218,207,188,127,218,88, + 218,188,218,218,218,218,218,218,88,127,218,127,218,153,58,111, + 26,166,42,12,187,219,187,0,8,67,139,139,139,139,67,139, + 211,139,139,139,211,150,0,187,0,211,67,139,139,139,139,139, + 139,211,139,139,139,211,150,0,187,122,8,67,139,139,139,139, + 139,139,139,139,211,139,8,187,0,12,0,8,139,67,139,139, + 139,139,139,139,139,139,139,211,150,0,187,0,8,67,139,139, + 139,139,139,139,139,139,139,139,243,187,0,187,0,211,67,139, + 67,139,139,139,211,211,139,139,139,211,150,0,187,0,211,67, + 139,139,139,139,139,139,211,139,139,67,12,150,0,187,0,8, + 67,139,67,139,139,139,139,139,139,139,139,8,132,0,187,122, + 8,139,139,139,139,139,139,211,211,139,139,139,211,187,122,187, + 0,8,67,139,139,139,139,139,139,211,139,139,67,243,187,0, + 187,0,211,139,139,67,139,139,139,211,211,139,139,139,211,150, + 0,187,0,8,67,139,139,139,139,139,139,211,139,139,139,211, + 187,0,187,0,8,139,139,139,139,139,139,139,211,139,139,67, + 211,132,0,187,122,8,139,139,67,139,139,139,139,211,139,139, + 139,243,150,0,187,0,211,67,139,67,139,139,139,139,211,139, + 139,67,8,132,0,187,0,8,67,139,139,139,139,139,139,139, + 139,139,139,8,150,0,187,122,8,139,139,139,139,139,139,139, + 211,211,139,67,8,187,0,187,0,211,67,139,139,139,139,139, + 139,211,139,139,67,243,187,122,8,26,12,8,8,8,12,36, + 105,36,105,105,105,105,105,105,208,105,105,105,208,105,208,105, + 208,105,208,105,208,105,208,105,208,208,105,208,105,208,105,208, + 105,208,208,208,208,208,105,105,105,208,63,63,208,208,63,208, + 208,208,208,208,208,208,208,63,208,208,208,208,208,208,63,208, + 140,169,39,140,39,140,140,169,140,169,140,169,140,140,169,140, + 140,140,140,140,140,39,140,140,140,140,169,74,74,169,74,140, + 169,74,169,140,169,169,169,169,169,169,169,169,169,169,88,169, + 169,88,169,88,169,169,169,169,88,169,169,169,39,39,39,140, + 140,140,39,39,140,39,140,39,39,39,140,169,169,39,169,39, + 169,169,39,39,39,39,140,39,39,169,140,140,140,140,140,140, + 140,169,169,74,100,140,169,169,169,169,140,74,169,140,169,140, + 169,169,169,169,169,169,88,100,169,169,88,169,88,100,127,169, + 169,169,169,169,169,127,169,169,88,127,169,169,169,169,127,100, + 100,169,100,127,88,88,188,88,88,88,88,188,88,218,188,218, + 88,218,218,188,218,88,218,188,218,218,127,218,218,218,218,218, + 218,218,218,127,127,127,127,127,207,218,127,127,236,153,153,132, + 26,219,56,109,42,12,132,162,26,187,187,12,187,91,111,187, + 26,91,187,12,12,187,42,211,0,26,12,187,187,187,111,187, + 187,187,91,12,12,12,187,26,211,0,26,187,187,12,109,187, + 187,12,91,26,91,12,109,150,26,211,162,26,187,91,109,187, + 109,187,12,91,26,12,12,12,12,26,211,0,26,187,187,187, + 187,111,187,187,187,91,26,12,187,150,26,211,0,26,187,187, + 187,187,91,111,12,91,91,26,12,12,187,26,211,0,26,187, + 187,187,111,187,187,187,91,91,26,91,109,187,26,211,0,26, + 187,187,187,187,111,187,187,17,91,12,12,187,12,42,211,162, + 26,187,8,187,91,109,187,12,91,91,26,12,12,150,42,211, + 0,26,187,12,91,111,109,187,187,187,91,12,91,187,150,26, + 8,122,26,187,187,187,91,109,187,12,91,91,26,91,12,187, + 42,211,0,26,187,187,187,187,111,187,187,26,91,187,12,12, + 150,26,211,162,26,187,91,109,187,111,8,187,26,91,26,91, + 12,12,26,211,0,26,187,187,187,91,109,187,12,91,91,187, + 12,187,12,26,211,0,26,187,187,187,187,111,8,187,26,91, + 17,91,187,187,26,211,162,26,187,187,187,111,187,187,187,12, + 91,26,12,109,187,26,211,0,26,187,12,187,111,187,187,12, + 12,91,17,91,187,150,26,211,0,26,187,187,187,187,91,109, + 187,26,91,17,91,187,150,42,8,26,12,8,141,8,141,244, + 105,105,105,105,105,105,105,105,36,208,105,105,105,105,208,105, + 105,208,105,105,208,105,208,105,208,105,208,105,208,105,208,105, + 105,208,105,105,105,208,208,208,208,105,208,208,63,208,208,63, + 208,63,208,63,63,208,208,208,208,208,208,63,208,63,208,208, + 169,140,188,140,169,39,140,140,140,169,140,140,74,140,140,140, + 140,169,140,140,140,140,169,169,140,140,169,140,74,169,169,74, + 169,74,169,140,140,169,169,169,169,169,169,169,169,169,169,169, + 169,169,188,169,169,88,169,169,169,169,169,169,169,169,169,39, + 39,140,140,39,140,169,140,169,140,39,39,39,140,39,140,39, + 39,39,169,39,39,39,39,39,39,169,169,169,140,169,169,74, + 140,140,169,140,169,140,140,140,74,169,140,140,169,169,169,100, + 169,169,169,169,169,169,188,88,169,169,88,169,127,100,169,169, + 169,88,169,169,169,169,169,169,88,88,127,169,169,88,127,169, + 88,127,100,169,88,88,169,88,88,88,88,218,88,218,88,218, + 88,88,218,218,218,188,218,218,127,218,218,218,88,127,188,218, + 127,127,218,218,218,218,218,127,127,218,218,127,207,153,153,132, + 26,17,42,150,183,91,219,0,0,0,0,122,122,122,0,122, + 0,0,0,0,219,150,26,12,0,0,0,0,122,122,0,122, + 0,0,0,0,0,219,132,42,12,0,0,0,0,0,0,0, + 0,0,0,0,0,0,219,132,42,12,0,0,0,0,0,0, + 0,0,0,0,0,0,0,219,132,42,12,0,0,0,122,122, + 122,122,0,0,0,0,0,122,219,150,42,12,122,0,0,122, + 122,122,0,122,0,0,0,0,0,219,132,42,12,0,0,0, + 122,122,122,122,0,0,0,0,0,0,219,132,26,12,0,0, + 0,0,0,0,0,122,0,0,0,0,0,17,150,42,12,0, + 162,162,0,0,0,0,0,0,0,0,0,0,219,17,26,12, + 0,0,0,0,0,0,0,0,0,0,0,0,0,219,132,26, + 12,162,0,0,0,0,0,0,0,0,0,0,0,0,219,150, + 42,12,0,0,0,0,122,122,122,122,0,0,0,0,0,219, + 132,26,12,0,0,0,0,0,0,0,0,0,122,0,0,0, + 219,132,26,12,0,0,0,0,0,0,0,0,0,0,0,0, + 0,17,132,26,12,0,0,0,122,122,122,0,0,162,122,0, + 0,0,219,150,42,12,0,0,0,0,122,122,122,122,0,0, + 0,0,0,219,132,42,12,0,0,0,122,122,122,122,0,0, + 0,0,0,0,219,132,26,12,0,0,0,122,122,0,0,0, + 0,0,0,0,0,219,17,42,243,219,12,8,8,8,8,244, + 105,105,105,105,105,105,105,36,105,105,105,208,105,105,105,208, + 105,105,105,208,105,208,105,208,105,208,105,208,105,208,105,208, + 105,208,208,208,208,105,208,208,208,208,105,208,63,63,208,208, + 208,63,208,208,208,63,208,105,208,105,208,208,208,208,63,208, + 39,169,39,39,39,140,169,169,169,39,140,140,39,74,140,140, + 140,140,74,140,140,169,140,140,169,140,140,100,39,140,140,169, + 74,169,140,169,100,140,169,140,169,140,169,169,169,218,169,169, + 169,169,169,169,188,39,188,169,169,88,169,169,169,39,39,140, + 140,39,39,169,39,39,39,39,39,169,140,39,39,39,39,39, + 39,140,39,39,39,39,39,140,140,140,140,140,140,140,140,39, + 140,140,140,140,140,100,169,100,169,74,169,100,100,140,169,39, + 169,140,169,169,169,169,169,188,169,169,169,169,169,127,88,88, + 88,169,88,88,88,88,88,88,169,188,169,169,169,169,100,127, + 127,88,127,188,188,88,88,169,218,88,88,88,88,88,218,218, + 218,218,218,218,218,218,88,218,218,218,218,127,218,218,218,218, + 218,218,218,218,127,127,218,218,218,143,218,218,218,153,184,111, + 26,219,183,12,42,12,219,42,91,26,26,26,42,42,26,17, + 17,219,219,26,17,219,26,187,26,26,26,26,26,42,42,26, + 17,219,219,219,26,17,17,26,187,42,91,26,26,26,42,42, + 26,17,17,219,219,26,26,219,26,187,26,26,26,26,26,26, + 42,26,17,17,219,17,26,219,219,26,187,42,91,26,26,26, + 42,42,26,17,219,219,17,26,26,219,26,187,42,26,26,26, + 26,42,42,26,17,219,219,17,26,17,17,26,187,42,91,26, + 26,26,42,42,26,17,219,219,219,26,17,219,26,187,42,91, + 26,26,26,26,42,26,17,219,219,219,26,219,219,26,187,26, + 26,26,26,26,26,42,26,17,219,219,17,26,26,132,26,187, + 42,26,26,26,26,26,42,26,17,219,219,219,26,26,219,26, + 187,42,12,26,26,26,42,42,26,17,219,219,219,26,17,219, + 26,187,26,26,26,26,26,42,42,26,17,17,219,17,26,26, + 219,26,187,42,91,26,26,26,26,42,26,17,17,219,219,26, + 17,219,26,187,42,12,26,26,26,42,42,26,17,219,219,219, + 26,219,219,26,187,26,26,26,26,26,42,42,26,17,219,219, + 219,26,17,219,26,187,42,91,26,26,26,42,42,26,219,219, + 219,17,26,17,219,26,187,42,12,26,26,26,42,42,26,12, + 219,219,219,26,26,17,26,187,26,26,26,26,26,42,42,26, + 17,17,219,219,26,26,132,26,187,42,12,8,8,8,12,244, + 36,105,36,105,105,105,105,208,105,105,36,208,105,105,208,105, + 208,105,105,208,105,208,105,208,105,208,208,105,208,208,105,208, + 105,208,105,208,105,208,105,208,105,208,208,208,105,208,208,208, + 105,208,208,105,105,208,105,208,208,208,208,63,208,208,208,208, + 39,140,169,39,169,39,140,140,74,140,169,140,39,140,169,140, + 169,39,74,140,140,140,140,140,169,140,140,74,169,169,140,140, + 74,74,140,169,169,169,169,169,169,169,169,169,169,169,169,169, + 169,169,169,169,169,169,188,188,169,169,169,39,169,140,188,39, + 39,140,39,39,39,140,140,39,39,39,140,169,169,39,39,39, + 39,39,39,39,39,114,39,39,39,140,140,169,140,140,140,169, + 140,140,100,140,39,140,140,140,140,140,39,140,169,169,169,140, + 169,169,140,169,169,169,169,88,169,169,88,88,169,169,188,169, + 88,127,188,169,169,188,169,88,169,88,169,88,169,127,169,169, + 169,88,88,88,188,218,88,88,88,218,88,218,218,88,88,218, + 88,218,218,88,218,143,218,88,218,127,218,218,218,218,218,218, + 127,218,218,218,218,218,127,127,218,207,143,236,143,153,184,111, + 26,219,26,187,42,187,17,219,150,12,12,219,219,17,12,243, + 12,243,150,17,12,17,219,187,17,243,12,12,187,219,17,12, + 243,12,243,150,17,12,17,219,12,219,150,12,12,187,219,12, + 12,150,150,150,150,150,12,17,219,187,17,243,12,17,187,219, + 12,17,243,12,150,150,12,187,17,219,12,219,150,12,17,17, + 219,17,12,243,150,150,150,150,12,17,219,12,17,243,12,12, + 17,219,17,12,243,150,150,150,17,12,17,219,12,219,150,12, + 12,17,219,12,12,243,150,150,150,17,12,219,219,12,219,150, + 12,12,187,219,17,12,243,12,243,150,12,12,17,219,12,219, + 243,187,150,17,219,12,17,243,150,150,150,150,12,219,219,12, + 219,243,12,17,17,219,12,12,243,12,150,150,150,12,17,219, + 12,26,243,12,150,17,219,12,12,150,243,150,150,17,12,17, + 219,187,17,243,12,12,187,219,17,17,243,12,150,150,150,12, + 17,219,12,219,150,12,12,187,219,12,17,243,150,150,150,17, + 12,219,219,187,26,243,12,150,17,219,17,12,243,12,150,150, + 12,12,17,219,187,17,243,12,12,17,219,12,12,243,12,150, + 150,17,12,17,219,12,219,150,12,12,17,219,17,12,243,150, + 150,150,17,12,17,219,187,26,243,187,17,17,219,17,17,243, + 12,243,150,150,12,17,219,12,219,243,12,17,17,219,17,12, + 243,12,150,150,150,12,219,26,12,42,12,8,8,8,12,244, + 105,105,105,208,36,105,105,208,105,208,105,105,208,105,105,208, + 105,208,105,208,105,208,105,208,105,208,105,208,105,105,208,105, + 208,105,208,208,105,208,105,208,63,105,208,208,105,208,105,208, + 208,105,208,208,208,208,208,208,105,208,208,105,208,105,105,208, + 188,39,39,169,39,140,169,39,39,169,140,140,140,169,140,140, + 140,140,169,140,169,140,140,140,140,140,140,39,140,140,140,169, + 140,39,169,39,140,169,140,169,169,169,169,169,169,169,169,169, + 188,188,188,188,188,169,169,169,169,188,169,169,169,188,140,39, + 39,39,39,39,140,39,39,169,140,140,39,39,39,188,169,39, + 39,39,39,39,39,188,39,39,39,39,169,140,140,169,140,140, + 169,140,39,140,140,140,169,74,169,140,140,39,140,169,140,169, + 169,169,169,169,169,169,169,169,169,88,169,169,169,88,169,127, + 188,169,88,127,88,169,188,188,88,169,88,127,127,88,88,88, + 188,88,88,188,88,100,218,218,88,88,218,88,218,218,218,218, + 218,218,218,218,218,218,218,143,218,218,218,218,218,218,143,218, + 218,218,127,218,143,218,143,143,143,207,143,207,207,153,184,111, + 26,42,42,187,183,109,17,26,150,12,132,187,219,12,26,243, + 150,17,12,17,17,219,42,243,26,150,12,132,17,17,12,26, + 243,150,17,12,17,17,219,42,150,26,150,17,132,17,17,17, + 17,243,12,12,12,219,17,219,42,243,26,150,12,150,219,17, + 17,17,243,150,17,12,17,17,17,42,150,26,150,17,150,17, + 219,12,26,243,12,12,12,17,17,17,26,187,26,150,12,132, + 17,219,12,26,243,12,12,12,17,17,219,42,150,26,150,17, + 132,187,219,17,17,243,12,150,12,17,17,17,26,150,26,150, + 17,150,219,17,12,26,243,150,17,12,17,17,219,42,150,26, + 150,12,219,187,17,17,17,243,12,12,12,219,17,17,26,109, + 26,150,12,132,187,17,12,26,243,150,150,12,17,187,219,42, + 109,219,150,12,17,187,17,17,12,150,12,150,12,17,12,219, + 42,243,26,150,12,150,219,17,12,26,243,150,12,12,219,12, + 219,42,150,26,150,17,132,219,17,17,17,243,12,150,12,17, + 17,17,26,243,219,150,12,219,187,17,12,17,243,150,12,12, + 17,17,219,42,109,26,150,12,132,187,17,17,17,243,150,150, + 12,17,17,219,42,150,26,150,17,132,187,17,12,26,243,12, + 17,12,17,17,17,42,243,219,150,12,132,187,17,12,26,243, + 150,150,12,219,17,219,42,109,26,150,12,150,187,17,12,26, + 243,150,150,12,17,17,17,26,12,219,12,12,8,8,243,244, + 105,105,36,105,208,105,105,105,105,105,208,105,105,105,208,105, + 105,105,208,105,208,208,105,208,105,208,105,208,208,208,208,105, + 105,208,105,208,208,105,208,105,208,208,105,208,208,63,208,208, + 208,208,208,208,208,105,105,208,208,105,208,208,208,208,208,208, + 169,39,39,39,39,39,169,140,39,140,169,74,140,140,169,140, + 140,140,140,140,140,169,140,140,169,140,140,140,169,169,140,169, + 140,140,140,169,140,169,169,140,169,140,169,169,169,188,188,169, + 169,188,169,169,39,39,188,39,169,188,169,39,169,188,169,140, + 39,39,39,39,169,169,39,39,39,39,140,39,39,39,188,39, + 39,39,39,39,39,188,39,169,169,140,140,140,140,140,140,140, + 140,140,140,140,140,140,39,140,169,169,140,169,140,169,169,169, + 169,169,169,39,169,169,39,169,39,188,169,88,169,169,88,169, + 88,169,88,188,88,88,88,188,127,188,88,88,188,188,188,88, + 188,188,88,88,218,169,88,218,218,88,218,218,88,218,218,88, + 218,218,218,218,127,143,218,218,143,218,236,143,218,218,218,143, + 143,218,143,218,143,218,207,207,143,207,143,218,207,153,184,132, + 26,183,42,12,122,150,132,26,150,17,17,17,150,150,26,150, + 150,150,12,17,187,17,26,109,26,150,17,219,17,150,150,26, + 150,150,150,12,17,12,17,26,109,26,150,17,17,17,150,17, + 26,150,150,150,17,12,12,17,26,109,26,150,219,12,17,132, + 12,26,150,150,150,12,17,17,17,26,211,26,150,17,17,17, + 150,150,26,150,150,150,17,12,17,17,17,109,26,150,17,17, + 17,150,150,26,150,150,132,12,17,187,17,26,211,26,150,17, + 219,17,150,12,26,150,17,150,12,17,17,219,26,109,26,150, + 17,17,17,132,150,26,150,150,150,17,17,12,17,26,211,26, + 150,17,17,17,132,12,26,150,150,132,12,17,17,219,26,109, + 26,150,17,17,219,150,150,26,150,17,150,12,17,12,219,26, + 243,26,150,17,219,17,132,12,26,150,12,150,12,219,12,17, + 26,109,26,150,219,12,17,132,150,26,150,150,150,12,219,12, + 17,26,211,26,150,17,12,17,132,12,26,150,12,150,12,132, + 17,219,26,109,26,150,17,17,17,132,12,26,150,150,132,12, + 17,187,17,26,243,26,150,219,17,219,150,17,26,150,17,150, + 12,17,12,17,26,109,26,150,17,17,219,150,150,26,150,150, + 150,12,17,17,17,26,109,26,150,17,17,17,150,150,26,150, + 17,150,12,17,12,17,26,109,26,150,219,17,219,150,150,26, + 150,17,150,17,17,17,17,17,109,219,12,8,8,8,150,244, + 105,105,105,105,105,105,105,105,105,105,105,105,208,105,105,208, + 105,208,105,105,208,105,208,105,208,208,105,208,105,105,208,105, + 208,105,208,105,208,208,208,208,105,208,208,105,208,105,208,105, + 208,105,208,105,208,208,208,105,208,208,105,105,208,105,208,105, + 39,39,39,39,140,140,140,39,140,39,140,39,140,140,140,140, + 140,140,169,140,169,140,169,169,140,39,140,140,140,140,140,140, + 140,169,140,140,169,169,169,169,169,188,140,169,169,169,169,169, + 188,169,39,39,188,39,169,39,39,39,39,188,39,169,39,188, + 39,39,39,39,39,39,39,140,39,39,39,39,39,188,39,188, + 39,39,39,207,39,188,188,39,39,39,169,140,169,140,169,140, + 169,169,140,169,140,169,140,169,140,140,169,140,169,169,169,140, + 169,39,169,169,169,169,169,188,188,169,188,188,188,88,188,188, + 188,88,169,88,188,188,188,88,88,88,188,188,88,88,88,188, + 88,88,169,218,169,88,218,88,88,218,88,218,218,88,218,218, + 218,218,218,218,218,218,218,218,218,218,143,218,218,218,218,218, + 218,143,218,218,218,207,143,143,207,207,143,236,218,236,184,111, + 26,183,219,187,26,187,17,219,150,17,150,219,17,17,219,12, + 17,17,17,132,12,187,219,243,219,12,17,132,17,17,17,219, + 12,17,17,17,132,17,187,219,243,219,12,17,132,17,17,12, + 219,150,17,17,17,132,17,187,219,243,219,17,17,132,17,17, + 17,219,12,219,17,12,132,12,187,219,243,219,17,17,132,17, + 17,12,219,150,17,17,17,132,17,187,26,243,219,17,17,132, + 219,17,12,219,150,17,17,17,132,12,187,219,243,219,12,17, + 132,17,17,17,219,150,132,17,12,132,12,187,219,243,219,12, + 17,132,17,17,17,219,12,17,17,12,132,17,187,219,243,219, + 17,150,132,17,17,12,219,150,17,17,12,17,187,187,219,243, + 219,150,17,132,17,17,17,219,12,132,17,12,132,12,187,219, + 109,219,17,150,132,17,17,12,219,150,132,17,12,132,17,187, + 219,243,219,150,17,132,17,17,12,219,12,219,17,12,132,12, + 187,219,243,219,17,17,132,17,17,12,219,150,132,17,17,17, + 12,187,219,243,219,17,150,132,17,17,17,219,12,17,17,17, + 132,12,187,219,109,219,17,17,132,17,17,12,219,12,150,17, + 17,132,17,187,219,243,219,17,17,150,219,17,12,219,150,17, + 17,12,132,12,187,219,243,219,17,17,132,219,17,17,219,12, + 132,17,12,132,17,187,219,243,219,17,17,132,17,17,12,219, + 12,150,17,12,17,187,166,26,243,26,8,150,8,8,12,244, + 36,105,105,105,105,105,105,105,105,105,105,105,208,105,208,105, + 105,208,105,105,208,105,208,105,208,105,208,208,208,208,105,208, + 105,208,105,208,105,105,105,208,208,105,105,208,208,208,105,208, + 63,208,208,208,208,105,208,208,105,208,208,208,105,208,208,208, + 39,39,39,39,39,169,169,169,140,169,140,169,169,140,169,140, + 169,140,140,140,140,140,140,140,140,169,169,140,169,169,140,169, + 140,169,169,140,140,140,140,140,169,39,169,188,169,169,188,169, + 39,188,169,39,188,39,169,169,169,188,39,188,188,188,39,39, + 39,39,39,207,39,39,39,140,140,39,39,39,39,188,39,39, + 39,39,39,207,39,207,207,39,39,39,169,140,140,140,169,140, + 140,169,140,169,140,140,140,140,140,140,169,39,140,39,39,39, + 140,39,140,169,169,169,169,169,39,169,169,169,188,169,88,169, + 188,188,188,188,188,188,188,188,188,188,88,188,188,188,88,188, + 188,188,88,218,218,169,218,218,88,218,88,218,218,218,88,218, + 188,218,218,218,207,218,218,218,218,218,218,236,207,143,236,236, + 236,218,143,218,143,207,143,143,143,143,207,143,218,236,184,111, + 26,42,26,12,42,109,187,42,150,219,150,17,150,17,219,150, + 150,150,17,132,132,187,219,211,219,150,17,132,17,150,17,219, + 150,150,150,17,132,132,187,219,211,219,150,17,132,17,150,17, + 26,150,150,150,17,132,132,187,219,211,219,150,17,132,17,150, + 17,219,150,150,150,219,132,132,187,219,211,219,150,17,132,17, + 150,17,26,150,150,150,17,132,132,150,219,211,219,150,17,132, + 17,132,17,26,150,150,150,17,132,132,187,219,211,219,150,17, + 132,17,150,17,26,12,150,150,219,132,132,12,219,211,219,150, + 17,132,17,150,17,219,150,150,132,17,132,132,187,219,211,219, + 12,219,132,17,150,17,26,150,150,150,132,132,132,12,219,211, + 42,150,17,132,17,150,17,219,12,150,150,219,132,132,187,26, + 211,219,12,219,132,17,150,17,26,12,150,150,219,150,166,12, + 219,109,42,150,219,132,17,150,17,219,150,150,150,17,132,132, + 187,219,211,219,150,17,132,17,150,17,26,12,150,150,17,132, + 132,187,26,211,219,12,219,132,17,150,17,219,150,150,150,12, + 132,132,187,219,211,219,150,17,132,17,150,17,219,12,132,150, + 17,132,132,187,219,211,219,150,17,132,17,150,17,26,150,132, + 150,219,132,132,187,26,211,219,150,17,150,17,150,17,219,12, + 150,150,219,150,132,187,219,211,219,150,17,132,17,150,17,219, + 12,132,150,132,132,17,150,26,109,219,8,150,8,12,8,36, + 105,105,36,105,105,105,105,105,105,105,208,105,105,105,105,208, + 105,105,208,105,208,105,208,208,105,208,208,105,105,208,105,208, + 208,208,105,208,208,208,208,208,208,208,208,105,208,208,208,105, + 105,208,105,208,208,208,105,208,105,208,105,208,105,105,105,208, + 169,39,39,169,169,39,140,140,140,39,169,140,140,140,140,140, + 39,140,140,169,140,140,140,140,169,140,140,140,140,140,169,140, + 140,140,140,169,169,169,169,39,39,169,39,169,169,188,169,188, + 88,169,188,169,169,88,39,188,188,39,169,188,39,39,39,169, + 169,188,39,39,39,39,39,39,39,39,39,39,207,39,39,207, + 207,39,39,39,207,39,39,188,169,140,140,140,169,140,140,140, + 140,140,140,140,140,169,169,140,169,140,140,140,140,140,140,140, + 188,140,169,169,39,188,169,188,169,39,188,188,188,188,39,188, + 169,188,188,188,188,188,188,88,188,188,188,88,218,218,188,188, + 188,218,218,169,218,218,218,169,218,88,218,218,88,218,218,218, + 188,127,207,207,127,207,207,218,236,207,218,143,236,236,218,143, + 143,236,236,236,218,143,207,207,143,207,143,207,218,184,153,166, + 26,183,26,12,78,8,132,26,12,132,219,150,132,150,219,12, + 219,150,17,219,26,150,26,187,42,12,132,219,150,132,150,219, + 12,219,132,17,17,26,150,26,12,42,12,132,219,150,132,150, + 219,12,219,132,12,219,26,150,26,12,42,12,132,219,150,132, + 150,219,12,219,150,12,219,26,150,26,12,42,12,132,219,150, + 132,132,219,12,17,132,17,219,26,187,26,187,42,12,132,17, + 150,132,150,219,12,219,132,12,219,26,150,26,12,42,12,132, + 17,150,132,150,219,150,17,150,17,17,26,150,26,12,42,12, + 132,17,150,132,150,219,12,219,150,12,219,26,150,26,12,42, + 150,132,17,150,132,132,219,12,219,150,17,219,26,150,26,187, + 26,12,132,17,150,132,150,219,150,219,150,17,219,26,150,26, + 12,42,150,132,17,150,132,132,219,150,219,150,17,17,26,150, + 26,187,26,12,132,17,150,132,150,219,12,17,132,17,219,26, + 150,26,243,42,12,132,17,150,132,17,219,150,219,132,132,17, + 26,150,26,187,42,150,132,17,132,132,150,219,12,219,132,17, + 219,26,150,26,12,42,12,132,17,150,132,17,219,150,17,132, + 17,17,26,150,26,12,42,12,132,17,150,132,150,219,12,17, + 150,12,219,26,150,26,187,42,12,132,17,132,132,150,219,150, + 219,132,12,219,26,150,26,12,26,17,150,219,150,132,132,219, + 150,17,132,17,219,17,187,26,8,26,8,8,141,8,243,244, + 36,208,36,105,105,105,105,105,105,105,105,36,208,105,208,105, + 105,208,105,208,105,208,105,208,208,105,208,105,208,208,105,208, + 105,208,208,105,208,105,105,105,208,105,208,208,105,208,208,208, + 208,208,208,105,208,105,208,208,105,208,208,105,208,208,208,105, + 39,169,39,39,169,169,169,169,140,140,140,39,169,140,169,140, + 140,169,140,169,169,140,169,140,140,140,169,140,140,39,140,39, + 140,39,39,114,169,39,140,140,39,169,140,39,169,188,169,188, + 188,188,188,188,188,188,39,169,169,39,39,188,188,169,188,39, + 39,188,188,207,39,188,39,207,114,39,39,39,39,39,39,39, + 39,39,39,207,207,39,39,39,169,39,169,140,169,140,169,140, + 140,169,140,140,140,140,169,140,169,39,169,39,169,169,169,140, + 188,39,39,169,169,39,169,188,169,169,169,39,188,188,169,188, + 188,188,188,88,188,188,188,88,188,218,188,169,169,218,218,88, + 169,188,218,188,188,188,188,188,218,188,218,218,218,218,188,207, + 188,188,207,207,207,127,207,127,218,236,207,218,207,143,207,218, + 218,143,143,236,143,236,143,207,236,236,236,236,143,184,153,166, + 26,219,187,187,42,211,132,219,17,17,17,17,17,17,219,150, + 219,150,17,132,26,187,17,211,219,17,17,17,17,17,17,219, + 150,17,150,17,132,26,187,12,211,219,12,219,17,17,17,132, + 219,150,17,150,17,132,26,187,17,211,219,17,17,17,17,17, + 17,219,150,219,150,17,132,26,187,12,211,219,17,17,17,17, + 17,132,219,150,219,150,17,132,17,187,17,211,219,17,17,17, + 17,17,132,219,150,17,150,17,132,26,187,12,211,219,17,17, + 17,17,17,132,42,150,219,150,17,132,26,187,17,211,219,17, + 219,17,17,17,17,219,150,219,150,17,132,26,187,17,211,42, + 17,17,17,17,17,132,219,150,219,12,17,132,26,12,17,211, + 219,17,17,17,17,17,17,26,150,219,150,17,132,26,150,17, + 211,42,17,17,17,17,17,132,26,150,219,150,17,132,26,187, + 12,211,219,17,17,17,17,17,17,219,150,219,150,17,132,26, + 187,26,211,219,17,219,17,17,150,132,26,150,17,12,17,132, + 26,150,17,211,26,17,17,17,17,17,17,219,150,17,150,17, + 132,26,187,17,211,219,17,17,17,17,150,17,42,150,17,150, + 17,132,26,12,17,211,219,17,17,17,17,17,132,219,150,219, + 150,17,132,26,150,12,211,219,17,17,17,17,17,17,26,150, + 17,150,17,132,26,187,12,211,219,17,17,17,17,17,17,26, + 150,17,17,12,219,17,132,17,211,26,12,8,141,8,8,244, + 105,105,36,105,105,105,105,105,105,105,105,208,105,105,208,208, + 105,105,208,105,208,105,208,105,208,105,208,208,105,208,105,208, + 105,208,105,208,105,208,208,208,208,208,105,208,208,105,208,105, + 208,105,208,208,208,208,105,208,208,105,208,208,105,208,208,63, + 188,39,39,169,39,169,169,39,169,39,39,140,140,140,140,140, + 169,140,140,140,140,169,140,140,140,169,140,140,140,140,169,140, + 169,140,140,169,140,140,39,39,140,39,188,39,188,169,188,39, + 169,169,188,188,39,169,169,39,188,188,39,39,169,39,39,39, + 169,169,39,39,188,39,39,188,39,39,39,39,39,39,39,39, + 39,89,39,207,39,39,39,39,39,140,140,140,140,140,140,140, + 169,140,140,169,140,140,140,140,140,140,140,140,140,39,39,188, + 140,140,39,39,39,188,39,169,188,39,39,169,39,188,188,39, + 169,169,169,188,169,188,39,188,188,169,169,188,188,169,188,188, + 188,188,188,188,188,188,188,169,188,188,188,188,188,188,188,127, + 207,207,188,127,207,207,207,207,207,207,207,207,218,236,143,236, + 236,207,207,153,207,143,207,143,143,143,143,143,236,153,184,126, + 26,183,26,187,42,187,132,42,12,219,12,17,150,132,219,150, + 150,17,17,219,17,150,26,12,26,17,17,12,17,150,132,219, + 150,132,17,17,219,17,132,26,187,42,12,17,17,150,150,219, + 219,17,132,17,17,219,17,150,26,187,26,17,17,17,150,150, + 132,219,150,132,17,17,219,17,132,42,187,26,17,17,17,12, + 150,219,219,17,132,12,17,219,219,150,26,12,26,17,17,17, + 12,150,219,219,17,132,17,17,219,17,132,42,187,42,12,219, + 17,150,150,219,219,17,132,17,17,219,17,150,26,187,26,12, + 219,12,17,150,132,219,150,150,17,17,219,17,150,26,12,26, + 17,17,17,150,150,219,219,17,132,150,17,219,187,132,26,187, + 42,12,219,12,17,150,132,219,17,132,12,17,219,17,187,26, + 12,26,17,17,17,150,150,219,219,17,150,17,17,219,17,150, + 42,12,42,12,219,12,17,150,132,219,17,150,17,17,219,17, + 150,219,187,42,12,17,17,150,150,219,219,17,132,17,17,219, + 17,187,26,12,42,12,17,17,150,150,132,219,150,132,17,17, + 219,219,150,26,187,26,17,17,17,150,150,132,219,17,132,17, + 17,219,17,132,26,12,42,12,219,12,17,150,219,219,17,132, + 17,17,219,17,187,42,12,26,17,17,17,12,150,132,219,17, + 132,17,17,219,17,150,42,187,26,17,17,17,12,150,132,219, + 150,132,150,17,219,17,187,42,12,17,8,8,8,8,12,244, + 36,105,105,105,105,105,105,105,105,105,105,105,105,36,208,105, + 208,105,105,105,105,208,208,105,208,208,105,208,105,208,105,208, + 105,208,208,105,208,208,105,208,105,208,208,208,208,208,208,208, + 208,208,105,208,105,208,208,105,208,208,105,105,208,105,105,105, + 169,169,188,169,169,140,169,169,169,140,169,140,169,140,100,74, + 140,169,140,140,140,169,169,169,140,169,169,169,140,140,140,140, + 140,169,140,39,169,169,169,39,140,39,169,39,188,169,169,39, + 39,39,169,39,39,188,39,39,39,169,169,39,39,169,169,39, + 39,140,169,39,207,207,39,39,39,39,114,39,39,39,39,89, + 39,39,89,39,207,39,39,140,140,169,169,169,169,169,169,140, + 169,169,140,169,169,140,169,140,169,39,169,39,140,140,140,188, + 39,140,169,140,169,39,39,140,169,39,188,39,169,39,188,188, + 39,39,39,188,39,188,39,188,188,127,188,188,188,169,188,188, + 169,39,188,169,188,188,188,188,188,188,188,188,188,207,207,39, + 39,207,39,39,39,39,207,207,207,207,143,89,207,207,207,143, + 236,236,143,236,218,236,143,207,143,207,143,218,218,153,184,95, + 26,187,26,187,42,187,12,219,26,219,17,17,26,17,26,219, + 17,17,17,219,26,150,26,150,219,26,219,17,219,26,12,26, + 219,12,17,219,219,26,150,26,150,219,26,219,26,17,12,17, + 219,17,17,17,219,219,26,150,26,150,219,26,219,26,17,26, + 17,26,17,17,17,219,17,26,150,26,150,219,26,219,17,17, + 17,17,219,17,17,17,219,219,26,150,26,150,219,26,219,17, + 17,17,17,219,17,17,17,219,17,26,150,26,150,219,26,219, + 26,17,17,17,219,17,17,17,219,219,26,150,26,150,219,26, + 219,17,219,26,12,26,219,17,17,219,219,26,150,26,150,219, + 26,219,26,17,12,17,219,17,17,17,219,219,26,150,219,150, + 219,26,219,17,17,26,17,219,17,17,17,17,219,12,132,26, + 150,219,26,219,26,17,12,17,219,17,17,17,219,219,26,150, + 219,150,219,26,219,17,219,26,17,219,219,17,17,17,219,26, + 187,26,150,219,26,219,26,17,17,17,219,17,17,17,219,219, + 12,132,26,150,219,26,219,26,17,26,17,26,17,17,17,17, + 219,26,150,26,150,219,26,219,26,17,26,17,219,17,17,17, + 219,219,26,150,26,150,219,26,219,17,219,12,17,219,17,17, + 17,219,219,17,150,26,150,219,26,219,17,219,26,17,219,17, + 17,17,17,219,26,150,26,150,219,26,219,17,219,26,17,26, + 219,17,17,219,219,12,17,26,243,219,12,8,8,8,8,244, + 105,105,105,105,105,105,105,105,105,105,105,105,208,105,105,208, + 105,105,208,105,208,105,208,105,208,105,208,105,208,105,208,105, + 208,208,105,208,105,208,105,208,208,105,208,105,105,208,105,208, + 105,208,105,208,208,208,208,105,208,208,208,105,208,208,208,208, + 188,169,169,188,169,169,169,39,169,169,140,169,140,169,39,140, + 169,140,169,169,169,140,140,169,39,169,169,140,169,169,169,39, + 169,140,169,140,39,39,39,169,39,140,39,169,140,169,39,169, + 169,169,39,169,169,140,39,39,140,39,39,140,140,39,39,140, + 140,39,39,114,39,39,39,39,39,39,39,39,39,39,114,39, + 39,207,39,114,207,39,140,169,169,140,74,140,140,140,140,169, + 140,140,169,140,140,140,39,39,140,140,140,140,169,39,39,140, + 169,39,39,39,39,169,39,39,39,169,39,188,39,39,188,39, + 188,39,39,39,127,39,169,127,39,188,39,127,188,188,39,188, + 188,39,39,39,39,39,207,39,188,207,207,207,207,127,39,207, + 39,39,39,207,39,207,39,207,127,207,207,207,143,207,207,207, + 143,207,236,143,236,143,207,143,207,143,207,236,218,184,153,126, + 42,219,17,187,78,187,187,0,42,122,122,122,122,42,122,122, + 122,122,122,162,42,78,183,187,0,42,122,122,122,0,42,122, + 122,122,122,122,78,219,78,219,187,122,42,122,122,0,122,42, + 122,122,42,122,122,162,183,42,183,187,122,42,122,122,122,122, + 42,122,122,42,122,122,0,219,42,183,187,0,42,122,122,0, + 122,42,122,122,42,122,122,122,183,42,183,187,0,42,122,122, + 0,122,42,122,122,42,122,122,0,219,42,183,187,0,42,122, + 122,122,122,42,122,122,42,122,122,162,183,42,183,187,122,42, + 122,122,122,0,42,0,122,42,122,122,78,42,78,183,187,122, + 42,122,122,0,0,42,122,122,42,122,122,122,183,42,42,187, + 0,42,122,122,122,122,42,122,122,122,122,0,162,42,42,183, + 187,0,42,122,122,0,0,42,122,122,42,122,122,162,183,42, + 42,187,0,42,122,122,122,122,42,122,42,122,122,122,122,183, + 42,219,187,0,42,122,122,0,122,42,122,122,42,122,122,162, + 42,42,183,187,0,42,122,122,122,122,42,122,122,122,122,122, + 122,183,42,183,187,122,42,122,122,0,122,42,122,122,42,122, + 122,78,183,42,183,187,0,42,122,122,0,122,42,122,122,42, + 122,122,162,42,122,183,187,122,42,122,122,122,122,42,122,122, + 122,122,122,162,219,78,219,187,0,42,122,122,122,122,42,122, + 122,42,122,122,122,42,42,183,187,26,12,12,243,12,150,244, + 36,105,105,105,105,36,105,105,105,105,105,105,105,208,36,208, + 105,208,105,105,105,208,105,208,105,208,208,105,208,105,208,208, + 105,208,208,105,208,105,208,105,208,208,105,208,208,105,208,208, + 208,208,208,105,208,105,208,208,105,105,208,208,208,208,208,105, + 188,169,169,188,188,169,169,169,169,169,169,169,169,140,169,169, + 169,169,169,169,169,169,169,169,169,169,188,169,169,140,169,39, + 39,39,169,140,140,140,39,169,39,39,39,39,39,140,169,140, + 169,140,140,169,169,140,140,169,140,140,39,39,140,140,39,188, + 169,39,169,140,39,114,39,39,39,39,39,39,39,207,39,114, + 207,39,207,39,39,39,39,140,169,39,169,169,169,169,169,169, + 169,39,169,169,169,169,169,39,169,39,169,39,169,169,39,39, + 169,39,140,39,39,39,39,140,39,169,169,39,169,169,188,39, + 188,39,39,39,39,188,39,188,39,127,169,39,39,127,39,39, + 188,207,207,39,39,39,207,39,39,39,39,39,39,207,39,207, + 39,127,39,207,39,39,127,207,39,207,207,207,89,143,89,207, + 207,207,236,143,207,236,143,143,236,143,143,143,218,184,184,111, + 0,122,42,42,0,122,122,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,42,42,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,42,122,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,42,122,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,42,42,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,42,42,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,42,42,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,42,122,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,42,122,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,42,42, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,42, + 42,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 42,42,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,42,42,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,42,42,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,42,122,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,42,42,0,0,0,0,0,0,0,0,0,0, + 0,0,0,122,0,42,122,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,42,122,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,26,42,122,0,122,0,0,219,244, + 105,105,36,105,105,105,105,105,105,105,105,208,105,105,105,105, + 208,105,208,105,208,105,208,105,208,105,208,208,105,208,208,105, + 208,105,208,208,208,105,208,105,105,208,105,105,208,105,105,105, + 208,208,208,105,208,208,208,208,208,208,105,105,105,105,208,208, + 188,188,188,188,169,169,169,169,39,39,169,39,169,169,169,169, + 140,169,140,169,169,169,39,169,39,39,169,140,169,169,140,169, + 140,169,39,169,169,169,169,169,169,169,140,169,140,39,39,169, + 140,169,140,39,39,169,169,39,39,39,140,140,39,39,39,39, + 39,140,39,39,39,39,39,39,39,39,39,114,39,39,39,39, + 39,39,39,39,207,169,140,169,169,169,169,169,169,169,140,169, + 169,169,39,188,169,140,169,169,169,169,39,169,39,169,169,169, + 140,169,39,169,140,140,169,188,169,39,39,169,39,39,39,169, + 169,169,39,39,39,39,39,39,39,39,39,39,39,39,39,39, + 39,39,39,39,39,39,39,207,39,39,207,207,207,39,39,39, + 39,39,39,127,39,39,39,39,89,127,39,207,207,89,143,207, + 143,207,143,236,236,143,207,207,143,218,143,207,236,184,184,111, + 26,183,187,243,122,219,42,0,42,42,122,122,122,42,122,42, + 122,42,122,78,8,26,26,17,0,26,122,42,122,122,122,42, + 122,42,122,122,42,12,26,26,17,0,26,122,42,122,122,42, + 122,122,122,42,122,42,12,26,26,17,0,42,42,122,122,42, + 122,122,42,122,122,122,42,12,26,26,17,0,42,42,122,122, + 42,122,122,42,122,122,122,42,12,26,26,17,0,42,122,42, + 122,122,42,122,42,122,122,122,42,12,26,26,17,0,42,42, + 122,122,122,42,122,42,122,122,122,42,12,26,26,17,0,42, + 42,42,122,122,42,122,42,122,122,122,78,8,26,26,17,0, + 26,122,42,122,122,42,122,42,122,122,122,42,12,26,26,17, + 0,42,42,122,122,122,42,42,122,42,122,122,42,12,26,219, + 17,0,26,122,42,122,122,42,122,122,42,122,122,42,12,26, + 26,17,0,42,42,122,122,122,42,122,122,42,122,122,78,243, + 26,26,17,0,26,122,42,122,122,42,122,42,122,122,122,42, + 12,26,219,17,0,26,122,42,122,122,122,42,122,42,122,122, + 42,12,26,26,17,0,42,42,42,122,122,42,122,42,122,122, + 122,42,12,26,26,17,0,42,122,42,122,122,42,122,42,122, + 122,122,42,12,26,26,17,0,42,42,122,122,122,42,42,122, + 42,122,122,42,12,26,26,17,0,42,42,122,122,42,122,122, + 42,122,122,122,78,243,26,26,17,122,26,12,12,219,150,244, + 36,105,36,105,36,105,105,105,105,105,105,105,105,208,105,105, + 105,105,105,105,105,105,105,208,105,208,105,208,105,105,208,105, + 208,208,105,208,105,208,105,208,208,208,208,208,208,208,208,208, + 105,105,208,208,105,208,105,208,105,208,208,208,208,208,208,63, + 188,169,188,188,169,169,169,169,169,39,169,169,140,169,169,169, + 169,169,169,169,169,169,39,169,188,39,188,39,188,169,169,169, + 169,169,169,169,169,169,39,169,169,188,39,188,169,169,39,39, + 169,39,140,140,39,114,140,169,39,39,39,39,39,140,140,39, + 39,39,39,39,39,39,39,39,39,39,207,39,39,114,39,39, + 39,39,39,39,39,39,39,39,169,169,169,169,169,169,169,169, + 169,169,169,39,169,169,169,39,169,169,169,169,169,169,169,188, + 169,169,39,188,188,39,39,39,169,169,39,169,127,39,39,39, + 39,39,169,39,39,169,39,39,39,39,39,39,39,39,39,39, + 39,39,39,39,39,39,39,114,207,39,39,39,207,39,39,39, + 39,39,39,39,39,39,39,39,39,39,127,89,127,207,207,207, + 89,207,89,236,89,236,143,207,236,207,236,143,143,236,184,224, + 139,12,111,49,219,187,12,42,101,139,139,139,8,8,211,8, + 8,8,139,139,67,17,26,12,42,101,139,139,139,8,8,8, + 211,8,8,139,139,49,17,26,8,42,101,139,139,8,8,8, + 8,139,8,8,139,139,49,17,26,8,42,101,139,139,139,8, + 8,211,211,8,8,139,139,67,17,26,12,26,101,139,139,8, + 8,8,211,139,8,8,139,139,49,219,26,8,42,101,139,139, + 8,8,8,211,211,8,8,139,139,49,219,26,8,42,101,139, + 139,8,139,8,8,211,8,8,139,139,49,17,26,8,42,101, + 139,139,139,8,8,211,211,8,8,139,139,67,17,26,8,42, + 101,139,139,8,8,8,211,211,8,8,139,139,49,219,26,8, + 42,101,139,139,139,8,8,211,211,8,8,139,139,67,17,26, + 12,26,101,139,139,139,8,8,8,211,8,8,139,139,49,17, + 26,12,26,101,139,139,8,8,8,139,8,8,8,139,139,67, + 17,26,12,42,101,139,139,8,139,8,8,211,8,8,139,139, + 49,219,26,8,42,101,139,139,139,8,8,8,211,8,8,139, + 139,49,219,26,8,42,101,139,139,139,8,8,211,211,8,8, + 139,139,49,17,26,12,26,101,139,139,8,8,8,211,211,8, + 8,139,139,49,219,26,8,42,101,139,139,139,8,8,211,211, + 8,8,139,139,49,17,26,8,42,101,139,139,139,8,8,211, + 211,8,8,139,139,67,17,17,243,42,12,67,67,141,243,244, + 36,105,105,105,105,105,105,105,105,105,105,105,105,105,105,208, + 105,105,208,105,105,208,105,105,105,105,208,105,208,208,105,208, + 105,208,105,208,105,208,208,105,105,105,208,105,208,105,105,208, + 208,208,208,208,208,208,208,208,208,208,208,208,63,105,105,208, + 169,188,188,169,188,169,169,169,169,169,169,169,169,169,169,169, + 169,169,169,169,169,100,169,188,169,169,169,169,169,169,169,140, + 140,169,169,169,39,169,169,39,39,169,39,39,39,39,169,140, + 39,169,39,169,169,169,39,39,140,39,39,140,39,39,39,140, + 39,140,114,39,140,39,39,207,207,114,39,39,39,207,39,39, + 39,39,207,39,207,169,169,169,169,169,169,169,169,100,169,169, + 169,169,169,169,169,169,169,169,169,169,169,169,39,169,39,169, + 39,39,188,39,39,39,169,169,39,39,169,39,169,169,169,169, + 169,169,39,39,39,39,39,39,169,39,169,39,39,127,140,39, + 39,39,39,114,39,39,39,39,39,39,39,39,39,39,39,39, + 39,39,39,39,39,39,39,39,89,39,207,127,89,207,127,89, + 207,207,143,207,143,207,207,127,207,89,143,207,207,153,236,109, + 8,187,219,67,187,8,187,26,101,8,8,8,211,211,8,211, + 211,8,139,8,101,150,17,211,42,49,8,8,8,211,211,211, + 8,211,8,211,211,101,150,17,243,42,49,8,8,211,211,211, + 8,8,211,211,8,139,101,150,17,243,26,101,8,8,8,211, + 211,8,8,211,211,8,139,67,150,17,211,26,101,8,8,139, + 211,211,8,8,8,211,8,139,101,150,17,243,42,49,8,8, + 211,211,211,8,8,211,8,211,139,101,150,17,243,26,101,8, + 8,8,8,211,211,8,211,8,211,139,101,150,17,243,42,49, + 8,8,8,211,211,8,8,211,211,8,139,101,150,17,243,42, + 49,8,8,211,211,211,8,8,211,8,211,139,101,150,17,243, + 26,101,8,8,8,8,211,8,8,211,211,8,139,67,12,17, + 211,42,49,8,8,8,211,211,211,8,211,8,211,139,101,150, + 17,211,26,101,8,8,211,211,211,8,211,211,211,8,8,101, + 150,17,211,42,49,8,8,8,8,211,211,8,211,8,211,139, + 101,12,17,243,42,49,8,8,8,211,211,211,8,211,8,211, + 139,101,150,17,243,42,49,8,8,8,211,211,8,8,211,8, + 211,211,101,150,17,211,42,49,8,8,211,211,211,8,8,211, + 8,211,139,101,150,17,243,26,101,8,8,8,8,211,8,8, + 211,8,211,139,101,150,17,243,42,49,8,8,8,211,211,8, + 8,211,8,139,8,139,150,17,243,219,12,243,7,8,12,244, + 36,36,105,36,105,36,105,36,105,105,208,105,208,105,105,208, + 105,105,105,208,105,208,105,208,208,105,208,105,105,208,105,208, + 208,105,208,105,208,208,105,208,208,208,105,208,105,208,208,105, + 208,105,208,105,105,105,105,208,105,105,105,105,208,208,208,208, + 188,169,188,188,188,39,169,169,169,169,140,169,169,39,169,169, + 188,39,169,169,39,169,39,188,188,39,39,140,39,39,169,169, + 140,39,39,169,39,39,169,169,39,169,39,39,39,39,188,169, + 140,169,39,39,140,169,140,39,39,140,39,39,140,169,39,39, + 39,169,140,39,39,39,39,39,207,39,39,39,39,39,39,207, + 39,207,39,39,39,39,169,169,39,39,169,169,188,169,169,169, + 169,169,169,169,169,169,169,39,188,169,169,169,39,169,39,169, + 169,169,188,188,188,39,39,127,169,39,169,39,39,39,39,39, + 39,39,169,39,127,39,127,39,169,39,39,169,39,127,39,39, + 39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39, + 39,39,39,39,39,39,39,39,39,39,89,127,207,89,143,207, + 89,127,207,207,207,127,127,127,143,207,89,236,207,153,184,224, + 243,187,26,67,126,12,132,122,101,139,8,211,8,211,8,211, + 8,187,211,8,101,150,132,243,122,101,211,8,211,8,211,8, + 211,211,8,8,8,139,150,17,243,122,101,211,211,8,211,8, + 211,211,8,211,12,8,139,150,17,141,42,49,8,211,8,211, + 8,211,8,211,8,8,8,139,150,132,141,42,49,211,8,8, + 211,8,211,211,8,211,8,8,139,150,17,243,122,101,211,211, + 8,211,8,211,8,211,8,8,8,139,150,17,141,42,49,211, + 211,211,8,211,8,211,211,8,8,8,139,150,17,243,122,101, + 8,211,8,211,8,211,211,8,211,8,8,139,150,17,243,122, + 101,211,139,8,211,8,211,8,211,8,8,8,139,150,17,141, + 42,49,211,8,211,211,8,211,8,211,8,8,8,139,150,132, + 243,122,101,211,8,211,8,211,8,211,211,8,187,8,101,150, + 132,141,42,49,211,8,211,8,211,8,211,8,211,8,8,101, + 150,132,243,122,101,211,211,211,8,211,8,211,211,8,8,8, + 67,150,17,243,122,101,211,8,211,8,211,8,211,211,8,8, + 8,101,150,17,243,122,101,8,211,8,211,8,211,8,211,8, + 211,8,101,150,132,243,122,101,211,139,8,211,8,211,8,211, + 8,8,8,101,150,17,141,42,49,211,8,211,211,8,211,8, + 211,8,8,8,139,150,12,243,122,101,211,8,211,8,211,8, + 211,8,8,187,8,67,12,17,243,219,12,8,141,8,12,244, + 36,36,36,36,105,36,105,105,105,105,105,105,36,105,105,105, + 105,105,208,36,105,105,105,105,105,105,105,105,208,36,105,208, + 105,208,208,208,105,208,105,208,105,208,105,208,208,105,208,105, + 208,105,208,208,208,208,208,208,208,208,208,208,208,63,105,208, + 188,188,188,188,39,169,169,188,169,39,169,169,140,140,169,169, + 169,169,169,169,169,169,169,39,188,188,39,188,169,140,140,39, + 39,140,140,169,169,169,39,188,169,188,169,188,169,188,39,39, + 188,39,140,169,39,39,39,169,169,39,39,39,39,39,140,39, + 39,39,39,39,39,207,39,207,207,39,39,89,39,39,207,207, + 207,188,207,207,207,169,39,169,169,169,169,169,169,169,169,169, + 169,169,169,169,169,169,169,169,169,39,169,169,169,188,169,188, + 188,39,39,169,169,188,188,169,39,169,127,39,169,127,169,169, + 39,169,39,127,39,39,39,39,39,39,169,39,39,39,39,39, + 39,39,39,39,39,39,39,127,39,39,39,39,89,39,39,39, + 39,39,39,39,39,39,39,39,39,207,207,127,207,143,127,207, + 143,89,207,143,207,89,127,89,127,89,143,207,207,58,184,224, + 109,26,42,182,150,243,187,42,101,211,8,211,211,8,211,211, + 8,211,211,8,67,150,26,182,42,101,211,211,211,8,211,8, + 109,8,109,109,8,67,150,17,182,42,101,211,211,211,211,8, + 187,211,187,211,211,8,67,150,17,139,122,139,211,211,211,8, + 211,187,211,8,109,109,8,67,150,26,211,122,139,211,211,211, + 8,211,187,211,187,109,109,8,67,150,17,182,42,101,211,211, + 8,211,211,8,109,8,109,109,8,67,150,17,139,122,101,8, + 211,211,211,8,109,8,211,8,111,8,67,150,17,182,42,101, + 211,211,211,211,8,211,8,211,187,109,8,67,150,17,182,42, + 101,8,91,8,211,211,187,211,8,109,109,8,67,150,219,139, + 122,139,211,211,211,8,211,187,211,8,109,109,8,67,150,26, + 182,42,101,211,211,211,8,211,187,211,8,187,139,8,67,150, + 26,211,122,101,211,211,211,8,211,187,109,8,109,211,8,67, + 150,26,182,42,101,8,211,211,211,187,109,8,109,8,111,8, + 139,150,17,182,42,101,211,211,211,8,211,187,211,8,109,109, + 8,139,150,17,182,42,101,211,211,211,8,109,211,8,211,187, + 109,8,67,150,26,182,42,101,8,91,8,211,211,187,211,8, + 109,109,8,139,150,17,139,122,139,211,8,211,211,211,187,109, + 8,109,109,8,67,150,219,182,42,101,211,211,211,211,8,109, + 211,8,211,211,211,139,150,17,254,219,243,8,141,243,8,244, + 36,36,105,36,105,36,105,36,105,105,105,105,105,105,36,208, + 105,105,105,105,105,208,105,208,105,105,208,105,105,208,36,208, + 105,208,105,105,105,208,105,105,208,105,208,105,105,208,208,208, + 105,208,105,208,105,208,105,105,105,208,208,105,105,105,208,63, + 188,188,188,169,188,188,39,39,169,39,140,39,169,140,39,140, + 140,169,140,169,169,188,169,188,39,169,169,169,169,169,74,169, + 169,169,140,140,169,169,169,188,169,188,169,39,39,39,39,39, + 140,169,39,39,39,169,39,39,140,39,140,39,39,39,140,140, + 114,39,39,39,39,39,39,39,207,114,39,39,39,207,39,207, + 207,207,207,39,207,140,39,140,169,39,140,140,169,169,169,100, + 169,169,169,169,169,169,169,169,169,169,188,188,169,169,169,169, + 169,169,188,39,39,188,39,188,39,169,169,188,39,127,39,169, + 39,39,39,39,127,39,39,39,169,39,39,169,39,140,169,39, + 39,127,39,39,39,39,39,39,39,39,39,39,39,39,39,39, + 39,39,89,114,127,39,39,127,127,39,89,127,89,89,89,127, + 207,89,236,127,143,207,143,89,127,143,207,127,207,236,184,224, + 109,219,122,211,111,243,187,122,101,139,211,211,91,211,187,211, + 187,211,211,8,139,150,26,8,122,101,139,211,91,211,91,8, + 109,8,211,211,8,139,12,26,8,122,101,139,211,91,8,211, + 211,8,211,8,211,8,139,12,26,8,122,101,139,211,8,211, + 91,8,211,8,109,211,8,139,150,26,8,122,101,139,211,91, + 8,211,211,8,211,8,211,8,139,12,26,8,122,101,139,211, + 91,211,91,8,109,211,187,139,8,139,12,26,8,122,101,139, + 211,91,8,91,8,109,187,211,211,8,139,12,26,8,122,101, + 139,211,8,91,211,187,211,8,211,211,8,139,12,26,8,122, + 101,67,211,211,211,91,8,211,8,109,211,8,139,12,26,8, + 122,101,139,211,91,211,211,8,109,8,211,211,8,139,150,26, + 8,122,101,139,211,91,211,8,211,8,139,8,211,8,139,150, + 26,8,42,101,139,211,91,211,91,8,211,8,109,211,8,139, + 150,26,8,122,101,139,211,211,8,211,8,211,187,211,211,8, + 139,12,26,8,122,101,139,211,91,211,8,211,187,211,8,211, + 8,139,12,26,8,122,101,139,211,8,91,211,91,8,211,211, + 211,8,139,150,26,8,122,101,67,211,211,211,91,8,211,8, + 211,211,8,139,12,26,8,122,101,139,211,211,91,8,211,8, + 109,8,211,8,139,12,26,8,122,101,139,211,91,8,91,8, + 109,8,211,211,211,67,12,26,8,26,150,8,67,12,12,144, + 36,36,36,36,105,105,105,105,105,105,105,105,105,105,105,105, + 105,208,105,105,105,105,105,105,105,105,105,208,105,105,105,105, + 105,105,208,105,208,105,208,105,208,105,208,208,105,105,105,208, + 208,208,105,208,105,208,208,208,105,105,208,208,208,208,105,208, + 188,188,188,188,39,39,169,169,39,169,39,169,140,169,140,169, + 169,169,39,140,140,169,188,39,188,188,39,169,169,140,169,140, + 140,140,169,169,39,169,169,169,188,169,39,169,188,169,169,169, + 169,39,140,169,140,39,140,140,169,140,39,140,39,39,39,39, + 169,140,114,39,39,207,39,39,39,207,39,89,39,39,207,39, + 39,39,188,39,39,39,169,188,39,140,188,39,140,39,169,39, + 169,169,169,169,39,169,169,169,169,188,88,169,169,188,188,188, + 188,188,39,169,188,169,169,169,169,39,127,39,188,169,127,127, + 127,39,39,39,39,39,127,127,39,39,39,39,140,127,39,39, + 39,39,39,39,39,39,39,39,39,39,39,39,39,89,39,39, + 39,39,39,39,127,114,89,39,127,89,39,39,127,39,127,89, + 127,127,207,89,127,89,207,127,89,127,89,236,236,236,153,59, + 17,187,42,141,150,150,12,42,101,211,211,8,8,211,211,8, + 211,8,211,8,67,150,17,211,42,101,211,211,211,211,8,109, + 8,211,187,211,211,67,150,17,211,42,101,211,211,8,211,211, + 211,211,187,109,211,211,67,150,17,211,42,101,139,91,211,211, + 211,8,211,187,211,211,8,139,150,17,211,42,101,211,211,211, + 8,91,109,211,8,109,211,211,67,150,17,211,42,101,211,211, + 211,211,8,211,8,211,8,109,211,67,150,17,211,42,101,211, + 211,211,211,8,211,8,211,8,211,211,67,150,17,211,42,101, + 211,211,211,8,211,211,8,109,8,211,211,67,150,17,211,42, + 101,211,211,211,8,211,211,187,109,8,211,211,67,150,17,211, + 42,101,211,211,8,139,91,111,8,211,187,211,211,67,150,17, + 211,42,101,211,139,211,211,91,109,211,187,109,211,8,67,150, + 17,211,122,101,211,139,8,211,211,8,211,187,211,211,8,139, + 150,17,211,42,101,211,139,91,211,211,187,211,8,211,211,211, + 67,150,17,211,42,101,211,211,139,8,91,211,211,8,109,211, + 211,67,150,17,211,42,101,211,211,8,211,8,109,8,109,8, + 211,8,67,150,17,211,42,101,211,211,8,211,8,211,109,8, + 187,211,211,67,150,17,211,42,101,211,211,8,139,91,211,109, + 8,109,211,211,67,150,17,211,42,101,211,211,211,211,139,187, + 211,187,109,8,8,139,150,17,8,219,12,8,8,150,243,244, + 36,36,36,36,105,36,105,36,105,36,105,105,105,105,105,105, + 105,105,105,105,105,105,105,208,105,105,105,105,105,105,105,105, + 208,36,208,36,208,105,105,105,105,105,105,208,105,208,105,105, + 105,105,208,105,208,105,208,105,208,208,105,208,105,105,208,208, + 188,39,188,188,188,188,188,169,39,169,140,169,140,169,39,39, + 39,169,169,39,140,169,169,169,169,169,39,169,169,39,140,39, + 169,140,140,169,140,39,169,169,188,169,188,169,188,39,169,39, + 140,169,140,140,140,39,114,140,140,169,140,140,140,39,140,39, + 39,140,39,39,114,39,39,39,39,39,39,39,89,39,39,207, + 39,39,207,188,39,39,39,39,188,140,169,39,140,169,169,169, + 169,39,39,169,169,169,169,169,169,188,169,188,169,169,169,169, + 169,88,188,169,127,188,188,188,127,169,39,169,39,39,169,39, + 39,127,169,127,169,39,39,39,39,169,39,39,39,39,39,39, + 114,39,39,39,39,39,114,39,39,114,127,39,39,114,127,39, + 39,39,39,39,127,39,39,39,39,114,89,89,127,39,127,89, + 89,127,89,89,127,127,89,127,89,143,127,207,143,236,184,99, + 17,26,42,243,187,109,187,122,101,211,211,211,211,211,187,211, + 187,211,211,91,67,12,17,243,122,101,139,8,8,211,211,187, + 211,211,8,211,91,67,12,17,243,122,101,139,211,8,211,91, + 8,211,8,211,187,8,67,12,17,243,122,101,211,8,211,8, + 211,109,8,211,8,211,8,67,12,17,243,122,101,139,8,211, + 211,211,8,109,91,8,109,91,67,12,17,243,122,101,139,8, + 8,211,211,187,211,211,8,109,91,67,12,17,243,122,101,139, + 8,211,211,211,187,211,109,8,211,91,67,150,219,243,122,101, + 211,211,211,211,211,91,8,109,211,109,91,67,12,17,243,122, + 101,211,211,91,8,211,8,211,8,109,211,91,67,12,17,243, + 122,101,139,8,8,211,211,8,211,211,8,211,91,67,12,17, + 243,122,101,139,8,8,211,211,8,211,8,211,211,91,67,150, + 17,243,122,101,139,8,211,8,211,109,8,211,8,211,8,67, + 12,17,243,122,101,211,211,8,211,211,211,8,211,8,211,91, + 67,12,17,243,122,101,139,8,8,211,211,8,109,8,109,211, + 91,67,150,219,243,122,101,139,211,211,211,8,109,8,109,8, + 211,91,67,12,17,243,122,101,211,211,91,139,211,187,8,211, + 211,211,91,67,12,17,243,122,101,211,211,8,211,211,8,109, + 91,8,109,91,67,150,17,243,122,101,139,8,8,8,211,211, + 8,211,8,211,8,67,12,132,141,17,12,8,8,150,150,244, + 36,36,105,36,36,105,36,105,105,105,105,105,105,105,105,105, + 105,105,105,105,105,105,105,105,105,105,105,208,105,105,105,105, + 105,105,105,105,208,105,105,105,208,105,105,105,105,105,105,208, + 208,105,208,208,208,105,208,208,105,208,105,208,208,105,105,208, + 188,169,188,188,169,39,169,169,169,169,39,39,169,140,140,140, + 140,140,39,169,169,140,188,39,39,39,169,39,39,140,169,140, + 140,169,140,140,39,140,140,140,169,39,39,39,169,140,39,140, + 140,140,140,114,39,140,169,140,140,74,140,140,140,140,39,140, + 140,39,39,140,169,39,39,39,39,39,39,39,39,39,207,39, + 207,207,39,207,207,39,140,39,39,39,39,169,39,39,140,169, + 140,169,169,169,169,169,188,169,169,169,188,169,188,188,188,188, + 188,188,188,188,188,127,39,188,39,188,169,39,39,169,39,39, + 39,39,39,39,39,169,169,169,140,39,127,39,39,39,39,39, + 169,39,39,39,39,39,127,39,39,39,39,39,39,39,39,127, + 114,127,114,39,39,39,89,39,39,127,39,39,89,89,89,39, + 127,89,39,127,89,89,39,89,207,127,89,89,207,236,184,59, + 187,183,42,243,111,150,111,42,101,211,211,8,211,211,211,211, + 139,211,8,139,8,132,17,211,42,101,139,211,211,211,211,211, + 211,211,211,8,139,8,132,17,211,42,101,211,139,8,211,139, + 211,211,211,211,211,211,139,132,17,109,122,49,139,211,211,211, + 211,211,109,211,211,211,211,139,132,17,211,42,101,139,139,211, + 211,211,109,139,211,211,8,139,8,132,17,211,42,101,139,211, + 8,211,211,211,211,211,211,8,139,8,132,17,109,42,101,139, + 211,8,211,211,211,211,211,211,8,211,139,132,17,211,42,101, + 211,211,8,211,211,211,211,8,211,8,139,8,132,17,109,42, + 101,211,139,8,139,139,61,211,8,211,8,139,8,132,17,109, + 42,101,139,211,139,8,211,211,109,211,211,8,139,8,132,17, + 109,42,101,211,139,211,211,139,61,211,8,211,8,139,8,132, + 17,211,42,101,139,211,211,211,211,211,109,211,211,211,211,139, + 132,17,109,42,101,139,8,211,211,211,211,109,211,211,8,211, + 139,132,17,109,42,101,211,139,8,139,211,109,211,211,211,8, + 8,67,132,17,109,42,101,211,211,211,211,211,211,211,211,211, + 8,139,8,132,17,211,42,101,211,139,211,8,211,211,211,211, + 211,8,8,67,132,17,109,42,101,211,139,211,211,211,109,139, + 211,211,8,139,8,132,17,109,42,101,139,211,211,139,211,211, + 211,211,109,211,211,139,150,26,243,17,150,8,141,12,243,144, + 36,36,36,105,36,105,36,105,105,105,105,105,105,105,105,105, + 105,105,105,105,105,105,105,105,105,105,105,105,105,208,105,105, + 208,105,105,36,105,105,105,105,105,105,105,208,105,208,105,105, + 208,105,105,105,208,105,208,105,208,105,208,105,105,208,208,105, + 188,188,39,188,169,39,39,169,169,169,140,39,169,169,169,169, + 140,140,140,39,39,169,169,169,169,39,39,169,169,140,169,140, + 140,140,140,140,140,169,169,140,140,140,140,39,39,140,140,140, + 140,140,74,140,140,140,140,74,140,140,169,140,140,140,39,39, + 140,140,39,39,114,39,39,114,39,39,39,114,39,39,114,39, + 39,39,39,39,114,39,140,39,39,39,39,169,169,39,39,39, + 169,169,39,39,188,169,188,39,169,169,188,169,188,169,169,169, + 188,188,188,188,188,188,188,188,39,39,39,169,39,39,169,39, + 39,39,39,207,39,39,39,127,39,140,39,39,39,39,39,39, + 39,39,39,39,114,127,114,39,39,39,39,39,39,39,39,39, + 127,39,39,39,39,39,114,89,39,39,89,39,39,39,39,89, + 39,127,39,39,127,89,127,39,89,39,127,127,207,89,184,59, + 12,183,78,243,132,150,187,122,49,139,211,211,211,211,211,109, + 8,211,8,139,67,150,219,109,122,67,211,211,211,211,211,211, + 91,8,211,8,139,67,150,219,211,122,49,211,211,211,8,211, + 61,139,8,211,211,8,67,17,17,211,122,67,139,211,211,211, + 211,91,211,211,91,8,8,67,150,219,243,122,67,211,211,8, + 139,211,91,211,211,8,211,139,67,150,219,109,122,67,211,211, + 211,211,211,91,211,8,211,8,139,67,150,219,211,122,67,211, + 211,211,211,211,91,211,211,211,211,211,139,150,219,109,122,49, + 139,211,211,211,8,61,211,211,211,8,139,67,150,17,211,122, + 49,211,139,211,211,8,211,211,211,211,8,139,67,150,219,211, + 122,67,211,211,211,211,211,211,91,8,211,8,139,67,150,219, + 211,122,67,211,211,8,211,8,139,211,211,211,8,139,139,12, + 219,211,122,67,211,211,211,211,211,211,91,8,211,211,8,67, + 12,17,211,122,67,139,211,211,211,211,211,91,8,211,211,211, + 67,150,219,211,122,67,211,211,211,211,211,91,211,8,211,211, + 8,139,150,17,109,122,49,211,211,211,211,211,61,211,211,211, + 8,139,67,150,219,211,122,49,211,139,8,139,211,91,139,8, + 211,139,8,67,132,17,109,122,49,211,211,8,139,211,91,211, + 211,8,211,139,139,150,17,109,122,67,211,211,211,211,211,109, + 211,211,211,8,8,67,132,17,243,17,243,12,67,17,12,244, + 36,36,36,36,36,105,36,105,36,105,105,105,105,105,105,208, + 105,105,105,105,105,105,105,105,105,105,105,105,105,36,105,105, + 105,105,105,105,36,105,105,105,36,105,105,105,105,105,105,105, + 105,105,208,105,208,105,105,208,105,208,208,208,105,105,208,208, + 207,39,188,39,188,169,169,169,39,140,169,140,140,140,140,140, + 169,169,169,140,140,140,39,188,39,39,140,39,39,169,140,140, + 74,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, + 140,140,140,74,140,140,140,39,140,140,140,140,140,140,140,140, + 140,140,140,140,169,39,140,169,114,39,39,39,39,39,39,39, + 114,39,39,169,39,39,39,39,39,39,39,39,39,169,140,169, + 39,39,169,169,169,140,169,169,39,39,169,188,169,188,188,188, + 39,169,39,169,39,188,169,169,39,188,39,39,39,39,39,39, + 39,39,39,39,207,39,39,39,39,39,127,114,39,39,39,39, + 169,114,127,39,39,39,169,39,39,39,39,39,39,39,39,39, + 39,114,39,39,39,39,127,114,89,39,114,39,89,39,89,39, + 89,89,89,89,89,127,39,127,127,89,89,39,207,236,58,224, + 187,26,78,8,187,132,187,42,101,139,139,139,139,139,211,139, + 211,211,139,211,67,17,26,211,26,101,139,139,139,139,139,139, + 139,139,211,139,211,67,17,26,109,42,101,139,139,139,139,139, + 139,211,139,211,139,139,139,132,26,109,42,101,139,139,139,139, + 139,139,211,139,139,139,139,67,17,26,109,42,101,139,139,139, + 139,139,211,139,211,211,139,211,67,17,26,211,26,101,139,139, + 139,139,139,139,211,211,211,139,211,67,17,26,109,42,101,139, + 139,139,139,139,139,139,211,139,139,8,67,17,26,211,42,139, + 139,139,139,139,139,139,211,139,211,139,211,67,17,26,109,26, + 101,139,139,139,139,139,139,211,211,211,139,211,67,17,26,109, + 42,101,139,139,139,139,139,139,139,211,211,139,139,139,17,26, + 109,42,101,139,139,139,139,139,211,211,211,211,139,139,67,150, + 26,243,42,101,139,139,139,139,139,139,139,139,211,139,139,139, + 132,26,109,42,101,139,139,139,139,139,139,139,211,211,139,8, + 67,17,26,109,42,101,139,139,139,139,139,139,139,211,211,139, + 139,67,17,26,211,42,101,139,139,139,139,139,139,139,211,211, + 139,211,67,17,26,109,42,101,139,139,139,139,139,139,211,211, + 211,211,211,139,17,26,211,42,101,139,139,139,211,139,139,139, + 211,211,139,139,67,17,26,109,26,101,139,139,139,139,211,139, + 211,211,211,139,139,139,17,26,211,17,12,243,8,150,243,144, + 36,36,105,36,105,36,36,36,105,36,36,36,105,105,36,105, + 105,105,105,105,105,105,105,105,105,105,105,105,105,36,105,105, + 105,105,105,105,36,105,36,105,105,105,36,105,36,105,105,105, + 105,36,208,105,105,105,105,105,208,105,105,105,208,63,208,105, + 188,169,188,188,188,39,39,169,39,140,140,169,140,140,169,140, + 140,140,140,169,140,140,140,140,140,39,140,140,140,140,140,140, + 74,74,74,140,140,140,74,74,74,140,140,140,140,140,140,140, + 144,140,140,144,74,140,74,140,140,140,140,140,140,140,140,39, + 114,169,39,39,140,39,39,39,39,39,39,39,39,39,39,169, + 39,140,39,140,39,39,140,39,39,39,39,39,39,39,140,169, + 140,39,39,39,169,39,39,140,169,39,140,39,39,39,39,39, + 39,39,39,39,39,39,39,188,169,169,39,140,39,39,39,39, + 39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39, + 127,140,39,39,39,39,39,39,39,39,39,114,39,39,39,39, + 127,39,39,39,39,39,127,39,39,127,39,39,89,127,89,114, + 127,114,127,39,114,89,89,114,39,127,89,114,127,207,119,224, + 12,26,78,187,187,12,187,122,91,91,26,91,91,26,91,26, + 91,26,91,26,67,132,26,12,78,8,91,26,91,91,26,91, + 26,91,26,91,26,67,132,26,12,78,8,91,26,91,26,187, + 26,91,26,91,26,26,67,150,26,12,78,8,91,26,91,91, + 26,91,26,26,91,26,26,67,132,26,8,162,8,26,91,91, + 26,12,26,91,26,91,26,26,67,132,26,187,42,8,91,91, + 26,91,26,91,91,26,91,26,26,67,132,26,8,162,8,91, + 91,26,91,26,91,26,91,26,91,26,67,132,26,12,78,91, + 91,26,91,91,26,91,26,91,26,91,26,67,132,26,12,122, + 8,26,91,26,91,26,91,26,91,26,91,26,67,132,26,8, + 162,8,26,91,91,26,91,26,91,91,26,91,17,67,132,26, + 8,122,8,91,26,91,187,26,91,91,26,91,26,26,182,150, + 26,8,122,8,91,26,91,26,91,26,91,26,91,26,26,67, + 150,26,8,162,8,91,91,26,91,26,91,26,91,26,91,26, + 67,132,26,8,162,8,26,91,91,26,91,26,91,26,91,26, + 26,67,132,26,12,78,8,91,26,91,91,26,26,91,26,91, + 26,26,67,132,26,8,162,8,26,91,26,91,187,26,91,26, + 91,26,12,67,132,26,12,78,8,26,91,91,26,91,26,26, + 91,26,26,26,67,132,26,12,78,8,91,26,91,26,91,91, + 26,91,26,91,26,67,150,17,12,12,12,8,8,17,150,144, + 36,36,36,36,36,105,105,105,105,105,105,105,36,105,105,105, + 105,105,105,105,105,105,105,105,105,105,105,36,105,36,105,105, + 105,105,105,105,105,105,105,105,105,36,36,105,105,36,105,36, + 105,105,105,36,105,105,208,105,105,208,105,208,105,105,208,105, + 188,188,188,39,39,169,169,169,140,169,140,140,140,140,39,140, + 140,140,169,140,169,140,169,169,39,169,169,100,140,140,140,140, + 114,140,140,74,140,74,140,140,140,140,140,140,140,140,144,74, + 140,144,140,74,144,140,114,140,140,140,140,140,140,140,140,140, + 169,140,140,140,114,39,39,39,114,39,140,39,39,39,140,114, + 39,39,39,39,140,39,39,39,39,39,39,140,169,169,169,39, + 39,140,39,169,39,140,169,39,39,140,39,39,169,39,39,39, + 207,207,207,127,39,39,127,39,39,39,39,39,39,39,39,39, + 39,39,39,39,39,39,39,114,39,169,114,127,114,39,39,39, + 39,39,127,39,39,39,39,39,39,127,39,39,39,207,114,39, + 39,39,39,39,39,114,127,114,89,39,89,39,114,39,39,127, + 127,39,89,89,127,127,127,39,89,89,127,89,89,89,240,224, + 187,187,42,12,132,17,109,0,219,219,219,26,26,26,183,187, + 42,219,219,26,8,150,12,211,0,26,219,219,26,183,42,183, + 187,42,219,219,26,8,150,12,211,0,26,219,219,219,187,42, + 187,183,26,26,187,219,8,17,12,211,0,26,219,219,26,219, + 219,183,187,219,219,187,26,8,150,187,211,0,26,219,26,183, + 187,42,187,219,219,219,219,26,8,150,12,211,0,26,219,219, + 219,219,219,183,183,42,219,187,26,8,150,12,211,0,26,219, + 219,219,26,183,183,187,42,219,219,26,8,150,12,211,0,219, + 219,219,219,219,219,183,187,42,219,219,26,8,150,12,211,0, + 26,17,219,183,187,26,183,187,26,219,183,26,8,150,17,211, + 0,26,219,26,183,187,42,183,219,42,183,219,26,8,150,17, + 211,0,26,219,219,219,26,26,183,183,42,219,219,26,8,132, + 187,211,0,26,219,187,26,42,42,187,183,42,26,187,219,243, + 150,17,211,0,26,219,219,26,26,42,187,219,219,219,219,26, + 8,150,12,211,0,26,219,219,219,26,183,187,183,26,26,187, + 26,8,150,12,211,0,26,219,219,26,26,183,187,183,26,219, + 187,26,8,150,17,243,0,26,219,219,219,183,42,187,183,26, + 219,187,26,8,150,12,211,0,26,219,219,219,219,183,187,187, + 219,219,187,26,8,150,12,211,0,26,219,219,26,219,42,183, + 187,26,26,183,219,8,187,26,211,17,150,8,141,150,8,244, + 36,36,36,105,36,36,36,36,36,36,105,105,105,105,105,105, + 105,105,105,105,105,105,105,105,105,105,105,105,36,105,36,105, + 105,105,36,36,36,36,36,36,105,105,105,36,105,36,36,105, + 36,105,105,36,105,36,105,105,105,105,105,105,105,105,105,63, + 188,188,188,39,39,39,140,169,140,169,140,169,140,140,140,169, + 140,140,140,140,169,140,140,140,140,140,39,140,169,140,140,140, + 140,140,140,74,140,140,140,140,140,140,144,140,144,140,140,71, + 140,140,144,140,140,74,140,71,140,140,140,140,140,140,140,140, + 39,140,169,169,140,39,39,127,39,39,39,39,114,127,169,140, + 140,140,140,39,140,39,39,39,140,39,39,39,140,39,140,169, + 188,140,39,39,188,39,169,140,39,39,39,39,140,39,39,39, + 39,39,39,39,207,39,39,39,39,169,39,39,39,39,39,39, + 39,39,127,39,39,39,39,39,39,39,39,39,39,39,39,39, + 127,39,114,140,127,39,39,39,39,39,39,39,39,39,39,39, + 39,127,39,39,127,39,89,39,39,89,114,89,89,89,89,89, + 89,114,127,89,89,89,89,114,127,89,114,127,39,119,108,59, + 17,183,42,150,132,219,187,0,8,101,67,67,139,139,139,67, + 139,139,139,139,8,132,219,243,0,211,139,139,139,67,139,67, + 182,139,139,139,139,8,150,183,243,0,211,139,139,139,67,139, + 139,67,182,139,139,139,139,132,219,243,0,211,139,67,139,139, + 139,139,139,139,139,139,139,8,150,42,243,0,211,67,139,139, + 67,139,67,139,139,139,139,139,8,150,183,243,0,211,139,139, + 139,139,139,139,67,139,139,139,139,8,132,42,243,0,211,139, + 139,67,139,139,139,182,139,139,139,139,8,150,219,8,0,8, + 101,139,139,139,139,139,67,139,139,139,139,8,132,219,211,0, + 211,67,139,139,67,139,139,67,139,139,139,139,8,150,42,243, + 0,211,67,139,139,67,139,67,182,139,139,139,139,8,150,42, + 243,0,211,139,139,67,67,139,139,67,139,139,139,139,8,150, + 42,243,0,211,139,67,67,139,139,139,67,182,139,139,139,8, + 12,42,243,0,211,139,67,67,139,139,67,139,139,139,139,139, + 8,132,42,243,0,211,139,139,67,139,139,139,67,182,139,139, + 139,8,150,183,243,0,211,139,67,67,139,139,139,67,139,139, + 139,139,8,150,26,8,0,211,139,139,139,67,139,139,67,139, + 139,139,139,8,150,219,109,0,211,139,139,139,139,139,67,139, + 139,139,139,139,8,150,219,243,0,211,139,67,139,139,139,139, + 67,182,139,139,139,8,150,219,141,12,141,8,8,12,243,244, + 244,105,36,36,36,105,36,105,105,36,105,36,105,36,105,105, + 36,105,105,105,105,105,105,105,36,105,36,105,36,105,36,36, + 36,105,36,105,36,105,36,36,36,36,36,105,36,36,36,36, + 36,36,105,105,105,105,105,36,36,208,208,105,105,105,105,105, + 39,169,188,188,39,169,169,140,100,140,39,140,140,140,140,140, + 140,140,140,140,140,140,140,169,140,140,140,140,140,140,140,140, + 140,74,71,140,140,140,144,140,71,140,140,140,140,74,140,140, + 71,140,140,144,74,114,140,140,140,140,140,140,169,169,169,169, + 140,39,39,39,39,39,39,39,39,39,39,39,188,39,39,39, + 39,39,39,140,39,140,140,39,39,39,188,140,39,169,39,39, + 39,188,39,169,39,39,39,188,39,39,140,39,39,39,39,39, + 39,39,39,39,39,207,39,39,39,39,39,39,39,39,127,39, + 39,39,39,39,127,39,39,140,39,39,39,39,39,39,39,39, + 39,39,39,39,39,39,39,39,114,39,39,39,39,39,39,39, + 39,39,39,39,127,39,39,39,39,39,89,39,39,114,39,114, + 127,114,89,127,114,127,114,127,89,127,89,89,89,89,240,47, + 187,42,183,243,150,42,150,0,8,139,139,211,211,139,139,187, + 211,211,139,182,211,12,122,211,0,8,139,139,139,109,139,211, + 8,211,211,139,182,211,187,122,211,0,8,139,139,139,211,211, + 211,211,211,211,139,139,8,12,122,109,0,8,139,139,211,139, + 211,139,211,211,211,139,182,211,187,122,211,0,8,139,139,139, + 211,109,211,8,211,139,139,182,211,12,122,211,0,8,139,139, + 139,139,139,139,187,211,211,139,182,211,12,122,211,0,8,139, + 139,211,139,211,211,211,211,211,139,182,211,187,122,182,0,211, + 139,139,211,211,211,139,187,211,211,139,182,211,12,122,243,0, + 8,211,139,139,211,109,139,187,211,211,139,182,211,187,122,211, + 0,8,139,139,211,109,139,211,8,211,211,139,182,211,12,122, + 211,0,8,139,139,109,211,139,139,187,211,139,139,67,211,12, + 122,109,0,8,139,211,211,211,211,211,211,211,211,139,139,211, + 150,122,211,0,8,139,139,211,211,139,109,8,211,211,139,182, + 211,12,122,211,0,8,139,139,109,139,211,139,211,211,211,139, + 182,211,187,122,211,0,8,139,211,211,211,139,139,187,211,211, + 139,182,211,187,162,182,0,8,139,139,139,109,139,211,8,109, + 211,139,182,211,187,122,243,0,8,139,139,211,211,211,139,187, + 211,211,139,182,211,17,122,211,0,8,139,139,211,139,139,211, + 211,211,211,139,139,211,12,42,8,150,243,12,8,219,150,244, + 36,36,36,105,36,36,36,36,36,105,36,105,105,36,105,36, + 105,36,105,105,36,105,105,36,105,36,105,105,36,105,36,105, + 105,36,105,36,36,105,36,36,36,36,36,36,36,36,36,36, + 36,36,36,36,36,105,105,36,36,105,105,105,36,105,105,63, + 39,169,188,169,169,39,169,39,140,140,140,140,140,140,140,140, + 140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, + 114,140,74,71,140,140,140,144,74,71,114,140,114,140,140,144, + 74,140,140,114,74,140,144,140,140,140,140,140,140,140,140,169, + 169,39,140,127,39,39,39,127,207,207,207,39,39,39,188,169, + 169,39,39,39,188,39,169,39,39,39,188,39,39,140,140,140, + 39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39, + 39,39,39,39,39,207,39,39,39,39,39,39,114,39,39,39, + 39,39,127,39,39,39,127,39,39,39,39,39,39,39,114,39, + 39,39,39,39,39,39,39,127,39,39,39,39,39,39,127,114, + 207,114,207,39,39,39,89,39,89,114,39,89,89,89,89,89, + 89,127,114,89,127,89,89,127,89,114,127,39,89,119,159,64, + 187,42,78,141,187,42,187,0,8,139,109,109,109,109,211,8, + 211,211,211,139,243,17,42,8,0,8,211,109,211,109,109,211, + 187,211,211,211,139,8,17,42,211,0,8,139,109,109,109,109, + 8,109,8,211,211,182,243,17,26,243,0,8,211,109,211,109, + 109,187,8,187,139,8,139,8,17,42,8,0,8,211,109,109, + 211,109,109,187,211,211,211,139,243,17,42,243,0,8,211,109, + 109,109,109,211,8,211,211,211,139,243,17,42,8,0,8,139, + 109,211,211,211,8,8,8,211,211,139,8,17,42,8,0,8, + 211,182,211,211,109,211,8,211,211,211,139,243,17,42,211,0, + 8,211,109,109,211,109,211,8,8,139,8,139,8,17,42,8, + 0,8,211,211,211,109,109,8,109,8,8,211,139,243,17,42, + 243,0,8,139,109,211,109,109,211,211,187,139,8,139,109,17, + 26,243,0,8,139,109,211,211,109,8,109,8,211,211,139,243, + 17,42,243,0,8,139,109,109,109,109,8,109,8,139,211,139, + 243,17,42,8,0,8,211,211,109,109,187,211,8,211,8,139, + 139,8,17,42,8,0,8,139,109,211,109,109,211,8,211,211, + 211,139,8,132,42,211,0,8,139,109,211,109,109,109,211,187, + 8,139,139,8,17,26,8,0,8,211,182,211,109,187,139,8, + 211,211,211,139,211,17,42,211,0,8,139,109,109,109,109,187, + 211,8,8,211,182,182,17,42,8,12,243,243,8,26,8,244, + 244,36,36,36,36,105,105,36,36,36,36,36,105,36,105,36, + 105,36,105,36,105,36,105,105,36,105,105,36,36,105,36,105, + 36,105,36,36,36,36,36,36,105,36,36,36,36,36,244,36, + 244,36,36,36,36,36,36,36,36,105,36,36,105,105,105,105, + 188,39,169,39,39,169,169,169,140,169,140,140,140,140,140,140, + 140,140,140,140,140,140,140,140,140,140,74,74,140,140,140,140, + 140,140,140,140,144,74,144,140,140,140,74,144,74,74,140,74, + 140,140,71,74,114,140,140,140,140,140,140,169,39,169,169,39, + 39,39,39,39,127,39,39,39,39,39,39,39,39,188,39,39, + 39,188,39,169,39,188,39,188,188,39,207,140,140,39,39,39, + 39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,114, + 39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39, + 39,39,207,39,127,39,39,207,39,39,39,39,39,39,39,39, + 39,114,39,39,39,39,39,39,39,39,39,39,39,39,39,207, + 39,127,39,89,39,39,114,89,39,39,89,127,114,39,39,39, + 127,89,89,114,89,127,114,89,127,89,89,89,207,119,108,59, + 187,187,162,243,166,219,187,0,211,139,139,67,139,139,139,211, + 211,139,139,67,211,150,122,187,0,8,67,139,139,139,139,139, + 139,211,139,139,67,211,150,122,187,0,8,139,139,139,139,139, + 139,139,211,211,139,139,211,150,122,187,0,8,139,139,139,139, + 139,139,139,139,211,139,67,211,150,162,187,0,8,139,139,139, + 139,139,139,139,211,211,139,67,211,150,122,187,0,8,139,139, + 139,139,139,139,211,211,139,139,67,211,150,122,187,0,8,139, + 139,139,139,139,139,211,211,139,139,67,211,150,122,187,0,8, + 139,139,67,139,139,139,211,211,139,139,67,211,150,122,187,0, + 8,139,67,139,139,139,139,211,211,211,139,67,211,150,162,187, + 0,8,139,67,139,139,139,139,139,211,211,211,67,211,150,0, + 109,0,8,139,139,139,139,139,139,139,139,211,139,67,8,150, + 122,187,0,211,139,139,67,139,139,139,139,211,211,211,67,211, + 150,122,187,0,8,139,139,67,139,139,139,139,211,211,211,67, + 211,150,162,187,0,8,139,139,139,139,139,139,211,211,211,211, + 139,211,150,122,187,0,8,139,139,139,139,139,139,211,211,211, + 139,67,211,12,122,187,0,8,139,139,139,139,139,139,139,139, + 211,211,139,211,150,162,187,0,8,139,139,139,139,139,139,211, + 211,139,139,67,243,150,0,12,0,8,139,139,139,139,139,139, + 139,211,211,139,67,12,150,78,187,17,12,8,8,17,150,244, + 244,36,36,36,36,36,36,36,105,105,36,36,36,36,105,36, + 105,36,105,105,36,36,36,36,36,36,105,36,36,36,36,105, + 36,36,105,36,105,36,36,36,36,36,244,36,36,36,36,36, + 36,244,36,36,244,36,244,36,36,105,105,36,36,105,105,36, + 188,39,169,169,169,39,169,169,140,39,39,140,169,140,140,140, + 140,140,140,140,140,140,140,140,140,39,114,74,140,140,140,140, + 140,140,140,74,114,74,140,140,144,140,74,140,144,74,144,74, + 74,140,140,74,74,140,144,140,140,140,39,140,140,140,140,169, + 140,39,207,39,39,39,127,39,39,39,39,169,39,169,188,39, + 39,188,207,39,39,207,39,39,188,39,207,39,169,39,169,140, + 39,39,39,39,39,39,140,140,39,39,39,39,39,39,39,39, + 39,39,39,39,127,39,39,39,140,39,39,39,39,127,39,39, + 39,39,39,39,39,39,39,39,127,39,39,39,39,39,39,39, + 39,127,39,39,39,39,114,207,39,39,39,39,39,39,39,39, + 39,39,39,39,89,127,39,39,89,114,89,89,89,89,89,39, + 39,127,89,127,89,89,127,89,114,89,127,89,89,119,119,47, + 26,26,78,8,111,132,187,0,187,187,187,187,187,187,109,91, + 187,26,91,12,12,150,42,8,162,26,187,187,187,187,187,187, + 187,187,26,91,17,12,150,42,8,162,187,187,187,187,187,111, + 91,187,91,12,187,12,12,150,42,8,162,187,187,187,187,187, + 8,111,187,187,91,26,12,243,150,42,8,162,187,187,187,187, + 187,8,91,187,187,91,26,12,12,150,42,8,162,187,187,12, + 187,187,187,109,91,187,26,91,12,150,150,42,8,162,187,187, + 12,187,187,111,187,111,91,26,91,17,12,187,26,8,162,26, + 187,187,187,187,109,91,12,187,26,91,12,12,150,42,8,162, + 26,187,187,187,187,109,91,187,187,91,26,12,243,150,42,8, + 162,26,187,187,187,187,111,91,187,187,187,26,12,243,150,42, + 187,162,187,187,187,187,187,187,187,187,187,91,26,12,109,132, + 42,8,162,187,187,187,187,187,111,91,187,91,12,91,26,243, + 150,42,8,162,187,187,187,187,187,111,91,187,187,12,91,12, + 243,150,42,8,162,187,187,187,187,8,111,91,187,187,12,187, + 12,12,150,42,8,162,187,187,187,187,187,187,109,91,12,91, + 26,12,150,12,42,8,162,187,187,187,187,187,109,91,12,187, + 12,12,12,12,150,26,8,162,187,187,187,8,187,109,91,187, + 187,26,91,12,12,150,42,8,162,187,187,12,187,187,211,187, + 187,187,12,91,12,243,132,42,211,12,150,243,8,17,8,244, + 36,36,36,36,36,36,105,36,36,36,36,105,105,36,105,36, + 105,36,36,36,105,105,105,105,36,36,36,105,36,36,36,36, + 105,36,36,36,36,36,36,36,36,244,36,36,244,36,244,36, + 244,36,244,36,244,36,244,244,244,36,36,36,105,36,36,105, + 169,169,188,39,39,169,39,140,169,140,140,74,140,74,140,140, + 140,140,74,140,140,140,140,114,140,140,74,140,140,140,140,140, + 74,140,74,140,74,114,140,140,140,140,144,140,140,140,140,144, + 140,140,140,114,140,140,140,140,140,39,140,140,169,39,169,39, + 39,39,39,39,89,39,207,207,127,127,188,188,188,188,39,188, + 39,39,39,39,188,39,188,188,207,188,39,39,39,140,39,39, + 39,39,39,169,39,39,39,39,39,39,39,39,39,39,127,39, + 127,39,39,39,127,39,39,127,39,39,39,39,39,39,39,39, + 39,39,114,39,39,207,39,39,39,39,39,39,39,39,39,39, + 39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39, + 39,127,39,39,39,127,114,89,39,127,39,127,114,39,39,89, + 89,89,89,89,89,127,89,89,89,89,89,89,127,89,108,99, + 187,187,162,8,12,17,111,0,0,0,122,122,122,0,0,0, + 0,0,0,0,219,187,219,187,0,0,122,122,122,122,122,0, + 122,0,0,0,0,219,17,26,187,0,0,0,122,122,0,0, + 0,0,0,0,0,0,219,187,26,187,0,0,122,122,162,0, + 0,0,0,0,0,0,0,26,132,219,187,0,0,0,122,162, + 0,0,0,0,0,0,0,0,219,187,26,187,0,0,0,122, + 122,0,0,0,0,0,0,0,0,26,187,219,187,0,0,0, + 0,0,122,122,0,0,0,0,0,0,219,132,219,187,0,0, + 0,122,0,0,0,0,0,0,0,0,0,219,187,26,187,0, + 0,0,122,0,0,0,0,0,0,0,0,0,26,132,219,187, + 0,0,0,122,122,122,0,122,0,122,122,0,0,26,17,26, + 109,0,0,0,122,122,122,122,0,0,0,0,0,0,26,187, + 26,187,0,0,0,0,122,0,0,0,0,0,0,0,0,26, + 187,26,187,0,0,0,122,122,122,0,0,0,0,0,0,0, + 26,132,219,187,0,0,122,162,0,0,0,122,0,0,0,0, + 0,219,187,219,187,0,0,0,122,122,0,0,0,0,0,0, + 0,0,26,132,26,187,0,0,0,122,122,0,0,0,0,0, + 0,0,0,219,132,219,187,0,0,0,0,0,0,0,0,122, + 0,0,0,0,17,166,26,187,0,0,0,122,0,0,0,122, + 0,0,0,0,0,26,187,219,243,187,12,12,141,17,141,244, + 244,36,36,36,36,36,36,36,36,105,36,36,36,36,36,36, + 36,36,105,36,36,36,36,36,36,36,36,36,36,36,36,36, + 36,36,36,36,36,36,36,36,36,36,244,36,244,36,244,36, + 36,244,36,36,36,244,36,36,244,36,36,36,36,36,36,36, + 188,169,169,39,39,140,39,140,169,140,140,74,39,140,140,140, + 140,140,140,144,140,140,140,140,140,114,140,140,74,140,140,114, + 140,114,140,140,140,140,140,140,140,140,74,74,140,140,140,140, + 140,140,140,140,140,140,140,140,140,140,169,39,140,39,39,39, + 39,39,39,127,39,207,39,207,39,188,188,39,188,188,188,39, + 39,39,207,39,39,207,39,39,207,207,39,39,39,39,39,39, + 39,114,39,39,39,39,39,39,39,39,39,39,39,39,39,39, + 39,207,39,207,39,39,39,207,39,39,39,39,39,39,39,39, + 39,207,207,39,39,114,127,207,39,39,39,39,39,39,39,39, + 39,39,39,39,127,39,39,127,39,39,127,39,127,39,39,89, + 207,39,89,39,127,89,39,89,89,89,114,89,89,89,39,127, + 114,127,114,127,89,89,114,89,127,89,114,89,127,89,159,59, + 219,42,162,243,150,12,187,42,26,26,26,26,42,42,219,17, + 219,219,219,26,17,219,219,12,42,26,26,26,26,26,42,26, + 17,219,219,219,26,17,132,183,12,42,26,26,26,26,26,42, + 26,219,219,219,219,26,17,132,219,12,42,26,26,26,26,26, + 42,26,17,219,219,219,219,26,17,219,12,42,26,26,26,26, + 42,42,26,17,17,219,219,26,17,132,183,12,42,26,26,26, + 26,26,42,219,17,219,219,219,219,17,219,219,12,42,26,26, + 26,26,26,42,26,17,219,219,219,26,17,219,219,12,42,26, + 26,26,26,42,42,26,17,219,219,219,26,17,132,183,12,42, + 26,26,26,26,26,42,26,17,219,219,219,219,26,17,219,12, + 42,26,26,26,26,26,42,26,17,17,219,219,219,17,17,26, + 17,42,26,26,26,26,42,42,26,17,219,219,219,219,219,132, + 219,12,42,26,26,26,26,26,42,26,219,17,219,219,219,219, + 132,219,12,42,26,26,26,26,26,42,26,17,219,219,219,219, + 26,17,219,12,42,26,26,26,26,26,42,26,17,17,219,219, + 26,17,219,219,12,42,26,26,26,26,26,42,219,219,219,219, + 219,219,17,132,219,17,42,26,26,26,26,42,42,26,17,17, + 219,219,26,26,17,219,12,42,26,26,26,26,26,42,26,17, + 219,219,219,26,26,132,219,12,42,26,26,26,26,26,42,26, + 17,219,219,219,219,17,219,26,12,17,243,243,8,17,141,244, + 36,36,244,105,36,36,244,105,36,36,36,36,36,36,105,36, + 36,36,105,36,36,105,36,36,105,105,36,36,36,36,36,36, + 105,36,36,36,36,36,244,36,244,36,36,36,244,36,244,244, + 36,244,244,244,36,244,244,244,244,36,244,36,36,36,36,36, + 188,39,39,169,140,39,169,169,140,140,140,140,140,140,140,74, + 140,140,140,140,140,144,140,144,140,74,144,140,144,140,140,74, + 74,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, + 74,140,74,140,74,140,140,114,140,140,39,140,39,140,114,39, + 39,39,39,39,207,207,207,188,207,39,207,188,188,188,39,188, + 39,39,39,39,114,39,39,39,39,39,39,39,39,39,39,39, + 39,188,114,39,39,39,169,114,39,39,39,39,39,39,207,39, + 114,207,39,39,89,39,127,39,39,39,39,39,39,39,39,39, + 39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39, + 39,89,39,39,39,207,39,39,39,39,39,39,127,39,207,39, + 39,127,39,89,127,39,89,39,114,127,89,127,114,127,89,89, + 89,89,89,89,89,127,236,114,89,89,89,89,89,89,108,59, + 187,42,122,243,187,132,132,26,243,12,150,17,219,17,12,243, + 150,150,12,150,17,17,42,12,26,243,12,150,17,219,17,12, + 243,150,150,12,150,187,219,26,187,26,243,12,150,17,219,17, + 12,8,12,150,12,150,17,219,26,187,26,243,12,150,187,219, + 17,12,8,150,150,12,17,150,219,42,12,26,243,12,150,187, + 219,17,12,243,150,150,12,12,17,219,26,12,26,243,12,150, + 187,219,17,12,243,150,150,12,12,17,17,42,12,26,243,12, + 150,17,219,17,12,243,150,243,12,12,12,17,26,12,26,243, + 12,150,17,219,17,12,243,150,150,12,132,17,219,26,12,26, + 243,12,150,17,219,17,12,243,150,150,12,17,150,219,42,12, + 26,243,12,150,17,219,17,12,243,12,150,12,17,187,219,219, + 12,26,243,12,150,17,219,17,12,243,150,150,12,12,12,219, + 26,187,26,243,12,150,17,219,17,12,243,12,150,12,17,187, + 219,26,187,26,243,12,150,17,219,17,12,243,12,150,12,17, + 150,219,42,12,26,243,12,150,17,219,17,12,243,12,150,12, + 150,187,17,26,187,26,243,12,150,187,219,17,12,8,150,150, + 12,12,17,219,42,12,26,243,12,150,17,219,17,12,243,12, + 150,12,150,150,219,42,12,26,243,187,150,17,219,17,12,243, + 150,150,12,150,150,219,26,187,26,243,12,150,17,219,17,12, + 243,12,150,12,17,17,17,42,187,219,12,150,8,17,243,244, + 244,36,244,36,36,105,36,244,36,105,36,105,36,36,36,105, + 36,36,105,36,36,105,36,36,36,36,36,36,36,36,36,36, + 36,36,36,36,36,36,36,36,36,244,244,36,244,36,244,244, + 36,244,36,244,36,244,36,244,36,244,244,36,244,244,244,244, + 169,169,39,39,169,140,140,140,140,140,140,74,140,74,140,74, + 74,74,71,140,140,140,140,74,144,74,74,140,140,71,114,114, + 74,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, + 74,140,140,140,74,140,140,140,140,140,39,169,39,169,39,39, + 39,89,39,207,39,39,39,127,188,188,127,188,188,188,188,39, + 39,39,114,188,39,39,114,39,140,39,39,39,39,39,39,39, + 39,188,39,169,140,39,169,39,39,39,39,207,39,39,39,127, + 127,207,39,39,207,39,39,39,127,127,39,207,39,39,39,39, + 39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,127, + 39,39,39,89,39,39,207,39,207,39,89,207,39,207,39,207, + 207,39,39,207,39,39,89,89,89,39,89,89,89,39,89,89, + 89,89,89,89,89,89,89,127,89,89,89,127,39,119,108,95, + 132,42,78,150,187,187,187,219,150,17,17,17,17,12,26,243, + 150,150,17,12,17,17,26,243,219,150,17,17,187,17,17,26, + 243,150,150,12,17,12,17,26,243,219,150,17,12,17,17,17, + 17,243,12,150,12,17,17,219,26,243,219,150,17,17,17,17, + 17,17,243,150,150,12,17,12,219,26,243,219,150,17,17,17, + 132,17,26,243,150,150,150,17,12,219,26,243,219,150,17,17, + 17,17,12,26,243,150,150,17,17,17,17,26,243,219,150,12, + 17,17,17,12,17,243,150,150,150,219,17,219,26,243,219,150, + 17,17,17,132,17,26,243,150,150,12,17,12,219,26,243,219, + 150,17,12,17,132,17,26,243,150,150,12,17,187,17,26,243, + 219,150,17,17,17,17,17,26,243,150,150,12,12,17,219,26, + 243,219,150,17,17,187,17,17,26,243,150,150,17,17,12,219, + 26,243,219,150,17,12,17,132,17,17,243,150,150,12,17,12, + 219,26,243,219,150,17,17,17,17,17,26,8,150,150,12,17, + 12,219,26,243,219,150,17,12,17,17,17,26,243,12,150,17, + 17,17,219,26,243,219,150,17,17,17,17,12,17,243,150,150, + 12,17,12,17,26,243,219,150,17,17,17,17,17,26,243,12, + 150,17,17,187,17,26,243,219,150,12,17,17,17,17,26,243, + 150,150,17,17,12,219,26,243,219,150,17,17,187,17,17,26, + 243,150,150,12,12,17,17,219,12,219,12,150,8,17,141,244, + 244,36,36,244,36,244,105,36,36,244,105,36,36,105,36,36, + 105,36,36,36,36,36,36,244,36,36,36,36,36,36,36,36, + 36,36,36,36,244,36,36,36,244,36,36,244,36,244,36,244, + 244,244,244,36,244,244,244,244,244,244,36,244,244,36,244,244, + 39,140,140,169,140,140,169,140,140,140,140,140,140,140,140,144, + 140,140,144,140,144,140,144,140,140,144,140,144,140,140,74,74, + 140,140,140,140,140,39,140,140,140,140,140,74,74,140,74,140, + 39,140,140,140,39,140,169,169,39,169,140,39,39,39,114,127, + 39,39,207,39,207,207,207,207,207,39,188,207,188,188,39,39, + 39,39,207,39,39,39,39,39,39,39,39,39,39,39,39,207, + 39,39,39,207,188,39,207,39,39,169,39,39,207,39,207,39, + 39,39,39,39,207,39,207,188,39,39,39,39,39,39,207,39, + 39,39,39,169,127,39,39,39,207,39,39,39,39,39,39,207, + 39,39,127,39,39,39,207,39,39,207,39,207,39,207,39,207, + 207,207,207,127,39,89,39,127,39,89,39,89,89,89,89,127, + 127,89,114,127,89,127,89,89,127,89,89,89,89,89,240,59, + 26,42,78,12,150,219,109,219,17,12,132,187,132,12,219,12, + 17,12,17,132,187,187,26,109,219,12,17,150,219,150,150,17, + 12,17,17,12,132,17,187,26,109,219,12,17,132,17,132,150, + 26,150,150,17,12,132,12,187,26,109,219,12,17,132,17,132, + 150,26,12,17,17,150,17,17,187,26,109,219,12,17,132,17, + 17,150,219,12,17,17,12,132,17,187,26,109,219,12,17,150, + 219,132,12,219,12,12,17,150,132,17,187,26,109,219,12,17, + 132,17,132,150,26,12,17,17,17,17,187,187,26,109,219,12, + 12,132,17,17,150,219,12,17,17,12,132,17,187,26,109,219, + 12,17,132,17,17,150,219,12,12,17,150,12,17,187,26,109, + 219,12,17,132,219,150,150,219,150,17,17,150,17,12,187,26, + 109,219,12,12,132,17,150,150,219,12,12,17,150,132,17,187, + 26,109,219,12,17,132,17,17,150,26,150,17,132,150,132,17, + 187,26,109,219,12,17,132,17,150,150,219,150,17,17,150,17, + 17,187,26,109,219,12,17,132,187,150,150,219,150,150,17,12, + 132,12,187,26,109,219,12,17,132,17,132,17,26,12,17,17, + 150,17,17,187,26,109,219,12,12,132,187,150,150,219,150,150, + 12,17,12,17,187,26,109,219,12,17,132,17,150,150,219,12, + 12,17,12,17,17,187,26,109,219,12,12,132,17,150,150,219, + 150,17,17,150,17,17,187,26,109,219,12,150,8,17,8,244, + 244,36,36,244,36,244,36,244,36,36,36,36,36,244,36,36, + 244,36,36,244,36,36,36,105,244,36,36,244,36,36,36,36, + 36,36,36,36,36,244,36,244,36,244,244,36,244,244,36,244, + 244,36,244,244,244,244,244,244,36,244,244,244,244,244,244,244, + 169,169,140,169,169,140,140,169,140,140,140,74,140,74,140,140, + 144,140,74,140,140,140,140,144,140,140,140,144,140,144,114,140, + 140,140,140,140,140,140,169,140,140,140,39,39,140,39,140,74, + 169,169,140,140,169,140,140,140,39,140,39,140,39,39,207,39, + 89,207,39,207,207,39,39,207,207,207,207,207,39,188,39,39, + 39,140,39,114,39,169,140,39,39,39,39,39,207,39,39,39, + 39,39,39,207,39,39,127,39,207,39,127,39,127,39,39,39, + 39,207,207,39,39,39,39,39,39,39,39,39,39,39,39,39, + 39,207,207,39,127,39,207,39,39,39,127,207,127,39,39,207, + 39,207,39,207,207,207,39,89,39,39,39,207,39,207,207,39, + 39,127,207,207,127,127,89,89,39,89,39,89,89,127,89,89, + 114,89,89,127,89,114,89,89,89,89,89,89,127,119,159,59, + 219,42,42,243,187,17,187,219,12,17,132,219,17,12,219,150, + 132,150,17,17,17,132,26,109,219,12,17,132,219,12,17,219, + 150,150,150,17,219,17,132,26,243,219,12,17,132,219,17,150, + 219,17,150,150,17,219,12,132,26,243,219,12,17,132,219,17, + 150,219,150,150,17,12,17,17,150,26,109,219,12,17,132,17, + 17,12,219,150,150,150,17,17,17,150,26,109,219,12,17,132, + 219,17,12,219,150,150,17,17,17,17,132,26,109,219,12,17, + 132,219,17,150,219,150,150,132,12,17,12,132,26,109,219,17, + 17,132,17,17,12,219,150,150,150,17,17,17,150,26,109,219, + 12,17,132,219,12,17,17,150,150,17,17,17,17,132,26,109, + 219,12,17,132,219,12,17,219,150,150,17,150,132,17,132,26, + 109,219,17,17,132,219,17,12,219,150,150,17,17,17,17,132, + 26,243,219,12,17,132,219,17,150,219,150,17,17,12,17,17, + 150,26,243,219,12,17,132,219,17,12,219,150,150,17,12,17, + 17,150,26,243,219,12,17,132,219,17,12,219,12,150,150,17, + 219,12,132,26,243,219,12,17,132,219,17,150,219,150,150,17, + 12,17,17,132,26,109,219,17,17,132,219,17,12,219,12,132, + 150,17,17,17,132,26,243,219,17,17,132,219,12,17,219,150, + 150,150,17,17,17,132,26,243,219,12,17,132,219,17,12,219, + 150,150,17,150,17,17,132,219,211,219,12,150,8,132,8,244, + 244,36,244,36,36,244,36,36,36,244,36,36,36,36,36,36, + 36,36,36,36,244,36,244,36,36,244,36,244,36,244,36,244, + 36,36,244,36,36,36,36,36,244,36,244,36,244,244,244,244, + 244,244,36,244,244,244,244,244,244,244,244,244,244,244,244,244, + 39,140,188,140,140,140,140,140,140,140,140,140,71,140,140,140, + 140,144,140,144,140,144,140,74,74,71,74,74,140,140,140,71, + 74,140,140,140,140,169,140,169,169,188,140,169,169,169,169,39, + 39,169,169,169,169,169,39,169,169,169,140,39,39,114,39,39, + 39,207,89,39,39,207,39,39,39,39,39,188,207,39,188,39, + 39,39,39,39,39,39,188,39,39,39,39,39,39,39,39,39, + 188,39,188,39,188,188,207,188,39,207,188,188,39,39,207,127, + 39,39,39,39,207,39,207,207,207,207,127,39,39,127,39,39, + 39,39,39,39,39,39,39,39,207,127,39,39,207,39,39,39, + 207,207,39,207,207,127,207,127,207,207,207,39,39,39,127,207, + 127,207,207,207,89,89,127,127,89,89,89,89,39,89,89,127, + 236,127,89,89,89,89,89,127,89,127,89,127,89,89,108,47, + 17,42,78,243,150,12,12,26,150,17,17,17,150,132,219,12, + 17,132,12,17,132,132,26,211,42,150,17,17,17,132,150,219, + 12,219,132,12,17,17,150,26,211,26,150,17,17,17,150,17, + 219,150,219,150,12,17,132,150,26,211,26,150,17,17,17,150, + 219,219,12,17,150,150,17,132,132,26,243,26,150,17,17,17, + 132,150,219,12,219,17,12,17,187,132,26,211,26,150,17,17, + 17,132,132,219,12,17,150,12,17,132,132,26,211,26,150,17, + 17,17,150,219,219,12,17,17,150,17,132,150,219,243,26,150, + 17,17,17,132,150,219,12,17,132,12,17,187,132,219,211,26, + 150,17,17,17,150,132,219,12,17,132,150,17,132,132,219,211, + 42,150,17,17,17,132,132,219,12,17,132,17,17,17,150,26, + 243,26,150,17,17,17,150,132,219,12,17,150,12,17,132,150, + 26,109,26,150,17,17,17,150,17,219,12,150,150,17,17,132, + 132,26,109,42,150,17,17,17,150,132,219,12,219,150,132,17, + 132,132,26,109,26,150,17,219,17,150,132,219,150,219,132,12, + 17,132,150,26,211,26,150,17,17,17,150,17,219,12,219,150, + 132,17,166,150,26,109,26,150,17,17,17,150,132,219,150,17, + 132,150,17,132,150,26,211,26,150,17,17,17,132,132,219,12, + 219,132,150,17,132,150,26,211,42,150,17,17,17,150,132,219, + 12,17,150,17,17,132,187,26,109,42,12,17,243,17,141,244, + 244,244,36,244,36,244,36,244,36,36,244,36,244,36,36,36, + 244,36,36,36,36,36,36,36,36,244,36,36,36,244,36,244, + 36,36,244,36,244,244,36,244,36,36,244,36,244,36,244,244, + 244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244, + 39,140,39,169,140,169,74,140,140,140,140,140,74,71,140,71, + 140,140,74,74,74,140,140,140,140,140,144,140,144,140,114,114, + 140,140,140,140,140,169,140,39,169,188,169,169,169,39,169,140, + 39,39,39,39,188,169,39,39,39,188,39,140,39,39,39,89, + 207,207,207,207,207,207,207,207,39,39,207,39,207,207,207,39, + 207,39,169,39,39,39,39,39,39,39,39,39,188,188,188,39, + 188,188,188,207,207,39,207,188,188,188,39,207,207,39,39,207, + 39,127,39,39,39,127,39,39,39,39,127,39,39,127,127,127, + 39,127,188,127,207,127,127,127,39,207,39,127,207,39,207,207, + 39,207,39,39,207,207,207,39,127,127,207,143,207,127,188,207, + 188,127,207,39,39,127,89,127,127,127,127,89,89,127,89,236, + 236,89,89,236,89,127,89,89,89,89,89,89,127,236,159,59, + 219,42,162,243,166,243,111,26,150,17,17,17,17,17,219,150, + 17,132,132,219,26,150,26,109,26,150,17,17,17,17,17,219, + 150,12,132,17,132,26,132,26,109,26,150,17,17,17,150,17, + 219,150,17,132,17,219,26,132,26,109,26,150,17,17,17,150, + 17,219,150,17,17,132,219,26,150,26,211,26,150,17,150,17, + 17,17,219,150,150,132,17,132,26,132,26,109,26,150,17,17, + 17,12,17,219,150,17,132,132,17,26,132,26,109,26,150,219, + 17,17,150,17,219,150,132,132,132,219,26,187,26,109,26,150, + 17,150,17,17,17,219,150,17,132,17,132,26,187,26,109,26, + 150,17,150,17,17,17,219,150,17,17,132,219,26,187,26,211, + 26,150,17,17,17,17,17,219,150,17,132,17,219,26,150,26, + 109,26,150,17,17,17,17,17,219,150,17,132,17,219,26,132, + 26,109,26,150,17,150,17,132,17,219,12,219,150,17,219,26, + 150,26,211,26,150,219,17,17,17,17,219,150,17,12,132,17, + 26,150,26,109,26,150,17,17,17,17,17,219,150,17,150,132, + 219,26,132,26,109,26,150,17,17,17,150,17,219,150,17,150, + 17,17,26,150,26,109,26,150,219,17,17,17,17,219,150,17, + 17,132,17,26,132,26,109,26,150,17,17,17,17,17,219,150, + 17,12,17,17,26,132,26,211,42,150,219,17,17,17,17,219, + 150,17,150,132,219,17,187,26,211,219,150,150,150,12,8,144, + 244,36,244,36,36,36,36,244,36,244,36,244,36,244,36,36, + 36,244,36,244,36,244,36,244,36,244,36,244,36,36,244,36, + 244,36,36,244,36,36,36,244,36,244,244,244,244,244,36,244, + 244,244,244,36,244,244,244,244,244,244,244,244,244,244,244,244, + 140,140,140,140,140,74,140,140,140,140,144,140,140,140,74,114, + 71,74,144,140,144,71,140,144,140,140,140,74,140,140,74,140, + 140,140,140,140,140,140,169,140,169,169,39,39,39,140,169,169, + 169,169,169,169,169,39,169,169,169,169,169,39,39,39,39,207, + 207,207,89,207,39,207,39,39,207,207,39,207,39,39,188,39, + 39,39,39,39,39,207,188,188,39,39,188,188,207,207,39,188, + 188,188,39,39,39,207,39,207,39,188,207,39,39,39,207,39, + 207,39,127,127,207,127,39,127,39,207,39,207,188,39,39,39, + 188,39,207,207,188,39,207,39,207,188,188,39,127,207,39,39, + 207,127,127,143,39,127,188,207,207,207,127,207,207,207,207,127, + 207,207,127,207,143,89,127,89,89,89,236,236,127,89,143,143, + 127,143,143,127,143,236,236,127,89,89,89,127,236,119,108,47, + 26,219,122,8,132,187,150,42,12,219,150,17,150,150,219,12, + 132,17,17,17,17,187,219,243,42,12,219,150,17,150,132,219, + 12,132,17,150,219,17,187,219,243,42,12,219,150,17,17,12, + 42,12,132,12,132,17,17,187,219,243,26,17,17,150,17,17, + 150,219,12,132,150,17,17,17,187,17,243,42,12,219,17,17, + 150,150,219,12,219,17,132,219,17,187,219,243,26,17,17,150, + 17,150,132,219,12,132,12,12,219,17,187,219,243,42,12,17, + 150,17,17,150,219,12,17,17,17,219,17,187,17,243,42,12, + 219,17,17,150,132,219,12,132,17,150,219,17,12,219,243,42, + 12,219,17,17,150,132,219,12,132,150,17,17,17,12,219,243, + 42,17,17,150,17,150,17,219,12,132,12,17,132,17,187,17, + 109,42,12,219,150,17,150,150,219,12,132,12,150,219,17,187, + 17,211,42,12,219,17,17,17,17,219,150,132,12,150,219,17, + 187,17,243,42,12,17,150,17,150,150,219,12,132,150,17,219, + 17,187,17,243,42,12,219,150,17,150,12,26,12,132,17,17, + 219,17,187,219,243,42,12,219,150,17,17,132,219,12,132,17, + 132,219,17,187,17,243,42,12,17,150,17,150,12,42,12,132, + 150,17,219,17,187,219,211,26,17,17,150,17,150,150,219,12, + 132,132,132,219,17,187,17,109,42,12,17,150,17,150,17,219, + 12,132,17,17,219,17,150,219,243,26,26,17,243,150,141,244, + 244,36,244,244,244,244,36,244,36,36,36,244,36,36,244,36, + 244,36,36,36,244,36,36,244,36,36,36,244,244,36,244,36, + 244,36,244,36,36,244,36,244,36,244,36,244,36,244,244,244, + 244,244,244,244,244,244,244,244,244,244,244,244,244,244,144,144, + 169,169,140,169,39,140,140,140,140,140,140,140,140,140,140,114, + 114,140,140,140,140,140,140,140,74,140,140,140,140,140,74,140, + 140,140,140,140,169,140,169,140,39,169,169,169,188,39,169,169, + 169,169,169,39,169,39,169,169,169,169,188,39,39,39,89,89, + 89,207,207,207,207,207,207,39,207,39,39,207,39,39,39,39, + 207,39,39,39,188,207,39,188,188,188,39,188,39,207,39,188, + 188,188,207,188,188,207,39,207,207,207,207,207,207,39,207,39, + 127,39,39,188,39,188,188,207,188,188,188,188,207,188,188,207, + 188,39,39,207,188,188,207,188,207,207,207,188,39,207,127,127, + 207,207,188,207,188,207,207,207,207,207,188,188,188,127,207,207, + 207,207,207,207,207,207,143,207,143,127,143,89,143,143,207,89, + 143,89,89,89,89,236,89,236,143,236,119,89,143,236,159,47, + 26,26,78,243,187,12,150,42,17,219,150,17,17,219,219,17, + 150,17,17,17,219,187,26,150,26,17,219,12,17,12,219,219, + 17,132,17,17,219,17,187,26,150,42,17,219,12,150,150,219, + 219,17,132,17,17,17,17,187,26,150,42,12,219,12,150,17, + 219,219,132,219,17,12,219,17,187,42,150,26,17,17,12,17, + 17,219,219,150,150,17,17,219,17,12,26,150,42,12,219,150, + 17,17,17,219,132,132,17,17,17,17,187,26,150,26,17,219, + 12,150,17,219,219,150,17,17,17,17,17,17,26,150,26,17, + 17,17,17,12,219,219,17,150,17,17,219,17,187,26,150,42, + 17,17,17,17,12,219,219,132,17,17,17,17,17,187,26,150, + 42,12,17,17,12,150,219,219,132,132,150,219,17,17,187,26, + 150,26,17,219,12,17,17,219,219,132,132,17,17,17,17,187, + 42,150,26,17,17,12,150,150,17,219,132,132,17,17,17,17, + 187,42,150,42,17,219,12,17,17,219,219,132,219,17,12,219, + 17,187,26,150,26,17,219,12,17,150,219,219,17,150,17,17, + 17,17,187,26,150,26,17,219,150,150,17,17,219,132,17,17, + 17,17,17,187,26,150,26,17,219,12,17,150,219,219,17,219, + 12,17,17,17,187,26,150,42,17,17,17,12,17,219,219,17, + 17,17,17,17,17,187,26,150,26,17,219,12,17,150,219,219, + 132,132,17,150,219,219,12,26,150,183,17,12,12,150,243,144, + 144,244,244,244,244,36,244,36,244,36,244,36,244,36,36,36, + 36,244,36,36,36,244,36,36,244,244,36,244,36,244,36,244, + 36,36,244,36,244,36,244,36,244,244,36,244,244,244,244,244, + 244,244,244,244,244,244,244,244,244,244,244,244,144,244,244,244, + 140,140,169,140,140,140,74,140,140,140,140,140,74,140,140,140, + 140,140,140,144,140,74,140,71,140,74,140,140,140,140,114,140, + 74,114,140,140,140,140,140,169,140,169,188,188,169,169,188,188, + 188,169,169,169,169,169,188,188,188,188,169,140,127,39,207,39, + 207,207,207,207,39,188,39,207,39,207,39,39,207,39,207,188, + 39,39,39,207,39,39,188,207,188,188,188,188,188,39,207,207, + 207,207,188,207,39,188,207,39,207,39,39,188,39,127,188,188, + 39,188,207,39,207,207,207,188,188,207,39,207,39,207,188,39, + 207,188,188,188,207,207,188,207,188,207,188,207,127,188,207,207, + 188,188,188,127,207,207,207,188,207,188,207,207,207,207,188,207, + 127,207,207,207,207,207,207,207,143,207,207,143,207,236,89,143, + 207,143,236,143,143,127,143,236,236,236,143,143,236,236,108,59, + 26,26,78,211,17,187,132,219,17,26,26,17,12,17,219,132, + 17,17,132,219,17,12,26,150,219,17,26,17,17,12,17,219, + 150,17,17,219,219,17,12,26,150,219,17,26,17,219,12,17, + 219,132,17,219,132,219,17,12,26,150,219,219,26,17,219,12, + 17,219,17,12,219,132,219,17,17,26,150,219,219,26,17,17, + 12,17,219,17,17,17,219,219,17,187,26,150,219,17,26,26, + 17,17,17,219,219,17,219,132,219,17,12,26,150,219,17,26, + 17,17,12,17,219,219,12,17,132,219,17,187,26,150,219,17, + 26,17,17,12,17,219,132,17,17,219,219,17,12,26,150,219, + 17,26,17,17,12,17,219,17,17,17,219,183,17,12,26,150, + 219,17,26,17,17,12,17,219,17,17,219,219,183,17,12,26, + 150,219,17,26,17,17,12,17,219,17,17,219,132,219,17,12, + 26,150,219,219,26,17,17,17,17,26,17,17,219,132,219,17, + 17,26,150,219,17,26,17,17,12,17,219,17,12,219,132,219, + 17,17,26,150,219,17,26,17,17,17,17,219,132,17,17,132, + 219,17,12,26,150,219,17,26,26,17,17,17,219,17,12,17, + 132,219,17,17,26,150,219,17,26,17,17,17,17,219,132,12, + 219,132,219,17,12,26,150,219,219,26,17,17,12,17,219,150, + 17,17,132,219,17,17,26,150,219,17,26,17,17,12,17,219, + 17,17,17,219,26,26,166,26,150,219,17,17,150,12,141,244, + 144,244,244,244,36,244,244,244,36,244,244,36,244,244,36,244, + 36,244,36,244,36,36,244,36,36,36,244,36,244,244,36,244, + 244,36,244,36,244,36,36,36,36,244,244,36,244,36,244,244, + 244,244,244,244,244,144,244,144,244,244,244,244,144,244,144,144, + 169,140,39,169,140,169,140,140,140,140,140,39,140,74,140,140, + 140,140,140,140,140,74,140,140,140,140,140,74,140,74,140,114, + 74,140,169,140,169,169,140,169,140,169,169,169,188,169,169,169, + 188,188,169,188,169,169,169,169,169,169,188,39,207,39,207,207, + 39,89,39,207,39,207,39,39,207,207,207,39,207,39,207,39, + 188,188,188,39,188,207,39,207,39,188,188,207,188,39,39,39, + 188,207,39,207,207,127,207,188,207,207,207,127,188,39,207,207, + 207,188,188,188,188,188,39,188,188,188,188,188,188,207,207,188, + 207,207,207,207,188,207,207,207,188,207,188,207,188,188,188,207, + 188,207,188,207,188,188,207,127,207,218,218,207,188,207,188,207, + 188,207,127,207,143,207,143,207,207,207,143,207,207,143,207,236, + 207,143,89,236,236,236,236,236,236,236,236,89,236,236,108,47, + 26,26,183,211,166,187,187,122,42,122,122,122,122,42,0,122, + 122,122,0,122,42,42,42,187,0,42,122,122,0,122,42,0, + 122,122,122,122,122,42,42,42,187,122,42,122,122,0,122,42, + 0,122,42,0,0,122,42,42,42,187,122,42,122,122,0,122, + 42,0,122,122,122,0,122,42,42,42,187,0,42,122,122,0, + 122,42,0,122,42,122,122,122,42,42,42,187,122,42,122,122, + 122,122,42,122,122,42,0,0,122,42,42,42,187,0,122,122, + 0,0,122,42,122,122,122,122,122,122,42,42,42,187,0,42, + 122,122,0,122,42,0,122,122,122,122,122,42,42,42,187,0, + 42,122,122,0,122,42,122,122,122,122,122,122,42,78,42,187, + 0,122,122,122,0,122,42,122,122,122,122,122,122,42,122,42, + 187,0,42,122,122,0,122,122,122,122,122,122,0,122,42,122, + 42,187,122,42,122,0,0,122,42,0,122,122,122,0,122,42, + 42,42,187,0,42,122,122,0,122,42,0,122,122,122,0,122, + 42,42,42,187,0,42,122,122,0,122,42,0,122,122,122,0, + 122,42,42,42,187,122,42,122,122,0,122,42,0,122,122,0, + 0,122,42,42,42,187,0,122,122,122,0,122,42,0,122,122, + 122,0,122,42,122,42,187,122,42,122,122,0,122,42,0,122, + 122,122,0,122,42,42,42,187,0,122,122,122,0,122,42,122, + 122,122,122,122,122,26,42,42,187,42,219,26,12,17,150,114, + 144,244,244,244,244,36,244,244,36,244,36,244,36,244,36,244, + 36,244,36,244,36,244,36,244,244,36,244,36,244,244,36,244, + 244,244,36,244,36,244,244,244,36,244,244,244,244,244,244,244, + 244,244,244,244,244,244,144,244,244,244,144,244,144,244,244,144, + 140,169,140,140,39,140,140,169,140,74,74,140,74,114,140,140, + 140,140,140,140,140,114,140,140,140,140,74,140,140,140,74,100, + 140,74,140,140,140,140,140,140,169,140,140,39,169,39,169,169, + 169,169,188,169,188,188,188,39,188,169,169,140,39,39,207,207, + 89,39,89,207,39,39,39,207,39,39,207,207,39,207,127,188, + 188,188,188,207,207,39,207,39,207,207,207,188,207,207,207,207, + 207,188,207,188,188,188,127,207,188,188,188,39,207,207,188,39, + 188,39,207,188,207,207,207,207,207,207,188,188,207,188,188,207, + 188,188,188,188,207,188,188,207,207,188,207,188,207,207,207,188, + 207,207,207,188,207,207,207,207,207,207,207,207,207,207,207,207, + 207,207,207,207,207,207,207,218,218,218,207,207,143,207,207,207, + 207,143,143,143,236,236,143,236,143,236,236,143,236,236,108,59, + 0,183,122,12,0,42,183,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,42,122,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,42,122,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,42,122,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,42,122,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,42,122,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,42,122,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,42,122,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,42,122,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,122,42,122, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,122,42, + 122,0,0,0,0,0,0,0,0,0,0,0,0,0,0,122, + 42,122,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,42,122,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,42,122,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,42,122,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,42,122,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,122,42,122,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,42,122,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,42,122,122,122,122,42,42,132,114, + 244,244,244,244,244,244,244,244,244,244,36,244,244,36,244,36, + 244,36,244,36,244,244,36,244,36,244,244,244,244,244,36,244, + 36,244,244,244,36,244,36,244,36,244,36,244,244,244,244,244, + 244,244,144,144,244,244,144,244,244,244,144,244,144,244,144,144, + 140,169,169,140,39,100,140,169,114,39,140,140,74,140,140,140, + 140,140,140,140,74,140,140,140,140,39,140,140,169,39,114,169, + 39,140,169,140,140,169,140,140,169,169,140,39,140,39,39,39, + 169,169,169,169,169,169,169,169,39,169,188,39,207,39,207,39, + 89,207,39,39,39,39,39,39,39,39,207,207,127,188,207,207, + 39,188,188,188,207,188,207,39,188,188,207,207,207,39,207,207, + 207,188,207,207,207,207,188,207,207,207,207,188,188,207,207,188, + 188,188,39,188,188,188,188,188,207,207,207,188,207,188,188,207, + 207,207,188,188,207,207,188,207,207,207,207,207,207,188,207,188, + 188,207,207,188,188,188,188,207,207,207,207,207,188,207,207,207, + 207,207,207,236,207,143,218,236,218,218,218,207,218,236,143,218, + 207,207,236,143,143,236,143,236,143,143,236,143,153,153,108,59, + 42,26,187,12,183,0,26,0,42,122,42,122,42,122,42,122, + 122,42,122,42,243,219,26,17,0,42,122,42,122,122,42,122, + 42,122,122,122,42,243,219,26,17,0,42,122,42,122,42,122, + 122,42,122,122,122,42,243,219,26,17,0,42,122,42,122,42, + 122,42,122,122,42,122,42,243,219,26,12,0,42,122,42,122, + 122,42,122,122,122,42,122,42,243,219,26,17,0,42,122,42, + 122,122,42,122,122,42,122,122,42,243,219,26,12,122,26,122, + 42,122,122,42,122,42,122,122,122,42,243,219,26,17,0,42, + 122,42,122,122,42,122,42,122,122,122,42,243,219,26,12,0, + 42,122,42,122,122,42,122,42,122,122,122,42,12,219,26,12, + 122,42,122,42,122,122,42,122,42,122,122,122,42,12,219,26, + 12,0,42,122,42,122,42,122,42,122,122,42,122,42,12,219, + 26,17,0,42,42,122,122,42,122,42,122,42,122,122,42,243, + 219,26,17,0,42,122,42,122,42,122,42,122,122,42,122,42, + 243,219,26,17,0,42,122,42,122,42,122,42,122,122,122,122, + 42,243,219,26,17,0,42,42,122,122,42,122,42,122,42,122, + 122,42,243,219,26,12,122,42,122,42,122,122,42,122,42,122, + 122,122,42,12,219,26,17,0,42,122,42,122,122,42,122,42, + 122,122,122,42,243,219,26,12,122,42,122,42,122,122,42,122, + 42,122,42,122,42,243,183,26,187,122,26,12,150,219,141,114, + 144,244,244,244,244,244,244,244,244,244,244,244,36,244,244,244, + 36,244,244,244,244,244,244,244,244,244,244,244,36,244,244,36, + 244,244,36,244,244,36,244,244,244,244,244,244,244,244,244,244, + 244,144,144,244,144,144,244,144,144,244,144,244,244,144,244,144, + 188,169,39,169,140,39,140,169,169,140,140,140,39,169,140,140, + 169,140,140,140,39,169,140,140,140,140,140,169,39,140,169,140, + 140,140,140,140,169,140,169,140,140,140,169,140,169,169,169,169, + 39,169,39,169,140,169,169,169,169,188,188,127,39,207,127,207, + 207,207,89,89,39,39,39,39,207,207,39,39,39,39,39,188, + 188,188,39,207,39,188,188,207,207,207,207,39,207,207,39,188, + 188,207,188,188,188,188,207,188,188,188,188,207,207,188,207,207, + 207,188,207,207,207,207,207,207,188,207,207,207,188,207,188,188, + 188,188,207,188,188,188,207,207,207,207,207,207,188,207,188,207, + 207,188,207,207,207,207,207,188,188,207,207,207,207,207,207,207, + 207,89,207,207,207,207,207,218,218,218,218,143,218,218,207,236, + 236,236,143,236,236,143,143,143,236,236,236,236,236,58,184,47, + 187,109,111,139,187,42,254,42,49,139,8,8,139,8,8,139, + 8,8,139,139,101,17,26,12,42,49,139,139,8,8,211,8, + 139,8,8,139,139,101,17,26,12,42,49,139,8,139,139,8, + 8,139,8,8,139,139,101,17,26,12,42,49,139,8,8,139, + 8,8,139,8,8,139,139,101,17,26,12,42,49,139,139,8, + 8,211,8,139,8,8,139,139,101,17,26,12,42,49,139,139, + 8,8,211,8,139,8,8,139,139,101,17,26,12,42,49,139, + 139,8,8,8,139,211,8,8,139,139,101,17,26,12,42,49, + 139,139,8,8,8,139,211,8,8,139,139,101,17,26,12,42, + 49,139,139,8,8,211,8,139,8,8,139,139,67,17,26,12, + 42,49,139,139,8,8,211,8,139,8,8,139,139,49,17,26, + 12,42,49,139,139,8,139,8,8,139,8,8,139,139,67,17, + 26,12,42,49,139,139,8,139,8,8,139,8,8,139,139,101, + 17,26,12,42,49,139,139,8,139,8,8,139,8,8,139,139, + 101,17,26,12,42,49,139,8,139,139,8,8,139,8,8,139, + 139,101,17,26,12,42,49,139,8,8,139,8,8,139,8,8, + 139,139,101,17,26,12,42,49,139,139,8,139,211,8,139,8, + 8,139,139,49,17,26,12,42,49,139,139,8,8,8,139,211, + 8,8,139,139,101,17,26,12,42,49,139,139,8,8,211,211, + 211,8,8,139,139,101,12,26,12,42,12,182,7,141,8,114, + 114,244,144,244,244,244,244,244,244,244,244,244,244,244,244,244, + 244,244,244,36,244,36,244,244,244,36,244,244,244,244,244,36, + 244,244,244,36,244,244,36,244,244,244,244,244,244,244,244,244, + 144,244,244,144,244,244,144,144,244,244,144,144,244,144,244,144, + 169,169,188,188,169,169,169,140,169,169,169,140,169,169,188,169, + 169,169,169,140,39,169,169,169,169,39,169,140,169,169,39,169, + 39,39,169,140,169,140,39,39,140,140,169,39,39,39,39,140, + 39,169,39,188,39,188,39,39,39,188,188,188,188,207,207,207, + 207,39,39,114,39,207,39,207,39,207,207,207,207,188,207,207, + 207,188,188,188,207,207,188,188,188,188,207,188,188,207,207,207, + 188,207,207,207,207,207,207,207,207,207,188,188,207,188,207,39, + 207,188,188,188,188,188,188,207,188,188,188,207,188,207,207,207, + 207,188,207,207,207,207,188,218,188,218,188,218,207,207,207,207, + 207,207,207,207,207,207,207,207,39,207,207,207,207,207,207,39, + 207,207,207,143,207,207,207,207,236,236,218,236,218,218,218,218, + 207,236,207,143,143,236,236,143,143,143,143,143,143,159,240,59, + 187,109,187,109,150,42,109,122,101,211,139,8,211,8,8,8, + 211,8,211,139,101,150,150,211,42,101,8,211,211,8,211,8, + 8,211,8,139,8,67,150,150,211,42,101,8,8,8,211,8, + 8,211,8,8,139,8,67,150,150,211,42,101,8,139,8,211, + 8,8,8,211,8,211,139,101,150,150,243,42,101,8,211,211, + 8,211,8,8,211,8,211,139,101,150,150,109,42,101,8,211, + 211,8,211,8,8,211,8,211,139,101,150,150,243,122,101,8, + 211,211,211,8,8,211,8,8,139,8,67,150,150,211,42,101, + 8,211,211,211,8,8,211,8,8,139,8,67,150,150,243,42, + 101,8,211,211,8,211,8,8,211,8,139,8,101,150,150,243, + 42,101,8,211,211,8,211,8,8,211,8,8,211,101,150,150, + 243,42,101,8,211,8,211,8,8,8,211,8,211,8,67,150, + 150,243,42,139,8,211,8,211,8,8,8,211,8,211,139,101, + 150,150,211,42,101,8,211,8,211,8,8,8,211,8,211,139, + 101,150,150,211,42,101,8,8,8,211,8,8,211,8,8,139, + 8,67,150,150,109,42,101,8,139,8,211,8,8,8,211,8, + 211,139,101,150,150,243,42,101,8,211,8,8,8,8,211,8, + 8,8,211,101,150,150,243,42,101,8,211,211,211,8,8,211, + 8,8,139,8,67,150,150,243,42,101,8,211,211,8,8,8, + 211,8,8,8,139,101,150,150,8,42,243,8,182,141,141,114, + 144,244,144,144,144,244,144,244,244,244,244,244,36,244,244,244, + 36,244,244,244,244,244,244,244,244,244,244,36,244,244,244,244, + 36,244,244,244,244,244,244,244,244,36,244,244,144,244,244,244, + 244,144,144,244,144,144,244,144,144,144,144,244,144,144,244,144, + 39,169,39,169,39,169,169,169,169,169,39,169,140,169,169,140, + 169,140,169,169,169,169,169,169,169,169,169,169,39,39,169,169, + 169,169,169,169,39,169,140,140,39,169,39,140,140,169,140,188, + 169,169,39,188,188,188,188,169,188,188,188,207,188,188,127,39, + 39,207,207,89,89,39,39,207,207,39,207,39,39,207,39,39, + 207,207,207,207,39,188,207,207,207,207,188,207,207,207,188,207, + 207,188,188,188,127,207,207,207,188,207,207,207,188,207,188,207, + 188,207,207,207,207,207,207,188,207,207,207,188,207,207,188,188, + 188,207,207,188,207,188,207,207,207,188,207,207,207,207,127,207, + 207,188,207,207,207,39,207,207,207,207,207,207,207,207,89,89, + 89,207,207,207,207,236,207,218,218,218,207,218,218,236,143,207, + 143,207,207,143,236,207,143,143,236,236,236,236,236,184,108,47, + 17,141,187,243,111,42,109,26,101,8,211,8,211,211,211,8, + 211,8,8,8,139,150,17,243,122,49,8,211,211,8,211,8, + 211,8,211,8,8,139,150,17,243,122,49,8,211,211,211,8, + 211,211,8,211,8,8,139,150,17,243,122,49,8,211,8,211, + 211,211,8,211,8,8,8,8,150,17,211,122,49,8,211,211, + 8,211,211,8,211,8,8,8,139,150,17,8,122,49,8,211, + 211,8,211,211,8,211,8,8,8,8,150,17,211,26,101,8, + 211,8,211,8,211,211,8,211,8,8,139,150,17,243,42,101, + 211,8,211,8,211,8,211,211,8,8,211,8,150,17,211,122, + 49,8,211,211,8,211,211,8,211,8,8,139,8,150,17,211, + 42,101,8,211,211,8,211,8,211,8,211,8,8,8,150,17, + 211,122,49,8,211,8,211,211,8,211,8,211,8,8,139,150, + 17,211,122,49,8,211,8,211,211,109,8,211,8,8,8,139, + 150,17,243,122,49,8,211,8,211,211,211,8,211,8,8,8, + 139,150,17,243,122,49,211,211,8,211,211,8,211,211,8,8, + 211,8,150,17,8,122,49,8,211,8,211,211,211,8,211,8, + 8,8,139,150,17,109,42,101,8,211,211,8,211,211,8,211, + 211,8,8,139,150,17,211,42,101,211,8,211,8,211,8,211, + 211,8,8,8,139,150,17,109,42,101,8,211,8,211,8,211, + 8,211,211,8,8,139,150,17,254,183,12,182,67,8,8,114, + 144,144,144,244,244,144,244,144,244,244,244,244,244,244,244,244, + 244,244,244,244,244,244,244,244,244,244,244,244,244,244,36,244, + 244,244,244,36,244,244,36,244,244,244,244,244,144,144,144,244, + 144,244,144,144,144,144,244,144,144,244,144,144,244,144,244,144, + 39,169,39,169,39,169,169,169,169,169,169,169,169,140,188,169, + 169,169,39,169,39,39,39,169,169,39,169,169,169,188,39,169, + 169,39,169,169,39,169,169,169,39,140,140,169,140,188,140,169, + 39,169,39,39,39,188,188,188,188,188,188,207,188,188,188,207, + 207,207,39,39,39,89,207,207,207,39,207,207,39,207,207,39, + 207,39,188,207,207,188,188,188,188,207,188,188,188,207,188,207, + 207,207,207,207,188,218,207,218,207,207,207,207,207,207,207,207, + 207,188,188,188,188,218,207,207,207,207,207,188,188,207,207,207, + 188,218,207,218,207,188,188,207,207,207,207,207,207,207,188,207, + 207,207,207,207,39,207,39,89,207,207,207,89,207,207,207,207, + 89,207,89,207,143,207,89,207,218,218,207,236,207,89,207,207, + 207,207,207,207,236,89,89,143,236,236,236,143,143,58,240,47, + 26,109,183,109,111,91,111,122,101,211,211,211,109,187,8,109, + 187,211,187,139,8,243,17,8,122,139,211,211,8,211,109,187, + 211,109,187,211,8,139,243,26,211,122,139,139,211,211,187,211, + 187,211,187,211,187,211,139,150,26,211,122,139,211,211,211,109, + 187,8,109,187,211,109,139,67,12,17,8,122,101,211,211,8, + 211,187,211,187,211,187,211,211,67,12,17,8,122,139,211,211, + 8,211,187,211,187,211,8,109,139,67,12,17,243,122,101,139, + 211,211,187,211,8,109,187,211,187,211,139,150,17,243,122,101, + 211,211,211,187,211,8,109,187,211,187,139,139,243,219,8,122, + 139,211,211,8,211,187,211,187,211,187,211,139,139,243,219,243, + 122,101,139,8,211,211,187,211,211,8,211,109,139,67,12,26, + 8,122,139,139,211,211,187,211,109,187,211,211,187,211,139,150, + 26,8,122,139,139,211,211,8,211,187,211,187,211,187,139,8, + 243,26,211,122,139,139,211,211,187,211,187,211,187,211,187,139, + 139,150,17,8,122,139,211,211,211,109,8,109,109,187,8,109, + 139,139,243,17,211,122,139,211,211,211,109,187,8,109,187,211, + 187,139,8,243,17,243,122,101,139,8,211,109,187,211,8,109, + 8,109,8,67,12,17,243,122,101,211,211,211,187,211,187,211, + 187,211,109,8,139,150,17,243,122,101,211,211,211,211,8,211, + 109,187,211,187,8,67,12,26,8,219,12,243,141,150,141,114, + 114,244,144,144,244,144,244,144,144,244,144,244,244,244,244,244, + 244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244, + 244,244,36,244,244,244,244,244,244,244,244,144,244,144,244,144, + 244,144,244,144,244,244,244,144,144,144,144,244,114,144,244,144, + 169,169,169,169,169,39,169,169,169,169,169,169,169,169,169,169, + 169,169,169,188,169,169,169,39,39,169,169,169,188,169,169,188, + 169,169,39,39,169,39,188,169,169,39,39,39,188,140,169,39, + 140,39,39,39,39,39,188,188,39,39,39,188,188,188,207,39, + 207,39,127,39,89,39,207,207,207,207,207,207,207,39,207,207, + 188,207,207,188,188,207,207,207,207,188,207,207,207,207,207,207, + 207,188,188,218,218,207,218,207,218,218,207,218,188,207,188,188, + 188,207,218,218,218,188,218,188,218,188,218,207,218,207,218,188, + 207,188,207,188,207,207,207,188,207,207,207,207,207,188,207,207, + 207,207,207,207,89,89,89,39,207,207,89,207,89,89,89,89, + 207,89,207,89,207,207,207,207,207,236,207,207,207,207,236,207, + 143,236,236,127,127,127,143,89,143,236,236,236,236,58,108,64, + 26,111,26,150,254,42,182,26,101,8,91,211,211,211,211,8, + 139,8,139,8,67,12,26,182,42,101,211,8,91,211,211,8, + 211,8,211,211,211,67,12,17,8,42,101,211,211,211,8,211, + 211,8,139,8,139,8,139,12,17,211,42,101,211,91,211,211, + 211,211,8,211,8,211,8,139,150,26,182,42,101,139,91,211, + 211,211,8,139,8,211,8,8,139,150,26,182,42,101,139,91, + 211,211,211,8,211,211,187,211,8,139,150,26,211,42,101,211, + 211,211,8,91,109,8,139,8,139,8,139,12,17,211,26,101, + 211,8,211,211,91,109,8,211,8,139,211,67,12,26,182,42, + 101,139,91,211,211,211,8,211,8,211,211,8,67,12,26,211, + 42,101,211,211,211,8,91,211,109,8,187,211,211,139,150,17, + 182,42,101,211,211,211,8,211,211,8,211,8,139,8,139,12, + 17,182,42,101,211,211,91,8,211,211,8,139,8,139,8,67, + 12,17,8,42,101,211,211,211,8,211,211,8,139,8,139,8, + 67,12,26,182,42,101,211,211,8,211,91,8,211,211,8,211, + 8,67,12,26,211,42,101,211,91,211,211,211,211,8,139,8, + 139,8,67,12,26,211,42,101,211,211,8,139,91,109,109,8, + 109,211,211,139,150,26,211,26,101,211,211,211,8,211,211,8, + 211,211,211,8,139,12,26,211,26,101,211,8,211,91,211,187, + 211,8,211,139,211,139,150,17,182,42,12,8,8,243,182,114, + 114,144,144,144,144,244,144,244,144,244,144,244,244,244,244,244, + 244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244, + 244,244,244,244,244,244,244,244,244,244,244,144,244,144,144,144, + 244,144,144,144,144,244,144,244,244,144,244,144,244,144,144,144, + 188,188,188,169,169,188,188,169,169,188,169,169,169,169,169,169, + 39,169,169,188,188,188,169,169,169,188,169,169,169,188,169,188, + 188,169,169,188,169,169,39,39,169,169,169,169,188,39,169,39, + 39,39,39,169,169,39,39,188,188,39,39,207,39,188,127,188, + 207,207,39,207,89,127,207,207,207,39,39,207,207,39,207,207, + 188,188,207,207,188,188,207,207,207,188,188,207,207,207,207,207, + 207,218,188,207,207,207,207,188,207,218,207,218,218,218,218,207, + 218,207,207,207,207,207,218,207,218,207,218,207,218,207,207,218, + 207,207,207,207,207,207,207,207,207,207,207,207,89,207,207,207, + 39,207,89,207,39,207,89,89,89,207,89,89,236,207,236,89, + 207,207,207,207,207,143,207,207,143,207,207,143,207,207,89,89, + 207,207,89,236,89,127,127,89,127,89,236,236,143,236,240,47, + 26,109,183,12,111,26,109,162,101,67,211,211,91,8,109,187, + 211,187,139,187,67,150,26,8,78,101,139,139,211,8,91,8, + 211,187,211,8,91,67,150,17,243,122,101,139,211,91,211,211, + 187,8,211,109,211,8,67,150,17,243,122,101,67,211,8,211, + 91,8,109,109,8,211,8,67,150,26,8,122,101,182,139,8, + 211,91,8,109,187,211,211,8,67,150,26,8,122,101,182,139, + 8,211,91,8,211,211,8,211,8,67,150,17,8,122,101,139, + 211,211,211,211,8,187,211,109,211,8,67,150,17,243,122,101, + 139,211,211,139,8,211,8,109,187,139,91,67,150,26,8,122, + 101,182,139,8,211,91,8,211,187,211,8,187,67,150,17,8, + 122,101,139,211,91,139,8,211,91,211,211,8,8,67,150,26, + 243,122,101,139,211,91,211,211,187,211,8,109,211,8,67,150, + 26,8,122,101,139,211,8,211,211,187,8,109,187,139,8,67, + 150,17,243,122,101,139,211,211,211,91,8,187,211,187,139,91, + 67,150,26,8,122,101,139,211,91,139,8,211,109,187,211,211, + 91,67,150,17,243,122,101,67,211,8,211,91,8,187,211,187, + 139,8,67,150,17,8,122,101,139,211,91,8,8,211,187,211, + 8,211,8,139,150,17,8,122,101,139,211,211,211,91,8,187, + 211,8,211,8,67,150,17,8,122,101,139,211,8,211,211,8, + 211,8,187,139,8,139,150,26,141,219,17,243,8,150,141,114, + 114,114,144,144,144,144,144,244,144,144,244,144,144,244,144,244, + 244,244,244,244,244,144,244,244,244,244,244,244,244,244,244,244, + 244,244,244,244,244,244,244,244,244,244,144,244,144,144,244,144, + 144,244,144,144,144,244,144,244,144,144,244,244,144,144,244,244, + 188,188,188,188,188,169,169,169,169,169,169,169,169,169,169,169, + 169,169,188,169,169,169,188,169,188,169,188,169,188,169,188,169, + 169,188,169,169,169,169,169,169,39,188,39,39,169,39,39,39, + 39,39,140,39,39,39,39,39,207,188,207,188,207,39,39,39, + 39,207,39,207,39,89,207,207,207,207,207,39,207,207,207,207, + 207,207,188,188,207,218,207,188,207,207,207,207,188,218,218,207, + 207,207,207,207,218,188,218,218,218,218,218,218,218,207,207,218, + 207,218,188,207,218,218,207,218,207,218,207,207,207,207,207,207, + 207,207,207,207,207,207,207,39,39,207,207,207,207,89,207,89, + 89,89,207,207,89,89,207,89,89,89,89,143,207,89,207,236, + 89,89,89,89,89,207,207,207,207,89,207,89,207,207,143,207, + 127,207,143,207,143,89,89,143,89,236,89,236,236,159,108,64, + 26,111,42,109,109,26,224,42,101,211,8,211,8,211,8,139, + 8,139,8,211,67,150,17,211,42,101,211,8,211,211,211,211, + 8,211,211,8,211,67,132,17,211,78,101,8,139,8,211,211, + 139,187,109,8,211,211,139,150,17,8,42,101,8,211,211,8, + 211,109,8,211,109,109,211,139,150,17,211,42,101,211,8,211, + 8,211,109,8,211,8,109,211,139,150,17,211,42,101,8,211, + 8,211,139,187,211,187,109,211,211,139,132,17,8,42,101,8, + 211,211,8,211,8,211,211,8,211,211,139,17,17,8,42,101, + 211,211,211,8,211,187,211,8,211,8,8,67,150,17,211,42, + 101,8,211,8,211,211,8,211,211,8,211,211,67,132,17,211, + 42,101,211,8,211,8,211,187,211,8,8,211,211,139,187,17, + 243,42,101,8,139,8,211,211,109,8,109,8,211,211,139,150, + 17,243,42,139,139,8,91,211,139,187,211,8,211,109,211,139, + 132,17,243,42,101,187,211,211,8,139,8,211,8,211,8,8, + 67,150,17,211,42,101,211,8,211,8,211,187,211,8,211,8, + 211,67,150,17,8,42,101,8,211,211,8,139,187,139,8,139, + 187,211,139,132,17,211,42,101,211,8,139,211,211,211,8,211, + 187,211,211,67,150,17,243,42,101,8,211,211,8,211,211,211, + 8,109,211,211,139,132,17,211,42,101,211,211,211,211,211,211, + 211,8,211,8,211,67,150,17,243,219,150,243,182,8,141,89, + 114,144,114,144,144,144,144,144,144,144,244,144,144,144,244,144, + 144,144,244,144,244,244,144,244,244,144,244,244,244,244,244,244, + 244,244,244,244,244,244,244,144,244,244,144,244,144,144,144,144, + 244,144,144,244,144,144,144,244,144,144,144,244,144,244,144,144, + 169,218,218,188,188,188,188,188,169,169,169,169,169,169,188,169, + 169,169,169,39,39,169,188,169,169,169,169,169,169,169,39,169, + 169,188,169,39,39,188,188,169,169,169,169,39,169,39,39,140, + 140,39,39,39,39,39,39,39,39,39,188,188,188,188,207,39, + 207,207,39,207,207,207,39,207,127,188,207,127,207,39,207,207, + 188,207,207,188,207,188,218,207,218,218,188,207,207,207,218,218, + 207,218,218,207,218,188,207,207,207,218,236,207,218,218,207,207, + 207,218,218,207,207,207,188,207,207,207,207,207,207,207,207,207, + 207,89,207,207,207,207,89,89,207,207,207,207,207,207,39,207, + 207,207,89,207,207,89,143,89,236,207,89,89,236,89,207,236, + 236,236,89,127,207,127,89,207,127,207,207,89,207,207,207,89, + 89,207,207,89,127,89,89,143,127,236,143,89,236,159,240,47, + 17,109,42,243,111,26,109,122,101,139,211,211,139,211,109,109, + 8,109,211,8,139,150,17,109,122,101,139,211,211,211,139,111, + 211,211,8,8,8,139,150,26,211,122,101,139,211,211,8,211, + 211,139,8,109,211,8,139,150,17,109,122,101,139,211,211,8, + 139,109,109,211,211,8,8,139,150,17,243,122,101,139,211,211, + 211,139,211,211,211,211,211,8,139,150,17,109,122,101,139,211, + 211,211,139,211,139,139,8,211,8,139,150,17,109,122,101,139, + 211,211,211,211,109,211,211,211,8,8,67,150,17,109,122,101, + 139,211,211,211,211,211,211,211,211,211,8,67,132,17,243,122, + 101,139,211,211,139,211,109,211,211,211,211,91,67,150,17,109, + 122,101,139,211,139,139,139,211,211,211,109,211,8,67,150,12, + 109,122,101,139,211,211,8,211,211,211,211,109,211,8,139,150, + 12,109,122,101,139,211,139,8,139,211,211,211,211,211,8,139, + 150,17,109,122,101,139,211,211,211,211,109,139,109,211,211,8, + 139,150,219,109,122,101,139,139,139,211,211,211,211,211,211,8, + 8,139,132,17,109,122,101,139,211,211,211,139,211,211,211,211, + 211,8,139,150,219,109,122,101,139,211,211,211,211,211,211,211, + 211,211,91,67,132,17,109,122,101,139,211,211,139,211,211,109, + 211,211,211,8,139,150,17,109,122,101,139,211,211,8,211,109, + 211,211,109,211,91,101,150,26,8,219,17,12,8,150,67,181, + 144,144,114,144,144,144,144,144,144,144,244,244,144,144,144,144, + 244,144,144,244,144,144,244,244,144,244,244,144,244,244,244,244, + 244,244,244,244,144,244,144,244,244,244,244,144,144,244,144,144, + 144,144,144,244,144,244,144,144,144,244,144,244,144,244,144,244, + 218,169,188,169,188,169,169,169,188,169,39,169,169,140,169,39, + 39,140,140,169,169,39,169,39,39,39,39,169,39,39,169,188, + 169,169,39,169,169,169,169,140,39,39,39,169,39,169,169,39, + 39,39,39,39,39,39,39,39,207,188,188,188,188,207,127,207, + 39,207,207,207,127,207,207,39,207,207,188,188,188,207,207,207, + 207,188,188,207,188,218,207,218,207,207,218,218,207,207,188,207, + 207,207,207,218,218,218,218,218,218,236,207,218,207,236,218,218, + 207,207,218,207,218,207,207,207,207,207,236,207,207,207,207,89, + 207,207,89,89,89,89,207,207,89,89,89,89,89,89,89,89, + 89,89,89,89,89,207,89,207,236,89,236,236,207,143,89,236, + 89,143,236,89,89,89,207,207,207,207,127,207,89,207,207,207, + 143,89,89,89,89,127,127,89,89,89,89,236,127,236,83,47, + 26,111,183,109,111,26,211,122,49,139,211,211,211,8,91,211, + 211,211,211,211,67,132,219,211,122,49,211,211,211,211,8,211, + 211,211,211,211,211,67,132,219,211,122,49,211,211,211,211,139, + 61,109,211,8,211,211,67,132,219,211,78,67,139,211,211,211, + 211,91,211,211,211,211,211,67,132,219,211,122,49,211,211,211, + 139,8,91,211,187,211,211,8,67,132,219,211,122,49,211,211, + 139,8,8,211,109,109,8,211,211,67,132,219,211,42,139,139, + 211,211,211,8,91,109,109,211,211,211,139,132,219,211,122,49, + 211,211,211,211,211,211,211,211,8,211,211,8,132,219,211,42, + 67,139,211,211,8,211,211,109,211,8,211,139,8,17,219,211, + 122,49,139,211,211,8,8,211,109,211,8,211,211,139,132,26, + 211,78,67,211,139,211,211,211,61,211,8,211,211,211,67,132, + 219,211,122,67,139,139,8,139,139,91,211,109,8,211,211,67, + 132,26,211,42,49,139,211,139,8,211,211,109,211,109,211,8, + 67,132,219,211,122,67,211,211,8,211,211,211,211,139,187,211, + 211,67,132,219,211,78,49,211,139,211,211,211,211,109,8,211, + 211,8,67,132,219,211,78,49,211,211,8,139,8,61,211,211, + 8,139,8,139,12,219,211,42,67,139,211,211,8,211,109,211, + 8,211,211,8,67,132,219,211,122,67,139,211,211,211,211,211, + 109,211,8,139,8,67,150,219,211,26,12,12,243,219,141,89, + 114,144,144,144,144,144,144,144,144,144,144,144,144,244,144,144, + 244,144,144,144,244,144,144,244,144,144,244,144,144,244,144,144, + 244,244,144,244,144,244,144,144,144,244,144,244,244,144,144,144, + 244,144,144,144,114,244,144,244,144,144,244,144,144,244,144,144, + 218,88,218,218,218,218,169,169,188,169,188,188,188,169,169,169, + 169,188,169,140,169,39,169,169,169,169,169,169,169,169,169,39, + 169,169,188,188,169,169,188,169,39,188,188,169,39,39,169,169, + 169,169,39,39,39,39,188,39,39,207,188,207,127,188,188,188, + 127,207,39,207,207,207,207,207,188,207,207,207,207,188,207,207, + 207,207,207,207,207,207,207,218,218,207,207,218,218,218,218,218, + 207,218,207,207,236,207,236,218,218,218,218,218,218,236,218,218, + 218,236,207,207,218,236,207,207,207,207,236,236,236,207,207,207, + 207,207,207,207,207,89,89,89,89,89,89,236,236,89,89,207, + 207,143,207,207,236,236,236,89,236,89,236,89,236,236,207,236, + 236,143,89,236,89,127,207,127,89,89,207,39,89,89,89,89, + 127,127,127,89,89,89,127,89,127,119,89,119,236,236,108,47, + 26,187,42,243,111,26,109,122,101,139,139,139,139,139,139,211, + 211,139,211,139,139,12,26,211,122,101,101,139,139,139,139,211, + 211,211,211,139,211,101,150,26,211,122,101,139,139,139,211,139, + 139,211,211,139,139,211,139,12,26,109,42,101,139,139,139,139, + 139,139,211,211,211,139,211,139,12,26,211,122,101,101,139,139, + 211,139,139,139,139,211,139,139,139,12,26,211,122,101,139,139, + 139,211,139,61,139,211,211,139,139,139,150,26,109,122,101,101, + 139,139,139,139,139,139,211,211,139,139,139,12,26,211,122,101, + 139,139,139,139,139,211,211,211,211,139,139,101,12,26,109,122, + 101,139,139,139,139,211,139,211,211,211,139,139,67,12,26,211, + 122,101,139,139,211,139,211,139,211,211,139,139,139,139,150,26, + 109,42,101,139,139,139,139,139,139,211,211,139,139,139,139,17, + 26,211,122,101,139,139,211,139,139,139,139,211,211,139,139,139, + 150,26,109,122,101,139,139,139,211,139,211,211,139,211,139,211, + 101,12,26,211,42,101,139,139,139,139,211,211,211,139,139,211, + 139,139,12,26,109,122,101,139,139,8,139,211,139,211,211,139, + 139,139,139,12,26,109,122,101,101,139,139,139,139,139,139,211, + 211,139,139,67,12,26,109,122,101,139,139,139,139,139,211,211, + 211,139,139,211,101,12,26,211,122,101,139,139,139,139,139,91, + 139,211,211,139,139,139,150,219,182,17,150,12,243,150,141,114, + 114,114,114,114,144,144,144,144,144,144,144,144,144,144,244,144, + 144,144,244,144,144,244,144,244,244,144,144,244,144,144,144,244, + 144,244,144,144,244,144,244,144,244,144,144,244,144,244,144,144, + 244,144,244,144,244,144,144,144,144,244,144,244,144,244,144,244, + 218,218,218,218,188,88,218,218,88,218,169,169,169,169,169,169, + 188,169,169,188,39,169,39,188,188,39,39,169,188,39,188,169, + 39,188,169,169,188,188,169,188,169,169,188,188,188,188,188,188, + 188,188,39,188,188,188,39,188,207,188,207,188,188,207,207,207, + 127,39,207,39,207,207,207,207,207,188,188,207,218,207,207,207, + 218,218,218,218,207,218,188,188,207,218,218,218,207,218,207,218, + 236,207,218,218,207,218,218,207,207,218,236,236,207,218,236,207, + 236,207,218,207,89,207,207,207,207,207,207,207,207,236,207,236, + 236,207,89,89,89,207,89,207,236,236,236,89,89,89,143,89, + 89,89,89,236,207,207,89,236,89,143,236,236,89,236,236,207, + 236,236,236,127,143,89,89,89,89,127,127,89,89,127,127,127, + 89,89,89,236,236,89,236,119,119,236,143,236,236,159,240,59, + 26,111,219,187,111,26,109,78,8,26,91,26,91,187,26,91, + 26,91,26,91,182,132,12,12,122,8,91,26,91,91,26,91, + 91,26,91,26,91,8,132,17,243,42,8,26,91,26,91,187, + 26,91,26,91,26,91,8,132,12,12,122,8,91,26,91,26, + 91,91,26,91,91,26,91,182,132,12,12,122,8,91,26,91, + 91,187,26,91,26,91,26,91,182,132,17,243,42,8,91,26, + 91,91,91,187,91,26,91,26,91,8,17,12,243,42,8,91, + 26,91,91,187,91,26,91,26,91,26,182,150,17,243,42,8, + 91,26,91,91,26,91,91,26,91,26,91,182,132,12,243,42, + 8,91,26,91,91,91,26,91,26,91,26,91,182,150,17,243, + 42,187,17,91,91,26,91,91,26,91,26,91,26,182,132,12, + 12,122,8,91,26,91,26,91,26,91,26,91,26,91,8,132, + 12,243,42,187,187,26,91,26,187,26,91,26,91,26,91,182, + 132,12,243,42,8,26,91,91,26,91,26,91,26,91,26,91, + 182,132,17,243,162,8,187,26,91,91,91,26,91,26,91,26, + 91,8,132,12,8,122,8,91,26,91,91,91,26,91,26,91, + 26,91,8,132,17,8,122,8,91,26,91,26,187,91,26,91, + 26,12,26,182,132,12,243,42,8,91,26,91,91,26,91,91, + 26,91,26,91,8,132,17,243,42,8,91,26,91,91,91,187, + 91,26,91,26,26,182,150,26,12,26,12,243,243,17,235,119, + 114,140,144,140,144,114,144,144,114,144,144,144,144,144,144,144, + 144,144,144,244,144,144,144,144,144,244,144,144,144,144,144,144, + 144,244,144,144,144,144,144,144,144,244,144,244,144,144,244,144, + 244,144,244,144,144,244,244,144,144,144,114,244,144,244,144,144, + 218,218,218,218,218,218,88,218,218,218,218,88,218,188,188,169, + 188,188,169,169,188,169,169,169,169,169,188,169,188,188,188,188, + 169,188,188,188,188,188,188,188,188,188,188,188,188,218,188,188, + 188,169,188,188,188,188,188,188,188,188,188,207,188,188,127,188, + 207,188,207,127,207,207,207,207,207,207,207,207,207,218,207,89, + 207,188,207,218,207,218,218,218,207,207,218,218,236,218,207,218, + 218,207,218,218,236,218,236,218,207,207,207,236,236,207,236,207, + 207,236,236,236,207,236,236,89,207,89,89,236,207,236,89,207, + 89,236,207,236,236,236,89,89,236,236,236,236,236,236,89,207, + 143,89,236,236,89,143,89,143,89,207,89,236,143,89,236,236, + 89,236,236,89,236,89,127,89,89,89,89,89,119,89,89,89, + 236,236,127,236,236,236,143,236,236,119,143,236,143,159,108,44, + 26,187,183,12,187,26,109,0,219,17,219,219,26,187,187,183, + 26,219,219,26,8,12,187,8,0,219,219,219,219,183,42,219, + 183,26,219,219,219,8,12,26,211,0,219,17,219,219,26,219, + 187,183,26,219,219,17,8,12,187,8,0,219,219,219,219,219, + 42,187,183,26,219,219,26,8,187,187,211,0,219,219,219,219, + 26,187,183,187,42,219,219,26,8,12,26,211,0,219,219,219, + 219,219,219,219,187,42,219,219,219,8,17,26,8,0,219,219, + 219,219,26,42,187,183,26,219,219,26,8,12,26,243,0,26, + 219,26,26,219,42,219,183,219,219,219,26,8,187,26,8,0, + 219,219,219,42,219,42,187,183,219,219,219,26,8,12,26,8, + 0,26,17,219,219,183,42,187,183,26,219,219,26,8,12,187, + 8,0,219,219,219,219,219,26,219,26,42,26,219,219,8,12, + 26,8,0,26,187,219,219,26,91,183,42,26,219,219,26,8, + 17,26,8,0,219,219,219,219,219,187,183,26,219,219,219,26, + 8,12,26,8,0,26,187,219,219,219,42,187,183,26,219,219, + 219,8,12,26,8,0,219,219,219,219,219,42,219,187,183,42, + 219,219,8,12,26,211,0,219,219,219,219,26,42,187,183,26, + 26,187,26,8,17,26,8,0,219,219,219,219,219,42,26,183, + 26,219,219,17,8,12,26,8,0,26,219,26,26,219,42,219, + 187,183,26,219,26,8,150,187,211,187,187,187,243,17,99,181, + 114,114,114,114,140,114,144,144,114,144,144,144,144,144,144,144, + 144,144,144,144,244,144,144,144,144,144,144,144,144,144,144,144, + 144,144,144,144,144,144,144,244,144,144,144,144,244,144,144,144, + 244,144,144,244,144,144,244,244,144,244,144,244,244,114,144,244, + 218,218,218,218,218,218,218,218,88,88,218,218,169,88,218,218, + 88,218,218,188,88,218,218,218,218,218,169,218,169,169,169,188, + 188,188,188,188,188,218,88,218,218,169,218,88,218,188,218,188, + 188,188,188,188,207,127,188,188,207,188,207,127,207,207,207,207, + 127,207,188,207,127,207,207,207,207,207,188,207,207,207,218,188, + 207,207,218,207,218,218,207,207,218,218,236,207,207,207,218,218, + 236,218,236,236,207,236,218,207,236,218,218,218,207,236,207,218, + 236,236,207,207,236,236,89,207,89,207,236,236,236,236,236,89, + 236,89,236,89,89,89,236,236,89,119,236,236,89,236,207,89, + 236,236,236,89,236,89,207,89,236,236,236,207,89,143,89,207, + 207,143,89,236,127,236,89,143,89,89,89,89,127,89,89,143, + 127,143,236,236,143,236,236,236,119,143,119,236,119,159,108,64, + 26,111,26,211,126,187,109,0,139,139,139,139,67,139,139,139, + 139,139,139,139,8,132,219,211,0,211,101,139,139,139,139,139, + 139,139,139,139,139,139,150,219,243,0,139,139,139,139,67,139, + 139,139,139,139,139,139,139,132,219,211,0,211,101,139,139,139, + 67,139,139,139,139,139,139,8,150,219,243,0,211,101,139,139, + 67,139,139,139,139,139,139,139,8,150,219,243,0,211,139,139, + 139,67,139,139,139,139,139,139,139,139,150,219,211,0,211,101, + 139,139,67,182,139,139,139,139,139,139,139,150,219,211,0,139, + 139,67,67,139,67,139,139,139,139,139,139,8,150,219,211,0, + 211,139,139,67,139,67,139,139,139,139,139,139,8,132,219,211, + 0,211,67,139,139,139,139,67,139,139,139,139,139,139,132,219, + 211,0,139,101,139,139,139,67,139,67,67,139,139,139,139,132, + 219,211,0,139,67,139,139,182,182,139,67,139,139,139,139,8, + 150,219,211,0,139,139,139,139,139,139,139,67,139,139,101,139, + 8,150,219,211,0,211,139,139,139,139,139,67,139,139,139,139, + 139,139,132,219,211,0,8,67,139,139,139,139,67,139,139,139, + 139,139,139,150,219,243,0,211,139,139,139,67,67,139,139,182, + 139,139,139,139,150,219,211,0,211,139,139,139,139,67,67,139, + 139,139,139,139,139,150,219,211,0,211,139,67,182,67,139,139, + 139,139,139,101,139,139,12,219,182,12,12,243,12,150,141,119, + 114,114,114,144,114,144,114,144,144,144,144,144,144,144,144,144, + 144,144,144,144,144,114,244,144,144,244,144,144,144,244,144,144, + 144,144,144,244,144,144,144,144,144,144,244,144,144,144,244,144, + 144,244,144,144,244,144,144,144,244,144,144,144,244,144,144,144, + 218,218,218,218,218,88,218,218,218,88,218,218,218,88,88,218, + 88,88,218,218,169,169,188,188,169,218,169,218,169,218,169,218, + 169,218,188,188,188,188,188,169,218,169,207,188,188,188,218,218, + 218,188,188,188,207,188,188,188,188,188,207,188,188,207,188,188, + 188,207,188,207,207,207,207,207,218,218,218,218,207,207,218,218, + 218,207,218,207,207,218,218,236,236,218,218,218,218,218,207,218, + 236,207,218,218,207,236,236,207,207,89,89,236,207,236,236,207, + 207,236,236,236,236,236,236,236,119,89,236,236,236,89,236,236, + 236,89,236,236,89,89,89,236,89,89,89,236,236,119,236,236, + 236,89,236,236,236,236,236,236,236,143,89,236,236,89,89,89, + 127,89,89,89,89,236,236,89,89,127,236,89,143,236,236,89, + 236,236,236,236,143,236,143,236,119,159,236,236,159,119,108,142, + 26,111,42,243,187,94,109,0,8,139,139,109,211,211,211,211, + 8,211,139,182,8,12,122,243,0,8,139,139,211,139,139,139, + 211,8,211,139,139,243,150,162,243,0,8,139,139,211,139,211, + 139,211,8,211,211,139,243,12,122,243,0,8,139,139,211,211, + 211,211,211,8,211,139,67,243,12,122,243,0,8,139,211,211, + 211,211,211,211,8,211,139,67,243,150,122,243,0,8,139,139, + 243,211,211,211,211,8,211,139,182,211,150,122,243,0,8,139, + 211,211,211,211,211,139,8,139,211,139,243,150,122,243,0,8, + 211,211,139,109,139,211,139,187,139,139,67,243,150,122,243,0, + 8,139,8,211,211,139,211,211,8,211,139,182,8,150,122,243, + 0,8,139,139,211,211,211,211,211,8,139,211,139,243,12,122, + 243,0,8,139,139,139,211,211,211,109,211,211,139,139,243,150, + 122,243,0,8,139,139,139,139,211,211,211,8,211,139,182,211, + 150,122,243,0,8,139,139,139,211,211,211,211,8,8,139,182, + 8,150,122,243,0,8,139,211,211,211,211,211,211,8,211,139, + 139,243,150,122,109,0,8,139,211,211,211,211,211,211,211,211, + 139,139,243,150,122,243,0,8,139,139,211,211,211,139,211,139, + 8,139,139,243,150,122,243,0,8,139,139,211,211,109,139,109, + 211,8,139,211,243,150,122,243,0,8,211,8,211,211,211,211, + 211,211,139,139,139,243,12,122,243,132,12,243,150,150,99,181, + 114,114,114,144,114,140,114,114,114,144,114,144,144,144,144,114, + 144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144, + 144,144,144,144,144,144,144,144,144,144,144,144,244,144,144,144, + 144,244,144,144,244,144,244,144,244,244,144,244,144,244,144,244, + 218,218,218,218,218,218,88,218,218,218,88,218,88,218,218,218, + 218,218,169,88,218,218,218,88,218,169,218,169,218,169,88,169, + 188,169,188,188,188,188,188,188,169,188,188,188,188,188,169,169, + 169,218,207,188,188,207,207,188,207,207,188,218,207,218,207,218, + 207,207,207,207,218,218,207,207,188,207,207,207,218,218,207,207, + 207,207,207,218,218,236,207,218,218,218,218,218,236,236,236,207, + 207,218,207,236,236,207,207,207,89,207,207,207,236,207,236,236, + 236,236,236,236,236,89,119,119,236,236,236,119,236,236,119,89, + 89,236,89,89,236,236,236,236,236,236,236,236,236,236,58,236, + 236,236,236,89,236,89,236,89,207,236,236,236,89,143,207,143, + 89,89,127,236,236,236,143,236,236,89,143,236,119,236,236,143, + 236,119,236,159,119,119,159,236,159,236,159,236,119,240,240,44, + 26,150,183,187,187,42,109,0,8,211,211,211,211,109,8,109, + 109,8,243,67,243,132,26,211,0,8,211,211,211,211,187,109, + 109,109,8,8,182,243,187,26,211,0,8,211,109,211,109,109, + 8,109,109,8,8,182,243,132,26,211,0,8,211,211,211,109, + 211,8,12,109,8,243,139,243,132,26,211,0,8,139,211,211, + 109,211,8,187,109,8,243,139,211,187,26,211,0,8,211,211, + 8,211,109,8,109,109,8,8,139,243,187,42,211,0,8,139, + 211,211,211,211,211,187,109,8,8,182,243,187,42,211,0,8, + 139,109,8,109,109,211,8,211,8,243,139,243,187,42,211,0, + 8,139,211,211,109,109,8,211,187,211,243,67,211,187,42,211, + 0,8,211,109,211,109,109,8,109,109,8,243,67,243,132,42, + 211,0,8,211,109,211,109,109,211,211,187,211,8,182,243,187, + 42,211,0,8,211,109,109,211,109,211,109,109,8,8,139,243, + 187,42,211,0,8,211,109,109,211,211,109,109,109,211,8,67, + 211,187,26,211,0,8,139,211,211,211,109,8,109,109,8,8, + 182,243,187,42,8,0,8,211,211,211,211,109,8,187,109,8, + 8,182,243,187,26,211,0,8,139,109,211,109,211,187,211,187, + 211,211,182,243,187,42,211,0,8,211,211,8,109,109,211,8, + 109,211,8,182,211,187,42,211,0,211,139,211,211,211,211,8, + 8,8,187,8,67,141,132,42,211,187,109,187,150,219,235,119, + 114,114,39,114,144,114,114,144,144,114,144,114,144,114,144,144, + 144,144,144,144,144,144,144,144,244,144,144,144,144,144,144,144, + 144,144,144,144,144,144,144,244,144,144,244,144,144,144,144,244, + 144,144,244,244,144,244,144,144,144,244,144,244,144,144,144,144, + 218,218,218,218,218,218,218,88,218,218,218,218,169,88,188,88, + 88,218,88,188,169,169,218,188,218,169,88,169,218,218,169,88, + 218,169,188,188,188,188,188,207,207,218,188,188,188,218,207,218, + 188,188,218,207,188,188,188,127,188,207,188,188,188,207,207,218, + 218,207,207,207,188,218,218,207,207,207,218,207,218,218,218,218, + 218,218,236,207,218,218,218,207,218,236,236,218,218,218,218,218, + 207,236,207,207,236,236,236,236,236,236,89,89,236,89,236,89, + 89,89,89,236,236,236,236,236,119,119,236,119,119,236,236,236, + 236,236,236,236,89,89,89,236,89,119,236,236,236,236,236,236, + 236,207,236,89,236,207,236,89,236,207,236,236,236,89,89,236, + 236,89,89,236,236,236,143,89,143,236,236,236,236,236,159,159, + 236,143,236,143,143,143,159,236,159,236,159,143,159,159,240,47, + 26,111,183,243,187,183,111,0,211,67,139,139,139,139,139,139, + 211,139,139,139,211,132,0,187,122,8,139,139,67,139,139,139, + 139,211,139,139,139,211,150,0,187,0,211,67,139,139,139,139, + 139,139,211,139,139,139,211,132,0,187,122,8,139,139,139,139, + 139,139,139,211,139,139,139,211,187,0,12,0,8,67,139,139, + 139,139,67,139,211,139,139,139,243,187,0,187,122,8,67,139, + 139,139,139,139,139,211,139,139,67,243,150,0,187,0,8,67, + 139,139,139,139,139,139,211,139,139,139,211,187,0,187,0,8, + 67,139,139,139,139,139,139,139,211,139,67,211,150,0,187,0, + 8,67,139,139,139,139,139,139,139,139,139,139,243,150,0,187, + 0,211,67,139,139,139,139,139,139,211,139,211,139,8,150,0, + 12,0,8,67,139,139,139,139,139,139,139,139,139,139,8,150, + 0,187,0,211,67,139,139,139,139,139,139,211,139,139,67,243, + 150,0,187,0,211,67,139,139,139,139,139,139,211,211,139,139, + 243,132,0,187,122,8,139,139,67,139,139,139,139,211,139,139, + 139,211,150,162,187,122,8,67,139,67,139,139,67,139,211,139, + 139,139,211,187,0,187,0,8,67,139,139,139,139,139,139,139, + 211,139,67,211,150,0,187,122,8,67,139,139,139,139,139,139, + 211,139,139,139,8,150,0,12,0,8,139,139,67,139,139,139, + 139,139,139,211,139,211,12,0,12,26,150,12,243,132,99,181, + 114,114,114,114,114,140,114,114,144,114,114,144,144,114,144,114, + 144,144,144,144,144,114,144,144,144,144,144,144,144,144,144,144, + 144,144,144,144,144,144,144,144,144,144,244,144,244,144,244,144, + 244,244,144,144,244,244,244,244,244,244,244,244,244,144,244,244, + 218,218,153,218,218,218,218,218,88,218,188,88,218,218,218,218, + 218,169,218,218,218,218,188,88,169,218,218,218,169,188,188,218, + 169,218,188,188,188,188,188,188,188,188,188,188,188,188,188,188, + 188,207,188,188,207,207,188,188,188,188,207,218,218,218,218,207, + 207,218,218,218,207,188,188,218,218,218,207,218,218,218,218,207, + 236,207,218,236,207,236,236,218,207,207,218,236,236,236,236,236, + 236,207,236,236,236,236,236,89,89,89,236,236,236,236,89,236, + 236,236,236,89,119,236,119,119,89,236,119,236,236,236,236,236, + 89,236,236,236,236,236,236,89,236,236,236,236,236,236,236,236, + 207,236,143,236,89,236,236,236,89,89,89,236,236,236,236,89, + 127,236,236,236,236,236,236,236,236,236,143,143,236,236,236,236, + 143,119,236,119,159,119,119,143,159,143,119,159,236,240,108,44, + 26,132,26,187,183,187,109,0,26,187,187,187,109,187,187,187, + 91,91,26,12,12,12,26,211,0,26,187,187,187,187,109,187, + 12,91,26,91,12,12,12,26,211,0,26,187,187,187,111,111, + 187,187,12,91,187,12,12,12,26,211,0,26,187,187,12,111, + 187,109,187,26,91,187,12,12,150,26,211,162,26,187,187,187, + 187,111,187,12,91,91,187,12,187,150,26,211,0,26,187,187, + 187,187,91,109,187,187,26,17,91,187,187,42,211,0,26,187, + 187,187,187,109,187,187,12,91,187,12,12,150,26,211,162,26, + 187,91,109,187,111,187,187,91,91,17,91,12,187,42,211,162, + 26,187,187,187,109,187,187,187,26,91,26,12,187,12,26,211, + 0,26,187,187,187,187,111,187,187,91,26,91,12,187,187,42, + 211,162,26,187,91,109,187,111,187,187,17,91,17,12,109,12, + 26,211,0,26,187,12,187,187,111,187,187,12,91,12,91,187, + 187,42,211,0,26,187,12,187,111,187,187,187,91,91,26,12, + 187,12,26,211,0,26,187,187,187,187,111,187,187,12,91,187, + 12,12,187,26,211,162,26,187,187,187,187,111,187,187,12,91, + 187,12,12,150,26,211,0,26,187,187,187,109,187,187,187,12, + 91,17,91,12,187,42,211,0,26,187,91,109,187,111,187,187, + 187,91,187,12,109,187,42,211,162,26,187,187,187,187,111,187, + 187,187,91,12,91,12,150,219,211,187,12,12,150,183,99,181, + 114,114,114,114,114,114,114,114,114,114,144,114,144,114,144,144, + 114,144,144,144,144,144,144,144,144,144,144,144,244,144,144,144, + 144,144,144,144,144,144,144,244,144,144,244,144,244,144,144,144, + 144,244,244,244,244,244,244,244,244,244,244,244,244,244,144,144, + 218,218,153,153,218,218,218,218,218,88,218,188,88,88,188,88, + 218,88,88,88,188,218,218,218,169,88,188,218,88,218,169,218, + 169,218,169,218,188,218,169,88,169,218,188,188,188,188,188,188, + 188,207,218,218,218,207,188,218,218,207,207,207,207,207,188,218, + 207,207,207,218,218,218,207,207,207,218,207,207,236,207,218,218, + 236,207,218,218,207,207,236,236,207,207,207,207,207,236,207,218, + 236,207,207,207,236,236,236,236,236,181,236,119,236,236,181,236, + 89,89,119,89,236,89,89,119,119,236,119,119,119,119,119,119, + 236,236,89,236,236,236,207,236,89,89,236,89,236,236,89,236, + 236,89,236,236,236,89,236,236,236,236,236,236,236,236,236,119, + 89,127,127,89,89,89,143,89,236,119,119,236,143,159,236,159, + 159,159,159,236,236,134,119,143,159,159,236,159,119,159,108,47, + 26,111,183,109,187,187,111,0,0,0,0,0,0,0,122,0, + 0,0,0,0,219,132,42,12,0,0,0,0,122,0,0,0, + 0,0,0,0,0,219,132,26,12,122,0,0,122,122,122,122, + 0,0,0,0,0,0,219,132,42,12,0,0,0,122,0,122, + 0,0,0,122,0,0,0,219,132,42,12,0,0,0,0,122, + 122,122,0,0,0,0,0,0,219,132,42,12,0,0,0,122, + 122,0,0,0,0,0,0,0,0,219,150,26,12,0,0,0, + 122,122,0,0,122,0,0,0,0,0,219,132,42,12,0,0, + 0,0,0,0,0,0,0,0,0,0,0,219,132,26,12,0, + 0,0,0,0,0,0,122,122,122,0,0,0,17,132,26,12, + 0,0,0,122,122,122,122,0,122,0,122,0,0,219,150,42, + 12,0,0,0,0,0,0,122,122,0,0,0,0,0,219,132, + 42,12,0,0,0,0,122,122,122,122,0,0,0,0,0,219, + 150,26,12,0,0,0,0,122,122,122,122,0,0,0,0,0, + 17,132,42,12,0,0,0,122,0,122,0,122,0,0,0,0, + 0,219,132,42,12,0,0,0,0,122,122,122,0,0,0,0, + 0,0,219,132,26,12,0,0,162,0,0,0,122,122,0,0, + 0,0,0,219,132,42,12,0,0,0,0,0,0,122,122,0, + 0,0,0,0,219,132,42,12,0,0,0,122,0,122,0,0, + 0,0,0,0,0,219,17,42,243,219,150,12,243,150,141,181, + 119,114,114,114,114,114,114,114,144,114,114,144,114,144,114,144, + 144,144,144,114,144,144,144,144,144,144,144,144,144,144,144,144, + 244,144,144,144,244,144,144,144,144,144,244,144,144,144,244,244, + 144,244,244,244,244,244,244,244,244,244,244,244,244,244,244,144, + 218,218,218,218,218,218,218,88,218,218,218,218,218,218,218,218, + 218,218,218,218,218,88,218,88,218,218,88,188,218,88,218,88, + 218,188,218,188,88,218,188,218,218,169,188,188,188,188,188,218, + 218,188,188,188,207,218,218,207,207,218,207,207,207,218,218,188, + 218,218,218,207,218,207,218,218,218,207,218,218,207,207,236,207, + 218,218,207,236,236,236,89,207,207,207,207,236,236,207,236,236, + 218,236,236,236,236,181,236,89,119,236,119,236,119,119,236,236, + 236,119,236,236,119,236,236,236,236,119,236,89,236,236,236,236, + 236,236,236,236,89,236,236,236,236,119,236,236,89,236,236,58, + 236,236,236,236,236,236,89,236,89,143,236,236,89,143,89,236, + 236,89,89,143,89,127,89,89,236,236,236,236,119,236,159,236, + 236,236,119,159,236,236,236,119,119,236,159,159,236,240,108,35, + 26,111,42,111,187,187,187,26,26,26,26,26,26,42,26,17, + 219,219,17,26,17,219,26,187,42,12,26,26,26,26,42,26, + 17,17,219,219,26,17,219,26,187,42,26,26,26,26,42,42, + 26,12,219,219,219,26,17,219,26,187,42,12,26,26,26,42, + 42,26,17,17,219,17,26,26,219,26,187,42,91,26,26,26, + 42,42,26,17,219,219,17,26,26,17,26,187,42,91,26,26, + 26,26,42,26,17,17,219,219,26,17,219,26,187,42,91,26, + 26,26,26,42,26,12,219,219,17,26,26,17,26,187,26,26, + 26,26,26,26,42,26,219,219,219,219,26,17,219,26,187,42, + 91,26,26,26,26,42,26,219,219,219,17,26,219,219,26,187, + 26,26,26,26,26,42,42,26,219,17,219,219,26,17,219,26, + 187,26,26,26,26,26,42,42,26,17,219,219,219,26,219,219, + 26,187,26,26,26,26,26,42,42,26,17,219,219,219,26,17, + 219,26,187,26,26,26,26,26,42,42,26,17,17,219,17,26, + 17,219,26,187,42,187,26,26,26,42,42,26,17,219,219,17, + 26,17,17,26,187,42,91,26,26,26,42,42,26,17,219,219, + 17,26,26,17,26,187,42,91,26,26,26,42,42,26,17,219, + 219,219,26,17,17,26,187,26,26,26,26,26,42,42,26,17, + 219,219,219,26,17,17,26,187,42,187,26,26,26,42,42,26, + 17,219,219,219,26,26,219,26,187,42,150,150,150,141,99,119, + 114,114,114,114,114,114,114,114,114,114,114,144,144,114,144,144, + 114,144,144,144,144,144,144,244,144,144,144,144,244,144,144,144, + 144,144,144,144,144,144,144,144,244,144,244,244,244,244,244,244, + 244,244,244,244,244,244,36,244,244,36,244,244,244,244,144,244, + 218,218,218,218,218,218,218,218,218,88,218,88,218,88,218,169, + 88,188,218,88,218,218,218,218,88,218,218,169,218,188,218,188, + 88,218,88,218,188,88,188,188,218,88,207,207,188,207,188,188, + 207,207,207,207,207,207,218,218,207,218,218,218,207,207,218,207, + 207,218,218,236,218,218,236,207,218,218,236,218,218,207,218,207, + 207,207,207,218,236,207,236,236,236,207,207,207,236,89,89,181, + 236,89,89,89,236,119,119,236,58,119,119,119,236,119,119,119, + 236,236,236,89,119,119,119,89,89,119,236,119,119,119,236,119, + 119,236,236,236,236,236,236,236,236,89,236,236,119,236,236,119, + 236,236,236,236,236,236,236,236,89,89,89,236,236,236,89,236, + 236,89,236,143,89,127,89,89,143,89,143,236,236,236,159,119, + 159,143,159,159,159,143,159,143,119,143,119,159,159,159,108,64, + 26,111,219,109,187,187,166,219,243,12,12,187,219,12,12,243, + 150,150,150,12,187,17,219,187,26,243,12,12,187,219,12,17, + 243,150,150,150,17,12,17,219,187,17,243,12,17,17,219,17, + 17,243,12,243,150,12,187,17,219,187,26,243,12,12,17,219, + 12,12,243,12,150,150,150,187,17,219,12,219,150,12,12,187, + 219,17,12,243,12,150,150,150,12,17,219,12,219,150,12,17, + 17,219,12,12,243,12,150,150,17,12,17,219,12,219,150,12, + 17,187,219,17,17,243,12,150,150,150,12,17,219,187,17,150, + 12,12,187,219,12,12,243,12,150,150,17,12,219,219,12,219, + 150,12,12,187,219,17,12,8,150,150,150,12,12,17,219,187, + 17,243,12,12,17,219,12,12,243,12,150,243,17,12,17,219, + 187,17,243,12,12,17,219,17,12,243,12,243,150,12,12,17, + 219,187,17,243,12,12,17,219,17,17,243,12,150,150,17,12, + 17,219,187,17,243,12,17,17,219,17,12,150,150,150,150,17, + 12,17,219,12,26,150,12,12,187,219,17,12,243,12,150,150, + 17,12,219,219,12,219,150,12,17,187,219,12,12,243,12,150, + 150,150,12,219,219,12,219,150,12,12,187,219,17,12,243,12, + 150,150,17,12,219,219,187,17,150,12,12,187,219,17,12,243, + 12,150,150,17,17,17,219,12,26,243,12,12,187,219,12,12, + 243,12,150,150,150,150,219,26,187,26,187,150,150,132,141,181, + 114,89,114,114,114,114,144,114,114,114,144,114,144,114,144,144, + 144,114,144,144,144,144,144,144,244,144,144,144,144,144,144,144, + 144,244,144,144,144,244,244,144,144,244,244,144,244,244,144,244, + 244,244,244,36,244,36,36,244,36,244,244,244,244,244,244,144, + 218,188,218,218,218,218,218,218,188,218,188,218,169,218,218,218, + 218,88,169,218,218,169,218,188,218,88,218,218,218,218,169,218, + 218,188,218,169,218,188,218,218,188,207,218,218,218,188,207,188, + 218,188,218,218,218,218,188,207,218,218,218,218,218,218,218,218, + 218,218,207,207,207,207,218,218,236,207,218,236,236,218,89,207, + 207,207,207,89,218,236,236,207,89,236,89,236,89,236,236,236, + 89,236,236,236,236,236,236,119,236,236,119,119,119,119,119,236, + 119,119,119,119,236,236,89,119,119,236,119,236,236,236,119,236, + 236,236,89,236,207,236,236,89,89,119,119,89,236,236,236,236, + 236,236,236,236,207,143,89,207,236,236,236,236,89,89,143,236, + 236,236,127,89,89,119,89,127,236,236,89,159,236,236,236,236, + 119,119,236,236,236,159,236,119,159,159,119,236,159,58,240,44, + 26,132,42,109,42,187,187,26,150,12,132,17,219,17,26,243, + 12,12,12,17,17,17,42,243,219,150,12,132,219,17,17,17, + 243,12,12,12,17,17,219,26,12,26,150,12,132,187,17,12, + 26,243,150,17,12,17,17,17,26,243,219,150,12,132,187,17, + 17,17,243,150,12,12,17,17,17,42,150,26,150,17,132,17, + 219,12,17,243,150,12,12,219,17,219,42,150,26,150,17,150, + 219,17,17,26,243,150,150,12,17,17,219,42,150,26,150,17, + 150,219,17,12,26,243,150,12,12,219,17,219,42,243,26,150, + 12,132,219,17,17,17,150,150,150,12,17,17,17,26,150,26, + 150,12,132,219,17,12,26,243,12,12,12,17,17,219,42,243, + 26,150,12,132,187,219,12,26,243,150,12,17,17,17,219,42, + 243,26,150,12,132,187,219,12,26,243,150,17,12,219,17,219, + 26,109,26,150,12,132,17,219,12,26,243,150,150,12,17,12, + 219,42,243,26,150,12,132,187,17,12,26,243,12,12,12,17, + 17,219,42,109,219,150,12,132,17,17,12,26,243,150,12,12, + 17,17,17,26,150,26,150,12,150,17,219,12,26,243,150,12, + 12,219,17,17,26,150,26,150,17,132,17,17,12,26,150,150, + 150,12,17,17,17,42,243,26,150,12,132,17,219,12,26,243, + 150,12,12,17,12,219,42,109,219,150,12,150,219,17,12,26, + 243,150,150,12,219,187,17,219,109,183,12,12,150,150,141,119, + 114,114,114,114,144,114,114,114,144,144,114,144,114,144,144,114, + 144,144,144,144,144,144,144,144,144,144,144,144,244,144,244,144, + 144,144,144,244,144,144,144,244,144,244,244,244,244,244,244,244, + 244,244,244,244,244,36,244,36,244,36,36,244,244,244,144,144, + 218,218,218,188,218,88,218,88,218,218,169,218,88,169,88,218, + 218,218,169,88,218,188,218,88,218,188,188,218,88,218,218,169, + 218,169,218,218,218,169,218,88,218,188,188,218,218,188,218,188, + 218,207,207,207,207,218,218,218,218,207,218,218,218,207,236,218, + 236,218,218,236,153,207,218,207,236,207,207,207,181,218,236,236, + 207,236,207,89,236,89,236,236,89,236,89,236,236,236,236,236, + 236,181,89,89,89,236,89,119,119,236,236,119,236,236,181,236, + 236,89,236,236,119,236,236,236,236,236,89,119,236,89,89,236, + 119,236,89,89,89,236,236,236,236,89,236,89,119,236,89,119, + 119,236,236,236,236,236,236,236,89,236,236,236,143,119,236,236, + 236,119,236,236,127,89,89,119,89,89,89,236,89,236,143,119, + 159,236,159,236,236,159,236,119,119,143,119,236,159,159,108,47, + 26,111,219,254,183,187,111,26,150,17,17,17,150,150,26,150, + 150,150,17,17,17,17,26,109,26,150,17,17,17,150,17,26, + 150,150,150,12,17,187,17,17,109,26,150,17,17,17,132,150, + 26,150,150,150,12,17,17,219,26,109,26,150,17,219,17,150, + 17,26,150,150,132,12,17,17,17,26,109,26,150,17,17,17, + 150,17,26,150,150,132,12,17,12,17,26,109,26,150,17,17, + 17,132,150,26,150,12,150,12,17,12,17,26,109,26,150,17, + 17,17,132,150,26,150,150,150,17,12,12,17,26,109,26,150, + 17,17,17,150,17,26,243,17,150,12,17,17,219,26,109,26, + 150,17,12,17,150,150,26,150,150,150,17,12,187,17,26,109, + 26,150,17,219,17,150,150,26,150,150,132,12,12,17,17,26, + 109,26,150,17,17,17,150,150,26,150,150,150,12,12,12,219, + 26,243,26,150,17,17,17,150,150,26,150,17,150,12,219,12, + 17,26,109,26,150,17,17,17,132,150,26,150,150,150,12,17, + 187,17,26,109,26,150,17,219,17,150,150,26,150,150,132,12, + 132,17,219,26,109,26,150,219,17,17,150,150,26,150,150,150, + 12,17,17,219,26,211,26,150,17,17,17,132,150,26,243,17, + 150,12,17,17,17,26,109,26,150,17,17,17,150,150,26,150, + 150,150,17,17,12,17,26,243,26,132,17,17,17,132,150,26, + 150,17,150,12,17,17,219,26,109,219,17,150,150,150,99,181, + 114,114,114,114,114,144,144,114,114,144,114,144,144,144,144,144, + 144,144,144,244,144,144,144,144,144,244,144,144,244,144,244,144, + 244,144,244,144,144,244,144,144,244,244,244,244,244,244,244,244, + 244,36,244,36,36,244,36,244,36,244,36,244,144,244,244,144, + 218,218,218,218,218,218,188,218,188,218,218,188,218,188,188,88, + 88,88,218,218,88,88,218,218,218,88,88,188,218,88,218,88, + 218,218,88,218,218,218,218,218,218,218,218,188,218,218,207,218, + 218,218,218,218,218,207,218,207,207,218,218,218,218,218,218,207, + 218,236,218,218,207,218,236,218,218,236,236,236,218,89,207,207, + 207,207,236,236,89,236,119,236,181,89,236,119,89,236,236,236, + 119,236,236,236,119,119,119,89,89,119,119,236,119,119,58,119, + 119,119,119,119,89,236,236,236,236,236,119,236,119,236,236,89, + 236,236,236,236,236,236,89,236,89,236,119,119,89,119,236,236, + 89,236,89,236,89,236,89,236,236,236,89,89,89,89,236,119, + 236,236,236,89,119,127,89,89,89,236,89,119,119,119,119,236, + 236,119,236,119,159,236,119,143,159,159,159,236,236,159,108,142, + 42,187,42,182,187,12,111,219,17,17,132,17,17,12,219,150, + 17,17,12,132,12,187,219,243,219,17,17,132,17,17,12,219, + 150,17,17,17,132,12,187,26,243,219,17,17,132,219,17,12, + 219,12,17,17,17,132,187,187,219,243,219,17,17,132,17,17, + 12,219,17,17,17,17,132,12,187,219,243,219,150,17,132,17, + 17,12,219,17,17,17,12,132,17,187,219,243,219,12,17,132, + 17,17,12,219,12,132,17,17,132,17,187,219,243,219,12,17, + 132,17,17,12,219,12,17,17,17,132,17,187,219,243,219,17, + 17,150,219,17,12,219,17,150,17,12,132,12,187,219,243,219, + 17,17,132,17,17,17,219,150,17,17,17,132,12,187,219,243, + 219,17,17,132,17,17,17,219,12,17,12,17,132,187,187,219, + 243,219,17,17,132,219,17,17,219,12,17,17,17,132,17,187, + 219,109,219,17,17,132,17,17,12,219,12,132,17,12,132,17, + 187,219,243,219,17,17,132,219,17,12,219,150,17,17,17,132, + 12,187,219,243,219,12,17,132,17,17,17,219,12,17,17,17, + 17,12,187,219,243,219,12,17,132,17,17,17,219,12,17,17, + 17,132,12,187,219,243,219,12,17,132,219,17,12,219,12,132, + 17,12,132,187,187,219,243,219,17,17,132,17,17,12,219,12, + 17,12,17,132,17,187,219,109,219,12,17,132,17,17,17,219, + 12,150,17,17,17,12,187,219,109,219,12,12,150,17,141,119, + 114,114,114,114,144,114,114,144,144,114,144,144,114,144,144,114, + 144,144,144,144,144,244,144,144,144,144,144,144,244,144,144,144, + 244,144,244,144,144,144,244,244,144,244,244,244,244,244,36,244, + 36,244,36,244,36,36,244,36,36,244,36,36,244,244,144,144, + 218,218,218,218,218,218,218,218,88,218,88,188,218,218,188,218, + 218,188,169,218,218,188,218,88,218,218,218,218,218,188,218,218, + 218,218,188,218,218,188,218,218,218,218,218,218,218,218,218,207, + 218,218,218,188,218,218,218,218,218,207,207,207,218,218,218,218, + 218,236,236,218,236,207,236,207,218,218,218,236,236,236,89,236, + 89,207,89,236,236,236,89,236,119,119,236,58,119,236,119,89, + 236,236,119,236,89,236,119,119,89,119,119,236,119,236,119,236, + 236,236,236,236,119,236,89,89,236,236,236,236,236,119,119,89, + 236,236,89,89,89,236,119,236,89,236,236,236,89,119,89,236, + 236,236,236,236,236,119,236,236,236,236,236,236,236,236,236,236, + 143,89,236,143,89,236,236,236,89,236,236,236,236,89,236,236, + 236,236,236,236,159,236,119,236,119,236,119,236,119,159,108,34, + 26,132,42,224,187,150,111,219,150,17,132,17,132,17,26,150, + 150,150,17,132,132,187,26,211,219,150,17,132,17,150,17,26, + 150,150,150,17,132,132,150,219,109,219,150,17,150,17,150,17, + 219,150,150,150,17,132,132,187,26,211,219,150,17,132,17,150, + 17,219,150,150,150,17,132,132,187,219,211,26,150,219,132,17, + 150,17,219,150,150,150,17,132,132,187,219,211,219,150,17,132, + 17,150,17,219,12,150,150,17,132,132,187,219,211,219,150,219, + 132,17,150,17,219,150,150,150,17,132,132,187,219,211,219,150, + 219,150,17,150,17,219,12,132,150,17,132,132,187,219,211,219, + 150,17,132,17,150,17,26,150,150,150,17,132,132,187,219,211, + 219,150,17,132,17,150,17,219,150,132,150,17,132,132,187,219, + 211,219,150,17,132,17,150,17,219,150,150,150,17,132,132,187, + 219,211,219,150,219,132,17,150,17,219,12,150,150,17,132,132, + 187,219,211,219,150,17,150,17,150,17,26,150,150,150,17,132, + 132,187,26,211,219,150,17,132,17,150,17,219,150,150,150,17, + 132,132,12,219,211,219,150,219,132,17,150,17,219,150,150,150, + 17,132,132,12,219,211,219,150,17,132,17,150,17,219,12,150, + 132,17,132,132,187,219,211,219,150,17,132,17,150,17,219,150, + 132,150,17,132,132,187,26,211,219,150,17,132,17,150,17,219, + 12,132,150,150,132,132,150,42,109,183,17,150,243,17,235,114, + 114,114,114,114,140,144,114,114,114,144,144,144,144,144,144,244, + 144,144,144,244,144,144,244,244,144,244,244,144,244,244,244,144, + 244,144,144,244,244,144,244,144,244,244,244,244,36,244,244,36, + 244,244,36,36,244,36,36,244,36,244,36,244,244,244,244,144, + 218,218,218,188,188,218,88,218,218,188,218,218,88,169,218,188, + 188,88,218,218,88,218,188,218,88,218,88,218,218,218,88,218, + 169,218,218,88,218,218,218,218,218,218,218,218,218,218,218,218, + 218,236,218,218,218,218,218,218,218,218,218,218,218,218,218,236, + 207,218,218,236,207,207,207,218,89,236,236,236,236,236,236,89, + 236,89,236,89,89,236,119,58,119,119,119,236,236,119,236,236, + 89,119,236,236,236,119,236,236,119,236,236,119,236,119,236,119, + 119,119,119,236,89,89,236,236,89,89,236,89,236,89,236,236, + 89,236,236,236,236,119,89,236,119,119,119,119,236,236,119,119, + 236,119,119,236,236,236,236,236,236,236,89,89,143,89,143,89, + 89,236,127,236,236,236,236,236,143,143,236,236,119,143,119,119, + 236,119,119,119,236,119,119,236,236,119,143,236,159,58,240,47, + 26,111,187,211,219,111,109,26,12,132,17,132,150,132,219,12, + 17,132,17,219,26,150,26,187,26,17,150,219,150,132,132,219, + 12,219,132,17,219,26,187,26,8,26,12,132,219,150,132,150, + 219,12,219,132,17,17,26,150,26,187,42,12,132,219,150,132, + 17,219,12,219,150,17,219,26,150,26,187,26,12,132,17,150, + 132,132,219,12,219,132,17,17,26,150,26,12,42,12,132,219, + 150,132,150,219,150,219,132,17,17,26,150,26,12,26,12,132, + 17,150,132,132,219,12,219,132,12,219,26,150,26,12,26,12, + 132,17,150,132,150,219,150,17,132,17,219,26,150,26,12,42, + 12,132,17,132,132,150,219,12,219,132,17,219,26,150,26,12, + 42,12,132,17,150,132,150,219,12,17,132,17,17,26,150,26, + 243,42,12,132,17,150,132,150,219,12,219,132,17,17,26,150, + 26,12,26,12,132,17,150,132,150,219,150,219,150,17,219,26, + 150,26,187,42,12,132,17,150,132,132,219,12,219,150,17,219, + 26,150,26,12,42,12,132,219,150,132,132,219,12,219,132,150, + 219,26,150,26,12,26,12,132,17,150,132,150,219,12,17,132, + 17,17,26,150,26,12,42,12,132,17,150,132,150,219,150,219, + 150,17,219,26,150,26,243,42,12,132,219,150,132,132,219,12, + 219,132,12,219,26,150,26,12,42,12,132,219,150,132,150,219, + 150,17,132,17,219,26,187,219,8,42,187,17,150,132,235,89, + 114,144,144,144,114,114,144,144,144,144,114,144,144,144,144,144, + 144,244,144,144,244,244,144,144,244,144,144,244,144,244,244,144, + 244,244,244,144,244,244,244,244,244,244,36,244,36,36,244,36, + 244,36,244,36,36,244,36,36,36,36,36,36,244,244,244,144, + 218,218,218,218,188,218,188,188,218,218,218,218,218,218,218,218, + 218,188,169,218,188,88,188,218,188,218,188,218,88,218,218,218, + 218,88,218,218,218,218,218,218,218,218,218,218,218,218,153,153, + 218,153,153,218,218,153,218,218,218,218,218,236,218,207,218,218, + 236,236,236,236,236,218,236,218,207,236,89,207,236,181,236,89, + 119,236,236,236,236,236,236,236,89,119,119,119,119,119,119,119, + 119,89,119,119,236,119,236,236,119,119,236,119,119,119,89,236, + 236,236,119,236,236,89,236,236,236,89,236,236,236,236,119,119, + 119,119,236,236,89,236,119,236,236,89,236,119,119,236,119,119, + 236,236,58,236,236,236,236,207,207,143,207,89,89,89,236,236, + 127,119,236,236,236,143,159,119,119,236,143,143,119,143,143,119, + 143,143,159,236,236,236,119,236,119,119,119,236,119,159,240,47, + 26,111,166,182,187,150,224,219,17,219,17,17,17,132,219,150, + 219,150,17,132,26,150,17,211,219,17,17,17,17,17,132,219, + 150,17,150,17,132,17,187,26,109,219,17,17,17,17,17,17, + 219,150,17,150,17,132,26,150,12,211,219,12,17,17,17,150, + 17,219,150,219,150,17,132,26,12,17,211,219,17,17,17,17, + 17,17,219,150,17,150,17,132,26,187,12,211,219,17,17,17, + 17,17,17,26,150,17,150,17,132,26,187,12,109,219,17,17, + 17,17,17,17,219,150,17,150,17,132,26,187,17,211,219,17, + 219,17,17,17,17,26,150,17,150,17,132,26,12,17,211,219, + 17,219,17,17,17,132,219,150,17,150,17,132,26,187,17,211, + 219,17,17,17,17,17,17,219,150,17,150,17,132,26,187,26, + 211,219,17,17,17,17,17,17,219,150,17,150,17,132,26,187, + 12,109,219,17,17,17,17,17,17,26,150,219,150,17,132,26, + 187,12,211,219,17,17,17,17,17,132,219,150,219,150,17,132, + 26,150,17,211,219,17,17,17,17,17,17,219,150,219,12,17, + 132,26,187,12,109,219,17,17,17,17,17,17,219,150,219,150, + 17,132,26,187,17,211,219,17,17,17,17,17,17,26,150,219, + 150,17,132,26,187,26,211,219,17,17,17,17,17,17,219,150, + 17,150,17,132,26,150,17,211,219,17,17,17,17,17,17,26, + 150,219,12,17,17,219,187,26,211,26,17,12,150,17,99,114, + 114,114,144,144,144,144,144,144,114,144,144,144,144,144,144,244, + 144,144,244,144,144,244,244,244,144,244,244,244,244,244,244,244, + 144,244,244,144,244,244,244,244,244,244,36,244,36,244,36,36, + 244,36,36,36,36,244,36,244,36,36,36,36,244,244,244,244, + 188,188,207,188,188,188,188,169,188,169,169,188,169,169,169,188, + 188,188,188,169,188,207,188,188,188,188,169,188,218,218,169,218, + 188,218,218,218,218,218,218,218,218,153,218,153,218,153,218,218, + 218,218,218,153,236,218,153,218,218,218,218,218,207,218,188,236, + 207,207,207,236,236,236,89,236,236,207,207,236,236,236,119,119, + 236,119,181,119,119,119,119,119,119,236,89,89,119,119,119,58, + 236,119,236,236,236,89,119,119,236,236,119,119,236,236,236,119, + 119,119,236,89,89,236,89,89,236,236,89,89,236,89,236,236, + 236,89,236,119,119,119,119,236,236,236,89,236,236,236,236,89, + 236,236,236,236,236,236,207,236,236,89,236,236,236,236,89,89, + 119,236,119,143,119,119,236,236,143,236,119,119,159,119,119,159, + 119,119,236,119,236,236,236,89,89,89,89,89,236,119,240,47, + 26,111,187,182,183,109,111,42,12,17,17,12,150,219,219,17, + 150,17,17,219,17,187,26,12,26,17,17,17,150,150,219,219, + 132,150,17,17,219,219,150,219,12,26,17,17,12,17,150,132, + 219,17,150,17,17,219,17,187,42,12,42,12,219,17,150,150, + 132,219,17,150,17,17,219,17,132,26,12,26,17,17,17,150, + 150,132,219,150,132,17,17,219,17,150,42,12,42,12,219,12, + 17,150,132,219,17,150,17,17,219,17,150,42,12,26,17,17, + 17,12,150,132,219,150,132,17,17,219,17,150,26,187,42,12, + 17,17,150,150,132,219,17,132,17,17,219,17,132,26,12,42, + 12,17,17,12,150,219,219,132,150,17,17,219,17,150,26,12, + 42,12,219,12,17,150,132,219,132,132,17,17,219,219,150,219, + 187,42,12,219,12,17,150,132,219,17,132,17,17,219,17,150, + 42,12,42,12,219,12,17,150,132,219,17,150,17,17,219,17, + 132,42,12,42,12,219,17,12,150,219,219,132,150,17,12,219, + 219,187,26,187,26,17,17,17,12,150,132,219,150,150,17,17, + 219,17,150,42,12,42,12,219,12,17,150,132,219,132,150,17, + 17,219,17,150,26,187,42,12,219,12,17,150,132,219,17,132, + 12,17,219,17,150,219,187,26,17,17,17,12,150,132,219,17, + 132,17,17,219,17,187,26,187,26,17,17,17,12,150,132,219, + 17,150,17,12,219,17,187,219,187,183,219,17,150,132,7,89, + 114,71,114,144,144,144,144,144,244,144,144,144,144,144,244,144, + 244,144,244,244,144,244,144,244,244,244,244,244,244,244,244,244, + 244,244,244,244,244,244,244,244,244,244,36,36,244,36,36,36, + 36,244,36,244,36,36,36,36,36,36,36,36,36,36,244,244, + 207,188,188,188,39,169,188,169,188,39,39,188,188,188,188,39, + 169,188,188,188,188,188,207,188,169,188,169,188,188,207,188,188, + 188,188,218,218,88,218,218,218,218,218,218,153,218,218,153,218, + 218,236,218,218,218,218,153,153,236,153,207,236,236,218,207,218, + 218,218,218,207,236,236,89,89,89,236,236,89,236,236,236,119, + 119,236,58,236,236,236,89,236,119,181,58,89,89,236,89,119, + 236,119,236,119,236,236,89,119,119,119,89,119,119,119,89,89, + 236,119,119,236,89,119,236,89,236,236,236,89,236,89,236,89, + 236,236,236,236,236,89,119,236,119,119,236,89,89,236,236,119, + 119,236,119,236,236,89,236,89,236,236,236,236,236,236,236,143, + 89,236,119,236,236,236,236,236,236,236,127,89,89,89,89,236, + 236,236,236,236,236,89,236,236,236,119,119,236,119,119,159,47, + 26,111,166,182,187,111,150,219,26,219,17,17,17,17,219,219, + 17,17,17,219,17,132,26,150,219,26,219,26,17,12,17,26, + 219,17,17,219,219,26,187,26,150,219,26,219,17,219,26,12, + 219,219,17,17,17,219,17,150,26,150,219,26,219,26,17,26, + 17,219,17,17,17,17,219,26,150,219,150,219,26,219,26,17, + 26,17,26,219,12,17,219,219,26,150,26,150,219,26,219,17, + 17,26,17,219,219,17,17,17,219,26,150,26,150,219,26,219, + 17,17,26,17,26,219,12,17,219,219,26,150,26,150,219,26, + 219,26,17,26,17,219,17,17,17,219,219,26,150,26,150,219, + 26,219,17,17,17,17,26,219,17,17,17,219,26,150,26,150, + 219,26,219,17,219,26,12,26,219,12,17,219,219,26,187,26, + 150,219,26,219,17,219,26,12,219,17,17,17,219,219,26,150, + 26,150,219,26,219,17,219,26,12,219,219,12,17,17,219,26, + 150,26,150,219,26,219,17,17,17,17,26,219,17,17,219,219, + 12,150,26,150,219,26,219,17,17,26,17,26,219,17,17,17, + 219,26,150,26,150,219,26,219,17,219,26,17,26,219,17,17, + 219,219,26,150,26,150,219,26,219,17,219,26,12,219,17,17, + 17,219,219,26,12,26,150,219,26,219,17,17,26,17,219,17, + 17,17,219,219,12,132,26,150,219,26,219,17,219,26,17,219, + 17,17,17,132,26,17,187,219,109,42,26,17,243,219,99,114, + 114,144,144,144,144,144,144,144,144,144,144,244,144,244,144,244, + 244,244,144,144,244,244,244,244,244,244,244,244,244,244,244,244, + 244,244,244,244,244,244,244,244,36,244,36,36,36,244,36,244, + 36,36,105,36,36,244,36,36,36,36,36,36,36,36,36,244, + 218,218,218,207,188,188,188,188,188,188,188,39,39,207,188,188, + 188,39,39,169,39,39,39,39,207,188,188,39,39,188,188,169, + 188,188,188,188,218,188,218,218,218,236,218,207,218,153,218,236, + 218,218,153,153,153,218,207,218,218,218,236,218,218,236,218,207, + 236,236,207,236,236,207,236,207,181,89,89,119,119,236,119,119, + 119,119,236,119,119,119,119,119,119,119,89,236,236,236,119,236, + 119,236,119,236,119,236,236,89,236,89,236,236,236,89,119,119, + 119,89,236,119,119,89,119,119,119,119,119,236,119,236,236,236, + 236,119,89,236,119,119,89,119,236,236,119,236,236,236,236,236, + 236,119,236,236,236,58,236,236,119,236,89,236,236,89,89,89, + 236,236,236,236,143,143,143,89,89,127,89,89,89,89,89,89, + 127,236,236,236,89,236,236,89,119,236,236,89,236,119,108,47, + 122,126,26,59,42,166,187,0,42,122,122,122,122,42,122,122, + 122,122,122,162,42,42,183,187,122,42,122,122,0,122,42,122, + 122,42,122,122,122,183,42,183,187,0,42,122,122,122,122,42, + 122,122,122,122,122,162,42,122,183,187,0,42,122,122,122,122, + 42,122,122,122,122,122,162,183,78,42,187,122,42,122,122,122, + 122,42,122,122,122,122,122,122,183,42,183,187,0,42,122,122, + 122,122,42,122,122,122,122,122,162,219,42,183,187,0,42,122, + 122,0,122,42,122,122,122,122,122,162,183,42,183,187,0,42, + 122,122,122,122,42,122,122,42,122,122,78,183,42,183,187,0, + 42,122,122,122,122,42,122,122,122,122,122,162,183,42,183,187, + 0,42,122,122,122,122,42,122,122,42,122,122,122,183,42,219, + 187,0,42,122,122,122,0,42,122,122,42,122,122,162,219,42, + 183,187,0,42,122,122,122,0,42,122,122,122,122,122,162,219, + 42,183,187,0,42,122,122,0,122,42,122,122,122,122,122,122, + 42,42,183,187,0,42,122,122,0,122,42,122,122,122,122,122, + 162,183,42,183,187,0,42,122,122,122,122,42,0,42,122,122, + 122,162,183,42,183,187,0,42,122,122,122,0,42,122,122,42, + 122,122,78,183,42,219,187,0,42,122,122,122,122,42,122,122, + 42,122,122,0,42,42,183,187,0,42,122,122,122,122,42,122, + 122,122,122,0,122,42,42,42,187,42,42,183,219,215,235,89, + 114,144,144,144,144,144,144,144,144,244,144,144,144,244,244,144, + 244,244,244,144,244,244,244,244,244,244,244,244,244,244,244,244, + 244,244,244,244,244,36,244,36,244,244,244,36,244,36,36,36, + 36,36,36,36,36,36,244,36,36,36,36,36,244,36,36,120, + 207,207,207,218,218,188,188,188,188,188,188,188,188,188,188,207, + 188,39,39,169,39,39,207,39,207,39,169,39,39,39,188,169, + 169,39,188,207,188,188,207,207,218,207,218,236,218,218,218,236, + 153,218,218,218,153,218,218,153,181,218,236,236,207,207,236,207, + 207,236,236,207,236,236,236,236,119,236,89,236,89,89,236,236, + 119,119,119,119,119,119,58,236,236,58,119,119,119,236,236,89, + 236,89,119,236,119,89,236,89,236,119,119,119,236,236,89,89, + 119,119,89,89,89,89,89,89,89,89,236,236,236,119,236,236, + 89,236,119,89,236,119,89,236,119,89,119,119,89,236,236,89, + 236,236,236,236,236,119,236,236,236,236,236,236,236,236,236,143, + 236,236,127,236,89,207,207,127,89,89,39,89,127,89,89,119, + 89,89,119,236,89,89,236,236,119,119,119,236,119,159,240,47, + 122,183,42,126,122,94,42,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,42,122,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,42,42,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,42,42,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,42,122,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,42,42,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,42,42,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,42,42,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,42,42,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,42,42, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,42, + 42,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 42,42,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,42,42,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,42,42,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,42,42,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,42,42,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,42,122,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,42,42,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,42,122,0,0,0,0,0,141,181, + 144,144,144,144,144,144,144,144,144,244,144,244,244,144,244,244, + 244,244,244,244,244,244,244,244,244,244,36,244,36,244,36,244, + 244,244,244,36,244,244,36,244,36,36,36,36,36,244,36,36, + 36,36,36,36,36,36,36,36,36,36,36,105,36,36,36,36, + 39,207,207,207,207,207,39,188,39,169,39,39,39,39,188,188, + 207,188,39,39,39,39,39,39,39,207,39,39,39,39,39,188, + 188,169,39,39,207,207,188,188,207,207,218,218,218,153,218,218, + 218,236,236,236,218,153,218,218,218,218,218,207,207,236,207,207, + 207,207,207,207,236,236,236,236,236,89,236,89,119,119,89,119, + 236,119,236,236,119,58,119,119,119,119,236,89,236,119,119,236, + 119,119,236,89,89,236,89,236,89,89,89,89,89,89,119,119, + 119,89,119,236,119,119,119,236,236,236,119,236,119,236,89,119, + 119,119,236,236,236,236,236,119,236,119,236,89,119,119,236,119, + 236,119,119,236,236,236,236,236,236,236,236,89,207,143,89,89, + 89,89,236,89,89,89,89,89,89,127,89,89,119,89,127,89, + 89,236,89,236,236,236,236,119,236,119,119,119,119,119,108,47, + 122,187,42,254,122,122,122,0,42,42,122,122,122,42,42,122, + 42,122,122,42,12,26,26,17,0,26,122,42,122,122,42,122, + 42,122,122,122,42,12,26,26,17,0,42,42,122,122,122,42, + 42,122,42,122,122,42,12,26,26,17,0,42,42,122,122,122, + 42,42,122,42,122,122,78,8,26,26,17,0,42,42,122,122, + 42,122,42,122,42,122,122,42,12,26,26,17,0,42,42,122, + 122,122,42,42,122,42,122,122,42,12,26,26,17,0,42,42, + 122,122,42,122,122,42,42,122,122,42,12,26,26,17,0,42, + 42,122,122,122,42,122,42,122,122,122,42,12,26,26,17,0, + 42,42,122,122,122,42,42,122,42,122,122,42,12,26,26,17, + 0,42,42,122,122,122,42,122,122,42,122,122,78,243,26,26, + 17,0,42,42,122,122,42,122,122,42,122,122,122,42,12,26, + 26,17,0,42,42,122,122,42,122,42,122,42,122,122,42,12, + 26,26,17,0,26,122,42,122,122,42,122,42,42,122,122,42, + 12,26,26,17,0,42,42,122,122,42,122,42,122,42,122,122, + 42,12,26,26,17,0,42,42,122,122,122,42,122,122,42,122, + 122,42,12,26,26,17,0,42,42,122,122,42,122,122,42,122, + 122,122,78,243,26,26,17,0,42,42,122,122,122,42,122,42, + 122,122,122,42,12,26,26,17,0,42,42,122,122,122,42,122, + 42,122,42,122,78,243,26,26,187,122,26,26,150,221,235,114, + 144,144,244,144,144,144,144,244,144,244,144,244,244,244,144,244, + 244,244,244,244,244,244,244,244,244,244,244,244,36,244,36,244, + 36,244,36,244,36,244,36,244,36,244,36,244,36,36,244,36, + 36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36, + 39,39,39,207,39,39,39,39,39,39,39,39,39,39,188,188, + 188,188,207,39,39,39,207,39,39,207,39,39,39,207,39,207, + 39,39,39,39,188,207,207,188,207,207,207,236,207,236,218,207, + 218,218,218,207,218,236,218,236,236,236,207,236,207,207,89,89, + 207,207,89,207,207,236,89,236,119,236,236,236,236,119,89,119, + 119,119,119,236,236,119,236,236,236,119,236,89,236,89,236,89, + 236,89,236,236,89,236,89,236,236,236,236,119,119,236,236,236, + 119,119,119,89,236,89,119,119,119,236,89,236,119,119,89,236, + 89,236,89,89,236,119,236,119,236,236,236,236,236,119,236,236, + 236,236,119,236,236,236,236,236,236,89,143,89,236,236,236,236, + 236,89,143,127,89,127,89,127,89,89,89,89,89,89,89,89, + 89,236,119,89,119,119,89,119,236,119,236,236,119,159,108,64, + 187,59,187,214,42,187,187,42,101,139,139,8,8,8,139,8, + 8,8,139,139,49,219,26,8,42,101,139,139,8,139,8,8, + 211,8,8,139,139,49,17,26,8,42,101,139,139,8,139,8, + 8,211,8,8,139,139,49,17,26,8,42,101,139,139,8,139, + 8,8,211,8,8,139,139,67,17,26,8,42,101,139,139,139, + 8,8,8,211,8,8,139,139,49,219,26,8,42,101,139,139, + 139,8,8,211,211,8,8,139,139,67,17,26,12,26,101,139, + 139,139,8,8,8,211,8,8,139,139,49,17,26,8,42,101, + 139,139,139,8,8,211,211,8,8,139,139,49,219,26,8,42, + 101,139,139,8,139,8,8,211,8,8,139,139,67,17,26,12, + 26,101,139,139,139,8,8,8,211,8,8,139,139,67,17,26, + 8,42,101,139,139,139,8,8,8,211,8,8,139,139,67,17, + 26,12,26,101,139,139,139,8,8,211,211,8,8,139,139,49, + 219,26,8,42,101,139,139,8,139,8,8,211,8,8,139,139, + 49,219,26,8,42,101,139,139,139,8,8,139,8,8,8,139, + 139,49,17,26,12,26,101,139,139,139,8,8,8,211,8,8, + 139,139,49,17,26,8,42,101,139,139,139,8,8,211,211,8, + 8,139,139,67,17,26,8,42,101,139,139,8,139,8,8,211, + 8,8,139,139,49,219,26,8,42,101,139,139,139,139,8,8, + 211,8,8,139,139,49,219,26,8,219,187,187,49,141,99,181, + 144,144,144,144,244,144,244,144,244,144,244,244,244,244,244,244, + 244,244,244,244,244,36,244,36,36,36,244,36,36,244,36,244, + 36,244,36,36,244,36,36,244,36,36,36,36,244,36,36,105, + 36,36,105,36,36,36,36,36,36,105,36,105,36,36,244,36, + 140,181,39,39,207,207,39,140,39,39,39,39,39,39,39,39, + 39,39,39,39,39,188,39,207,207,39,39,39,188,39,39,39, + 207,39,39,39,207,207,39,188,188,188,207,207,207,207,207,236, + 236,207,218,236,218,218,218,218,218,236,236,207,236,236,207,188, + 181,207,207,207,89,89,207,89,236,236,119,119,119,236,236,89, + 236,89,236,119,119,236,119,119,119,236,236,236,236,236,89,236, + 89,236,89,89,119,89,119,119,89,89,89,89,236,89,119,119, + 119,89,119,119,119,119,89,119,89,119,119,89,89,236,236,119, + 119,119,119,236,89,236,119,236,119,119,119,236,236,236,236,119, + 236,236,236,236,236,236,236,89,236,236,236,236,236,89,236,236, + 89,236,89,89,89,119,89,89,89,89,127,89,89,89,89,236, + 89,89,89,119,89,89,89,89,89,236,119,89,119,119,240,44, + 109,182,187,99,78,111,166,26,101,8,8,211,211,8,8,211, + 211,8,211,139,101,150,17,243,42,49,8,8,8,8,211,211, + 8,211,8,211,139,101,150,17,243,26,101,8,8,211,8,8, + 211,8,211,8,139,8,101,150,17,243,26,101,8,8,211,8, + 8,211,8,211,211,8,139,101,150,17,243,26,101,8,8,8, + 8,211,211,8,211,8,211,139,101,150,12,243,26,101,8,8, + 8,8,211,8,8,211,211,8,139,67,150,17,211,26,101,8, + 8,8,211,211,211,8,211,8,211,8,101,150,17,243,26,101, + 8,8,8,211,211,8,8,211,8,211,139,101,150,17,243,26, + 101,8,8,211,8,8,211,8,211,211,8,139,67,150,17,211, + 26,101,8,8,8,211,211,211,8,211,211,8,8,101,150,17, + 243,42,49,8,8,8,211,211,211,8,211,211,8,139,67,150, + 17,211,42,49,8,8,8,8,211,8,8,211,8,211,139,101, + 150,17,243,42,49,8,8,8,8,211,211,8,211,8,211,139, + 101,150,17,243,26,101,8,8,8,211,8,8,211,211,8,211, + 211,101,150,17,211,26,101,8,8,8,211,211,211,8,211,8, + 211,8,101,150,17,243,42,49,8,8,8,211,211,8,8,211, + 211,8,139,101,150,17,243,26,101,8,8,8,8,211,211,8, + 211,8,211,139,101,150,17,243,26,101,8,8,8,8,211,8, + 8,211,211,8,211,101,150,17,109,187,12,187,141,132,235,114, + 144,144,244,144,244,144,144,244,244,244,144,244,244,244,244,244, + 244,244,244,244,244,244,36,244,244,36,244,36,244,36,36,244, + 36,36,36,244,36,36,36,244,36,244,36,36,36,36,244,36, + 36,36,36,105,36,36,36,36,36,36,36,36,36,105,36,36, + 39,39,114,39,181,39,207,39,39,39,140,39,39,39,39,114, + 39,39,39,188,39,39,39,207,207,207,39,207,39,207,39,39, + 39,39,39,39,39,207,39,39,207,207,207,207,207,207,207,218, + 236,207,218,236,218,236,218,236,218,236,236,207,207,236,89,207, + 207,207,89,207,207,236,207,236,89,236,236,236,119,119,119,236, + 119,119,89,119,119,89,236,236,119,119,119,89,89,236,89,236, + 89,236,236,89,119,89,89,119,119,119,89,89,236,89,89,236, + 119,119,119,119,236,119,89,119,236,236,119,236,89,119,89,236, + 236,236,236,236,236,236,119,236,236,236,119,236,236,236,236,236, + 119,236,58,236,236,236,236,236,236,236,236,119,236,236,236,236, + 89,236,89,89,89,89,236,89,236,89,89,127,119,89,89,89, + 119,89,89,236,89,119,236,119,119,119,119,236,119,159,159,44, + 187,109,26,99,166,187,166,42,49,211,139,8,211,211,8,211, + 8,8,8,8,139,150,17,243,122,101,211,211,211,8,211,8, + 211,211,8,187,8,139,150,17,141,42,49,211,8,211,8,211, + 211,8,211,187,211,8,139,150,17,141,42,49,211,8,211,8, + 211,211,8,211,8,8,8,139,150,17,141,42,49,211,8,211, + 211,8,211,8,211,8,8,8,139,150,17,141,42,49,211,8, + 211,211,8,211,8,211,8,8,8,139,150,132,141,42,49,8, + 211,8,211,8,211,8,211,8,211,8,139,150,17,141,42,49, + 8,211,8,211,8,211,8,211,8,8,8,139,150,17,141,42, + 49,211,8,211,8,211,211,8,211,8,8,8,139,150,132,141, + 42,49,8,211,8,211,8,211,8,211,8,211,8,101,150,17, + 243,122,101,211,8,211,8,211,8,211,8,211,8,91,67,150, + 132,243,122,101,211,8,211,211,8,211,8,211,8,8,8,139, + 150,17,243,122,101,211,211,211,8,211,8,211,8,8,8,8, + 139,150,17,141,42,49,211,8,211,8,211,211,8,211,8,8, + 8,101,150,132,141,42,49,8,211,8,211,8,211,8,211,8, + 211,8,139,150,17,243,122,101,211,8,211,8,211,8,211,8, + 211,8,8,139,150,12,141,42,49,211,211,211,8,211,8,211, + 211,8,8,8,139,150,17,141,42,49,8,211,8,211,8,211, + 211,8,211,8,8,101,150,17,243,132,219,187,141,141,99,114, + 144,144,144,144,244,244,244,144,244,244,244,244,244,244,244,244, + 244,36,244,36,244,36,244,244,36,36,244,36,36,36,36,244, + 36,244,36,36,244,36,36,36,36,36,36,36,36,36,36,36, + 36,105,36,36,36,36,36,36,105,36,36,36,36,105,105,36, + 39,39,207,39,39,39,181,39,39,114,39,140,114,39,39,39, + 39,39,207,207,207,39,39,39,207,39,39,39,39,39,39,39, + 207,39,188,39,207,39,207,207,39,207,207,207,207,207,207,207, + 207,207,207,207,236,218,236,218,236,236,236,236,89,207,207,89, + 89,89,207,236,236,236,236,89,119,236,89,119,236,236,236,119, + 236,119,119,236,236,236,119,119,236,236,89,89,236,89,89,89, + 236,89,89,236,89,89,89,89,89,89,119,119,119,236,119,119, + 119,89,236,236,119,236,119,119,119,236,89,236,119,236,236,119, + 119,236,119,119,89,236,236,119,236,236,236,119,119,119,236,119, + 236,119,89,119,236,236,58,236,236,119,236,236,236,236,236,89, + 236,89,236,236,236,143,236,143,236,236,89,119,89,89,89,236, + 89,119,236,119,119,89,89,89,119,119,119,119,119,119,108,44, + 187,109,162,139,187,187,111,122,101,8,91,211,211,187,109,109, + 8,109,109,8,67,150,17,182,42,101,8,211,211,211,187,109, + 8,211,8,139,8,67,150,17,139,122,101,211,211,211,8,211, + 187,211,8,211,211,8,67,150,17,139,122,139,211,211,211,211, + 187,109,8,211,211,187,211,139,150,17,139,122,139,211,211,211, + 211,8,211,187,211,8,111,8,67,150,219,139,122,139,211,211, + 211,8,211,187,109,8,109,109,8,67,150,26,211,122,139,211, + 211,8,91,8,109,8,211,187,109,8,67,150,17,139,122,139, + 211,211,211,8,211,211,187,211,211,187,211,67,243,219,139,122, + 139,211,211,211,8,211,187,109,8,109,109,8,67,150,26,211, + 122,101,211,211,8,91,211,211,8,211,187,211,8,67,150,17, + 182,42,101,211,8,211,211,8,109,8,109,8,211,8,139,150, + 26,182,42,101,211,8,211,211,211,187,109,8,109,109,8,67, + 150,17,182,42,101,8,211,211,211,187,109,211,187,109,109,8, + 67,150,219,139,122,139,211,211,211,8,187,211,187,211,109,109, + 8,67,150,26,211,122,101,211,211,8,91,211,211,8,211,187, + 109,8,67,150,17,182,42,101,211,8,211,211,8,211,8,211, + 187,109,8,67,150,219,211,122,139,211,211,211,8,211,187,109, + 8,109,109,8,67,150,17,139,122,139,211,211,211,8,211,187, + 109,8,109,109,8,139,150,17,182,187,187,187,150,141,235,114, + 144,244,144,244,144,244,144,244,244,244,244,244,244,244,244,244, + 244,36,244,244,244,36,244,36,244,36,244,36,244,36,36,244, + 36,36,36,244,36,244,36,36,36,36,36,36,244,36,36,36, + 36,36,105,36,36,36,36,36,36,36,36,105,36,36,36,36, + 39,39,39,114,39,39,39,207,207,39,114,39,39,39,39,114, + 39,39,39,207,181,39,207,39,181,39,39,39,39,39,39,39, + 39,39,39,39,207,207,207,39,181,39,207,207,181,188,207,188, + 207,207,207,207,207,218,236,218,218,236,236,207,89,236,207,207, + 207,89,207,89,89,236,236,236,236,236,89,119,119,119,236,119, + 89,119,119,119,119,89,89,119,119,236,236,89,236,89,89,89, + 119,236,89,236,119,119,119,119,119,236,89,89,119,236,89,236, + 119,119,119,89,119,236,119,119,119,236,236,236,236,119,236,89, + 119,236,236,119,236,89,236,89,119,236,236,236,236,119,236,236, + 236,236,236,119,119,236,236,236,236,236,236,236,236,207,143,89, + 127,89,236,236,119,159,119,236,143,143,236,143,143,119,236,159, + 236,119,236,236,236,119,89,89,89,119,89,89,119,119,108,47, + 187,111,42,109,183,187,166,122,101,67,8,211,211,211,8,91, + 8,211,211,8,139,12,26,8,122,101,139,211,211,8,211,8, + 109,187,211,211,8,139,12,26,8,122,101,139,211,91,211,211, + 8,211,187,8,139,8,139,12,26,8,122,101,139,211,91,8, + 211,8,91,8,211,139,8,139,12,26,8,122,101,139,211,91, + 8,211,211,8,211,8,211,211,139,12,26,8,122,101,139,211, + 91,211,211,8,211,8,109,211,8,139,150,26,8,122,101,139, + 211,211,211,211,187,211,139,8,139,8,139,12,26,8,122,101, + 139,211,8,91,211,8,211,8,211,139,8,139,12,26,8,122, + 101,139,211,91,211,8,211,8,211,109,211,8,139,150,26,8, + 122,101,139,211,211,8,211,91,8,211,211,211,8,139,12,26, + 8,122,101,139,211,211,91,211,187,211,109,8,211,211,139,150, + 26,8,122,101,139,211,211,91,8,211,8,211,187,139,8,139, + 12,26,8,122,101,139,211,211,8,211,8,211,8,211,211,8, + 139,12,26,8,122,101,139,211,91,139,211,8,211,8,211,211, + 8,139,150,26,8,122,101,139,211,211,8,211,91,8,139,8, + 139,8,139,12,26,8,122,101,139,211,211,91,211,187,211,211, + 8,211,8,139,12,26,8,42,101,139,211,211,211,91,8,211, + 8,109,211,8,139,12,26,8,122,101,139,211,8,211,91,8, + 211,8,211,211,8,139,150,26,8,150,17,166,243,132,235,114, + 144,144,244,144,244,244,244,244,244,244,244,244,36,244,36,244, + 36,244,36,244,36,244,36,36,244,36,36,36,36,36,36,36, + 244,36,36,36,36,36,244,36,36,36,36,36,36,36,36,105, + 36,36,36,36,105,36,36,36,105,36,36,36,105,105,105,36, + 39,39,207,207,39,39,39,207,181,39,39,39,114,39,39,207, + 39,39,114,207,207,181,39,207,207,181,39,207,181,39,207,39, + 39,207,39,39,207,39,207,207,39,89,207,207,89,39,207,39, + 207,39,207,39,207,89,207,207,207,207,207,236,207,207,89,207, + 89,207,89,207,207,89,236,89,89,119,236,89,89,236,181,236, + 119,236,119,89,89,119,119,89,236,119,89,89,119,236,236,119, + 89,119,236,89,89,236,236,119,119,119,119,119,236,119,119,119, + 236,89,89,119,89,119,89,89,119,89,236,236,119,236,119,236, + 236,119,236,236,236,236,236,58,236,236,119,119,236,236,236,236, + 236,236,236,236,236,236,119,236,236,119,89,143,89,89,89,89, + 119,236,119,236,236,236,236,159,159,159,236,119,119,143,119,236, + 236,236,89,119,119,236,236,119,119,119,119,236,119,159,108,29, + 187,224,94,109,126,187,111,42,139,139,8,91,211,211,8,243, + 211,187,211,211,67,150,17,211,42,101,211,139,91,211,211,187, + 211,8,8,109,211,67,150,17,211,42,101,211,211,8,211,211, + 109,8,211,8,109,211,67,150,17,211,42,101,211,139,211,211, + 211,8,211,211,187,211,8,67,150,17,211,42,101,211,211,8, + 211,91,109,211,187,109,211,8,139,150,17,211,42,101,211,211, + 8,211,211,8,91,109,8,211,211,139,150,17,211,42,101,211, + 211,8,211,211,8,109,8,187,211,211,67,132,17,211,42,101, + 211,211,211,8,211,211,187,211,187,109,8,67,150,17,211,42, + 101,211,211,8,211,211,8,91,109,8,211,211,139,150,17,211, + 42,101,211,211,8,211,8,243,211,8,187,211,211,67,150,17, + 211,42,101,211,211,211,8,211,8,211,8,187,211,8,67,150, + 17,211,42,101,211,211,8,139,91,109,8,211,8,211,211,67, + 150,17,211,42,101,211,211,211,211,91,211,109,8,187,211,211, + 67,150,17,211,42,101,211,211,211,8,211,211,187,211,187,211, + 8,67,150,17,211,42,101,211,211,8,211,8,211,109,8,187, + 109,211,67,150,17,211,42,101,211,211,211,8,211,8,211,8, + 211,211,211,67,150,17,211,122,101,211,211,211,8,211,211,187, + 109,8,211,211,67,150,17,211,42,101,139,91,211,211,211,211, + 187,211,187,211,8,67,150,17,141,132,187,187,12,141,235,114, + 244,144,244,144,244,244,144,244,244,244,244,244,244,244,244,244, + 244,36,244,36,244,36,244,36,36,36,244,36,36,244,36,36, + 36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36, + 36,105,36,36,105,36,36,105,36,36,36,36,36,36,36,36, + 39,39,181,39,181,114,39,39,181,207,39,39,39,114,39,39, + 39,207,39,39,89,236,89,89,207,236,207,39,39,207,39,39, + 39,39,39,39,181,207,89,89,39,207,89,207,89,89,39,181, + 39,39,39,207,39,207,89,207,218,207,89,236,89,207,89,207, + 89,89,89,89,236,236,236,181,207,236,119,119,119,236,119,236, + 119,236,119,119,236,236,119,119,236,119,236,89,119,119,89,119, + 89,119,119,236,89,119,89,236,119,236,119,181,236,119,119,119, + 119,236,89,119,89,119,119,236,236,119,236,236,236,236,119,236, + 236,236,236,89,236,236,236,236,119,236,236,58,58,119,58,119, + 58,236,236,236,119,236,58,236,236,236,236,89,236,236,236,236, + 236,236,236,143,236,236,236,236,236,236,159,119,119,119,119,159, + 119,159,89,236,236,119,236,119,89,119,119,119,119,108,108,142, + 26,111,78,109,187,187,187,0,101,139,211,211,8,211,211,211, + 8,211,211,91,67,12,17,243,122,101,211,211,8,211,211,211, + 8,109,211,109,91,67,12,17,243,122,101,139,211,8,211,91, + 8,109,109,8,109,91,67,12,17,243,122,101,139,8,211,211, + 91,243,8,211,8,211,8,67,17,17,243,122,101,139,211,8, + 211,211,8,211,8,211,8,211,67,12,17,243,122,101,139,211, + 8,211,91,8,8,109,187,211,8,67,12,17,243,122,101,211, + 211,211,211,91,8,109,211,8,211,91,67,12,17,243,122,101, + 211,211,211,211,211,8,211,8,211,211,91,67,12,17,243,122, + 101,139,211,211,8,211,8,8,109,91,8,8,67,12,17,243, + 122,101,139,211,211,211,211,109,8,211,211,211,91,67,150,17, + 243,122,101,211,211,211,8,211,91,8,139,187,8,8,67,12, + 17,243,122,101,211,211,8,211,211,8,109,109,187,211,8,139, + 12,17,243,122,101,211,211,91,8,211,8,211,8,211,211,91, + 67,12,17,243,122,101,139,8,211,211,211,8,211,8,211,211, + 91,67,150,17,243,122,101,139,211,211,211,8,109,187,139,211, + 8,8,139,150,17,243,122,101,211,211,211,8,211,111,8,109, + 211,91,8,67,12,17,243,122,101,211,211,91,8,211,8,211, + 8,109,109,91,67,12,219,243,122,101,211,8,211,8,211,8, + 211,8,211,211,8,139,12,17,8,150,26,219,243,141,235,114, + 144,244,144,244,244,244,244,244,244,244,36,244,36,36,244,36, + 244,36,244,36,244,36,36,244,36,244,36,36,36,36,36,244, + 36,244,36,244,36,105,36,105,36,105,36,36,36,36,36,36, + 36,36,105,36,36,105,36,36,105,105,36,36,36,105,105,36, + 39,207,39,207,39,39,207,39,207,181,181,39,39,39,181,39, + 39,181,39,89,207,181,236,236,119,181,207,39,89,207,181,89, + 207,181,89,39,207,89,89,207,89,89,89,181,89,39,39,39, + 89,39,181,207,89,207,207,89,89,89,207,207,207,89,89,89, + 207,207,236,89,207,89,236,236,119,119,236,236,236,119,236,119, + 119,119,236,236,119,119,119,119,119,89,119,236,89,89,119,89, + 119,89,89,119,119,89,119,119,89,119,89,236,119,119,89,89, + 89,89,236,236,119,236,119,119,119,89,89,236,119,119,236,119, + 236,119,236,119,236,236,236,236,236,236,236,236,236,236,236,236, + 236,119,236,119,236,236,236,236,236,236,119,236,236,236,236,236, + 236,236,58,119,159,153,236,236,236,236,236,236,119,236,236,236, + 236,89,159,119,236,236,119,119,119,119,119,119,119,119,108,29, + 17,111,78,111,126,26,111,78,49,139,8,211,211,211,211,109, + 8,211,8,139,8,132,17,109,42,101,139,8,211,211,211,211, + 211,8,211,8,139,8,132,17,109,42,101,211,139,8,211,211, + 211,211,211,211,8,139,8,132,17,109,42,101,211,211,8,211, + 211,211,211,211,211,211,211,139,150,17,109,42,101,211,139,211, + 211,211,109,211,211,211,8,211,139,132,17,109,42,101,211,139, + 8,211,211,139,211,211,211,211,211,139,150,17,109,42,101,211, + 211,8,139,211,211,211,211,211,8,211,139,132,17,109,42,101, + 211,211,211,211,211,109,211,211,211,8,8,67,132,17,109,42, + 101,211,211,211,211,211,109,211,211,211,211,211,139,132,17,109, + 42,101,211,211,8,211,211,109,211,8,211,8,139,8,132,17, + 109,42,101,211,211,211,211,139,211,211,211,139,211,211,8,132, + 17,109,42,101,211,139,211,211,211,211,211,211,211,211,211,67, + 132,17,109,26,101,211,139,8,139,211,211,211,211,211,8,139, + 8,132,17,109,42,101,211,211,211,211,211,109,211,211,211,8, + 139,8,132,17,109,42,101,211,211,211,211,211,211,139,8,211, + 211,211,67,132,17,109,42,101,211,211,211,211,211,211,211,8, + 211,8,211,139,132,17,211,42,101,211,139,139,211,211,211,211, + 211,211,8,8,139,132,17,211,122,49,139,211,211,211,211,211, + 211,211,211,211,211,67,150,26,109,150,219,187,132,132,145,114, + 244,244,144,244,144,244,244,244,244,244,244,244,244,244,244,244, + 36,244,36,244,36,244,36,244,36,36,36,244,36,36,36,36, + 36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,105, + 36,36,36,105,105,36,105,36,36,105,36,105,36,36,36,36, + 39,207,39,207,207,39,207,39,207,207,58,181,39,39,39,39, + 39,89,39,39,207,89,236,181,240,119,181,207,207,39,39,207, + 39,39,207,207,207,89,236,89,89,236,89,89,89,89,89,39, + 89,39,39,39,39,207,207,89,207,207,89,89,207,207,89,89, + 89,207,207,89,236,89,236,236,236,89,89,89,236,119,236,236, + 119,119,119,119,119,236,236,119,119,119,119,119,119,119,119,236, + 119,119,119,119,119,236,236,236,89,119,119,89,89,119,119,236, + 236,236,236,236,119,236,89,236,236,119,89,236,89,236,236,236, + 236,89,236,236,236,236,236,236,119,58,119,236,58,119,58,119, + 236,119,236,119,236,89,236,236,236,236,58,119,236,58,236,236, + 236,236,236,236,89,236,236,236,236,236,89,236,236,236,236,119, + 143,119,236,119,236,236,89,119,89,119,119,119,119,119,108,142, + 17,111,122,109,126,187,126,0,67,211,211,211,211,211,211,109, + 211,211,8,139,67,150,17,109,122,67,139,211,211,211,211,61, + 211,211,211,8,139,67,150,219,211,122,67,211,211,139,211,8, + 91,211,211,8,8,139,67,150,17,109,122,49,211,211,139,139, + 8,61,139,109,8,211,8,67,17,17,109,122,67,211,211,8, + 139,211,109,211,211,211,211,8,67,17,17,109,122,49,211,211, + 139,211,8,91,139,8,211,211,8,67,150,219,211,122,49,139, + 211,8,139,8,91,139,187,211,211,211,67,150,219,211,122,49, + 139,211,211,211,211,211,211,211,8,139,187,67,150,219,211,122, + 49,211,211,211,211,211,91,211,211,8,211,8,67,150,219,211, + 122,49,211,211,211,211,211,91,211,211,211,8,139,139,150,219, + 211,122,49,139,211,211,8,211,211,211,187,211,211,139,67,150, + 219,211,122,49,211,211,8,139,211,211,91,211,8,211,8,67, + 12,219,211,122,49,211,139,211,139,211,109,109,211,8,8,139, + 67,150,219,211,122,49,211,211,211,211,211,91,211,8,211,8, + 139,139,150,17,109,122,49,211,211,211,211,8,61,211,211,109, + 211,91,139,150,17,109,122,49,139,211,211,211,211,61,211,211, + 211,8,8,67,12,219,211,122,49,211,8,139,211,211,91,211, + 8,211,139,8,67,150,219,211,122,67,139,211,211,211,211,91, + 211,8,211,211,91,67,150,17,211,150,219,219,150,150,235,114, + 144,144,244,244,244,244,244,244,244,120,244,36,36,36,244,36, + 244,36,244,36,36,244,36,36,36,244,36,36,36,36,36,244, + 36,36,36,36,36,36,36,105,36,105,36,105,36,36,105,36, + 105,36,36,36,36,36,105,36,105,36,36,36,105,105,105,36, + 207,39,181,39,207,207,207,207,207,207,236,184,181,39,181,207, + 181,207,89,181,89,89,236,236,240,108,89,39,207,89,89,39, + 89,89,89,207,236,181,58,181,236,119,119,89,89,89,39,89, + 114,89,89,89,89,89,89,207,207,207,207,207,89,89,207,236, + 236,89,236,236,236,236,89,236,236,119,119,119,119,89,119,119, + 236,119,119,236,236,119,119,89,119,89,119,119,119,236,119,119, + 119,119,89,236,119,119,119,119,89,89,89,119,119,119,236,119, + 89,236,89,236,89,119,236,236,119,236,236,89,236,89,89,89, + 236,236,236,119,236,236,89,236,236,236,236,119,236,236,236,236, + 119,236,236,236,119,236,119,236,236,236,236,236,236,236,236,236, + 236,236,236,89,236,236,236,236,159,236,236,236,119,89,89,236, + 119,236,119,236,119,236,119,89,119,89,89,119,119,119,108,29, + 26,111,122,109,166,26,111,26,101,139,139,139,139,139,211,139, + 211,211,139,211,67,17,26,211,26,101,139,139,139,139,139,139, + 211,139,211,139,211,67,17,26,109,42,101,139,139,211,139,139, + 139,139,211,211,139,211,67,17,26,243,26,101,139,139,139,139, + 139,139,211,211,211,139,139,139,132,26,211,26,101,139,139,139, + 211,139,139,211,211,211,139,139,139,150,26,109,42,101,139,139, + 139,139,139,139,211,211,211,139,139,139,17,26,109,42,101,139, + 139,139,139,139,139,139,139,139,139,8,67,17,26,109,42,139, + 139,139,139,139,139,211,211,211,211,139,139,67,17,26,109,42, + 101,139,139,139,139,139,139,139,139,211,139,139,139,17,26,109, + 42,101,139,139,139,139,139,139,211,211,211,139,139,67,12,26, + 109,42,139,139,139,139,139,211,211,139,139,211,139,139,139,17, + 26,109,42,101,139,139,139,211,139,139,139,211,139,139,211,139, + 132,26,109,26,101,139,139,139,211,139,211,139,211,211,139,211, + 67,17,26,243,42,101,139,139,139,139,139,139,139,211,211,139, + 139,67,17,26,109,42,101,139,139,139,139,139,139,211,211,139, + 139,139,67,17,26,109,26,139,139,139,139,139,139,139,211,139, + 211,139,139,67,132,26,109,26,101,139,139,211,139,139,139,139, + 211,211,211,139,67,17,26,109,42,101,139,139,139,139,139,139, + 139,211,211,139,139,67,132,219,109,254,187,26,166,141,145,114, + 244,244,244,244,244,244,244,244,244,244,244,244,244,244,36,244, + 36,244,36,244,36,244,36,244,36,36,36,244,36,36,36,36, + 36,36,36,36,36,36,36,36,36,36,36,36,105,36,36,36, + 36,36,36,105,36,105,36,105,36,105,36,36,36,36,36,36, + 207,39,89,207,207,39,207,207,181,188,207,236,108,236,39,207, + 207,207,207,207,89,89,236,181,240,83,108,89,207,89,89,181, + 39,39,207,39,236,58,184,240,240,119,181,89,89,89,39,89, + 207,89,207,89,181,236,181,89,89,207,89,207,89,89,89,89, + 236,181,89,89,119,236,89,119,236,236,236,119,119,119,119,119, + 236,236,119,181,236,236,119,119,119,119,89,119,119,89,119,236, + 236,119,181,119,119,119,119,236,236,236,236,236,236,119,236,119, + 89,119,236,119,89,89,119,236,89,119,236,236,119,236,236,89, + 119,89,89,236,89,58,119,236,236,236,236,236,236,236,236,236, + 236,119,236,236,236,236,236,236,236,236,236,58,236,58,58,236, + 119,236,236,89,236,89,89,89,89,89,89,236,119,119,89,236, + 236,236,119,89,119,236,119,89,119,119,119,119,119,119,108,142, + 26,150,162,109,126,219,187,0,8,91,26,91,26,91,91,26, + 91,26,91,26,67,132,26,12,78,91,91,26,91,91,26,91, + 26,91,26,91,26,67,132,26,8,162,8,91,26,91,91,26, + 91,26,91,26,91,26,67,132,26,12,78,8,26,26,91,26, + 187,26,91,26,91,26,91,182,150,26,12,78,8,91,26,91, + 26,91,26,91,91,26,91,26,67,132,26,8,122,8,26,91, + 26,91,187,26,91,26,91,26,26,67,132,26,8,122,91,91, + 26,91,26,187,91,26,26,91,26,12,67,132,26,8,122,91, + 12,26,91,26,91,91,26,91,91,26,26,67,132,26,8,122, + 91,91,26,91,91,17,26,26,91,91,26,26,67,150,26,187, + 42,187,91,91,26,91,91,26,91,91,26,26,91,141,150,26, + 8,122,91,91,26,91,26,91,91,26,91,26,91,26,67,150, + 26,8,122,8,26,91,91,26,91,26,91,26,91,26,12,182, + 150,26,12,78,8,26,91,26,91,26,91,26,91,26,91,26, + 67,132,26,187,42,187,91,26,91,91,26,91,26,91,26,91, + 26,67,132,26,8,122,91,91,26,91,91,17,26,91,26,91, + 17,26,67,132,26,12,42,187,91,26,91,91,26,91,26,91, + 26,91,26,182,150,26,12,78,8,91,26,91,91,26,91,26, + 91,91,26,26,67,132,26,12,78,8,26,91,91,26,187,26, + 91,26,91,26,26,8,12,17,12,150,17,187,150,150,145,114, + 144,144,244,244,144,244,144,244,244,120,244,36,244,36,244,36, + 244,36,244,36,36,244,36,36,244,36,36,36,36,36,36,36, + 244,36,36,36,36,36,105,36,36,105,36,105,36,36,105,36, + 36,105,36,36,36,36,36,105,36,105,36,36,105,36,105,36, + 207,207,207,207,207,181,207,207,207,188,207,236,181,83,181,207, + 89,89,89,181,236,181,89,236,58,161,247,207,89,207,89,89, + 181,89,236,181,236,181,240,108,58,119,89,89,89,89,89,89, + 89,89,119,236,236,236,236,89,39,207,207,89,207,89,207,89, + 89,236,236,236,89,236,119,89,119,119,119,89,236,89,236,89, + 119,119,89,236,236,119,236,89,119,89,119,89,119,119,119,119, + 119,119,119,236,181,119,89,89,236,236,89,119,119,89,236,236, + 119,236,119,236,236,119,89,236,236,89,236,236,236,89,89,236, + 89,89,236,89,236,89,89,236,236,236,236,119,236,119,58,58, + 58,236,119,58,119,236,119,119,119,153,236,236,58,236,236,119, + 89,89,89,236,89,89,89,236,236,119,236,119,89,89,119,119, + 119,89,89,119,89,236,236,119,89,119,119,119,119,119,108,29, + 26,187,183,187,166,26,111,0,26,219,26,26,26,42,42,187, + 42,219,183,26,243,150,12,211,0,17,219,219,26,219,219,183, + 187,42,219,219,26,8,150,12,211,0,26,219,219,219,183,187, + 183,187,219,219,183,26,8,150,187,211,162,26,187,219,219,187, + 42,187,219,183,26,219,219,8,150,12,211,0,26,219,187,219, + 187,42,26,42,42,26,183,219,8,150,17,211,0,26,219,219, + 219,219,42,187,187,26,26,187,219,8,150,17,211,0,219,17, + 26,183,187,42,183,187,219,26,183,26,8,150,17,211,0,219, + 26,26,26,26,42,183,219,42,219,219,26,8,150,17,211,0, + 17,219,219,26,183,42,187,183,219,219,219,219,8,150,12,211, + 0,26,219,219,26,219,219,183,219,42,187,219,26,8,150,17, + 211,0,219,219,219,219,219,26,183,187,219,26,219,219,8,132, + 17,211,0,26,219,26,183,187,42,187,183,42,42,187,26,8, + 150,12,211,0,26,17,219,219,187,26,42,187,26,219,183,26, + 8,150,12,211,0,26,219,219,26,42,187,183,187,42,219,219, + 26,8,150,17,211,0,17,219,219,219,183,42,187,219,42,26, + 26,26,8,150,12,211,0,26,17,219,26,26,219,183,187,42, + 219,219,26,8,150,12,211,0,26,219,219,219,183,187,183,219, + 42,219,187,26,8,12,12,211,162,26,219,219,219,187,42,187, + 183,26,26,219,26,182,150,26,211,111,219,166,132,132,145,114, + 244,244,144,244,244,244,244,244,244,244,244,36,244,244,244,36, + 244,36,244,36,36,36,244,36,105,244,36,36,36,36,36,36, + 36,36,36,36,36,105,36,36,36,36,36,36,105,36,36,36, + 36,36,36,36,105,105,36,36,105,105,36,36,36,105,36,105, + 207,207,181,39,207,39,207,207,181,207,207,207,207,240,83,108, + 207,181,207,236,236,119,119,181,58,83,161,83,89,89,89,89, + 119,119,236,119,58,240,83,161,89,236,119,181,89,181,89,89, + 181,236,119,240,119,119,236,89,89,89,207,89,207,89,207,236, + 89,119,119,236,181,236,236,236,119,119,58,119,119,119,119,89, + 89,236,236,119,89,119,119,236,119,119,119,119,181,236,119,89, + 236,236,119,236,89,119,236,236,89,119,236,89,119,119,119,236, + 89,89,236,236,236,236,236,119,236,89,236,89,236,236,89,207, + 236,89,236,89,236,236,236,236,119,236,236,119,236,236,236,236, + 236,236,236,236,236,236,236,236,119,58,236,236,236,236,236,236, + 236,236,89,89,236,89,89,89,89,119,89,236,236,89,89,89, + 119,119,236,119,89,89,89,119,119,89,119,119,119,119,108,29, + 26,187,183,187,111,26,187,0,211,67,99,139,67,139,139,67, + 139,139,139,139,8,150,219,243,0,8,139,67,139,139,139,139, + 182,139,139,139,139,8,132,42,243,0,211,139,139,139,139,139, + 139,139,139,139,139,139,8,150,219,243,0,211,139,139,139,67, + 139,139,139,182,139,139,139,8,150,183,243,0,211,139,139,139, + 67,67,67,67,182,139,139,139,8,150,42,109,0,211,139,139, + 139,67,139,182,67,182,139,139,139,8,150,42,243,0,8,67, + 139,139,67,139,67,139,67,139,139,139,8,150,42,243,0,139, + 67,67,67,139,139,139,67,139,139,139,139,8,150,42,243,0, + 8,139,139,139,67,139,139,139,139,139,139,139,8,150,219,8, + 0,211,101,67,139,139,139,67,67,139,139,139,67,8,12,26, + 243,0,8,101,139,139,67,139,67,139,182,139,139,139,8,150, + 42,109,0,211,67,139,139,67,139,139,67,67,139,139,139,8, + 150,219,109,0,211,139,139,139,67,139,139,67,139,139,139,139, + 8,150,219,8,0,211,101,67,67,139,139,139,67,139,139,139, + 139,8,150,42,243,0,8,139,139,139,67,139,67,67,182,139, + 139,139,8,150,219,243,0,211,139,67,67,139,139,139,67,139, + 139,139,139,8,150,219,243,0,211,139,139,139,139,139,139,67, + 139,139,139,139,139,132,219,243,0,211,139,139,139,67,139,139, + 67,67,139,139,139,139,150,219,141,254,26,187,150,132,225,114, + 144,244,244,244,244,244,244,244,244,244,120,244,36,244,36,36, + 244,36,36,244,36,244,105,244,36,36,36,36,36,36,36,36, + 36,36,36,36,36,36,36,105,36,105,36,36,36,105,105,36, + 105,36,36,36,36,36,36,105,36,36,105,36,36,36,36,105, + 181,207,207,181,207,181,207,207,207,207,181,89,89,181,108,252, + 240,207,119,181,119,119,240,119,240,108,161,247,108,119,236,181, + 236,236,58,119,240,83,161,247,119,236,119,236,236,236,89,119, + 58,119,240,108,108,58,236,236,89,207,89,207,89,89,89,89, + 236,236,236,236,236,119,119,89,236,236,119,236,89,236,236,236, + 236,236,119,236,119,89,89,119,89,89,119,89,236,119,89,119, + 119,236,89,119,119,236,119,236,119,236,236,119,236,236,89,236, + 236,236,89,119,89,119,119,89,236,236,236,236,236,89,89,236, + 89,89,207,89,89,89,89,119,89,236,89,236,236,236,236,119, + 58,58,58,236,119,236,236,119,89,236,236,89,236,89,89,89, + 89,127,89,119,127,89,89,89,89,89,89,89,89,89,89,89, + 89,89,119,236,119,119,119,89,89,119,119,119,119,119,108,29, + 26,111,42,111,254,162,111,0,8,211,139,139,211,211,139,187, + 211,211,139,139,211,12,122,211,0,211,139,139,211,211,211,139, + 211,211,211,139,182,211,12,122,211,0,8,139,139,211,211,139, + 211,109,211,211,139,182,211,187,122,211,0,8,139,139,139,211, + 211,211,211,211,211,139,139,211,12,122,211,0,8,139,139,139, + 109,109,109,109,139,8,139,139,211,187,122,243,0,8,139,139, + 139,109,139,211,211,211,211,139,139,211,187,122,211,0,211,139, + 139,211,211,211,109,109,8,211,139,139,211,187,122,211,122,187, + 139,139,211,139,211,139,8,109,139,139,182,211,187,122,211,0, + 211,139,139,139,109,139,211,211,109,139,139,139,211,187,122,182, + 0,8,139,139,211,211,211,109,109,8,211,211,139,211,150,122, + 211,0,8,139,139,211,211,211,211,211,211,211,139,139,211,187, + 122,243,0,8,139,139,211,211,211,211,211,187,211,139,182,211, + 187,122,243,0,8,139,139,211,211,211,139,187,211,211,139,182, + 211,187,122,182,0,8,139,139,211,211,211,139,187,211,211,139, + 182,211,187,122,211,0,211,139,139,139,211,211,109,211,8,211, + 139,182,211,12,122,211,0,8,139,139,211,211,211,211,109,211, + 211,139,182,211,187,122,109,0,8,139,139,211,211,211,139,187, + 211,211,139,182,243,12,122,211,0,8,139,139,139,211,211,211, + 109,8,211,139,211,8,187,42,211,109,187,187,132,132,145,114, + 144,244,144,244,244,244,244,244,244,120,244,244,244,36,244,36, + 36,244,36,244,36,36,36,36,36,244,36,36,36,36,36,36, + 36,36,36,36,105,36,36,36,36,36,105,36,36,36,105,36, + 105,36,105,36,36,105,36,105,36,105,105,36,36,105,36,36, + 207,207,207,89,181,188,207,181,39,207,207,89,236,89,236,240, + 176,240,207,236,119,181,119,119,181,83,161,108,83,161,236,58, + 119,236,58,240,119,161,83,161,89,236,119,119,119,119,119,58, + 58,108,83,108,240,119,181,236,119,89,89,236,236,236,236,89, + 89,119,119,236,89,89,119,89,119,89,119,236,119,89,119,119, + 119,236,236,236,119,236,89,236,236,89,236,236,236,236,89,236, + 119,119,236,236,236,89,236,236,236,236,236,236,89,119,236,119, + 236,236,236,236,236,89,236,89,236,89,89,89,236,236,89,207, + 89,89,207,89,89,89,89,89,89,236,89,89,89,119,236,236, + 89,89,119,236,236,119,89,236,89,89,89,89,236,207,236,89, + 89,89,127,119,89,89,89,89,89,89,89,89,236,236,236,236, + 236,89,119,89,236,236,89,236,119,89,119,119,119,119,108,29, + 42,111,122,187,224,183,187,0,8,139,109,109,109,109,211,8, + 8,139,211,211,243,17,42,8,0,8,211,211,211,211,109,8, + 109,8,211,211,139,243,17,42,8,0,8,211,211,211,109,109, + 8,109,8,211,211,139,8,17,42,211,0,8,139,109,109,109, + 211,8,211,8,8,211,211,243,17,42,243,0,8,211,109,211, + 109,211,211,187,211,8,211,139,243,17,26,211,0,8,139,109, + 8,109,109,187,211,8,211,211,139,243,17,26,243,0,187,139, + 254,211,109,211,8,109,211,211,211,139,243,17,42,243,0,8, + 139,109,109,109,109,187,8,109,211,8,139,8,17,42,8,0, + 8,211,109,211,109,211,8,8,187,211,211,139,243,17,42,243, + 0,8,211,211,211,109,211,8,109,8,211,211,139,211,17,42, + 211,0,8,139,109,211,109,187,8,211,8,8,211,139,243,17, + 26,211,0,8,211,211,109,109,211,8,211,8,211,8,139,8, + 17,26,211,0,8,139,109,109,109,109,139,187,8,139,211,139, + 8,17,42,8,0,8,211,109,211,109,109,211,8,211,211,211, + 139,8,17,42,8,0,8,211,109,109,109,211,109,8,211,211, + 211,139,243,17,42,8,0,8,211,109,211,211,211,8,109,8, + 8,139,211,8,17,26,8,0,8,211,211,211,211,109,211,8, + 211,211,211,67,243,17,42,243,0,8,139,109,109,109,109,211, + 109,8,139,211,182,8,17,42,211,109,219,187,132,132,225,114, + 244,244,244,244,71,244,244,244,244,244,120,120,36,244,36,244, + 36,36,244,36,244,36,244,36,36,36,36,244,36,36,105,36, + 36,36,36,36,36,36,105,36,105,36,36,36,105,36,36,36, + 36,36,36,36,36,36,105,36,105,36,36,105,36,105,36,105, + 207,207,89,89,89,89,207,89,207,181,236,181,236,236,89,119, + 161,106,236,119,119,58,119,240,108,108,176,108,108,161,83,181, + 240,119,181,108,83,176,240,161,58,58,58,58,184,181,58,58, + 240,83,83,108,58,58,236,236,236,207,236,89,207,89,236,236, + 58,236,236,119,119,119,89,119,89,119,236,119,236,119,236,236, + 236,89,119,119,236,119,236,119,89,236,119,119,236,119,236,119, + 236,236,236,89,236,236,236,236,236,119,236,89,236,236,119,89, + 236,119,236,236,89,236,236,236,89,236,236,236,89,89,89,89, + 236,89,89,89,89,89,89,207,236,89,236,236,119,236,119,89, + 236,236,236,236,119,89,236,89,236,236,236,89,89,89,207,89, + 89,89,119,89,127,89,236,89,89,89,119,119,89,119,119,89, + 89,89,236,119,119,119,89,119,119,119,119,119,119,119,108,29, + 26,111,162,109,111,78,111,162,8,139,139,139,67,139,139,211, + 211,211,182,67,211,150,122,187,0,8,139,139,67,139,139,139, + 139,211,139,211,67,211,150,122,187,0,8,67,139,67,139,139, + 139,139,211,211,139,67,211,150,122,187,0,8,139,139,139,139, + 139,139,211,211,211,182,67,211,150,122,187,0,8,139,139,139, + 139,139,139,139,139,211,211,67,211,150,162,187,0,8,139,67, + 139,139,139,139,139,211,211,211,67,211,150,0,8,0,139,139, + 139,139,139,139,139,139,211,211,211,67,211,150,0,109,0,211, + 139,139,139,139,139,139,139,211,211,139,67,211,150,122,187,0, + 8,67,139,139,139,139,139,139,139,211,139,67,211,150,122,187, + 0,8,139,139,139,139,139,139,211,139,139,211,67,243,150,122, + 187,0,8,139,67,139,139,139,139,211,211,211,211,67,211,150, + 162,12,0,8,139,67,139,139,139,139,139,211,139,139,67,211, + 150,162,12,0,8,139,67,139,67,139,139,139,211,211,139,67, + 211,150,122,187,0,8,139,139,139,139,139,139,211,211,139,139, + 67,211,150,122,187,0,8,139,139,139,139,139,139,211,211,139, + 139,67,211,150,122,187,0,8,139,139,139,139,139,139,139,211, + 211,211,67,211,150,122,187,0,8,139,67,139,139,139,139,211, + 211,211,211,139,109,150,122,187,0,8,139,139,139,139,139,139, + 139,211,211,139,139,211,150,122,187,254,187,187,150,183,199,114, + 244,244,244,244,244,244,244,120,244,120,244,244,244,244,36,244, + 36,244,36,36,244,36,36,244,36,36,36,36,36,36,36,36, + 36,36,36,36,36,36,36,36,36,105,105,36,105,36,105,36, + 105,36,105,105,36,36,36,105,36,105,36,105,36,105,36,36, + 89,207,207,181,236,181,218,181,207,207,236,236,236,181,236,236, + 58,252,176,89,181,240,181,119,108,108,106,108,184,240,176,108, + 119,119,108,83,176,83,240,161,108,236,58,58,184,240,240,108, + 83,161,108,108,240,240,119,236,181,207,207,89,236,89,236,236, + 236,236,236,236,236,119,89,236,89,236,89,89,236,236,89,236, + 236,236,236,236,236,119,236,119,236,89,236,119,89,119,236,119, + 89,236,236,236,236,89,236,119,236,119,58,236,89,89,236,236, + 236,236,236,236,236,236,89,236,236,89,236,236,236,236,236,89, + 236,89,207,236,236,236,89,89,236,89,89,89,119,89,236,89, + 236,89,119,89,236,89,236,89,89,89,236,236,236,89,236,89, + 89,89,89,119,89,89,236,236,236,236,89,119,236,89,119,159, + 119,119,236,236,89,119,236,89,119,119,119,119,119,119,108,29, + 42,111,122,109,111,183,111,0,187,187,187,187,187,111,187,109, + 91,26,91,12,12,150,42,8,162,187,187,187,187,187,187,187, + 187,187,12,26,12,109,150,42,8,162,26,187,187,187,187,187, + 187,187,187,91,26,12,12,150,42,8,162,187,187,187,187,187, + 109,91,187,187,91,26,12,12,150,42,8,162,187,187,187,187, + 187,187,109,91,91,12,26,12,109,150,42,8,162,26,111,187, + 187,187,211,91,187,187,12,91,12,150,150,42,8,0,26,187, + 187,187,187,111,91,12,91,12,26,12,243,187,42,8,162,187, + 187,187,187,187,211,187,187,187,91,26,12,150,150,42,8,162, + 26,187,187,187,187,187,109,91,12,187,26,12,12,187,26,8, + 162,187,187,12,187,187,109,91,187,187,187,91,26,243,150,42, + 8,162,26,111,187,187,8,111,91,187,187,12,91,12,243,150, + 42,8,162,26,187,187,187,187,111,187,187,187,91,26,12,12, + 150,42,8,162,26,111,91,187,187,187,187,187,187,91,26,12, + 12,187,42,8,162,187,187,12,187,187,109,91,12,187,26,91, + 12,150,150,42,8,162,187,187,187,187,187,109,91,187,187,26, + 91,12,12,150,42,8,162,187,187,187,187,187,187,111,91,187, + 12,91,12,12,150,42,8,162,26,187,12,187,187,109,91,12, + 187,12,12,12,12,150,42,8,162,187,187,187,187,187,109,91, + 187,187,12,187,12,150,150,42,8,254,219,187,150,187,225,114, + 244,244,71,244,244,244,244,244,244,120,120,36,244,36,244,36, + 244,36,244,36,36,244,36,36,244,36,36,36,36,36,36,36, + 36,36,36,36,105,36,105,36,36,36,36,105,36,105,36,105, + 105,36,36,36,36,36,36,36,36,105,36,36,105,36,105,105, + 207,181,236,236,207,207,236,153,181,236,236,181,236,236,181,119, + 58,108,136,176,119,119,108,108,119,83,106,161,58,240,161,106, + 108,108,83,106,161,89,240,106,108,240,181,119,108,181,240,240, + 176,161,240,240,119,58,119,236,236,89,236,236,89,236,236,89, + 119,89,119,236,236,236,119,236,236,119,236,236,89,89,236,119, + 58,236,236,119,236,236,236,236,236,236,236,89,236,236,89,89, + 236,119,236,89,89,119,236,236,119,89,236,89,236,236,236,89, + 236,236,119,58,119,236,236,236,236,236,89,236,236,236,236,236, + 236,236,119,236,119,236,119,236,236,236,236,236,89,236,119,236, + 119,119,236,236,236,236,119,236,236,236,236,89,236,119,236,236, + 236,236,89,236,236,119,89,236,119,119,143,236,119,119,236,236, + 236,236,119,119,236,236,119,119,119,119,89,119,119,119,108,29, + 26,111,78,12,224,42,224,0,0,0,122,122,122,122,0,0, + 0,0,0,0,219,187,219,187,0,0,0,0,122,122,122,0, + 0,0,0,0,0,26,187,219,187,0,0,0,0,122,122,122, + 122,0,0,0,0,0,219,187,26,187,0,0,0,122,0,0, + 0,0,122,0,0,0,0,219,187,26,187,0,0,0,122,122, + 0,0,0,0,0,0,0,0,26,132,26,187,0,0,0,122, + 0,0,0,0,0,0,0,0,0,26,187,26,187,0,0,122, + 122,122,0,0,0,0,0,0,0,0,26,132,26,187,0,0, + 0,122,0,0,0,122,0,0,0,0,0,26,187,219,187,0, + 0,0,122,122,0,0,0,0,0,0,0,0,17,132,26,187, + 0,0,0,122,0,0,0,0,0,0,0,0,0,26,17,26, + 187,0,0,0,122,0,0,0,122,0,0,0,0,0,26,132, + 26,187,0,0,0,122,122,0,122,0,0,0,0,0,0,17, + 166,26,187,0,0,0,122,0,122,122,122,0,0,0,0,0, + 219,132,219,187,0,0,0,122,0,0,0,0,0,0,0,0, + 0,26,17,219,187,0,0,122,122,0,0,0,0,0,0,0, + 0,0,219,187,219,187,0,0,0,122,0,122,122,0,0,0, + 0,0,0,219,187,219,187,0,0,0,0,0,0,0,0,0, + 0,0,0,0,219,187,26,187,0,0,0,122,0,0,0,0, + 0,0,0,0,0,26,17,219,187,111,42,187,150,219,225,89, + 244,244,244,244,244,244,120,244,120,244,120,244,36,36,244,36, + 36,36,36,244,36,36,244,36,36,36,36,36,36,36,105,244, + 36,105,36,36,36,36,105,36,105,36,36,105,36,105,36,36, + 36,105,105,36,105,36,36,36,36,105,105,36,105,105,36,36, + 236,236,236,181,236,236,207,236,236,236,236,236,184,184,184,58, + 240,108,161,147,161,207,119,108,240,161,136,176,58,240,108,161, + 136,83,106,148,240,119,83,176,247,108,119,240,108,108,83,161, + 176,240,240,108,240,119,236,236,236,89,89,89,89,89,236,89, + 119,89,119,119,119,236,119,119,89,89,119,236,236,89,236,89, + 236,119,236,119,119,119,236,119,236,236,236,236,89,236,236,89, + 89,89,236,236,236,89,89,89,119,119,119,236,89,89,236,89, + 119,236,236,236,119,58,119,119,236,236,119,236,236,58,236,58, + 58,236,58,119,119,236,236,236,236,119,236,236,119,236,119,236, + 58,119,119,119,58,236,236,236,236,236,236,236,236,236,236,236, + 236,159,236,159,236,159,119,143,236,119,159,236,143,119,119,159, + 119,159,236,159,119,236,159,119,119,119,119,159,119,159,108,29, + 42,111,78,109,224,26,109,122,26,26,26,26,42,42,26,17, + 219,219,219,26,17,219,219,12,42,26,26,26,26,42,42,26, + 17,17,219,219,219,219,17,219,12,42,17,26,26,26,42,42, + 26,17,17,219,219,26,17,132,183,12,42,26,26,26,26,26, + 42,26,17,17,219,17,26,17,132,219,12,42,26,26,26,26, + 26,42,26,219,17,219,219,219,26,132,219,12,42,26,26,26, + 26,42,42,26,17,219,219,219,219,219,219,219,12,42,26,26, + 26,26,26,42,26,17,17,219,219,219,17,219,219,12,42,26, + 26,26,26,26,42,26,17,17,219,17,219,17,219,219,12,42, + 26,26,26,26,42,42,219,17,17,219,17,26,219,132,219,12, + 42,26,26,26,26,42,42,26,17,219,219,219,219,17,132,219, + 12,42,26,26,26,26,26,42,26,17,219,219,219,219,26,132, + 219,12,42,26,26,26,26,42,42,26,17,219,17,219,26,26, + 132,219,12,42,26,26,26,26,26,42,26,17,17,219,219,26, + 17,17,219,12,42,26,26,26,26,42,42,26,17,219,219,219, + 219,17,219,219,12,42,26,26,26,26,26,42,26,12,219,219, + 219,26,17,219,219,12,42,26,26,26,26,42,42,26,17,219, + 219,219,26,17,219,219,12,42,26,26,26,26,42,42,26,17, + 17,219,17,26,17,132,183,12,42,26,26,26,26,42,42,26, + 17,219,219,219,219,17,219,219,12,111,219,219,150,17,225,181, + 244,244,244,71,244,244,244,244,244,120,120,244,36,244,36,244, + 36,244,36,36,244,36,36,36,36,36,36,244,105,36,105,36, + 36,36,36,105,105,36,105,36,105,36,105,105,36,105,36,105, + 105,105,36,105,36,36,105,36,105,36,36,36,36,36,105,105, + 236,181,58,184,181,58,181,218,181,236,184,181,58,181,240,240, + 181,119,83,161,189,161,119,240,108,83,136,147,184,108,83,83, + 136,136,76,83,184,83,83,136,161,58,108,119,108,83,161,136, + 161,83,108,240,119,58,119,236,236,236,236,236,236,58,119,58, + 236,119,89,236,236,119,236,236,236,119,89,89,89,236,89,236, + 119,236,58,236,236,236,236,236,119,236,236,89,89,89,89,89, + 89,236,89,89,89,119,119,236,119,89,89,89,236,236,89,236, + 89,236,236,58,236,58,236,236,58,58,236,58,58,236,184,58, + 236,184,58,153,236,236,58,236,236,236,236,58,236,236,236,119, + 236,58,236,58,236,119,236,58,236,236,236,58,236,58,58,159, + 58,236,159,236,159,236,236,119,159,236,236,119,159,119,159,236, + 159,236,119,143,236,159,236,236,89,159,119,119,119,108,108,29, + 26,126,42,224,224,183,187,26,243,12,150,17,219,17,12,243, + 150,150,12,150,17,17,42,12,26,243,12,150,17,219,17,12, + 243,12,150,12,17,12,219,26,187,26,243,12,150,17,219,17, + 12,243,150,150,12,150,17,219,26,187,26,243,12,150,17,219, + 17,12,243,150,150,12,12,17,219,42,12,26,243,12,150,187, + 219,17,17,8,12,150,12,12,150,219,26,187,26,243,12,150, + 17,219,17,12,243,12,150,12,12,187,17,26,187,26,243,12, + 150,17,219,17,17,243,12,150,12,12,17,17,42,12,26,243, + 12,150,17,219,17,12,243,150,150,12,12,17,17,26,12,26, + 243,12,150,187,219,17,17,243,12,150,12,17,12,219,26,187, + 26,243,12,150,17,219,17,12,8,12,150,12,17,187,219,42, + 12,26,243,12,150,17,219,17,12,243,12,150,12,17,150,219, + 42,12,26,243,12,150,17,17,17,12,243,12,150,12,150,150, + 219,42,187,26,243,12,150,17,219,17,12,243,150,150,12,12, + 12,219,26,187,26,243,12,150,17,219,17,12,8,150,150,12, + 12,187,17,42,12,26,243,12,150,17,219,17,12,243,150,150, + 12,150,17,17,42,12,26,243,12,150,17,219,17,12,243,12, + 150,12,150,17,17,26,12,26,243,12,150,17,219,17,12,243, + 12,150,12,17,17,219,26,12,26,243,12,150,17,219,17,12, + 243,12,150,12,12,17,17,26,12,150,219,187,132,219,225,89, + 244,244,244,120,248,244,36,244,120,244,36,244,36,244,36,36, + 36,244,36,36,36,244,36,36,36,36,36,36,36,36,36,36, + 36,105,36,36,36,36,105,36,105,36,105,36,105,105,36,105, + 36,105,36,105,105,36,36,36,36,105,105,36,36,105,36,36, + 236,236,153,184,184,184,240,184,58,181,236,58,184,58,240,108, + 108,240,83,83,136,157,161,184,83,161,136,189,108,108,66,83, + 176,189,136,236,108,108,161,136,106,108,108,108,83,161,136,176, + 83,247,108,240,119,119,236,181,58,236,236,58,236,236,236,58, + 236,58,119,236,236,119,236,119,236,236,236,236,119,236,119,236, + 236,236,119,58,58,58,58,236,119,236,236,236,236,89,236,236, + 89,236,236,236,236,89,236,89,119,236,89,89,89,119,119,119, + 119,119,236,119,236,58,236,236,236,236,236,153,58,58,236,184, + 58,236,58,184,184,153,236,58,236,58,236,184,58,58,58,58, + 236,184,236,58,236,184,236,236,58,58,236,58,236,153,236,58, + 58,58,58,236,159,159,159,236,159,236,153,159,236,236,119,159, + 159,159,159,159,236,159,119,159,119,119,119,119,119,119,108,172, + 26,126,78,224,111,42,187,219,150,17,17,17,17,17,26,243, + 150,150,12,17,17,17,26,243,219,150,17,17,187,17,17,26, + 243,150,150,12,17,12,219,26,150,26,150,17,17,187,17,17, + 26,243,150,150,17,17,12,17,26,243,219,150,17,12,17,17, + 17,26,243,150,150,150,17,12,219,26,243,219,150,17,17,17, + 17,17,17,243,150,150,17,17,12,219,26,243,219,150,17,12, + 17,132,17,26,8,150,150,12,17,17,17,26,243,219,150,17, + 12,187,17,17,17,243,150,150,17,12,17,17,26,243,219,150, + 17,17,187,17,17,26,243,150,150,17,12,17,219,26,243,219, + 150,17,17,17,17,17,26,243,150,150,150,219,12,219,26,243, + 219,150,17,17,187,17,17,17,243,150,150,12,17,12,17,26, + 243,219,150,17,12,17,17,17,26,8,150,150,12,17,12,219, + 26,243,219,150,17,17,17,17,17,26,243,150,150,17,17,12, + 17,26,243,219,150,17,17,187,17,17,26,243,150,150,150,219, + 12,219,26,243,219,150,17,12,17,132,17,17,150,150,150,17, + 17,17,17,26,243,219,150,17,12,17,17,17,26,243,150,150, + 17,12,17,17,26,243,219,150,17,12,17,17,17,26,8,150, + 150,17,12,17,219,26,243,219,150,17,12,17,132,17,26,243, + 12,150,150,17,12,219,26,243,219,150,17,12,187,17,17,26, + 243,12,150,12,12,17,219,26,109,187,219,219,141,219,145,181, + 244,244,71,244,120,244,244,244,244,120,244,120,36,36,36,244, + 36,36,36,244,36,36,36,36,36,36,36,36,36,36,36,36, + 244,105,36,105,36,105,105,36,105,36,36,36,105,36,105,105, + 105,36,105,105,36,105,105,36,36,36,36,105,36,36,105,36, + 181,218,181,58,181,58,181,240,108,247,240,181,236,181,119,240, + 108,108,108,83,176,147,157,83,108,161,136,77,247,83,83,176, + 136,147,148,161,108,66,161,106,76,240,108,108,161,136,148,161, + 161,108,240,58,58,58,58,236,236,58,181,236,236,58,119,236, + 58,236,236,119,58,236,119,236,89,89,119,119,89,89,236,119, + 119,119,236,119,236,236,236,236,236,236,236,236,89,89,119,89, + 119,119,119,119,89,236,181,119,236,89,119,119,236,89,89,236, + 236,236,119,236,58,236,58,58,236,58,184,58,153,236,184,58, + 236,184,236,236,58,58,58,236,58,236,236,236,236,153,236,236, + 58,58,184,236,184,58,58,58,236,236,236,236,184,58,58,153, + 236,236,58,184,236,236,236,159,153,58,159,119,159,159,236,159, + 119,159,119,159,119,143,119,159,143,119,119,119,119,108,108,29, + 26,166,78,109,224,42,126,219,12,17,132,187,150,150,17,12, + 17,17,12,132,17,187,26,109,219,12,17,132,17,150,150,219, + 150,12,17,150,132,17,187,26,109,219,12,17,132,17,150,150, + 219,12,12,17,12,132,17,187,26,109,219,12,17,132,187,150, + 150,219,12,17,17,17,132,17,187,26,109,219,12,17,132,17, + 132,150,26,150,12,17,150,17,17,187,26,109,219,12,17,132, + 17,17,150,219,150,17,17,150,132,17,187,26,109,219,12,17, + 132,17,132,150,26,150,12,17,150,17,17,187,26,109,219,12, + 17,150,219,150,150,17,12,17,17,150,132,187,187,26,109,219, + 12,17,132,187,150,12,219,150,17,17,12,17,17,187,26,109, + 219,12,12,132,17,132,150,26,150,17,150,150,132,17,187,26, + 109,219,12,17,132,187,150,150,219,150,17,17,150,17,17,187, + 26,109,219,17,12,132,187,150,150,219,150,17,17,12,17,17, + 187,26,109,219,12,17,150,219,150,150,17,12,17,17,12,17, + 17,187,26,109,219,12,12,132,219,17,150,26,12,12,17,150, + 132,17,187,26,109,219,12,17,132,187,150,150,219,12,17,12, + 17,132,17,187,26,109,219,12,17,132,187,150,150,219,150,12, + 17,17,132,187,187,26,109,219,12,17,132,17,17,150,219,150, + 150,17,12,132,17,187,26,109,219,12,17,132,17,150,150,219, + 150,150,17,150,132,187,187,219,109,111,183,187,132,183,225,89, + 120,244,120,244,244,120,120,244,120,120,120,120,244,36,36,36, + 244,36,36,36,36,36,36,36,36,36,36,36,105,36,105,36, + 36,36,105,36,36,105,36,105,105,105,105,105,105,36,105,36, + 105,36,105,105,36,36,105,36,105,105,36,105,36,36,36,36, + 236,207,236,236,236,58,58,240,181,83,161,161,247,83,119,236, + 240,108,108,240,83,176,189,189,161,176,76,157,161,83,161,136, + 157,176,106,170,252,240,161,136,232,240,66,161,176,77,176,83, + 66,240,240,58,240,240,240,58,58,236,58,236,236,236,181,58, + 119,119,236,236,119,236,119,119,119,89,89,236,119,119,89,119, + 119,119,119,119,119,119,119,119,119,119,89,236,236,89,89,89, + 89,89,89,236,119,236,236,119,119,89,89,119,236,236,119,119, + 119,236,119,119,58,58,236,58,58,236,236,119,58,236,236,58, + 58,58,184,236,236,236,236,236,236,58,236,58,119,58,58,58, + 236,119,58,236,236,236,236,236,236,58,58,236,236,236,119,58, + 58,236,58,58,184,159,236,58,236,58,236,159,119,159,236,159, + 119,159,119,159,119,159,119,119,159,119,119,119,119,119,108,172, + 26,187,0,109,95,42,187,219,12,17,132,219,17,17,219,150, + 150,150,17,17,17,132,26,243,219,12,17,132,219,17,12,219, + 150,150,17,17,17,12,132,26,211,219,12,17,132,219,17,12, + 219,150,150,132,17,219,12,132,26,243,219,12,17,132,219,17, + 12,219,150,150,150,17,17,17,150,26,109,219,12,17,132,219, + 17,150,219,150,150,17,17,17,17,132,26,243,219,12,17,132, + 219,12,12,219,150,150,17,17,132,17,132,26,243,219,12,17, + 132,219,17,150,219,150,150,17,17,132,17,132,26,109,219,12, + 17,132,219,12,17,219,150,150,17,17,17,17,150,26,109,219, + 12,17,132,219,17,12,219,150,150,150,17,17,12,132,26,243, + 219,12,17,132,219,17,150,219,150,17,17,17,17,17,132,26, + 109,219,12,17,132,219,17,12,219,150,150,17,17,17,17,150, + 26,109,219,17,17,132,219,17,12,219,150,150,150,17,17,17, + 132,26,243,219,12,17,132,219,17,17,219,150,150,150,17,17, + 12,132,26,243,219,17,17,132,17,17,150,219,150,150,17,17, + 17,17,132,26,243,219,12,17,132,219,17,12,219,150,150,132, + 17,17,17,132,26,109,219,12,17,132,219,17,12,219,150,132, + 150,17,17,17,150,26,109,219,12,17,132,219,12,12,219,12, + 132,150,17,17,17,132,26,109,219,12,17,132,219,17,12,219, + 12,150,17,17,17,17,187,26,243,150,26,219,132,219,225,181, + 120,244,120,248,244,244,120,244,244,120,244,36,36,120,36,36, + 36,36,244,36,36,36,36,36,36,36,36,105,36,105,105,36, + 36,105,36,105,105,105,105,105,105,36,105,105,36,105,105,36, + 105,36,105,36,105,105,105,105,36,36,36,105,36,105,36,105, + 236,181,236,236,181,236,236,236,58,58,58,108,161,106,136,252, + 83,58,119,108,108,83,136,157,77,252,232,53,161,176,136,189, + 148,83,252,76,170,161,176,136,77,247,161,136,77,147,161,161, + 83,108,83,108,240,58,119,119,119,236,236,181,236,58,236,119, + 58,236,119,119,236,119,89,89,89,89,89,119,119,119,58,236, + 58,119,58,58,58,58,58,119,89,89,236,119,119,119,119,89, + 236,89,236,119,236,119,119,89,89,236,89,89,119,119,236,119, + 119,119,119,119,58,58,58,119,236,119,236,236,236,119,58,236, + 236,58,236,58,58,58,58,236,119,236,119,236,236,236,236,236, + 119,236,58,58,58,58,58,58,58,236,89,119,236,236,236,58, + 236,58,236,58,236,236,58,58,159,236,58,159,119,159,119,159, + 58,58,159,119,159,159,143,159,119,159,159,119,119,108,108,29, + 42,183,122,111,111,42,111,42,150,17,17,17,132,150,219,12, + 219,132,12,17,132,132,26,109,26,150,17,17,17,150,132,219, + 12,17,150,12,17,132,150,26,243,42,150,17,17,17,150,132, + 219,12,17,150,12,17,17,132,26,211,26,150,17,219,17,150, + 132,219,12,17,12,17,17,132,132,26,211,26,150,17,17,17, + 150,17,219,12,17,150,132,17,132,150,26,211,26,150,17,17, + 17,132,132,219,12,17,150,17,17,132,150,26,109,26,150,17, + 17,17,150,17,219,12,17,150,150,17,132,132,26,211,26,150, + 17,17,17,132,132,219,12,17,150,12,17,132,132,26,211,26, + 150,17,17,17,132,150,219,12,17,17,150,17,132,150,26,211, + 42,150,17,17,17,150,219,219,12,150,150,12,17,166,150,26, + 211,42,150,17,219,17,150,132,219,12,17,150,150,17,132,132, + 219,211,26,150,17,17,17,150,132,219,12,219,132,132,17,132, + 150,26,109,42,150,17,17,17,150,132,219,12,17,17,150,17, + 132,150,26,211,26,150,17,17,17,150,17,219,12,17,150,12, + 17,132,150,26,109,26,150,17,219,17,150,132,219,12,17,150, + 12,17,166,150,26,211,26,150,17,219,17,150,132,219,12,17, + 132,12,17,132,132,219,211,26,150,17,17,17,132,132,219,150, + 17,17,12,17,187,150,26,211,26,150,17,219,17,150,132,219, + 150,219,150,12,17,132,150,219,211,187,187,26,132,219,225,89, + 244,244,244,244,120,120,120,36,244,120,120,244,36,244,36,244, + 36,36,36,36,36,36,36,36,36,36,105,36,105,36,105,105, + 36,105,36,105,105,36,105,105,105,105,105,105,105,105,105,105, + 105,105,105,105,105,105,36,105,105,105,105,36,36,105,36,36, + 236,236,58,236,236,181,236,58,236,181,240,119,119,108,161,136, + 148,76,252,83,83,159,161,27,193,232,148,189,232,148,189,85, + 83,161,252,136,147,189,176,76,189,149,136,148,189,136,176,161, + 66,108,108,240,240,119,58,236,240,240,58,240,119,58,236,236, + 58,236,236,181,236,119,119,236,119,119,89,89,236,119,119,236, + 58,119,119,119,119,119,236,58,236,119,89,89,89,89,119,119, + 119,119,236,119,89,89,236,119,119,119,236,89,119,119,236,119, + 58,58,58,119,119,119,58,119,236,119,236,89,207,236,236,119, + 236,236,236,236,119,236,58,236,89,236,236,236,89,89,236,236, + 119,119,236,236,236,236,236,236,236,236,236,236,236,89,207,236, + 236,119,236,119,236,236,236,236,58,58,236,119,236,236,236,58, + 58,159,58,159,236,119,119,159,119,119,119,119,119,119,108,29, + 42,187,0,111,111,183,111,26,150,17,17,17,17,17,219,150, + 12,132,132,17,26,150,26,109,26,150,219,17,17,17,17,219, + 150,17,132,132,219,26,132,26,211,26,150,219,17,17,17,17, + 219,150,219,150,17,132,26,132,26,109,26,150,17,17,17,17, + 17,219,150,132,150,17,17,26,132,26,109,26,150,17,17,17, + 132,17,219,150,17,12,17,17,26,132,26,109,26,150,17,150, + 17,17,17,219,150,17,150,17,219,26,150,26,109,26,150,17, + 17,17,132,17,219,150,17,132,17,17,26,150,26,109,26,150, + 17,17,17,17,17,219,150,17,132,132,219,26,150,26,109,26, + 150,17,17,17,17,17,219,150,132,132,17,219,26,132,26,109, + 42,150,17,17,17,150,17,219,12,219,150,17,219,26,150,26, + 109,26,150,17,17,17,17,17,219,150,17,17,17,17,26,187, + 26,211,26,150,219,17,17,17,17,219,150,12,12,17,219,26, + 132,26,211,26,150,17,17,17,17,17,219,150,132,132,132,219, + 26,132,26,109,26,150,17,150,219,150,17,219,150,219,150,132, + 219,26,150,26,109,26,150,17,17,17,17,17,219,150,219,150, + 132,219,26,150,26,109,26,150,17,17,17,17,17,219,150,17, + 132,132,219,26,187,26,109,26,150,17,150,17,17,17,219,150, + 132,132,17,132,26,132,26,109,26,150,17,17,17,17,17,219, + 150,17,132,132,219,26,187,219,109,111,187,219,132,219,225,114, + 244,248,244,244,244,244,244,120,244,120,36,120,36,36,36,36, + 36,36,36,36,36,36,36,105,36,36,105,105,105,36,105,36, + 105,36,105,105,105,105,105,36,105,105,105,105,105,105,105,105, + 105,105,105,105,105,105,105,105,105,36,105,105,105,105,36,105, + 181,236,236,236,58,236,236,58,58,236,119,108,108,240,159,181, + 161,136,77,77,148,136,136,136,185,157,27,189,27,27,157,52, + 161,86,83,66,136,189,77,147,189,51,189,157,232,161,83,83, + 83,66,83,83,247,161,83,83,83,240,240,184,181,236,236,119, + 89,236,236,236,89,236,236,119,89,236,119,119,119,236,119,119, + 119,58,58,58,119,236,119,236,119,236,119,119,119,119,236,89, + 119,89,119,119,119,119,119,89,89,89,119,119,236,119,119,236, + 119,119,119,58,58,119,236,119,119,236,119,236,119,89,119,119, + 119,119,236,119,236,119,236,236,236,236,89,89,236,236,89,89, + 119,236,89,236,236,119,58,119,89,236,89,89,119,236,119,89, + 89,119,119,236,119,119,119,119,119,236,119,236,119,159,236,159, + 119,236,119,159,119,159,159,236,119,159,119,159,119,119,108,29, + 122,183,0,150,111,26,95,26,17,17,150,17,150,132,219,12, + 132,12,17,219,17,187,17,243,42,12,17,150,17,150,17,219, + 12,132,17,12,219,17,187,17,243,42,12,17,150,17,150,150, + 219,12,132,17,132,219,17,187,17,243,42,12,219,150,17,150, + 150,219,12,17,17,150,219,17,187,219,243,42,12,17,150,17, + 17,17,219,12,132,132,150,219,17,187,17,109,42,12,219,17, + 17,150,132,219,12,132,17,12,219,17,187,17,243,42,12,219, + 150,17,17,17,219,12,132,12,17,219,17,187,219,243,26,17, + 17,150,17,150,150,219,12,132,17,12,219,17,187,219,243,42, + 12,17,150,17,150,17,219,12,219,12,150,219,17,187,17,243, + 26,17,17,150,17,17,17,219,150,132,17,150,17,17,187,219, + 243,42,12,219,150,17,150,132,219,12,132,150,132,219,17,12, + 219,243,42,12,17,150,17,150,17,219,12,132,132,132,17,17, + 187,219,243,42,17,17,150,17,150,150,219,12,219,12,17,219, + 17,187,219,109,26,17,17,17,17,219,150,219,12,132,17,17, + 17,17,187,17,243,42,12,219,150,17,150,150,219,12,132,12, + 17,17,17,187,219,243,42,12,219,150,17,132,150,219,12,132, + 17,12,219,17,12,219,109,26,17,219,17,17,150,17,42,12, + 17,17,132,219,17,187,219,243,42,12,219,150,17,150,12,26, + 12,132,17,17,219,17,187,17,109,187,183,26,187,183,199,89, + 120,244,120,248,120,120,120,120,36,244,120,120,36,36,244,36, + 244,36,36,36,36,36,36,36,36,36,105,36,105,105,105,105, + 36,105,36,105,105,105,105,105,105,105,105,105,105,105,105,105, + 105,105,105,105,105,105,105,105,105,105,105,105,36,105,105,36, + 236,236,181,153,181,184,236,181,184,58,181,58,181,108,108,108, + 108,108,161,106,148,189,157,157,198,189,170,157,189,170,232,118, + 27,193,193,170,77,198,189,170,189,198,170,147,176,176,176,76, + 148,147,148,136,161,83,108,240,119,236,119,119,119,236,89,236, + 181,89,236,236,89,89,89,236,119,119,236,119,119,119,119,119, + 119,119,119,119,119,119,119,119,119,236,236,236,119,119,119,236, + 119,119,89,119,236,89,207,236,236,89,119,119,89,119,119,119, + 119,119,119,119,58,119,119,119,119,236,89,236,236,89,89,119, + 89,119,236,119,119,119,236,119,119,236,236,89,119,236,236,236, + 119,119,119,119,236,119,236,119,89,236,119,89,89,89,119,236, + 89,119,236,89,236,236,119,236,119,119,119,119,119,119,236,58, + 119,236,236,119,119,236,119,119,119,119,119,119,159,108,108,142, + 78,42,162,150,111,42,111,42,17,17,17,12,17,17,219,17, + 132,17,17,17,17,187,26,150,26,17,219,12,17,150,219,219, + 132,132,17,17,17,17,187,42,150,26,17,219,12,17,17,219, + 219,17,132,17,17,219,17,187,26,150,26,17,219,12,17,17, + 219,219,132,132,17,17,17,17,187,26,150,42,17,219,12,150, + 150,219,219,132,219,17,17,17,17,187,26,150,26,17,17,12, + 17,12,219,219,132,132,132,17,17,17,187,26,150,42,17,219, + 12,150,150,219,219,132,219,150,17,219,17,187,26,150,42,17, + 219,12,17,17,219,219,132,132,17,17,17,17,187,26,150,42, + 17,219,150,17,150,219,219,150,219,17,17,17,17,187,26,150, + 42,17,219,12,150,150,219,219,132,132,17,17,219,17,187,26, + 150,26,17,219,12,17,12,219,219,132,219,17,12,219,17,187, + 26,150,26,17,219,12,17,150,219,219,17,17,17,17,17,17, + 187,26,150,42,17,219,12,17,17,219,219,150,17,17,17,17, + 17,187,26,150,42,17,17,12,150,17,17,219,132,132,17,17, + 219,17,187,26,150,26,17,219,12,17,17,219,219,17,132,17, + 17,17,17,187,26,150,26,17,17,12,12,17,219,219,17,150, + 17,17,17,17,187,26,150,42,12,17,12,17,150,219,219,150, + 132,17,17,219,17,12,26,150,26,17,219,12,17,150,219,219, + 150,132,12,17,17,17,17,26,150,26,183,187,187,183,199,89, + 36,244,120,120,120,120,120,244,36,244,36,120,36,36,36,105, + 36,36,36,36,36,105,105,36,105,36,105,36,105,105,36,105, + 105,105,105,105,105,105,105,105,105,105,105,105,105,105,208,105, + 208,105,105,105,105,105,105,36,105,105,36,105,105,36,105,105, + 153,153,153,181,236,153,184,58,58,58,58,240,108,108,108,83, + 108,161,108,114,83,252,136,189,6,189,157,53,157,157,170,170, + 231,195,65,65,77,170,189,189,157,157,77,77,157,157,193,189, + 148,106,106,161,161,161,83,240,240,119,236,119,236,89,89,89, + 207,236,89,89,236,89,236,119,89,89,119,236,119,236,119,58, + 119,119,119,58,119,119,119,236,236,119,119,119,236,119,119,119, + 119,89,119,236,119,236,236,89,119,119,89,119,119,236,119,119, + 58,119,119,119,119,119,236,119,236,119,119,119,119,236,119,89, + 119,89,119,236,236,89,119,89,89,89,89,236,89,119,89,119, + 89,89,89,119,119,89,89,236,119,119,89,236,236,236,236,89, + 119,89,119,89,119,119,89,119,119,236,119,119,119,58,119,119, + 159,119,119,159,236,119,119,89,159,119,119,119,119,119,108,29, + 162,187,0,224,126,183,141,219,219,26,17,12,17,17,219,132, + 17,17,219,183,17,17,26,150,219,17,26,17,17,12,17,219, + 17,17,17,219,183,12,132,26,150,219,17,26,17,17,12,17, + 219,132,12,17,219,219,17,17,26,150,219,17,26,17,17,12, + 17,219,17,17,219,132,219,17,12,26,150,219,17,26,17,17, + 12,17,219,17,17,17,132,219,17,17,26,150,219,219,26,17, + 17,12,17,219,17,17,219,132,219,17,17,26,150,219,17,26, + 17,17,17,17,219,219,12,219,132,219,17,12,26,150,219,17, + 26,17,17,12,17,219,17,17,17,132,219,17,12,26,150,219, + 17,26,26,17,12,17,219,17,17,17,132,219,17,17,26,150, + 219,17,26,17,17,12,17,26,219,12,219,132,219,17,12,26, + 150,219,17,26,17,17,17,17,219,17,12,219,132,219,17,12, + 42,150,219,17,26,17,17,12,17,219,132,12,219,132,219,17, + 12,26,150,219,17,26,17,17,12,17,219,17,12,219,132,219, + 17,12,26,150,219,219,26,17,17,17,17,219,17,12,219,132, + 219,17,17,26,150,219,17,26,17,17,12,17,219,150,17,219, + 132,219,17,12,26,150,219,219,26,17,17,12,17,219,132,17, + 17,132,219,17,12,26,150,219,219,26,17,17,12,17,219,219, + 12,17,219,219,17,187,26,150,219,17,26,17,17,17,17,219, + 17,17,219,132,219,17,187,26,109,111,221,187,166,0,199,89, + 244,120,244,120,120,120,120,120,120,36,120,120,36,36,36,36, + 36,36,36,36,36,36,105,105,36,105,105,36,105,105,105,105, + 36,105,105,105,105,105,105,105,105,105,105,208,105,105,208,105, + 105,208,105,105,105,105,105,105,105,105,36,105,105,105,36,105, + 58,181,153,184,181,236,184,181,240,58,240,181,108,108,108,108, + 83,161,202,190,133,87,86,52,170,157,157,189,157,157,157,195, + 93,249,249,41,11,189,157,170,157,170,157,170,118,30,156,252, + 252,161,161,247,108,236,140,161,108,240,236,236,236,236,236,236, + 89,89,89,89,236,89,236,236,119,119,119,89,119,236,89,119, + 119,119,119,58,58,58,119,236,236,119,119,119,89,236,181,89, + 119,119,119,119,181,89,236,236,236,119,89,119,119,236,236,89, + 58,119,119,119,119,119,58,119,236,236,89,236,119,236,89,89, + 89,89,119,119,236,89,236,236,236,89,89,236,89,89,89,119, + 89,89,89,119,119,119,119,236,89,236,89,89,89,89,236,89, + 89,89,119,89,119,119,236,119,119,236,119,236,119,119,119,119, + 119,119,236,119,119,159,119,119,119,119,119,119,119,119,108,47, + 183,187,122,224,187,94,111,122,42,122,0,0,122,42,0,122, + 122,122,122,122,42,42,42,187,0,122,122,122,0,122,42,0, + 122,42,122,122,0,42,42,42,187,0,122,122,122,0,122,42, + 0,122,122,122,122,122,42,42,42,187,0,42,122,122,0,122, + 42,122,122,122,122,0,122,42,42,42,187,0,42,122,0,0, + 122,42,122,122,122,122,0,122,42,42,42,187,0,42,122,122, + 0,122,42,122,122,42,0,0,122,42,42,42,187,0,42,122, + 122,0,122,42,122,122,42,0,122,122,42,78,42,187,122,42, + 122,122,0,122,122,122,122,122,122,0,122,42,42,42,187,0, + 42,122,122,0,122,42,122,122,122,122,0,122,42,42,42,187, + 0,122,122,122,0,122,42,122,122,122,122,0,122,42,42,42, + 187,122,42,122,122,0,122,42,122,122,122,122,0,122,183,42, + 42,187,0,122,122,122,0,122,42,0,122,122,122,0,122,42, + 42,42,187,122,42,122,122,0,122,42,0,122,122,122,0,122, + 42,42,42,187,122,42,122,122,0,122,42,0,122,122,122,122, + 122,42,42,42,187,0,42,122,122,0,122,42,0,122,122,122, + 0,122,42,42,42,187,0,42,122,122,0,122,42,0,122,122, + 122,0,122,183,42,42,187,122,42,122,122,0,122,42,122,122, + 122,122,122,122,42,42,42,187,0,42,122,122,0,122,42,0, + 122,122,122,0,122,42,42,42,187,26,122,78,183,122,192,114, + 120,120,248,120,120,120,120,120,244,120,36,36,36,36,36,36, + 36,105,36,105,36,105,36,105,105,105,36,105,105,105,105,105, + 105,105,105,36,105,105,105,105,105,208,105,105,208,208,105,105, + 105,105,105,105,105,105,105,105,36,36,36,36,36,36,105,36, + 58,236,58,240,184,240,58,240,181,108,240,108,108,108,108,108, + 83,161,173,23,185,53,165,231,189,170,53,157,53,157,189,170, + 9,11,13,195,204,157,157,157,157,170,157,189,77,146,14,91, + 59,35,59,47,214,64,139,125,161,108,58,119,119,207,207,89, + 89,207,89,236,89,236,236,119,236,89,89,119,119,119,119,119, + 119,119,236,119,119,119,119,119,119,89,89,236,119,119,236,119, + 119,119,119,89,236,236,236,89,236,236,119,89,236,119,119,119, + 119,119,119,119,58,58,119,119,89,119,236,119,236,89,119,89, + 119,119,89,89,119,119,89,89,89,89,89,89,236,236,89,89, + 119,119,89,89,89,236,236,89,236,89,89,89,89,236,89,236, + 119,119,89,119,89,89,119,89,89,119,236,119,89,89,236,119, + 159,119,119,119,89,236,119,119,119,119,119,119,119,119,108,34, + 122,162,0,219,122,0,183,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,42,122,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,42,122,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,42,122,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,42,122,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,42,122,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,42,122,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,42,122,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,42,122,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,42,122, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,42, + 122,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 42,122,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,42,122,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,42,122,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,42,122,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,42,122,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,42,122,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,42,122,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,42,122,162,0,0,0,0,199,119, + 120,120,120,120,120,120,120,120,36,120,36,36,36,36,36,36, + 36,36,36,105,36,105,105,105,36,105,105,36,105,105,105,36, + 105,105,105,105,105,105,105,105,36,208,208,105,105,208,105,208, + 105,105,105,105,105,105,105,36,36,36,36,36,36,36,36,36, + 240,181,58,240,181,240,58,240,240,108,108,119,108,108,161,252, + 136,189,198,195,118,9,9,118,52,198,189,170,157,157,204,90, + 170,53,6,6,65,195,77,53,170,189,194,198,189,32,198,156, + 245,235,234,152,133,245,245,8,199,108,83,58,181,89,89,207, + 89,89,89,236,236,119,236,119,119,119,236,236,119,119,236,119, + 119,119,119,236,119,119,119,89,236,119,119,236,89,119,89,89, + 89,89,119,236,236,236,236,236,119,236,119,119,119,89,119,89, + 119,119,236,119,119,236,119,58,89,119,89,119,119,236,119,89, + 89,119,236,89,236,119,236,89,236,89,89,89,89,207,236,89, + 89,119,119,236,119,89,119,89,236,89,89,89,89,89,207,89, + 89,119,89,119,119,89,236,119,89,89,119,119,119,119,119,119, + 236,119,119,119,119,236,119,119,119,119,119,119,119,119,108,47, + 42,187,162,187,187,0,183,0,42,122,42,122,122,42,42,122, + 122,122,122,42,243,219,26,12,122,42,122,42,122,122,42,122, + 122,122,122,42,78,243,219,26,12,122,42,122,42,122,42,122, + 42,122,42,122,122,42,243,219,26,17,0,42,122,42,122,122, + 42,122,42,122,122,122,42,243,219,26,17,0,42,42,122,122, + 42,122,42,122,122,122,122,42,243,219,26,12,0,42,122,42, + 122,122,42,122,122,42,122,122,42,243,219,26,17,0,42,122, + 42,122,122,42,122,122,122,122,122,42,12,219,26,17,0,42, + 122,42,122,42,122,42,122,122,122,122,42,243,219,26,12,0, + 42,42,122,122,42,122,42,122,122,122,122,42,243,219,26,12, + 122,42,122,42,122,122,42,122,42,122,122,122,42,243,219,26, + 17,0,42,122,42,122,122,42,122,42,122,122,122,42,12,219, + 26,12,122,42,122,42,122,122,42,42,122,122,42,122,122,243, + 219,26,17,0,42,122,42,122,42,122,42,122,42,122,122,42, + 243,219,26,17,0,42,122,42,122,122,42,42,122,122,122,122, + 42,243,219,26,17,0,42,122,42,122,122,42,122,42,122,122, + 122,42,243,219,26,17,0,42,122,42,122,122,42,122,42,122, + 122,122,42,12,219,26,17,0,42,122,42,122,122,42,122,42, + 122,122,122,42,243,219,26,17,0,42,122,42,122,122,42,42, + 122,42,122,122,42,243,219,26,12,42,42,26,187,42,225,89, + 120,120,120,120,120,120,36,120,120,120,36,36,36,36,36,36, + 36,105,36,36,105,36,105,105,105,105,105,105,105,105,105,105, + 105,105,105,105,105,105,208,105,208,105,105,105,105,105,105,105, + 105,105,105,105,105,36,36,36,36,105,36,36,36,36,36,36, + 184,181,58,58,108,181,240,58,119,108,83,161,106,136,136,76, + 136,106,106,161,228,22,206,220,118,198,170,128,157,189,185,6, + 138,23,185,185,90,195,77,157,77,157,77,85,13,250,195,170, + 204,118,228,64,67,99,224,211,7,234,210,83,240,89,236,236, + 89,89,236,89,236,89,236,236,236,236,119,119,236,236,119,236, + 236,236,119,119,119,236,236,119,119,236,89,236,119,89,119,119, + 236,236,236,236,119,236,119,119,236,89,236,89,89,119,236,119, + 236,236,119,119,119,119,236,119,119,89,119,89,236,236,236,89, + 236,89,89,236,89,89,89,236,89,89,89,89,207,89,89,119, + 119,89,89,89,89,119,89,89,207,207,89,89,89,207,89,89, + 119,89,119,89,89,119,119,89,89,119,119,119,119,119,236,89, + 119,119,236,119,119,119,119,119,119,119,119,119,119,119,108,142, + 187,111,183,111,224,122,111,42,49,139,139,8,8,211,8,139, + 8,8,139,139,101,17,26,12,42,49,139,139,8,8,211,8, + 139,8,8,139,139,101,17,26,12,42,49,139,139,8,139,8, + 8,139,8,8,139,139,101,17,26,12,42,49,139,139,8,8, + 211,8,139,8,8,139,139,101,17,26,12,42,49,139,8,8, + 139,8,8,139,8,8,139,139,101,17,26,12,42,49,139,139, + 8,8,211,8,139,8,8,139,139,101,17,26,12,42,49,139, + 139,8,8,211,8,139,8,8,139,139,49,12,26,12,42,49, + 139,139,8,139,8,8,139,8,8,139,139,101,17,26,12,42, + 49,139,8,8,139,8,8,139,8,8,139,139,101,17,26,12, + 42,49,139,8,8,139,211,8,139,8,8,139,139,101,17,26, + 12,42,49,139,139,8,8,8,139,211,8,8,139,139,49,17, + 26,12,42,49,139,139,8,8,211,8,139,8,8,139,139,101, + 17,26,12,42,49,139,139,8,139,8,8,139,8,8,139,139, + 101,17,26,12,42,49,139,139,8,8,211,8,139,8,8,139, + 139,101,17,26,12,42,49,139,139,8,8,8,139,211,8,8, + 139,139,101,17,26,12,42,49,139,139,8,8,8,139,211,8, + 8,139,139,49,17,26,12,42,49,139,139,8,139,211,8,139, + 8,8,139,139,101,17,26,12,42,49,139,139,8,139,211,8, + 139,8,8,139,139,101,17,26,12,183,26,12,141,219,199,114, + 25,120,120,120,120,36,120,120,120,36,120,36,36,36,36,36, + 36,36,36,36,105,105,105,105,105,105,36,105,105,105,105,105, + 105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105, + 105,105,105,105,105,36,36,36,36,36,36,36,36,36,36,36, + 240,240,240,240,108,108,108,83,161,161,176,252,161,161,83,83, + 83,83,161,252,136,161,168,41,11,231,65,90,6,195,27,193, + 23,233,87,161,19,116,170,90,128,193,116,107,128,72,83,161, + 167,216,11,11,41,14,162,0,141,235,12,234,83,119,89,207, + 236,207,89,89,236,236,89,236,119,89,236,119,58,236,119,58, + 119,119,119,236,58,119,236,89,89,236,119,236,236,236,89,89, + 89,89,89,236,119,236,236,89,119,89,119,119,236,119,236,119, + 119,236,236,236,119,58,236,236,236,236,236,236,119,236,119,119, + 89,89,89,119,119,119,89,89,236,207,89,89,89,89,207,89, + 89,89,89,236,89,236,236,89,89,236,89,89,89,89,236,89, + 89,89,89,89,89,89,236,119,89,89,89,89,119,89,119,119, + 89,119,89,236,89,89,89,89,119,89,89,119,119,119,108,142, + 187,111,183,111,224,78,132,42,101,8,211,211,8,211,8,8, + 211,8,139,8,67,150,150,243,42,101,8,211,211,8,211,8, + 8,211,8,8,211,101,150,150,243,42,101,8,211,8,211,8, + 8,8,211,8,211,139,101,150,150,211,42,101,8,211,211,8, + 211,8,8,211,8,139,8,67,150,150,211,42,101,8,139,8, + 211,8,8,211,8,8,139,8,67,150,150,243,42,101,8,211, + 211,8,211,8,8,211,8,211,139,101,150,150,211,42,101,8, + 211,211,8,211,8,8,211,8,139,8,139,150,150,211,42,101, + 8,211,8,211,8,8,211,8,8,139,8,67,150,150,243,42, + 101,8,139,8,211,8,8,211,8,8,139,8,67,150,150,243, + 42,101,8,139,8,8,211,8,8,211,8,139,8,67,150,150, + 211,42,101,8,211,211,211,8,8,211,8,8,8,211,101,150, + 150,243,42,101,8,211,211,8,211,8,8,211,8,8,139,101, + 150,150,211,42,101,8,211,8,211,8,8,8,211,8,211,139, + 101,150,150,243,42,101,8,211,211,8,211,8,8,211,8,139, + 8,67,150,150,211,42,101,8,211,211,211,8,8,211,8,8, + 139,8,67,150,150,211,42,101,8,211,211,211,8,8,211,8, + 8,8,211,101,150,150,243,42,101,8,211,8,8,8,8,211, + 8,8,139,8,67,150,150,211,42,101,8,211,8,8,8,8, + 8,211,8,211,139,101,150,150,109,183,187,219,141,42,192,114, + 120,120,120,120,120,120,36,36,120,36,120,36,36,36,105,105, + 36,105,36,105,36,105,36,105,105,105,105,36,105,105,36,105, + 105,105,105,105,105,105,105,105,208,105,208,105,105,105,105,105, + 105,36,105,36,36,36,36,36,36,36,36,36,36,36,36,36, + 184,240,108,108,83,247,83,247,83,108,240,108,108,108,83,83, + 83,161,161,252,106,136,136,23,116,11,167,116,165,90,43,9, + 193,250,167,220,23,128,19,43,116,157,11,23,231,13,221,104, + 50,50,50,92,167,216,41,113,50,219,8,8,217,108,119,236, + 236,89,207,89,236,119,58,119,236,58,119,119,119,119,58,119, + 58,236,236,58,119,236,119,236,236,89,236,236,119,89,236,119, + 236,236,236,89,89,236,236,58,236,236,236,236,119,236,119,236, + 236,119,119,119,236,236,119,119,236,89,89,119,89,89,236,89, + 236,236,119,89,89,89,89,89,207,89,207,207,207,207,89,89, + 89,89,236,89,89,119,89,89,89,207,207,207,207,207,207,207, + 89,89,89,89,89,89,89,89,89,89,119,119,89,119,89,236, + 89,89,119,119,236,236,89,119,89,119,119,119,119,119,108,34, + 219,111,162,111,224,42,111,122,49,8,211,211,8,211,8,211, + 8,211,12,139,8,150,17,109,42,101,8,211,211,8,211,211, + 8,211,211,8,8,139,150,17,109,42,101,8,211,8,211,211, + 109,8,211,8,8,8,139,150,17,243,122,49,8,211,211,8, + 211,211,8,211,8,8,8,139,150,17,243,122,49,8,211,8, + 211,211,8,211,211,8,8,211,8,150,17,211,122,49,8,211, + 211,8,211,211,8,211,8,8,8,139,150,17,243,122,49,8, + 211,211,8,211,8,211,8,211,8,8,67,150,17,243,122,49, + 8,211,8,211,211,8,211,211,8,8,211,8,150,17,211,42, + 101,8,211,211,211,8,211,211,8,211,12,139,8,150,17,211, + 42,101,211,8,211,8,211,211,8,211,8,8,211,8,150,17, + 243,122,49,8,211,8,211,8,211,211,8,211,8,139,8,150, + 17,211,42,101,8,211,8,211,8,211,8,211,211,8,8,139, + 150,17,243,122,49,8,211,8,211,211,109,8,211,8,8,8, + 139,150,17,211,122,49,8,211,211,8,211,8,211,8,211,8, + 8,139,150,17,243,42,101,211,8,211,8,211,8,211,211,8, + 8,8,139,150,17,243,122,49,8,211,8,211,8,211,8,211, + 211,8,8,8,150,17,211,122,49,8,211,8,211,211,8,211, + 211,8,8,8,139,150,17,243,122,49,8,211,8,211,211,109, + 8,211,8,8,8,139,150,17,109,187,42,166,187,78,80,114, + 120,120,120,25,120,36,120,120,36,36,217,36,36,105,36,36, + 36,36,105,36,105,105,105,105,105,105,105,36,105,105,36,105, + 105,36,105,105,105,105,105,105,105,105,105,105,105,105,36,36, + 36,36,105,36,36,36,36,36,36,36,36,36,36,36,36,36, + 240,240,240,240,240,240,240,240,240,240,240,108,83,108,83,83, + 161,161,161,161,161,161,136,189,189,31,73,138,6,128,249,138, + 157,193,148,176,27,198,237,216,30,53,87,138,232,32,43,143, + 229,15,29,0,0,50,14,31,249,14,162,26,49,58,119,236, + 236,89,119,119,89,119,119,119,119,119,236,119,58,119,119,119, + 119,58,119,236,58,236,119,236,236,89,89,236,236,119,89,119, + 89,89,236,236,236,89,119,58,119,236,119,236,119,236,119,119, + 119,236,236,119,119,236,236,119,236,236,89,236,119,89,236,236, + 119,89,236,236,236,89,207,89,89,89,89,89,89,207,207,89, + 236,119,89,236,89,119,89,89,89,89,89,89,89,89,89,89, + 89,89,89,89,89,89,89,89,89,89,89,119,89,89,119,119, + 236,89,119,119,236,236,89,119,119,119,89,119,119,119,108,142, + 187,111,122,187,224,78,111,122,101,211,211,8,211,109,187,211, + 211,211,211,139,139,243,17,243,122,101,211,211,8,211,187,211, + 8,211,8,109,211,139,150,17,243,122,101,139,211,211,8,211, + 187,211,187,211,187,139,139,150,17,8,122,139,211,211,8,211, + 187,211,187,211,187,139,8,139,243,219,211,122,139,211,211,211, + 109,8,109,109,187,8,109,139,139,243,219,8,122,139,211,211, + 8,211,187,211,187,211,187,139,8,67,12,26,211,122,139,211, + 211,8,211,211,187,211,109,187,139,187,67,12,26,211,122,139, + 139,211,211,187,211,8,109,187,211,187,139,139,243,219,211,122, + 101,211,211,211,187,211,187,211,8,211,211,139,139,243,219,243, + 122,101,211,211,211,109,187,8,109,187,211,187,139,139,243,26, + 211,122,139,211,211,211,187,211,8,109,8,109,187,139,139,243, + 219,8,122,101,211,211,211,109,187,211,211,187,8,211,211,67, + 12,26,211,122,139,139,211,211,8,211,187,211,187,8,109,211, + 67,12,26,8,122,101,211,211,8,211,109,187,211,109,187,139, + 8,139,243,219,8,122,101,211,211,211,187,211,8,109,187,211, + 109,8,139,243,219,8,122,101,211,211,211,187,211,211,187,211, + 8,109,139,139,243,26,8,122,139,139,211,211,187,211,187,211, + 187,211,109,8,139,243,26,211,122,139,139,211,211,187,211,187, + 211,187,211,187,8,67,12,17,182,187,42,187,111,42,80,39, + 120,120,244,25,25,36,25,36,25,120,36,217,36,105,217,36, + 105,36,105,36,36,105,36,105,36,105,36,105,105,36,105,105, + 105,105,105,105,105,105,105,105,105,105,208,105,36,105,36,36, + 36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36, + 240,181,240,240,240,240,240,119,108,108,108,240,108,83,83,83, + 108,83,83,83,83,161,106,189,136,106,161,86,195,6,10,129, + 189,147,189,250,195,216,137,79,216,6,220,22,237,138,6,167, + 251,226,226,200,203,0,0,0,0,22,24,129,127,240,58,89, + 236,119,236,89,119,236,236,58,236,119,119,236,119,236,236,119, + 58,119,119,58,119,58,236,119,89,119,119,89,89,89,89,89, + 89,236,89,89,119,119,236,119,58,119,236,119,236,119,236,236, + 236,119,119,236,236,58,58,236,207,89,89,236,236,236,89,119, + 89,236,89,119,89,89,89,89,207,207,207,207,89,89,89,236, + 89,89,89,89,89,89,89,207,89,89,207,207,207,207,207,207, + 89,89,89,89,89,236,89,89,89,89,119,89,119,89,89,89, + 119,236,119,236,119,119,89,119,119,119,119,89,119,119,108,29, + 219,132,221,187,224,122,59,42,101,211,8,91,211,211,8,211, + 8,187,8,8,8,12,26,211,26,101,139,91,211,211,211,211, + 187,109,8,211,8,67,12,26,211,42,101,211,211,91,8,211, + 211,8,139,8,139,8,67,12,26,182,42,101,139,91,211,211, + 211,8,139,8,109,211,211,139,12,26,211,42,101,211,211,8, + 211,91,8,211,211,8,211,8,67,12,26,182,42,101,139,91, + 211,211,211,8,139,8,211,109,8,139,150,17,8,26,101,211, + 139,91,8,211,211,8,211,8,139,8,139,150,17,8,42,101, + 211,8,211,211,211,109,8,211,8,139,8,67,12,26,243,26, + 101,211,211,211,8,211,211,211,8,187,109,8,139,12,26,211, + 42,101,139,91,211,211,211,211,8,211,8,139,8,67,12,17, + 8,42,101,211,211,211,211,211,211,187,211,8,139,8,67,12, + 26,182,42,101,139,91,211,211,211,8,211,211,8,211,8,139, + 150,17,8,42,101,211,211,91,211,211,8,211,211,211,8,8, + 139,150,17,182,42,101,211,8,91,211,211,8,211,8,109,8, + 211,139,12,26,182,26,101,211,8,211,211,91,109,8,211,8, + 211,211,139,12,26,182,42,101,211,211,211,8,211,211,8,211, + 187,211,211,67,12,17,182,42,101,211,211,211,8,211,211,8, + 211,8,211,211,139,12,17,8,42,101,211,211,211,8,211,139, + 8,139,8,139,211,139,150,26,243,187,183,187,215,162,80,114, + 25,120,120,120,244,120,120,25,120,36,36,36,36,36,36,36, + 36,217,36,36,217,36,105,105,36,36,105,36,105,36,105,36, + 36,105,36,105,105,105,105,105,105,105,105,36,36,36,36,105, + 36,36,36,36,36,36,36,36,36,36,36,36,36,217,217,105, + 240,58,240,240,181,240,240,240,119,119,108,240,240,108,108,108, + 108,83,83,161,161,161,148,136,83,252,252,136,189,193,159,134, + 136,136,147,9,138,206,73,190,249,19,62,22,10,137,249,93, + 92,22,14,14,35,42,183,133,127,83,252,106,252,83,240,119, + 236,119,236,236,119,58,236,58,236,119,119,119,119,119,119,119, + 119,236,119,236,119,58,236,119,89,236,236,119,236,89,207,236, + 89,236,236,89,236,119,89,236,236,119,236,89,236,119,119,119, + 119,236,119,119,236,236,119,119,236,236,89,89,236,236,89,236, + 89,236,89,89,236,89,89,89,89,89,89,207,89,89,89,89, + 89,119,236,89,89,119,119,89,207,89,89,89,89,89,89,207, + 89,207,89,236,119,89,89,89,89,89,119,89,119,89,119,236, + 119,89,119,89,236,119,119,89,119,119,159,119,119,119,108,29, + 122,187,0,187,111,122,109,122,101,139,211,211,8,91,8,211, + 211,211,211,139,67,150,17,8,122,101,182,139,8,211,91,8, + 211,8,211,211,91,67,150,17,8,122,101,139,211,8,211,211, + 187,8,109,187,139,91,67,150,26,8,122,101,182,139,8,211, + 91,8,109,8,109,8,8,67,150,17,8,122,101,139,211,91, + 139,8,211,109,187,211,211,91,67,150,26,8,122,101,182,139, + 8,211,91,8,109,187,211,8,8,67,150,17,243,122,101,139, + 211,8,211,91,8,109,109,187,139,8,67,150,17,243,122,101, + 139,211,211,211,91,8,211,187,139,109,91,67,150,12,243,122, + 101,139,211,211,211,91,8,211,211,211,8,8,67,150,17,8, + 122,101,182,139,8,211,91,8,211,211,187,139,91,67,150,17, + 243,122,101,139,211,91,8,91,8,211,8,109,109,91,67,150, + 26,8,122,101,182,139,8,211,91,8,109,187,211,211,8,67, + 150,17,243,122,101,139,211,8,211,91,8,187,211,8,211,8, + 67,150,26,8,162,101,139,139,211,8,91,8,211,8,109,211, + 8,67,150,26,8,122,101,139,211,211,139,8,211,187,211,211, + 211,8,67,150,26,8,122,101,139,211,91,211,211,91,8,139, + 8,211,91,67,150,26,243,122,101,139,211,91,211,211,8,109, + 109,8,211,8,67,150,17,243,122,101,139,211,91,211,8,111, + 8,211,187,139,8,139,150,26,141,187,56,17,219,162,202,114, + 120,120,244,120,25,120,244,120,120,25,120,36,36,36,36,36, + 36,105,36,36,36,36,36,105,36,105,36,36,36,105,36,105, + 36,105,36,105,36,105,105,105,105,105,105,36,36,36,36,36, + 105,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36, + 58,58,181,240,108,181,240,58,240,119,240,119,108,240,108,108, + 108,83,83,83,161,136,136,83,161,161,83,252,232,157,136,106, + 106,106,148,185,176,161,38,22,233,77,179,21,143,72,21,149, + 13,120,38,38,38,143,83,136,252,161,108,108,184,240,58,58, + 58,58,119,119,236,119,119,119,58,58,58,236,119,58,58,236, + 236,58,58,58,236,236,119,236,236,236,119,89,89,207,89,89, + 207,89,89,89,119,89,236,236,119,236,119,119,236,236,89,236, + 236,119,236,236,119,119,236,236,89,89,236,236,119,89,236,236, + 236,89,236,119,119,119,89,236,89,207,89,89,89,236,89,89, + 236,207,89,236,119,89,89,89,89,236,207,89,89,119,119,89, + 89,89,89,89,89,236,119,236,89,89,89,89,89,89,236,89, + 236,119,236,119,119,236,89,89,89,119,119,89,119,119,108,29, + 26,126,221,187,224,42,224,42,101,139,8,211,211,211,109,8, + 187,109,8,211,139,150,17,211,42,101,8,211,8,211,8,211, + 211,187,211,8,8,67,150,17,243,42,139,139,8,91,211,139, + 187,211,8,211,8,8,67,150,17,211,42,101,211,8,211,8, + 139,187,211,187,211,211,211,139,150,17,243,42,101,211,8,211, + 8,211,187,211,8,211,8,8,67,150,17,211,42,101,211,8, + 211,8,211,109,8,211,211,211,211,139,187,17,211,42,101,211, + 8,211,8,139,187,211,8,139,187,211,139,187,17,211,42,101, + 109,211,8,211,8,211,8,211,8,8,211,67,150,219,211,42, + 101,8,211,211,8,211,109,8,187,211,211,211,67,132,17,8, + 42,101,211,8,211,8,211,8,109,8,211,8,243,67,132,17, + 211,42,101,8,139,211,8,139,8,211,187,211,8,8,67,150, + 17,8,42,101,8,211,8,211,211,8,211,8,187,211,211,139, + 187,17,243,42,139,211,8,8,211,139,8,211,211,187,109,211, + 139,187,17,211,42,101,211,8,211,211,139,211,187,109,8,211, + 211,139,150,17,211,42,101,211,211,8,8,211,8,211,8,109, + 8,211,139,150,17,211,42,101,8,211,8,211,8,243,211,187, + 211,8,8,67,150,17,243,42,101,8,139,8,211,211,187,211, + 211,187,109,211,139,132,17,243,42,101,8,211,8,211,139,187, + 211,8,211,8,211,67,150,12,243,166,183,17,219,0,57,39, + 244,120,120,120,244,120,120,120,25,244,36,120,36,36,120,36, + 120,36,36,36,36,36,36,36,36,36,36,105,36,36,36,105, + 36,36,105,36,105,105,105,105,105,105,36,36,36,36,36,36, + 105,36,36,36,36,36,36,36,36,36,36,105,36,105,36,105, + 58,240,58,184,240,240,240,181,240,119,240,119,240,119,108,108, + 108,108,108,83,252,232,161,83,161,161,83,161,106,189,176,161, + 106,106,136,106,148,189,144,237,206,157,136,106,252,106,106,252, + 147,148,252,106,252,252,252,83,108,108,108,119,240,240,58,240, + 119,119,236,119,236,58,119,119,236,236,119,58,119,236,119,58, + 58,236,119,58,119,236,58,119,119,236,236,236,119,89,207,89, + 207,236,89,89,236,119,119,236,119,119,58,119,119,58,119,119, + 236,236,119,236,159,119,159,159,236,119,119,236,58,236,236,89, + 207,207,89,89,89,236,89,236,89,236,119,119,89,236,89,89, + 89,207,89,89,236,89,236,236,89,89,236,236,89,89,236,236, + 236,236,89,89,119,89,119,89,119,89,89,119,119,119,119,119, + 236,119,89,89,119,119,119,119,89,119,119,89,119,119,108,29, + 42,187,0,187,163,78,224,122,101,139,139,211,211,139,109,139, + 211,8,211,8,139,150,17,243,122,101,139,211,211,211,211,211, + 211,211,211,8,8,139,150,17,109,122,101,139,211,139,8,139, + 211,211,211,211,211,8,139,150,17,243,122,101,139,211,211,211, + 139,211,139,211,8,211,8,139,150,17,109,122,101,139,139,139, + 211,211,211,211,211,211,211,8,67,132,17,243,122,101,139,211, + 211,211,139,211,211,211,109,8,8,67,132,17,109,122,101,139, + 139,211,211,139,211,211,8,211,211,8,67,150,219,109,122,101, + 139,211,211,211,211,109,211,109,211,8,8,67,132,17,109,122, + 101,139,211,211,211,139,109,211,211,211,8,8,139,150,17,243, + 122,101,139,211,211,139,211,211,211,211,211,211,8,139,150,17, + 243,122,101,139,139,8,211,211,211,211,211,211,211,8,139,150, + 17,109,122,101,139,211,211,139,211,211,211,139,211,211,8,67, + 132,12,109,122,101,139,139,211,211,139,109,211,139,211,8,8, + 67,150,17,243,122,101,139,139,211,211,139,109,211,211,109,211, + 8,67,132,17,243,122,101,139,211,211,211,211,109,211,211,211, + 211,8,139,150,17,109,122,101,139,139,211,211,139,211,139,211, + 8,211,8,139,150,17,109,122,101,139,211,211,8,211,211,211, + 139,211,8,8,139,150,12,109,122,101,139,139,211,8,139,211, + 211,211,109,211,8,139,150,26,243,166,42,219,219,0,57,114, + 248,120,120,120,120,120,120,244,120,120,120,120,120,36,120,36, + 36,36,120,36,120,36,36,36,36,36,36,36,36,36,105,36, + 36,36,105,36,36,105,36,105,36,36,36,36,36,36,36,36, + 36,36,36,36,36,36,36,36,36,36,36,36,36,105,36,36, + 58,119,240,184,181,58,58,240,58,181,108,119,108,108,108,108, + 108,108,83,83,106,161,83,161,83,161,83,161,176,27,161,161, + 176,136,161,161,252,148,87,11,135,189,136,161,83,161,83,83, + 161,106,161,108,83,83,108,240,108,108,108,108,108,240,119,58, + 181,119,119,119,58,119,58,58,58,119,58,119,119,119,58,119, + 119,119,58,119,58,58,119,58,236,119,119,236,236,236,89,89, + 89,89,236,89,119,89,236,119,236,236,236,58,236,236,236,236, + 119,159,236,159,236,236,236,236,236,236,236,119,236,236,119,236, + 236,89,89,236,89,119,236,89,119,89,236,89,236,89,89,207, + 89,89,207,207,89,89,119,119,236,236,236,119,236,236,119,89, + 119,236,119,236,89,89,89,119,89,89,119,89,89,89,89,89, + 89,89,236,119,89,89,119,89,89,89,89,236,119,119,108,29, + 42,163,0,26,224,78,59,78,67,211,211,8,139,8,211,109, + 211,109,211,211,67,132,219,211,122,49,211,139,211,211,211,109, + 211,211,211,211,211,67,132,219,211,122,67,139,139,8,211,211, + 211,211,211,109,211,8,67,132,219,211,122,49,211,211,211,211, + 211,211,109,211,8,211,211,67,132,219,211,78,67,211,211,8, + 211,139,91,211,211,8,211,211,8,132,219,211,122,49,211,211, + 8,139,8,61,109,211,211,211,211,8,132,26,211,78,67,211, + 211,8,139,8,91,211,211,211,211,8,139,132,26,211,42,139, + 139,211,211,211,211,211,109,211,211,211,211,139,17,26,211,78, + 49,211,211,8,139,8,91,211,211,211,211,211,67,132,219,211, + 122,49,211,211,139,8,211,91,211,187,211,211,8,67,132,26, + 211,78,49,211,211,8,139,211,61,211,211,8,211,211,67,132, + 219,211,78,49,211,211,139,8,211,91,109,8,211,211,8,139, + 132,26,211,78,67,211,211,211,211,211,91,109,8,211,211,211, + 8,132,219,211,122,67,211,211,211,8,8,211,211,211,8,211, + 211,139,132,219,211,122,49,211,211,211,211,211,91,211,109,8, + 211,211,67,132,219,211,78,49,211,211,8,211,211,109,109,211, + 211,211,211,67,132,26,211,122,49,211,139,211,211,211,91,211, + 8,211,211,211,67,132,26,211,78,49,211,211,211,211,211,211, + 109,211,8,211,211,67,150,219,211,187,183,219,183,0,57,89, + 244,248,248,244,120,244,120,120,120,120,120,120,120,120,120,36, + 244,120,36,244,36,36,36,36,36,36,36,36,36,36,36,36, + 36,36,36,36,36,36,36,36,36,105,244,36,36,36,36,36, + 105,36,36,36,36,36,36,36,36,105,36,105,217,36,217,105, + 58,58,240,58,58,240,58,240,240,119,240,181,58,240,108,108, + 108,108,83,176,161,108,83,83,83,83,161,83,161,148,106,161, + 176,161,161,83,161,252,250,116,137,136,106,161,161,83,161,83, + 83,161,252,161,108,108,108,108,108,240,119,108,119,108,119,184, + 58,58,58,119,236,119,58,58,58,119,58,58,240,119,119,58, + 58,58,58,119,58,58,119,119,58,58,119,236,236,236,236,119, + 119,89,236,89,236,236,89,119,58,119,119,58,58,58,159,236, + 159,159,236,159,159,159,58,159,119,58,236,58,58,236,236,119, + 236,236,89,236,89,119,236,236,236,236,89,89,236,89,89,207, + 207,89,89,89,89,89,89,89,236,236,236,119,119,236,159,89, + 236,236,119,236,119,236,89,236,119,89,119,119,89,236,236,119, + 236,119,89,119,119,89,119,119,119,119,119,89,119,119,108,172, + 26,187,221,26,111,162,224,42,101,139,139,211,139,211,139,211, + 139,211,139,211,139,12,26,211,122,101,139,139,139,139,139,211, + 211,211,139,211,139,139,12,26,211,122,101,139,139,139,139,211, + 211,211,139,211,139,211,139,12,26,211,122,101,101,139,139,211, + 139,211,211,211,211,139,211,139,12,26,211,122,101,139,139,139, + 139,139,139,211,211,211,139,139,101,12,26,211,122,101,101,139, + 139,139,139,139,211,139,211,139,139,67,150,26,211,122,101,139, + 139,211,139,139,139,211,211,139,139,139,101,150,26,109,122,49, + 139,139,139,139,139,211,211,139,211,139,139,67,150,26,109,122, + 101,101,139,139,139,139,139,211,211,211,139,211,139,150,26,211, + 122,101,139,139,211,139,139,139,139,139,211,139,211,139,150,26, + 109,122,101,139,139,211,139,139,139,139,211,211,139,211,139,150, + 26,211,122,101,139,139,211,139,139,139,211,211,139,139,139,101, + 150,26,109,42,101,139,139,139,139,139,139,211,139,139,139,139, + 67,12,26,211,122,101,101,139,211,139,139,61,139,211,139,139, + 139,139,12,26,211,122,101,139,139,139,139,139,139,211,211,211, + 139,139,139,12,26,109,122,101,101,139,139,139,139,211,211,211, + 211,139,211,139,150,26,211,122,101,139,139,139,139,139,139,211, + 139,139,139,139,139,150,26,109,122,101,139,139,139,211,139,211, + 211,211,211,139,211,139,150,219,141,187,42,187,183,122,57,89, + 244,244,244,244,244,244,244,244,244,120,244,244,120,120,244,120, + 120,36,36,244,244,36,244,36,244,36,36,36,36,36,36,36, + 36,36,36,36,36,36,36,36,36,105,36,36,36,36,36,36, + 36,36,36,36,36,36,36,36,36,217,36,36,36,36,36,36, + 58,58,181,240,184,181,58,58,181,240,240,240,119,108,119,108, + 108,83,83,161,108,108,83,83,83,83,161,83,161,106,106,161, + 176,83,161,161,161,83,250,6,55,252,106,83,161,83,83,83, + 83,83,83,161,83,240,108,240,240,108,108,240,108,240,240,58, + 58,119,58,58,58,58,119,119,58,58,119,119,119,119,58,58, + 58,119,58,58,119,58,58,58,119,119,58,119,119,236,236,236, + 236,236,236,236,119,236,236,236,119,236,236,58,58,159,236,159, + 236,159,58,58,119,119,58,119,58,58,58,58,58,236,236,236, + 236,89,236,89,236,89,89,89,119,119,236,236,89,207,207,89, + 89,207,207,89,236,89,89,119,119,119,119,236,236,119,236,236, + 236,236,236,236,89,119,119,119,89,89,89,89,119,119,89,89, + 119,89,236,236,236,119,236,89,119,89,89,89,119,119,108,29, + 42,111,162,183,111,122,59,78,8,26,91,26,91,91,26,91, + 26,91,26,91,8,132,12,12,122,8,91,26,91,91,91,26, + 91,26,91,26,91,8,132,12,243,42,187,17,91,26,91,91, + 26,91,26,91,26,91,182,132,12,12,122,8,91,26,91,26, + 91,91,26,91,91,26,91,8,132,17,243,42,8,187,26,91, + 26,91,26,91,26,91,26,91,182,150,17,243,42,8,91,26, + 91,26,187,26,91,26,91,26,91,8,132,17,243,42,8,91, + 26,91,91,187,26,91,26,91,26,91,182,132,17,243,42,91, + 26,91,91,26,91,26,91,26,91,26,91,8,132,12,187,78, + 8,91,26,91,26,187,91,91,26,91,26,91,8,17,12,12, + 122,8,91,26,91,91,187,26,91,26,91,26,91,182,132,17, + 8,78,8,17,91,91,26,17,91,26,91,91,26,91,182,17, + 12,12,122,8,91,26,91,91,187,26,91,26,91,26,91,182, + 132,12,12,122,8,91,26,91,26,187,26,91,26,91,26,91, + 8,132,12,243,42,8,26,91,91,91,91,187,91,26,91,26, + 91,8,150,17,243,42,8,91,26,91,91,26,91,91,26,91, + 26,91,182,150,17,109,42,8,26,91,26,91,26,91,91,26, + 91,26,91,182,132,17,243,42,8,26,91,91,26,187,91,26, + 91,26,26,91,8,132,17,243,42,8,26,91,91,26,91,91, + 26,91,91,26,91,182,150,26,187,166,78,219,26,0,191,89, + 244,244,71,244,71,244,244,248,244,71,120,120,244,244,36,244, + 244,244,244,36,36,244,36,244,36,244,244,244,244,36,36,36, + 244,36,36,36,36,36,36,36,36,36,36,36,36,36,105,36, + 36,36,36,36,36,36,36,36,36,36,217,36,105,105,105,105, + 58,184,58,240,58,58,58,184,58,58,181,240,119,108,108,108, + 108,83,161,108,83,83,108,83,83,83,83,83,161,161,106,161, + 161,83,83,83,83,83,176,98,138,252,106,161,83,83,83,83, + 83,83,66,83,161,83,108,108,240,108,108,119,240,119,240,58, + 58,236,119,58,119,58,58,119,58,58,58,58,58,58,119,119, + 58,58,119,58,119,58,58,58,58,119,58,236,58,119,119,119, + 119,119,236,236,181,236,236,236,58,58,58,58,58,159,58,58, + 58,58,159,236,236,58,236,58,58,159,58,58,184,58,236,119, + 236,89,89,89,236,236,89,89,89,89,89,207,89,89,207,207, + 89,89,207,89,89,236,89,89,236,119,58,119,236,236,89,119, + 236,236,119,236,236,89,236,236,119,236,119,236,89,159,236,236, + 119,119,119,119,236,119,119,236,119,119,119,236,119,119,108,20, + 183,111,162,183,187,162,224,0,219,17,187,183,26,42,187,183, + 26,219,219,17,8,187,187,8,0,26,219,26,26,219,42,187, + 183,26,219,219,219,8,12,26,8,0,26,17,219,219,183,26, + 183,26,219,219,219,26,8,187,187,211,0,219,219,219,219,219, + 42,187,183,26,219,219,17,8,12,26,211,0,26,187,219,219, + 219,42,187,183,26,219,219,26,8,187,26,211,0,219,219,219, + 219,26,26,187,183,26,219,219,219,8,12,26,211,0,219,219, + 219,219,26,26,187,183,26,219,219,26,8,12,26,8,0,26, + 17,26,219,219,26,187,183,42,219,219,219,8,12,12,8,0, + 219,219,219,219,26,42,219,183,26,219,219,17,211,187,187,211, + 0,219,219,219,219,26,187,183,187,42,219,219,26,8,12,26, + 211,0,26,219,219,219,26,42,187,183,42,219,219,26,8,12, + 187,8,0,219,219,219,219,26,26,187,183,42,219,219,26,8, + 12,187,8,0,219,219,219,219,26,187,183,26,42,219,219,219, + 8,12,26,211,0,219,219,219,219,219,219,219,183,42,219,219, + 219,8,187,26,211,0,26,219,219,219,219,42,219,219,26,219, + 219,26,8,12,26,211,0,219,17,187,183,26,42,219,219,26, + 219,219,26,8,12,26,211,0,219,17,219,219,26,42,187,183, + 42,26,219,219,8,12,26,211,0,219,17,219,26,219,42,187, + 183,26,183,219,26,8,150,12,8,111,42,187,26,122,208,89, + 244,244,71,244,244,71,244,71,244,244,244,244,244,244,120,244, + 120,120,244,244,244,244,244,36,244,36,36,36,244,36,36,244, + 36,36,244,36,36,36,36,36,36,36,36,36,36,36,36,36, + 36,36,36,36,36,36,36,217,36,36,105,36,36,217,217,105, + 58,181,240,236,181,184,181,58,58,119,240,119,108,119,108,159, + 83,83,83,119,108,108,83,83,83,83,83,83,161,161,106,161, + 83,161,161,161,83,108,118,98,23,252,106,83,161,83,83,83, + 108,108,83,83,83,83,108,108,108,108,240,108,108,108,240,58, + 119,119,58,119,236,58,119,58,119,58,119,58,119,119,119,240, + 58,119,159,58,58,119,240,58,58,58,58,184,119,58,236,236, + 236,236,119,89,236,236,119,119,89,119,236,58,58,58,58,159, + 236,119,236,159,58,236,58,236,58,58,58,58,58,119,119,89, + 89,207,89,89,89,89,236,89,119,119,236,89,89,89,89,89, + 89,89,89,89,89,89,236,119,236,236,236,236,119,89,159,236, + 119,89,236,119,119,143,236,119,143,236,236,119,159,236,159,119, + 159,143,159,119,159,143,159,119,159,159,159,236,119,108,108,20, + 78,132,221,42,111,122,59,0,139,67,139,139,67,139,139,139, + 139,139,139,139,139,150,219,211,0,139,101,182,67,139,67,139, + 139,139,139,139,139,8,132,219,211,0,139,139,139,139,139,67, + 139,67,139,139,139,101,8,150,219,243,0,139,101,139,139,139, + 182,139,139,139,139,139,139,139,150,219,243,0,139,139,139,139, + 67,139,67,139,67,139,139,139,8,150,219,243,0,211,101,139, + 139,99,67,139,139,182,139,139,139,139,150,219,243,0,8,67, + 139,139,67,139,67,139,182,139,139,139,8,150,219,211,0,139, + 139,67,139,139,67,139,139,139,139,139,139,139,132,183,211,0, + 211,101,139,139,67,67,139,139,139,139,139,139,8,150,219,243, + 0,139,139,139,139,67,139,67,139,67,139,139,139,139,150,219, + 243,0,211,67,139,139,67,139,67,139,67,139,139,139,8,132, + 219,211,0,139,139,139,139,67,139,67,139,139,139,139,139,8, + 132,219,211,0,211,49,139,139,67,139,139,67,67,139,139,139, + 139,132,219,243,0,211,139,139,139,139,139,139,139,139,139,139, + 139,139,150,219,243,0,139,101,139,139,139,67,139,139,139,139, + 139,139,8,150,219,243,0,139,139,139,139,99,67,139,139,182, + 139,101,139,8,150,219,243,0,139,139,139,139,67,67,139,139, + 139,139,139,139,139,150,219,243,0,139,139,139,67,139,67,139, + 139,139,8,139,139,139,187,219,182,166,183,219,219,0,63,89, + 144,71,244,144,244,144,244,244,244,244,244,244,244,244,244,244, + 244,244,244,244,36,36,244,36,244,244,36,244,36,244,36,244, + 36,244,36,244,36,36,244,36,36,36,36,36,36,36,36,36, + 36,36,36,120,36,36,105,36,105,105,36,217,105,36,105,105, + 236,236,58,236,184,153,58,184,240,181,240,119,108,119,108,108, + 108,108,108,108,108,108,108,108,83,83,83,83,161,161,176,83, + 83,83,83,83,83,108,9,231,23,161,252,161,83,83,83,83, + 83,159,108,83,108,83,108,108,119,108,119,240,119,119,119,58, + 58,236,58,58,58,58,119,240,119,58,119,58,58,58,119,119, + 119,119,119,58,119,119,119,58,58,119,58,58,119,58,119,119, + 236,236,236,236,89,89,236,119,89,119,119,119,58,58,58,58, + 159,58,236,58,119,119,119,119,119,58,119,119,236,236,236,236, + 236,236,89,89,119,207,207,89,89,119,119,236,89,207,207,89, + 89,119,89,236,89,119,236,119,119,119,58,236,159,236,58,236, + 58,236,236,236,119,119,236,119,159,236,159,236,119,159,159,236, + 159,119,159,159,159,159,153,134,143,159,159,159,159,108,108,20, + 122,187,221,183,187,0,224,0,187,139,139,211,211,139,211,211, + 8,211,139,211,243,12,122,243,0,8,139,8,139,109,139,211, + 211,8,211,139,182,8,150,122,243,0,8,139,139,211,211,211, + 211,211,8,8,139,67,243,12,122,243,0,8,139,139,139,211, + 211,211,211,8,211,139,211,211,132,78,243,0,8,139,139,211, + 211,211,211,109,211,8,139,67,243,150,122,243,0,8,139,211, + 139,211,139,211,211,8,8,139,139,243,150,122,243,0,8,139, + 139,109,211,109,139,211,8,211,139,67,243,150,122,243,0,8, + 139,139,211,211,211,139,211,8,211,139,211,8,12,122,243,0, + 8,139,139,211,211,211,139,211,8,211,139,182,8,12,122,243, + 0,8,139,211,211,109,109,211,187,211,8,139,139,243,150,78, + 243,0,8,139,139,109,211,211,109,8,8,211,139,67,8,12, + 122,243,0,8,139,139,211,109,211,139,211,8,211,139,182,8, + 12,122,243,0,187,139,139,211,139,211,211,109,109,8,139,139, + 243,150,78,243,0,8,139,211,211,211,211,211,139,8,211,211, + 139,243,150,122,243,0,8,139,139,211,211,139,211,211,8,211, + 139,182,8,150,122,243,0,8,139,211,211,211,139,139,211,8, + 8,139,182,211,150,78,243,0,8,139,139,211,211,211,139,211, + 211,211,139,211,8,150,78,243,0,8,139,139,109,211,211,211, + 211,8,211,139,139,8,187,122,243,132,219,219,219,221,105,89, + 144,244,71,144,244,144,244,244,244,244,244,244,244,244,244,244, + 244,36,120,244,244,244,36,244,36,244,36,244,36,36,36,244, + 36,36,244,36,244,36,36,36,36,36,36,36,36,36,36,36, + 36,36,36,36,217,36,36,36,36,105,36,36,105,36,105,105, + 58,184,181,184,181,58,181,236,58,58,58,181,119,119,119,108, + 108,108,108,108,108,108,108,108,108,83,83,83,83,83,176,83, + 83,83,83,83,83,108,9,53,19,83,176,161,108,83,108,108, + 108,83,159,108,108,108,83,108,108,108,108,240,108,119,240,119, + 119,119,236,58,119,58,119,119,119,119,240,240,58,58,58,119, + 240,119,159,119,58,58,58,58,119,240,119,58,236,119,119,236, + 119,119,119,119,236,236,89,89,119,89,236,58,119,58,119,159, + 236,119,119,236,119,236,119,236,58,119,119,119,58,119,236,119, + 89,207,89,89,89,89,89,236,89,89,89,89,236,89,236,236, + 236,236,236,236,119,89,236,236,236,119,236,153,236,159,58,58, + 236,159,159,236,159,236,159,159,236,159,236,159,159,236,159,119, + 159,159,119,236,159,236,159,159,159,159,159,159,159,159,108,15, + 122,95,162,78,126,0,111,0,8,211,109,109,109,109,211,109, + 109,8,243,67,243,132,26,211,0,187,139,139,187,109,139,187, + 211,109,8,243,67,211,187,26,211,0,8,139,109,211,109,211, + 109,109,109,211,211,139,243,132,26,211,0,8,211,139,187,211, + 139,8,187,109,8,8,182,243,187,42,211,0,8,211,109,211, + 109,109,8,211,187,211,243,139,211,187,26,211,0,8,139,211, + 211,109,109,211,211,211,211,211,182,243,187,26,211,0,8,211, + 109,211,109,109,8,109,211,8,243,139,243,187,26,211,0,8, + 211,211,187,109,211,187,109,109,8,8,182,243,132,26,211,0, + 8,139,211,109,109,109,211,109,109,8,243,67,243,132,26,211, + 0,8,211,211,211,211,211,8,211,211,211,8,182,211,187,42, + 211,0,8,211,109,211,109,109,211,109,109,8,8,182,243,132, + 42,211,0,8,211,109,211,211,211,187,109,109,8,8,139,243, + 132,26,211,0,8,211,109,109,109,109,211,187,211,211,211,182, + 211,187,42,211,0,8,139,211,8,211,211,211,187,109,8,243, + 67,243,187,26,211,0,8,139,109,211,109,109,8,109,109,8, + 243,67,243,17,26,211,0,8,211,139,8,211,111,8,109,211, + 211,211,139,243,187,42,211,0,8,211,211,187,109,139,187,109, + 109,211,8,182,109,187,42,211,0,8,211,109,8,211,109,8, + 211,211,8,8,182,182,132,26,211,187,122,187,219,0,208,119, + 144,71,144,244,71,71,144,71,244,244,244,244,244,244,120,244, + 244,244,244,36,244,244,244,36,244,36,36,244,244,36,244,36, + 244,36,36,36,36,36,36,244,36,36,36,36,36,36,36,36, + 36,36,36,36,36,36,105,105,217,36,105,105,217,105,217,105, + 58,58,184,184,184,184,58,236,58,58,58,58,240,108,119,108, + 119,119,108,119,108,108,108,108,108,108,108,83,83,83,161,83, + 83,108,108,83,108,181,185,85,116,181,252,161,83,108,83,108, + 108,83,159,108,108,108,159,83,108,119,108,119,240,119,240,119, + 58,119,119,58,119,58,58,58,119,119,119,119,119,119,119,119, + 119,119,119,119,119,119,119,58,236,58,119,58,58,236,119,236, + 89,236,236,236,89,236,236,89,236,119,236,236,119,58,119,119, + 236,119,119,236,119,236,89,236,236,119,119,119,119,119,236,89, + 89,236,207,207,207,89,207,89,89,89,119,89,236,89,236,119, + 236,119,119,236,236,119,119,58,58,58,58,184,236,184,159,159, + 236,236,159,236,159,236,236,58,159,119,159,119,159,159,159,119, + 159,236,159,159,159,159,159,119,159,159,159,159,159,108,108,20, + 122,166,78,183,187,221,224,0,211,67,139,67,139,139,139,139, + 211,139,211,139,243,150,0,187,122,8,139,67,139,139,139,139, + 139,211,139,139,139,243,132,0,187,0,8,67,139,139,139,139, + 139,139,211,211,139,139,211,187,0,187,0,211,139,67,139,139, + 139,67,139,211,139,139,139,8,187,0,187,0,211,67,139,139, + 139,139,139,139,139,139,139,139,243,187,0,187,0,8,139,139, + 139,139,139,139,211,211,211,139,139,211,187,0,187,0,211,67, + 139,139,139,139,139,211,211,139,139,139,211,132,0,187,0,211, + 67,139,139,139,139,139,139,211,139,139,67,8,187,0,187,0, + 8,139,139,139,139,139,139,139,211,139,139,139,211,187,0,187, + 0,211,67,139,139,139,139,139,139,211,139,139,139,243,187,0, + 187,0,211,67,139,139,139,139,139,211,211,139,139,67,8,150, + 0,187,0,211,67,139,182,139,139,139,139,211,139,139,67,8, + 132,0,8,0,211,67,139,139,139,139,139,139,211,211,139,139, + 8,187,0,187,122,8,67,139,139,139,139,139,139,139,139,211, + 139,211,187,0,187,0,8,139,139,139,139,139,139,139,211,139, + 139,139,211,187,0,187,0,8,139,139,139,139,139,139,211,211, + 211,139,139,8,187,0,187,0,211,67,139,139,139,139,139,139, + 211,139,139,67,243,187,0,187,0,211,67,139,139,139,139,139, + 139,211,139,139,139,8,12,0,109,132,183,219,219,0,63,89, + 244,244,144,144,144,244,244,144,244,71,244,244,244,244,244,244, + 244,244,244,244,36,244,244,36,244,36,244,244,36,36,36,244, + 36,244,36,244,36,244,36,36,36,36,36,36,36,36,120,36, + 36,36,217,36,217,36,36,36,105,217,217,36,105,105,105,105, + 236,153,181,153,181,153,181,184,236,236,181,240,119,181,108,240, + 119,108,108,119,119,119,108,108,108,108,108,108,83,83,161,83, + 108,83,108,83,108,119,9,85,195,181,161,161,83,83,108,108, + 108,108,108,108,108,159,108,159,108,108,240,119,108,119,58,119, + 119,58,58,236,58,58,58,58,58,58,119,119,240,58,58,119, + 119,119,58,119,236,58,58,119,58,119,236,58,236,58,236,236, + 236,236,236,89,236,89,89,236,89,89,119,119,58,119,159,119, + 119,236,236,119,89,236,119,89,119,119,119,119,119,119,119,236, + 89,207,89,89,89,207,89,89,89,236,89,236,119,58,119,236, + 236,236,236,236,236,236,236,236,236,58,58,58,184,58,58,184, + 184,159,58,159,58,159,159,119,159,159,159,159,58,119,159,58, + 159,159,159,159,236,236,159,159,159,159,159,159,159,159,108,15, + 42,111,162,162,187,78,59,0,26,187,187,187,12,91,109,187, + 26,91,12,12,187,187,26,211,0,26,187,187,187,187,109,187, + 12,91,91,26,12,187,12,26,211,0,26,187,187,187,91,109, + 187,187,26,91,12,12,12,150,26,211,0,26,187,187,187,187, + 91,111,187,187,91,187,12,109,150,26,211,0,26,187,187,187, + 91,109,187,187,26,91,187,12,187,150,26,211,162,26,187,187, + 187,91,111,187,12,91,26,91,12,12,150,26,211,0,26,187, + 187,187,111,111,187,12,91,91,187,12,12,12,26,211,0,26, + 187,8,187,109,111,8,187,26,91,17,91,187,150,26,211,162, + 26,187,187,187,111,187,187,187,91,91,26,12,12,150,26,211, + 0,26,187,187,187,187,111,187,187,12,91,26,12,187,150,26, + 211,0,26,187,187,187,187,91,109,187,187,91,26,91,187,187, + 42,211,0,26,187,187,187,111,211,187,187,12,91,17,91,187, + 187,42,8,0,26,187,12,91,111,109,187,187,12,91,26,12, + 109,150,26,211,0,26,187,187,187,187,109,187,187,187,91,187, + 12,12,150,26,211,0,26,187,187,187,187,111,187,187,91,91, + 26,12,12,150,26,211,162,26,187,187,187,91,109,187,12,91, + 91,187,12,109,150,26,211,0,26,187,187,187,111,8,187,187, + 187,91,12,91,187,150,26,211,0,26,187,91,109,187,111,187, + 187,12,91,26,12,187,150,42,8,187,42,219,183,0,105,181, + 144,144,144,244,244,244,144,244,244,244,244,244,244,244,120,244, + 244,244,244,244,36,244,244,36,244,36,244,36,244,244,36,244, + 36,244,36,36,36,244,36,244,36,36,36,36,36,36,36,36, + 36,105,36,105,36,36,217,36,105,36,36,63,105,105,210,210, + 58,153,184,153,236,153,236,153,181,153,236,240,240,58,240,119, + 58,119,119,108,108,108,119,108,108,108,108,108,108,83,161,83, + 108,108,108,108,108,119,9,53,116,181,161,161,83,83,83,108, + 108,108,108,119,108,108,108,119,108,159,108,119,240,119,240,58, + 119,119,58,58,58,58,58,58,58,58,240,119,119,119,236,119, + 119,119,236,58,236,236,58,119,58,58,236,119,119,119,119,119, + 119,119,119,89,119,89,89,119,89,89,119,119,119,119,58,119, + 119,119,89,119,119,89,236,89,236,236,236,58,119,236,119,236, + 89,89,207,207,89,207,207,89,89,236,119,89,236,236,119,119, + 119,236,236,119,236,58,119,58,58,119,58,119,236,58,119,58, + 119,58,58,58,58,58,159,58,58,58,58,159,58,159,119,58, + 119,159,119,240,159,159,119,159,119,159,119,159,159,159,108,172, + 42,187,94,183,187,122,224,0,0,0,0,0,0,0,0,0, + 122,0,0,0,219,150,26,12,0,0,0,122,122,0,0,0, + 0,0,0,162,0,17,132,42,12,0,0,0,122,122,0,0, + 0,122,122,0,0,0,219,132,26,12,122,0,0,0,122,122, + 0,122,0,0,0,0,0,219,132,26,12,0,0,0,0,122, + 0,0,0,122,0,0,0,0,219,150,26,12,0,0,162,122, + 122,0,122,0,0,0,122,0,0,219,132,26,12,0,0,0, + 122,122,122,122,0,0,0,0,0,0,219,132,42,12,0,0, + 0,0,162,0,0,0,162,122,0,0,0,219,132,26,12,0, + 0,162,122,122,122,122,122,0,0,0,162,0,219,132,26,12, + 0,0,0,122,122,122,122,0,0,0,0,0,122,219,150,26, + 12,0,0,0,122,122,122,0,0,0,0,0,0,0,219,150, + 26,12,122,0,0,122,122,0,0,122,0,0,0,0,0,219, + 12,42,12,162,0,0,0,0,122,0,0,122,0,0,0,0, + 219,132,42,12,0,0,0,122,122,0,0,0,122,0,0,0, + 0,219,132,26,12,0,0,0,122,122,122,122,122,0,0,0, + 0,162,219,132,26,12,0,0,162,122,122,0,0,0,0,0, + 0,0,0,219,132,42,12,122,0,0,122,122,0,0,0,122, + 0,0,0,0,219,150,42,12,0,0,0,0,0,0,122,0, + 0,0,0,0,0,219,17,42,150,187,78,26,219,122,105,89, + 244,244,144,71,144,71,144,144,71,244,244,244,244,244,244,120, + 244,120,244,244,244,244,36,244,244,244,36,244,36,36,244,36, + 244,36,244,36,36,36,36,244,36,36,36,120,36,36,36,36, + 36,36,36,217,105,36,105,36,105,105,105,210,63,63,105,63, + 236,236,236,153,184,153,153,184,236,184,181,58,181,240,58,240, + 119,108,119,119,119,119,108,119,108,108,108,108,108,108,161,83, + 108,119,108,108,108,119,9,85,195,181,83,83,83,108,108,108, + 108,108,108,108,108,119,159,108,108,108,240,108,119,240,240,119, + 58,119,119,119,119,58,119,119,236,58,119,236,236,58,58,58, + 58,119,58,119,119,119,119,58,236,236,119,58,236,58,119,236, + 236,119,236,236,236,236,236,89,119,236,236,236,58,58,119,119, + 119,236,119,89,236,119,119,236,236,119,119,236,236,119,119,119, + 89,89,89,89,207,89,89,89,89,89,89,119,119,119,58,236, + 236,119,119,236,58,236,236,58,236,58,58,58,119,236,236,119, + 58,119,119,119,58,58,58,58,159,58,119,119,119,119,58,119, + 119,119,119,119,119,236,119,119,119,119,119,119,119,58,240,15, + 78,126,122,78,126,122,59,26,26,26,26,26,42,42,26,17, + 219,219,17,26,17,219,26,187,42,91,26,26,26,26,42,26, + 17,219,219,219,26,17,219,26,187,42,91,26,26,26,42,42, + 26,17,219,219,219,26,26,17,26,187,42,12,26,26,26,42, + 42,26,17,17,219,219,26,26,219,26,187,26,26,26,26,26, + 42,42,26,17,17,219,219,26,26,219,26,187,42,91,26,26, + 26,26,42,26,17,17,219,219,26,26,219,26,187,26,26,26, + 26,26,42,42,26,17,219,219,219,26,17,219,26,187,26,26, + 26,26,26,42,42,26,17,219,219,219,26,26,17,26,187,42, + 91,26,26,26,42,42,26,17,219,219,219,26,26,219,26,187, + 26,26,26,26,26,26,42,26,17,219,219,17,26,26,219,26, + 187,26,26,26,26,26,42,42,26,17,17,219,219,26,17,219, + 26,187,42,26,26,26,26,42,42,26,17,219,219,219,26,17, + 132,26,187,26,26,26,26,26,42,42,26,219,17,219,219,26, + 26,219,26,187,26,26,26,26,26,26,42,26,219,17,219,17, + 26,26,219,26,187,42,187,26,26,26,42,42,26,17,219,219, + 17,26,26,219,26,187,42,12,26,26,26,26,42,26,17,17, + 219,17,26,26,219,26,187,42,26,26,26,26,42,42,26,17, + 219,219,219,26,26,219,26,187,26,26,26,26,26,26,42,26, + 17,219,219,17,26,26,166,26,187,166,42,183,183,0,208,89, + 244,244,144,144,244,244,244,244,244,244,71,244,244,244,244,244, + 120,244,244,36,244,36,244,244,36,244,36,244,36,244,36,36, + 244,36,244,36,244,36,36,36,36,36,36,36,36,36,36,217, + 36,105,105,36,36,105,105,217,105,105,105,105,105,105,63,105, + 184,153,181,153,181,184,236,153,236,236,153,184,58,181,58,240, + 119,181,119,240,108,240,108,119,108,108,108,108,108,108,83,83, + 108,108,108,108,108,181,9,53,116,181,108,83,108,83,108,108, + 108,119,108,108,108,108,119,119,119,108,119,108,119,240,119,119, + 58,58,236,58,58,58,58,58,119,58,58,58,236,119,119,119, + 236,119,58,58,58,58,119,119,119,58,119,58,236,236,119,119, + 236,119,119,236,119,119,89,89,89,119,119,119,119,58,58,236, + 119,119,159,119,236,236,119,119,236,236,119,119,236,119,236,119, + 89,89,89,89,89,89,89,89,89,236,236,89,236,236,119,236, + 236,236,58,119,58,58,58,58,236,236,236,236,119,58,58,119, + 236,58,236,58,236,236,236,236,236,119,119,159,119,58,236,159, + 119,119,236,236,119,119,236,119,119,119,119,119,119,119,108,15, + 162,111,162,42,126,122,224,219,243,12,12,17,219,17,12,243, + 12,150,150,12,12,17,219,12,219,150,12,12,187,219,12,12, + 243,150,150,243,17,12,17,219,12,219,150,12,17,17,219,17, + 12,243,12,150,150,150,12,219,219,187,26,243,187,12,17,219, + 17,12,243,12,243,150,150,12,17,219,12,219,243,12,17,17, + 219,17,17,243,12,150,243,150,12,17,219,12,219,150,12,17, + 17,219,12,12,150,12,150,150,150,12,17,219,187,17,243,12, + 12,17,219,17,12,243,12,150,150,12,12,17,219,187,17,243, + 187,17,17,219,17,12,243,12,150,150,150,12,17,219,12,219, + 150,12,17,17,219,17,12,243,150,150,243,150,12,17,219,187, + 17,243,12,17,17,219,12,12,243,150,150,150,150,12,17,219, + 187,17,243,12,12,17,219,12,17,243,150,150,150,17,12,17, + 219,187,17,243,12,12,17,219,17,12,243,12,150,150,17,17, + 219,219,12,219,243,12,12,17,219,12,12,243,150,150,150,150, + 12,17,219,187,17,243,12,17,187,219,12,12,243,12,150,150, + 150,12,17,219,12,26,243,12,12,17,219,17,12,243,150,150, + 150,150,12,17,219,187,26,150,12,17,17,219,12,12,150,12, + 150,150,150,12,17,219,12,219,243,12,12,17,219,12,12,150, + 12,150,150,150,12,17,219,12,219,243,12,17,187,219,12,12, + 243,12,150,150,150,12,17,26,12,111,42,42,215,122,36,89, + 144,244,244,244,144,244,71,244,71,244,244,244,120,244,244,244, + 244,36,244,120,244,36,244,244,36,244,244,36,244,36,244,36, + 244,36,36,36,36,244,36,36,36,120,36,36,36,36,36,36, + 36,36,105,217,36,36,105,36,210,210,105,63,63,105,63,63, + 153,181,153,153,153,153,184,184,181,184,181,58,184,58,58,58, + 58,240,240,119,119,159,119,108,108,108,108,108,83,159,83,108, + 108,108,108,108,119,119,9,53,19,181,108,66,83,159,108,108, + 108,108,119,119,159,119,108,108,108,119,108,119,108,119,240,58, + 119,119,58,119,119,58,58,58,58,58,58,58,58,58,58,58, + 58,58,119,119,58,58,58,58,58,119,58,119,119,119,58,119, + 119,119,58,119,89,89,89,236,119,236,119,58,58,119,236,119, + 119,236,236,119,159,119,236,236,58,119,236,236,119,236,119,236, + 236,236,207,89,89,236,236,236,89,89,236,119,119,119,58,58, + 58,236,236,236,119,236,236,119,58,119,119,58,236,119,236,236, + 58,236,58,236,119,119,119,119,119,119,119,119,119,119,159,119, + 119,236,119,119,119,236,119,119,236,119,119,119,119,119,240,15, + 42,126,221,78,166,122,224,26,150,12,132,187,17,12,26,243, + 150,12,12,219,17,219,42,243,26,150,17,132,219,17,17,17, + 243,12,12,17,17,17,219,42,150,26,150,17,132,187,17,12, + 26,243,150,12,12,219,17,17,26,12,219,150,17,150,17,219, + 12,26,243,150,17,12,219,17,219,42,109,26,150,12,150,187, + 17,12,26,243,150,17,12,219,12,219,42,150,26,150,17,150, + 17,219,17,12,243,150,12,12,17,187,219,26,109,26,150,12, + 132,187,219,12,17,243,150,12,12,219,17,17,42,243,26,150, + 12,132,187,17,12,17,243,150,150,12,17,17,219,42,150,26, + 150,17,150,17,219,12,26,243,12,12,17,17,12,219,42,243, + 26,150,12,132,187,219,12,26,243,12,12,12,219,12,219,42, + 109,26,150,12,132,187,219,12,26,243,12,150,12,17,12,219, + 26,12,26,150,12,132,187,17,12,26,243,150,150,12,17,12, + 187,42,109,26,150,17,132,187,17,12,26,243,12,12,12,17, + 17,17,42,243,26,150,12,150,219,17,12,26,243,150,12,12, + 219,12,219,42,109,219,150,12,132,187,219,12,26,243,12,12, + 12,219,12,219,26,243,219,150,12,132,187,17,17,17,243,150, + 12,12,219,17,219,26,187,26,150,12,132,187,17,12,26,243, + 150,150,12,17,12,219,42,109,26,150,12,150,17,219,12,26, + 243,150,12,12,17,17,219,26,187,166,183,183,219,0,105,89, + 244,71,244,144,71,244,244,244,244,244,120,244,120,120,120,120, + 244,244,120,244,36,244,36,36,244,36,36,244,36,244,36,244, + 36,36,244,244,36,36,120,36,36,36,36,36,36,217,36,217, + 217,36,36,36,105,105,36,63,105,105,63,105,105,63,105,105, + 153,153,181,184,181,153,153,153,184,236,184,58,181,184,58,58, + 58,119,240,240,119,108,240,119,159,108,159,159,108,108,108,83, + 108,108,108,108,108,181,9,231,116,181,108,108,108,108,108,108, + 108,108,108,108,108,119,119,119,159,119,108,240,119,119,119,119, + 58,119,236,58,58,58,240,119,58,58,58,58,58,119,119,119, + 119,58,58,58,58,58,58,240,119,119,58,58,240,181,58,58, + 236,236,119,58,58,236,236,236,236,236,236,119,58,58,58,236, + 159,119,119,236,119,159,119,236,58,119,119,119,119,119,119,58, + 236,119,236,236,236,236,236,119,236,119,236,236,236,236,236,236, + 184,58,184,58,58,58,58,119,58,236,236,119,236,119,58,119, + 119,119,119,119,119,119,119,119,236,119,119,119,236,89,89,236, + 119,119,119,119,119,119,119,119,119,89,89,119,119,119,240,15, + 78,187,162,42,187,162,99,42,150,17,219,17,150,150,26,150, + 150,150,12,17,12,17,26,109,26,150,17,12,219,150,17,26, + 150,150,132,12,12,17,17,26,109,26,150,17,17,219,150,150, + 26,150,150,150,12,17,17,17,17,109,26,150,17,17,17,150, + 150,26,150,150,150,12,17,187,17,26,109,26,150,17,219,17, + 132,150,26,243,150,150,12,219,12,17,26,211,26,150,17,219, + 17,150,17,26,150,150,150,12,17,12,219,26,243,26,150,17, + 219,17,150,17,26,150,150,150,12,132,17,17,26,109,26,150, + 17,17,17,132,12,26,150,17,150,17,17,12,17,26,109,26, + 150,17,17,17,150,150,26,150,150,132,12,219,187,17,26,109, + 26,150,17,219,17,150,150,26,150,150,150,17,12,187,17,26, + 243,26,150,219,17,17,150,150,26,150,12,150,17,17,12,17, + 17,109,26,150,219,17,219,150,150,26,150,17,150,17,17,17, + 17,26,243,26,150,17,17,17,132,150,26,150,150,150,17,17, + 17,17,26,109,26,150,219,12,17,132,150,26,150,150,150,12, + 219,187,17,26,243,26,150,219,17,17,150,150,26,150,150,150, + 12,219,187,17,26,109,26,150,17,219,17,150,17,26,150,150, + 132,12,12,12,17,17,211,26,150,17,219,17,150,150,26,243, + 17,150,17,17,12,219,26,243,26,150,219,17,17,150,150,26, + 150,150,150,17,12,187,17,17,109,187,183,42,183,122,36,114, + 144,244,244,244,71,144,244,244,71,244,244,120,244,244,120,120, + 120,244,36,244,120,244,244,36,244,244,36,36,36,36,36,244, + 244,36,36,36,36,36,36,36,36,36,36,36,36,217,36,36, + 105,105,105,36,217,105,36,105,105,105,63,63,63,63,63,105, + 236,184,153,153,240,184,181,184,184,240,58,184,184,181,240,58, + 58,119,240,119,240,240,119,108,108,159,108,108,108,159,108,108, + 108,108,108,119,108,89,107,165,19,181,108,83,108,108,108,159, + 108,108,119,159,159,108,108,119,108,108,119,119,108,240,240,58, + 119,58,58,58,119,119,58,58,58,119,240,119,119,58,58,240, + 58,119,119,240,119,119,58,119,240,58,119,119,119,58,119,58, + 58,58,58,119,236,58,236,236,119,58,119,58,58,58,119,159, + 119,159,236,119,119,236,159,119,236,119,119,236,58,236,58,236, + 119,236,236,58,119,119,119,236,119,236,58,58,58,58,58,184, + 58,58,58,236,236,236,236,236,236,119,119,58,119,236,236,236, + 119,119,119,236,89,236,119,119,119,236,119,119,119,119,119,119, + 236,236,89,89,89,89,119,119,89,119,119,89,119,119,108,15, + 162,126,221,221,212,0,224,219,12,17,132,17,17,17,219,12, + 17,17,17,132,17,187,219,243,219,12,17,132,17,17,12,219, + 150,17,17,12,132,187,187,219,243,219,12,17,132,17,17,17, + 219,12,17,17,17,132,187,187,26,243,219,12,17,132,219,17, + 12,219,12,17,17,12,132,12,187,219,211,219,150,17,132,17, + 17,12,219,17,17,17,12,132,12,187,219,243,219,12,17,132, + 17,17,12,219,12,17,17,12,132,17,187,219,109,219,12,17, + 132,17,17,12,219,12,17,17,17,17,17,187,219,243,219,17, + 17,132,17,17,12,219,12,150,17,17,132,17,187,219,243,219, + 12,17,132,17,17,12,219,150,17,17,12,132,12,187,219,243, + 219,12,17,132,17,17,17,219,150,17,17,17,132,12,187,219, + 109,219,17,17,150,219,17,12,219,150,150,17,17,132,17,187, + 26,243,219,17,17,132,17,17,17,219,12,150,17,17,17,17, + 187,219,109,219,150,17,132,219,17,12,219,150,17,17,12,132, + 187,187,219,243,219,17,17,132,17,17,17,219,12,17,17,12, + 132,12,187,219,109,219,17,17,150,219,17,12,219,150,17,17, + 12,132,12,187,219,243,219,12,17,132,17,17,12,219,12,17, + 17,17,132,17,187,26,109,219,12,17,132,219,17,12,219,17, + 150,17,12,132,17,187,219,109,219,17,17,132,17,17,17,219, + 12,17,17,17,17,12,166,26,109,183,42,183,183,0,36,119, + 244,144,71,144,244,244,71,244,244,244,244,244,120,120,244,244, + 244,244,244,36,244,36,36,244,36,120,36,36,244,36,36,36, + 36,36,244,36,36,36,36,120,36,36,36,36,105,36,36,217, + 36,36,36,105,36,36,63,63,63,63,105,105,105,105,105,63, + 58,184,240,184,240,153,184,184,181,184,181,184,240,184,240,240, + 240,181,240,240,119,108,240,119,108,108,240,108,108,108,108,108, + 108,108,108,108,108,181,118,231,11,181,181,83,108,108,108,159, + 108,108,108,108,159,240,159,240,119,108,108,119,108,119,240,58, + 119,58,236,58,58,58,58,119,240,119,240,119,58,58,119,119, + 240,119,58,58,58,240,58,58,58,240,119,58,58,58,119,58, + 119,58,119,119,119,119,119,236,236,58,58,119,119,58,119,58, + 236,119,159,119,119,119,159,119,58,58,58,119,58,236,58,153, + 184,58,119,236,236,236,58,236,236,236,236,119,119,58,119,119, + 58,236,58,58,119,58,119,119,119,119,119,58,58,119,58,236, + 236,119,119,119,119,119,119,119,119,89,236,119,236,236,89,236, + 119,119,119,119,119,89,119,119,119,119,119,89,119,119,108,15, + 78,187,162,42,183,0,111,219,150,17,132,17,150,17,219,150, + 150,150,17,132,132,187,219,211,219,150,219,150,17,150,17,26, + 150,150,150,219,132,150,187,219,211,219,150,17,132,17,150,17, + 219,150,150,150,17,132,132,150,42,211,219,150,219,150,17,150, + 17,219,150,132,150,17,132,132,187,219,243,42,150,17,132,17, + 150,17,219,150,150,150,219,132,132,187,219,243,219,150,17,132, + 17,150,17,219,150,132,150,17,132,132,187,219,243,219,150,17, + 132,17,150,17,219,150,150,150,17,132,132,187,219,211,219,150, + 17,132,17,150,17,219,12,150,150,17,132,132,187,219,243,219, + 150,219,132,17,150,17,26,150,150,150,17,132,132,187,219,109, + 219,150,17,132,17,150,17,26,150,150,150,17,132,132,187,219, + 243,219,150,17,132,17,150,17,26,12,150,150,17,132,132,150, + 219,211,219,150,17,132,17,150,17,219,12,150,150,150,132,132, + 187,219,243,26,150,17,150,17,150,17,26,150,150,132,17,132, + 132,187,219,211,219,150,17,132,17,150,17,219,150,150,150,17, + 132,132,187,26,211,219,150,17,132,17,132,17,26,150,150,150, + 219,132,132,187,26,211,219,150,17,132,17,150,17,219,150,150, + 150,17,132,132,150,219,243,219,150,17,132,17,150,17,219,12, + 150,132,17,132,132,187,219,243,219,150,17,132,17,150,17,219, + 150,150,150,132,132,17,150,42,109,122,78,42,219,122,105,89, + 244,144,244,144,244,244,244,71,244,244,248,244,120,120,120,120, + 36,120,244,120,244,36,120,36,36,244,36,120,244,36,36,120, + 244,36,36,36,120,36,36,36,36,217,36,36,217,105,36,105, + 105,105,217,105,105,36,105,105,105,63,105,105,105,105,105,105, + 184,184,184,240,184,184,184,184,184,240,184,240,58,58,181,58, + 184,184,181,240,240,240,119,108,108,159,108,240,240,108,108,108, + 108,159,108,159,108,114,118,6,13,181,108,108,108,108,108,108, + 108,108,108,108,108,108,119,240,119,240,119,240,119,240,58,58, + 58,58,58,119,240,58,58,58,119,58,119,119,240,119,58,119, + 119,240,58,119,119,58,58,119,119,119,240,58,58,119,240,58, + 58,119,58,58,58,119,236,58,119,236,119,58,58,58,58,119, + 119,119,236,159,119,119,119,58,236,58,58,236,58,184,58,58, + 119,58,58,58,58,58,236,58,58,119,119,236,236,236,236,236, + 119,119,119,119,58,236,236,236,58,236,119,119,119,58,119,119, + 89,236,119,119,119,89,89,119,119,119,119,119,119,119,119,119, + 236,89,236,119,236,119,119,119,89,119,119,119,119,119,108,15, + 162,126,122,221,126,122,166,42,12,132,219,150,132,17,219,12, + 219,132,12,219,26,150,26,12,26,12,132,219,150,132,132,219, + 12,219,150,17,219,26,150,26,12,42,12,132,17,150,132,17, + 219,12,219,132,17,17,26,187,26,12,26,12,132,219,150,132, + 132,219,12,17,132,17,219,26,150,26,211,26,12,132,17,150, + 132,150,219,12,219,150,12,219,26,150,26,8,42,12,132,17, + 150,132,132,219,12,17,132,12,219,26,150,26,8,42,12,132, + 17,150,132,132,219,12,219,132,132,17,26,150,26,187,42,12, + 132,219,150,132,17,219,150,219,132,17,17,26,150,26,8,26, + 12,132,17,150,132,132,219,12,219,150,17,219,26,150,26,8, + 42,12,132,17,150,132,150,219,12,219,132,17,219,26,150,26, + 8,42,12,132,17,150,132,132,219,150,219,150,17,219,26,187, + 26,12,42,12,132,17,150,132,150,219,150,219,132,17,219,26, + 150,26,211,42,12,132,17,150,132,17,219,12,219,150,17,219, + 26,150,26,12,42,12,132,17,150,132,17,219,12,219,132,17, + 219,26,150,26,12,42,12,132,17,150,132,150,219,12,219,150, + 17,219,26,150,26,12,42,12,132,219,150,132,132,219,12,17, + 132,12,219,26,187,26,8,42,12,132,17,150,132,17,219,150, + 219,150,17,17,26,150,26,211,26,12,132,17,132,132,150,219, + 12,219,132,17,219,17,187,26,211,122,78,183,219,122,191,89, + 144,244,144,71,244,71,244,244,71,244,244,120,244,244,244,244, + 244,244,120,36,120,244,120,36,244,120,36,36,120,36,36,36, + 36,36,244,36,36,36,36,36,36,36,105,36,36,36,105,36, + 217,36,105,105,105,105,63,63,63,36,105,105,105,63,105,63, + 240,181,184,181,240,240,240,184,184,181,184,181,184,184,58,240, + 240,240,240,240,181,240,240,240,108,119,240,240,108,108,108,108, + 108,108,108,108,108,181,65,231,13,181,108,83,108,108,119,159, + 119,108,119,108,108,108,108,108,119,108,119,108,119,240,119,240, + 119,58,58,119,119,240,119,58,240,58,240,119,240,119,240,119, + 119,119,240,119,58,58,58,240,119,58,240,119,58,58,119,58, + 58,58,58,119,236,119,236,58,58,236,236,58,58,58,58,58, + 58,119,236,119,119,58,119,119,119,119,58,58,58,58,119,58, + 58,236,119,236,119,119,236,236,58,58,58,58,119,58,58,236, + 236,119,236,119,119,58,58,236,58,236,58,58,119,58,58,240, + 119,119,119,119,159,119,236,236,119,119,236,119,119,119,119,119, + 119,119,89,119,119,89,89,119,89,119,119,119,119,119,108,15, + 50,187,162,162,111,0,95,219,17,17,17,17,150,17,219,150, + 17,150,17,132,26,187,12,109,219,17,17,17,17,17,132,219, + 150,219,150,17,132,26,187,12,211,219,17,17,17,17,150,17, + 219,150,17,150,17,132,17,150,17,109,219,12,219,17,17,17, + 17,219,150,17,150,17,132,26,187,26,109,219,17,17,17,17, + 17,17,219,150,219,150,17,132,26,187,26,211,219,17,17,17, + 17,17,17,219,150,219,150,17,132,26,187,26,211,219,17,17, + 17,17,17,17,219,150,17,12,17,132,26,187,12,211,219,17, + 17,17,17,150,17,26,150,17,150,17,132,26,187,26,211,219, + 17,219,17,17,17,150,219,150,219,150,17,132,26,187,26,211, + 219,17,219,17,17,17,132,219,150,17,150,17,132,26,187,26, + 211,219,17,17,17,17,17,132,42,150,219,150,17,132,17,187, + 17,211,219,17,17,17,17,17,17,26,150,219,12,12,132,26, + 187,26,211,219,17,219,17,17,150,132,219,150,17,150,17,132, + 26,187,17,211,219,17,219,17,17,150,17,219,150,17,150,17, + 132,26,150,17,211,219,17,17,17,17,17,132,219,150,219,150, + 17,132,26,150,17,211,219,17,17,17,17,17,17,219,150,219, + 150,17,132,17,187,26,211,219,17,17,17,17,150,17,26,150, + 219,150,17,132,26,187,26,109,219,17,17,17,17,17,17,219, + 150,17,12,17,219,17,132,26,187,42,42,26,187,183,105,244, + 144,244,244,144,244,144,244,244,244,244,244,248,120,120,120,244, + 36,244,244,120,120,244,36,120,36,244,36,120,36,244,36,120, + 120,36,36,36,120,36,36,36,36,36,217,36,105,36,105,36, + 105,105,217,105,210,105,105,105,63,105,63,210,105,210,105,105, + 184,184,240,240,184,184,184,240,184,184,240,184,240,58,240,58, + 58,58,58,240,240,240,119,108,240,108,159,240,240,159,108,108, + 108,108,108,119,108,89,118,231,93,181,108,108,108,108,108,108, + 108,108,108,108,119,108,159,119,108,240,108,240,108,119,240,119, + 240,119,119,58,58,58,58,58,58,119,119,58,119,119,119,58, + 58,119,58,58,58,119,58,58,58,58,58,58,58,119,58,119, + 58,119,119,236,119,236,119,236,119,58,58,119,58,58,58,58, + 58,58,119,58,236,119,119,58,236,58,58,58,119,58,58,236, + 236,58,58,119,236,236,119,119,236,236,119,119,119,119,119,58, + 58,236,119,119,119,119,119,240,119,58,119,119,240,119,119,119, + 119,119,119,119,236,236,119,119,236,119,119,119,119,236,89,119, + 119,89,119,89,236,119,119,89,119,89,89,89,119,119,108,151, + 42,227,122,0,95,162,224,42,12,219,12,17,150,132,219,17, + 132,17,17,219,17,132,42,12,26,17,17,17,150,150,219,219, + 150,150,17,12,219,17,132,26,187,42,12,219,12,17,150,132, + 219,17,150,17,17,219,219,187,26,12,42,12,219,12,12,150, + 132,219,17,132,17,17,219,17,187,219,12,42,12,219,12,17, + 150,132,219,150,132,17,17,219,17,150,219,187,26,17,17,17, + 150,150,132,219,150,132,17,17,219,17,150,219,187,42,12,219, + 17,150,150,132,219,150,132,17,17,219,17,150,42,12,42,12, + 219,12,150,132,132,219,17,150,17,17,219,17,150,219,187,42, + 12,17,17,12,150,219,219,17,150,17,17,219,17,150,219,187, + 42,12,17,12,17,150,219,219,17,150,17,17,219,17,150,219, + 187,42,12,219,12,17,150,17,219,17,150,17,17,219,219,150, + 26,187,42,12,219,12,17,150,132,219,17,132,150,17,219,17, + 187,219,187,42,12,17,12,17,150,219,219,17,132,17,17,219, + 17,150,26,187,42,12,219,12,17,150,132,183,150,150,17,17, + 219,219,187,26,187,26,17,17,17,12,150,219,219,150,132,12, + 17,219,17,187,26,187,26,17,17,17,150,150,132,219,17,132, + 17,17,219,219,150,219,187,26,17,17,17,17,150,132,219,17, + 150,17,17,219,17,150,219,12,42,12,219,12,17,150,132,219, + 150,132,150,17,17,219,187,17,187,122,221,183,187,162,244,244, + 71,144,144,244,71,244,244,71,244,244,120,244,120,120,244,120, + 244,36,120,36,120,36,244,120,36,120,36,120,36,36,36,120, + 36,120,36,36,36,36,217,36,217,105,36,217,36,105,36,105, + 217,105,63,105,105,105,63,105,105,105,105,105,105,105,63,63, + 240,184,240,240,181,240,240,184,240,181,240,181,240,181,240,240, + 240,240,240,181,240,240,119,108,240,108,108,240,108,159,108,108, + 159,108,108,159,108,181,65,6,93,181,108,108,108,108,108,119, + 108,159,119,108,108,108,108,159,108,119,240,119,240,119,240,240, + 119,240,119,119,119,58,58,58,240,58,58,240,240,58,58,58, + 240,119,58,119,240,240,119,240,119,119,58,58,236,58,58,119, + 236,58,58,236,58,236,119,236,119,119,58,119,119,119,58,58, + 119,119,236,58,236,119,119,58,119,119,119,58,236,58,119,119, + 119,236,58,58,119,236,236,119,119,236,236,236,119,119,119,119, + 58,58,236,58,240,119,119,119,119,58,240,119,119,119,58,240, + 119,119,119,119,119,236,236,119,236,119,89,236,119,119,119,119, + 119,119,119,119,119,89,119,89,119,119,119,119,159,108,108,186, + 0,126,187,94,254,78,95,219,26,219,17,219,26,17,219,17, + 17,17,219,219,26,150,26,150,219,26,219,26,17,12,17,26, + 219,17,17,219,219,26,150,26,150,219,26,219,17,219,26,17, + 219,219,12,17,219,219,12,132,26,150,219,26,219,17,219,26, + 17,219,17,17,17,219,219,17,12,219,150,219,26,219,17,219, + 26,12,26,219,12,17,219,219,26,187,26,150,219,26,219,26, + 17,26,17,26,219,12,17,219,219,26,187,26,150,219,26,219, + 26,17,26,17,26,219,12,17,219,219,26,150,26,150,219,26, + 219,26,17,26,17,219,219,17,17,17,219,26,187,26,150,219, + 26,219,17,17,17,17,219,17,17,17,17,219,26,187,26,150, + 219,26,219,17,17,12,17,219,219,17,17,17,219,26,187,26, + 150,219,26,219,17,17,17,17,219,17,17,17,17,219,26,150, + 26,150,219,26,219,17,219,26,12,219,17,17,17,219,219,17, + 12,219,150,219,26,219,17,219,12,17,219,17,17,17,17,219, + 26,150,26,150,219,26,219,17,219,26,26,26,219,17,17,17, + 219,12,132,26,150,219,26,219,17,17,17,17,26,17,17,17, + 219,219,12,132,26,150,219,26,219,26,17,26,17,219,17,17, + 17,219,219,26,187,26,150,219,26,219,17,17,26,17,219,17, + 17,17,219,219,26,12,26,150,219,26,219,17,17,26,17,26, + 219,17,17,219,219,12,12,219,243,122,0,0,122,162,144,244, + 244,71,144,144,244,71,244,244,248,244,120,244,120,120,120,120, + 244,244,244,36,120,120,36,244,36,120,36,36,36,120,36,36, + 36,120,36,36,36,36,36,36,36,105,36,105,105,105,105,105, + 105,105,210,105,210,105,210,105,63,105,63,210,63,105,105,63, + 240,240,240,240,240,240,240,240,184,184,184,184,184,240,240,181, + 240,240,58,240,108,119,108,240,108,240,159,240,108,108,240,108, + 108,240,108,108,119,89,118,165,93,181,108,108,108,108,159,108, + 159,108,108,108,119,108,119,108,119,108,240,108,240,240,119,119, + 240,119,119,159,58,119,58,119,119,159,119,119,119,240,119,119, + 58,119,119,119,119,119,119,119,240,58,58,58,58,119,236,58, + 58,236,236,119,119,119,119,119,58,58,119,58,236,236,119,119, + 58,58,119,119,119,58,119,119,236,58,58,119,119,119,236,236, + 236,119,119,236,236,119,119,119,236,119,119,58,58,236,58,119, + 240,119,58,119,119,119,119,119,240,119,119,119,240,119,119,119, + 119,119,159,119,119,159,119,159,119,119,159,119,119,119,236,236, + 119,236,236,89,119,119,89,119,119,119,119,119,89,89,119,186, + 162,183,78,215,122,162,78,0,42,122,122,122,122,42,122,122, + 42,122,122,78,219,42,183,187,122,42,122,122,0,122,42,122, + 122,42,122,122,162,219,42,183,187,0,42,122,122,122,122,42, + 122,122,122,122,122,122,42,42,183,187,0,42,122,122,122,122, + 42,122,122,42,122,122,122,42,42,42,187,0,42,122,122,122, + 122,42,122,122,42,122,122,162,183,42,183,187,0,42,122,122, + 122,122,42,122,122,122,122,122,78,183,42,183,187,0,42,122, + 122,122,122,42,122,122,122,122,122,162,219,42,183,187,0,42, + 122,122,122,122,42,122,122,122,122,122,162,183,42,183,187,0, + 42,122,122,0,122,42,122,122,122,122,122,122,183,42,219,187, + 0,42,122,122,0,122,42,122,122,122,122,122,122,183,42,183, + 187,0,42,122,122,0,122,42,122,122,122,122,122,162,183,42, + 183,187,0,42,122,122,122,0,42,122,122,122,122,122,122,42, + 42,42,187,0,42,122,122,0,122,42,122,122,122,122,122,122, + 183,42,183,187,122,42,122,122,122,122,42,122,122,122,122,122, + 122,42,42,183,187,0,42,122,122,0,122,42,122,122,42,122, + 122,162,42,42,183,187,122,42,122,122,122,122,42,122,122,42, + 122,122,122,183,42,183,187,0,42,122,122,0,122,42,122,122, + 42,122,122,122,183,42,183,187,0,42,122,122,0,122,42,122, + 122,122,122,122,122,42,78,42,187,0,0,0,0,0,151,120, + 244,244,114,244,244,244,244,244,244,244,244,120,244,120,244,244, + 36,36,120,36,120,36,244,36,120,36,120,36,120,36,36,36, + 36,36,36,36,36,36,217,105,36,36,105,105,36,210,210,105, + 105,105,105,63,105,105,105,105,105,210,105,105,105,63,63,105, + 240,184,240,240,240,240,240,240,240,240,240,181,184,58,240,184, + 240,240,240,119,108,119,240,119,240,108,240,240,159,108,240,108, + 108,108,108,108,108,181,23,6,138,181,108,108,108,108,108,108, + 108,108,119,108,108,108,108,108,119,240,119,240,119,240,240,119, + 240,119,119,240,119,119,58,58,240,159,119,58,58,159,119,119, + 58,58,58,58,58,240,58,119,58,240,119,58,58,58,236,119, + 119,119,58,236,181,58,58,236,119,58,119,58,58,236,58,119, + 236,119,119,58,236,119,119,58,119,119,58,58,119,58,119,58, + 58,236,119,119,119,119,58,58,58,58,119,236,58,119,119,119, + 119,119,58,58,240,240,119,119,119,58,119,119,159,119,159,58, + 58,119,159,159,119,119,119,119,119,119,119,119,159,119,119,159, + 119,119,119,119,119,119,119,119,119,119,119,108,120,0,212,75, + 0,0,122,0,46,47,24,44,200,187,166,141,46,219,0,0, + 166,183,183,0,50,50,187,183,50,22,122,42,162,162,94,162, + 111,183,162,162,78,162,187,183,111,224,166,111,166,187,94,187, + 187,183,42,42,162,122,122,122,0,187,183,78,122,78,183,183, + 0,0,0,0,0,0,221,0,162,162,0,0,0,162,162,0, + 0,0,0,0,0,122,183,50,212,162,42,183,122,132,95,187, + 227,224,122,42,78,42,42,162,122,122,122,42,42,111,42,42, + 183,183,183,78,183,183,183,42,183,0,0,0,0,122,183,0, + 122,0,0,0,0,0,0,162,162,162,162,162,162,162,162,162, + 163,200,111,50,163,111,111,224,75,224,163,111,75,97,35,35, + 200,42,0,122,0,122,0,122,122,122,42,162,162,122,183,166, + 59,0,0,122,122,0,0,122,122,0,122,111,187,183,0,0, + 42,183,122,122,0,122,122,0,0,122,122,78,183,183,0,221, + 42,0,122,0,122,78,122,122,122,42,0,0,0,122,78,0, + 162,162,162,162,162,162,162,162,122,221,162,122,122,122,0,0, + 122,0,0,0,122,122,122,122,122,122,122,42,122,42,42,0, + 0,0,0,0,94,50,0,0,122,0,0,122,0,162,162,0, + 42,122,42,0,221,50,50,183,122,0,94,78,42,0,42,219, + 187,26,42,122,78,162,162,122,0,0,122,0,0,0,0,42, + 219,122,42,122,0,0,162,162,0,0,122,122,0,0,0,0, + 0,63,39,144,244,244,244,71,120,120,244,120,244,36,120,244, + 244,36,244,244,36,120,36,36,120,36,36,36,120,36,36,120, + 120,36,36,217,36,36,36,217,105,36,36,105,36,105,105,105, + 210,63,105,63,63,105,210,105,105,63,105,63,105,105,63,63, + 240,240,108,108,240,240,240,240,240,240,184,240,58,240,240,240, + 58,240,240,240,240,108,240,240,240,240,240,240,108,240,108,240, + 240,119,108,119,119,181,19,6,93,181,83,108,108,108,108,108, + 108,159,108,108,159,108,240,159,108,108,108,108,119,240,119,240, + 58,119,159,119,58,159,58,119,119,240,58,58,119,240,58,58, + 58,58,58,119,236,119,58,119,240,58,58,58,58,119,58,58, + 236,119,119,58,58,236,119,240,58,119,58,119,58,58,236,58, + 119,58,58,119,119,58,58,119,236,58,119,119,58,119,58,119, + 119,119,119,58,236,58,236,119,119,119,58,119,58,58,58,58, + 119,240,119,119,119,119,119,58,58,58,119,240,119,159,119,159, + 58,58,119,159,119,159,119,159,119,159,119,108,119,108,108,119, + 108,119,119,159,119,119,119,119,119,119,119,108,133,50,29,135, + 223,0,78,0,29,187,254,135,47,94,95,0,37,0,183,59, + 44,59,111,50,162,50,47,187,95,212,42,163,162,162,187,215, + 183,50,162,187,50,162,59,224,59,59,59,44,64,64,224,75, + 183,78,221,122,42,42,122,122,0,59,200,111,111,163,59,163, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,162, + 122,162,162,162,162,0,183,22,22,122,42,95,132,254,99,99, + 59,225,219,126,126,187,95,219,122,221,122,0,122,64,75,97, + 111,75,111,224,224,111,26,0,0,187,64,64,214,44,99,64, + 99,64,224,166,0,0,0,183,162,50,22,162,50,162,162,162, + 126,35,200,47,47,35,200,200,111,95,35,47,34,64,64,29, + 35,221,42,26,42,0,0,0,0,246,42,219,219,243,64,214, + 235,44,122,78,42,42,187,78,78,122,122,34,64,64,44,34, + 224,44,64,0,254,26,42,224,64,224,35,44,34,224,0,187, + 187,26,122,0,64,75,42,122,42,187,122,0,0,187,187,0, + 162,162,0,0,0,0,50,163,50,162,94,50,162,78,42,42, + 42,42,42,122,42,219,122,122,219,17,17,132,12,26,17,122, + 0,162,162,0,0,0,0,0,162,0,0,42,0,42,126,0, + 219,162,183,163,241,50,187,183,162,162,183,78,183,42,183,0, + 183,183,187,183,94,187,111,183,42,122,122,122,122,122,0,111, + 182,243,109,187,162,0,162,0,122,0,0,42,122,0,0,0, + 12,244,89,244,244,248,244,120,244,244,120,244,36,244,244,36, + 36,244,36,36,120,36,120,36,120,36,36,120,36,36,36,36, + 36,36,36,36,36,105,105,36,36,105,105,105,105,105,105,105, + 105,105,105,105,105,63,105,105,105,105,63,105,63,63,63,105, + 240,240,240,240,240,240,240,240,240,240,240,240,181,240,240,240, + 240,240,240,240,240,240,240,240,240,108,240,240,240,240,240,108, + 108,240,108,108,108,181,23,6,138,169,83,108,108,240,159,108, + 108,108,119,108,159,108,108,119,240,119,108,108,119,108,240,119, + 240,119,58,119,119,119,58,58,58,159,159,119,58,119,58,240, + 119,119,58,58,58,58,58,58,119,240,119,119,58,181,58,58, + 58,58,119,236,58,119,119,119,58,119,58,119,119,119,119,58, + 58,236,58,58,119,119,58,240,119,58,58,58,119,119,58,58, + 58,58,119,58,119,119,240,119,240,119,240,119,58,58,119,119, + 119,240,119,240,119,240,240,119,240,240,119,240,119,159,119,119, + 58,58,58,159,119,159,119,159,108,119,119,108,119,119,119,119, + 119,108,119,119,119,119,119,119,119,159,119,108,151,37,229,229, + 186,162,122,0,223,162,0,95,224,221,122,37,22,183,183,78, + 183,50,50,50,162,37,111,215,183,122,0,187,162,163,163,183, + 183,162,122,187,0,162,64,35,64,64,47,35,224,126,183,42, + 162,122,42,122,122,122,42,122,0,59,59,224,224,75,64,111, + 0,0,0,0,0,0,122,183,78,0,0,0,126,42,0,162, + 94,50,163,163,78,0,166,40,163,42,26,183,166,59,200,37, + 163,75,78,162,162,162,162,42,0,0,47,35,59,64,64,59, + 35,44,44,29,95,162,0,95,64,44,59,59,97,163,163,95, + 254,95,95,99,99,99,162,0,0,78,50,162,162,50,239,122, + 122,162,50,50,126,46,75,40,50,122,78,187,163,44,47,44, + 59,42,42,26,42,50,209,24,209,221,227,187,183,212,50,94, + 246,111,214,94,183,166,111,166,187,183,122,59,47,59,44,34, + 187,187,44,122,44,0,99,44,219,141,59,64,224,0,111,187, + 126,42,183,44,20,75,42,0,0,78,26,162,78,111,219,42, + 75,200,224,75,59,59,94,50,183,162,163,50,78,219,187,94, + 162,0,162,221,122,187,0,162,162,122,122,162,78,162,78,0, + 162,162,162,42,166,187,0,26,42,183,0,42,162,0,42,162, + 163,92,162,104,166,150,50,162,187,50,162,42,183,111,111,42, + 139,0,187,166,162,0,0,42,162,0,0,0,0,0,0,42, + 254,187,183,0,0,0,42,122,0,0,0,42,42,0,0,42, + 139,36,114,244,244,244,244,244,120,244,120,244,36,36,244,36, + 120,120,36,120,36,120,36,36,36,36,36,36,36,36,36,36, + 36,36,36,36,36,36,105,105,105,217,105,105,105,210,210,105, + 105,210,63,105,105,210,210,105,105,105,105,105,105,105,63,63, + 247,240,108,247,240,240,108,108,240,240,240,240,240,240,240,240, + 240,240,240,240,240,108,108,108,240,240,240,240,108,108,108,108, + 108,108,108,108,108,89,23,6,216,39,83,108,108,108,108,159, + 108,108,108,108,108,108,159,108,108,108,240,240,108,119,240,159, + 119,240,159,119,240,58,119,58,119,119,240,58,119,240,119,58, + 119,240,119,119,119,240,58,119,240,119,240,58,58,240,184,181, + 119,119,58,58,119,58,58,119,119,58,119,58,58,58,58,58, + 119,58,58,119,58,58,119,119,58,58,58,119,58,58,119,119, + 119,119,58,119,58,58,119,119,119,119,119,119,119,240,119,240, + 119,119,240,119,159,119,119,240,119,119,119,159,119,119,240,159, + 119,159,119,119,119,119,119,119,119,119,119,119,119,108,119,119, + 119,119,119,159,119,119,119,119,119,119,119,108,151,109,135,229, + 229,46,0,122,24,44,122,162,203,95,166,22,22,163,227,212, + 162,162,162,42,187,162,162,162,187,166,187,95,166,203,241,162, + 187,227,215,163,163,187,224,64,64,59,109,95,183,0,122,122, + 122,42,122,122,183,0,122,122,0,47,59,46,59,47,64,59, + 0,0,122,219,122,42,162,0,122,183,0,111,133,126,162,162, + 183,163,227,97,162,0,111,37,94,122,219,0,0,0,187,241, + 22,241,50,162,162,162,50,162,122,42,171,34,223,44,44,99, + 44,34,192,224,0,219,44,59,166,122,0,163,37,37,203,224, + 59,111,224,37,212,99,225,95,0,0,162,163,163,75,162,162, + 50,78,215,42,239,47,59,200,59,75,162,126,142,44,35,46, + 59,122,122,42,42,50,35,241,75,162,42,221,164,14,50,104, + 37,212,166,44,162,187,95,126,187,187,187,0,183,44,64,64, + 44,254,150,59,64,183,59,111,111,111,254,109,162,111,111,187, + 221,95,29,253,29,95,150,47,152,35,254,162,26,254,224,111, + 34,34,29,29,20,44,0,0,162,94,122,221,162,254,111,42, + 162,42,162,162,162,111,162,122,122,37,162,162,162,162,162,0, + 162,162,162,166,182,224,42,219,122,75,241,94,162,162,166,12, + 59,59,212,241,17,78,56,111,42,122,162,26,166,109,42,162, + 162,132,224,109,132,0,78,0,0,42,183,219,42,0,122,162, + 78,122,0,0,78,122,42,122,0,122,78,0,0,0,0,219, + 67,105,89,71,244,248,248,120,120,120,120,120,120,36,120,120, + 244,36,244,36,120,36,120,36,36,120,120,36,36,36,36,36, + 36,36,36,217,36,36,36,105,36,36,105,217,105,105,105,63, + 210,105,105,63,105,105,105,155,105,105,63,105,63,210,105,36, + 108,240,240,108,247,240,240,240,240,108,108,240,240,108,240,240, + 240,108,240,240,240,240,240,108,108,240,108,240,240,108,108,108, + 108,108,108,108,108,181,250,6,216,39,83,108,108,108,108,159, + 108,108,108,108,159,108,240,240,108,108,108,240,108,240,108,108, + 119,108,159,119,119,58,119,240,119,58,159,119,58,58,119,240, + 119,58,240,119,119,240,119,58,240,119,58,119,119,119,240,58, + 58,119,119,240,119,58,240,119,119,240,119,119,58,58,119,58, + 119,119,240,119,119,119,58,119,58,119,240,119,119,58,58,58, + 58,119,240,119,119,58,58,58,119,58,240,119,119,240,119,58, + 119,58,119,119,240,119,58,58,240,119,240,119,240,119,159,119, + 119,159,119,159,119,119,119,159,119,119,119,119,119,119,119,159, + 119,119,119,119,119,89,119,119,119,119,119,83,15,75,171,135, + 135,15,122,223,34,75,162,50,50,203,163,122,215,22,94,183, + 42,162,162,227,212,162,162,95,166,215,162,0,219,50,164,50, + 50,75,162,212,50,95,94,111,183,42,0,59,44,0,122,42, + 122,122,42,183,111,183,122,0,0,35,59,59,47,35,34,64, + 0,0,42,0,183,183,0,0,0,183,0,187,0,187,0,0, + 162,50,78,75,78,0,227,183,122,42,78,0,0,162,0,95, + 22,37,22,162,0,162,50,162,42,29,223,44,24,64,34,47, + 44,34,111,0,99,225,95,42,111,187,183,75,164,37,203,95, + 95,75,200,22,22,37,212,99,34,166,215,50,212,187,212,183, + 50,50,126,50,22,75,34,142,59,163,183,44,44,46,29,35, + 64,187,0,122,42,163,42,42,163,50,17,56,73,212,50,212, + 241,50,22,254,126,187,224,95,95,166,111,187,122,95,227,59, + 44,64,183,47,171,44,94,64,47,59,126,0,166,182,183,42, + 35,44,59,109,35,95,192,152,125,229,109,162,187,224,224,109, + 223,44,29,178,171,224,0,162,50,162,122,122,122,150,166,162, + 162,50,42,162,42,187,162,162,0,241,162,0,0,162,0,0, + 162,0,0,99,214,44,126,26,122,163,142,59,59,243,182,224, + 187,187,224,50,42,219,187,162,56,187,122,26,17,227,0,94, + 0,67,99,182,109,227,183,122,42,17,183,166,187,187,0,162, + 0,0,0,162,187,183,42,0,0,0,0,0,0,122,0,111, + 182,63,114,244,244,244,244,244,120,120,120,120,120,244,36,120, + 244,36,36,36,120,36,36,36,36,36,36,217,36,36,217,36, + 36,217,36,36,217,36,217,105,105,105,105,105,217,105,36,105, + 105,105,105,105,105,105,36,105,105,36,210,105,105,105,105,105, + 240,108,108,240,184,247,108,108,108,240,240,108,240,240,108,240, + 240,240,108,108,108,108,108,240,240,108,240,108,108,108,108,108, + 108,108,159,108,108,119,250,6,41,181,83,108,108,108,108,108, + 159,108,240,240,108,108,108,108,240,240,159,108,240,159,58,58, + 240,119,119,240,58,58,58,119,240,240,119,240,58,119,58,119, + 240,58,119,58,58,58,119,240,58,58,119,240,58,58,58,58, + 58,119,240,119,240,119,119,119,240,58,119,240,119,58,58,58, + 119,240,58,119,240,119,119,240,119,240,119,240,58,240,58,58, + 119,119,58,119,240,119,240,119,240,119,119,119,240,119,240,119, + 240,119,240,119,159,119,159,58,119,240,119,159,119,119,240,119, + 240,119,159,119,159,119,159,119,119,159,119,159,159,119,119,119, + 159,119,159,119,236,119,119,119,119,119,108,108,245,35,151,245, + 229,151,111,223,142,162,0,0,183,75,162,162,122,40,162,162, + 183,78,166,163,94,162,212,183,221,0,122,94,0,215,187,75, + 50,203,75,183,132,50,95,111,37,164,122,99,29,183,0,122, + 42,122,122,239,239,224,95,0,0,95,224,64,64,44,178,171, + 0,0,183,122,183,122,219,183,0,122,0,166,59,166,122,0, + 241,26,22,241,162,0,163,42,122,166,219,187,0,0,0,183, + 164,50,50,59,59,122,162,187,50,171,59,44,35,64,44,35, + 64,183,0,64,44,50,22,59,183,183,183,183,183,215,187,111, + 219,17,95,241,164,164,224,187,47,59,183,0,40,50,94,163, + 94,78,212,224,163,50,187,34,187,163,35,223,59,35,35,47, + 64,111,26,26,42,24,22,183,178,122,26,162,212,162,56,22, + 183,221,14,122,44,122,95,109,59,224,224,111,183,64,29,122, + 47,215,183,24,171,224,44,254,59,126,0,122,42,187,200,34, + 29,139,64,44,44,97,171,245,63,171,111,0,187,254,109,59, + 158,253,224,254,35,163,0,42,37,78,94,0,42,224,111,162, + 162,78,162,162,221,91,122,162,0,164,111,187,254,254,109,122, + 0,0,0,214,64,225,166,42,0,241,73,24,59,183,246,50, + 0,0,26,42,221,183,0,227,254,111,122,42,0,0,122,163, + 0,99,254,0,183,50,78,122,78,162,42,0,162,111,187,0, + 0,0,0,0,162,0,0,162,0,0,0,0,122,122,0,99, + 109,36,114,248,248,248,248,120,244,244,120,120,36,120,244,120, + 36,120,36,120,36,120,36,120,36,36,36,36,217,36,36,217, + 36,36,36,36,36,105,36,210,217,105,217,36,105,105,105,105, + 105,105,105,105,105,36,105,217,105,105,105,105,105,210,105,105, + 240,240,247,108,240,240,240,240,240,108,240,240,240,240,240,108, + 108,240,240,240,240,240,108,108,240,108,108,108,108,240,66,108, + 108,83,108,108,108,181,250,6,62,39,83,83,108,108,108,108, + 108,108,108,108,159,108,159,240,108,108,240,108,108,108,159,108, + 159,240,119,119,119,58,58,240,119,240,119,119,159,119,119,58, + 119,58,240,119,240,119,58,119,240,240,119,240,119,58,58,240, + 119,119,119,119,119,240,119,58,119,58,58,240,119,240,119,240, + 119,119,58,119,240,119,119,119,58,119,119,240,119,240,119,58, + 240,119,119,58,119,119,119,119,240,119,240,119,119,119,240,119, + 58,58,240,119,240,119,119,58,58,240,119,240,159,119,119,58, + 119,119,119,119,119,119,119,119,119,119,119,119,119,159,119,119, + 119,119,159,119,119,236,119,119,119,119,119,83,15,162,253,253, + 253,245,142,122,223,35,166,163,50,50,212,162,122,42,42,50, + 227,162,183,163,163,183,111,162,162,0,24,178,46,162,166,94, + 162,94,50,95,42,94,221,183,164,50,224,44,20,29,122,122, + 122,122,0,221,50,224,111,224,50,183,50,50,122,166,35,171, + 162,0,162,126,219,183,183,183,187,0,0,95,20,183,0,0, + 163,163,209,61,0,0,163,0,122,166,17,183,0,0,0,183, + 22,212,22,163,171,162,162,183,0,224,227,64,46,187,59,59, + 187,0,99,44,94,164,14,104,183,187,0,0,0,0,132,224, + 42,26,219,26,12,59,59,163,212,187,225,94,94,50,50,212, + 94,78,163,111,162,200,35,111,122,20,20,178,34,44,200,111, + 59,126,122,42,26,163,37,97,241,26,183,221,94,163,163,78, + 200,75,212,42,111,0,122,42,183,227,95,126,183,59,64,64, + 47,111,192,171,163,0,42,221,221,0,0,187,142,29,20,229, + 44,61,59,109,142,95,225,171,245,20,26,162,183,187,187,111, + 47,224,42,42,42,94,162,162,50,162,50,0,187,99,111,162, + 162,162,0,0,0,0,0,162,0,164,214,64,192,225,158,183, + 0,0,0,126,187,111,183,0,162,183,163,163,187,162,50,37, + 162,162,0,166,26,187,187,109,163,163,212,0,122,0,42,61, + 0,254,109,0,183,162,122,122,0,162,78,122,0,42,187,122, + 0,78,42,122,162,162,122,122,122,0,0,0,122,0,0,99, + 8,120,114,244,120,244,120,248,120,120,120,244,36,120,120,120, + 36,120,36,120,36,36,36,36,36,36,36,36,36,36,36,36, + 36,36,217,36,36,105,36,105,105,105,105,105,105,217,36,217, + 105,217,210,105,105,105,105,36,105,105,105,105,105,105,105,105, + 240,108,240,247,240,240,240,240,247,240,240,108,240,240,240,184, + 240,240,108,240,240,240,240,240,108,240,240,240,240,108,240,108, + 108,108,108,108,159,108,43,6,62,71,161,240,108,108,108,108, + 159,108,159,240,108,240,108,159,58,159,159,240,159,240,108,119, + 108,119,240,159,240,240,119,119,159,58,119,240,119,240,240,58, + 119,240,119,58,58,240,119,159,119,119,240,58,119,240,119,119, + 240,58,58,119,240,119,240,119,240,119,119,119,119,119,119,119, + 119,240,119,159,119,240,58,240,119,240,119,119,119,119,240,240, + 58,119,240,119,240,240,119,240,119,240,58,58,119,159,58,119, + 240,58,119,240,58,119,159,58,119,236,119,119,159,119,159,58, + 58,58,159,236,159,119,159,119,159,119,159,119,159,119,119,119, + 159,119,119,119,119,119,119,119,119,119,119,83,15,78,47,44, + 34,253,171,0,126,59,122,212,50,37,224,50,183,50,94,239, + 203,22,163,183,183,163,215,162,162,163,75,163,126,221,162,163, + 50,221,162,163,94,227,126,162,162,163,163,64,29,34,183,0, + 122,122,42,122,0,187,166,224,59,224,187,56,122,187,183,111, + 122,0,122,224,221,183,78,122,187,0,0,0,0,162,0,0, + 50,75,50,183,0,0,94,162,122,0,0,0,0,0,0,126, + 164,22,22,75,229,42,122,122,0,162,0,44,29,187,59,224, + 0,64,99,99,241,241,97,122,111,166,111,122,0,0,187,227, + 0,26,42,42,42,243,227,78,183,50,163,64,183,183,221,162, + 162,40,126,40,64,64,183,183,183,111,59,95,35,34,111,187, + 166,219,42,122,26,183,241,200,50,162,203,239,22,37,22,78, + 209,50,0,64,166,0,122,42,17,42,42,26,0,29,225,35, + 152,47,227,0,0,0,0,122,122,42,35,253,171,178,42,200, + 111,214,59,235,24,163,64,0,40,111,95,0,78,162,0,0, + 162,0,122,0,0,187,78,42,50,50,221,0,56,111,187,162, + 162,78,0,0,0,0,78,162,0,37,64,64,192,225,171,187, + 0,162,0,0,0,0,0,0,0,0,126,241,111,50,162,40, + 162,162,42,224,97,212,50,162,183,111,94,0,42,162,162,163, + 162,182,182,187,50,183,42,162,162,162,183,50,162,162,162,0, + 0,122,122,122,162,0,42,0,122,122,122,0,122,0,0,145, + 17,36,114,248,244,248,120,244,120,120,120,120,120,36,120,36, + 244,120,36,120,36,120,36,25,36,36,36,36,217,36,36,36, + 217,36,36,36,105,36,105,105,105,105,105,105,217,105,105,105, + 105,105,105,105,217,217,105,105,217,105,210,210,217,217,217,105, + 240,240,240,108,240,240,247,184,240,240,240,108,240,240,240,240, + 240,240,240,240,108,108,108,240,66,108,108,240,240,108,240,108, + 108,108,108,108,108,181,43,6,62,74,247,108,108,240,108,108, + 240,108,108,159,240,159,108,108,108,159,240,119,240,240,159,58, + 240,159,119,240,119,159,119,240,119,58,58,159,240,119,119,240, + 119,240,119,58,58,159,240,58,240,58,58,240,119,240,119,58, + 58,58,58,58,240,119,240,119,240,159,58,240,58,240,58,58, + 58,119,119,240,119,119,58,119,119,240,119,58,58,58,119,119, + 58,58,58,58,119,119,119,119,58,119,240,119,240,119,58,58, + 119,58,58,119,159,119,58,58,184,184,236,58,58,58,119,58, + 58,58,159,236,236,236,119,236,159,236,119,119,119,119,159,119, + 159,236,119,119,119,236,119,119,119,119,119,83,229,97,135,229, + 229,135,133,162,163,163,183,162,163,200,94,162,94,187,162,94, + 239,94,163,163,183,183,162,0,163,84,163,42,209,162,94,126, + 163,163,50,239,126,212,163,126,94,162,183,44,29,44,35,122, + 0,0,122,122,122,0,162,95,221,224,183,0,126,126,221,78, + 26,166,215,42,0,162,0,0,183,183,219,0,42,0,122,224, + 64,22,22,187,111,0,162,163,0,0,162,50,162,162,183,95, + 50,221,162,183,29,44,224,75,183,29,35,44,223,44,29,183, + 99,95,212,59,47,183,0,0,187,166,99,44,35,50,163,171, + 171,182,97,162,75,183,219,8,243,59,22,163,59,50,212,203, + 163,163,163,203,212,162,78,59,47,187,227,215,0,94,162,122, + 187,0,122,122,17,50,22,61,22,111,164,241,14,221,50,50, + 163,162,50,64,183,0,122,42,26,17,12,42,0,0,47,59, + 95,64,42,219,26,26,26,26,26,226,84,59,141,94,0,221, + 37,183,75,111,224,183,99,64,99,183,162,78,42,26,26,42, + 42,122,42,0,162,162,162,78,122,42,122,0,0,50,162,78, + 162,162,111,75,187,163,50,78,162,164,64,99,34,44,225,183, + 0,0,0,0,0,0,0,0,0,50,200,212,227,182,97,187, + 42,183,109,221,78,111,99,224,227,162,0,162,0,0,162,162, + 221,235,95,0,162,50,221,219,162,162,42,22,187,122,122,162, + 0,219,122,0,122,0,122,122,0,122,42,0,0,0,219,214, + 26,36,114,244,120,244,248,120,248,120,120,120,120,36,120,36, + 36,36,36,120,36,36,36,36,36,217,36,36,36,217,217,36, + 36,36,217,36,105,105,217,105,105,210,105,105,36,105,105,217, + 105,105,210,63,105,105,217,105,105,36,36,105,105,36,105,105, + 108,108,240,247,240,240,240,240,240,108,108,240,240,240,247,240, + 240,240,240,108,240,240,240,240,240,240,240,240,240,240,108,108, + 240,240,240,108,159,108,87,6,167,248,161,108,108,108,159,159, + 108,240,240,108,108,108,159,240,159,108,240,108,159,240,108,159, + 240,119,240,58,58,159,58,58,159,159,240,119,58,119,159,58, + 58,58,159,159,119,240,58,58,58,119,159,58,58,58,184,58, + 58,58,58,119,58,119,119,119,119,119,159,119,159,58,58,58, + 58,119,240,119,240,58,119,240,240,58,240,58,184,58,58,184, + 58,58,58,58,58,240,159,240,119,240,58,119,240,159,58,58, + 240,58,119,240,119,240,58,236,58,58,184,58,236,236,236,184, + 236,236,236,159,119,119,236,119,236,119,119,119,119,159,119,119, + 119,119,159,119,89,119,119,119,119,119,119,83,133,109,135,171, + 135,229,38,229,183,135,94,0,203,37,50,162,50,50,94,94, + 94,94,183,75,37,42,221,122,56,24,241,50,200,162,94,46, + 50,24,221,183,42,50,163,78,254,162,78,64,29,35,44,47, + 0,122,122,0,0,227,20,34,122,212,183,42,254,221,162,183, + 162,183,183,42,0,0,0,0,122,0,0,0,0,111,59,225, + 64,50,163,162,64,166,224,162,183,0,162,0,0,162,97,42, + 241,162,0,0,111,20,47,47,126,20,253,44,34,34,64,183, + 214,212,111,227,122,0,0,0,95,50,245,155,152,162,94,183, + 44,203,37,183,34,162,42,17,219,94,40,212,241,212,212,162, + 221,0,44,241,50,163,212,122,166,64,99,111,162,95,64,239, + 111,0,99,187,99,35,14,22,22,219,99,95,50,0,163,183, + 37,212,212,224,122,0,122,42,42,219,122,215,163,59,78,221, + 0,0,111,212,187,12,12,26,111,92,203,0,0,183,0,42, + 164,162,95,35,227,212,64,171,0,42,26,26,26,26,0,42, + 42,0,0,0,0,0,0,0,0,122,0,122,221,163,163,50, + 50,50,163,163,212,95,162,0,122,162,182,224,182,224,99,42, + 0,122,122,122,122,162,78,0,0,94,0,50,164,37,187,183, + 163,183,164,0,162,221,126,235,187,0,122,0,0,122,0,0, + 78,182,109,227,0,221,162,0,162,162,183,94,0,0,0,0, + 0,187,42,0,162,0,0,122,0,42,122,0,0,0,182,214, + 150,63,114,248,244,120,120,244,120,120,120,120,120,120,120,120, + 244,36,36,120,36,120,36,217,36,36,105,36,217,36,36,36, + 105,105,36,105,36,36,105,105,210,105,105,217,105,36,105,105, + 105,105,105,105,105,105,105,105,36,105,105,36,36,105,217,105, + 240,247,240,66,240,240,247,240,240,240,247,240,240,240,240,240, + 240,240,240,240,240,240,240,240,240,240,108,240,240,240,240,66, + 108,108,108,108,240,181,87,60,123,25,161,240,108,108,108,240, + 240,159,240,159,108,108,240,108,240,240,240,108,240,240,108,159, + 240,119,240,240,240,58,58,240,119,58,240,119,240,240,119,58, + 58,240,240,240,119,58,240,159,184,240,119,184,58,58,58,240, + 58,58,58,58,240,58,58,58,240,119,58,58,58,58,58,58, + 240,119,119,119,159,119,58,58,119,58,240,119,58,184,58,184, + 184,58,236,58,236,240,119,58,58,240,119,58,119,119,58,236, + 119,58,236,58,236,236,184,58,58,58,153,184,58,58,236,184, + 236,236,236,236,143,119,236,119,159,236,159,159,236,143,159,159, + 119,119,143,159,119,236,143,119,119,159,119,108,151,126,20,135, + 20,171,229,38,126,223,59,212,241,59,50,183,166,183,162,162, + 162,163,162,162,94,183,0,0,162,42,22,75,162,122,0,163, + 163,50,162,221,162,212,183,0,95,166,42,224,34,34,44,171, + 42,0,0,162,44,171,133,59,111,183,40,122,122,0,59,78, + 50,162,0,122,42,183,219,183,0,0,0,122,64,99,166,59, + 95,0,162,50,99,78,64,111,94,50,42,162,163,163,75,0, + 61,241,42,162,166,245,187,95,221,44,34,24,34,34,221,99, + 239,241,166,0,166,42,227,44,50,50,35,171,95,0,221,0, + 0,221,162,35,15,152,162,0,0,122,122,224,224,26,50,50, + 162,162,111,59,111,183,75,50,162,183,254,59,187,162,109,59, + 42,227,95,166,99,64,64,59,200,150,59,166,99,163,50,50, + 241,162,0,254,122,122,0,122,42,0,162,24,24,35,187,111, + 0,42,224,224,50,50,183,126,22,22,14,164,35,64,162,50, + 163,162,221,187,44,163,214,171,122,42,26,26,183,26,42,0, + 42,42,26,26,42,0,162,162,162,122,0,26,122,50,50,50, + 162,162,212,50,94,162,0,122,162,0,122,166,187,166,111,162, + 162,162,162,0,162,163,162,162,221,122,78,22,50,0,0,0, + 37,219,226,37,162,111,162,162,122,122,122,122,122,122,122,0, + 0,162,109,214,122,122,0,12,187,162,162,50,122,78,187,162, + 0,78,78,122,0,0,42,162,162,42,122,0,0,0,64,214, + 187,217,114,248,120,248,120,120,120,120,120,120,120,120,36,36, + 36,36,36,36,36,36,120,36,36,36,217,36,105,105,105,36, + 36,105,217,105,105,217,105,36,105,105,105,105,217,105,36,105, + 217,105,105,105,36,217,217,105,217,105,105,63,105,105,105,105, + 240,240,240,240,240,240,240,247,240,240,240,240,240,240,240,240, + 240,240,240,240,240,240,240,240,240,240,240,108,108,240,240,108, + 108,108,108,108,240,108,87,116,123,25,161,108,108,240,108,108, + 108,108,108,108,108,108,108,108,240,108,108,108,108,240,240,108, + 159,159,58,58,240,159,240,58,240,159,58,58,58,58,159,58, + 58,119,58,58,159,240,58,119,159,58,240,58,240,58,184,58, + 58,58,58,119,58,159,184,58,58,184,58,58,58,159,159,58, + 58,58,240,58,58,240,58,58,58,119,58,58,58,58,58,58, + 236,184,184,236,58,58,58,58,236,58,184,236,58,58,58,58, + 153,236,184,184,184,184,236,153,236,236,58,58,153,236,58,58, + 159,236,159,159,119,159,119,143,236,159,236,159,119,119,119,236, + 159,159,119,119,236,119,119,119,119,119,119,83,151,91,171,135, + 229,135,135,38,47,35,135,203,59,183,122,0,40,50,162,0, + 166,166,59,50,0,50,0,122,0,163,241,22,37,0,122,97, + 163,163,26,221,162,162,0,183,42,126,50,111,59,44,44,135, + 46,0,64,229,151,186,186,162,219,162,64,44,239,44,133,20, + 162,0,0,162,162,0,0,122,0,0,0,126,44,59,95,166, + 254,0,122,50,95,42,59,166,183,164,111,42,241,141,254,163, + 56,241,209,0,162,75,0,42,122,122,59,29,34,200,0,64, + 203,75,183,122,122,64,133,20,47,37,50,47,183,78,187,122, + 122,215,61,15,245,34,0,0,221,42,26,187,64,183,215,111, + 221,94,162,64,40,162,35,212,94,59,221,0,50,50,162,221, + 0,64,56,187,126,59,254,182,224,254,95,162,214,34,162,22, + 24,50,0,122,122,0,122,0,0,122,75,59,59,35,75,94, + 122,166,59,59,224,50,50,214,29,59,50,22,75,59,50,50, + 50,0,200,75,59,239,225,152,122,42,122,0,0,122,122,0, + 122,122,42,26,122,0,0,162,162,122,0,26,26,162,37,50, + 50,50,166,227,227,42,122,0,122,0,0,122,162,78,162,0, + 0,122,162,0,239,111,162,122,162,0,50,122,122,162,162,162, + 94,111,212,46,221,12,166,42,26,42,122,122,0,122,0,0, + 0,0,122,254,162,0,182,99,183,126,50,50,42,122,50,183, + 0,0,0,0,187,0,94,0,42,162,42,0,0,0,235,64, + 12,105,114,244,120,244,120,120,120,25,36,36,36,36,244,36, + 120,36,36,36,36,36,105,36,105,105,36,105,36,36,105,105, + 105,105,105,36,217,105,105,105,210,210,210,105,210,36,105,105, + 105,105,217,36,105,36,105,36,36,105,210,105,105,105,105,210, + 240,240,66,240,240,134,240,240,240,240,240,240,240,240,240,240, + 240,240,240,108,240,108,240,108,108,240,66,240,108,108,240,108, + 240,108,240,108,108,108,87,116,123,25,247,83,108,240,240,108, + 108,108,108,159,108,108,159,108,159,108,240,240,108,240,240,108, + 108,159,240,159,240,58,240,58,240,159,240,58,184,58,240,159, + 240,58,184,58,58,58,240,240,58,58,240,58,184,58,184,58, + 58,58,184,236,58,58,58,58,58,58,58,58,58,236,153,236, + 153,236,159,58,58,58,58,58,184,236,58,58,236,58,58,184, + 236,184,159,184,153,58,58,159,236,58,184,184,184,236,184,58, + 184,58,236,236,58,184,58,184,184,236,236,58,184,153,236,236, + 184,236,119,159,236,159,119,159,119,119,236,159,159,159,159,236, + 236,159,159,159,159,159,159,159,159,108,119,83,151,0,34,135, + 171,229,229,245,29,142,126,50,37,168,14,42,212,212,221,183, + 227,221,211,75,78,212,187,0,122,37,24,22,91,95,241,75, + 22,75,37,224,0,0,162,111,163,50,37,163,37,61,224,29, + 35,29,133,229,152,29,95,0,183,183,35,15,15,229,245,152, + 162,0,162,50,50,162,122,122,0,0,0,224,64,187,166,78, + 59,0,0,37,95,26,187,59,95,37,75,219,22,162,183,209, + 78,178,154,42,0,0,162,26,0,122,122,59,29,26,141,35, + 40,219,141,26,95,47,29,50,35,59,162,37,150,95,12,142, + 187,254,29,155,35,50,50,75,47,224,150,221,254,40,40,42, + 59,183,94,34,35,95,59,59,224,46,59,64,122,219,239,183, + 162,221,59,183,183,64,47,59,99,59,111,183,99,214,59,75, + 61,162,162,162,0,122,26,42,122,187,35,187,187,50,239,122, + 42,224,59,99,99,94,111,192,29,171,44,64,75,200,44,142, + 34,221,47,200,75,163,44,171,183,122,26,42,0,122,0,0, + 122,0,122,183,0,75,163,122,0,122,0,26,26,122,50,163, + 50,50,42,162,94,183,50,0,0,0,0,219,99,99,111,122, + 122,42,0,94,227,122,0,162,162,122,0,0,94,42,109,221, + 162,111,14,37,22,0,0,122,42,122,0,122,122,122,0,0, + 122,42,0,0,183,162,187,122,219,99,211,224,150,26,122,0, + 0,0,219,150,182,183,162,0,122,0,42,0,122,0,235,99, + 26,105,144,244,25,120,120,120,244,120,120,25,120,36,36,36, + 36,120,36,36,36,36,36,36,36,105,36,105,105,36,217,36, + 36,36,105,36,36,105,105,36,105,105,105,36,105,105,217,105, + 217,105,105,217,105,105,63,105,105,105,105,210,105,210,105,105, + 240,240,240,240,247,240,240,240,240,240,240,240,240,240,240,240, + 240,240,240,240,108,240,108,240,240,108,240,66,240,240,108,240, + 108,108,108,108,108,108,87,116,123,155,252,108,108,108,108,108, + 108,240,240,108,240,240,108,108,108,159,240,108,240,159,240,159, + 58,240,108,159,240,240,58,159,240,159,58,58,240,184,58,159, + 58,240,58,240,184,159,58,184,58,159,58,184,58,184,58,184, + 153,236,236,184,58,58,184,236,58,58,58,236,153,159,58,159, + 58,159,58,58,236,58,58,58,58,184,58,184,184,153,153,159, + 184,236,153,236,58,153,58,58,184,184,58,58,58,159,236,58, + 58,236,184,159,184,58,58,236,236,58,184,58,236,58,184,184, + 236,159,236,236,159,236,159,159,236,159,159,159,119,159,119,159, + 159,159,236,159,236,236,119,119,119,119,119,108,133,0,163,44, + 20,135,229,129,29,24,37,163,221,104,206,164,163,40,0,122, + 94,183,219,212,94,203,95,122,47,187,163,162,56,254,34,61, + 61,22,37,241,187,122,162,92,200,162,162,50,50,164,111,59, + 0,64,186,29,229,94,26,56,0,0,225,135,152,29,15,229, + 162,0,122,122,162,162,162,0,0,0,0,224,59,95,183,109, + 44,162,42,22,64,26,166,29,64,50,104,141,209,37,37,46, + 91,44,46,0,0,122,0,42,122,122,122,183,200,122,64,59, + 183,0,219,166,37,37,37,50,171,15,59,162,226,203,95,177, + 75,150,34,44,0,163,203,200,59,59,254,26,17,59,200,122, + 47,64,0,35,34,34,163,59,200,75,34,57,20,95,78,42, + 0,162,166,224,0,99,29,192,64,44,59,162,183,42,64,162, + 0,50,162,78,122,122,122,0,0,75,75,122,42,42,219,42, + 26,99,35,59,224,183,75,34,44,34,192,29,44,126,224,34, + 229,183,162,162,64,239,235,192,224,26,26,122,42,192,122,0, + 0,132,20,29,187,171,171,42,0,42,122,0,26,26,162,50, + 50,42,209,50,0,42,59,50,162,78,78,0,162,42,122,0, + 162,162,162,126,187,0,0,162,162,0,42,122,162,59,24,122, + 94,183,22,164,235,0,0,0,42,42,122,0,0,122,0,122, + 26,26,0,0,50,162,0,26,219,254,254,182,150,26,182,42, + 0,0,187,162,162,162,26,0,0,0,122,122,0,78,122,162, + 0,221,64,47,163,105,114,244,120,120,36,120,36,36,36,120, + 36,36,36,36,36,36,217,36,105,36,105,105,36,105,105,105, + 105,105,105,105,210,36,105,105,105,105,217,105,217,217,36,210, + 105,36,105,105,105,105,105,105,105,105,105,105,105,105,105,210, + 240,240,240,134,240,134,240,240,247,240,240,240,240,240,240,240, + 247,240,240,240,240,240,240,247,240,240,240,240,240,240,66,108, + 240,108,108,108,108,108,18,116,173,245,161,108,108,108,240,159, + 108,108,159,108,108,108,159,108,108,108,159,240,108,240,240,159, + 240,58,240,159,159,159,240,58,240,58,184,58,159,58,58,58, + 58,159,58,58,58,58,58,184,58,184,58,184,240,184,58,184, + 159,184,58,58,236,58,159,58,153,153,159,58,153,159,153,159, + 153,153,58,159,236,153,159,236,184,153,236,184,58,58,236,153, + 159,159,184,159,58,153,236,236,236,159,236,153,153,159,153,153, + 159,184,236,236,58,58,159,236,153,236,236,184,236,236,58,159, + 236,58,159,236,119,159,236,159,236,119,119,159,236,159,119,119, + 236,119,159,119,159,159,119,159,108,119,108,108,133,50,223,135, + 253,29,253,135,34,203,142,46,22,42,0,221,50,42,22,10, + 22,42,162,50,42,142,0,34,44,47,95,95,47,187,64,227, + 163,109,224,22,35,164,0,212,50,0,0,162,0,50,50,166, + 0,122,229,171,15,35,122,29,183,162,200,245,135,171,171,229, + 26,42,0,50,209,241,37,26,12,12,12,214,47,224,0,64, + 64,0,162,35,192,224,224,34,34,94,239,219,111,200,42,183, + 203,241,162,122,122,122,0,42,0,122,78,122,0,78,29,187, + 0,162,224,47,162,37,22,22,46,20,152,24,164,241,46,22, + 22,35,241,50,59,99,75,50,12,111,50,219,219,12,75,166, + 254,192,97,0,200,35,75,163,75,44,171,171,229,152,29,64, + 183,162,162,187,59,219,166,95,64,47,254,162,0,162,111,183, + 162,50,50,0,97,75,162,0,163,209,163,26,26,64,192,187, + 187,95,99,254,163,142,35,99,44,44,34,34,192,44,0,122, + 187,162,122,162,20,75,99,192,64,122,42,122,0,152,183,42, + 122,29,171,75,95,50,50,0,122,26,42,0,26,12,78,50, + 183,183,35,42,162,162,183,122,162,162,162,150,183,26,26,0, + 162,162,162,64,152,122,0,162,162,0,0,0,187,14,14,219, + 162,183,122,14,109,0,42,0,42,42,122,122,122,122,0,42, + 26,42,0,42,22,163,42,122,12,187,166,109,111,56,99,243, + 162,0,221,26,187,162,219,221,42,0,17,122,0,0,26,0, + 0,132,214,64,211,105,144,120,120,120,120,36,120,36,120,36, + 36,36,36,217,36,36,217,36,105,36,217,105,217,105,105,36, + 217,210,210,36,105,36,105,217,105,105,36,36,36,105,105,105, + 217,36,36,217,217,36,210,210,105,210,105,210,105,105,105,105, + 240,134,247,240,134,247,240,240,240,240,240,134,240,240,134,240, + 240,240,240,247,240,240,240,240,240,108,240,108,108,108,240,108, + 108,108,240,108,181,83,18,116,137,54,161,108,108,240,240,108, + 240,159,108,159,159,159,108,159,159,240,108,240,159,240,119,240, + 240,119,240,240,240,240,58,240,58,184,159,240,240,184,240,184, + 184,58,184,184,184,184,184,184,184,184,159,240,236,159,184,58, + 58,58,58,159,184,58,58,159,58,58,58,184,58,236,58,236, + 58,58,153,153,159,58,153,159,58,58,159,236,159,184,159,184, + 159,236,153,236,153,236,159,159,159,236,159,58,58,184,159,58, + 58,184,184,153,159,153,236,184,58,184,159,58,58,58,236,236, + 58,236,236,119,143,236,119,236,119,134,236,236,119,236,159,143, + 159,159,236,159,159,119,159,119,159,119,108,83,133,24,135,151, + 229,229,229,151,38,162,135,129,151,135,75,162,50,50,14,22, + 50,37,162,37,203,132,59,34,59,64,34,64,59,59,42,122, + 22,241,37,61,47,221,50,162,122,0,221,162,162,42,46,187, + 122,122,34,229,135,171,15,151,221,163,50,171,229,171,29,15, + 42,219,221,203,91,75,94,219,243,26,162,203,141,99,219,254, + 34,0,0,126,99,47,166,182,224,183,122,26,183,163,94,183, + 109,24,59,0,0,42,0,26,122,122,122,0,0,183,64,0, + 0,162,152,151,171,34,0,95,59,50,34,142,37,22,73,168, + 22,37,92,48,64,44,0,183,241,241,212,221,17,26,50,183, + 166,34,171,162,200,97,59,122,47,245,29,15,171,15,171,229, + 171,42,221,162,221,99,166,0,0,0,0,0,162,187,94,59, + 162,0,162,0,75,35,163,0,187,35,26,26,26,44,47,224, + 59,183,183,78,99,135,47,47,99,225,44,239,64,192,162,0, + 162,0,0,56,34,97,141,59,59,0,122,254,246,64,122,42, + 26,29,44,183,162,162,126,0,42,26,122,0,42,26,78,162, + 122,37,162,212,212,0,50,187,22,162,0,166,224,0,0,0, + 0,42,0,150,245,64,0,162,162,0,0,224,239,164,164,150, + 162,183,182,22,94,0,122,0,42,42,122,0,122,42,0,122, + 26,42,42,50,163,42,141,219,126,219,111,111,254,183,132,99, + 150,0,0,0,0,42,0,221,162,122,111,122,162,162,219,0, + 0,99,214,64,111,105,144,120,120,120,120,25,120,120,36,120, + 36,25,36,36,25,36,36,36,36,105,36,36,105,36,217,217, + 105,36,36,105,217,217,217,105,36,36,105,105,105,105,105,217, + 105,105,105,105,105,210,105,105,210,105,105,105,105,105,105,63, + 240,240,240,240,240,134,240,240,240,240,247,134,240,247,134,240, + 240,240,134,240,240,240,240,240,240,240,240,240,240,108,240,108, + 240,108,240,108,108,108,18,116,137,96,161,108,108,108,159,240, + 240,240,108,108,108,240,108,108,159,159,240,159,240,240,240,159, + 240,159,240,159,119,240,58,240,240,58,58,58,58,58,159,58, + 184,58,184,240,240,58,58,240,58,58,58,159,58,159,58,159, + 58,184,58,184,159,153,236,159,58,153,236,159,159,153,159,159, + 159,58,58,236,153,58,58,236,159,153,159,236,153,184,236,153, + 184,58,159,58,159,153,153,184,184,153,159,236,236,58,159,153, + 58,159,159,236,58,159,58,236,58,58,58,153,236,153,236,236, + 153,236,159,119,159,236,159,236,119,159,119,159,159,236,119,119, + 236,119,159,236,159,119,119,159,119,159,119,108,173,226,20,229, + 229,135,55,229,197,47,229,44,111,254,239,162,50,163,0,0, + 0,163,50,46,50,221,64,59,162,35,44,200,183,47,224,75, + 22,59,22,75,215,0,162,50,50,0,122,94,162,162,59,122, + 122,0,26,34,15,171,229,245,162,47,162,224,171,171,135,245, + 122,111,183,75,14,200,37,26,219,221,22,14,22,212,141,219, + 34,162,0,224,99,34,111,44,44,111,42,26,46,50,37,22, + 47,235,44,166,0,0,0,42,0,122,122,0,0,227,59,0, + 0,34,229,171,15,111,0,187,99,187,50,37,37,209,226,48, + 177,61,92,44,17,59,0,0,212,203,0,50,75,150,183,163, + 219,44,192,44,221,162,0,59,245,192,44,171,20,171,29,192, + 245,183,42,78,94,162,162,187,163,187,122,0,0,94,42,111, + 224,0,162,78,162,50,162,162,22,95,42,42,64,44,163,163, + 158,162,42,14,241,187,122,223,200,44,227,0,44,171,78,0, + 214,0,183,64,221,0,162,0,42,78,219,111,162,42,162,26, + 122,78,50,50,241,162,162,0,42,26,0,0,0,42,26,162, + 162,241,122,212,26,0,162,50,97,162,0,183,182,99,132,162, + 162,162,162,0,182,152,187,162,0,122,99,234,111,164,241,141, + 78,162,214,239,0,122,0,0,122,42,122,0,0,42,0,122, + 26,26,42,0,122,219,254,150,224,182,254,182,182,42,122,111, + 42,0,42,225,215,162,221,42,0,122,122,122,162,122,42,0, + 122,158,235,64,109,210,144,120,120,120,120,36,120,36,36,36, + 36,25,36,36,36,36,36,217,36,105,105,36,105,36,105,105, + 105,105,36,36,36,36,105,105,217,36,105,105,217,36,36,36, + 36,36,105,105,105,105,105,105,105,210,105,105,105,105,105,105, + 240,134,240,240,240,247,134,247,240,153,240,247,134,240,240,240, + 240,240,240,240,240,184,240,240,240,240,240,240,240,240,240,240, + 108,240,240,240,108,181,173,116,31,234,252,240,159,240,108,240, + 240,159,159,159,240,159,159,58,108,119,240,240,58,159,58,240, + 58,240,58,240,240,58,240,58,58,184,184,184,184,184,58,240, + 58,159,58,58,58,159,240,58,184,184,58,58,58,58,184,236, + 159,58,58,58,58,58,184,236,153,58,184,153,159,58,153,159, + 236,153,153,159,58,159,153,159,236,58,184,184,159,236,159,58, + 159,159,153,153,153,58,58,153,159,159,236,153,159,153,236,159, + 236,58,58,184,159,184,153,159,159,236,236,58,159,58,159,153, + 119,159,236,159,236,159,236,159,236,119,143,119,143,119,159,143, + 236,159,236,119,236,159,119,159,119,119,108,83,133,92,171,135, + 103,229,151,151,229,35,26,26,219,99,163,221,50,212,75,42, + 162,50,26,163,212,122,35,95,227,29,34,47,0,17,163,59, + 241,91,50,200,122,162,0,241,164,162,0,0,94,37,0,95, + 0,122,224,163,59,171,15,151,122,111,163,37,34,178,29,171, + 0,150,26,50,24,22,37,12,162,14,22,22,50,132,59,56, + 225,162,162,59,224,34,111,34,111,99,0,241,35,0,42,241, + 95,64,59,64,109,0,122,219,42,42,42,122,122,26,47,0, + 26,64,59,59,111,162,0,187,254,212,22,22,50,241,50,50, + 73,22,37,203,219,99,0,0,0,162,0,37,164,150,187,64, + 162,44,64,34,59,162,42,20,171,35,59,29,171,29,29,34, + 245,239,221,78,221,126,126,163,0,94,0,0,95,94,162,64, + 64,183,0,59,224,94,162,50,44,42,26,122,99,192,34,44, + 224,50,20,22,14,187,44,253,29,224,42,122,59,171,162,50, + 225,0,225,152,183,162,50,50,0,42,26,135,29,215,122,26, + 42,0,26,22,209,209,75,162,26,26,42,0,0,26,26,122, + 42,97,132,122,150,219,0,91,37,0,0,187,183,99,99,99, + 187,162,50,26,162,64,126,0,0,150,171,192,59,164,132,99, + 187,78,64,141,122,122,0,0,42,122,122,0,122,122,0,122, + 42,26,122,122,26,42,111,78,187,122,254,187,122,0,0,94, + 221,0,214,25,99,0,0,0,111,0,42,122,183,162,42,0, + 99,192,99,64,111,105,71,120,120,120,120,120,36,120,25,25, + 36,36,36,36,217,36,105,36,105,36,105,105,105,105,105,217, + 36,36,105,36,105,105,36,105,36,105,217,105,105,105,105,105, + 105,105,217,105,105,36,105,105,105,105,105,105,210,105,105,63, + 240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,247, + 134,240,240,240,247,134,240,134,240,134,240,240,134,108,240,134, + 108,240,240,240,240,108,173,19,137,171,161,240,184,134,240,159, + 240,159,184,184,159,240,159,58,240,159,58,184,240,58,184,159, + 58,184,58,58,159,58,159,184,240,58,240,159,58,184,58,240, + 58,58,159,159,58,58,159,58,58,153,184,58,184,58,184,236, + 184,153,58,159,184,159,184,159,184,159,58,236,184,58,236,184, + 58,159,236,159,153,58,153,159,236,153,159,236,159,184,184,236, + 153,58,58,58,159,153,58,236,236,159,159,153,184,159,58,159, + 153,153,159,236,236,159,153,236,184,159,58,236,58,236,58,153, + 236,236,236,119,236,159,236,159,236,119,159,119,159,236,159,119, + 236,119,159,159,236,159,119,159,119,119,119,108,133,14,15,229, + 38,55,229,75,162,164,12,219,132,132,104,109,75,50,59,221, + 126,50,162,50,162,122,44,34,42,44,59,219,221,22,22,22, + 22,162,50,224,122,94,219,241,75,22,22,37,37,164,162,42, + 122,141,22,50,50,75,171,135,122,47,187,209,126,64,35,29, + 162,150,12,163,187,22,187,219,50,22,22,50,246,215,254,0, + 44,50,0,111,224,44,187,254,95,59,50,46,17,183,78,24, + 219,47,64,59,64,187,0,183,122,122,122,78,162,219,59,0, + 224,40,22,164,203,0,0,187,95,215,164,164,50,177,164,163, + 24,37,37,22,166,44,0,0,0,97,47,59,35,111,42,47, + 162,64,44,34,15,59,152,151,245,34,64,15,245,245,15,171, + 133,97,254,0,95,99,192,59,141,64,0,0,166,171,0,111, + 224,224,221,59,17,64,224,163,111,42,26,26,42,122,99,64, + 122,44,151,22,14,192,47,200,35,254,0,94,22,192,35,212, + 59,95,192,171,0,162,162,50,162,0,162,171,59,224,95,42, + 122,162,221,187,61,22,91,162,12,26,42,0,0,42,26,42, + 187,64,219,219,42,17,215,162,162,0,0,64,0,166,111,99, + 64,122,162,42,0,59,42,0,0,182,44,192,166,126,12,225, + 224,0,44,187,122,122,0,0,42,42,122,122,122,42,0,122, + 26,42,122,0,42,221,122,17,219,150,99,182,166,42,162,163, + 42,0,214,155,225,42,221,183,17,0,26,219,122,183,122,0, + 158,192,64,64,109,105,71,120,120,120,25,36,36,36,36,25, + 36,133,36,25,36,25,105,36,217,36,217,105,105,36,105,210, + 105,105,105,105,105,210,105,63,210,105,105,105,105,36,217,217, + 217,105,105,36,105,36,105,210,36,105,217,36,105,105,105,105, + 240,240,134,247,240,134,240,134,247,240,240,134,240,240,134,240, + 240,240,240,134,240,240,240,240,240,240,240,240,240,184,240,240, + 184,240,184,119,108,108,79,11,137,234,161,240,240,240,240,184, + 184,184,58,58,240,58,184,184,184,184,58,240,184,184,240,240, + 184,159,240,184,184,184,184,184,58,240,58,159,240,58,159,58, + 184,240,58,58,184,58,58,159,184,58,58,184,58,184,184,184, + 236,58,184,236,58,58,184,58,159,236,58,184,159,153,159,159, + 159,58,159,58,58,153,58,153,159,58,236,184,159,236,58,159, + 58,159,236,159,236,159,159,159,184,153,236,58,184,236,153,236, + 58,184,236,184,159,58,58,159,58,58,153,159,58,159,58,58, + 58,159,159,236,159,119,159,119,159,159,236,159,236,159,119,159, + 159,143,236,119,159,236,119,119,159,159,108,108,38,14,178,228, + 20,163,50,37,14,14,150,150,219,132,183,26,59,24,223,94, + 126,37,50,50,162,0,59,44,183,0,166,163,22,22,50,163, + 163,94,61,209,122,56,221,78,26,22,164,37,50,75,75,163, + 26,241,162,0,61,162,133,59,215,126,142,50,222,227,254,59, + 42,17,183,209,24,22,243,26,162,14,14,162,37,50,44,224, + 239,183,162,95,224,95,0,254,59,59,47,141,111,183,162,46, + 0,44,111,95,64,59,0,162,122,0,0,0,0,183,34,0, + 243,203,37,37,50,0,0,254,224,26,59,200,50,164,162,37, + 99,166,50,132,99,64,0,0,111,34,64,254,75,111,132,35, + 162,59,44,214,64,94,192,245,245,34,64,20,152,15,152,15, + 133,40,224,50,0,95,122,47,171,78,0,0,0,171,64,0, + 59,224,59,224,0,122,111,224,56,26,26,122,42,122,166,187, + 203,26,26,183,75,142,73,162,122,171,50,73,14,192,171,59, + 221,183,126,122,0,0,50,162,0,42,122,122,166,224,47,0, + 0,91,22,37,35,209,163,0,12,26,0,0,0,0,26,42, + 0,254,42,17,150,42,99,122,0,0,42,225,0,122,141,64, + 214,183,0,0,212,99,0,162,0,254,225,64,94,132,182,44, + 44,42,182,183,42,26,42,0,42,42,122,122,122,122,122,122, + 26,26,26,0,0,162,0,99,99,214,182,224,99,42,0,61, + 163,162,182,96,152,187,78,17,183,219,122,78,42,183,78,42, + 158,192,214,214,150,105,144,120,25,36,120,120,25,36,36,36, + 36,120,36,36,25,105,36,105,105,105,36,217,105,105,105,105, + 155,105,210,105,105,105,210,105,105,63,63,63,210,210,105,105, + 63,105,105,63,105,105,210,105,210,105,105,105,210,210,36,105, + 240,240,247,134,247,240,247,134,240,134,247,240,240,247,134,240, + 240,240,247,240,240,134,247,240,240,240,184,240,240,240,240,240, + 240,240,240,184,240,181,173,23,137,192,161,240,240,184,240,184, + 240,240,184,184,184,240,58,184,184,184,58,184,240,184,184,240, + 240,184,240,240,184,184,240,184,184,184,240,58,240,58,159,184, + 58,159,184,159,236,153,153,184,184,153,58,184,58,58,184,159, + 184,159,184,153,236,58,153,58,159,153,159,236,184,153,236,153, + 153,153,153,159,58,153,58,153,58,184,159,58,184,153,159,153, + 236,159,153,159,236,236,153,153,159,159,159,236,159,159,153,153, + 58,159,159,58,153,184,159,153,153,58,58,153,58,58,58,159, + 236,58,159,119,236,159,236,236,236,159,119,159,119,159,236,119, + 119,159,236,159,119,159,159,159,119,159,119,108,38,162,187,163, + 50,22,14,14,164,14,183,141,141,141,219,132,219,59,29,0, + 162,200,50,162,183,0,239,44,163,59,22,14,209,111,163,78, + 94,162,50,59,221,0,78,75,46,241,162,0,162,221,200,104, + 50,203,162,162,50,162,133,47,40,42,20,163,233,92,122,227, + 50,241,20,178,84,223,192,8,150,162,162,162,22,50,214,34, + 34,192,35,50,215,0,0,26,59,224,44,166,224,0,0,163, + 42,95,122,75,34,219,0,0,0,0,0,0,0,183,44,187, + 219,132,203,75,223,171,0,215,64,64,47,212,50,50,162,164, + 163,40,75,50,224,192,0,221,214,64,109,183,59,0,99,59, + 0,183,126,200,94,94,50,245,133,15,44,15,35,111,95,111, + 186,95,219,239,0,44,59,152,95,0,0,0,162,0,64,111, + 150,64,59,59,0,0,0,0,42,219,219,219,42,132,75,226, + 73,241,187,219,224,73,14,183,132,152,203,164,59,57,171,152, + 163,0,0,162,212,0,162,162,0,132,219,183,219,0,0,0, + 221,22,24,61,221,75,59,0,12,42,0,0,162,162,0,42, + 0,254,64,183,182,122,17,99,0,0,224,183,42,0,99,44, + 225,221,0,212,47,187,0,162,0,182,225,182,22,99,59,99, + 44,150,224,162,26,26,42,0,42,26,122,122,122,42,122,0, + 26,26,26,0,0,75,162,150,111,219,78,0,0,0,0,50, + 61,50,42,158,96,44,0,0,183,42,187,183,162,0,0,162, + 17,182,109,224,122,36,71,244,25,36,25,120,36,25,36,217, + 36,217,36,36,36,217,36,36,217,105,36,36,105,105,36,105, + 210,105,210,210,105,105,105,63,105,105,105,105,63,105,63,105, + 63,63,105,210,210,105,63,105,63,63,63,105,63,63,105,105, + 153,134,240,240,153,134,153,247,134,240,240,134,134,240,240,247, + 240,184,134,247,240,240,240,134,240,184,240,240,240,240,240,240, + 240,108,240,108,108,83,173,11,137,158,161,240,184,240,240,240, + 184,184,240,184,240,184,184,58,240,240,184,240,184,240,240,184, + 159,240,184,184,58,240,58,240,58,240,184,184,58,240,184,159, + 58,58,58,58,184,58,58,58,184,159,153,184,184,184,184,153, + 184,236,153,159,159,58,58,184,159,184,236,159,58,184,184,58, + 58,58,159,236,159,58,153,58,184,159,236,153,159,184,236,58, + 159,153,58,159,159,184,159,58,58,153,58,159,153,236,159,58, + 153,159,236,153,58,184,236,58,58,159,153,159,236,159,58,236, + 159,236,159,236,159,236,159,119,159,119,143,119,143,236,159,236, + 159,119,159,236,159,119,159,159,119,159,108,108,71,0,183,94, + 164,164,104,14,14,164,219,42,42,42,219,219,26,111,104,200, + 135,50,203,212,122,122,183,29,29,44,241,35,241,163,50,37, + 37,162,50,64,0,187,73,73,73,177,47,50,241,239,40,239, + 92,209,35,241,203,166,253,29,0,95,171,15,37,241,209,29, + 241,177,46,34,151,226,73,64,8,219,61,24,183,47,171,44, + 44,47,104,14,37,0,132,162,183,59,224,132,122,0,42,44, + 47,0,99,34,99,0,0,0,221,162,212,50,0,42,15,150, + 17,26,34,248,133,102,133,15,75,50,162,35,163,50,200,162, + 50,50,34,29,203,75,50,22,164,22,46,40,219,0,59,94, + 203,37,50,212,162,162,50,46,245,171,34,171,95,95,59,42, + 245,95,111,64,141,166,57,166,95,224,122,122,0,50,50,59, + 95,141,44,171,224,0,0,26,26,56,26,26,26,150,50,37, + 162,59,47,109,183,203,254,24,75,254,0,0,95,34,97,171, + 44,0,22,14,50,0,162,0,0,78,162,0,122,0,0,187, + 254,162,50,221,0,162,162,42,26,42,0,122,50,50,0,42, + 162,141,96,219,219,122,0,225,192,56,224,0,254,0,64,64, + 254,42,0,241,187,42,0,162,0,224,225,224,40,99,64,64, + 99,224,99,122,26,26,122,0,42,122,122,122,122,122,42,0, + 122,26,26,0,26,22,0,26,164,162,0,122,162,0,122,162, + 163,163,0,42,234,152,0,122,0,42,42,162,0,0,42,219, + 0,162,0,122,26,63,244,120,120,25,36,36,25,36,36,36, + 217,36,217,105,217,217,105,105,36,36,105,105,105,36,105,105, + 105,105,105,105,63,105,210,105,63,63,63,63,105,63,105,63, + 105,105,63,105,105,63,63,63,105,105,63,63,105,63,210,63, + 153,153,240,134,240,153,153,153,153,153,153,240,153,153,134,134, + 153,240,184,153,240,240,240,240,240,240,240,240,240,240,240,240, + 134,108,184,240,240,108,173,30,137,214,252,240,240,240,240,240, + 240,159,240,159,240,240,240,58,240,240,184,159,240,58,159,240, + 58,240,240,240,58,58,184,240,58,58,184,184,58,58,58,236, + 153,58,184,184,184,184,153,236,159,184,58,153,153,153,58,153, + 184,159,236,153,153,58,236,58,58,184,159,184,58,159,184,159, + 236,236,184,236,159,58,58,236,236,184,58,236,184,159,184,159, + 184,159,236,184,159,236,184,153,58,153,153,184,159,236,153,58, + 236,159,184,236,236,159,159,159,58,159,58,159,236,58,159,58, + 58,58,159,236,159,236,159,236,236,159,159,119,159,236,159,236, + 143,119,159,159,159,159,159,159,159,159,119,108,38,0,132,17, + 12,150,141,141,132,215,46,226,47,46,75,111,95,97,75,141, + 47,203,22,50,0,162,183,59,59,254,111,59,37,209,163,163, + 200,95,187,215,22,187,14,22,163,212,223,212,203,241,183,24, + 104,241,132,34,47,111,24,64,183,95,142,171,47,162,61,215, + 246,40,104,95,164,241,203,164,64,150,241,223,47,64,59,111, + 224,224,215,241,209,37,166,215,150,166,50,75,0,56,254,99, + 44,56,44,34,183,0,0,50,50,50,94,22,163,0,34,99, + 17,219,42,34,20,171,192,59,50,50,44,15,95,59,64,163, + 183,183,241,29,15,59,75,37,22,22,164,163,0,227,99,0, + 59,94,212,40,37,50,50,37,164,34,35,171,200,34,29,59, + 171,95,95,59,47,224,47,239,224,126,64,64,0,162,162,50, + 163,126,166,64,99,0,162,183,122,42,42,219,141,92,164,14, + 164,14,73,22,0,97,75,35,187,162,122,141,227,59,166,224, + 64,0,14,164,162,111,224,254,64,64,42,0,162,162,0,0, + 64,99,44,183,0,162,162,122,17,42,0,0,162,37,0,50, + 50,254,192,162,0,212,162,183,225,219,183,166,99,0,150,224, + 64,78,221,221,0,0,0,162,0,254,99,241,59,99,59,59, + 224,224,235,122,42,26,26,0,42,122,122,122,122,0,0,0, + 0,122,122,0,75,75,162,111,22,50,50,78,183,78,0,0, + 42,50,162,0,214,171,182,0,42,42,0,42,163,162,42,122, + 0,0,0,111,99,105,244,120,120,25,36,36,36,133,36,36, + 217,36,36,36,217,217,217,105,105,105,105,217,105,105,105,105, + 105,105,105,105,63,105,105,105,105,105,105,63,63,105,105,63, + 63,63,63,63,63,105,105,63,63,63,105,63,105,105,105,63, + 153,153,153,153,153,153,153,153,240,153,153,153,153,153,153,153, + 153,153,153,184,153,153,184,134,184,184,134,184,184,134,184,240, + 240,184,240,240,240,108,173,93,168,235,252,108,240,240,240,240, + 184,240,159,240,240,240,184,58,240,240,159,240,58,184,159,58, + 159,58,58,58,159,58,240,58,159,184,58,58,184,58,58,184, + 58,236,58,58,58,58,184,184,153,236,153,159,58,184,159,184, + 184,153,159,184,184,159,184,153,58,159,153,58,159,58,58,58, + 184,184,153,159,236,236,58,159,159,58,236,159,236,153,236,236, + 58,153,184,153,236,159,236,58,159,159,58,58,153,159,159,184, + 159,153,236,159,159,184,236,236,153,58,153,159,159,236,58,236, + 159,153,236,159,236,159,236,159,159,159,119,159,159,159,159,159, + 119,159,119,159,119,119,108,159,108,159,108,83,102,0,17,132, + 75,104,132,183,141,26,190,222,135,129,135,190,135,135,226,46, + 223,40,50,50,94,22,162,0,0,50,162,50,42,24,203,0, + 44,44,0,97,92,164,46,215,22,22,24,166,122,94,95,209, + 200,35,34,42,47,44,44,75,0,212,40,35,29,46,29,142, + 42,162,50,50,164,64,221,92,104,162,50,162,183,0,214,47, + 44,162,182,26,22,75,50,187,64,221,78,84,50,221,99,227, + 64,225,47,141,94,50,50,22,22,50,221,212,92,187,219,35, + 44,26,17,26,122,37,22,37,203,34,171,104,42,56,219,40, + 78,187,37,37,64,34,171,29,104,75,94,0,212,164,111,183, + 99,95,254,254,0,162,50,162,162,22,59,171,44,20,29,35, + 15,47,0,187,254,44,96,15,29,192,152,47,0,162,50,50, + 162,162,122,166,162,162,162,50,0,42,26,182,73,73,92,92, + 73,92,206,168,50,35,209,241,200,50,166,44,44,64,224,59, + 212,0,221,0,0,215,111,95,95,221,162,162,50,162,162,0, + 0,221,166,0,0,162,122,0,0,162,162,0,0,122,111,183, + 22,22,0,0,122,78,162,0,0,0,187,132,132,64,34,254, + 214,221,99,95,225,47,0,97,162,111,254,75,99,59,182,224, + 224,224,99,122,26,26,122,0,42,26,0,0,0,0,0,0, + 0,0,26,183,91,35,50,221,162,162,227,162,50,187,78,162, + 162,111,162,162,141,225,192,162,163,75,46,29,129,94,0,0, + 162,183,0,202,59,63,244,25,36,36,25,25,36,36,36,36, + 36,105,217,217,36,105,105,217,217,105,105,105,63,210,105,105, + 210,63,63,210,105,63,63,63,63,63,63,63,105,63,63,105, + 210,105,105,63,105,63,63,63,63,63,63,63,63,63,63,63, + 153,240,240,153,153,240,153,153,240,153,153,153,153,153,153,153, + 153,184,153,153,153,153,153,153,153,184,134,184,184,240,184,240, + 240,184,184,240,240,83,15,138,137,64,161,240,134,184,159,184, + 184,58,58,58,58,159,240,58,58,159,58,184,58,58,236,184, + 58,58,159,159,184,236,184,184,58,58,184,236,184,184,58,184, + 184,184,236,153,236,58,184,184,159,184,236,153,58,153,184,134, + 58,184,184,159,153,184,184,153,58,58,58,58,184,159,153,184, + 159,58,184,184,159,153,58,58,184,159,159,184,159,184,159,184, + 58,159,58,184,159,159,184,58,58,184,159,58,236,58,58,159, + 184,159,236,153,153,184,159,58,236,159,236,184,159,159,159,153, + 58,159,159,159,153,159,159,58,58,159,159,119,159,159,119,159, + 159,159,159,159,119,159,159,119,159,159,119,83,38,0,219,183, + 14,164,47,47,150,12,223,135,223,253,177,253,253,172,223,35, + 135,142,162,37,50,162,223,126,162,50,50,162,0,24,212,37, + 183,171,0,94,22,14,223,209,84,14,209,183,0,221,177,75, + 122,200,59,162,135,47,246,163,94,75,59,34,142,171,151,15, + 42,46,241,164,200,40,50,92,162,50,22,50,50,162,132,254, + 34,227,12,183,183,183,50,0,141,187,187,163,200,0,166,78, + 59,47,42,59,94,92,162,22,22,78,163,164,164,35,0,59, + 99,132,219,12,219,224,164,241,44,44,61,164,221,122,0,122, + 0,221,64,22,37,35,44,171,141,0,0,122,203,111,126,122, + 219,122,221,183,183,0,56,50,212,50,22,192,44,29,29,187, + 171,47,0,0,0,0,0,42,221,221,0,0,162,162,162,50, + 162,162,162,0,162,50,162,50,162,0,219,206,168,168,206,73, + 73,73,73,233,37,92,178,209,26,42,50,162,59,64,0,162, + 183,0,0,0,0,99,224,225,225,0,0,0,162,162,162,0, + 0,0,0,0,0,0,0,0,0,162,0,78,99,192,192,215, + 187,75,163,0,94,97,37,162,50,75,50,166,225,225,192,44, + 214,0,214,59,155,34,122,187,162,42,64,150,187,187,111,111, + 187,111,109,183,26,26,0,0,122,42,0,0,0,0,122,122, + 42,0,26,183,0,61,50,0,0,42,122,162,94,183,183,162, + 162,187,0,0,183,183,219,37,92,14,14,24,24,0,0,0, + 78,0,224,152,224,63,244,120,25,36,36,133,36,217,217,36, + 217,217,217,105,217,217,105,105,217,105,105,36,105,105,105,105, + 105,105,105,63,105,105,105,105,63,63,105,63,105,105,63,105, + 63,63,105,63,105,105,105,105,105,105,105,63,63,105,63,63, + 153,153,153,153,153,153,153,153,153,240,153,153,153,240,153,153, + 184,153,184,184,184,153,184,153,184,184,184,184,184,184,240,184, + 240,240,184,240,240,83,173,93,177,35,252,108,184,240,184,58, + 58,184,159,236,58,159,58,236,240,240,184,58,184,184,184,236, + 236,153,236,236,58,58,58,58,184,184,236,184,236,236,184,58, + 58,153,184,159,184,153,153,184,184,184,184,159,153,184,58,184, + 159,184,184,153,159,236,58,58,153,58,153,184,236,58,159,58, + 58,184,58,184,236,58,153,153,153,236,153,236,236,159,153,236, + 159,153,184,184,236,153,159,153,153,58,236,159,159,153,153,236, + 236,153,159,58,159,58,153,153,159,58,184,153,153,159,159,58, + 159,159,236,236,159,159,58,58,159,159,119,159,159,159,159,159, + 119,159,119,108,159,159,119,108,119,108,108,83,38,0,122,162, + 164,164,29,104,254,12,172,135,48,48,177,48,177,223,142,223, + 135,223,50,22,221,122,135,94,50,0,162,162,0,154,37,178, + 162,95,215,122,50,203,50,224,209,46,75,94,203,0,209,209, + 0,221,215,200,20,47,246,162,212,172,59,24,44,34,20,34, + 162,142,164,48,22,183,92,164,50,22,22,22,50,50,162,132, + 99,95,122,122,26,91,215,94,111,0,183,122,50,162,183,56, + 221,166,56,56,122,241,162,162,50,0,164,50,163,224,0,95, + 111,40,219,26,26,17,254,35,163,50,164,164,162,0,122,0, + 0,200,152,164,22,14,75,221,0,183,0,163,50,254,0,0, + 42,42,219,0,126,219,0,122,162,40,94,164,59,224,224,111, + 171,44,0,122,122,122,122,122,42,122,42,0,162,162,162,162, + 162,162,0,0,122,42,162,0,162,0,92,73,73,168,168,206, + 168,137,168,177,22,26,75,37,162,50,42,50,254,94,50,44, + 187,0,0,0,0,56,95,95,0,162,0,0,162,162,162,162, + 0,0,0,0,0,0,0,0,0,0,224,192,214,122,183,0, + 162,162,97,0,91,75,22,37,162,50,50,0,225,99,99,64, + 64,122,225,221,155,34,42,59,78,162,99,183,163,183,183,183, + 94,183,132,183,122,122,0,122,122,42,122,0,0,0,0,122, + 122,0,221,0,0,50,200,122,0,0,0,162,0,122,94,78, + 162,162,0,162,12,109,187,162,50,94,0,221,0,122,0,162, + 122,0,192,192,162,63,244,25,120,217,36,36,217,25,36,217, + 36,217,105,217,217,105,217,217,105,105,105,63,105,210,210,105, + 210,210,63,105,63,63,63,63,105,105,63,105,63,63,105,63, + 63,63,63,105,63,63,63,63,63,63,63,105,105,63,105,105, + 184,240,240,240,240,240,240,134,240,153,240,153,153,240,153,153, + 240,153,153,153,184,184,240,153,240,184,184,240,184,184,240,134, + 184,240,240,240,240,247,172,138,137,139,247,240,134,184,184,153, + 236,236,184,236,58,236,159,236,58,58,58,58,236,236,153,153, + 58,184,184,153,153,236,184,58,58,184,153,153,184,236,153,153, + 58,153,153,184,184,58,236,153,153,153,153,184,153,153,58,184, + 184,159,184,153,184,153,159,184,184,159,236,159,236,159,184,184, + 58,153,58,184,153,58,58,58,184,58,184,159,236,58,159,236, + 184,153,58,159,58,159,159,159,153,159,58,159,58,184,159,159, + 58,236,159,236,153,58,58,236,153,159,58,58,236,153,236,153, + 236,184,159,236,236,159,159,159,58,159,159,159,119,159,159,159, + 159,159,159,119,159,119,159,159,159,159,159,108,71,0,219,254, + 150,94,22,14,241,12,253,129,177,253,253,253,48,24,35,29, + 129,151,50,22,162,122,95,162,50,0,50,50,24,209,50,35, + 0,162,186,186,178,187,14,241,37,22,64,104,40,42,154,123, + 0,0,142,226,183,40,221,42,221,142,29,44,24,44,29,59, + 142,104,209,251,14,200,22,203,162,50,50,50,50,22,50,187, + 95,95,224,42,219,17,166,50,224,56,42,50,50,42,99,47, + 26,34,47,254,183,37,221,183,209,94,50,162,35,132,0,122, + 224,94,163,132,26,56,26,243,141,163,22,37,44,44,0,0, + 40,29,192,47,40,215,219,183,162,122,44,15,224,42,0,162, + 78,78,78,122,0,183,0,0,0,162,94,50,14,224,64,47, + 171,46,122,26,122,122,42,0,42,26,122,0,162,50,0,0, + 50,162,162,162,0,26,122,0,0,92,177,168,73,92,73,164, + 22,212,221,0,162,50,162,37,0,162,0,42,166,183,44,34, + 162,50,37,0,0,183,111,254,162,162,162,0,0,162,162,0, + 0,94,162,0,0,0,0,0,162,162,183,64,78,0,0,162, + 61,163,42,224,163,183,42,42,162,0,0,219,221,221,132,254, + 219,182,44,122,192,224,162,187,162,0,254,99,99,59,99,224, + 111,111,99,132,162,162,162,0,122,122,0,0,0,0,0,0, + 0,0,219,122,0,50,61,187,0,164,94,0,162,122,183,183, + 162,162,42,182,224,254,254,0,0,42,122,0,0,0,0,122, + 122,0,182,109,0,210,244,36,36,25,25,36,36,217,36,133, + 36,105,105,105,217,105,210,217,217,217,105,105,105,105,63,105, + 105,105,63,63,63,105,63,63,63,63,63,105,105,63,63,105, + 105,105,63,105,63,63,63,105,105,105,63,63,63,63,63,63, + 240,134,240,240,134,240,134,240,134,240,153,240,240,153,240,240, + 153,240,153,240,153,240,134,240,240,240,240,240,240,240,240,240, + 240,184,184,240,184,83,48,138,168,49,161,184,184,184,236,236, + 153,153,236,159,236,159,236,236,184,58,153,184,184,153,58,58, + 153,236,236,58,153,184,184,236,184,184,58,184,236,184,58,184, + 184,153,184,153,153,153,184,184,159,184,153,159,58,184,153,153, + 159,153,184,159,184,184,153,236,153,153,184,153,184,58,236,58, + 159,58,159,184,58,236,184,159,58,236,153,153,153,153,153,159, + 236,184,153,236,159,236,236,236,184,159,153,236,153,58,159,153, + 159,184,184,159,159,153,153,153,159,236,159,184,184,159,184,159, + 184,159,153,159,159,153,159,58,159,58,58,159,159,119,159,159, + 159,119,159,159,108,159,159,119,108,119,108,83,33,0,141,150, + 122,164,206,50,47,150,177,129,135,177,48,29,177,129,142,177, + 151,55,50,14,50,0,0,162,162,162,50,22,209,221,78,37, + 0,0,15,229,133,47,177,34,84,24,203,50,22,123,168,168, + 246,212,203,94,162,190,92,246,0,24,177,64,47,142,34,50, + 40,104,14,92,14,95,35,50,50,50,50,50,162,50,50,141, + 166,59,166,26,219,17,26,219,224,26,243,227,94,111,99,64, + 26,34,59,99,99,162,42,37,241,163,162,37,24,219,162,122, + 166,64,50,203,219,26,17,42,187,183,111,95,59,20,47,163, + 163,224,94,42,122,0,78,187,0,64,100,35,111,0,42,221, + 187,163,42,183,162,122,42,122,0,0,50,215,223,22,139,224, + 29,95,42,26,26,0,0,0,42,12,26,0,162,50,0,0, + 162,50,50,50,0,122,122,162,92,73,14,22,212,162,0,0, + 0,162,22,37,50,50,22,37,0,171,224,187,44,109,171,104, + 14,203,37,94,50,162,64,183,162,162,50,162,0,0,0,0, + 111,22,209,37,50,75,162,162,162,162,162,141,111,0,0,183, + 94,0,78,99,243,183,162,162,0,0,0,219,99,221,0,166, + 183,225,64,78,187,94,183,50,162,0,59,214,64,214,64,64, + 235,99,64,150,22,50,163,162,0,0,0,0,0,0,0,0, + 0,162,150,166,122,97,50,162,162,164,50,122,162,0,162,183, + 122,0,26,99,0,187,187,42,166,200,111,150,162,162,122,122, + 122,0,0,78,122,217,244,36,133,217,36,217,217,36,105,36, + 210,105,186,217,105,186,105,105,63,210,105,210,210,210,105,63, + 63,63,105,105,105,63,63,63,63,105,63,63,63,63,105,63, + 208,63,105,63,105,105,105,63,63,63,105,63,105,63,105,105, + 240,247,134,240,240,247,134,240,240,134,153,134,153,134,153,153, + 153,240,134,240,153,240,153,153,134,134,240,134,240,134,184,134, + 184,184,153,184,184,83,172,220,137,187,161,184,153,153,184,58, + 236,153,153,184,153,184,153,236,184,58,236,153,184,153,236,236, + 184,184,236,58,153,236,184,236,236,153,236,153,153,153,153,153, + 58,236,159,184,159,153,153,153,236,184,153,184,184,159,184,153, + 184,58,159,184,184,159,184,159,58,184,159,153,184,184,153,236, + 159,236,184,184,159,236,236,153,184,58,58,159,184,58,159,159, + 184,159,184,153,159,159,184,58,236,159,184,159,153,236,184,159, + 153,236,159,236,159,58,159,58,159,236,236,236,236,159,153,184, + 236,159,159,159,184,236,159,58,159,58,159,159,159,159,159,119, + 159,159,119,119,159,119,159,159,119,159,159,108,33,0,122,164, + 162,164,162,29,150,219,223,129,129,135,129,135,222,229,135,223, + 229,135,50,22,50,0,162,162,162,162,50,122,0,162,0,0, + 0,0,20,135,186,34,200,203,154,209,73,73,22,62,130,177, + 37,94,104,164,94,92,14,104,246,129,40,24,35,64,223,187, + 219,47,190,226,40,50,24,162,50,50,50,50,50,162,22,183, + 187,162,20,219,122,122,122,122,95,150,183,0,56,99,59,34, + 150,44,64,111,95,221,219,50,203,50,221,94,163,183,187,0, + 0,64,59,162,29,224,17,42,150,141,132,141,219,0,122,78, + 162,224,166,42,0,0,221,219,212,47,44,95,59,95,224,59, + 183,183,224,187,94,183,183,187,183,166,183,22,142,209,14,50, + 182,183,42,219,26,42,0,47,122,26,12,26,162,50,0,0, + 50,61,162,162,162,122,42,50,50,162,0,0,0,0,0,0, + 0,0,50,50,50,162,122,0,14,44,64,59,75,162,99,95, + 73,37,50,24,37,162,29,42,162,162,162,162,162,0,0,162, + 75,61,22,61,22,209,50,162,50,162,0,141,192,225,99,221, + 26,50,42,64,0,162,162,50,162,50,162,56,152,166,0,132, + 95,99,44,224,0,0,0,0,0,0,0,0,162,183,183,126, + 59,166,0,50,37,122,50,50,162,50,0,0,162,162,50,37, + 162,162,187,46,162,42,50,122,162,0,122,162,162,0,0,122, + 183,0,183,163,183,162,162,254,111,14,22,17,109,162,219,0, + 162,0,122,225,182,155,244,36,36,217,133,36,217,36,105,36, + 105,36,105,105,105,105,155,105,105,210,105,105,105,210,105,105, + 105,63,63,208,63,105,63,63,208,63,63,105,63,63,208,63, + 63,63,105,63,63,63,63,105,105,63,105,63,105,63,63,63, + 134,134,247,134,134,240,134,134,240,240,240,240,153,240,134,153, + 153,153,153,153,153,134,240,240,153,240,134,184,153,153,240,184, + 184,153,184,58,153,108,48,237,177,8,247,184,236,184,153,153, + 153,236,58,236,58,153,153,153,236,58,184,58,236,236,153,184, + 153,153,153,153,236,153,153,153,153,184,184,184,153,153,58,58, + 153,159,153,236,236,184,159,184,159,236,58,153,153,153,153,159, + 184,153,153,153,153,159,184,153,184,153,184,159,153,184,184,159, + 236,240,58,58,159,184,184,159,236,236,159,236,58,184,184,159, + 58,58,184,58,159,159,58,153,159,236,184,184,159,184,58,58, + 58,184,236,159,58,58,58,153,153,159,184,159,159,236,58,153, + 184,58,236,236,159,159,159,159,58,159,58,159,159,119,159,159, + 159,119,159,159,159,159,119,159,119,108,119,108,102,0,122,92, + 164,0,14,164,150,219,177,222,129,135,46,177,142,162,177,135, + 223,97,37,22,162,0,162,162,50,50,50,164,50,162,0,0, + 50,0,44,186,29,50,50,50,22,37,162,142,46,209,177,104, + 164,221,162,40,246,59,171,151,246,177,111,59,47,59,200,111, + 183,241,203,212,37,130,79,162,50,22,50,50,50,162,50,183, + 215,0,215,44,95,187,219,141,182,215,0,0,166,64,44,34, + 59,47,44,221,0,95,183,0,162,0,162,50,50,162,37,183, + 0,0,44,59,34,223,224,219,42,17,254,132,187,122,0,0, + 183,219,126,0,0,122,163,37,50,162,64,166,224,122,163,47, + 78,162,239,221,122,126,126,221,183,183,183,246,215,253,92,14, + 37,0,42,219,26,0,0,245,122,12,12,17,0,50,162,162, + 162,50,50,50,162,0,94,50,0,0,215,0,0,0,0,0, + 0,0,0,162,162,162,40,162,206,132,225,47,50,22,0,187, + 164,164,94,163,0,26,64,162,162,50,50,162,50,162,0,0, + 50,163,239,162,162,162,162,162,0,0,50,212,163,64,192,17, + 132,214,166,50,50,22,50,61,22,22,162,0,111,132,99,182, + 166,187,192,235,0,0,122,78,183,26,183,183,111,183,0,0, + 0,0,0,78,50,42,50,50,50,37,0,162,162,162,50,50, + 0,162,50,164,0,0,42,162,162,0,122,0,122,162,162,0, + 0,0,111,111,182,183,94,183,111,50,78,122,26,126,162,162, + 162,162,64,192,111,63,120,25,217,36,36,105,217,217,217,105, + 105,105,105,210,217,105,105,217,105,105,210,63,186,105,63,63, + 63,63,63,63,63,208,105,63,63,105,208,63,63,63,63,105, + 63,63,208,63,208,63,63,63,63,63,63,63,208,105,105,105, + 153,134,153,240,134,240,134,134,134,134,134,153,134,240,153,240, + 240,240,240,240,134,240,134,240,153,153,153,240,153,134,153,153, + 240,153,184,236,153,108,20,237,190,111,247,240,153,153,236,153, + 184,153,153,153,236,153,58,153,236,153,153,184,184,184,153,153, + 153,184,236,153,184,58,184,184,153,153,153,184,184,153,153,184, + 153,184,153,184,153,153,236,153,184,153,184,159,184,184,153,184, + 159,184,153,184,153,153,58,153,184,153,159,153,184,184,153,159, + 236,159,159,58,184,184,58,184,184,236,159,153,159,159,58,159, + 184,159,184,159,184,159,159,159,184,58,236,236,159,236,153,159, + 153,184,159,153,153,153,159,184,153,153,236,153,159,153,159,184, + 153,184,159,236,153,236,153,159,236,58,58,159,159,58,159,159, + 159,119,119,119,119,159,159,159,119,159,108,108,33,73,94,0, + 50,37,216,37,104,141,104,253,103,223,162,50,162,50,163,226, + 37,75,22,14,162,122,162,162,50,50,50,37,50,0,0,0, + 22,50,200,20,122,162,50,50,50,50,50,47,0,183,190,226, + 162,94,221,164,40,200,135,151,215,190,183,50,183,200,142,254, + 47,203,22,209,24,84,73,37,162,37,50,50,50,162,50,50, + 122,0,0,56,47,59,221,254,162,162,162,0,99,44,34,44, + 99,183,0,0,0,183,183,122,0,0,50,37,50,162,50,50, + 183,0,122,47,64,163,95,241,164,215,150,183,0,0,0,0, + 183,122,183,183,44,29,50,50,162,254,183,183,122,183,42,126, + 221,227,187,150,126,95,42,162,42,95,183,122,0,29,95,164, + 73,94,26,219,26,122,42,245,42,122,26,26,122,50,50,162, + 162,162,22,22,162,0,183,246,64,50,35,182,0,122,122,0, + 122,122,0,0,162,162,164,14,94,37,59,166,64,162,0,254, + 166,221,22,0,221,183,64,162,162,162,50,162,162,0,0,221, + 0,0,0,162,162,162,162,162,50,35,209,241,50,254,254,59, + 99,221,0,162,50,97,50,162,50,162,0,0,132,214,171,192, + 225,214,192,44,0,187,245,171,192,158,64,64,35,50,50,50, + 50,50,162,0,0,162,78,0,0,162,162,0,0,0,50,187, + 0,94,212,0,0,162,162,162,78,162,122,0,122,162,162,0, + 0,122,132,182,182,224,162,0,221,162,42,122,122,150,162,162, + 122,78,234,225,59,210,120,36,36,105,217,105,217,105,105,105, + 105,105,36,63,105,210,63,186,105,105,105,105,63,105,63,105, + 63,105,63,105,63,208,63,208,208,63,208,105,208,105,208,63, + 208,63,63,63,105,208,63,63,105,208,105,63,208,63,63,105, + 153,134,240,134,134,153,134,240,240,134,240,153,240,153,153,134, + 153,134,134,153,240,153,153,153,153,153,153,153,240,153,240,153, + 153,153,153,153,184,240,190,237,92,8,247,184,153,236,153,58, + 153,153,153,236,153,236,153,184,153,153,153,153,153,153,153,184, + 153,236,153,184,236,153,153,153,153,184,184,236,236,153,153,236, + 184,153,184,153,153,153,153,159,153,184,153,153,153,153,184,153, + 153,153,184,184,184,159,184,159,153,184,153,159,153,58,184,153, + 153,184,236,159,58,58,184,184,184,159,184,159,236,236,184,153, + 159,58,184,159,184,159,58,184,159,159,159,184,153,184,159,236, + 159,184,236,58,58,159,58,58,58,159,159,184,184,159,153,159, + 58,58,153,159,159,159,58,153,159,159,58,159,119,159,159,159, + 143,159,159,159,119,159,119,159,119,159,119,108,33,31,129,203, + 14,164,31,50,47,12,162,164,142,212,50,104,226,253,50,22, + 50,50,22,241,162,0,221,162,162,50,50,0,0,221,162,50, + 50,0,111,163,37,50,164,50,22,162,47,95,126,166,168,129, + 0,221,0,203,203,95,151,151,94,59,50,35,29,172,47,164, + 200,206,84,14,37,162,122,162,50,22,22,22,22,162,50,50, + 162,37,50,164,50,0,0,241,164,164,22,221,183,187,221,0, + 221,0,221,42,187,163,122,0,0,162,61,91,162,42,50,162, + 224,0,0,0,99,34,239,50,212,37,162,64,29,34,111,94, + 203,212,35,29,20,171,183,111,224,183,183,94,183,183,78,95, + 122,122,95,132,95,183,56,95,166,59,183,94,162,20,241,22, + 73,0,219,26,219,122,111,171,227,122,26,26,122,162,50,162, + 0,0,50,50,50,141,192,224,126,111,50,35,162,221,0,0, + 0,0,0,0,50,50,50,164,0,50,183,42,34,0,162,183, + 150,163,73,14,162,183,59,0,162,162,0,0,0,0,122,26, + 42,0,0,162,162,162,162,162,75,209,209,209,61,221,192,64, + 0,0,0,0,0,152,59,0,0,0,132,64,214,47,47,141, + 64,47,64,99,0,183,44,59,224,75,111,111,162,50,162,162, + 162,162,162,0,122,0,0,0,0,94,50,162,162,94,94,50, + 50,162,162,0,162,0,0,162,0,0,162,162,0,162,0,0, + 162,0,122,64,254,99,183,0,0,0,221,221,0,78,78,162, + 0,183,192,192,75,191,120,36,217,105,133,217,105,217,217,105, + 186,105,63,36,63,105,105,105,63,63,63,208,63,208,105,63, + 208,63,208,63,63,63,105,63,63,63,208,63,63,208,63,208, + 105,63,105,63,63,105,208,63,63,63,63,63,63,63,208,57, + 153,153,240,134,153,134,153,134,153,153,153,153,134,153,153,153, + 153,153,153,153,134,153,153,134,153,153,153,153,153,153,153,240, + 153,184,184,153,240,240,29,167,92,166,247,240,153,153,153,153, + 236,153,153,153,184,153,236,184,184,184,184,184,184,58,236,58, + 153,184,153,153,184,184,153,58,153,153,184,184,58,159,184,236, + 159,153,184,58,159,184,153,184,184,159,184,184,159,153,184,159, + 184,153,153,153,153,153,153,159,184,184,153,184,153,153,159,184, + 236,184,236,184,58,58,58,159,184,236,58,184,159,236,159,153, + 184,159,184,184,159,240,240,159,159,184,184,58,58,236,159,153, + 153,184,159,159,58,159,153,159,236,153,58,159,58,58,159,184, + 159,184,159,58,159,184,58,159,236,159,58,159,159,159,119,159, + 159,159,159,159,159,159,159,159,119,159,119,108,33,137,129,55, + 22,37,0,142,235,212,14,233,162,37,177,48,177,212,48,22, + 209,50,37,22,42,0,162,162,162,50,50,162,162,162,50,50, + 50,162,166,46,209,178,50,22,22,50,34,92,94,0,14,241, + 221,0,73,104,164,215,151,229,221,46,212,177,111,50,14,14, + 37,29,47,132,42,56,150,42,50,22,50,50,22,162,162,50, + 50,50,22,212,162,0,0,94,22,37,163,163,44,20,75,0, + 0,0,0,0,0,94,122,162,50,50,50,162,162,162,50,162, + 75,95,0,0,0,95,99,59,50,212,50,29,171,171,46,50, + 22,212,163,224,59,35,47,99,0,78,227,111,215,162,0,183, + 0,122,0,183,183,227,183,162,219,78,183,162,50,224,200,14, + 14,0,26,42,42,0,104,75,0,0,219,26,42,0,50,162, + 50,0,0,162,50,0,183,246,0,163,200,22,42,96,47,0, + 0,50,0,50,14,94,150,221,78,150,141,141,0,162,254,254, + 221,254,164,92,162,122,254,12,26,122,0,0,26,12,8,8, + 8,26,0,0,0,0,0,0,0,122,22,241,37,0,254,221, + 0,0,0,0,162,152,50,0,0,42,64,44,192,64,44,192, + 192,99,254,42,0,0,0,0,0,0,221,0,0,0,0,0, + 0,162,162,162,0,0,0,0,162,37,162,0,122,183,162,50, + 212,0,0,0,0,0,162,162,0,0,0,0,162,0,0,162, + 162,0,122,67,111,99,99,183,0,0,0,162,163,162,0,0, + 0,183,225,225,59,191,120,36,133,105,105,210,63,105,105,105, + 63,105,63,105,105,105,63,105,105,63,105,63,63,208,63,105, + 208,105,208,208,208,63,208,105,208,63,208,63,208,63,63,208, + 63,208,208,208,63,63,105,191,208,208,63,96,171,145,99,235, + 134,153,134,240,153,240,134,153,153,153,153,153,153,153,153,153, + 153,153,153,153,153,153,240,153,240,153,153,153,153,153,153,153, + 184,153,153,153,240,108,190,167,226,243,247,184,184,184,153,153, + 184,184,153,184,153,153,153,153,153,236,153,153,236,153,159,153, + 184,153,153,153,153,153,236,153,153,58,153,153,153,236,153,153, + 153,159,153,153,153,153,153,159,153,153,184,184,159,184,153,153, + 153,184,159,184,159,184,184,153,153,184,159,153,153,184,159,184, + 159,153,159,153,153,159,184,58,184,159,184,184,184,159,58,58, + 159,184,184,159,159,159,58,159,58,159,58,159,236,184,153,58, + 58,159,236,153,153,236,58,236,159,58,184,184,159,184,159,184, + 184,159,153,159,58,159,240,159,159,159,159,159,159,159,159,159, + 159,159,159,159,119,159,159,159,159,108,119,108,197,206,253,79, + 222,122,122,50,246,164,162,233,162,50,226,246,50,162,20,241, + 151,50,37,22,94,162,162,50,50,50,22,0,162,50,50,50, + 50,162,50,84,209,22,50,50,50,50,221,113,37,123,84,233, + 246,221,251,104,50,163,33,55,162,200,162,251,0,212,123,142, + 46,142,26,26,26,42,26,0,162,22,50,50,162,162,0,227, + 162,162,37,37,50,0,0,162,50,22,75,183,47,64,59,0, + 163,209,209,212,75,50,162,50,50,50,221,0,0,162,50,50, + 162,34,0,0,0,0,0,95,64,224,95,47,200,59,221,221, + 94,162,95,47,64,99,215,122,183,162,0,97,59,224,187,163, + 0,0,0,183,42,42,122,95,166,221,42,0,0,166,94,22, + 92,0,219,42,219,162,212,162,162,122,42,26,122,0,162,0, + 162,162,0,162,162,162,162,162,0,122,162,95,64,34,64,209, + 0,92,212,37,14,0,243,150,219,141,26,183,162,243,47,111, + 0,141,187,162,183,183,187,150,42,122,26,26,12,12,150,12, + 26,26,122,26,26,26,122,26,12,26,26,26,162,34,192,245, + 166,0,0,0,56,245,215,0,215,145,44,254,99,225,192,192, + 64,141,183,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,183,187,0,0,0,0,0,162,221,162,0,0,0,50,94, + 0,0,0,0,162,162,0,162,162,162,0,0,162,162,0,0, + 162,0,0,187,225,99,141,14,14,164,162,183,126,50,0,162, + 0,0,221,162,162,63,36,105,105,36,105,105,105,105,105,105, + 105,105,105,105,63,63,105,63,63,105,208,105,63,63,105,63, + 105,63,63,105,105,208,63,208,63,208,63,208,63,105,63,63, + 105,105,105,105,208,105,208,171,214,64,214,67,214,139,158,139, + 153,153,153,134,134,153,153,134,153,153,153,153,153,153,218,153, + 218,153,153,153,153,153,153,153,134,153,153,153,153,240,153,153, + 153,153,153,153,240,240,223,79,73,215,247,240,236,153,236,153, + 236,153,218,153,236,153,153,236,153,236,184,184,58,153,184,153, + 153,153,153,153,236,184,153,58,153,184,153,153,153,184,184,153, + 153,184,184,184,184,159,153,184,184,153,153,153,236,159,184,159, + 153,153,159,153,184,159,184,184,159,159,184,184,153,153,153,153, + 184,153,58,58,236,184,159,236,159,184,184,153,159,159,184,236, + 58,236,159,184,184,159,159,184,159,153,236,159,184,58,58,159, + 236,159,58,58,159,184,159,159,153,159,58,153,58,58,184,159, + 153,240,159,159,159,159,159,159,58,159,58,159,159,159,159,159, + 159,159,159,159,159,159,159,159,159,159,159,108,33,22,223,38, + 201,241,132,95,94,37,94,226,203,46,129,183,129,24,50,212, + 222,50,22,22,56,162,162,22,50,50,50,0,162,50,50,162, + 50,50,122,223,209,50,50,22,162,162,162,94,94,167,73,241, + 78,162,0,162,0,94,88,55,221,47,122,92,203,122,42,215, + 219,42,215,40,221,203,94,0,0,0,162,162,221,162,42,20, + 34,40,61,50,162,0,0,0,50,50,50,162,0,0,0,162, + 200,209,209,209,22,0,162,162,162,0,0,183,183,162,162,50, + 50,35,183,0,0,0,0,0,0,78,111,47,59,59,224,224, + 224,224,224,224,215,56,0,78,122,122,215,95,59,59,126,99, + 0,0,0,162,183,162,0,78,42,0,56,59,94,254,104,14, + 14,0,17,17,122,162,50,162,50,162,0,26,26,0,0,162, + 50,162,162,162,0,162,0,78,122,0,0,225,225,187,163,214, + 254,75,162,221,187,0,150,141,183,183,162,162,122,243,221,50, + 50,44,64,50,224,221,187,122,122,12,12,17,17,26,12,17, + 42,0,26,219,26,26,122,26,26,42,12,26,122,248,192,245, + 245,47,0,0,183,245,183,141,192,225,34,214,34,47,95,56, + 215,0,0,0,162,0,0,162,162,162,162,0,0,0,0,0, + 187,64,126,0,122,0,0,0,78,42,94,0,0,162,50,162, + 0,122,0,122,162,162,0,162,162,162,0,0,162,162,0,0, + 162,0,0,0,64,235,212,22,22,22,50,97,215,122,162,162, + 162,0,0,0,0,105,36,36,105,105,105,105,63,105,63,105, + 63,105,63,105,105,105,105,63,63,63,63,105,208,63,105,208, + 63,105,208,208,63,208,63,208,63,208,63,208,208,63,105,208, + 105,208,208,152,225,214,235,99,99,235,235,67,234,67,192,64, + 153,134,153,153,153,153,134,153,153,153,153,218,153,218,134,218, + 153,153,218,153,153,153,153,153,153,153,218,153,153,153,153,153, + 153,184,184,184,134,108,226,167,226,187,247,240,153,236,153,153, + 153,236,153,143,153,153,153,153,153,153,153,153,153,153,153,153, + 153,236,153,153,184,153,58,153,153,153,184,153,184,153,153,184, + 153,153,159,153,153,184,159,153,153,159,159,184,184,153,153,153, + 159,184,153,184,134,153,153,153,159,153,159,159,184,184,159,184, + 159,184,159,153,159,58,236,184,236,58,58,184,159,236,153,184, + 153,184,153,159,153,184,58,58,236,58,159,58,236,153,153,236, + 159,236,184,159,153,236,159,236,58,153,153,58,159,153,58,159, + 184,159,159,240,240,240,159,240,159,159,240,159,159,159,159,159, + 159,159,159,159,159,108,159,159,108,119,108,108,197,50,253,167, + 55,251,162,92,14,164,14,203,203,201,92,46,201,190,22,94, + 177,162,22,37,0,0,50,22,50,50,50,162,162,162,0,50, + 50,50,0,223,209,162,50,50,50,95,50,94,0,26,22,84, + 221,0,221,212,162,246,38,38,122,223,122,92,50,17,246,40, + 56,40,163,203,212,92,226,50,50,122,26,42,42,26,12,135, + 229,133,241,24,223,142,223,223,223,223,223,162,162,162,162,162, + 162,162,0,183,15,15,20,172,47,47,46,47,47,0,162,162, + 162,187,95,0,0,0,0,0,0,0,0,122,221,122,187,15, + 20,29,200,37,132,59,122,94,122,183,219,221,59,224,215,95, + 122,122,122,126,187,0,122,183,126,166,95,192,50,46,137,73, + 73,122,26,26,0,162,162,162,50,50,122,26,26,122,0,162, + 162,162,162,162,162,162,162,162,0,0,50,227,64,209,50,78, + 224,50,59,183,94,162,219,166,162,162,0,26,56,122,0,162, + 94,183,224,224,59,0,183,17,219,17,132,17,26,17,219,122, + 122,0,17,26,122,219,0,0,122,26,26,42,0,155,47,171, + 29,245,192,122,219,186,0,111,152,99,254,254,183,221,0,132, + 214,59,0,162,162,111,122,0,162,78,162,162,162,0,0,126, + 64,99,40,0,122,42,162,122,162,50,162,0,162,42,94,162, + 122,64,183,0,162,162,0,162,162,162,0,0,50,162,0,0, + 0,162,0,0,187,50,162,212,42,183,221,163,122,183,50,162, + 0,219,64,111,0,208,36,105,63,105,105,105,36,63,105,63, + 105,208,105,105,105,63,63,105,63,105,208,208,105,105,208,105, + 208,63,208,208,105,208,105,105,105,105,105,105,105,105,208,57, + 192,225,235,64,99,145,99,145,214,158,214,44,158,158,158,214, + 153,153,134,153,153,218,134,153,218,218,218,218,218,218,218,218, + 218,153,153,218,218,218,153,218,153,153,153,153,218,218,153,153, + 153,153,153,184,240,247,142,167,92,215,247,240,218,153,218,218, + 218,153,153,153,153,236,184,153,184,184,153,153,153,153,184,58, + 153,184,159,134,184,153,184,184,153,153,184,153,184,159,153,184, + 153,153,159,184,134,184,159,184,153,153,184,159,159,184,184,153, + 153,184,134,58,184,184,184,153,184,153,153,159,184,159,153,184, + 184,153,159,153,153,184,159,159,153,159,58,58,184,159,184,159, + 184,159,153,184,153,159,159,159,58,58,153,159,58,159,153,153, + 159,236,153,184,159,153,184,159,58,159,159,159,159,153,153,184, + 184,159,134,159,159,159,159,159,159,240,159,159,159,159,159,159, + 159,159,159,108,119,159,108,119,159,159,108,108,38,37,129,79, + 103,201,226,164,14,164,22,50,0,75,47,172,37,0,14,177, + 223,22,14,164,94,162,10,50,50,37,50,162,162,0,162,0, + 162,162,50,24,46,50,50,50,50,46,84,177,46,215,24,249, + 42,123,163,203,137,40,229,229,40,223,183,92,212,17,17,40, + 221,203,24,46,241,241,46,142,75,78,122,26,219,26,150,29, + 135,29,47,29,171,229,245,133,186,229,171,221,0,162,162,50, + 162,162,162,95,38,244,102,102,151,186,133,229,42,162,162,162, + 162,94,59,0,162,162,42,26,42,42,42,42,42,122,42,186, + 135,171,59,37,183,166,141,166,42,221,183,254,227,224,187,59, + 0,183,183,111,166,227,126,95,99,59,126,215,0,24,168,73, + 73,0,17,42,0,64,59,59,59,163,94,26,219,122,0,0, + 162,50,162,0,162,162,162,0,111,40,92,50,162,75,50,59, + 47,224,224,215,17,162,162,0,219,243,141,67,141,243,141,221, + 162,0,47,47,109,0,122,26,219,26,219,219,219,42,122,122, + 0,0,17,26,42,42,0,122,26,12,219,122,122,158,50,224, + 224,224,64,187,183,171,221,122,254,64,44,254,254,99,47,192, + 254,152,162,162,122,171,225,224,162,0,122,78,122,122,254,99, + 224,111,162,0,122,78,78,162,162,50,50,0,162,162,0,162, + 0,111,254,187,162,162,0,162,162,0,0,0,162,0,26,224, + 109,99,42,0,0,0,187,254,150,243,132,122,0,94,94,0, + 42,234,192,158,111,63,36,36,105,105,105,63,105,105,105,105, + 105,63,63,208,105,105,63,105,63,63,105,63,208,63,208,63, + 208,63,63,208,208,105,208,191,57,191,208,57,192,225,64,235, + 99,214,99,145,235,158,214,214,158,158,158,158,158,158,158,214, + 218,153,134,153,134,218,153,134,218,134,218,218,134,218,218,153, + 218,218,153,153,153,218,153,153,153,153,218,218,153,153,218,153, + 218,218,153,153,153,240,104,123,226,26,247,184,153,153,153,184, + 184,153,153,153,153,184,153,184,153,153,184,153,153,153,153,153, + 184,153,153,184,153,159,153,153,184,153,153,153,153,184,159,184, + 159,184,153,153,153,153,159,184,184,159,184,153,134,159,184,159, + 184,153,184,153,159,159,153,159,159,159,184,153,153,153,159,159, + 159,184,184,159,184,184,159,184,159,58,184,159,184,58,159,58, + 58,58,184,159,58,58,153,153,153,159,184,236,159,236,159,58, + 153,153,58,153,153,58,159,236,159,236,153,236,159,58,58,184, + 184,184,240,159,159,159,240,240,159,159,159,159,108,159,159,159, + 159,108,159,159,119,159,159,159,108,119,119,83,38,14,129,18, + 55,18,201,0,163,37,14,22,40,103,103,242,241,0,92,249, + 212,164,164,22,0,50,22,22,22,22,22,162,50,37,50,50, + 162,162,14,22,229,50,50,37,162,92,130,14,22,226,104,249, + 237,30,129,162,137,190,209,111,173,129,0,42,94,17,219,104, + 162,126,241,200,75,75,200,24,203,26,26,26,26,122,150,34, + 135,0,0,227,34,183,0,0,0,34,142,162,0,0,0,0, + 122,0,0,122,95,162,0,0,0,0,0,0,162,50,162,50, + 50,212,47,162,50,162,42,12,150,219,42,132,150,150,42,29, + 20,34,29,212,203,162,183,126,95,109,239,95,141,95,183,47, + 59,162,95,183,59,166,34,254,142,95,132,50,94,73,14,14, + 92,0,219,42,0,59,59,44,192,171,171,122,8,26,0,162, + 162,0,162,0,162,162,122,163,225,35,14,63,171,95,183,166, + 132,95,0,42,141,0,50,0,17,150,132,183,183,132,243,94, + 164,246,0,94,163,162,162,162,162,0,0,0,0,162,162,78, + 42,122,12,12,219,26,0,122,12,8,122,0,0,64,109,132, + 111,75,64,192,171,171,0,122,0,42,47,192,29,192,171,192, + 192,224,0,162,0,192,171,192,34,187,0,0,162,162,94,183, + 50,162,162,78,0,0,162,0,162,37,50,0,0,0,162,50, + 162,183,150,171,224,183,109,50,42,162,0,182,224,111,166,95, + 221,0,0,0,163,0,99,0,0,162,215,109,219,122,162,0, + 56,17,183,224,95,208,120,105,105,105,63,105,105,105,63,63, + 63,105,208,105,63,208,105,208,105,63,208,105,208,105,63,208, + 105,105,105,105,105,63,208,171,214,214,64,49,64,67,214,214, + 214,158,158,158,158,234,158,158,158,158,214,158,214,158,214,158, + 153,218,134,153,218,218,218,218,134,218,218,134,218,218,134,218, + 218,218,218,218,153,218,153,218,153,153,153,153,153,153,218,153, + 153,218,218,153,240,247,46,123,92,246,247,240,153,153,153,153, + 153,153,153,153,153,184,184,184,153,153,153,153,153,236,153,184, + 184,159,153,184,153,153,153,153,159,153,153,184,153,159,153,153, + 159,184,184,184,184,159,153,159,153,184,159,184,153,153,159,184, + 184,184,159,153,153,184,159,153,184,159,184,159,184,159,153,58, + 184,58,159,159,184,159,184,159,184,159,153,184,159,58,159,153, + 153,159,58,159,159,58,58,58,58,58,159,236,184,236,153,159, + 159,184,58,159,184,58,184,236,159,58,159,153,159,159,58,159, + 159,184,159,159,240,159,159,159,159,159,159,159,159,159,159,159, + 159,159,159,159,159,159,159,119,159,108,159,108,38,50,222,228, + 197,33,242,241,26,94,22,162,73,249,249,138,50,164,50,50, + 22,14,37,162,0,162,50,22,50,22,50,0,50,162,0,162, + 162,162,22,50,154,241,50,22,50,162,22,35,84,206,241,48, + 92,190,246,104,0,50,0,226,226,40,164,0,183,12,42,40, + 200,50,75,241,241,35,46,241,212,219,219,219,26,42,99,29, + 229,122,0,133,133,133,229,187,0,133,133,94,0,0,0,0, + 0,0,0,78,34,50,0,0,162,162,162,162,50,61,50,50, + 50,50,224,0,162,162,162,0,26,17,42,26,26,26,26,17, + 34,223,34,224,164,227,141,227,227,95,59,187,166,47,215,183, + 34,59,64,47,171,47,95,215,221,219,187,37,104,222,233,73, + 162,0,219,26,221,141,141,42,26,141,183,0,26,26,122,182, + 44,64,206,14,0,0,219,152,64,50,64,34,64,0,162,162, + 254,34,64,59,44,126,162,99,50,132,95,141,183,221,122,162, + 92,0,221,0,183,0,162,162,162,162,0,162,162,162,162,0, + 0,0,122,26,12,12,0,122,17,219,0,0,0,152,171,29, + 29,225,34,34,192,171,0,219,219,0,0,67,44,225,47,95, + 246,0,0,0,162,34,34,64,64,99,64,42,162,162,50,162, + 50,50,26,42,0,162,0,162,50,221,0,0,0,162,162,162, + 0,171,44,99,254,95,192,44,109,42,162,183,224,182,0,0, + 0,0,42,104,35,42,235,162,183,26,183,219,64,0,162,0, + 0,0,0,0,221,63,36,105,105,36,105,105,63,105,105,105, + 208,105,63,105,105,105,105,63,105,105,208,63,63,208,105,105, + 63,208,208,152,192,214,235,99,99,235,214,235,158,214,158,158, + 192,158,158,158,214,158,214,158,214,158,158,158,158,158,214,214, + 218,218,218,134,218,134,218,218,153,218,218,218,218,218,218,218, + 153,218,218,153,218,218,153,218,218,218,153,218,218,218,153,153, + 153,153,153,218,153,108,104,137,92,187,247,184,153,153,218,153, + 236,153,153,184,159,153,153,184,153,153,153,153,153,153,159,153, + 153,153,159,153,184,153,184,184,153,184,159,153,159,236,153,184, + 153,159,184,159,153,153,184,134,159,153,153,236,153,159,153,153, + 159,184,153,159,159,159,153,159,153,153,184,159,184,159,240,159, + 184,159,159,58,58,58,184,236,159,58,240,184,159,159,159,240, + 159,58,184,159,159,159,159,159,184,159,184,159,159,159,159,236, + 159,159,184,159,236,159,184,159,159,159,153,58,159,236,153,159, + 159,184,159,159,153,134,159,159,159,159,159,159,159,159,159,159, + 119,159,159,159,159,159,159,159,159,119,108,83,38,162,73,168, + 251,55,33,79,42,94,50,0,233,233,31,216,73,50,162,221, + 92,22,162,0,0,162,94,29,0,0,40,0,94,183,212,40, + 162,162,50,162,253,24,37,37,22,163,104,223,253,209,113,177, + 215,164,251,73,73,104,50,135,251,224,226,226,0,219,0,34, + 153,35,22,163,46,163,212,75,163,42,26,219,26,122,64,64, + 229,0,29,100,38,133,74,143,0,151,229,183,0,0,0,0, + 0,0,0,42,44,0,162,0,50,50,50,162,162,94,162,162, + 0,40,95,0,0,162,162,122,183,219,42,219,26,26,163,73, + 44,44,223,44,37,162,162,183,122,122,183,215,166,111,132,166, + 64,64,183,224,95,219,95,219,219,94,212,212,73,73,206,35, + 122,42,12,26,219,141,219,254,34,15,94,162,42,122,26,59, + 44,99,203,92,0,0,0,0,75,162,163,221,215,47,59,94, + 0,224,35,47,44,212,0,225,241,254,29,171,254,186,0,0, + 42,95,111,215,126,126,111,166,47,59,59,47,59,95,59,59, + 47,59,183,26,17,219,0,26,12,26,0,0,0,20,192,192, + 171,29,34,29,29,171,0,0,122,0,0,183,141,0,0,0, + 42,42,122,0,0,64,64,59,224,224,59,50,162,162,162,50, + 42,219,183,183,122,0,0,94,37,50,50,0,0,0,162,162, + 0,225,192,192,192,0,61,50,50,162,162,162,0,0,0,0, + 42,0,187,219,224,221,150,254,150,42,0,42,183,42,94,162, + 162,0,99,64,183,105,36,105,105,105,105,63,105,105,63,63, + 105,208,63,208,63,63,208,105,208,63,105,105,105,105,208,57, + 202,192,214,235,64,214,99,214,214,158,214,158,158,158,214,158, + 145,158,214,214,214,214,158,214,158,214,158,214,64,214,214,158, + 218,134,218,134,88,218,218,218,218,88,218,218,134,218,218,218, + 218,218,218,218,218,218,218,218,218,218,218,153,153,153,218,153, + 153,218,153,153,134,247,47,251,92,221,247,134,153,153,218,153, + 153,153,153,134,184,159,153,184,184,184,184,184,153,153,153,58, + 153,153,58,159,159,153,153,159,153,153,153,153,153,159,153,153, + 153,153,159,159,134,153,58,153,153,153,153,236,236,153,153,153, + 236,159,153,153,153,153,236,153,159,236,153,153,134,153,159,159, + 184,58,159,153,153,236,159,159,153,159,159,159,240,159,184,159, + 159,159,153,58,184,159,184,184,159,184,159,184,159,58,159,184, + 58,240,159,184,159,153,184,159,159,58,159,159,240,159,159,159, + 153,159,134,159,159,153,159,159,159,159,159,159,159,159,159,159, + 159,159,159,159,159,119,159,159,159,159,159,83,38,251,33,228, + 222,251,228,197,95,50,50,0,249,73,233,62,167,0,56,50, + 221,95,0,0,122,221,162,223,162,0,0,20,72,88,72,33, + 35,0,162,0,64,34,163,95,132,59,104,0,203,40,226,92, + 22,14,84,203,92,221,173,35,126,129,48,55,221,219,42,15, + 218,241,46,200,241,50,50,46,95,26,219,42,26,26,64,47, + 133,50,20,15,151,186,38,74,0,171,135,122,0,0,0,0, + 200,29,29,40,99,0,50,0,0,162,50,162,162,162,224,29, + 44,47,29,20,15,229,20,20,229,20,111,26,219,92,168,233, + 92,182,44,34,200,50,0,0,0,122,0,0,183,0,183,0, + 56,0,215,0,0,183,0,162,122,0,37,162,206,14,26,243, + 219,122,26,0,219,64,192,15,29,158,126,50,42,122,8,187, + 64,75,177,42,183,0,0,162,164,50,47,152,171,34,64,59, + 162,0,42,166,224,122,0,64,34,0,187,64,64,34,91,215, + 254,171,44,59,44,34,64,44,15,171,171,171,29,29,171,171, + 245,245,95,0,26,26,122,12,17,122,0,0,0,171,171,44, + 34,34,214,34,192,171,0,0,122,0,0,0,0,0,0,183, + 219,42,122,0,0,122,122,221,183,162,122,0,166,214,95,122, + 42,183,183,126,12,183,162,0,162,162,0,0,0,0,0,122, + 56,183,95,44,214,162,22,22,50,0,162,162,0,0,0,254, + 224,0,0,0,0,0,183,187,183,0,162,78,0,122,94,0, + 0,187,234,171,59,63,36,105,63,105,105,105,63,105,208,63, + 105,105,63,105,105,105,105,36,105,105,63,57,192,214,99,64, + 214,192,192,234,145,158,145,214,35,214,214,158,214,214,145,214, + 214,214,158,235,158,214,158,214,214,64,214,214,158,139,158,158, + 218,218,218,134,134,88,218,218,218,134,88,218,88,218,218,218, + 218,218,218,218,218,218,218,218,218,218,218,218,218,218,153,218, + 218,153,153,218,153,240,241,137,226,26,247,184,153,153,153,153, + 153,153,184,184,184,153,184,153,153,153,153,153,153,153,153,153, + 58,58,153,153,153,153,153,153,153,159,159,153,153,236,153,153, + 236,159,153,153,184,153,153,153,153,236,134,153,153,236,153,153, + 153,153,153,153,153,236,153,153,236,143,153,153,236,58,134,236, + 153,153,153,159,159,159,153,153,184,159,184,159,159,240,159,159, + 159,159,58,159,184,159,184,159,159,240,240,240,240,240,159,159, + 159,58,184,184,159,184,184,159,159,159,240,159,159,159,153,159, + 184,184,184,159,159,159,134,153,159,159,159,159,159,159,159,159, + 159,159,159,159,159,159,159,159,159,119,108,108,38,222,55,228, + 228,55,228,197,226,50,50,37,175,73,14,206,233,50,40,187, + 162,50,162,0,14,37,0,142,22,50,0,229,33,38,38,151, + 133,46,0,162,111,223,44,29,223,142,142,34,142,64,47,34, + 14,241,142,162,40,200,79,84,166,222,190,47,212,42,78,29, + 229,241,223,24,24,46,209,44,26,17,190,219,12,26,15,50, + 151,221,0,162,0,0,0,221,0,29,44,183,0,212,95,95, + 40,203,75,50,187,0,162,162,50,162,162,162,37,50,215,151, + 229,135,15,229,229,20,20,29,20,151,15,239,168,31,206,73, + 206,46,64,35,29,212,162,0,0,122,227,0,0,166,221,42, + 219,122,111,0,166,126,0,42,122,94,212,168,104,150,219,150, + 221,219,26,0,133,133,20,44,35,44,95,162,50,26,26,0, + 95,37,92,183,34,0,0,46,164,50,171,44,59,187,221,183, + 46,162,162,122,183,0,50,183,34,0,0,0,162,0,50,162, + 64,29,44,34,64,64,59,64,29,44,44,34,44,34,44,34, + 20,171,40,0,150,12,122,122,0,0,0,0,122,171,20,192, + 29,34,225,34,29,245,0,0,0,0,0,0,122,0,0,0, + 122,183,122,0,122,162,162,162,162,162,0,187,99,171,225,95, + 183,94,183,183,166,111,78,162,162,0,0,0,0,162,0,26, + 215,219,162,42,163,162,22,61,0,162,162,0,0,0,166,214, + 224,0,0,187,150,132,214,183,162,0,78,111,219,42,221,0, + 182,44,44,225,40,63,105,105,105,105,105,63,105,105,105,105, + 63,63,36,105,105,63,191,125,171,214,64,67,44,139,234,214, + 96,205,158,214,214,214,214,145,214,214,235,158,214,214,158,49, + 158,214,158,214,158,214,214,64,158,101,158,214,234,64,158,214, + 218,218,218,218,218,218,134,88,218,88,88,218,218,218,88,218, + 218,218,218,218,218,218,134,88,218,218,218,134,218,218,218,153, + 218,218,218,153,153,247,35,137,92,183,247,240,218,153,143,236, + 153,153,153,153,159,134,58,184,153,184,184,159,153,58,153,153, + 153,153,159,159,159,159,153,159,153,153,159,153,153,236,153,153, + 153,153,153,236,159,153,236,153,134,236,236,143,143,236,143,153, + 236,153,153,153,153,143,236,143,153,143,236,153,153,236,153,153, + 153,153,153,236,134,236,159,153,153,159,159,184,159,240,240,159, + 153,159,153,159,236,153,134,184,159,159,159,159,159,159,159,159, + 153,58,159,153,184,159,184,184,240,159,159,240,240,159,159,240, + 159,159,153,153,159,184,159,153,153,159,159,159,119,159,143,159, + 159,159,119,159,143,159,159,119,159,159,159,83,173,228,55,55, + 79,38,79,21,190,50,22,22,249,113,14,10,92,200,14,221, + 0,183,163,50,14,50,0,183,209,50,122,133,102,55,151,135, + 129,103,163,50,46,223,200,44,46,142,29,229,229,15,229,15, + 171,47,0,190,162,221,221,104,221,215,246,104,50,50,50,163, + 50,164,46,22,163,104,226,34,12,26,47,122,12,26,245,162, + 135,20,15,229,151,151,229,133,133,229,151,212,183,15,29,227, + 0,0,0,183,227,78,122,0,162,0,0,0,50,50,0,59, + 229,20,20,223,20,34,223,29,253,47,221,0,162,92,206,73, + 73,168,46,64,29,29,50,0,0,0,122,187,0,0,221,215, + 132,215,122,0,99,0,42,56,37,50,226,226,141,219,219,219, + 221,0,122,47,38,171,34,35,47,35,47,0,50,42,42,0, + 59,59,67,132,0,162,0,22,254,192,40,163,50,84,50,47, + 133,200,162,162,0,162,50,0,122,132,47,254,162,0,163,224, + 44,171,44,34,47,224,224,59,44,44,44,44,44,44,44,44, + 29,171,94,42,8,12,0,122,94,122,0,0,122,214,29,192, + 15,171,192,29,171,15,78,0,0,224,254,0,0,42,122,0, + 0,122,122,0,183,0,0,0,0,224,64,44,59,75,224,59, + 99,166,0,122,219,166,162,212,162,0,122,0,162,162,0,219, + 183,132,166,183,17,221,209,162,187,162,162,0,122,224,64,99, + 99,0,0,99,234,166,64,215,122,0,99,224,166,122,94,122, + 171,214,64,44,59,105,217,105,63,63,105,36,105,105,36,36, + 36,63,96,152,192,44,99,99,139,67,214,49,158,67,171,145, + 64,67,64,214,235,214,235,158,214,214,214,214,214,235,192,35, + 158,214,158,35,158,49,158,214,158,35,234,214,158,158,158,158, + 218,218,88,134,88,88,218,88,134,218,218,88,218,88,218,88, + 218,88,218,88,218,218,218,218,134,88,218,218,218,218,218,153, + 218,218,153,218,218,247,75,137,92,42,247,184,153,218,153,143, + 153,153,153,153,153,184,184,184,184,153,153,153,236,153,143,236, + 153,153,153,153,153,153,159,153,153,236,153,236,143,134,236,143, + 143,236,159,134,236,153,153,236,143,236,143,143,153,143,236,236, + 134,236,159,143,236,236,153,143,143,143,153,143,143,153,153,236, + 159,134,236,153,236,153,236,236,159,153,134,159,159,159,153,159, + 159,153,159,153,159,184,58,153,159,159,159,159,159,159,153,159, + 159,153,153,58,184,134,159,159,240,240,159,159,159,240,153,159, + 153,159,159,159,153,159,153,159,159,236,159,159,159,143,159,159, + 159,159,159,159,159,143,143,159,159,119,119,83,173,55,129,251, + 55,103,55,197,177,50,14,0,206,14,14,226,164,223,164,221, + 40,162,162,0,22,37,0,0,226,50,142,135,38,197,38,129, + 135,135,20,50,162,46,59,104,47,253,172,229,229,229,229,129, + 151,229,0,50,0,0,221,0,122,162,221,212,0,50,37,0, + 0,0,0,221,0,0,0,150,26,12,162,78,26,26,171,0, + 20,135,186,151,186,133,151,38,38,133,102,227,0,0,0,0, + 0,0,0,78,162,183,0,111,47,47,44,64,78,0,0,221, + 29,253,29,35,223,223,34,200,162,0,0,0,0,0,164,73, + 73,31,206,241,64,171,20,212,0,0,0,0,141,183,166,219, + 224,95,150,40,0,0,162,104,164,215,166,26,150,64,44,245, + 95,42,0,34,151,29,29,44,64,44,20,0,162,0,0,0, + 200,35,47,59,111,34,227,163,47,245,37,14,126,178,241,95, + 245,171,163,50,50,22,37,162,64,59,152,152,163,50,50,166, + 64,20,44,34,224,111,224,59,64,59,200,47,35,47,47,64, + 64,171,221,0,162,162,0,0,163,162,122,0,0,171,95,239, + 95,95,47,59,99,35,0,0,42,186,186,171,221,0,0,0, + 0,162,50,163,163,162,0,0,0,64,47,64,99,59,64,64, + 64,64,111,122,183,166,0,50,162,0,219,0,50,0,0,132, + 17,166,17,150,132,162,22,162,254,162,162,42,99,35,224,99, + 35,132,0,162,99,64,95,0,0,0,219,17,122,42,221,122, + 225,44,44,44,94,105,120,105,105,36,105,63,225,192,57,152, + 192,225,214,99,67,145,101,192,139,158,158,44,158,214,49,49, + 214,235,158,158,214,214,214,214,214,214,214,214,214,158,158,214, + 158,235,158,235,154,64,158,158,158,145,178,214,214,64,235,214, + 88,88,134,88,88,218,88,218,88,88,218,88,218,88,218,88, + 218,88,134,88,218,88,218,88,218,218,88,218,88,218,218,218, + 218,218,153,218,218,247,200,190,104,162,247,240,153,153,153,218, + 153,236,134,153,153,153,153,153,159,159,153,159,153,159,143,153, + 236,143,153,153,236,153,153,153,153,143,153,134,143,236,153,153, + 143,236,236,153,159,236,134,236,143,153,236,143,143,143,236,143, + 236,143,159,153,143,143,153,236,236,143,236,236,143,236,153,143, + 236,153,236,153,153,143,143,143,236,236,153,153,236,159,153,159, + 159,153,159,153,159,159,159,134,184,159,184,159,184,159,184,153, + 159,159,159,159,184,184,159,159,159,159,159,159,159,159,236,159, + 236,159,236,159,153,159,159,153,159,236,159,159,159,159,143,159, + 143,159,143,159,159,159,143,159,159,159,159,108,229,223,29,251, + 55,55,103,197,190,37,22,0,37,200,142,14,10,221,46,215, + 162,162,104,48,50,22,162,0,104,0,151,212,0,200,223,135, + 48,226,223,35,0,59,75,46,200,223,20,229,229,229,135,151, + 151,151,34,0,212,164,50,137,162,162,137,167,0,221,50,215, + 0,162,162,94,0,0,0,254,12,12,37,94,17,17,171,0, + 142,223,15,229,15,15,15,151,15,135,38,212,0,122,122,122, + 122,42,56,42,50,0,95,59,99,59,59,47,44,200,0,0, + 94,223,223,241,44,241,94,0,0,0,0,162,162,0,0,0, + 94,92,73,206,84,47,245,186,75,162,162,59,141,95,221,183, + 254,224,99,99,166,50,37,221,42,254,44,15,15,229,186,102, + 0,26,183,44,29,20,29,34,44,34,20,78,162,26,42,42, + 166,142,47,29,15,245,44,94,47,133,29,75,97,209,37,0, + 200,171,20,0,50,37,50,162,44,47,59,29,44,111,163,227, + 99,29,44,64,75,163,59,59,47,59,224,44,44,99,35,59, + 95,75,59,40,162,50,162,162,162,122,50,78,0,155,47,0, + 162,0,162,162,132,44,0,0,221,192,15,245,171,183,0,0, + 94,241,241,22,162,122,0,0,0,64,99,95,47,59,47,59, + 59,64,59,59,224,219,0,162,162,0,219,0,162,122,122,141, + 150,95,132,132,122,61,14,122,122,162,162,78,99,99,224,111, + 109,64,17,42,0,122,26,0,0,0,183,219,122,183,50,183, + 235,64,99,99,187,244,244,120,105,105,245,192,44,64,64,67, + 225,211,225,214,214,214,67,234,44,158,158,158,214,158,139,158, + 214,35,214,214,214,214,214,214,235,214,235,214,214,214,214,235, + 158,35,158,158,158,158,158,214,214,235,235,214,158,214,158,158, + 218,218,88,134,88,218,88,218,88,88,218,88,88,88,218,88, + 88,88,218,88,218,88,134,88,218,218,88,134,218,218,88,134, + 218,218,134,218,153,247,75,168,92,50,247,184,153,218,153,153, + 143,153,153,236,236,134,236,159,153,153,236,134,153,236,153,143, + 153,153,236,153,159,236,159,153,153,236,236,236,236,143,143,143, + 153,143,153,153,236,236,143,143,153,143,143,143,143,236,143,236, + 143,236,143,143,153,236,143,143,143,143,143,143,236,143,143,236, + 153,143,143,143,143,153,153,236,153,153,153,236,134,236,159,236, + 153,58,153,153,236,153,153,58,153,134,153,153,153,159,153,159, + 159,153,153,153,58,184,134,159,159,240,159,159,153,159,159,159, + 159,153,159,236,159,153,153,159,153,134,159,143,159,143,159,143, + 159,143,159,159,159,143,159,119,143,236,58,83,103,48,31,55, + 18,38,79,72,226,22,209,241,24,92,14,22,37,0,183,212, + 29,228,55,55,190,50,162,163,241,162,15,37,0,0,0,0, + 50,163,163,227,75,47,97,46,35,226,29,229,229,228,151,103, + 151,229,229,126,162,50,0,137,221,0,37,162,0,122,162,94, + 0,162,37,94,162,221,0,95,26,122,50,162,26,26,34,0, + 163,241,20,20,135,151,229,133,229,151,133,40,26,12,17,12, + 26,78,0,162,0,122,219,0,0,42,42,122,59,15,0,122, + 122,95,35,163,94,0,0,0,0,0,162,0,0,0,0,0, + 0,0,0,50,206,73,178,151,100,133,241,212,221,0,0,78, + 166,42,0,0,162,40,29,15,245,186,229,20,245,15,15,47, + 0,122,0,171,20,44,29,20,29,142,200,0,122,224,219,42, + 0,126,59,44,44,171,47,122,26,171,29,35,224,200,50,0, + 162,29,171,162,163,37,78,0,224,227,0,132,126,0,187,122, + 64,29,34,44,47,126,224,200,224,111,75,200,97,111,212,50, + 37,203,226,104,0,162,50,50,162,162,0,0,0,219,122,162, + 162,162,162,0,0,227,0,0,192,171,34,34,34,44,187,78, + 22,241,22,221,0,0,0,0,0,224,47,47,99,224,99,64, + 47,59,99,64,224,183,0,0,162,122,141,0,162,0,0,0, + 162,183,132,122,163,209,50,0,0,0,162,0,0,187,95,224, + 95,224,59,111,26,12,26,42,0,109,99,225,26,50,221,0, + 192,192,44,44,246,210,96,171,225,214,235,214,235,158,158,99, + 192,235,171,158,158,158,214,158,214,214,158,214,64,214,214,214, + 7,235,49,49,49,235,214,214,235,49,214,214,214,214,158,158, + 158,158,214,145,214,235,235,214,158,158,158,158,158,158,158,158, + 88,88,218,88,88,88,218,88,88,218,88,88,218,88,88,88, + 218,88,88,88,88,218,88,218,88,134,218,88,218,88,134,88, + 218,218,218,218,218,247,75,73,104,78,247,134,153,218,143,143, + 218,153,143,134,236,159,153,153,153,159,236,236,143,153,143,236, + 153,143,143,153,153,236,159,236,134,143,143,143,143,236,143,143, + 153,236,143,153,153,236,236,143,143,143,218,236,143,143,143,153, + 236,236,236,236,143,143,236,236,236,236,143,143,236,236,236,143, + 143,153,236,236,143,236,153,143,236,153,153,236,153,153,153,153, + 153,236,153,153,236,236,153,159,58,159,159,159,236,159,153,153, + 58,159,236,153,153,58,134,159,153,153,153,159,153,134,153,153, + 159,153,153,153,159,159,134,159,236,236,159,159,159,159,159,159, + 159,159,143,143,159,236,134,159,159,143,58,108,151,37,222,137, + 228,55,220,242,223,129,222,92,22,10,14,50,50,203,222,55, + 103,229,129,229,55,75,46,142,209,40,29,50,221,162,221,122, + 212,246,162,0,44,142,166,59,75,75,142,142,172,129,229,151, + 129,151,38,229,183,162,122,0,94,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,221,122,162,162,0,0,0,122,221, + 75,241,20,29,34,20,171,133,229,186,38,166,42,26,219,219, + 122,122,122,122,122,42,219,26,42,132,219,42,183,59,0,183, + 50,183,183,0,122,0,0,122,122,0,122,122,56,0,122,122, + 0,0,0,0,221,212,37,22,223,151,133,20,46,95,50,163, + 95,126,59,44,171,25,102,186,245,171,171,229,34,183,122,0, + 0,0,78,15,171,34,34,34,126,219,224,224,59,95,42,0, + 122,0,221,126,59,34,111,254,166,42,224,64,59,64,109,183, + 59,24,44,224,183,162,122,0,0,0,0,0,0,0,0,0, + 59,44,64,35,47,183,183,50,163,212,163,37,203,37,40,164, + 37,241,46,104,162,0,0,162,162,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,171,34,64,64,44,34,44,59, + 162,183,0,0,0,122,122,0,0,182,64,59,59,95,59,99, + 47,59,47,227,0,0,162,0,0,122,187,0,0,0,0,162, + 0,221,122,50,22,50,42,42,162,122,162,183,162,162,0,122, + 122,183,183,221,225,158,44,17,0,64,34,192,254,162,162,162, + 192,34,99,95,0,145,214,182,225,99,64,214,235,171,234,158, + 152,158,234,158,171,158,158,158,234,214,49,235,235,235,7,235, + 49,7,49,49,235,49,214,49,235,49,235,214,214,214,49,214, + 214,235,235,214,158,158,158,158,158,158,158,214,158,158,158,214, + 88,88,218,218,88,88,88,88,88,88,88,88,88,218,88,88, + 88,88,218,88,88,88,88,218,88,218,88,218,88,218,88,218, + 88,218,218,218,134,240,241,190,104,42,247,153,143,218,218,153, + 153,143,153,236,153,143,153,236,159,153,153,153,153,143,153,143, + 143,143,134,153,236,134,236,153,236,236,153,143,143,143,236,207, + 143,143,236,143,134,153,143,143,218,143,236,143,143,236,143,143, + 143,134,153,153,153,236,143,143,143,143,236,143,143,143,143,159, + 236,236,153,153,236,143,236,236,134,143,143,153,143,236,143,236, + 143,159,143,236,153,153,153,236,153,153,153,153,153,236,236,236, + 153,236,153,159,236,153,58,153,236,58,159,236,159,58,159,159, + 236,153,159,143,236,236,159,143,159,134,236,143,236,159,143,143, + 159,143,159,159,236,159,143,159,143,159,236,108,33,162,50,50, + 164,223,104,142,29,123,177,222,37,104,164,203,142,177,172,104, + 200,200,200,59,104,47,104,200,95,122,163,0,166,212,183,183, + 40,50,227,0,122,122,122,215,40,221,122,42,111,126,40,95, + 40,47,95,95,219,26,122,183,221,221,183,42,122,122,26,40, + 183,221,56,56,42,56,42,183,42,221,42,183,183,183,183,42, + 166,50,95,224,97,200,200,59,99,47,29,150,150,150,12,219, + 219,219,17,12,150,150,17,150,166,26,183,183,162,183,166,182, + 47,221,122,183,166,243,254,254,254,254,254,99,254,64,254,141, + 132,132,183,219,166,132,132,132,183,219,166,95,59,59,99,29, + 44,34,44,34,142,47,47,59,47,47,47,99,219,187,150,132, + 219,187,150,59,47,59,111,183,227,224,224,59,95,183,122,122, + 219,187,219,122,187,187,183,187,219,224,187,183,187,111,59,59, + 224,109,59,75,162,42,183,221,122,122,42,42,42,122,187,219, + 150,109,187,132,219,26,111,17,95,111,111,200,200,47,200,47, + 47,224,163,239,187,183,183,187,183,42,42,42,183,183,219,219, + 219,166,254,166,132,219,42,219,44,44,99,35,44,47,47,44, + 47,219,183,42,42,42,42,42,42,111,224,111,111,111,224,59, + 224,109,111,111,187,162,122,187,42,219,219,122,122,122,122,42, + 42,219,42,163,111,219,183,183,183,219,219,42,183,219,183,122, + 122,0,122,42,239,111,187,162,42,162,187,99,111,183,221,0, + 187,183,0,0,0,234,235,214,68,158,171,171,158,234,154,158, + 158,35,139,91,35,35,235,35,64,35,64,59,26,91,67,99, + 214,29,158,158,158,158,158,214,158,214,214,214,235,49,235,49, + 214,158,158,214,158,158,158,158,158,158,214,214,235,214,214,158, + 88,88,218,88,88,88,88,88,88,88,88,88,88,88,88,88, + 88,88,88,88,88,218,88,88,218,88,218,218,218,218,88,218, + 134,88,218,218,153,247,200,92,164,221,247,153,218,218,218,218, + 218,143,143,143,153,236,153,153,153,134,236,143,236,143,143,143, + 236,143,143,236,143,236,236,143,143,143,236,236,143,143,143,143, + 143,143,143,236,236,236,236,236,143,143,236,236,143,236,143,143, + 143,236,143,143,143,143,143,153,236,143,236,153,153,153,143,153, + 134,143,143,143,236,143,236,143,236,236,143,236,143,236,143,236, + 143,236,134,236,143,236,134,236,236,236,143,159,134,153,134,236, + 134,159,236,153,143,159,153,159,153,134,236,153,153,236,153,153, + 236,134,159,159,143,236,159,236,159,153,159,143,236,159,159,143, + 159,159,236,159,143,159,236,159,143,159,159,119,108,119,38,95, + 94,162,162,162,0,162,221,0,50,212,37,37,212,50,50,50, + 50,50,94,50,37,221,0,0,0,190,118,86,22,164,164,37, + 203,22,241,14,177,164,50,0,0,0,48,137,37,0,50,164, + 22,14,14,73,206,138,249,0,0,162,0,212,73,92,22,22, + 22,164,164,164,203,37,164,22,212,0,0,0,94,50,239,50, + 183,50,183,50,183,221,183,162,221,50,162,221,162,212,246,183, + 50,183,183,94,183,183,50,94,162,162,94,212,162,0,162,94, + 78,78,50,50,50,94,94,212,183,239,215,227,40,221,0,0, + 94,162,94,221,94,162,221,162,246,183,50,94,78,0,221,0, + 0,0,0,0,0,0,0,0,0,0,0,162,94,94,162,221, + 0,162,0,0,0,162,162,162,162,0,0,0,162,162,122,162, + 221,162,0,162,246,221,183,50,94,94,162,162,162,94,162,187, + 183,94,219,0,0,0,162,162,162,94,162,221,162,221,122,162, + 162,0,0,0,0,0,0,0,0,221,0,221,0,162,162,183, + 221,78,122,122,0,221,122,162,94,221,183,78,42,42,183,42, + 42,183,183,183,183,221,42,162,183,94,122,122,122,162,42,42, + 162,42,183,78,122,221,183,162,183,162,122,0,162,122,122,122, + 162,122,0,0,221,122,0,221,78,183,42,122,42,122,221,56, + 122,122,122,78,183,183,42,78,221,78,78,122,122,78,42,122, + 122,122,122,122,0,0,0,122,183,78,78,162,78,78,42,122, + 0,0,0,122,182,152,158,24,44,139,61,111,163,42,42,162, + 162,42,42,42,26,26,26,12,26,12,26,12,26,122,122,162, + 78,122,162,50,91,163,61,59,64,35,139,49,158,158,158,158, + 158,158,158,158,158,158,214,214,49,214,214,214,101,235,214,158, + 88,88,88,88,88,218,88,88,88,88,88,88,88,88,88,88, + 218,88,88,88,88,218,88,88,88,88,88,88,218,88,218,88, + 88,134,88,88,218,240,59,73,104,91,240,153,153,153,218,143, + 153,218,143,153,153,153,153,236,236,236,143,236,143,143,143,143, + 127,143,236,143,153,143,153,153,143,143,143,143,218,218,143,207, + 207,143,236,143,143,143,143,207,207,143,143,143,143,143,236,236, + 143,143,236,207,143,236,218,143,143,153,143,143,236,143,143,236, + 236,236,236,236,143,236,143,236,143,143,236,153,143,143,236,143, + 127,143,143,143,143,236,143,236,134,153,236,143,143,236,143,153, + 236,236,134,236,159,236,236,143,236,236,134,236,153,153,143,153, + 236,159,143,236,159,153,143,159,143,159,143,159,159,143,143,119, + 159,143,143,143,159,143,143,143,119,134,236,159,119,240,83,133, + 241,226,241,226,221,162,94,0,14,73,84,84,84,84,84,84, + 73,84,92,84,73,40,0,221,0,250,250,55,14,168,222,168, + 206,31,31,123,237,130,47,0,162,50,18,237,206,92,22,249, + 249,249,249,249,249,11,11,42,0,212,221,212,249,233,113,73, + 10,113,206,73,209,84,73,168,177,0,162,221,241,200,241,200, + 200,35,22,200,241,200,75,59,37,223,212,94,94,40,75,22, + 224,75,59,35,22,75,224,75,59,224,24,48,0,246,50,40, + 187,126,166,166,126,111,126,187,126,163,109,97,142,221,95,122, + 47,50,126,163,163,75,200,97,163,163,239,50,50,212,212,162, + 162,203,40,212,79,164,162,162,50,50,50,50,162,162,94,241, + 0,162,183,50,162,163,163,187,111,163,187,50,187,183,111,111, + 104,94,183,221,212,91,163,111,163,187,163,111,163,94,50,163, + 50,40,162,0,162,183,163,187,187,187,163,187,126,187,187,187, + 187,111,50,104,162,183,94,163,111,187,42,183,187,187,126,187, + 187,187,187,42,203,0,0,183,203,42,26,50,187,163,111,163, + 187,187,91,26,50,183,162,0,0,239,42,50,26,42,42,94, + 162,162,162,183,162,78,162,0,0,0,221,183,183,219,50,42, + 187,50,42,26,26,42,219,122,0,0,0,94,221,26,42,42, + 187,42,91,42,42,162,78,42,162,0,0,0,162,162,78,42, + 42,42,42,42,78,78,42,162,78,162,162,0,0,0,0,0, + 221,162,26,234,245,245,224,26,26,26,26,26,12,8,8,8, + 7,8,7,235,7,235,7,7,7,7,7,7,235,7,7,7, + 8,101,101,8,8,8,12,8,8,91,111,61,50,162,50,187, + 61,35,139,35,35,214,214,214,49,214,214,158,49,49,49,145, + 88,88,218,88,88,88,88,88,88,218,88,88,88,88,88,88, + 88,88,88,88,88,88,88,218,218,88,218,88,134,88,218,218, + 88,134,88,218,218,240,35,92,164,162,153,153,218,218,218,218, + 218,218,218,143,236,153,143,134,236,134,236,236,143,207,218,218, + 127,127,143,153,153,236,236,236,236,143,218,207,143,207,143,143, + 236,143,236,236,236,143,143,236,143,143,218,207,143,143,143,143, + 207,143,236,143,207,236,143,236,143,236,236,143,236,236,143,143, + 143,153,134,236,143,153,143,236,236,143,143,236,143,143,236,236, + 236,143,143,89,143,236,143,143,127,236,143,236,236,143,236,143, + 236,143,236,143,143,153,143,153,134,236,134,236,143,159,159,236, + 143,159,236,143,236,159,143,159,143,159,236,143,159,119,143,143, + 159,159,119,143,119,159,236,143,143,236,236,143,236,58,240,151, + 50,142,75,223,50,183,50,221,24,168,168,73,130,130,130,233, + 233,233,130,206,222,50,0,162,0,43,73,73,123,31,249,31, + 31,228,123,31,62,130,212,94,40,163,14,233,62,237,249,237, + 167,62,237,237,31,93,11,42,0,212,162,94,62,175,233,249, + 249,31,233,249,233,233,249,233,168,0,50,0,203,241,22,59, + 22,59,209,59,209,200,59,200,22,177,40,94,162,40,241,35, + 59,75,59,241,200,241,200,75,59,59,104,177,0,239,50,223, + 224,224,111,224,224,224,200,224,224,95,111,61,177,221,183,0, + 239,212,163,163,163,22,22,37,22,163,40,50,50,241,104,221, + 162,163,22,23,98,137,162,50,50,50,162,94,50,162,94,177, + 0,0,221,203,111,111,163,126,183,163,187,163,224,75,111,111, + 226,94,162,122,104,50,163,187,163,97,111,111,111,97,187,111, + 61,46,212,162,162,166,75,163,163,126,163,187,163,163,163,111, + 111,111,75,48,162,163,40,163,111,97,111,163,163,187,37,111, + 111,111,111,187,104,122,78,227,142,50,187,111,187,187,111,111, + 163,187,126,187,111,163,183,0,0,200,42,163,163,50,187,163, + 50,163,42,50,26,50,212,162,122,0,163,50,91,187,163,187, + 163,187,37,163,111,91,187,50,162,0,0,95,94,187,50,187, + 163,126,50,187,163,26,187,187,50,162,0,0,239,50,187,50, + 187,187,187,187,163,187,42,50,26,162,183,0,0,0,0,187, + 95,50,99,158,139,139,91,8,67,7,67,7,49,235,7,7, + 235,7,7,235,7,49,67,49,49,67,7,49,235,7,49,7, + 7,7,7,7,67,7,67,101,67,67,8,67,101,101,8,8, + 8,8,8,8,211,139,49,139,187,91,109,49,49,49,49,49, + 88,88,88,88,88,88,88,88,88,88,88,88,88,88,100,88, + 88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88, + 218,88,218,88,218,240,75,92,104,91,240,153,218,88,218,127, + 218,218,127,143,143,236,236,143,153,236,143,143,207,143,143,143, + 143,218,143,143,143,143,153,143,127,207,143,143,207,143,143,236, + 143,143,143,143,143,143,236,143,207,143,236,143,207,143,207,143, + 143,143,143,143,127,127,143,207,143,143,143,143,143,143,236,236, + 236,143,143,153,236,143,236,143,143,236,143,143,236,143,143,143, + 143,207,143,143,143,143,143,236,236,143,236,143,143,236,134,236, + 143,236,153,236,236,143,236,89,143,143,143,143,236,143,143,153, + 236,143,153,143,236,143,236,143,236,236,143,236,143,236,143,236, + 143,143,143,143,143,236,143,143,236,143,143,143,143,236,108,151, + 190,46,59,29,215,162,183,0,84,31,233,222,31,31,233,222, + 31,233,31,113,65,215,162,162,0,92,249,31,31,123,31,233, + 130,130,168,73,31,31,95,183,50,42,22,41,237,237,220,216, + 220,216,220,216,220,93,11,42,0,183,0,50,216,62,62,62, + 41,41,41,167,167,167,62,41,135,0,183,122,46,24,24,35, + 46,35,241,209,241,209,35,35,35,226,50,183,26,75,241,35, + 75,75,22,35,209,75,35,59,35,241,24,48,0,227,183,223, + 200,200,35,224,200,35,200,200,35,224,200,111,79,50,94,0, + 104,37,37,37,50,163,163,163,203,22,163,75,203,104,40,78, + 0,40,203,137,104,122,50,163,50,183,50,163,50,50,246,129, + 0,78,94,46,200,75,111,97,97,75,224,75,109,111,200,37, + 226,246,215,0,172,91,75,75,75,75,75,241,224,75,163,75, + 75,142,163,183,78,111,241,97,163,61,97,97,97,97,224,111, + 97,97,95,48,122,215,246,200,61,97,61,187,111,97,111,111, + 163,126,163,163,46,0,94,183,47,91,111,111,61,111,61,163, + 187,163,187,50,163,95,0,162,0,47,50,163,42,163,187,50, + 187,61,91,163,187,42,200,183,0,122,104,42,50,187,91,163, + 187,91,187,26,50,183,91,126,221,122,0,142,42,163,187,187, + 187,187,187,50,91,50,187,50,183,78,122,0,95,111,50,187, + 163,163,163,91,91,163,111,50,187,163,162,0,0,42,78,166, + 224,166,101,8,8,67,7,67,67,49,67,49,7,49,67,67, + 67,235,235,235,67,7,49,67,235,67,7,67,7,235,235,235, + 235,67,67,67,49,49,49,49,7,67,67,7,67,7,49,7, + 49,49,101,101,139,139,67,67,139,67,8,182,8,182,7,182, + 88,88,88,88,88,88,88,100,88,100,100,88,100,88,88,88, + 88,88,88,88,88,88,88,88,88,88,88,88,218,88,218,88, + 218,88,218,88,218,240,59,92,104,122,153,153,218,218,88,218, + 218,127,127,218,143,153,236,143,153,143,143,236,143,207,207,218, + 127,207,143,236,236,143,236,143,143,127,207,143,207,143,127,143, + 143,143,143,218,236,143,218,236,236,143,236,143,207,143,207,207, + 143,207,143,207,143,207,143,207,143,207,143,207,236,143,143,143, + 143,143,143,143,236,143,236,236,143,143,143,143,236,143,143,143, + 236,236,143,207,143,236,143,143,143,143,236,143,143,143,143,143, + 143,143,143,143,236,143,143,143,236,143,236,153,236,236,143,236, + 143,236,236,134,236,236,236,143,143,143,153,143,236,143,236,236, + 236,143,119,236,143,236,236,143,236,236,236,236,143,143,159,151, + 73,48,46,44,94,0,162,162,73,233,222,130,31,31,233,222, + 222,130,31,113,65,50,162,50,183,168,249,249,249,31,31,233, + 206,206,233,233,249,206,183,162,0,122,73,216,216,216,220,93, + 138,138,216,216,220,93,11,219,0,94,0,50,216,41,62,167, + 62,237,62,167,103,31,167,62,222,0,78,122,104,253,177,24, + 223,24,35,209,35,241,241,241,22,35,94,94,183,50,61,22, + 59,35,35,35,209,75,209,59,35,35,24,190,0,227,227,226, + 59,200,59,200,59,35,35,35,47,59,59,224,38,212,183,0, + 104,183,126,75,163,163,203,163,95,163,75,22,22,209,203,183, + 0,95,92,0,122,42,50,212,50,37,22,22,163,37,246,129, + 0,162,94,24,97,35,97,24,178,177,20,223,111,200,111,97, + 226,94,183,122,172,91,75,75,75,61,59,61,200,200,224,75, + 75,172,203,162,221,95,241,200,111,163,61,97,75,75,75,111, + 75,61,59,129,122,187,215,200,163,95,111,97,97,61,97,111, + 111,111,111,163,142,122,94,212,47,50,163,111,163,111,97,61, + 163,111,111,187,163,59,0,0,0,47,50,163,91,37,37,61, + 50,50,50,187,50,42,142,94,122,0,47,187,163,111,187,163, + 111,200,241,187,163,111,50,95,94,122,0,142,187,50,163,163, + 163,163,91,183,50,187,50,91,50,78,0,0,97,126,91,187, + 91,91,187,50,187,187,187,50,187,212,0,0,0,187,94,166, + 59,95,7,67,235,49,141,7,141,7,141,235,49,49,7,141, + 67,67,7,7,141,235,67,7,141,7,99,141,7,235,235,141, + 67,141,67,49,235,235,235,235,7,67,141,67,49,67,67,141, + 67,7,49,49,67,67,139,7,67,7,67,49,7,67,141,67, + 88,88,88,88,88,100,88,100,88,100,169,100,100,100,88,100, + 88,100,88,88,88,88,88,88,88,88,88,88,88,88,88,88, + 88,88,88,88,218,153,47,104,241,91,153,218,218,88,218,88, + 218,127,218,127,143,143,134,236,236,236,218,143,127,218,127,127, + 143,127,127,143,143,143,143,143,218,143,127,143,143,207,143,207, + 207,207,207,143,143,143,236,143,143,207,143,207,143,207,143,143, + 207,143,207,143,207,127,127,143,143,143,236,236,143,143,143,143, + 143,89,143,143,143,143,143,143,143,236,236,143,143,207,143,143, + 207,143,143,207,143,207,143,143,143,143,143,143,207,143,207,143, + 143,143,143,143,143,143,143,89,143,143,143,143,143,143,143,143, + 236,143,143,143,143,143,143,236,236,236,236,236,143,236,236,236, + 143,236,143,143,236,236,143,236,143,143,143,127,143,236,159,133, + 222,135,190,226,183,0,162,227,84,130,84,84,154,84,222,233, + 154,168,177,206,220,94,162,94,122,222,62,31,168,206,206,233, + 62,62,62,167,41,249,227,0,221,0,168,216,62,237,167,62, + 62,62,62,167,167,216,11,187,0,50,0,50,216,237,237,62, + 237,62,167,41,62,167,167,62,222,0,94,0,97,168,168,253, + 177,177,177,253,84,178,84,24,24,226,215,78,0,40,46,24, + 24,24,35,24,24,209,24,59,24,46,24,177,0,183,219,223, + 209,64,35,35,35,35,47,35,35,35,142,59,79,212,183,0, + 104,241,203,203,203,203,163,75,22,75,241,75,203,226,163,122, + 0,95,104,162,50,94,75,22,209,22,209,203,203,37,94,222, + 0,122,215,104,200,200,111,34,135,35,24,135,24,200,59,37, + 226,246,183,122,48,91,75,75,200,200,200,241,75,75,200,224, + 75,48,241,122,122,111,200,75,200,111,200,75,75,109,61,59, + 111,163,59,48,0,183,212,95,97,37,224,61,97,97,97,97, + 224,61,97,50,223,0,219,215,226,187,111,111,224,75,97,200, + 111,37,111,50,183,241,0,0,0,35,50,163,187,37,61,37, + 75,61,37,50,163,162,142,239,122,0,47,50,187,163,187,91, + 35,35,35,163,187,126,187,163,94,122,0,47,61,163,91,187, + 26,187,187,163,187,91,50,183,95,162,0,0,95,239,50,183, + 166,126,111,126,187,187,187,187,50,187,122,0,0,126,141,111, + 47,40,7,7,67,67,67,67,235,49,7,235,67,49,141,67, + 7,141,235,7,141,7,141,7,141,7,235,141,67,49,7,7, + 7,235,7,141,8,67,141,67,235,235,49,7,141,235,7,67, + 67,67,235,235,7,67,141,7,141,7,141,67,49,49,7,67, + 88,100,88,100,88,88,100,100,88,100,88,100,88,100,100,88, + 100,88,100,100,100,100,100,88,169,88,169,88,188,88,169,169, + 88,169,218,88,218,153,59,92,203,162,153,153,218,88,218,88, + 88,127,127,127,207,143,143,143,143,143,127,218,127,143,143,218, + 127,127,127,127,207,207,207,127,127,207,207,143,143,218,143,143, + 143,143,207,127,207,143,207,143,143,143,143,207,143,143,207,127, + 127,143,207,143,143,143,207,207,236,143,143,143,143,207,143,207, + 143,143,89,143,207,143,143,236,143,143,236,143,207,143,207,143, + 143,207,143,207,143,143,143,207,207,143,89,143,207,143,143,207, + 143,207,143,143,236,143,143,143,89,143,207,143,207,236,143,143, + 143,236,143,143,143,143,143,143,143,143,143,236,143,143,143,236, + 143,236,236,143,143,236,143,143,89,143,236,143,143,236,159,38, + 251,129,48,135,212,162,42,200,14,84,168,84,209,14,24,84, + 24,84,168,222,84,50,122,212,94,168,233,233,168,206,14,233, + 31,31,233,233,249,249,215,0,0,122,168,216,62,62,62,249, + 123,62,167,167,249,138,216,42,0,183,221,227,216,216,216,237, + 237,216,237,237,167,62,31,62,168,122,42,221,40,222,222,177, + 222,168,222,222,168,177,177,177,84,168,37,78,0,203,226,177, + 223,226,24,226,24,226,223,35,226,24,142,48,0,50,219,190, + 35,47,47,64,47,35,35,44,142,35,24,46,38,212,94,0, + 46,14,209,209,241,241,164,75,203,163,200,203,37,226,40,162, + 162,75,226,183,164,73,164,14,14,241,22,22,163,212,94,129, + 0,162,227,226,241,209,111,223,253,50,200,135,34,200,35,61, + 226,50,183,122,48,91,75,22,139,22,75,75,75,139,241,200, + 75,135,104,122,0,95,241,22,200,97,75,61,241,200,111,200, + 224,163,46,223,0,215,239,200,111,97,224,97,97,111,75,97, + 224,97,97,163,190,122,42,227,142,61,163,97,111,75,61,75, + 111,61,111,163,187,203,0,0,0,47,163,37,111,37,61,61, + 22,37,61,187,61,162,142,94,78,162,46,187,163,187,126,97, + 35,111,35,187,50,111,187,203,183,122,0,47,94,183,91,239, + 163,91,50,91,183,183,61,50,75,78,0,0,95,126,163,91, + 187,187,111,91,163,91,183,187,50,187,162,0,0,111,224,224, + 64,200,235,141,7,141,7,141,7,99,141,7,49,141,7,141, + 145,7,235,235,67,7,141,7,141,7,67,7,49,7,235,141, + 235,235,67,7,8,141,7,7,141,7,141,235,7,67,99,141, + 7,141,7,141,67,49,49,67,67,7,99,7,141,235,7,67, + 88,88,88,100,88,100,88,100,88,100,100,88,100,88,100,100, + 88,100,100,88,100,169,169,169,169,169,169,88,100,169,88,169, + 218,169,100,188,88,240,200,104,241,26,218,218,88,188,88,127, + 218,218,127,127,143,207,143,207,143,207,218,143,127,127,88,127, + 127,127,218,127,127,127,127,143,143,127,127,207,207,207,143,207, + 143,207,143,143,143,207,143,207,127,207,143,143,143,207,143,143, + 143,127,143,143,207,218,127,143,143,207,143,207,143,143,207,143, + 207,143,207,143,143,143,218,143,143,143,207,143,143,207,143,207, + 143,143,143,127,143,207,143,207,143,143,143,143,143,207,143,207, + 143,143,207,207,143,143,207,143,143,143,207,143,143,143,207,143, + 143,143,236,143,207,143,143,143,127,143,236,143,236,236,236,143, + 236,143,143,143,143,143,89,143,143,143,236,127,143,143,159,133, + 228,228,129,129,22,122,162,104,206,130,73,84,130,84,24,73, + 84,24,84,130,222,40,0,162,183,92,206,168,233,206,164,130, + 73,22,14,137,31,62,166,122,221,221,190,249,233,249,249,62, + 233,249,62,249,249,93,175,59,0,50,0,164,216,62,41,62, + 41,237,237,62,123,31,222,249,222,0,94,122,95,31,222,168, + 253,177,168,222,177,177,84,226,84,222,203,42,122,104,226,84, + 178,142,142,24,223,209,223,35,226,24,226,48,0,166,26,223, + 35,47,35,46,35,47,47,24,47,44,226,35,79,212,183,0, + 47,22,241,209,209,209,84,209,92,209,241,46,14,226,203,56, + 0,97,226,50,137,48,22,22,164,22,203,97,22,50,50,129, + 0,122,183,226,163,35,97,223,222,223,253,135,24,200,59,200, + 223,94,187,122,48,111,241,35,241,35,139,22,209,241,59,75, + 75,48,104,0,56,111,35,241,75,75,241,200,22,200,200,75, + 241,75,46,172,122,183,40,200,37,97,111,61,75,97,61,75, + 111,111,61,111,190,162,78,215,223,187,75,75,75,111,75,111, + 97,163,163,163,163,104,0,221,0,212,50,187,163,111,22,163, + 163,61,163,50,187,162,142,212,0,0,47,187,163,111,187,35, + 111,111,35,187,227,187,163,95,212,162,0,34,50,50,183,91, + 163,187,187,183,91,50,187,26,163,162,0,0,95,50,183,187, + 183,91,163,187,183,187,42,91,26,163,122,0,0,254,224,47, + 47,254,141,7,99,7,99,7,49,67,235,7,141,235,7,7, + 145,7,141,67,67,99,7,99,7,141,7,141,235,141,49,141, + 7,145,67,7,7,235,49,141,7,235,7,67,141,49,7,235, + 7,141,7,141,49,67,235,235,141,67,141,67,7,141,235,49, + 88,100,88,100,100,100,88,100,88,100,100,88,100,100,100,88, + 100,88,100,169,88,88,100,88,100,88,169,169,88,88,100,100, + 88,188,88,88,169,153,59,92,241,221,218,240,88,188,88,169, + 88,88,88,127,127,143,127,143,143,143,127,127,218,127,218,88, + 127,88,127,127,127,127,127,127,127,218,143,143,143,127,207,143, + 207,207,207,143,143,207,127,143,218,207,218,207,143,207,207,207, + 207,127,127,127,143,207,143,127,143,143,207,143,143,143,143,207, + 143,143,207,143,207,143,207,143,207,143,143,207,143,143,127,127, + 207,207,143,207,143,143,143,207,143,207,143,207,143,143,143,207, + 143,143,143,207,143,143,143,207,143,143,143,207,143,143,143,207, + 143,207,143,143,143,207,236,236,143,143,236,143,143,143,236,143, + 143,236,236,236,143,143,89,143,89,143,143,89,143,236,159,55, + 129,129,129,129,212,162,50,166,84,84,84,14,130,130,84,130, + 84,84,84,84,233,40,0,162,94,73,14,168,14,206,37,73, + 14,50,22,209,31,233,227,0,0,78,137,249,206,14,73,206, + 31,233,206,31,123,93,233,104,0,227,0,40,216,62,31,167, + 249,167,237,233,154,168,84,249,222,0,183,162,163,168,48,253, + 177,226,178,177,84,177,226,142,46,177,212,94,122,200,226,178, + 24,24,24,24,223,24,24,35,226,209,223,177,0,212,187,223, + 46,35,35,47,35,35,35,35,59,47,46,47,201,212,122,162, + 104,164,241,203,203,241,92,209,92,84,24,241,209,226,40,183, + 0,95,92,162,22,50,50,97,241,163,75,163,163,163,22,129, + 0,0,183,223,37,24,75,223,135,253,135,223,200,200,46,75, + 223,50,187,221,253,91,200,241,200,241,241,241,35,200,35,61, + 46,135,104,122,221,224,35,241,75,75,75,59,22,75,75,224, + 200,22,35,48,122,183,40,200,75,75,111,97,61,224,75,111, + 224,75,75,37,20,162,42,183,223,163,61,111,111,75,75,75, + 111,111,111,111,163,46,0,122,0,47,50,187,163,37,61,37, + 61,37,61,163,163,50,142,50,122,221,104,26,163,187,224,209, + 111,97,35,163,187,187,50,95,94,78,0,142,91,187,187,183, + 163,111,163,187,187,163,187,50,111,122,0,0,95,163,187,163, + 26,111,91,163,163,187,183,187,50,95,162,0,0,224,224,64, + 47,47,7,67,141,7,235,141,7,141,145,7,141,235,7,141, + 235,235,141,7,141,7,49,235,7,141,7,99,7,141,67,7, + 145,7,141,235,49,235,7,141,7,145,235,141,7,141,67,7, + 99,7,67,7,67,141,67,235,67,141,7,141,49,67,141,67, + 88,88,88,88,88,100,88,100,100,100,100,100,88,100,100,100, + 100,100,100,100,100,100,100,100,169,100,88,169,100,169,88,88, + 169,100,88,188,88,184,200,241,241,26,218,218,127,88,127,127, + 88,127,127,88,127,127,127,207,127,127,127,88,88,127,127,127, + 88,127,127,88,88,88,218,127,127,127,218,127,207,143,143,143, + 143,143,127,127,127,127,143,143,127,143,143,207,143,143,143,127, + 127,127,127,143,127,127,127,218,143,207,143,207,143,207,207,143, + 207,143,143,207,143,207,143,207,143,207,143,207,143,207,143,143, + 127,207,143,127,207,143,207,143,127,207,143,127,143,207,143,143, + 207,143,207,143,143,207,143,143,207,143,143,207,143,207,143,143, + 127,207,143,207,143,143,143,127,143,143,143,236,89,143,143,236, + 236,143,143,143,127,143,143,89,143,127,143,143,236,143,236,133, + 228,129,48,129,203,122,40,56,10,14,73,84,14,14,84,84, + 73,73,84,84,233,203,0,183,183,73,130,168,168,130,22,22, + 14,22,209,209,249,233,97,162,122,183,73,249,233,73,73,79, + 90,249,249,233,62,93,233,104,0,50,0,212,62,62,249,233, + 31,31,31,168,168,84,84,31,222,0,162,0,200,222,84,223, + 223,223,226,178,223,223,35,24,209,48,163,94,0,104,177,226, + 35,46,46,24,209,223,226,64,24,35,223,48,0,227,183,142, + 35,59,47,64,59,35,47,35,44,35,44,241,38,50,183,0, + 142,164,37,37,200,203,14,14,241,14,92,241,241,24,212,162, + 0,97,75,37,50,75,22,14,22,209,14,92,22,22,22,173, + 0,162,94,142,37,46,109,223,222,163,241,200,59,35,200,241, + 223,94,227,122,190,61,22,241,59,22,59,22,59,241,224,200, + 111,135,104,0,0,95,35,75,22,75,75,75,209,139,22,75, + 75,75,200,135,0,78,126,241,61,75,97,97,75,61,75,111, + 111,111,111,163,172,221,221,227,104,111,97,224,61,75,111,61, + 97,111,97,111,111,142,0,0,0,142,163,50,91,111,37,61, + 22,61,111,187,187,26,46,215,42,0,47,50,187,187,35,35, + 209,35,59,35,50,163,187,75,215,122,221,47,94,91,163,91, + 91,91,163,163,163,187,163,126,163,0,0,0,59,50,163,187, + 163,187,26,91,187,187,163,187,187,163,183,0,0,141,59,99, + 47,254,235,7,235,235,235,141,7,235,150,235,49,235,67,49, + 7,235,8,141,235,141,235,49,235,235,141,141,7,141,141,235, + 235,141,7,67,141,49,235,235,235,8,141,235,49,235,7,141, + 235,235,235,150,7,7,141,8,7,243,7,141,7,67,7,8, + 88,100,100,197,100,102,100,100,100,100,100,100,100,100,100,100, + 100,100,100,100,100,100,100,100,169,100,100,169,100,169,169,100, + 88,169,100,88,88,153,59,104,164,56,218,218,188,169,88,188, + 88,88,127,88,218,127,127,127,127,127,207,207,127,88,127,127, + 127,88,127,143,207,127,127,218,127,127,143,127,207,127,127,127, + 218,143,143,143,218,127,127,218,207,143,207,143,127,127,143,143, + 218,207,127,127,127,127,127,127,127,127,127,143,207,143,127,143, + 127,127,143,207,143,143,207,143,143,143,143,207,143,143,207,143, + 127,127,143,127,143,207,143,143,143,143,207,143,207,143,127,143, + 143,143,127,207,127,143,207,143,127,143,207,143,143,207,143,143, + 127,143,143,143,143,207,236,143,143,207,143,143,143,143,143,143, + 143,143,127,236,143,127,143,143,89,143,127,143,143,143,58,55, + 173,129,253,129,212,162,40,227,209,14,233,31,130,206,168,14, + 73,14,73,168,222,241,0,50,227,92,233,130,233,84,73,84, + 206,168,209,92,233,123,241,0,0,227,14,206,73,73,206,113, + 168,233,233,233,220,216,62,241,0,227,0,203,41,62,249,249, + 249,233,233,168,168,84,130,249,222,122,78,221,203,253,84,24, + 178,226,24,177,223,223,44,24,35,222,40,183,122,95,84,226, + 24,46,24,35,24,24,223,35,24,209,223,48,0,126,212,223, + 35,59,200,59,59,200,59,35,47,35,46,46,38,50,227,0, + 104,46,40,37,14,46,75,22,111,163,203,203,241,92,97,221, + 221,95,137,79,78,14,22,241,22,14,22,164,75,37,22,228, + 122,221,183,142,164,24,97,253,129,59,24,64,35,35,46,46, + 190,94,166,122,172,97,241,75,59,22,59,209,75,200,200,200, + 75,172,200,0,0,224,35,22,139,61,224,75,22,209,224,139, + 75,22,47,172,162,183,126,59,22,75,61,224,97,50,163,22, + 111,75,109,75,46,122,78,227,142,61,111,224,111,224,75,224, + 61,97,61,111,111,46,122,122,0,35,126,187,163,37,61,97, + 61,22,61,163,111,50,35,215,42,162,46,187,163,26,109,187, + 91,109,24,111,187,111,163,163,94,122,0,47,50,26,187,187, + 187,187,91,91,50,187,187,126,163,78,0,0,224,187,91,187, + 187,111,187,187,187,187,187,50,26,163,42,0,0,254,99,59, + 47,47,141,49,141,141,7,235,141,235,12,7,235,141,150,7, + 141,235,8,7,141,67,235,141,7,141,141,7,141,8,7,141, + 7,141,141,8,141,8,8,67,67,141,8,141,141,7,141,145, + 67,141,141,8,141,7,235,67,141,141,7,141,235,141,235,141, + 88,100,100,100,100,100,100,100,100,100,102,74,100,100,100,100, + 100,100,100,100,100,169,100,100,100,100,100,100,169,100,169,169, + 169,100,169,169,188,153,95,241,203,219,188,153,169,88,169,169, + 188,188,127,127,169,88,88,127,127,88,127,169,88,207,127,127, + 127,127,127,169,169,88,169,88,127,127,127,127,127,143,127,143, + 127,127,127,127,127,127,143,127,127,127,127,127,207,143,207,127, + 143,127,127,127,127,127,127,127,127,143,143,207,143,143,127,127, + 143,127,143,143,207,127,143,127,127,207,143,207,127,127,127,143, + 127,143,127,207,127,143,127,127,127,127,127,127,127,127,127,127, + 127,127,127,143,143,127,127,127,143,127,143,127,127,127,143,207, + 143,207,143,207,143,143,143,143,143,143,143,143,89,143,143,127, + 143,143,236,143,143,143,127,143,127,236,127,127,127,143,236,38, + 228,228,48,168,203,0,163,94,14,233,222,73,73,14,92,84, + 92,73,14,14,177,104,0,246,126,22,223,92,92,177,73,73, + 73,104,92,92,73,14,47,122,42,163,22,137,137,137,177,190, + 177,73,190,190,137,73,14,47,0,183,162,203,190,92,104,92, + 92,226,190,73,92,226,226,14,190,0,94,78,212,212,241,203, + 203,37,203,203,164,164,164,203,37,223,75,94,0,47,164,104, + 104,104,92,104,164,241,241,241,241,164,24,177,0,239,95,226, + 223,177,177,190,48,190,177,190,190,190,226,92,55,212,187,0, + 104,22,241,200,241,241,241,46,104,95,126,163,203,24,40,78, + 0,95,92,226,59,24,226,24,104,104,104,241,104,241,37,129, + 0,0,94,104,241,241,241,241,46,203,241,241,241,46,75,163, + 177,50,227,42,190,61,241,241,46,241,241,75,241,241,241,75, + 203,172,241,122,221,111,75,203,241,241,97,75,75,200,22,75, + 200,163,241,135,122,42,40,200,59,59,47,75,163,75,75,40, + 163,50,162,162,0,0,162,183,241,50,163,163,163,97,22,75, + 75,163,95,239,163,46,0,0,0,142,50,50,187,50,212,163, + 163,50,212,187,50,162,46,50,183,0,47,162,183,50,162,183, + 183,187,97,50,183,94,42,163,183,122,122,142,78,50,50,50, + 50,50,227,183,187,50,187,50,163,78,0,0,47,50,94,42, + 50,26,50,50,162,91,50,42,183,163,183,0,0,99,64,47, + 99,47,7,49,7,235,141,49,141,67,7,141,235,141,150,7, + 141,235,141,141,7,141,235,141,7,67,8,7,8,7,141,7, + 141,67,8,243,7,141,7,141,7,8,8,8,141,141,141,7, + 67,7,8,141,243,7,8,235,7,141,49,8,235,141,49,49, + 100,100,88,100,100,197,100,102,100,100,102,100,102,100,102,100, + 100,74,100,74,100,100,100,100,100,100,100,100,100,100,100,100, + 169,169,169,169,88,153,99,164,203,122,169,153,169,169,169,169, + 169,169,169,88,127,127,127,218,207,127,127,143,127,88,127,127, + 127,88,127,127,169,127,127,88,127,127,127,127,127,143,127,218, + 127,218,127,127,127,127,127,127,127,127,143,127,127,143,127,127, + 127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127, + 127,127,127,127,127,127,207,127,127,127,127,127,127,127,127,127, + 127,143,127,127,127,127,143,127,127,143,127,127,127,127,127,127, + 127,218,127,127,207,127,127,127,127,127,127,127,143,127,127,127, + 207,143,207,143,207,143,143,127,207,143,127,143,143,127,127,143, + 127,127,143,127,127,127,143,127,127,143,127,143,127,143,236,133, + 251,229,151,129,37,162,203,215,92,249,31,249,31,73,233,206, + 168,233,233,233,31,241,0,221,227,92,233,206,168,130,168,233, + 233,206,233,249,62,73,104,162,227,239,37,233,233,249,233,233, + 233,233,249,220,237,216,137,40,162,212,221,203,62,237,62,62, + 167,249,167,249,123,123,249,123,222,122,162,183,94,222,31,222, + 222,168,168,168,168,168,177,84,177,177,241,221,162,40,164,24, + 209,209,14,24,92,24,24,226,35,24,177,190,122,187,203,226, + 241,241,46,209,24,226,24,209,24,226,24,241,173,246,221,0, + 104,164,241,203,241,14,14,241,14,167,31,173,37,142,203,183, + 0,95,92,138,142,164,95,200,200,35,24,46,24,209,37,129, + 0,122,227,241,44,24,47,35,46,35,226,226,22,46,46,163, + 223,50,183,122,190,35,223,24,142,46,75,200,75,200,46,200, + 241,190,40,122,221,111,46,35,75,75,75,200,22,200,200,200, + 200,203,200,135,221,94,94,246,94,221,221,221,0,0,0,0, + 162,162,162,162,215,162,162,221,40,183,163,163,163,95,163,95, + 75,163,95,239,163,241,0,122,0,47,212,163,97,239,183,126, + 40,126,163,126,111,50,47,50,183,221,104,162,166,187,50,50, + 50,50,183,50,50,183,94,40,183,0,122,142,94,166,166,166, + 187,183,50,183,227,50,187,183,163,78,0,0,59,94,94,42, + 50,183,42,183,94,78,94,50,94,163,183,0,0,47,64,47, + 47,47,141,235,141,235,7,141,145,141,7,49,141,7,243,235, + 8,7,8,7,141,7,235,7,7,141,67,67,8,7,150,7, + 8,7,8,8,8,8,7,243,235,67,7,8,8,8,7,141, + 7,8,8,8,8,141,141,7,8,49,141,141,235,145,145,145, + 100,102,100,100,102,100,102,100,102,100,100,102,100,100,100,100, + 102,100,102,100,100,100,100,74,100,100,100,100,169,100,169,169, + 100,100,100,100,39,153,95,104,241,42,100,207,88,88,100,100, + 169,88,88,39,169,169,169,169,100,88,127,88,127,127,218,127, + 127,39,127,169,169,169,169,39,169,88,127,127,127,188,127,169, + 127,127,88,127,127,127,127,218,127,143,127,143,127,127,127,218, + 127,127,127,127,127,127,169,127,127,127,127,127,127,127,127,127, + 127,127,127,127,127,127,127,127,127,127,88,127,88,127,88,88, + 127,169,127,127,127,127,127,143,127,127,88,127,127,127,127,127, + 127,127,207,143,127,127,127,127,127,127,127,127,127,127,127,127, + 127,127,127,127,127,127,127,127,127,127,127,127,127,143,127,143, + 127,143,143,143,127,143,127,127,127,236,127,127,143,127,143,133, + 251,228,228,228,203,0,163,42,14,73,233,249,233,113,233,233, + 31,130,222,130,222,104,0,162,126,164,206,31,84,168,168,130, + 73,137,168,168,137,73,241,0,162,95,203,206,14,206,206,206, + 206,206,206,31,123,62,249,95,162,183,221,104,206,233,233,24, + 168,253,154,84,84,84,168,31,253,0,122,94,94,226,84,209, + 209,223,24,24,209,209,209,209,209,48,203,183,78,95,46,24, + 35,46,46,209,209,46,24,209,46,24,177,223,0,227,40,223, + 241,75,111,75,200,22,241,22,200,241,200,200,55,212,94,0, + 241,209,164,212,212,24,164,14,22,216,73,138,206,226,203,162, + 0,40,203,246,166,75,46,241,75,75,95,59,59,163,241,129, + 0,122,221,241,29,44,24,142,24,24,24,24,46,200,35,46, + 226,212,187,122,226,35,24,44,223,44,163,163,40,163,224,200, + 35,226,203,0,0,95,142,24,163,75,75,75,75,200,75,75, + 200,200,104,172,0,246,221,162,0,0,162,183,162,162,162,162, + 221,162,162,50,223,162,122,183,203,126,111,224,109,111,111,111, + 109,109,109,109,97,200,162,94,0,104,111,61,163,187,187,163, + 187,254,111,109,111,239,46,239,122,0,47,61,187,109,187,109, + 126,187,187,187,187,111,187,163,50,122,122,46,126,187,187,187, + 187,187,227,91,26,183,187,50,203,162,122,0,47,163,111,187, + 187,187,50,91,183,91,187,187,187,212,26,122,0,99,47,64, + 64,47,8,235,141,141,235,7,235,141,235,7,141,67,7,235, + 141,235,141,67,7,141,235,67,235,150,7,8,141,7,141,235, + 235,7,8,8,8,141,7,141,7,67,7,8,67,8,49,243, + 7,141,7,8,7,8,7,141,7,8,8,8,67,145,214,158, + 100,102,100,102,100,102,100,100,102,102,100,100,102,102,102,100, + 100,100,100,102,100,102,100,74,100,33,71,100,100,100,100,88, + 100,100,169,100,169,153,224,203,203,221,169,236,169,169,169,100, + 169,169,100,88,127,127,100,88,169,88,207,127,127,127,127,127, + 143,39,127,127,140,169,169,169,127,169,169,88,169,88,127,127, + 169,39,88,127,88,127,88,127,127,127,127,127,88,127,88,88, + 88,88,88,88,169,88,169,169,169,88,39,127,169,169,88,169, + 88,127,88,127,127,169,88,169,88,127,88,127,169,127,39,169, + 88,169,169,169,127,127,127,127,127,39,169,169,127,88,127,127, + 169,127,127,127,127,127,127,127,88,127,127,127,127,127,127,127, + 127,143,207,143,127,143,207,127,127,143,127,127,127,127,127,127, + 127,127,127,127,143,127,89,127,127,143,127,127,127,143,236,133, + 251,151,129,38,164,221,203,42,14,62,233,62,222,206,233,130, + 130,130,233,130,222,164,0,50,183,209,31,31,84,233,233,73, + 73,249,14,73,233,73,200,221,162,97,203,73,164,14,14,73, + 14,206,233,137,233,62,62,212,0,78,162,104,73,73,14,22, + 253,177,168,84,177,24,84,222,177,0,162,227,94,226,24,35, + 200,46,35,209,46,46,241,46,22,48,203,0,162,40,241,35, + 241,241,22,241,209,209,46,35,35,46,177,223,0,166,95,226, + 241,224,59,200,59,35,59,209,75,209,200,200,228,227,42,0, + 241,14,37,183,164,14,46,14,22,31,164,50,22,223,203,122, + 0,219,251,55,47,203,24,24,24,46,241,95,95,212,37,251, + 0,221,215,203,223,35,47,47,35,47,35,35,75,241,35,104, + 104,212,78,0,241,200,200,59,163,97,221,0,0,162,212,97, + 200,104,163,0,162,163,142,35,111,75,61,75,163,75,75,109, + 75,200,203,104,0,221,221,221,0,0,162,162,0,221,221,0, + 94,94,126,97,104,122,183,183,104,111,111,111,97,109,111,75, + 111,163,162,50,183,162,162,162,0,40,239,126,163,163,187,37, + 111,111,111,111,111,50,200,212,122,0,104,126,111,111,111,187, + 187,50,183,183,91,126,126,40,187,122,221,47,50,187,187,187, + 91,183,227,50,187,50,187,187,163,162,0,0,59,50,187,187, + 187,187,183,50,183,50,50,26,50,212,183,0,0,99,47,64, + 47,44,7,141,7,141,235,235,141,7,141,49,243,235,67,7, + 141,7,141,67,141,67,235,67,7,141,235,8,235,8,7,141, + 235,141,7,141,8,7,141,235,141,235,141,7,141,8,7,141, + 235,141,7,8,141,8,7,141,7,49,7,141,67,67,235,235, + 102,100,102,100,102,100,102,102,100,100,102,102,100,100,100,102, + 102,102,102,100,74,100,102,74,74,100,100,102,140,102,74,100, + 140,169,74,169,169,218,104,104,241,122,140,143,169,169,169,140, + 74,74,140,140,74,100,140,140,140,140,74,74,100,100,74,100, + 74,74,140,140,169,140,140,140,74,140,140,39,39,127,169,140, + 88,169,127,169,39,169,127,88,169,88,169,88,127,169,127,127, + 127,169,140,169,140,169,140,169,140,127,169,169,169,88,140,169, + 169,169,140,100,169,169,127,39,127,169,127,140,127,169,127,140, + 127,169,169,127,39,39,169,39,88,127,127,127,88,39,88,169, + 127,127,39,39,127,127,127,169,127,127,88,88,127,88,127,127, + 127,127,127,127,39,127,127,127,127,127,127,127,143,127,127,127, + 143,127,127,127,127,127,127,127,127,127,127,127,127,127,143,133, + 228,129,173,33,241,162,203,215,73,249,168,249,233,206,168,73, + 73,84,233,233,123,241,0,212,212,226,113,130,209,73,168,14, + 84,206,209,73,130,168,46,122,212,40,241,206,14,14,10,14, + 14,14,206,206,62,249,249,95,0,94,183,104,206,206,14,209, + 168,84,168,84,84,84,130,222,222,0,183,50,212,84,84,24, + 84,24,84,84,24,209,209,209,24,177,104,221,42,40,24,209, + 35,35,241,209,209,241,35,35,209,209,177,48,0,94,95,223, + 22,75,75,59,75,59,75,59,59,59,241,241,129,212,183,0, + 104,226,162,50,200,22,14,14,212,212,22,212,246,177,203,78, + 0,40,190,138,26,46,24,209,209,24,84,75,200,241,104,129, + 0,78,183,241,34,64,35,35,35,35,35,24,61,75,200,35, + 24,212,78,0,104,40,163,94,162,0,0,221,162,221,212,212, + 94,212,246,162,162,111,241,59,111,97,163,97,97,61,75,109, + 75,97,212,212,0,0,221,162,221,0,0,0,0,94,212,162, + 221,221,183,94,94,122,162,94,97,111,111,111,111,109,75,111, + 224,166,50,0,0,221,221,0,0,212,126,111,187,187,163,187, + 163,141,111,109,111,166,241,227,122,122,104,111,187,109,187,163, + 187,187,187,50,187,111,187,50,40,42,122,104,126,187,187,187, + 187,163,187,187,187,166,187,183,163,183,0,0,47,126,187,111, + 187,50,91,42,91,42,91,187,42,163,42,122,0,47,47,64, + 64,47,235,141,235,235,7,235,12,235,17,7,141,235,7,67, + 67,235,8,141,7,141,235,67,7,141,49,141,49,150,235,8, + 7,8,7,8,141,49,8,7,141,7,8,235,8,141,49,8, + 235,141,235,8,49,243,67,8,235,141,235,8,67,243,49,8, + 100,102,100,102,102,100,100,102,102,33,102,102,102,102,100,100, + 100,100,102,102,74,33,71,74,102,74,33,74,100,74,74,100, + 74,100,100,100,100,218,59,104,203,162,140,207,140,140,33,74, + 74,33,74,169,140,169,140,33,74,169,140,140,140,169,140,140, + 169,74,74,74,140,33,74,169,33,140,140,140,140,140,169,127, + 140,140,169,169,127,74,140,127,39,127,127,127,127,140,169,140, + 39,169,169,33,114,88,39,127,133,74,140,33,140,169,140,127, + 140,133,102,140,143,143,127,127,143,143,140,102,140,127,133,102, + 74,127,140,127,88,127,127,127,127,127,169,127,140,127,127,127, + 169,88,169,88,169,127,127,169,169,127,39,169,127,169,127,39, + 127,169,127,127,127,127,127,127,127,127,127,127,127,127,127,127, + 127,127,127,127,127,127,127,127,127,127,127,127,127,127,143,133, + 228,229,129,38,104,0,203,183,22,233,233,233,130,31,233,233, + 233,130,233,31,222,241,0,163,212,164,73,130,73,168,31,206, + 233,130,130,130,31,73,241,122,50,40,50,233,233,137,233,233, + 233,233,123,62,237,41,31,40,0,212,94,200,233,31,31,31, + 123,31,123,31,233,222,31,123,177,0,94,183,212,222,31,222, + 222,168,222,233,168,130,168,168,222,177,226,227,94,95,241,178, + 209,209,209,209,24,24,84,223,84,84,226,223,0,50,95,226, + 209,209,35,209,24,24,24,209,209,209,209,24,135,212,97,0, + 241,14,241,241,209,241,209,209,164,203,241,241,241,223,241,94, + 221,97,203,104,75,24,24,226,24,24,226,35,35,24,241,48, + 0,162,183,241,29,24,64,35,44,24,24,64,241,59,35,142, + 241,212,183,162,203,94,94,221,162,94,50,183,50,221,212,40, + 162,246,94,221,221,126,46,35,61,75,97,22,59,75,224,75, + 224,37,94,215,0,221,94,162,221,0,0,94,221,94,164,40, + 212,221,221,0,94,162,183,227,95,111,224,109,111,75,139,109, + 75,182,187,94,215,0,0,0,0,0,0,78,187,187,163,111, + 111,111,111,111,111,126,46,50,219,221,200,111,187,111,111,111, + 163,163,26,187,187,163,111,126,166,42,122,47,50,111,111,187, + 26,111,187,61,183,50,187,183,163,162,122,0,47,163,91,91, + 187,187,187,50,50,187,50,187,50,163,187,0,0,64,44,47, + 142,47,141,7,141,145,141,235,8,235,8,67,67,235,235,141, + 7,49,8,67,141,7,235,141,7,141,8,141,7,141,7,254, + 49,141,7,141,67,141,141,7,182,7,243,7,141,141,7,243, + 7,141,7,141,7,141,67,8,7,141,7,8,67,8,49,182, + 102,100,100,102,100,102,102,102,74,102,100,102,100,102,102,102, + 102,74,102,74,74,102,100,102,74,74,71,33,74,102,74,33, + 169,102,74,100,188,153,95,212,40,0,74,127,169,74,140,140, + 140,71,33,74,140,74,140,140,140,140,169,140,140,140,140,33, + 140,140,169,140,74,140,140,140,140,74,127,38,140,33,74,74, + 140,33,169,140,133,133,151,25,127,140,127,127,127,169,71,33, + 74,169,140,114,33,39,39,38,15,71,133,244,33,140,140,38, + 151,15,133,159,127,102,71,119,186,34,172,15,38,74,15,245, + 25,133,169,140,127,127,88,140,71,169,127,100,127,140,169,140, + 39,127,127,39,127,207,143,143,127,169,169,169,127,127,169,127, + 140,127,140,127,39,39,39,127,39,39,127,39,127,39,39,127, + 127,127,127,127,127,127,127,127,127,127,127,127,127,127,207,38, + 129,228,173,197,241,0,22,94,215,122,215,221,221,0,215,215, + 215,221,221,162,162,212,162,163,94,183,221,246,215,221,221,221, + 221,94,221,221,0,162,40,122,126,94,122,40,104,40,40,104, + 203,203,203,40,212,246,162,212,0,166,221,221,246,94,215,227, + 50,163,239,227,215,212,94,162,94,162,227,50,0,221,56,122, + 183,94,183,221,215,215,221,221,0,94,75,40,94,221,246,215, + 246,94,212,163,40,212,94,162,221,221,94,241,0,95,239,212, + 183,94,42,94,42,50,212,212,227,215,215,221,241,212,97,0, + 221,221,221,94,221,221,221,215,50,94,50,94,246,221,40,183, + 94,94,0,246,0,221,221,162,221,221,162,162,221,221,162,37, + 162,94,162,78,162,0,183,162,78,78,183,221,162,162,221,162, + 246,50,94,56,221,0,162,0,221,221,221,162,0,0,0,162, + 0,0,221,122,0,221,122,221,183,78,42,162,42,42,162,42, + 162,0,0,162,0,0,0,0,0,0,0,212,162,246,164,164, + 212,94,0,162,215,221,162,162,221,162,162,162,42,162,162,50, + 50,94,221,221,221,246,221,0,0,221,221,0,162,162,78,162, + 162,122,122,122,162,0,94,183,183,0,215,162,162,78,78,42, + 162,162,162,162,162,122,0,162,94,183,162,94,0,122,122,78, + 162,162,221,0,162,122,162,162,221,183,187,0,227,0,0,0, + 162,162,162,122,0,0,0,162,0,221,50,183,0,64,44,44, + 64,44,67,235,7,141,235,67,7,235,7,141,235,7,235,141, + 235,7,141,8,67,141,67,49,182,7,67,49,67,67,243,235, + 141,49,67,235,12,8,141,150,49,150,7,8,235,26,243,67, + 12,235,150,7,8,235,12,243,67,150,7,150,7,141,235,243, + 102,102,33,102,102,197,102,102,102,102,102,102,102,102,74,102, + 102,102,102,102,102,102,74,102,102,74,102,71,100,102,74,74, + 140,102,74,88,127,218,59,203,40,0,102,207,169,100,74,74, + 140,140,140,74,140,74,140,140,74,74,33,74,74,169,39,140, + 140,33,140,140,169,140,33,140,169,74,74,38,144,71,74,33, + 144,140,38,133,151,15,248,127,140,74,127,127,140,127,127,140, + 39,169,33,39,140,169,127,140,151,15,133,127,143,236,143,127, + 71,15,95,96,235,67,7,235,56,95,166,141,44,192,192,122, + 171,141,15,74,127,127,169,102,38,244,236,169,88,169,127,127, + 140,169,127,127,74,133,217,188,207,169,127,140,169,127,140,127, + 169,127,39,127,39,127,140,127,39,127,140,127,39,39,169,169, + 39,39,39,127,127,127,127,127,127,127,88,127,88,127,143,133, + 173,151,129,33,104,0,212,183,20,172,172,172,142,104,219,172, + 172,29,142,29,226,246,183,163,183,29,172,142,142,29,142,162, + 20,172,172,172,15,129,212,94,126,40,87,142,172,29,172,172, + 162,18,173,15,172,172,229,212,0,239,162,47,15,15,172,172, + 29,40,47,15,172,29,142,172,47,0,40,162,166,172,34,29, + 172,29,142,227,20,172,29,142,29,47,162,40,183,0,29,29, + 172,142,47,47,183,172,142,34,29,142,142,0,0,163,50,47, + 15,20,15,15,15,95,95,29,142,142,142,142,56,221,200,162, + 95,142,142,44,142,34,47,215,34,142,142,142,142,47,162,227, + 212,162,20,159,173,192,172,15,183,47,47,47,47,47,142,166, + 122,183,94,95,142,47,47,47,47,40,95,142,47,142,142,142, + 95,221,215,221,78,212,50,221,221,221,221,221,0,0,0,0, + 0,0,0,0,221,0,227,227,95,40,95,47,162,59,200,47, + 95,227,221,0,162,0,0,0,0,0,0,40,212,246,164,164, + 104,212,221,162,162,221,221,221,221,95,95,95,40,239,78,40, + 40,221,0,0,0,221,221,0,0,162,212,94,0,0,122,78, + 122,95,95,166,166,227,221,0,183,0,122,183,183,183,221,183, + 56,162,183,183,183,183,215,183,162,183,183,0,42,183,162,183, + 183,162,122,183,56,183,183,56,162,162,183,0,0,122,56,221, + 56,183,0,0,78,183,122,122,183,0,78,183,0,47,64,47, + 44,47,235,141,235,8,199,141,235,141,235,141,7,141,235,141, + 235,141,7,141,8,7,67,49,243,141,141,67,141,7,17,7, + 141,7,141,7,243,8,7,132,235,141,49,141,235,8,8,67, + 12,7,141,49,141,7,150,141,67,150,235,141,49,8,7,150, + 100,102,102,100,102,102,102,102,102,102,102,102,102,102,102,102, + 100,102,102,100,102,102,102,100,102,102,102,74,74,33,71,100, + 74,74,100,100,100,207,95,37,203,0,102,207,33,140,74,33, + 71,33,74,74,74,33,74,33,140,140,140,169,127,169,127,88, + 169,39,74,74,74,74,144,33,140,140,144,133,102,74,140,169, + 169,169,244,133,15,47,44,248,33,140,102,127,127,169,169,127, + 169,39,127,236,143,143,236,143,140,245,102,159,127,71,71,184, + 186,44,239,122,122,8,141,56,221,95,95,254,142,47,111,254, + 132,59,203,133,217,133,140,140,140,88,127,127,39,127,140,140, + 88,127,236,74,234,44,224,152,240,127,140,88,39,169,127,169, + 140,169,140,127,127,127,127,169,140,127,39,39,169,39,39,127, + 169,127,140,140,127,169,169,169,127,140,127,169,127,39,207,38, + 129,228,129,197,241,0,22,221,15,135,172,48,48,48,42,172, + 48,48,15,172,135,50,162,203,221,142,172,172,172,172,48,221, + 172,15,172,190,172,129,37,221,40,40,65,47,172,172,172,173, + 104,34,47,172,172,15,173,212,0,212,221,47,129,15,172,172, + 172,104,95,172,172,29,172,172,142,0,166,212,215,29,29,172, + 172,29,172,215,15,29,172,29,172,142,0,97,50,0,192,34, + 44,172,29,172,215,171,172,172,29,29,29,56,221,95,78,172, + 208,57,15,15,36,142,95,29,34,34,172,29,47,0,200,0, + 141,15,142,192,142,172,142,40,80,172,172,192,172,15,94,183, + 246,0,191,161,83,192,57,105,40,254,29,47,34,142,171,95, + 94,212,0,47,15,20,172,172,15,172,47,192,192,172,192,34, + 40,0,221,122,215,200,40,227,94,162,0,0,0,183,221,0, + 0,0,0,0,0,0,166,47,254,47,47,34,215,34,29,34, + 29,40,246,0,0,0,0,0,0,0,246,164,164,246,104,104, + 142,104,221,221,221,162,162,0,141,142,34,29,47,40,246,162, + 0,0,0,0,183,0,0,0,0,0,162,212,162,0,0,0, + 221,47,34,44,47,34,224,122,239,0,166,64,47,47,64,47, + 254,215,47,47,64,99,99,59,183,183,122,221,34,254,47,47, + 47,95,183,254,47,254,254,47,254,221,187,0,183,254,47,254, + 47,99,111,162,47,254,59,99,254,95,78,42,0,64,44,142, + 59,254,7,8,235,141,235,7,235,141,235,150,235,141,7,67, + 235,141,67,67,67,141,67,235,8,7,8,49,150,235,150,235, + 67,67,141,67,49,150,67,150,67,49,7,141,67,49,243,67, + 150,235,49,49,141,67,7,12,67,150,67,67,49,182,182,49, + 102,102,100,102,102,100,102,102,102,102,102,102,102,102,100,102, + 102,102,102,102,102,100,102,102,33,71,102,102,71,74,102,100, + 100,100,169,74,100,188,95,37,203,0,120,236,74,140,74,74, + 74,74,140,74,140,74,74,74,74,33,140,169,169,169,127,127, + 39,127,127,140,140,169,169,74,74,33,244,133,127,140,33,140, + 127,127,140,133,142,95,192,71,140,133,74,71,33,127,127,143, + 143,127,143,74,102,236,186,34,192,95,17,152,235,8,7,235, + 122,221,122,78,0,182,145,17,26,122,215,215,219,215,215,122, + 0,221,40,64,47,99,245,143,127,140,140,169,127,88,169,127, + 39,240,47,104,56,187,102,58,127,127,127,140,169,169,169,127, + 127,127,127,127,127,39,39,127,169,39,140,127,39,127,39,39, + 140,127,127,169,127,39,169,169,127,127,39,127,169,127,127,38, + 129,229,129,33,104,0,203,162,29,173,48,172,190,48,221,172, + 172,190,172,172,48,212,0,163,183,142,172,172,172,172,15,212, + 47,172,172,172,190,172,166,162,40,162,47,34,172,34,190,15, + 246,83,173,142,190,172,15,212,0,50,221,47,15,172,172,34, + 142,47,95,172,29,172,29,29,104,0,187,212,215,172,34,142, + 142,142,172,215,34,172,142,142,142,142,0,95,94,0,142,47, + 47,47,47,172,40,29,142,142,47,142,142,221,221,200,212,29, + 15,15,15,172,186,104,95,190,142,34,142,142,47,162,200,0, + 40,29,47,47,47,47,142,141,142,190,47,142,47,172,221,183, + 246,221,15,142,47,180,192,161,40,95,47,47,47,142,192,40, + 0,227,162,47,29,142,192,47,29,47,47,190,47,192,47,47, + 215,0,50,94,215,227,221,0,246,94,162,221,94,40,227,0, + 162,221,122,0,0,0,221,166,95,95,254,47,215,47,142,47, + 44,47,95,162,94,221,221,162,221,221,40,104,40,246,40,246, + 246,212,221,122,0,0,0,0,95,47,47,47,141,40,246,221, + 221,0,0,0,0,0,0,0,0,0,221,40,162,0,0,0, + 0,215,95,47,47,145,47,0,187,0,95,47,254,99,254,47, + 254,227,254,254,47,95,47,254,94,239,0,219,44,254,254,254, + 47,95,239,141,95,254,254,254,254,162,183,0,183,254,254,254, + 99,95,95,0,254,254,254,95,254,126,162,166,0,64,44,44, + 47,47,235,7,235,7,67,235,235,141,235,141,7,150,235,141, + 145,141,7,141,49,49,141,235,141,49,150,49,150,49,141,67, + 67,67,49,141,235,150,67,141,67,67,67,67,141,235,150,141, + 8,182,67,67,49,141,235,150,67,141,67,67,67,67,141,235, + 100,100,100,100,100,102,102,102,102,102,102,102,102,102,102,102, + 102,102,102,102,102,102,102,74,71,102,33,71,102,102,66,134, + 108,159,169,74,188,247,142,241,241,0,102,127,74,74,74,74, + 140,71,33,140,74,140,140,127,39,127,127,127,39,127,140,127, + 169,169,169,169,88,140,140,140,71,25,133,71,140,127,127,39, + 33,140,169,74,15,95,64,38,74,15,245,25,245,248,159,127, + 74,71,236,192,7,235,56,0,219,47,0,122,42,8,67,122, + 0,111,26,0,0,219,243,219,122,166,183,183,0,122,42,78, + 0,0,122,94,126,25,143,127,143,143,143,127,143,236,127,127, + 133,171,99,215,0,183,26,74,236,127,127,169,127,39,127,127, + 127,119,34,127,236,127,127,140,127,140,140,127,140,169,140,127, + 127,169,140,127,127,39,33,169,169,169,169,169,169,169,207,133, + 228,173,129,21,226,0,241,246,142,48,251,142,190,48,122,172, + 190,190,190,190,190,94,162,22,227,142,172,142,190,190,48,162, + 142,172,142,142,142,43,226,122,163,221,142,142,190,142,142,172, + 221,180,173,47,142,142,15,40,0,227,221,40,172,172,172,142, + 190,104,141,29,190,29,142,172,104,122,163,221,215,192,142,142, + 142,142,172,215,47,29,142,142,34,104,0,183,94,0,172,47, + 142,47,47,34,215,142,142,142,142,142,142,94,0,95,246,199, + 15,172,15,180,208,142,141,47,47,142,47,142,142,162,200,0, + 47,172,142,47,47,47,142,40,47,142,142,47,142,29,50,183, + 221,221,191,15,114,34,172,120,40,47,47,47,47,47,29,200, + 0,183,0,47,34,180,142,47,172,47,47,142,47,142,47,47, + 47,0,227,162,221,212,183,78,40,203,246,162,246,200,40,221, + 221,94,162,0,0,0,122,40,141,47,47,34,215,47,142,192, + 34,29,171,94,94,162,94,47,203,246,246,94,0,0,162,94, + 40,95,215,162,0,0,221,221,215,215,221,221,221,221,94,246, + 246,246,221,0,0,0,0,0,0,0,0,162,221,162,0,221, + 221,0,246,141,47,47,47,162,227,0,215,95,254,47,254,47, + 47,95,254,47,254,254,254,47,162,166,0,183,47,95,47,254, + 47,126,227,95,95,95,254,59,95,162,126,0,183,47,95,95, + 47,99,183,122,95,95,254,95,254,95,162,183,0,64,64,47, + 47,47,12,145,67,145,99,7,235,67,235,67,235,150,7,141, + 235,141,7,141,141,7,67,235,150,235,243,235,141,235,67,141, + 7,141,235,8,235,8,141,8,141,67,141,7,8,235,8,141, + 141,141,67,141,235,243,235,8,141,8,141,49,141,235,8,235, + 38,133,186,186,100,102,102,102,102,102,102,102,102,102,102,102, + 102,102,102,102,102,71,102,102,71,102,102,102,88,88,176,198, + 198,86,247,247,240,38,47,40,212,0,245,236,100,33,74,33, + 140,100,169,169,88,169,74,25,133,127,39,169,140,127,169,39, + 39,127,140,127,88,169,140,33,248,133,133,38,74,143,127,89, + 143,127,143,143,151,95,141,34,29,225,42,234,219,17,96,49, + 67,7,235,219,67,122,0,126,42,122,0,0,0,141,145,219, + 219,122,122,0,0,0,122,183,122,183,212,40,78,0,162,0, + 0,0,122,221,183,182,248,240,127,74,71,58,186,142,171,127, + 15,95,111,183,0,122,67,207,83,245,25,127,140,127,140,127, + 236,133,183,71,245,127,127,127,169,127,140,127,39,127,140,140, + 127,127,140,140,140,127,39,127,169,33,39,127,127,127,127,38, + 129,129,135,33,104,0,241,227,29,190,48,142,190,172,0,15, + 190,190,29,190,172,94,56,203,227,142,172,142,190,142,15,50, + 142,190,142,190,48,98,22,221,75,215,172,142,34,190,142,172, + 40,224,142,190,172,190,172,40,0,50,183,166,172,29,142,47, + 190,47,40,172,142,172,142,142,104,56,163,40,215,47,47,190, + 47,142,172,183,172,142,142,47,142,142,0,239,94,0,34,47, + 142,47,142,142,40,192,47,142,142,47,142,183,162,75,212,190, + 80,172,202,15,15,142,40,142,142,47,142,47,142,0,200,0, + 95,29,47,142,47,47,142,141,142,47,47,142,47,142,246,183, + 94,221,144,173,161,47,15,114,142,254,142,47,180,225,172,95, + 162,227,0,99,47,44,142,47,225,142,141,142,47,47,47,47, + 47,0,227,122,215,215,94,50,40,212,203,162,221,163,75,166, + 183,215,162,0,0,0,95,95,95,47,47,192,40,47,254,40, + 40,215,47,221,162,162,221,215,221,221,94,162,162,221,97,104, + 40,0,221,221,246,0,221,246,246,221,221,246,221,0,0,0, + 0,0,94,212,94,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,221,246,221,221,221,221,162,221,221,221,215,221,215, + 215,95,254,95,47,47,141,95,42,166,0,215,47,254,254,95, + 95,95,166,141,95,254,95,141,126,78,187,0,183,95,254,95, + 254,95,215,183,141,95,95,59,141,166,78,187,0,64,64,44, + 47,47,67,199,141,145,141,235,141,7,235,141,235,243,145,141, + 145,67,49,141,67,67,141,7,150,7,150,67,8,67,235,150, + 49,12,235,141,7,8,150,141,141,49,141,49,141,7,182,8, + 141,141,7,150,49,141,7,243,150,141,141,7,150,49,141,49, + 91,61,91,61,102,88,88,100,102,102,102,102,38,102,38,102, + 102,102,102,102,102,102,102,102,102,102,102,102,74,159,170,32, + 32,93,135,245,74,122,212,241,203,42,43,184,71,74,71,100, + 33,127,169,127,143,140,171,64,141,245,108,169,88,169,140,127, + 169,140,127,102,102,140,169,71,38,133,245,133,245,248,159,143, + 71,71,236,186,47,40,254,34,47,141,59,166,59,0,0,122, + 12,67,221,132,145,219,219,56,0,0,0,0,0,183,243,26, + 56,122,221,78,0,0,0,0,0,122,183,94,183,122,0,0, + 0,0,0,122,122,109,187,152,235,8,7,235,56,221,183,133, + 15,95,166,166,17,122,158,247,252,227,171,127,127,127,143,71, + 96,225,0,67,26,58,127,169,127,140,127,169,140,169,169,127, + 140,140,33,169,127,169,169,140,39,127,169,169,169,169,207,133, + 103,228,129,72,223,0,241,94,142,190,190,190,223,48,0,172, + 172,29,190,142,177,212,122,241,215,47,172,172,142,190,15,221, + 47,172,142,190,251,195,50,162,95,215,173,142,142,142,190,15, + 40,254,142,192,173,15,129,187,122,227,246,40,15,15,142,142, + 142,104,141,142,142,190,29,172,200,221,95,215,246,142,47,142, + 142,142,15,215,47,172,172,47,142,142,162,126,215,221,142,47, + 142,47,142,142,40,142,142,47,29,47,142,94,221,47,246,142, + 191,172,15,15,191,47,40,47,47,142,47,142,142,162,47,0, + 141,180,47,142,47,47,142,254,142,47,142,47,47,172,94,183, + 246,0,15,192,180,172,15,191,40,47,47,235,47,142,29,47, + 221,50,221,47,142,47,180,47,47,172,47,47,142,47,47,142, + 47,162,94,162,212,40,215,246,40,40,203,50,221,215,95,95, + 95,47,94,122,183,221,47,142,47,47,47,172,40,141,40,183, + 166,215,0,0,0,0,0,221,212,183,221,94,246,215,40,246, + 203,164,40,221,221,221,0,0,221,0,0,0,183,0,162,0, + 0,221,221,212,203,50,0,0,0,122,221,0,0,0,0,0, + 0,0,0,0,0,221,0,0,221,221,221,215,221,0,0,0, + 0,215,95,141,254,254,254,47,221,126,0,215,47,95,95,47, + 95,40,227,95,95,95,254,59,95,94,227,0,183,95,95,95, + 254,47,183,162,95,95,141,95,95,166,94,166,0,44,44,64, + 142,47,7,235,141,145,141,145,150,235,141,67,7,141,7,8, + 145,150,7,67,141,235,141,235,150,67,243,235,67,141,235,150, + 235,150,49,67,67,235,12,67,12,67,12,235,182,99,49,12, + 67,17,67,12,235,67,67,235,12,182,17,67,12,67,8,99, + 0,0,42,26,139,154,152,245,133,102,102,102,102,102,102,102, + 102,102,102,102,38,102,102,102,102,102,71,102,143,66,136,157, + 32,52,201,133,100,234,47,37,40,221,66,247,140,140,74,143, + 169,39,127,108,47,47,221,187,248,218,207,127,127,127,140,39, + 169,169,127,15,158,133,127,71,133,186,20,152,26,17,152,145, + 8,7,235,219,183,56,221,219,183,183,0,0,162,122,0,0, + 141,145,219,56,150,26,122,122,0,122,0,0,0,0,56,221, + 122,17,183,0,0,0,0,122,183,94,162,0,0,0,0,0, + 0,122,183,187,0,64,0,0,122,8,67,122,0,166,17,64, + 47,95,227,132,183,0,122,187,158,78,0,245,58,143,127,64, + 126,162,219,183,8,71,74,127,88,140,127,127,140,127,140,169, + 127,39,39,140,127,127,169,33,140,169,140,33,39,127,127,38, + 173,229,135,21,226,0,92,227,142,172,190,190,190,48,122,172, + 172,190,190,142,190,50,162,241,212,47,172,142,190,190,48,246, + 142,172,142,190,190,92,50,94,200,94,15,172,172,142,142,15, + 104,47,190,47,173,18,18,0,0,163,94,215,190,18,40,142, + 190,47,215,29,142,142,47,142,104,162,75,163,215,142,47,172, + 142,142,172,215,142,142,47,142,47,142,0,75,212,0,29,47, + 142,142,47,172,40,142,142,142,47,142,47,221,0,47,50,29, + 180,20,15,180,15,142,40,142,142,47,142,47,104,0,104,162, + 95,44,47,47,142,142,47,40,180,47,47,47,47,172,221,239, + 212,221,57,29,80,15,180,15,215,47,142,47,47,47,192,40, + 221,227,221,47,142,47,44,47,199,47,47,47,47,47,225,47, + 47,0,227,221,183,95,40,200,104,227,40,212,221,246,95,95, + 47,47,94,122,183,183,47,192,47,142,192,172,132,215,40,95, + 40,47,246,221,221,0,0,246,241,104,40,221,221,221,40,47, + 142,104,215,221,221,221,94,94,246,94,221,227,95,221,0,215, + 215,215,221,0,221,246,221,0,0,0,0,0,0,0,0,0, + 0,183,0,0,0,0,162,0,221,0,122,95,40,56,183,215, + 221,215,254,47,254,47,141,95,56,227,122,215,254,254,95,47, + 141,95,166,95,95,254,95,254,126,183,187,0,183,95,141,95, + 95,95,56,78,95,95,141,95,95,227,42,187,0,44,47,44, + 142,47,235,49,7,235,7,235,150,235,141,235,141,67,145,8, + 235,141,49,141,7,49,141,145,8,49,141,141,235,141,7,141, + 67,141,67,235,17,145,150,141,8,182,8,182,7,150,145,150, + 141,8,182,8,141,235,12,145,150,67,141,141,67,141,182,243, + 0,122,187,26,26,26,91,26,139,49,102,102,25,102,102,248, + 38,102,102,102,102,102,102,102,71,102,100,74,140,127,66,161, + 106,106,247,236,181,142,142,241,22,162,133,240,169,74,74,184, + 127,127,133,192,224,221,0,122,12,140,236,39,127,169,33,169, + 39,127,207,245,38,240,66,66,144,15,34,141,254,0,0,42, + 8,67,122,0,132,215,215,0,162,78,42,0,0,0,0,0, + 183,243,42,0,122,183,122,219,0,0,0,0,0,0,0,0, + 0,0,187,0,0,0,0,122,94,183,122,122,0,0,0,0, + 0,183,183,56,162,0,0,0,122,141,145,17,26,122,0,42, + 95,95,166,166,254,183,227,0,0,162,0,171,247,83,171,162, + 0,56,219,0,132,192,74,159,89,169,140,140,127,169,127,39, + 33,169,140,169,140,140,127,39,33,140,169,127,169,169,39,38, + 129,129,129,21,226,0,241,183,142,48,172,172,190,129,122,172, + 190,190,142,142,177,212,183,241,40,47,172,190,142,190,15,94, + 142,172,190,142,142,172,163,221,104,40,142,142,142,190,190,15, + 40,254,172,40,38,195,23,162,0,95,246,132,15,250,172,47, + 190,142,215,172,142,172,142,172,46,94,95,40,215,47,142,142, + 47,142,172,40,142,142,142,142,142,47,162,75,212,0,172,47, + 47,47,47,172,40,47,47,142,47,142,142,94,162,47,221,34, + 202,172,171,172,191,142,254,47,142,47,47,142,142,0,47,162, + 95,142,142,47,142,47,47,95,47,47,142,47,47,142,212,227, + 246,0,15,38,120,192,15,208,40,47,47,142,47,47,142,95, + 0,239,0,47,47,47,142,47,47,142,47,47,47,47,47,142, + 47,0,75,162,239,142,47,97,221,221,221,0,0,94,40,40, + 126,95,94,122,162,246,47,47,47,47,142,29,215,215,246,246, + 221,0,221,94,212,50,162,0,221,0,0,0,0,0,0,221, + 215,221,215,162,0,0,246,246,94,246,0,40,97,215,0,215, + 166,183,221,221,0,162,94,221,0,0,0,0,0,0,246,94, + 0,227,183,0,0,221,246,94,227,0,0,183,215,215,221,122, + 221,221,40,95,47,254,254,59,221,187,0,56,47,254,254,95, + 95,126,215,95,141,95,95,95,95,227,239,0,221,95,40,95, + 254,47,215,42,95,95,224,95,141,183,94,166,0,44,34,47, + 47,47,145,141,235,141,235,235,8,235,17,7,141,49,235,141, + 145,141,67,141,67,235,8,235,141,49,67,141,235,8,235,182, + 8,67,141,235,12,235,49,243,67,150,67,150,235,12,235,49, + 8,182,150,67,150,235,17,49,235,8,182,150,67,12,67,17, + 0,0,0,0,0,12,109,187,12,235,102,102,38,102,133,102, + 102,102,102,102,102,102,102,102,33,71,100,33,140,143,159,66, + 161,66,161,59,102,19,59,40,241,0,133,240,88,88,74,133, + 15,39,151,95,254,183,122,122,139,188,83,15,248,127,39,39, + 127,127,102,43,77,194,194,170,86,173,50,221,221,122,0,0, + 141,145,219,183,183,227,95,221,122,162,0,0,0,0,0,0, + 0,122,0,0,0,0,0,42,243,122,0,0,0,0,0,0, + 0,0,0,0,0,0,0,221,183,219,162,122,122,0,0,122, + 162,94,215,132,183,221,0,0,0,42,150,219,42,122,0,0, + 215,95,40,166,111,126,224,0,0,0,0,133,207,25,171,0, + 0,78,0,0,122,12,211,245,74,143,143,127,39,127,39,127, + 39,127,127,33,169,127,127,127,127,127,74,140,33,39,39,38, + 129,228,229,72,223,0,241,215,142,190,190,190,172,172,122,29, + 190,190,190,142,48,50,221,241,215,47,172,142,190,190,129,221, + 172,172,172,172,172,15,164,162,203,40,190,142,190,142,190,15, + 104,104,172,95,38,250,23,78,0,239,94,215,86,161,250,142, + 190,47,40,29,142,172,47,172,47,246,95,40,215,142,142,180, + 34,29,172,141,142,172,142,142,142,142,0,95,212,0,142,47, + 142,142,142,192,40,172,142,142,47,142,172,183,162,75,50,29, + 15,172,202,15,15,142,40,47,47,142,142,29,142,0,46,162, + 95,172,47,142,47,172,47,95,142,142,47,47,47,142,212,227, + 40,221,191,18,124,20,15,15,40,47,47,47,47,47,142,47, + 221,239,221,47,142,142,47,47,180,142,141,142,47,180,64,47, + 47,0,75,221,95,172,47,215,0,0,0,162,215,122,183,40, + 95,95,94,221,162,56,142,47,47,47,141,40,221,221,0,0, + 0,0,0,0,221,94,94,221,0,0,0,0,0,0,221,183, + 166,221,0,0,0,0,0,221,0,0,0,221,215,40,215,47, + 95,40,221,0,162,0,0,0,0,183,227,78,215,187,95,221, + 0,94,95,95,122,94,239,162,183,0,221,122,0,221,0,0, + 0,221,221,246,215,40,254,47,183,183,221,183,47,95,95,99, + 47,215,166,95,95,141,95,141,212,215,183,0,183,254,141,95, + 95,254,246,183,141,95,95,59,95,227,78,219,0,44,44,44, + 142,44,145,141,235,243,49,141,67,235,17,235,150,7,254,67, + 235,141,7,141,67,49,150,235,141,67,67,150,235,243,235,67, + 141,49,141,145,150,67,235,141,182,219,67,141,235,150,67,145, + 141,182,219,49,243,235,141,141,145,150,182,219,67,150,67,182, + 0,0,122,122,122,132,158,205,235,235,102,102,102,102,102,102, + 102,102,102,102,102,102,74,100,102,100,74,100,127,127,127,159, + 66,247,88,0,251,70,59,212,40,42,38,240,127,169,127,15, + 215,25,15,95,187,183,187,122,158,247,252,126,171,89,127,127, + 169,245,222,242,128,32,117,165,13,79,73,22,162,0,0,0, + 183,243,26,122,221,50,94,78,0,0,0,0,0,0,0,0, + 0,122,122,0,0,0,0,0,122,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,122,221,94,183,0,0,0,0,122, + 183,183,183,183,94,183,0,0,0,0,122,56,122,219,0,0, + 212,95,95,126,215,221,162,122,122,122,122,34,171,122,95,0, + 0,0,122,0,122,183,0,59,186,39,140,38,140,102,74,127, + 127,127,143,89,143,143,143,127,127,33,169,169,127,140,39,38, + 129,229,129,72,223,0,241,94,47,177,223,48,190,48,0,29, + 190,142,104,190,177,203,78,209,40,59,142,190,142,226,15,94, + 47,172,172,172,172,48,22,221,163,215,47,142,190,142,142,172, + 40,47,172,142,142,15,173,50,0,97,40,246,47,104,15,190, + 142,104,132,172,142,172,142,172,104,50,75,40,215,47,47,142, + 142,190,15,215,47,142,142,142,142,142,0,163,40,42,180,47, + 47,47,47,172,40,47,47,47,142,47,142,50,221,40,246,142, + 191,172,15,180,191,190,40,47,142,47,47,142,142,0,95,246, + 254,47,47,47,47,47,29,40,47,47,47,47,47,142,212,183, + 212,0,208,15,171,15,180,208,40,47,47,47,47,47,142,200, + 0,40,215,47,142,142,47,47,47,142,141,47,47,47,47,142, + 47,0,95,78,40,47,40,221,221,122,221,183,227,183,0,0, + 215,95,0,42,221,215,47,47,47,40,246,246,246,94,246,0, + 0,0,0,0,0,246,246,221,0,0,0,0,0,0,0,183, + 183,122,0,0,0,0,0,0,0,0,221,221,246,215,246,95, + 47,95,221,0,0,0,0,0,0,122,254,95,59,47,47,95, + 0,215,95,59,95,227,40,0,0,221,162,221,0,0,0,0, + 0,0,0,221,246,221,221,95,50,126,122,215,95,95,95,40, + 99,227,141,40,95,95,95,59,126,183,183,0,183,40,95,95, + 254,47,221,78,95,95,254,254,59,126,183,227,0,64,47,47, + 44,44,235,8,235,12,145,141,235,235,12,49,150,235,67,141, + 235,243,235,141,67,235,150,235,141,67,67,150,235,150,235,49, + 150,235,8,49,99,254,145,150,67,150,182,182,49,99,141,145, + 243,67,150,182,182,49,99,182,235,243,67,150,182,182,243,49, + 0,0,0,0,0,0,122,67,234,145,102,102,102,102,102,133, + 102,102,102,102,102,38,102,100,102,33,100,88,88,88,88,143, + 83,161,135,0,173,98,40,163,40,122,25,66,88,169,127,186, + 59,99,47,40,239,132,56,162,122,187,158,78,122,245,71,173, + 15,50,162,0,223,66,106,242,168,22,219,94,94,162,0,0, + 0,0,0,0,122,122,0,0,0,0,0,0,0,122,122,42, + 122,122,0,0,0,0,0,0,122,122,0,0,0,0,0,0, + 0,0,122,0,0,0,0,122,56,122,122,122,0,122,0,0, + 0,0,162,221,122,0,0,0,0,0,0,0,0,122,42,0, + 246,40,239,227,215,183,122,122,0,0,0,0,17,0,0,0, + 0,0,0,0,0,183,0,0,12,102,186,25,245,38,245,248, + 240,127,102,71,236,186,34,171,207,240,143,140,169,127,39,133, + 251,129,135,72,226,0,203,221,183,203,164,241,104,92,0,203, + 104,104,104,241,104,212,0,241,246,215,75,241,203,241,104,162, + 95,47,95,47,104,172,50,183,50,40,141,40,47,104,104,142, + 40,246,40,104,40,40,142,239,221,40,227,221,221,221,221,215, + 95,40,221,141,40,47,95,142,95,212,163,95,56,141,40,95, + 95,95,47,221,95,47,40,40,40,200,221,163,163,0,59,95, + 47,47,47,47,40,47,47,47,47,47,47,94,122,227,94,192, + 15,15,15,15,191,47,40,95,47,47,47,47,47,0,200,50, + 40,47,40,254,40,47,47,215,40,47,40,40,95,47,212,212, + 163,221,105,133,15,191,151,244,40,40,141,40,141,47,47,95, + 162,183,221,141,47,47,40,47,47,47,47,47,141,47,47,47, + 95,0,212,221,183,246,94,94,221,221,0,0,0,0,0,0, + 221,215,221,122,221,56,47,47,215,221,221,94,94,221,0,221, + 0,0,0,162,221,221,162,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,221,221,94,40,95,95,163,47, + 95,40,94,0,0,0,0,0,0,0,215,95,95,95,95,95, + 227,227,40,40,215,221,221,221,0,162,221,221,0,221,122,221, + 221,221,221,221,246,212,221,221,221,183,122,219,95,254,141,40, + 95,215,95,95,166,141,40,141,246,187,50,0,183,95,95,95, + 95,141,94,166,95,95,95,95,95,239,42,183,0,64,44,34, + 142,142,67,141,235,141,235,243,235,235,141,235,150,235,243,67, + 235,17,67,141,67,235,26,7,254,67,67,132,235,150,99,67, + 150,99,243,49,235,243,235,254,182,141,182,67,182,235,243,235, + 254,182,141,182,67,182,235,141,182,254,67,182,235,182,235,254, + 0,0,0,0,0,0,0,0,12,101,102,102,102,102,102,102, + 38,102,102,102,102,74,197,102,100,100,100,33,88,88,88,88, + 66,223,172,0,40,137,166,203,203,42,133,134,127,127,127,102, + 95,183,95,95,95,166,254,183,227,0,0,162,0,47,142,95, + 0,0,0,122,50,47,20,29,64,40,94,221,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 122,0,0,0,0,0,0,0,122,122,122,0,0,0,0,0, + 0,0,0,122,122,122,0,122,0,122,122,0,0,0,0,0, + 122,122,221,122,0,0,0,0,0,0,0,0,0,0,0,0, + 78,166,95,227,183,183,122,122,122,0,0,122,0,0,0,0, + 0,0,0,0,0,0,0,0,0,150,59,234,26,205,26,187, + 152,235,67,7,235,56,221,0,186,102,144,33,140,140,140,133, + 24,226,46,173,104,0,50,0,50,246,183,221,94,215,215,78, + 0,162,0,221,162,50,221,50,221,122,246,215,215,215,221,221, + 0,0,0,0,122,122,203,0,212,221,246,221,246,215,221,215, + 215,215,215,221,221,122,0,215,0,183,221,215,221,227,40,215, + 40,40,40,215,221,0,0,0,221,212,227,50,221,246,221,40, + 246,246,246,246,246,215,215,215,215,221,183,221,183,221,215,246, + 40,40,40,215,141,40,246,141,215,40,227,163,122,40,221,246, + 215,215,215,221,221,221,215,141,40,215,40,47,47,0,40,221, + 141,254,40,40,141,40,95,40,141,47,95,95,95,95,221,78, + 50,0,47,47,47,47,47,142,40,141,47,47,141,141,59,94, + 183,40,221,215,40,141,141,215,132,221,215,132,141,141,141,141, + 95,162,212,162,122,215,183,122,221,221,221,0,0,0,0,0, + 0,78,221,122,122,221,215,40,246,221,212,212,94,94,215,212, + 221,162,221,94,221,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,162,0,221,227,227,95,239,95, + 59,212,212,221,221,162,122,0,0,94,111,166,126,95,95,75, + 187,183,122,0,0,221,0,0,0,0,0,0,0,0,0,221, + 215,56,183,246,221,246,212,0,221,50,0,246,215,215,246,183, + 221,0,78,221,221,0,0,183,162,183,183,0,221,56,221,221, + 162,162,122,162,215,56,56,0,0,122,162,94,0,64,47,59, + 47,99,141,49,67,7,235,243,145,141,141,49,150,235,17,67, + 235,141,235,141,67,235,17,145,141,182,49,12,235,141,182,67, + 141,141,141,67,145,150,235,99,243,182,150,235,141,235,150,235, + 99,243,182,150,235,141,235,12,182,150,235,141,235,187,235,182, + 0,0,0,0,0,122,0,0,162,42,101,245,102,102,102,102, + 102,38,102,102,102,102,102,102,102,33,100,88,88,88,88,218, + 66,0,40,97,172,164,47,203,75,0,245,153,102,236,89,39, + 40,0,227,95,40,166,166,126,224,0,0,0,0,183,221,122, + 0,162,162,221,0,0,0,0,0,162,162,50,221,162,0,0, + 122,122,162,0,0,0,0,0,0,0,122,122,0,0,0,0, + 122,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,122,0,122,122,122,122,122,122,122,122,0, + 122,122,0,122,122,0,0,0,0,0,0,0,0,0,0,0, + 221,227,95,95,94,183,0,122,122,0,0,0,0,0,0,0, + 122,0,0,0,0,0,0,0,0,0,0,166,59,219,254,221, + 0,122,8,67,122,0,166,17,219,0,171,169,74,33,140,33, + 55,18,55,66,48,0,163,94,249,249,249,31,233,233,206,233, + 168,206,233,31,206,241,0,163,227,14,73,73,14,73,233,92, + 206,73,206,168,233,206,48,0,94,40,37,62,206,137,206,137, + 206,206,73,130,206,206,233,177,0,162,183,226,237,31,206,206, + 137,168,137,73,73,73,73,206,222,104,122,221,203,223,226,223, + 226,226,226,190,104,104,92,164,164,164,223,0,162,215,212,164, + 164,104,104,104,104,92,104,92,164,164,14,172,0,227,215,164, + 14,73,10,113,62,41,237,62,73,14,14,50,48,40,183,221, + 104,212,40,104,104,104,40,104,104,104,203,40,203,37,241,221, + 0,40,203,212,40,246,40,40,104,104,104,40,104,203,221,190, + 0,215,215,40,40,212,40,203,203,104,104,104,104,164,164,92, + 212,94,122,0,203,164,203,212,246,221,0,0,221,0,0,0, + 162,0,0,0,221,221,221,221,246,50,212,50,50,212,246,0, + 221,94,246,162,221,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,221,0,221,56,221,50,221,227, + 183,162,0,0,122,200,162,78,122,95,40,40,122,215,183,94, + 221,0,0,0,0,0,0,0,0,0,0,0,0,0,162,0, + 246,0,221,162,221,221,221,183,183,183,162,162,246,0,221,56, + 122,183,215,122,215,183,246,221,162,94,122,0,221,0,0,0, + 122,0,221,122,221,0,122,0,162,162,122,122,0,141,95,126, + 95,219,243,235,141,235,235,150,235,8,67,49,141,235,132,67, + 235,150,235,141,141,235,17,235,235,141,235,150,49,141,141,99, + 243,8,141,182,145,150,99,99,12,182,219,235,254,49,254,99, + 99,12,99,219,99,99,235,243,99,219,235,254,235,254,99,64, + 0,0,0,12,94,42,122,0,0,26,91,61,49,54,133,102, + 102,102,102,102,102,102,102,102,102,102,102,74,102,74,74,134, + 23,104,226,0,48,50,163,75,203,42,245,240,133,108,83,192, + 0,0,227,40,95,126,227,215,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,162,162,221,162,0,122,221, + 0,0,0,0,0,122,0,122,122,122,0,0,122,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,162,162,0,0,0,0,0,122, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 122,215,227,227,227,221,78,122,0,122,0,0,122,0,0,0, + 0,0,122,0,0,0,0,0,0,0,122,0,122,0,221,0, + 0,122,141,145,17,42,78,0,0,0,246,127,39,140,114,102, + 18,38,55,66,177,0,212,40,206,73,73,73,206,14,92,206, + 73,73,206,130,167,48,0,183,104,206,249,206,73,31,41,206, + 249,249,31,249,62,41,228,0,219,94,92,41,249,249,249,233, + 206,233,233,249,62,249,41,228,162,183,221,173,216,93,62,62, + 249,62,249,62,249,167,62,237,220,162,56,0,190,31,168,137, + 168,168,137,73,177,84,84,73,168,222,173,122,215,142,92,73, + 14,14,14,14,14,14,73,14,73,73,168,173,0,239,0,177, + 10,73,206,206,137,206,137,206,113,73,14,73,18,40,56,221, + 173,22,177,137,168,206,73,92,137,137,137,123,137,137,142,221, + 0,142,92,251,73,216,216,190,92,92,73,137,31,62,206,55, + 0,215,219,251,233,31,220,79,79,220,79,18,220,18,21,43, + 177,221,183,221,226,92,37,37,212,162,0,0,0,0,0,0, + 50,14,246,50,162,0,113,22,246,246,94,212,164,50,162,0, + 0,221,0,221,162,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,50,92,94,14,209,162,209, + 50,221,0,0,162,40,162,183,0,104,47,40,164,50,50,221, + 0,0,0,0,0,221,0,0,0,0,221,47,246,180,180,162, + 112,180,0,162,221,246,0,94,212,42,122,40,2,0,112,47, + 124,124,1,0,124,40,180,1,47,187,122,0,224,162,50,94, + 94,78,94,122,50,162,50,0,50,75,187,122,0,34,192,29, + 20,47,8,67,150,235,182,150,49,150,67,141,150,235,219,141, + 235,17,67,150,141,49,219,49,99,150,235,150,99,182,26,182, + 12,224,243,219,235,141,219,235,150,182,132,150,64,166,254,17, + 235,150,182,150,243,99,219,254,182,166,150,64,219,182,150,99, + 0,0,219,235,145,42,12,26,162,26,205,26,91,145,245,102, + 133,102,133,102,133,102,102,102,71,102,102,102,74,140,169,176, + 137,104,251,246,0,40,104,163,203,0,104,102,248,153,102,171, + 0,0,78,183,215,183,183,183,0,0,0,0,0,0,0,122, + 0,0,0,0,0,0,0,221,221,122,0,0,221,0,0,0, + 0,0,0,122,0,122,0,0,0,0,122,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 122,227,126,227,183,221,122,78,122,0,0,0,122,122,122,122, + 122,0,0,122,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,183,150,219,122,122,0,183,150,221,186,39,140,71,135, + 18,38,79,43,190,0,212,40,14,14,22,73,73,73,73,206, + 206,14,73,92,31,48,0,162,104,92,73,206,73,206,73,206, + 206,233,206,137,233,31,173,162,183,212,73,249,233,249,249,249, + 31,233,206,206,233,73,206,123,0,221,183,173,216,175,249,62, + 62,249,123,167,233,123,233,31,18,50,122,0,190,137,24,177, + 73,177,177,24,92,24,226,24,209,222,173,122,56,142,14,22, + 14,14,92,22,14,22,14,14,14,14,73,38,0,239,183,177, + 14,212,14,14,164,22,164,22,164,22,14,14,242,40,221,221, + 251,22,177,222,73,137,92,92,177,137,137,222,73,190,104,221, + 162,47,137,198,123,93,216,92,226,142,104,206,233,233,175,38, + 0,183,227,173,177,48,21,173,173,129,123,79,79,173,79,87, + 137,162,221,215,40,246,246,221,221,0,0,0,0,0,0,0, + 162,37,246,221,0,0,131,5,22,162,50,40,212,221,221,221, + 221,94,162,246,162,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,221,221,162,164,183,164,22,0,50, + 162,162,94,162,50,0,0,0,0,172,40,0,226,212,37,22, + 0,0,0,221,0,221,215,0,183,0,40,2,124,1,124,162, + 81,2,0,50,162,246,246,0,221,183,78,46,246,0,81,180, + 124,81,2,0,112,40,40,47,104,215,0,0,142,50,42,50, + 162,78,50,0,61,0,37,122,50,40,187,162,0,34,34,29, + 29,34,150,141,150,67,150,8,235,132,67,243,243,141,219,49, + 235,17,49,219,67,49,219,67,235,150,235,141,182,49,17,49, + 182,150,49,141,99,49,17,67,99,132,67,17,67,182,150,67, + 182,182,150,99,12,67,182,12,150,67,17,67,182,150,49,182, + 0,0,0,219,141,235,145,199,67,235,100,67,26,139,245,155, + 102,102,133,102,102,38,102,102,102,102,71,102,74,248,18,127, + 246,246,251,92,190,203,200,97,75,0,122,97,13,250,200,166, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,122,0,0,0,0,0,0,0,0, + 0,122,162,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,122,0,122,0,0,122,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 122,227,227,227,94,78,0,122,0,0,0,0,0,122,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,122,183,122,219,0,0,99,47,144,127,169,140,15, + 79,38,55,72,190,0,163,40,14,10,65,10,22,14,22,92, + 14,168,206,14,31,129,0,162,104,73,14,92,206,168,233,249, + 31,31,233,233,73,233,55,0,42,40,14,206,206,164,73,206, + 206,62,249,249,233,14,14,55,162,162,0,251,93,249,233,249, + 233,249,233,31,222,168,137,233,197,162,122,42,190,73,46,226, + 226,84,73,24,241,104,209,46,14,222,173,0,221,223,14,37, + 22,22,14,22,50,203,22,22,37,22,92,18,0,212,221,190, + 94,164,22,164,22,14,209,37,22,37,164,22,18,203,183,221, + 228,50,164,177,223,73,164,203,164,24,241,92,164,48,226,221, + 0,47,137,31,164,160,175,246,14,14,164,113,164,212,50,38, + 0,50,50,173,92,177,21,48,173,104,15,135,251,173,123,55, + 203,0,162,50,212,94,0,0,0,0,0,0,0,0,0,0, + 0,246,162,0,162,162,5,230,160,5,221,162,0,221,0,0, + 221,221,94,221,162,50,0,0,0,0,0,0,0,0,0,0, + 50,203,164,48,200,0,0,95,203,14,50,50,162,162,0,0, + 0,162,162,0,221,0,0,0,0,190,22,0,164,162,212,164, + 0,162,0,0,0,221,104,50,183,0,162,180,112,1,2,40, + 81,180,0,212,0,104,124,162,162,221,0,142,47,0,81,180, + 124,196,1,40,124,180,40,2,190,42,122,0,44,162,0,50, + 122,162,162,0,50,122,163,162,50,200,166,122,0,192,44,29, + 29,44,7,67,8,145,8,49,235,12,145,67,67,235,12,145, + 145,8,235,150,235,235,17,235,235,182,235,49,67,145,243,235, + 235,12,235,49,67,214,235,67,235,182,67,211,150,49,182,99, + 49,99,49,49,243,49,49,67,49,49,12,49,49,8,145,235, + 0,0,0,219,49,235,192,145,192,145,25,234,91,213,102,133, + 102,155,102,25,133,25,102,102,102,102,102,102,33,108,18,40, + 246,40,246,246,173,92,111,203,75,0,162,0,216,73,92,0, + 0,0,0,0,0,0,0,0,0,0,0,162,162,162,162,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,221, + 221,221,122,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,122,0,0,122,122, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,183,183,227,94,162,0,78,0,0,0,0,0,122,0,122, + 122,122,122,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,42,145,150,0,215,207,39,169,88,172, + 38,38,55,72,223,0,40,163,62,73,220,50,50,22,37,50, + 50,14,73,22,167,48,0,162,104,14,249,31,73,233,206,233, + 22,14,73,233,206,113,173,0,162,40,92,233,233,206,206,233, + 206,31,206,249,113,14,10,173,162,221,219,222,116,11,206,233, + 233,249,233,168,73,84,24,73,220,162,122,162,172,209,22,241, + 46,24,24,46,241,75,75,97,61,222,55,0,94,190,164,50, + 37,50,22,37,37,37,37,50,50,22,73,33,0,183,219,249, + 131,50,162,50,37,14,84,22,162,162,22,14,18,22,183,221, + 251,50,50,241,24,14,22,0,162,14,37,14,50,177,226,221, + 0,104,48,212,92,11,13,162,164,40,22,164,94,162,22,79, + 0,215,97,228,14,92,251,24,223,46,190,177,222,48,129,104, + 40,221,0,162,212,50,162,162,0,0,0,0,0,0,0,162, + 0,221,0,0,0,0,10,11,110,82,221,0,0,0,0,0, + 0,0,0,162,246,94,0,0,0,0,0,0,0,0,0,0, + 162,246,94,190,251,183,221,239,50,37,212,94,0,162,162,162, + 0,162,0,0,0,0,0,0,0,162,162,0,162,221,162,162, + 0,0,0,0,162,162,229,163,183,162,241,246,1,1,1,221, + 81,2,0,50,0,124,112,22,95,183,94,104,124,40,180,196, + 196,180,81,81,112,47,124,124,227,219,0,0,142,0,0,50, + 162,187,50,183,162,162,50,75,50,200,126,0,0,34,34,34, + 172,47,12,150,12,141,17,12,150,26,12,26,17,12,42,12, + 17,42,219,42,219,219,0,219,219,42,183,42,0,42,122,122, + 42,122,42,122,122,122,42,122,219,183,122,42,0,122,42,0, + 42,221,42,122,122,183,122,122,42,122,42,42,183,122,42,42, + 243,145,235,141,235,141,145,182,158,145,25,155,213,102,102,155, + 25,133,25,25,102,133,25,133,102,248,71,244,18,250,79,164, + 0,92,40,190,104,40,59,40,40,0,162,0,137,0,138,0, + 0,0,0,0,0,0,0,0,0,0,0,0,221,221,221,0, + 0,0,0,0,0,0,0,0,0,0,0,0,122,122,122,122, + 221,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,183,221,56,221,0,162,0,0,0,0,0,0,122,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,182,132,0,0,71,119,127,248,151, + 79,38,55,72,190,0,163,212,237,233,233,206,206,73,206,168, + 73,168,206,73,31,48,0,162,104,14,206,10,73,137,206,31, + 73,226,73,73,73,73,55,0,183,40,164,137,73,73,168,168, + 73,73,206,137,168,73,206,173,0,78,0,48,216,138,237,206, + 206,137,73,168,73,168,168,14,79,50,122,162,190,73,177,177, + 177,73,177,24,226,226,24,24,14,222,173,122,219,190,14,92, + 73,92,73,73,92,92,73,92,73,73,73,18,0,50,183,206, + 131,131,164,164,162,50,61,162,162,50,14,14,103,40,183,246, + 251,37,164,164,226,92,92,104,164,73,73,92,92,73,142,221, + 162,104,48,221,142,92,31,212,104,37,50,14,14,37,22,55, + 0,50,246,190,94,212,203,203,104,104,190,48,190,190,142,104, + 241,221,221,94,203,164,162,94,94,0,0,0,0,0,94,104, + 37,203,221,0,162,50,10,5,175,14,42,0,0,0,0,162, + 162,50,164,190,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,40,190,183,221,0,0,0,0,162,0,162,0,162, + 0,0,0,0,0,0,0,0,0,0,0,162,162,50,0,221, + 0,162,162,0,0,0,190,95,50,183,104,0,180,112,1,47, + 81,124,0,50,50,81,142,35,95,42,215,47,40,112,40,112, + 180,81,1,1,180,180,124,0,104,187,0,0,34,162,0,50, + 50,37,50,50,227,162,78,50,0,104,126,0,0,44,34,29, + 192,47,183,183,215,183,94,94,221,215,78,221,183,94,221,183, + 94,94,221,221,221,162,94,221,162,221,0,221,122,221,122,162, + 221,78,221,183,162,183,221,94,162,162,162,162,221,122,162,162, + 0,162,0,183,42,221,94,221,221,221,183,221,94,162,221,246, + 219,235,145,145,235,235,145,235,225,235,155,102,155,25,155,133, + 102,155,102,155,102,25,25,25,102,133,248,248,142,40,92,92, + 173,246,40,92,40,40,95,163,126,0,40,137,0,162,0,0, + 0,0,0,0,0,0,0,0,0,0,0,221,221,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,122,122,221,122, + 122,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,221,122,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,122,0,0,0,171,108,127,15,142, + 18,18,55,87,177,0,163,241,14,167,11,237,249,206,168,233, + 206,14,10,92,137,222,0,183,104,206,70,110,233,206,92,233, + 233,249,62,249,233,233,251,0,78,40,14,62,31,73,73,206, + 206,137,206,249,233,233,175,251,0,94,183,173,175,73,41,93, + 249,233,31,233,206,206,206,206,79,162,78,42,226,73,14,14, + 92,14,73,14,14,14,14,92,14,137,103,122,42,190,14,73, + 209,73,92,168,206,168,137,168,73,73,168,33,0,50,126,190, + 14,164,215,113,160,11,93,93,93,41,73,73,103,203,94,221, + 251,22,92,92,177,177,73,73,137,190,222,48,137,168,104,221, + 221,47,137,43,137,226,92,137,123,251,31,168,137,137,14,173, + 0,94,0,0,0,212,203,164,104,177,137,137,48,190,104,92, + 92,212,212,212,40,40,203,246,164,212,162,246,37,212,94,246, + 50,212,246,162,162,40,104,22,22,73,22,212,37,22,37,50, + 212,246,37,190,0,162,0,0,0,0,0,0,0,0,0,0, + 0,0,0,162,104,183,162,162,162,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,94,162,221,0,221,162,221, + 0,50,50,94,221,0,0,0,183,183,142,162,162,40,40,180, + 124,47,221,50,50,246,0,104,200,221,215,142,221,180,215,47, + 246,124,142,180,246,40,40,0,46,183,0,0,29,162,122,78, + 183,162,42,0,162,78,50,122,0,104,187,0,0,44,44,44, + 142,59,151,151,151,133,133,55,151,151,55,133,55,38,55,38, + 38,55,38,38,38,38,38,38,197,38,55,38,38,38,197,38, + 197,197,197,197,197,33,33,33,33,33,33,33,33,33,197,33, + 33,33,197,33,197,38,197,197,33,197,33,38,33,197,197,33, + 0,0,122,17,141,235,199,192,145,158,155,102,25,133,155,155, + 155,133,155,133,25,133,248,133,25,120,25,89,172,190,104,173, + 79,0,190,79,173,73,200,40,203,0,190,11,212,0,246,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,221,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,122,0,0,0,0,0,0, + 0,0,122,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,122,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,215,152,71,171,104, + 197,38,55,87,48,0,203,203,22,0,41,14,22,14,50,14, + 22,123,14,37,168,48,0,162,104,92,195,11,10,14,22,233, + 14,212,14,206,233,249,251,0,42,203,14,73,206,73,73,73, + 73,73,14,249,162,164,131,129,0,56,0,251,175,175,22,206, + 216,22,14,14,22,164,14,50,55,50,162,212,104,22,14,164, + 22,14,22,14,22,22,22,22,162,168,173,0,183,190,22,22, + 22,22,50,50,14,50,22,22,37,50,92,28,0,227,239,73, + 22,203,113,82,160,116,11,116,160,131,37,22,173,37,227,221, + 228,50,50,37,37,104,14,212,50,50,40,164,92,251,142,221, + 221,104,137,79,92,241,92,92,73,14,164,212,22,22,14,203, + 221,94,221,0,221,50,212,104,92,190,223,190,104,104,190,92, + 164,246,94,94,221,221,246,221,104,37,94,40,92,164,50,50, + 221,94,0,0,0,246,212,22,14,73,22,164,14,14,37,37, + 22,37,0,162,0,221,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,183,221,221,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,221,0,0,0,0,0,162, + 162,203,212,94,221,0,0,0,0,162,142,162,246,40,40,1, + 180,162,40,221,212,162,162,142,95,122,215,142,0,50,0,50, + 0,162,0,162,221,0,246,162,46,50,0,0,29,162,162,162, + 162,50,162,162,94,162,50,42,162,104,111,0,0,44,34,34, + 34,59,151,151,129,151,151,151,133,151,133,151,133,186,151,186, + 186,38,133,55,133,38,38,151,102,38,38,33,38,38,38,33, + 71,33,38,102,33,38,33,38,33,33,33,33,72,33,72,33, + 33,21,72,33,33,38,102,33,72,38,33,38,33,102,33,33, + 0,92,173,94,235,254,145,64,225,235,155,25,155,155,155,133, + 155,102,155,155,248,25,133,25,133,25,155,83,18,40,190,18, + 172,40,87,40,251,173,164,40,97,0,40,104,246,0,0,94, + 94,162,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,221,0,0,0,0,0,0,0,0,122,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,183,40,181,59,190, + 33,38,103,134,190,0,203,40,73,37,93,206,206,206,14,233, + 206,167,206,206,249,190,0,78,241,14,237,123,233,249,233,62, + 233,22,22,14,14,206,251,0,94,104,164,22,22,14,73,233, + 175,249,175,233,50,233,41,137,0,162,215,79,50,233,206,50, + 249,22,14,14,14,164,14,22,79,50,122,183,223,22,14,164, + 22,14,14,22,164,50,37,22,50,222,129,0,42,172,22,22, + 22,37,22,22,22,93,11,22,22,50,92,242,0,212,95,226, + 50,212,10,131,5,82,160,160,82,82,113,212,173,75,183,221, + 173,162,37,212,37,46,14,203,37,14,92,92,14,137,142,0, + 221,142,190,0,0,0,212,37,94,0,221,221,221,0,0,162, + 221,94,221,246,246,94,50,50,212,164,164,164,203,104,190,92, + 212,221,221,221,0,246,221,0,246,0,0,221,246,212,221,162, + 0,0,0,0,0,162,221,162,0,94,162,0,0,0,162,162, + 50,50,0,221,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,162,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,162, + 94,162,40,50,221,162,246,221,0,0,212,162,0,221,221,0, + 50,162,22,42,37,50,162,190,75,122,215,104,0,50,162,94, + 0,37,162,37,162,22,183,50,47,183,122,0,190,162,50,0, + 50,163,0,212,162,122,162,50,94,104,187,0,0,34,34,44, + 47,99,229,229,229,229,151,229,229,229,151,151,151,151,103,151, + 151,151,151,55,151,133,38,173,133,55,151,38,133,38,38,55, + 38,48,133,173,38,38,38,38,38,38,38,197,38,38,197,33, + 38,33,33,38,48,38,173,38,21,38,135,151,103,38,38,38, + 0,116,128,212,26,12,235,99,225,214,186,186,155,102,155,133, + 155,155,133,25,133,25,25,25,25,25,244,250,138,221,221,251, + 18,40,251,221,18,168,111,40,40,0,94,164,0,0,0,212, + 94,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,122,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,122,0,0,42,0,223, + 18,38,173,43,177,0,163,203,10,50,216,249,233,233,233,249, + 233,249,233,249,167,177,0,221,241,92,11,233,128,216,10,249, + 249,249,233,14,22,10,129,0,42,203,14,249,206,14,22,37, + 14,14,14,206,50,10,175,251,0,183,221,173,14,14,206,113, + 233,22,14,164,14,14,14,22,103,50,0,212,226,14,14,22, + 22,22,22,22,22,37,37,22,162,73,129,122,94,190,14,22, + 37,22,50,22,10,110,70,113,50,50,73,21,0,227,215,168, + 175,162,162,221,246,246,94,50,37,22,22,162,173,203,183,221, + 228,162,203,37,246,212,92,14,212,241,164,203,104,251,226,221, + 0,104,137,43,250,162,164,164,203,37,22,22,162,50,5,142, + 0,162,221,104,22,246,246,94,0,0,212,104,241,22,37,104, + 221,0,221,221,0,0,0,0,0,0,0,0,0,0,0,162, + 0,162,0,0,0,0,0,0,0,94,221,0,94,246,221,37, + 37,221,0,0,162,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,203,92,50,162,162,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,162,94,94,50,94,246,94,221,0,0,0,221,0,94,37, + 50,50,37,50,50,246,162,223,200,122,215,142,162,50,122,50, + 0,22,50,37,162,212,162,50,104,239,0,0,29,162,50,0, + 37,50,0,162,37,0,78,50,163,104,111,0,0,34,34,34, + 34,254,229,229,15,229,15,151,229,151,151,151,173,133,133,55, + 55,151,151,151,173,151,55,151,55,38,38,24,173,38,133,229, + 135,173,229,229,38,18,38,38,38,55,38,18,38,133,18,38, + 18,33,33,172,133,229,229,38,38,38,38,38,55,38,18,38, + 92,95,163,34,99,17,225,199,225,225,235,91,235,248,102,155, + 133,102,155,25,25,133,248,102,248,173,83,18,92,168,48,190, + 190,40,0,0,0,0,95,97,40,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,221,183,0,0,122,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,223, + 197,55,55,72,190,0,75,40,73,22,233,31,249,233,137,62, + 31,14,31,206,233,223,0,0,203,14,230,233,31,206,14,206, + 233,249,249,233,249,206,222,0,183,104,14,206,249,14,206,14, + 14,22,22,206,37,37,113,251,0,162,215,123,14,14,10,137, + 249,22,14,22,14,22,14,22,167,162,122,246,104,164,14,164, + 22,14,14,164,22,50,164,22,37,168,129,0,78,172,14,22, + 22,22,22,14,22,41,93,14,22,22,73,33,0,183,227,137, + 216,11,175,216,233,50,162,0,221,221,164,50,129,164,221,246, + 173,162,94,37,94,162,37,164,104,37,92,104,137,167,104,221, + 0,47,168,87,43,22,37,40,37,50,22,10,22,37,82,10, + 221,162,221,73,82,82,0,50,73,168,237,251,31,123,92,0, + 0,221,94,94,221,0,0,0,0,0,162,0,0,0,221,162, + 0,162,0,0,0,0,0,0,0,221,0,221,50,10,10,10, + 0,22,50,0,0,0,0,0,0,0,221,0,0,0,0,0, + 0,0,0,0,0,0,0,0,212,164,50,94,162,0,0,0, + 0,0,0,0,0,221,0,0,221,0,0,0,0,0,0,0, + 0,162,94,94,94,162,246,0,221,183,104,162,162,0,0,162, + 162,50,50,50,50,162,162,190,95,122,215,104,162,37,94,22, + 122,50,162,162,162,122,50,0,46,183,0,0,172,162,162,78, + 37,42,162,0,50,50,50,122,50,104,187,0,0,34,44,34, + 44,64,133,38,38,38,38,38,102,38,38,38,102,197,38,38, + 33,33,102,33,102,38,229,33,186,33,33,38,127,33,21,38, + 102,33,33,88,72,33,72,21,33,38,72,134,87,33,72,134, + 72,72,134,38,33,33,88,87,72,72,33,33,33,127,72,134, + 13,183,215,254,47,44,171,192,192,192,49,7,8,152,155,54, + 155,155,186,133,155,155,152,217,114,190,220,0,0,142,251,18, + 0,162,162,0,0,0,95,40,163,0,221,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,162, + 221,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,142, + 18,38,55,72,177,0,95,40,10,50,206,14,73,206,14,31, + 233,22,233,249,123,48,0,94,40,92,11,206,168,206,73,73, + 206,206,233,249,233,249,251,0,162,200,92,14,233,14,233,233, + 206,73,22,233,50,50,10,103,0,215,56,79,14,164,164,10, + 233,73,22,22,14,164,22,22,103,50,183,50,190,22,22,22, + 22,22,14,22,164,50,22,22,22,168,135,227,50,142,14,22, + 22,22,22,22,73,22,233,73,22,50,14,18,162,183,26,233, + 82,6,116,60,116,93,216,233,209,14,94,50,228,163,122,50, + 123,0,0,162,0,0,0,162,22,73,10,137,79,220,40,162, + 221,104,137,18,18,50,221,212,40,162,162,50,10,5,5,104, + 221,0,246,113,5,10,246,18,32,32,32,198,85,32,85,104, + 251,0,94,246,162,0,0,0,0,0,0,0,0,221,162,50, + 0,162,162,0,0,0,0,0,0,0,0,0,10,5,10,22, + 0,50,162,0,0,0,162,0,0,0,0,221,221,0,0,0, + 0,0,0,0,0,0,0,0,0,221,0,94,162,0,162,50, + 50,162,0,0,0,122,0,0,0,0,0,0,0,0,0,0, + 0,0,0,221,221,162,104,94,221,94,223,162,50,221,0,0, + 162,0,0,50,162,94,162,190,75,122,215,142,50,22,163,37, + 162,50,22,0,0,0,50,0,46,50,0,0,172,162,162,162, + 50,162,183,162,162,163,50,0,162,104,111,0,0,34,34,44, + 29,47,20,253,20,20,48,15,173,104,40,241,241,142,104,75, + 142,129,228,129,228,151,229,55,253,151,103,55,38,24,226,177, + 201,38,79,38,38,79,38,55,197,201,33,197,197,197,33,197, + 197,197,242,201,38,79,38,201,55,38,79,38,201,18,197,197, + 118,56,141,141,95,47,80,34,171,202,99,235,8,26,139,139, + 8,101,101,7,8,34,64,7,199,40,92,0,0,40,0,0, + 221,221,212,162,246,162,75,97,163,0,0,0,0,0,0,0, + 0,0,0,162,0,0,0,0,162,94,94,183,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,142, + 21,38,55,87,177,0,203,40,14,162,249,206,206,14,14,73, + 73,14,14,10,31,190,0,94,40,73,30,10,233,233,73,206, + 206,206,206,73,73,233,48,0,122,203,14,73,14,22,164,14, + 233,249,233,249,50,50,22,251,0,215,183,173,14,206,22,22, + 14,14,22,22,14,22,14,22,167,162,183,50,223,22,22,164, + 164,22,22,22,22,37,22,37,50,177,129,215,246,190,14,50, + 22,22,37,22,14,22,233,73,22,162,216,79,0,183,166,177, + 131,11,11,11,11,116,11,60,160,82,0,37,173,163,0,215, + 251,104,0,48,51,250,28,50,13,128,23,220,18,138,164,162, + 0,164,23,198,170,118,14,40,40,246,0,162,22,22,22,92, + 162,0,215,249,82,5,5,93,115,117,117,9,117,117,32,79, + 43,221,0,0,0,0,0,0,162,50,246,162,0,0,0,221, + 221,164,0,0,0,0,0,0,0,0,0,0,50,162,162,0, + 0,0,0,0,0,0,221,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,162,0,0,0,0,0,94, + 162,0,221,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,221,0,0,162,0,15,40,122,221,164,0,0,0,0,0, + 0,0,0,162,122,162,0,48,200,122,183,104,50,37,94,22, + 122,22,37,122,0,162,50,162,46,187,162,122,142,162,37,50, + 162,50,163,163,0,50,61,0,50,104,166,0,0,34,34,47, + 29,44,0,0,162,0,162,0,0,0,0,0,0,0,0,0, + 0,0,122,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,162,0,122,0,0,0,0,0,0,0,0,0,162, + 0,0,0,0,0,0,0,122,0,0,0,0,0,0,0,0, + 9,7,225,145,64,145,47,99,141,227,8,235,67,26,8,7, + 101,7,8,67,7,171,18,43,137,0,40,203,164,104,104,0, + 221,0,246,164,190,164,95,40,97,122,122,0,0,0,0,50, + 221,221,162,162,162,0,0,221,221,0,0,162,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,223, + 21,18,55,72,177,0,75,203,14,50,62,206,206,73,14,233, + 206,22,14,92,249,177,0,221,40,168,93,233,206,233,73,73, + 206,206,73,14,10,206,222,0,183,203,14,22,37,22,14,50, + 14,14,73,233,22,37,10,251,0,0,246,251,14,113,73,22, + 14,22,22,212,14,22,22,22,123,50,0,162,190,22,22,22, + 37,164,14,22,22,37,164,22,162,73,48,122,42,190,14,50, + 22,37,50,22,14,22,206,73,22,0,216,18,0,163,183,129, + 131,216,60,60,11,11,160,116,160,160,0,37,228,40,42,215, + 137,18,173,79,115,32,117,79,115,117,32,9,118,204,14,221, + 0,73,32,157,32,51,50,73,73,10,37,162,162,50,131,177, + 122,162,183,175,5,10,22,233,23,65,65,123,55,43,87,18, + 18,0,162,0,0,0,0,190,40,246,212,221,94,94,162,0, + 123,137,0,0,0,0,0,0,0,0,0,0,0,162,0,0, + 0,0,0,0,0,221,162,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,162,0,0,0,0,0, + 0,0,0,0,0,0,0,0,122,40,0,0,0,0,0,0, + 162,162,162,0,0,0,129,75,122,0,212,0,122,122,162,0, + 162,162,0,122,0,162,0,48,241,122,215,241,50,241,162,241, + 122,22,50,162,162,122,50,162,104,183,122,0,142,162,50,22, + 50,22,22,22,162,162,22,162,37,104,187,0,0,192,34,34, + 20,44,0,0,0,0,59,0,0,0,0,0,0,0,0,0, + 0,0,0,42,122,200,0,0,0,0,0,0,0,0,0,0, + 0,122,0,0,99,212,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,122,122,0,59,227,0,0,0,0,0,0,0, + 19,141,254,246,141,141,0,0,0,0,42,182,150,8,243,235, + 235,235,235,7,235,8,173,11,190,221,203,92,40,104,40,50, + 104,0,221,0,92,164,203,97,40,162,221,0,221,0,0,37, + 50,162,0,0,0,0,0,162,221,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,142, + 21,38,55,87,190,0,75,40,14,50,206,206,73,22,50,206, + 73,41,73,14,206,190,0,221,40,251,41,73,206,206,10,73, + 84,10,14,14,14,73,177,0,163,40,164,14,73,10,233,73, + 14,14,22,14,22,50,113,251,162,162,183,251,14,14,206,14, + 92,14,22,22,22,37,164,50,103,162,183,94,142,164,37,22, + 22,22,164,22,37,22,22,22,50,168,48,221,78,29,14,22, + 22,50,22,50,14,164,164,73,22,50,14,33,0,40,42,48, + 249,130,13,30,250,118,30,11,10,131,162,22,251,212,183,221, + 251,0,190,19,53,189,98,79,53,85,193,189,77,117,177,94, + 162,206,117,189,32,250,162,82,82,5,10,0,10,10,82,175, + 0,212,94,104,0,0,0,0,0,162,162,0,0,0,0,0, + 0,162,221,0,0,0,0,190,221,0,94,246,212,50,162,0, + 167,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,221,37,162,0,0,221,221, + 0,0,0,0,0,0,0,0,0,221,0,0,0,0,0,0, + 0,0,0,0,162,0,173,200,0,0,0,0,0,0,0,0, + 0,0,0,0,162,0,0,221,221,42,215,241,22,92,50,14, + 0,22,42,50,0,162,50,0,24,183,0,0,35,162,0,50, + 61,162,50,22,50,162,37,162,50,104,111,162,0,44,44,47, + 192,142,0,0,122,0,59,0,0,0,0,0,0,0,0,0, + 0,0,0,42,0,64,0,0,0,0,0,0,0,0,0,0, + 0,78,0,0,44,212,0,0,0,0,0,0,0,0,0,0, + 122,78,0,42,0,122,0,0,0,0,0,0,0,122,122,239, + 43,166,0,221,221,0,0,0,122,0,0,0,122,56,122,7, + 145,235,235,235,145,141,215,92,246,221,0,221,0,162,50,40, + 221,221,0,0,221,162,94,215,40,122,122,0,0,0,0,162, + 50,50,162,0,0,0,0,0,0,162,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,223, + 21,38,38,72,177,162,203,241,14,212,249,249,206,73,73,31, + 206,237,233,233,31,177,0,50,212,167,113,73,206,73,14,233, + 73,206,14,14,22,113,48,0,126,212,50,93,93,50,206,73, + 206,113,73,73,206,0,73,251,0,94,212,48,14,22,22,73, + 73,22,37,37,37,37,22,22,123,162,162,94,92,22,50,37, + 37,37,22,37,37,50,22,50,162,177,177,0,162,190,22,22, + 22,50,22,37,22,37,92,73,50,37,92,197,0,40,183,168, + 233,31,130,113,5,5,113,10,50,37,162,50,228,212,221,221, + 137,173,48,18,251,73,22,50,37,22,23,189,107,204,22,221, + 0,10,117,32,118,168,50,10,5,50,164,0,50,10,10,173, + 0,164,94,162,0,221,0,0,40,0,0,0,221,221,162,94, + 221,221,0,0,0,162,0,162,162,162,0,162,0,221,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,162,0,246,0,0,0,0,221,190,221,162,0,0,0,0, + 0,0,0,0,0,0,0,0,0,162,162,162,0,162,0,0, + 162,0,162,162,221,0,203,221,122,122,212,0,0,0,0,0, + 0,0,0,0,0,0,0,221,0,162,215,104,37,37,241,22, + 50,50,50,0,162,122,50,122,104,183,162,0,200,50,162,50, + 94,162,162,78,50,50,42,50,50,241,95,183,0,34,34,44, + 29,47,0,122,75,0,44,0,0,0,0,122,0,0,0,0, + 0,0,0,227,122,35,0,0,0,0,0,0,0,0,0,0, + 0,122,203,50,214,239,0,0,0,0,0,122,0,0,0,0, + 122,183,122,221,0,0,0,0,122,0,0,0,0,122,183,122, + 43,246,183,56,0,0,0,0,0,122,122,122,56,42,221,235, + 246,221,95,215,200,104,221,50,0,221,221,239,0,0,0,0, + 0,0,0,0,221,221,221,0,0,162,122,221,0,0,162,0, + 162,50,162,0,0,50,221,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,142, + 33,173,55,21,177,0,203,40,14,168,233,73,206,73,73,206, + 73,14,92,73,233,226,0,246,40,168,14,22,73,22,14,249, + 206,206,73,73,164,73,190,0,50,227,50,110,230,0,233,14, + 40,164,22,73,233,14,14,130,122,94,163,48,14,73,14,14, + 14,22,14,164,14,22,14,22,123,42,183,94,104,14,164,164, + 37,212,22,164,22,164,73,22,37,168,223,0,78,29,164,22, + 10,37,37,22,14,22,137,73,37,22,73,79,0,40,219,177, + 249,233,233,123,168,73,10,113,22,50,22,22,129,50,42,183, + 190,246,137,104,79,48,162,22,0,190,70,18,23,19,162,162, + 221,37,65,19,18,162,50,22,50,14,104,94,94,221,164,129, + 0,0,0,0,0,0,0,0,246,0,0,0,162,221,0,162, + 162,162,0,162,50,50,162,50,203,50,94,162,162,0,0,0, + 0,0,162,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,162,162,226,221,0,0,0,104,173,221,0,162,0,0,221, + 0,0,0,162,162,0,0,0,0,221,221,162,162,37,162,50, + 37,22,50,0,0,0,0,0,0,122,162,0,0,0,0,0, + 0,0,0,0,0,0,0,0,221,122,42,212,50,50,209,37, + 22,162,22,0,50,162,50,162,35,94,78,0,200,162,50,50, + 37,50,162,162,42,162,0,212,94,40,126,162,0,34,34,34, + 29,47,0,122,46,0,64,0,0,0,0,0,122,0,0,0, + 0,0,162,47,0,64,0,0,0,0,122,0,0,0,0,0, + 0,122,92,212,29,50,0,122,0,0,0,162,162,0,0,0, + 50,200,183,162,122,122,0,0,162,162,122,0,0,50,200,94, + 79,246,122,221,0,0,0,0,0,0,0,42,183,221,221,40, + 0,0,162,0,246,0,0,0,0,162,94,221,0,0,0,0, + 0,0,0,0,212,0,0,221,0,221,0,215,0,0,0,162, + 162,50,50,162,246,40,215,0,0,162,50,162,162,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,104, + 33,55,55,21,177,162,203,203,37,164,92,137,241,14,164,14, + 92,168,14,73,226,190,0,50,212,212,73,92,14,73,164,164, + 92,104,14,14,14,22,177,0,40,163,0,216,10,164,73,92, + 73,14,73,73,14,92,22,48,0,94,212,92,73,73,73,73, + 73,137,73,73,73,73,73,14,251,162,162,183,104,73,73,104, + 14,22,14,73,190,73,177,177,73,177,142,0,94,104,164,226, + 73,92,92,92,104,73,14,92,226,92,104,103,0,163,246,241, + 22,24,241,14,92,92,92,73,73,73,92,92,222,40,50,0, + 226,203,104,92,190,137,123,92,190,251,137,104,251,190,203,221, + 94,164,22,14,251,14,73,223,73,48,226,190,177,92,14,203, + 0,0,221,0,0,0,0,0,0,0,162,162,0,0,221,162, + 221,0,0,0,162,50,50,50,37,246,162,162,162,162,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,162, + 0,0,0,0,0,0,0,221,246,221,0,0,0,162,0,221, + 162,0,0,0,0,0,0,0,0,0,0,162,94,50,50,50, + 37,22,162,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,122,0,0,0,50,212,50, + 42,50,162,122,183,162,212,162,75,183,162,122,75,162,162,94, + 42,50,42,162,50,183,162,183,162,40,187,183,0,34,34,44, + 29,47,0,122,142,0,64,0,0,122,0,0,0,122,122,0, + 0,0,221,47,0,44,0,0,0,0,0,122,0,0,0,0, + 122,122,226,37,192,40,0,0,122,122,78,162,162,122,0,0, + 200,142,212,0,0,0,122,78,162,162,122,0,0,200,142,40, + 104,221,122,0,0,0,0,0,0,0,0,0,0,221,246,40, + 94,0,0,221,221,0,0,0,94,221,0,221,0,0,0,0, + 0,0,0,0,162,0,0,215,0,0,0,0,162,0,0,221, + 50,50,50,162,94,50,94,0,0,162,50,50,50,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,104, + 33,103,55,72,190,162,75,203,50,14,73,62,14,14,50,206, + 233,216,14,31,62,226,0,50,163,14,216,233,73,206,14,14, + 233,73,73,206,41,206,226,0,50,239,122,216,206,10,233,22, + 73,233,41,249,206,249,233,48,0,94,95,104,206,206,233,206, + 14,14,14,14,14,73,73,10,123,162,183,50,46,212,50,113, + 249,60,160,61,14,37,14,14,92,137,104,122,215,46,164,14, + 164,50,216,5,164,14,206,14,73,73,73,129,0,163,227,164, + 73,73,212,212,50,50,203,50,164,164,14,14,177,215,94,221, + 190,164,164,164,212,190,173,162,190,190,164,92,137,164,164,56, + 94,97,104,31,73,73,73,92,73,14,14,14,92,164,221,221, + 0,0,0,162,162,0,162,162,162,162,162,162,162,0,0,0, + 0,0,0,0,0,0,0,0,162,0,0,162,0,0,162,221, + 162,162,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,40,0,0,0,0,0,0,0,122,221,122,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,162,0,0,122, + 78,50,78,162,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,221,0,0,122,221,0,0,0,162, + 183,162,50,162,94,183,94,162,97,221,42,122,95,162,78,162, + 50,122,94,50,162,183,162,162,162,40,187,78,0,34,44,44, + 29,47,0,122,46,0,64,0,0,0,0,122,0,0,0,0, + 0,0,94,46,0,64,0,0,122,122,0,0,122,0,0,122, + 122,0,142,212,171,183,0,0,0,0,162,122,122,122,0,0, + 75,29,166,0,0,0,0,162,122,0,122,0,0,203,34,239, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 162,162,215,212,162,0,0,0,0,162,0,94,162,0,0,0, + 0,162,0,162,0,221,0,0,221,122,162,94,221,0,0,0, + 0,0,0,0,0,221,122,0,0,0,162,50,50,162,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,142, + 33,38,103,72,177,0,241,40,37,73,14,14,92,14,14,73, + 206,73,10,22,137,190,0,50,203,164,249,233,206,73,206,10, + 206,233,206,206,249,206,24,0,227,37,162,73,14,206,22,73, + 113,233,113,14,22,206,62,177,162,122,239,92,73,206,73,73, + 14,37,22,22,22,164,22,22,103,162,162,239,212,73,216,30, + 138,117,160,0,50,37,22,14,22,222,46,122,162,142,164,22, + 37,50,62,31,37,14,164,164,22,50,92,129,0,40,212,241, + 50,0,50,50,50,212,50,246,212,50,162,50,48,40,183,162, + 190,164,212,50,162,162,162,162,212,37,203,40,104,226,200,221, + 94,40,92,164,92,212,22,37,37,37,50,40,94,162,0,221, + 0,0,0,94,162,162,162,0,162,0,0,162,162,162,162,0, + 0,0,0,0,0,0,0,0,0,162,0,221,0,0,221,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,162,50,162,0, + 0,0,0,104,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,162,162,162,0, + 162,0,37,22,0,50,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,47,94,0,0,183,0,0,0,0, + 162,162,94,162,162,162,162,94,75,78,221,122,200,221,0,94, + 37,162,162,50,162,50,50,122,162,40,126,183,0,44,34,44, + 29,47,0,42,142,0,64,0,0,122,0,0,0,0,122,0, + 0,0,183,142,122,44,0,122,0,0,122,0,0,122,122,0, + 0,0,226,37,171,50,0,122,0,122,122,122,122,122,0,0, + 203,171,94,0,122,122,122,122,122,122,122,0,0,203,171,215, + 0,162,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,162,0,0,0,0,0,0,0,0,221,221,0,0,0, + 0,221,162,0,0,0,0,221,221,0,221,162,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,162,162,162,162,162,162, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,122,0,0,0,0,0,0,226, + 33,55,129,72,177,0,75,40,37,206,206,206,233,233,175,233, + 233,73,206,50,130,223,0,50,203,203,206,233,233,249,249,14, + 62,206,31,233,249,206,104,0,227,40,50,10,14,237,233,249, + 73,37,22,14,14,14,206,177,0,0,126,104,14,73,113,14, + 14,37,22,164,22,22,164,22,123,162,42,94,78,230,70,216, + 195,231,82,162,22,14,22,22,22,137,104,122,162,47,104,22, + 22,22,50,50,14,14,37,22,22,50,92,222,0,239,183,104, + 94,221,50,162,50,212,50,50,50,50,221,50,222,50,162,162, + 190,164,164,212,212,50,50,50,246,94,50,212,212,92,40,221, + 94,40,14,212,164,212,94,162,212,212,50,221,162,0,94,162, + 162,162,221,212,162,0,0,0,0,0,0,162,162,0,162,94, + 162,162,162,0,0,0,162,162,221,221,0,162,162,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,162,50,22,50, + 162,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,162,0,0,0,0,0, + 162,0,50,37,162,37,162,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,104,183,0,0,221,0,0,162,0, + 0,94,0,0,162,162,162,162,163,183,0,122,75,122,0,221, + 162,0,0,37,0,78,22,162,162,239,187,162,0,44,34,44, + 34,59,0,78,142,0,64,0,0,0,0,0,122,0,0,0, + 0,0,162,142,122,44,0,0,122,0,122,122,0,122,122,122, + 122,122,223,50,171,50,0,0,0,0,0,0,122,42,221,212, + 212,171,50,0,0,0,0,0,122,122,42,221,50,212,171,50, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,221,0,0,0,0,0, + 0,0,162,0,0,0,0,0,0,0,122,221,162,0,0,0, + 0,0,0,0,0,0,221,0,0,0,0,0,0,0,162,162, + 162,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,142, + 197,38,103,72,48,0,241,212,164,14,249,41,206,206,233,249, + 62,216,206,22,31,190,0,212,203,22,206,62,249,22,14,22, + 233,14,14,22,206,233,226,0,163,163,0,216,93,22,14,175, + 22,10,233,206,175,14,206,190,0,78,212,104,14,22,73,73, + 22,37,22,37,22,22,37,14,103,162,227,94,50,128,117,230, + 230,60,82,0,164,22,14,164,22,137,200,0,221,104,14,22, + 22,22,22,22,22,37,37,37,164,50,92,177,0,212,246,92, + 50,162,94,94,162,162,94,94,221,0,0,162,222,40,122,94, + 226,92,37,37,212,50,212,94,94,212,212,212,94,92,212,221, + 183,40,104,22,164,212,50,37,37,50,50,162,50,162,203,226, + 0,162,162,246,0,0,0,0,0,0,221,0,221,94,0,246, + 40,37,50,162,0,162,0,0,162,162,0,221,162,162,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,162, + 162,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,221,0,0,0,50,162,0, + 162,0,0,0,0,0,221,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,29,50,162,0,221,0,0,122,0, + 0,162,50,162,50,50,50,94,75,78,122,122,200,0,0,162, + 0,162,0,61,122,50,22,94,162,212,239,227,0,44,44,64, + 29,59,0,42,223,0,64,0,0,122,0,0,0,0,122,122, + 0,0,183,47,122,64,0,122,122,122,0,0,122,122,122,0, + 0,0,177,203,171,227,0,122,122,122,122,122,0,0,0,75, + 37,171,183,0,122,122,122,122,122,0,0,122,203,37,171,227, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,162,0,0, + 0,0,0,0,0,0,0,0,0,162,162,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,162,0,0,0,0,0,0,0,0,0,0, + 0,162,162,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,104, + 79,38,55,72,48,0,203,212,50,37,206,206,22,22,50,164, + 73,206,73,14,206,223,0,215,40,50,14,14,233,164,14,14, + 206,14,92,14,206,73,226,0,212,239,0,30,110,10,22,14, + 14,73,233,206,206,206,73,226,162,162,239,212,14,14,73,10, + 14,14,14,14,14,14,14,14,31,162,221,162,221,113,93,107, + 30,90,113,164,14,73,206,14,14,206,104,0,221,200,164,92, + 14,14,10,14,206,14,92,14,14,14,73,177,0,163,227,104, + 22,212,37,164,164,164,164,22,164,164,22,37,222,212,122,94, + 104,164,203,40,40,40,40,212,164,203,40,203,203,164,212,0, + 162,40,164,164,164,92,164,14,14,92,14,164,92,92,226,177, + 0,162,94,212,0,162,0,0,162,221,246,0,0,212,50,0, + 94,164,203,50,94,94,162,94,94,50,162,94,162,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,162,40,162,0,162,22,50,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,190,187,78,122,94,0,0,0,0, + 0,162,162,162,50,50,162,94,75,42,0,0,126,162,0,162, + 0,50,162,37,162,50,163,78,162,227,187,183,0,44,34,44, + 20,95,0,42,142,0,64,0,0,122,0,0,122,0,0,122, + 122,162,246,142,0,64,0,0,0,122,122,0,0,122,122,122, + 122,122,177,212,171,50,0,0,0,122,122,122,122,122,221,104, + 212,171,50,0,0,0,122,0,122,122,122,56,104,212,171,50, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,162,162,0,122,122, + 0,0,0,0,0,0,0,0,0,0,0,0,0,162,162,0, + 0,0,0,0,0,0,0,0,0,0,162,162,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,162,162,0,122,122,0,0,0,0,0,0,0,0, + 0,0,0,0,0,162,162,162,0,0,0,0,0,0,0,0, + 0,0,162,162,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,241, + 48,129,48,103,92,0,50,162,162,50,50,163,241,104,104,75, + 40,212,212,212,246,164,0,162,50,162,40,40,215,203,241,203, + 203,40,212,212,221,162,203,0,246,212,162,14,206,40,164,104, + 104,104,203,40,40,215,246,164,162,162,94,221,212,40,40,104, + 104,104,14,104,104,241,164,50,142,162,78,94,122,122,0,0, + 215,221,95,40,40,40,212,163,215,183,75,0,162,40,50,50, + 40,203,40,40,212,203,203,203,203,212,221,104,0,221,246,212, + 40,203,241,75,37,203,203,203,203,203,40,212,104,40,0,246, + 40,221,50,212,246,221,50,212,212,40,94,246,246,246,212,221, + 221,215,246,246,212,212,212,40,212,40,40,212,50,212,94,104, + 0,221,94,94,162,0,0,94,246,94,94,162,0,162,164,212, + 221,212,212,94,221,221,221,94,94,50,50,50,162,162,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,122,221,0,0,162,162,162,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,47,94,183,42,50,0,0,0,0, + 0,162,162,122,94,162,94,0,227,162,122,221,97,0,0,0, + 0,162,0,50,122,221,42,162,162,162,183,183,0,44,44,44, + 29,75,0,219,223,0,64,0,122,0,0,0,0,0,0,0, + 162,0,94,47,122,29,0,122,122,0,0,122,122,122,122,122, + 122,0,48,212,15,183,0,122,122,0,0,0,122,78,122,190, + 22,152,183,0,122,122,0,0,0,122,162,0,223,22,152,227, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,122,0,0,0,162,0,0, + 0,0,0,0,0,0,0,0,0,0,0,162,0,162,162,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,162,50,162,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,221,94, + 221,0,0,0,0,122,0,0,0,221,221,122,0,221,221,162, + 94,183,221,0,0,0,0,0,0,0,0,0,221,221,215,94, + 212,227,221,162,0,0,0,0,0,0,0,0,0,221,0,221, + 221,246,221,183,221,0,0,0,0,0,0,0,221,122,0,0, + 221,215,221,221,221,221,221,221,0,0,0,0,0,122,0,0, + 221,221,215,94,183,221,221,122,162,0,0,0,0,0,0,162, + 0,221,221,221,221,162,215,221,162,221,78,0,0,0,0,0, + 0,221,215,215,183,94,183,0,122,221,122,221,122,0,0,221, + 162,221,212,246,221,0,162,221,162,221,0,221,221,0,0,221, + 0,0,0,0,0,0,0,0,0,0,0,221,0,0,0,0, + 0,0,0,0,0,162,221,221,221,246,94,0,0,0,212,164, + 50,94,162,162,0,50,50,94,162,50,162,50,162,162,162,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,162,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,162,221,221,122,0,162,122,0, + 122,122,0,0,122,122,0,0,0,183,0,0,122,0,0,0, + 122,162,0,0,122,0,0,0,0,0,162,162,0,126,163,111, + 95,162,0,183,34,0,64,0,0,122,0,0,0,0,0,122, + 122,0,227,142,122,44,0,0,122,122,0,0,0,122,0,0, + 122,122,177,50,152,50,122,122,122,0,0,122,0,0,122,142, + 212,229,42,0,122,122,0,0,0,122,0,122,142,212,229,183, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,162,0,0,0,0,0,0,162,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,162,162,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,162,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,162,0,0,0,0,0,162, + 0,162,162,162,162,0,0,162,0,0,162,0,162,162,162,162, + 162,162,162,0,162,162,162,0,162,162,0,162,0,221,162,162, + 0,0,162,221,162,162,0,162,162,94,94,162,0,162,221,162, + 162,162,221,162,162,162,0,162,0,0,162,162,0,162,162,162, + 0,0,0,0,0,0,0,0,162,0,0,122,0,0,162,0, + 0,0,0,0,0,122,0,0,0,0,0,0,0,0,122,122, + 122,122,122,122,0,122,122,122,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,221,221, + 246,246,215,0,0,221,162,0,0,0,0,162,162,0,162,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,162,162,0,221,221,94,162,162,0,0,0,162,212, + 162,162,162,50,50,50,37,50,50,162,162,0,0,162,94,162, + 162,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,221,162,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,42,223,0,64,0,0,0,0,0,0,0,122,0, + 122,0,183,104,42,44,0,122,122,122,122,122,122,0,122,122, + 122,122,172,50,229,183,0,162,122,122,122,0,0,0,0,223, + 50,152,94,122,162,122,122,122,0,0,0,0,223,50,152,94, + 0,122,122,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,162,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,162,0,0,0,0, + 0,0,221,162,0,0,162,0,0,122,122,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 162,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,162,0,0,0,0,0,0, + 164,73,73,92,73,14,14,22,14,14,14,92,14,92,73,14, + 14,92,92,92,92,73,14,92,73,73,73,73,73,73,168,73, + 168,73,168,168,137,168,73,73,73,177,168,73,73,137,73,168, + 137,137,206,137,137,168,137,137,222,168,137,222,137,137,137,222, + 206,137,137,168,168,137,168,168,168,73,73,73,73,168,177,168, + 73,73,168,168,73,177,73,73,73,73,168,73,73,177,168,73, + 73,168,137,168,168,73,73,177,92,92,73,177,168,73,73,73, + 137,177,168,137,177,168,168,177,168,73,177,177,92,190,92,203, + 40,40,221,162,203,40,50,94,221,221,246,162,22,92,92,92, + 92,164,92,168,137,190,73,164,164,164,92,92,92,92,164,92, + 164,50,203,212,0,0,0,221,94,0,162,162,0,0,0,0, + 162,0,162,162,162,162,0,162,162,162,162,0,0,0,221,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,162,0,0,0,0,0,0,0,0,162,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,162,0,0,0,0,0,0,0, + 0,0,0,0,0,0,162,162,0,0,221,0,162,162,162,0, + 162,0,0,0,0,0,0,0,0,0,0,0,0,0,0,162, + 0,0,0,219,34,0,64,0,0,0,0,0,0,0,0,0, + 122,162,227,47,122,64,0,0,0,122,0,122,122,122,0,122, + 122,0,172,50,152,162,122,122,122,0,122,122,0,0,0,226, + 50,152,50,0,122,122,0,122,0,0,0,221,104,50,152,50, + 40,183,94,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,221,0,0,0,0,0, + 0,0,162,0,0,0,0,0,40,183,94,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,162,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 177,103,222,168,177,177,92,164,226,177,84,73,177,168,168,177, + 177,73,84,168,73,168,222,222,222,222,129,222,222,222,251,222, + 251,222,222,129,222,129,228,251,129,251,222,228,129,103,129,228, + 129,103,229,228,228,228,129,228,228,103,103,55,103,103,31,228, + 129,103,168,103,228,103,55,228,228,228,228,228,251,55,103,228, + 228,251,55,55,55,55,228,55,55,55,55,103,55,79,38,79, + 55,38,79,38,79,103,251,228,31,228,55,79,55,55,228,228, + 103,79,55,79,55,79,79,55,79,103,55,103,123,190,104,104, + 104,40,40,226,222,14,203,104,212,221,221,226,137,92,190,48, + 177,48,251,55,222,222,222,228,228,228,228,228,103,228,31,228, + 251,73,164,94,162,0,0,162,162,0,0,0,0,0,0,0, + 0,162,0,0,0,0,0,0,0,0,241,212,94,162,162,0, + 0,221,0,221,0,0,0,0,0,0,0,0,0,0,0,0, + 0,203,50,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,162,190,212,0,0,221,221,0,0,212,104,50,0,221, + 212,212,162,0,0,0,162,241,241,0,0,0,0,0,0,0, + 0,0,0,162,0,163,226,177,222,48,177,177,177,177,84,92, + 177,226,92,92,92,209,92,24,92,209,92,24,92,14,209,209, + 241,241,22,22,203,37,37,50,50,50,50,50,50,164,37,241, + 221,0,0,183,223,0,64,0,122,0,0,0,0,0,0,0, + 0,0,94,142,42,44,0,122,122,122,122,0,0,122,122,122, + 122,122,177,50,152,221,0,122,122,0,0,0,122,0,0,104, + 50,152,0,0,122,122,0,122,122,122,122,0,104,37,152,221, + 212,221,94,0,0,0,0,0,0,0,0,0,0,0,0,212, + 162,162,162,0,0,0,0,162,0,0,0,0,0,0,94,50, + 162,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,162,221,221,212,221,94,0,0,0,0,0, + 0,0,0,0,0,0,0,212,162,162,162,0,0,0,0,0, + 0,0,0,0,0,0,94,50,162,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 103,33,55,55,103,222,222,222,222,135,135,222,177,48,168,177, + 168,177,84,177,226,177,168,177,222,222,222,222,222,135,222,253, + 253,253,168,129,168,135,129,129,31,229,135,129,222,228,135,31, + 229,31,178,229,135,222,222,229,228,151,222,151,135,151,222,135, + 229,222,46,229,228,151,103,129,229,55,151,228,229,129,103,229, + 129,129,251,103,173,228,151,103,173,228,55,173,55,55,38,173, + 228,228,55,55,38,103,151,228,229,228,55,55,129,229,55,15, + 228,133,55,229,173,133,173,55,151,173,103,229,251,104,40,142, + 104,164,173,48,104,40,203,164,221,0,203,173,226,50,190,92, + 24,129,129,103,129,129,129,129,129,228,129,129,228,55,228,229, + 48,164,0,0,221,212,221,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,46,40,0,0,162,212, + 0,162,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,212,162,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,163,163,163,162,0,0,0,0,0,162,162,0,0,0,75, + 46,226,163,0,0,0,50,135,223,162,0,0,0,0,0,0, + 0,0,162,162,0,162,46,48,135,129,129,253,222,223,135,135, + 135,253,24,223,226,223,135,177,223,253,223,223,253,29,177,177, + 223,177,223,223,209,241,24,46,241,209,46,209,46,226,24,177, + 163,0,0,219,34,0,64,0,0,0,0,0,0,0,0,0, + 0,0,183,104,42,64,0,0,122,122,122,122,0,0,0,122, + 122,0,177,50,171,162,122,122,122,0,122,0,122,122,0,203, + 50,152,162,0,122,122,0,122,0,0,122,0,212,50,171,162, + 212,0,246,94,0,0,0,0,0,0,0,0,0,0,0,162, + 94,162,221,0,0,122,221,0,162,0,0,0,0,162,221,50, + 0,94,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,162,0,0,0,0,0, + 0,0,0,0,0,162,183,162,212,0,246,94,0,0,0,0, + 0,0,0,0,0,0,0,162,94,162,221,0,0,122,221,0, + 0,0,0,0,0,162,221,50,0,94,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,162,0,0,0,0,0,0,0,0,0,0,122, + 21,66,38,102,38,33,38,38,21,38,38,197,38,55,38,55, + 55,55,55,228,55,103,229,55,103,55,55,229,55,103,55,103, + 38,129,55,55,103,55,228,129,38,38,55,38,55,55,55,55, + 55,229,24,229,151,229,55,103,55,55,55,55,38,38,55,38, + 55,38,55,228,38,55,103,151,55,151,55,55,55,55,38,55, + 55,55,228,151,103,151,55,55,55,133,55,55,151,228,38,55, + 133,38,55,38,38,38,55,55,55,133,173,38,38,103,151,228, + 173,151,55,129,55,55,55,55,55,103,173,48,190,104,164,142, + 46,48,55,135,226,177,241,246,0,75,104,212,40,142,223,177, + 229,135,48,142,129,151,228,228,229,228,151,228,151,55,129,190, + 162,94,203,40,212,212,162,246,162,0,94,162,162,162,0,0, + 0,0,212,162,0,0,0,0,0,0,162,162,162,0,40,223, + 163,221,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,46,104,162,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,215,104,75,215,50,162,0,0,0,0,122,104,59,46,20, + 135,151,229,48,229,135,135,135,46,0,0,0,0,0,0,0, + 0,0,0,0,221,40,47,162,163,34,135,228,229,129,229,135, + 223,229,135,135,135,20,135,135,135,15,135,48,135,20,135,229, + 135,135,135,253,29,177,15,135,135,135,135,15,135,15,229,133, + 46,0,0,221,29,0,64,0,0,0,0,0,0,0,122,0, + 0,0,246,47,56,44,0,122,122,0,0,0,122,122,122,0, + 122,0,172,50,245,162,0,122,0,0,122,122,122,122,122,94, + 37,152,162,122,122,0,0,122,122,122,122,122,212,37,152,221, + 203,0,0,162,0,0,0,0,0,162,0,162,0,0,221,162, + 94,162,162,0,0,221,0,0,0,0,0,0,0,162,221,221, + 37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,162,0,0,203,0,0,162,0,0,0,0, + 0,162,0,162,0,0,221,162,94,162,162,0,0,221,0,0, + 0,0,0,0,0,162,221,221,37,37,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,162,0,0,0,0, + 66,170,66,66,66,66,66,66,66,250,66,66,66,66,134,66, + 134,66,66,134,134,43,33,143,134,134,43,134,72,88,72,72, + 156,103,88,72,197,88,197,33,72,33,242,72,197,197,100,197, + 38,197,38,55,38,201,197,38,38,197,55,38,103,103,229,38, + 197,197,38,38,33,33,197,197,72,33,197,33,88,33,33,38, + 38,55,129,103,55,55,197,102,201,197,197,38,55,201,38,72, + 33,228,228,55,55,201,55,55,55,55,228,229,38,33,55,55, + 38,201,38,55,38,38,33,38,33,33,151,103,129,48,129,251, + 103,38,55,151,48,48,200,0,221,212,162,0,40,50,47,104, + 200,162,75,46,135,55,151,55,55,55,55,38,55,31,223,241, + 212,40,241,212,0,0,221,0,40,40,40,50,94,162,0,0, + 0,0,94,162,94,200,94,221,94,40,212,0,0,162,0,162, + 0,162,162,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,183,94,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,162, + 221,0,0,0,0,183,0,0,40,183,227,59,229,38,197,33, + 55,55,55,151,33,38,135,163,0,0,0,0,0,0,0,0, + 0,0,0,221,0,94,226,75,122,47,223,229,38,38,38,229, + 229,133,151,151,229,151,151,151,229,229,20,151,229,229,151,151, + 151,151,186,55,229,151,229,151,133,151,151,151,151,133,103,102, + 200,0,0,183,29,221,64,0,0,0,0,0,0,0,0,0, + 0,0,183,104,42,64,0,0,122,122,122,0,122,122,122,122, + 122,0,48,50,245,122,0,122,122,0,122,122,0,0,221,0, + 212,171,162,0,122,0,0,122,122,0,0,0,0,40,171,162, + 212,162,0,0,0,0,0,221,162,162,0,0,162,162,162,162, + 0,162,0,0,0,0,0,0,0,0,0,0,221,221,94,37, + 203,221,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,162,221,0,0, + 0,0,0,0,0,0,0,0,212,162,0,0,0,0,0,221, + 162,162,0,0,162,162,162,162,0,162,0,0,0,0,0,0, + 0,0,0,0,221,221,94,37,203,221,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,221,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,162,0,0,0,0,0,246,0,0,0,0, + 20,228,253,142,46,46,142,34,142,223,142,223,223,177,190,190, + 48,48,48,129,15,135,24,177,129,135,135,129,135,48,20,29, + 20,226,29,253,177,223,223,24,177,24,44,223,142,142,226,46, + 241,47,59,35,59,59,34,35,59,97,203,187,26,42,183,187, + 95,200,95,46,29,20,20,48,15,20,129,135,129,48,253,48, + 253,178,177,177,253,129,48,172,190,29,172,229,48,172,223,172, + 253,29,135,177,253,48,223,177,135,226,177,226,226,135,48,222, + 135,177,253,222,154,129,229,129,229,229,135,135,135,228,229,151, + 55,229,222,223,200,239,212,0,212,94,0,0,0,0,221,162, + 0,0,94,226,226,226,24,177,177,177,177,253,24,92,226,142, + 104,164,212,162,0,0,162,0,50,162,94,0,0,0,0,0, + 0,0,0,0,94,246,0,162,227,50,75,203,0,0,0,0, + 0,0,0,0,0,0,0,0,0,162,0,0,0,221,0,0, + 0,0,0,0,200,46,0,221,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,162,183,59,34,135,133,55,38,38,135,135, + 229,55,38,38,129,200,162,0,0,0,0,0,0,221,246,221, + 0,40,0,0,221,40,212,104,200,162,47,50,200,229,38,38, + 33,38,38,33,197,197,38,197,102,197,133,38,197,38,197,33, + 102,33,102,102,33,38,102,197,102,33,100,33,102,33,100,143, + 223,0,0,78,223,0,64,0,0,0,0,0,0,0,0,0, + 0,0,221,200,56,64,0,0,0,0,0,0,0,0,122,0, + 122,0,48,227,171,122,0,0,0,0,0,0,0,122,0,0, + 94,224,162,0,122,0,0,0,0,0,122,0,122,162,224,162, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,221,0, + 0,0,0,0,0,0,0,0,0,0,0,50,50,0,162,50, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,162,162,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,221,0,0,0,0,0,0,0,0,0, + 0,0,0,50,50,0,162,50,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,221,163,162,0,0,0,0,0,0,0,22,0, + 0,0,0,0,0,246,50,0,0,0,0,0,0,162,162,0, + 0,0,0,0,0,0,162,183,183,162,122,0,0,0,0,0, + 0,0,0,162,122,162,0,162,162,162,162,162,50,50,162,94, + 221,162,162,162,162,0,162,0,162,212,246,221,0,0,0,0, + 0,0,0,0,0,0,0,221,0,0,0,0,162,162,0,0, + 0,0,0,0,0,0,40,94,0,0,0,212,104,162,122,0, + 0,0,0,203,251,221,162,183,79,137,246,104,221,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,221,0,0,0,0,0,0,0,162,0,0,0,0,162,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,183,94,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,162,0,221,94,50,75,241,163,221,0,0, + 162,75,241,241,50,0,0,0,0,0,0,0,0,78,0,0, + 0,221,0,0,94,94,221,212,40,162,246,212,0,0,50,75, + 226,24,241,35,46,142,24,226,92,46,46,223,223,223,178,29, + 223,190,209,92,24,46,226,226,24,226,226,223,226,142,92,142, + 94,0,0,0,75,0,224,0,0,0,0,0,0,0,0,0, + 0,0,221,215,56,99,0,0,0,0,0,0,0,0,0,0, + 0,0,24,162,171,59,75,200,200,200,97,122,26,122,183,122, + 40,200,75,241,200,200,200,97,42,183,122,183,162,95,241,200, + 0,0,0,0,0,0,0,0,0,0,162,221,221,162,162,0, + 0,0,0,0,0,0,0,0,0,0,0,37,50,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,162,221,221,162,162,0,0,0,0,0,0,0,0,0, + 0,0,0,37,50,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,200,129,46,239,221,0,0,0,0,0,135,226, + 94,0,0,0,0,46,135,162,0,0,0,0,0,163,24,162, + 0,0,0,0,0,0,75,24,35,46,126,94,0,0,122,162, + 50,50,94,50,50,50,50,50,50,212,37,164,203,164,37,164, + 37,37,164,37,203,164,203,50,163,178,223,142,47,227,0,0, + 0,94,212,0,221,0,0,0,0,0,0,0,0,0,162,0, + 0,0,0,0,0,0,172,104,0,0,162,229,201,226,95,50, + 0,0,0,92,173,221,221,172,92,104,48,6,212,0,162,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,221,162, + 162,0,0,0,0,0,0,0,104,246,0,0,0,0,0,0, + 0,0,0,162,221,0,0,0,0,0,0,0,0,0,0,0, + 162,162,162,221,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,221,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,122,78, + 122,0,0,0,0,0,0,0,0,0,0,0,0,0,78,0, + 0,0,0,0,0,0,94,164,50,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,64,166,0,0,0,0, + 162,183,235,8,171,166,0,0,0,122,0,0,0,44,171,171, + 229,151,49,15,44,0,245,133,133,133,133,133,186,133,133,133, + 38,152,235,229,122,15,102,38,38,133,38,133,55,133,133,38, + 186,8,223,0,152,38,151,151,151,55,151,151,38,151,38,186, + 55,55,171,55,29,15,229,151,151,133,229,133,229,151,135,29, + 0,0,0,0,0,0,0,0,0,0,162,183,94,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,162,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,162,183,94,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,162,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,162,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,162,162,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,46,151,226,59,162,0,0,0,0,0,253,253, + 37,0,0,0,0,200,135,50,0,0,0,0,0,95,24,162, + 0,0,0,0,0,0,75,46,47,59,126,221,0,162,122,215, + 212,212,40,212,203,203,164,241,164,241,241,241,241,104,241,104, + 241,164,104,164,164,164,164,203,203,223,29,142,59,227,0,221, + 162,221,203,162,0,221,203,221,0,0,0,0,0,162,162,0, + 0,0,0,0,162,0,48,104,0,0,162,135,103,142,47,187, + 0,0,0,221,0,0,162,173,0,221,0,104,0,221,0,0, + 246,246,0,0,0,0,0,0,221,0,0,0,0,0,0,221, + 162,0,0,0,0,0,0,0,104,246,0,0,0,0,0,0, + 162,0,0,0,0,0,0,0,0,221,0,0,0,0,0,0, + 246,212,0,162,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,221,183, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,221,215, + 78,0,0,0,0,0,246,203,203,221,0,0,0,0,221,122, + 0,221,162,183,162,78,122,122,0,0,245,15,0,0,0,0, + 162,95,192,235,186,111,0,0,75,200,183,78,162,133,38,151, + 133,38,235,245,29,0,133,33,38,102,197,102,38,197,100,33, + 72,186,158,245,42,186,134,72,143,72,143,72,88,72,72,134, + 72,7,38,122,245,30,66,30,66,43,66,156,66,156,66,30, + 66,179,152,72,158,197,192,197,20,33,229,33,135,33,44,38, + 0,0,0,0,0,0,0,0,0,162,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,162,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,162,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,162,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,162,162,162,0,0, + 0,0,0,0,35,228,190,47,187,0,0,162,122,162,29,135, + 37,0,0,0,0,47,154,203,0,0,0,0,0,111,223,162, + 0,0,0,0,0,0,200,35,200,47,95,183,0,94,94,37, + 104,164,226,226,92,92,223,73,92,190,137,177,190,137,190,226, + 190,226,92,190,190,92,226,92,203,44,253,223,47,126,0,221, + 94,212,223,221,0,172,18,0,0,0,40,0,0,246,162,162, + 0,0,0,0,221,246,172,226,0,0,42,20,55,172,111,239, + 0,0,0,0,0,0,221,173,246,215,221,246,221,40,221,246, + 40,221,162,0,0,0,0,221,221,162,162,0,0,0,0,0, + 0,0,0,0,0,0,0,0,40,246,0,0,0,0,0,162, + 0,162,0,0,0,0,0,0,0,40,0,0,0,0,0,221, + 162,221,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,162,0, + 0,0,0,0,0,0,0,0,0,0,221,0,0,0,0,40, + 200,212,94,162,94,0,0,50,40,239,0,0,0,0,183,162, + 0,0,221,0,183,163,227,50,94,0,183,162,0,0,0,0, + 0,0,0,0,162,162,0,0,200,24,50,162,42,162,162,162, + 94,42,122,162,221,42,64,162,94,94,94,50,94,94,50,187, + 50,50,162,50,78,35,212,50,163,37,163,37,163,163,22,163, + 163,219,37,122,171,37,22,163,209,22,22,241,241,241,22,241, + 241,14,187,163,183,163,183,22,227,22,42,75,122,37,56,22, + 0,162,94,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,162,94,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,221,0,111,56,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,162,0,0,162,0,0,0,0,162,0,0,0,0,0,0, + 0,0,0,0,47,229,178,47,166,0,0,0,0,212,229,177, + 212,0,0,0,0,172,44,212,0,0,0,0,0,59,223,162, + 0,0,0,0,0,0,47,24,47,59,163,183,0,215,221,37, + 104,241,104,104,226,92,142,226,226,92,190,226,190,48,73,226, + 48,226,92,177,190,190,73,226,164,44,48,223,47,166,0,221, + 94,241,92,221,221,40,104,0,162,162,212,0,0,212,0,162, + 0,0,0,0,0,0,172,104,0,0,42,135,55,135,59,166, + 0,0,0,0,0,0,0,173,0,246,0,40,246,221,162,40, + 221,221,0,0,0,221,0,246,246,221,221,221,0,0,162,0, + 0,0,0,0,0,0,0,0,104,221,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,40,0,0,94,162,162,50, + 221,162,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,42,183,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,215,212,0,0,0,221, + 104,104,241,40,37,0,0,50,95,227,0,0,0,0,221,122, + 122,94,227,94,221,212,47,226,104,0,95,166,0,0,0,0, + 162,183,183,183,122,78,0,0,223,24,183,162,187,126,219,26, + 166,42,183,42,78,221,224,122,42,183,56,219,122,183,42,183, + 42,26,122,221,219,64,42,42,42,42,42,42,42,42,42,42, + 42,122,122,0,152,122,26,42,26,26,26,26,26,26,26,42, + 42,42,122,122,162,42,122,26,42,42,42,42,122,219,221,219, + 0,221,221,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,162,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,221,221,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,162,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,183,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,162,0,0,162,0,0,0,0,0,0,0,0,0, + 0,0,0,0,253,55,223,44,126,0,0,0,0,221,197,29, + 50,162,0,0,0,129,253,50,0,0,0,0,0,46,135,78, + 0,0,122,0,0,0,46,46,75,47,95,50,0,94,183,40, + 164,104,226,92,142,226,226,226,223,226,177,190,226,190,190,226, + 226,190,223,92,73,226,190,177,163,47,20,142,59,126,122,221, + 215,40,190,0,0,0,246,162,221,162,94,0,162,40,162,162, + 162,0,0,0,0,0,172,226,0,0,91,229,38,172,59,126, + 0,0,0,0,0,0,221,173,122,221,0,221,0,0,221,246, + 246,246,0,0,221,221,221,221,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,40,215,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,162,162,0,0,0, + 162,0,162,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,183,111,78,183,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,94,190,162,0,0,0, + 227,104,241,164,212,0,239,163,40,187,162,0,0,0,0,0, + 0,183,40,212,183,162,246,203,104,122,20,34,0,0,0,0, + 221,42,150,47,142,200,0,122,253,190,78,0,78,20,99,44, + 59,141,59,47,241,0,29,29,172,29,190,29,29,29,224,44, + 243,254,190,223,183,20,142,172,29,172,29,34,20,254,99,47, + 150,219,177,162,245,229,129,229,129,229,129,229,129,229,135,150, + 29,12,190,129,46,129,15,129,129,129,229,135,150,20,26,129, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,162,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,162,0,0,0,162,0,0,0,0,0,0,0,0, + 0,0,0,0,129,55,29,47,111,122,0,0,0,221,197,251, + 183,0,0,0,0,222,103,183,0,0,0,0,0,46,129,162, + 0,0,0,0,0,0,47,46,163,59,227,183,0,212,42,40, + 241,104,104,226,142,226,190,177,190,190,177,48,177,48,190,177, + 190,177,190,190,190,226,226,48,164,200,223,226,99,126,0,78, + 183,75,226,221,221,0,221,162,221,221,94,0,94,212,94,221, + 0,0,221,162,0,0,48,92,0,221,162,229,201,172,47,42, + 0,0,0,0,0,0,221,173,56,122,0,0,221,246,246,221, + 246,246,0,0,221,221,0,221,0,0,0,0,0,0,0,246, + 221,0,0,0,0,0,0,0,215,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,94,50,94,162,162,221,94, + 162,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,183,187,163,0,0,0,0,0, + 0,162,0,0,0,0,0,0,0,0,0,200,203,162,42,94, + 0,40,104,203,212,0,223,209,221,0,0,0,0,0,0,0, + 0,0,0,0,0,122,122,0,163,162,47,200,0,0,0,122, + 162,42,187,40,241,212,0,122,253,177,111,162,183,47,95,104, + 224,219,95,241,226,122,34,104,104,46,200,104,104,104,166,104, + 219,187,104,104,219,171,142,172,142,172,190,190,48,59,59,47, + 26,42,48,0,245,251,129,129,129,129,129,251,129,173,129,8, + 20,12,48,129,251,129,129,129,129,129,251,129,12,20,17,135, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,162,122,219,122,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,162,162,162,0,0,0,0,0,0,0,0, + 0,0,0,0,251,55,223,44,111,162,0,0,0,221,201,55, + 50,0,0,0,0,48,201,37,0,0,0,0,0,24,228,50, + 0,0,122,0,0,0,35,142,163,200,126,94,162,95,126,75, + 104,46,104,226,223,223,223,190,223,190,48,48,135,48,177,172, + 48,20,48,177,48,177,48,253,241,142,29,190,47,95,0,163, + 126,200,223,122,221,0,162,0,221,0,162,0,221,221,221,162, + 0,162,0,0,0,221,48,190,0,221,26,229,201,20,59,187, + 0,0,0,0,0,0,221,38,0,122,0,0,221,246,221,246, + 221,0,221,221,221,0,246,0,0,0,0,0,221,40,246,221, + 221,221,221,221,221,0,0,0,221,221,0,0,0,221,0,0, + 0,0,94,94,221,94,94,212,162,0,221,162,162,162,50,50, + 212,162,0,162,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,95,142,162,0,0,0,0,0,0,0,221,104,34,46,59, + 183,122,200,46,37,122,223,177,94,0,0,0,0,0,0,0, + 0,0,0,0,0,0,227,183,78,122,0,0,0,0,122,122, + 78,162,0,0,221,122,0,26,135,223,166,122,212,0,0,0, + 0,0,0,215,142,219,59,0,0,122,221,122,122,122,0,0, + 0,0,0,0,227,47,0,0,0,0,0,0,0,0,0,0, + 0,0,135,162,171,0,0,0,0,0,0,0,0,0,0,0, + 0,183,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,162,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 162,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,192,132,122,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,162,162,0,0,162,162,0,0,0,0,0, + 0,0,0,162,228,103,177,142,141,122,0,0,0,221,201,79, + 22,122,0,0,0,48,201,164,0,0,0,0,0,35,55,50, + 0,0,122,0,0,0,46,47,75,46,95,183,162,241,224,200, + 104,46,226,142,142,223,223,223,223,20,135,135,129,229,129,135, + 129,135,129,129,129,129,135,251,241,223,253,142,59,183,0,59, + 95,200,172,162,162,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,221,0,0,190,92,0,0,42,151,38,190,95,183, + 0,0,0,0,0,0,0,79,0,0,221,246,221,221,221,40, + 221,0,0,0,0,0,221,0,221,0,0,246,40,40,40,246, + 221,0,0,0,0,0,0,0,221,0,0,221,221,94,0,221, + 0,0,162,212,221,94,221,212,162,162,162,162,162,162,94,162, + 94,94,162,0,162,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,183,200,221, + 0,122,20,142,221,0,0,0,0,0,0,122,227,34,29,223, + 44,46,200,142,75,122,44,241,221,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,94,126,122,0,0,0,0,0,162, + 42,221,0,0,166,239,0,26,154,135,187,122,126,0,0,0, + 0,0,122,219,142,42,64,122,183,183,166,219,166,26,166,95, + 200,95,187,162,187,64,0,0,0,0,0,0,0,0,0,0, + 0,0,135,162,229,122,0,0,0,0,0,0,0,0,0,0, + 0,59,0,0,0,0,0,0,0,0,0,0,0,0,0,97, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,40,162,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 40,162,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,171,254,12,12,122,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,162,0,0,0,162,0,0,0,0,0, + 0,0,0,221,228,55,29,44,111,162,0,0,0,221,38,201, + 104,0,0,0,0,48,55,164,0,0,0,0,0,142,55,212, + 0,0,122,0,0,0,200,46,241,46,95,50,42,35,75,46, + 104,142,142,226,142,223,172,177,190,172,135,135,129,129,229,129, + 135,135,135,135,135,253,135,129,46,34,48,142,64,126,0,97, + 59,47,48,56,215,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,190,104,0,0,50,229,103,223,224,126, + 0,0,0,0,0,0,221,173,42,42,221,40,246,246,246,246, + 221,0,0,122,0,0,0,221,0,0,221,221,221,221,94,40, + 0,162,221,0,0,0,0,221,0,221,0,0,221,221,0,0, + 0,0,94,221,221,221,162,37,50,246,162,162,0,162,0,221, + 40,221,94,162,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,227,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,75,34,142, + 95,162,183,75,47,122,0,0,0,0,0,227,221,46,20,29, + 223,34,226,223,104,122,223,212,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,162,0,0,0,0,122,183, + 162,78,0,0,111,227,0,17,135,48,163,42,126,0,0,0, + 0,0,122,227,200,42,20,35,142,24,24,223,223,44,223,226, + 46,35,35,47,35,64,0,0,0,0,0,0,0,0,0,0, + 122,0,135,26,229,0,0,0,0,0,0,0,0,0,0,0, + 0,171,0,0,0,0,0,0,0,0,0,0,0,0,0,200, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,212,50,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 212,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,183,166,150,243,122,26,0,0,221,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,162,162,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,221,103,55,48,34,224,122,0,0,0,221,197,79, + 241,0,0,0,0,48,201,164,0,0,0,0,0,223,55,37, + 0,0,122,0,0,0,35,226,241,241,166,183,122,35,224,35, + 142,226,142,223,142,223,20,253,253,20,135,15,129,229,129,229, + 229,229,129,229,48,222,129,222,46,223,129,223,47,166,0,75, + 59,59,48,122,183,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,190,104,0,0,183,151,79,190,59,111, + 0,0,0,0,0,0,0,173,0,221,221,246,221,246,246,221, + 0,0,0,78,0,94,221,221,0,0,221,221,221,221,221,162, + 0,0,0,0,0,0,0,162,0,0,0,221,0,0,0,0, + 0,0,221,221,0,162,221,221,162,246,0,0,0,162,162,0, + 203,94,212,94,162,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,221,0, + 0,0,0,0,0,0,0,122,0,0,0,0,0,183,142,29, + 142,94,221,122,95,0,0,0,183,78,0,47,142,42,35,29, + 34,223,24,24,46,78,177,75,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,183, + 162,122,0,0,95,239,0,187,135,20,97,183,163,0,0,0, + 0,0,42,183,0,219,34,162,0,0,0,0,162,0,0,0, + 0,0,0,0,99,44,0,0,0,0,0,0,0,0,0,0, + 122,0,135,122,171,122,0,0,0,0,0,0,0,0,0,0, + 162,171,0,0,0,0,0,0,0,0,0,0,0,0,0,246, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,94,221,0,0,0,0,0,162, + 0,0,0,0,0,162,212,40,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 94,221,0,0,0,0,0,162,0,0,0,0,0,162,212,40, + 0,0,0,126,0,122,26,0,26,212,0,162,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,162,0,0,0,0,162,0, + 0,221,162,0,0,0,162,0,162,0,0,0,0,0,0,0, + 0,0,0,0,55,79,253,29,59,78,0,0,0,0,201,201, + 164,0,0,0,0,222,55,14,221,0,0,0,0,223,55,22, + 0,0,122,0,0,0,24,223,200,104,126,162,78,35,224,47, + 104,47,226,142,190,142,29,29,190,15,135,129,229,229,229,129, + 135,135,135,135,129,229,129,135,200,48,222,29,47,95,162,224, + 224,35,48,221,94,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,142,104,0,0,50,229,33,177,59,95, + 0,162,0,0,0,0,0,173,0,0,0,0,0,0,221,0, + 0,0,0,0,221,246,221,221,0,0,221,0,0,0,162,221, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,221,221,0,0,221,0,0,221,0,162,0, + 104,212,162,162,162,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,94,221,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,187,219,0,219,132,183,122,95,35, + 183,0,0,0,162,0,122,95,239,97,126,142,15,29,64,29, + 20,29,29,29,35,122,35,212,0,0,0,0,0,0,0,0, + 111,183,95,64,224,95,0,0,0,0,0,0,0,0,162,78, + 122,183,40,0,111,40,0,187,229,129,163,183,111,0,0,0, + 0,0,42,42,0,26,29,0,0,0,0,0,0,0,0,0, + 0,0,0,0,224,34,0,0,0,0,0,0,0,122,219,0, + 0,122,135,42,229,0,0,0,0,0,0,122,0,122,122,162, + 162,245,0,0,0,0,0,0,122,0,122,0,122,122,122,183, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,162,212, + 203,0,0,0,0,164,92,40,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,162,212,203,0,0,0,0,164,92,40, + 0,0,0,0,0,0,0,0,122,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,221,103,38,20,29,64,42,162,0,0,221,38,18, + 24,0,0,0,0,135,55,14,0,0,0,0,0,223,201,212, + 0,0,122,0,0,0,142,222,24,142,126,94,183,44,59,47, + 142,35,29,223,29,223,223,172,223,172,20,129,229,151,135,229, + 229,135,229,229,135,229,135,222,59,129,129,223,59,141,162,97, + 224,47,20,94,183,221,142,251,251,129,190,48,190,48,48,48, + 172,173,173,173,173,173,173,226,172,190,203,229,197,104,59,95, + 0,162,183,215,40,95,47,172,104,104,40,40,221,221,246,104, + 104,104,47,246,246,221,221,246,40,40,221,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 162,162,50,94,162,162,0,0,212,164,162,221,94,94,162,0, + 212,50,162,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,221,0,0,0,0,0,0,0,221, + 221,221,183,246,221,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,162,0,111,64,182,59,142,224,59, + 0,0,224,59,0,0,0,34,15,221,126,229,151,135,20,29, + 35,200,163,246,94,0,162,0,0,0,0,0,0,0,122,162, + 183,29,40,166,34,171,200,162,0,0,0,0,0,0,162,78, + 0,183,64,221,109,227,0,61,229,253,111,183,95,0,0,0, + 0,0,42,26,0,219,34,0,0,0,0,0,0,0,0,0, + 0,0,0,0,99,34,0,0,0,0,0,0,0,0,141,42, + 0,0,135,0,245,95,78,122,122,162,0,122,122,122,162,183, + 162,245,40,42,0,122,162,0,122,122,122,122,122,122,42,95, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,94,0,0, + 212,142,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,221,103,197,15,20,64,183,0,0,0,162,201,220, + 226,183,0,0,0,48,201,241,221,0,0,0,0,223,38,37, + 0,122,122,0,0,0,226,251,223,223,75,183,122,35,59,47, + 226,29,142,29,172,29,20,20,223,20,129,151,103,229,229,229, + 229,229,151,229,229,229,129,129,142,228,222,190,47,163,0,59, + 59,47,20,215,227,0,40,190,190,251,48,48,48,48,48,251, + 190,129,173,173,48,173,251,190,137,48,203,151,79,47,59,111, + 0,183,212,227,40,40,40,190,142,190,104,164,212,40,142,190, + 142,190,104,40,246,221,212,246,40,221,0,0,162,246,212,221, + 0,0,0,0,221,0,0,0,0,0,0,0,215,94,122,221, + 40,164,212,246,94,94,162,162,94,203,212,37,37,50,162,221, + 40,221,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,162,162,0,0,0,0,221,221,221, + 221,221,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,42,59,99,64,29,172,29, + 183,0,47,15,0,0,0,44,38,29,42,64,223,47,97,163, + 221,0,0,0,0,0,0,0,0,0,0,0,0,0,122,122, + 122,44,171,0,162,20,29,64,219,122,0,122,0,0,122,78, + 0,122,64,221,95,95,0,182,103,178,75,187,163,0,0,0, + 0,0,219,219,122,219,44,0,0,0,0,0,0,0,0,0, + 0,0,0,0,224,44,0,0,0,0,0,0,0,0,219,122, + 122,122,48,122,245,203,0,0,0,0,0,0,0,0,0,162, + 122,245,203,0,0,0,0,0,0,0,0,0,0,0,0,227, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,162,0,0,0,0,0,0,162,0,0, + 212,212,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,162,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,162,0, + 0,0,0,162,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,221,228,201,135,15,44,94,0,0,0,221,201,201, + 24,0,0,0,0,48,103,14,0,0,0,0,0,223,201,212, + 0,0,122,0,0,0,223,228,172,190,224,183,183,35,139,47, + 142,142,223,223,29,223,20,20,29,20,229,229,151,129,229,229, + 135,229,129,135,135,229,229,229,35,55,222,223,99,95,0,59, + 59,59,20,94,227,0,0,0,0,0,0,0,0,221,0,0, + 0,0,0,0,0,0,104,104,0,0,162,197,79,46,59,95, + 0,0,0,0,0,0,0,142,104,203,40,40,246,212,40,226, + 104,246,40,246,246,0,221,162,221,0,0,0,0,212,92,246, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,162, + 162,162,162,162,221,50,162,162,0,162,212,37,50,50,162,212, + 212,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,162,0,0,0,0,0,246,212,246, + 246,246,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,183,254,150,64,223,29,20, + 34,64,29,15,29,187,95,224,229,29,212,94,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,162,59,44,99,47,29,20,34,56,0,0,0,0,122,122, + 0,56,64,221,224,239,0,109,151,135,111,166,126,0,0,0, + 0,0,219,183,0,132,44,0,0,0,0,0,0,0,0,0, + 0,0,0,0,224,64,0,0,0,0,0,0,0,0,42,42, + 122,122,48,122,245,200,0,0,0,122,0,0,0,0,0,0, + 0,245,200,0,0,0,122,0,0,0,0,0,0,0,0,221, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,221,50,0, + 0,50,162,162,162,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,122,0,122,122,122, + 122,122,122,221,228,18,15,15,44,183,219,235,219,56,201,79, + 226,56,0,0,0,135,201,241,162,0,0,0,0,223,55,241, + 0,122,122,0,0,0,177,228,253,223,200,183,183,35,111,35, + 223,44,142,34,223,20,20,48,20,20,229,135,229,229,229,229, + 229,229,229,229,129,135,135,129,142,79,135,223,95,166,0,224, + 224,46,20,215,40,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,142,104,0,0,187,72,55,104,95,126, + 0,0,0,0,0,0,0,172,190,0,0,246,104,40,40,251, + 104,0,246,246,221,221,162,246,0,0,0,0,0,246,104,94, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,162,162, + 0,0,0,162,162,246,162,162,0,94,0,221,162,50,162,94, + 50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,221, + 0,221,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 162,0,0,0,0,0,0,0,0,187,64,99,64,20,29,20, + 15,15,15,229,29,224,64,0,0,162,0,122,122,0,0,78, + 0,0,0,0,0,0,0,0,0,0,0,42,122,0,0,0, + 0,183,183,221,59,34,192,29,29,122,166,122,0,0,0,122, + 0,56,47,0,59,227,162,75,103,135,126,187,126,0,0,0, + 0,0,42,26,0,219,34,0,0,0,0,0,0,0,0,0, + 0,0,0,0,224,171,183,122,0,0,0,0,183,42,254,183, + 122,42,135,0,245,172,0,183,122,0,0,0,0,0,0,183, + 0,245,172,0,183,122,0,0,0,0,0,0,0,162,122,95, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,221,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,221, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,122,122,122,122,122,122,42,122,26,0,0,42,26,26, + 26,26,26,26,12,26,12,12,26,12,12,12,8,12,12,8, + 8,8,8,26,228,55,135,171,44,187,42,243,150,221,201,197, + 226,0,0,0,0,253,201,241,162,0,0,0,0,223,103,241, + 0,0,122,0,0,0,177,103,222,226,224,50,183,44,59,47, + 142,142,223,29,142,29,135,20,20,20,229,229,151,229,229,229, + 229,229,229,229,135,229,135,135,223,201,135,223,75,126,162,224, + 59,59,135,183,166,0,0,0,0,162,162,0,0,0,162,162, + 162,162,0,0,0,0,104,104,0,0,183,242,228,142,95,187, + 0,162,0,0,0,0,0,251,190,0,0,94,203,203,164,172, + 104,221,246,246,221,221,0,0,0,0,0,122,122,40,92,212, + 0,221,162,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,221,162,0,212,221,0,162,212,0,0,0,221,221,0, + 221,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,162,221,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 183,215,0,0,0,0,0,0,0,219,214,64,225,15,20,59, + 163,50,95,59,0,166,20,95,0,0,0,0,0,0,0,0, + 122,183,42,0,0,0,0,0,0,0,0,78,122,42,0,0, + 0,132,171,47,221,239,20,171,20,42,64,219,0,0,0,122, + 221,183,44,122,224,227,122,109,55,135,95,227,126,0,0,0, + 0,0,183,42,0,12,35,0,0,0,0,0,0,0,0,0, + 0,0,0,0,150,29,254,219,122,219,254,187,215,150,99,219, + 122,42,135,0,245,229,95,0,0,122,0,0,0,0,122,42, + 122,245,229,95,0,0,122,0,0,0,0,42,42,42,17,20, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,162, + 183,0,0,122,78,122,122,0,0,0,0,0,221,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,162,183,0,0,122,78,122,122,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,42,26,26,0,26,26,26,26,26,42,0,26,26,26, + 26,26,26,26,26,26,26,26,26,26,17,42,0,12,8,12, + 12,12,12,12,12,12,12,12,8,26,12,12,12,26,12,12, + 26,17,26,42,55,79,135,229,44,95,42,26,219,0,201,79, + 177,122,0,0,0,135,55,92,162,0,0,0,0,253,103,22, + 0,0,42,0,0,0,222,55,222,177,111,126,42,44,59,35, + 34,223,142,29,223,29,20,253,253,20,135,129,151,229,229,20, + 229,151,229,20,135,229,129,129,223,103,222,142,59,227,0,59, + 59,59,15,183,40,0,122,162,0,0,122,162,78,162,122,122, + 122,122,122,0,0,0,142,241,162,162,163,72,103,46,97,95, + 0,0,0,0,162,0,0,48,142,0,0,40,172,172,190,104, + 246,246,221,40,0,0,0,221,0,0,40,47,95,164,104,221, + 221,227,221,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,162,162,0,0,50,212,0,0,40,0,0,0,162,0,0, + 162,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,162,162,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,94,221,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,94,163,94,0, + 0,0,0,0,0,0,122,221,0,0,122,0,0,0,0,0, + 0,126,46,162,0,0,0,0,0,0,0,0,42,141,111,0, + 0,183,29,46,227,0,59,226,200,183,141,219,0,0,122,122, + 122,183,95,0,59,183,122,99,103,135,111,187,95,0,0,0, + 0,0,42,42,0,150,44,0,0,0,0,0,0,0,0,0, + 0,0,0,0,254,29,142,47,59,104,166,219,95,150,47,122, + 122,0,48,0,245,173,229,34,59,59,75,224,122,141,150,254, + 150,152,173,229,34,59,59,75,224,122,141,150,254,141,44,229, + 0,0,94,0,0,212,142,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,183, + 183,0,183,42,183,122,122,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,94,0,0,212,142,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,183,183,0,183,42,183,122,122,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,122,42,42,0,122,219,26,219,26,42,0,26,26,26, + 26,26,26,26,42,26,26,26,42,42,42,0,0,42,42,42, + 42,42,42,26,42,42,42,42,42,42,42,42,42,26,26,122, + 42,122,122,0,103,55,15,15,34,254,0,122,122,122,201,201, + 226,122,0,0,0,48,103,164,78,0,0,0,0,34,103,203, + 0,0,122,0,0,0,222,228,222,29,75,126,183,34,64,223, + 20,29,142,29,20,20,20,15,135,15,15,229,151,229,151,135, + 229,229,229,229,135,135,135,229,142,55,251,142,95,187,0,59, + 64,59,135,183,227,0,122,162,0,0,0,162,78,162,78,162, + 0,0,162,162,221,0,104,164,221,94,203,242,201,35,75,111, + 0,0,0,0,0,0,221,48,226,0,0,221,40,40,40,246, + 246,246,246,246,0,0,0,40,0,122,40,142,40,164,50,40, + 227,111,162,0,0,0,122,0,0,0,0,227,0,122,221,0, + 0,0,0,0,0,104,92,94,162,40,162,94,212,212,162,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,94,162,0,0,162,162,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,215,215,246,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,215,162,0,0,0,0,0,0,0,0,0,0, + 0,0,0,122,99,0,0,0,0,0,166,221,0,78,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,162,141,214,212, + 0,0,99,0,0,0,0,0,0,50,0,0,0,0,0,122, + 56,221,0,0,224,50,122,59,151,135,111,111,126,0,0,0, + 0,0,183,42,0,150,47,0,0,0,0,0,0,0,0,0, + 0,0,0,0,254,47,221,221,122,221,162,0,122,0,122,0, + 122,42,177,78,34,221,94,212,94,94,94,94,162,162,162,162, + 94,224,221,94,212,94,94,94,94,0,162,0,122,221,221,221, + 0,0,221,0,0,212,40,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,221,0,0,212,40,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,221,55,228,229,15,44,254,122,0,0,42,79,197, + 226,183,0,0,0,253,55,14,162,0,0,0,0,135,38,241, + 0,0,42,0,0,0,135,228,135,223,224,239,42,34,99,44, + 29,142,29,20,20,15,15,15,20,151,229,229,229,151,38,229, + 15,229,229,229,135,229,15,129,92,103,48,226,47,227,0,59, + 59,64,229,94,166,0,0,0,0,0,0,0,162,122,162,162, + 0,162,0,0,0,0,104,241,94,162,203,72,79,46,59,95, + 0,95,187,166,187,166,0,48,142,0,0,0,0,0,0,246, + 221,221,221,221,221,221,221,0,0,0,0,0,0,221,104,104, + 183,95,221,0,0,183,94,162,0,221,221,162,0,0,0,0, + 0,162,0,183,40,226,164,162,0,40,94,212,40,50,221,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,162,0,162,50,50,162,0,0,0,0,0,221, + 221,0,0,0,0,0,0,0,0,0,221,221,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,44,166,0,0,183,227,0,183,0,246,183,162, + 0,0,0,0,0,0,163,162,0,0,0,0,0,42,64,29, + 132,0,141,37,164,0,0,0,0,95,0,0,0,0,78,78, + 183,94,0,0,224,215,42,35,103,20,95,111,95,0,0,0, + 0,0,42,122,0,243,35,0,0,0,0,229,104,203,129,0, + 0,0,0,0,99,64,0,0,0,0,0,0,0,0,0,0, + 122,56,177,42,44,0,0,0,0,0,0,0,0,122,0,122, + 0,78,0,0,0,0,0,0,122,0,0,122,0,122,122,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,122,42,0,122,122,122,122,122,122,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 122,122,0,221,228,103,135,15,44,224,122,0,0,221,38,201, + 226,122,0,0,0,135,38,241,0,0,0,0,0,29,79,200, + 0,0,42,0,0,42,24,228,222,223,59,183,50,29,99,34, + 29,29,29,20,20,177,229,151,34,48,186,20,38,34,29,55, + 229,229,229,135,135,229,135,229,223,103,222,226,95,187,0,59, + 64,47,229,215,183,0,0,0,0,183,59,183,0,122,0,162, + 122,0,78,227,183,0,104,203,212,162,142,242,103,46,224,126, + 0,20,47,47,47,64,0,190,92,0,122,95,95,0,0,40, + 221,221,215,40,246,0,0,221,0,0,0,0,0,0,40,40, + 227,183,0,0,0,221,183,94,0,0,56,162,0,0,0,0, + 0,0,162,95,246,200,203,203,162,104,50,162,221,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,162,212,50,162,0,0,0,0,0,0,0, + 0,162,221,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,183,59,126,126,59,212,94,95,42,0,122,183, + 122,0,0,0,78,183,212,0,0,0,0,0,0,42,99,20, + 171,59,224,241,35,99,59,47,47,187,0,0,0,0,78,78, + 166,78,0,0,59,183,122,64,103,171,75,111,95,0,0,0, + 0,0,26,42,0,141,47,0,0,0,0,212,94,221,212,0, + 0,0,0,0,59,64,0,0,0,0,0,0,0,0,0,0, + 122,221,48,183,34,122,122,122,42,78,42,42,122,42,122,42, + 162,78,0,122,122,42,122,122,42,78,78,122,42,122,42,239, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,122,162,0,26,139,8,182,211,182,0,12,12,12, + 132,17,219,219,42,219,122,122,42,42,42,219,26,26,26,219, + 26,42,42,42,42,122,42,42,42,42,122,42,122,122,122,122, + 122,122,122,122,55,103,229,15,34,59,0,0,0,0,201,220, + 24,183,0,0,0,15,201,226,122,0,0,0,0,34,103,24, + 0,122,122,0,0,26,187,228,129,177,59,126,26,34,35,44, + 190,29,20,20,171,253,22,209,178,22,206,36,38,38,214,229, + 38,151,151,229,20,229,135,229,177,103,222,142,200,227,0,59, + 64,64,15,221,183,0,0,162,0,95,95,47,0,122,0,122, + 0,0,47,142,47,0,104,203,94,162,142,197,228,142,47,126, + 0,20,111,59,35,35,0,223,226,0,132,172,47,246,0,203, + 40,221,215,40,221,0,0,0,0,0,0,0,0,0,0,162, + 215,0,0,0,0,0,0,95,0,0,0,0,0,0,0,0, + 0,183,122,50,183,212,183,15,221,40,162,94,221,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,162,162,162,0,0,0,0,0,0,0,0, + 221,246,212,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,122,42,0,0,0,0, + 42,95,0,0,183,227,227,254,47,94,183,95,126,95,183,0, + 0,0,0,0,0,162,162,0,0,0,0,0,0,0,64,20, + 171,15,29,192,171,57,15,152,15,50,0,0,0,0,42,78, + 187,94,0,0,95,183,26,35,55,135,111,95,75,0,0,0, + 0,0,42,42,0,8,35,0,0,0,0,0,0,0,0,0, + 0,0,0,0,182,47,0,0,122,122,122,0,0,0,0,0, + 122,0,24,162,95,0,0,0,0,0,0,0,0,0,0,0, + 0,0,122,0,122,0,122,0,0,0,0,0,0,122,0,95, + 0,221,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,221,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,183,183,227,111,224,0,132,99,182, + 99,99,99,64,182,99,99,99,141,99,254,254,109,150,187,166, + 17,17,132,219,26,219,122,122,78,162,0,122,122,122,122,122, + 0,0,0,0,129,31,229,15,225,224,122,0,0,221,197,79, + 226,42,0,0,0,15,79,226,122,0,0,0,0,29,55,104, + 0,0,42,0,122,26,111,228,135,29,59,239,183,44,35,44, + 29,29,20,15,20,178,253,178,209,10,10,24,33,171,99,182, + 229,99,38,229,229,229,229,229,177,228,222,142,95,183,0,64, + 44,64,229,183,183,0,0,122,0,59,142,59,0,0,122,122, + 0,0,47,95,200,0,104,203,94,162,172,242,103,46,95,126, + 0,20,59,47,99,99,0,142,104,0,183,245,29,0,0,40, + 40,246,246,221,0,0,0,0,0,0,0,0,0,0,162,0, + 221,0,0,0,0,0,219,212,0,0,0,0,0,122,0,0, + 183,142,122,254,95,219,219,151,246,246,221,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,162,0,0,0,0,0,0,0,0,0,0, + 0,0,162,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,219,42,0,0,0,0, + 0,224,183,221,254,183,0,183,95,162,122,227,183,95,42,0, + 0,0,0,0,0,0,0,0,183,162,0,122,122,0,183,34, + 192,15,15,15,20,171,15,20,171,42,0,0,0,162,94,183, + 227,162,0,0,212,122,122,35,38,178,187,166,239,0,0,0, + 42,0,42,122,0,8,59,0,0,0,0,0,0,0,0,0, + 0,0,0,0,224,59,0,0,0,0,122,122,0,0,0,0, + 122,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,221,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,162,0,122,0,0,183,122, + 122,122,56,42,183,122,42,42,183,183,42,122,122,78,122,183, + 162,183,122,162,183,122,122,122,122,122,122,122,122,0,0,0, + 122,0,0,219,135,55,135,15,34,99,122,0,0,0,38,79, + 84,56,0,0,0,135,38,24,0,0,0,0,0,223,103,241, + 0,0,42,122,122,122,24,228,48,223,47,95,42,44,99,35, + 172,20,20,20,178,29,186,15,29,15,177,209,129,133,15,99, + 44,64,151,135,229,135,135,229,226,251,129,223,75,239,0,64, + 64,59,135,50,42,0,0,162,0,95,15,47,0,122,0,0, + 0,0,44,151,20,0,203,241,94,162,177,33,103,46,59,126, + 0,29,35,47,35,64,0,226,24,0,162,135,29,0,0,212, + 246,246,246,221,0,0,0,0,0,0,0,0,0,0,221,162, + 0,0,0,0,0,162,215,0,0,0,215,47,111,183,183,219, + 224,215,166,0,64,47,34,15,221,221,0,221,162,162,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,221,221,0,0,0,221,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,183,94,0,0,0,17,99,166,0,0,0,0, + 0,0,0,0,0,0,0,0,122,0,0,0,162,162,162,0, + 0,0,0,0,0,0,0,187,200,239,0,122,219,12,132,254, + 171,47,111,171,20,20,192,171,135,42,0,0,0,122,42,42, + 183,183,0,0,0,122,26,29,55,75,122,239,183,0,0,122, + 162,0,0,0,0,99,47,0,0,0,0,0,0,0,0,0, + 0,0,0,0,64,64,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,122,0,122,0,122,0,0,0,0,0,0,122,0,0, + 0,0,0,221,253,201,229,171,34,224,0,0,0,162,55,79, + 226,122,0,0,0,48,55,226,0,0,0,0,0,223,103,241, + 0,0,122,0,0,122,177,31,223,223,59,239,183,34,64,44, + 29,142,20,29,15,15,229,229,171,133,186,229,84,222,102,34, + 64,34,44,135,229,229,135,151,178,103,129,223,95,50,122,44, + 64,64,229,183,162,0,0,0,0,0,0,0,0,0,0,122, + 0,0,221,246,0,221,203,203,0,0,92,28,103,46,75,163, + 0,44,59,64,59,35,0,226,241,0,0,0,0,0,0,50, + 246,246,221,0,0,0,0,0,0,0,0,0,0,0,221,0, + 0,0,0,0,0,0,221,0,0,0,183,15,29,183,0,0, + 122,183,162,0,221,99,15,190,0,221,0,221,221,162,0,162, + 212,162,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,162,0,0,221,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,162,0,0,0,42,221,78,227,150,111,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,221,162,183,162,0,0,150,99,192,29, + 29,47,44,171,192,20,20,171,171,162,0,0,0,221,94,42, + 50,78,0,0,0,0,42,29,38,24,219,95,239,0,0,221, + 122,0,0,0,0,211,59,0,0,0,0,0,0,0,0,0, + 0,0,0,0,59,59,122,122,0,0,0,122,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,122,0,0, + 0,0,0,122,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,24,129,129,20,34,224,122,0,0,0,55,197, + 226,183,0,0,0,177,55,24,122,0,0,0,0,29,103,24, + 0,0,42,0,0,122,190,79,135,48,47,126,163,158,64,34, + 142,29,20,20,20,20,15,15,135,15,151,133,151,55,71,151, + 171,15,64,214,229,151,229,151,172,79,103,48,47,95,42,29, + 192,34,151,221,183,0,0,122,0,0,122,0,0,122,122,0, + 122,0,0,0,0,0,104,203,162,0,104,242,33,190,224,97, + 162,135,224,224,99,99,0,104,104,0,0,0,0,0,221,246, + 221,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,221,0,0,0,0,95,38,133,245,29,227, + 0,111,56,56,183,47,20,84,162,212,162,162,0,221,0,40, + 212,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,221,221,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,221,221,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,183,59,95,227,162,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,162,0,0,0,122,243,141,141,34,29, + 29,171,29,20,29,192,34,171,135,183,0,0,0,0,42,94, + 141,94,0,0,0,122,26,253,38,253,132,111,97,0,122,42, + 42,0,0,122,0,183,183,0,0,0,0,0,0,0,0,0, + 0,0,0,0,122,187,122,122,42,122,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,122, + 122,122,0,122,122,0,122,0,0,0,0,0,0,0,0,0, + 0,0,0,221,35,177,151,135,34,224,0,0,0,0,103,18, + 24,122,0,0,0,177,103,92,0,0,0,42,162,46,129,92, + 0,0,122,122,122,42,223,55,135,177,47,126,50,152,44,29, + 29,29,15,171,15,15,15,229,15,229,151,38,38,133,38,38, + 133,38,38,34,135,38,55,133,135,55,228,177,59,212,78,225, + 34,44,151,221,42,0,0,0,0,0,122,122,0,122,122,122, + 122,122,0,122,162,122,104,203,94,162,241,197,220,223,59,75, + 122,135,64,64,35,64,122,59,241,0,0,221,40,246,246,221, + 221,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,162,0,0,0,40,95,142,142,142,215, + 0,221,215,221,221,95,40,203,0,212,162,221,0,0,162,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 162,246,162,0,0,0,0,0,162,221,0,0,0,0,0,0, + 0,0,0,0,0,164,94,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 221,0,0,0,162,47,75,162,0,56,122,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,59,183,0,78,64,214,67,192,172, + 171,29,192,29,34,29,29,15,229,187,0,0,0,0,183,78, + 126,183,0,0,78,26,42,29,55,29,224,47,163,0,0,183, + 42,0,122,78,42,162,78,42,42,42,219,26,26,219,187,183, + 42,187,111,111,166,187,187,183,187,187,187,187,187,166,183,42, + 78,42,78,122,122,78,42,78,78,122,122,78,78,78,42,78, + 78,78,122,122,122,78,78,78,42,78,78,78,78,122,122,183, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,122,75,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 122,75,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,227,126,0,0, + 0,0,0,94,94,0,0,0,0,122,122,162,122,162,0,0, + 0,0,122,0,122,122,122,162,122,122,78,78,78,42,42,42, + 78,183,42,78,78,78,122,162,122,162,122,122,122,0,0,0, + 0,0,122,122,223,84,151,20,34,224,122,122,122,78,103,201, + 226,42,0,0,122,135,103,84,162,0,0,95,227,162,162,0, + 0,0,0,122,122,0,177,103,48,253,59,95,239,192,64,34, + 29,20,20,20,135,171,15,15,15,15,151,15,173,142,190,133, + 151,151,38,151,186,151,151,133,177,103,228,177,47,75,122,34, + 225,44,151,162,122,122,122,78,183,0,0,0,0,0,0,0, + 0,0,0,0,0,0,40,164,94,94,226,156,242,253,59,59, + 0,15,47,64,64,64,0,200,104,0,0,221,40,246,221,162, + 162,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,221,0,162,0,0,0,0, + 0,221,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,246,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,221,92,104,0,0,0,0,162,221,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,94,0,0,0,219,17,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,29,59,0,0,183,132,254,29,29, + 34,34,34,20,34,20,171,171,20,94,0,0,0,0,42,94, + 95,94,0,0,0,221,26,29,103,20,111,59,95,0,219,166, + 219,42,162,42,187,126,187,126,187,183,126,224,126,187,187,187, + 50,183,183,224,224,224,224,187,111,111,224,166,111,111,187,111, + 111,111,111,111,111,111,111,111,109,111,111,111,109,111,111,111, + 111,111,109,111,111,109,111,111,111,109,111,111,111,109,111,111, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,221,226,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 221,226,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,122,111,221,0, + 0,0,0,166,224,224,95,111,111,111,111,126,166,183,183,183, + 183,183,187,183,187,126,111,111,111,111,111,75,95,95,47,75, + 95,126,126,111,163,111,111,109,111,111,111,111,187,187,219,219, + 219,166,132,26,177,168,151,20,142,224,219,224,95,42,228,220, + 226,42,0,0,141,48,31,226,162,0,0,56,42,219,187,42, + 42,26,26,26,42,122,223,167,48,177,59,163,183,192,64,44, + 34,29,20,29,15,135,15,135,20,20,151,15,229,223,228,133, + 151,229,133,151,55,133,103,133,48,55,103,223,104,163,122,225, + 34,44,151,122,122,42,187,59,40,0,122,0,0,122,122,122, + 122,122,122,183,183,239,166,163,215,221,40,135,48,104,95,95, + 162,187,162,111,224,254,0,40,59,0,0,246,221,246,246,0, + 221,0,0,0,0,0,0,221,221,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,221,0,0,0,0,0,0,0,0,0,0,0,0,221,221, + 162,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,221,104,164,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,42,183,162,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,50,212,162,0,0,0,122,59,34, + 29,44,34,171,192,29,29,20,47,187,42,122,0,162,183,42, + 163,187,26,26,26,42,78,29,103,29,111,200,97,0,187,224, + 254,243,224,254,150,111,132,187,94,187,187,183,183,126,111,166, + 150,132,183,187,187,187,183,126,166,166,42,183,183,183,221,166, + 111,111,132,187,42,227,111,111,111,187,42,183,126,111,111,132, + 219,183,183,187,187,126,166,166,183,166,166,166,187,187,183,126, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,122,0,0,0, + 0,0,0,50,59,97,111,75,97,75,75,95,59,46,35,35, + 35,24,223,44,223,44,46,44,44,44,35,99,35,59,111,111, + 187,183,187,187,219,219,219,187,219,219,219,219,111,75,200,200, + 224,75,111,26,172,222,129,15,34,111,94,75,163,183,228,55, + 209,122,0,0,75,126,215,94,162,0,0,0,122,78,78,183, + 122,78,78,122,0,122,226,228,253,223,59,126,50,44,109,95, + 142,47,29,34,29,171,171,20,29,20,15,20,186,24,223,151, + 151,151,55,151,229,151,151,151,223,103,55,177,59,75,0,225, + 44,64,20,221,122,122,166,95,200,0,0,0,0,0,0,0, + 0,0,162,162,162,0,94,221,162,0,221,40,203,183,50,50, + 162,239,0,44,64,99,0,163,46,0,162,221,246,40,246,94, + 246,221,0,0,0,0,221,221,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 162,162,0,0,0,0,0,0,0,0,0,0,0,0,94,50, + 0,0,0,0,0,0,162,0,0,0,0,0,0,0,0,0, + 0,0,0,0,221,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 56,122,0,0,0,0,0,78,0,0,0,0,78,122,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,162,221,0,122,221,0,0,0,0,0,221, + 44,34,47,142,34,44,29,34,35,183,26,122,0,0,78,94, + 97,187,26,42,219,26,26,171,103,223,187,35,163,0,0,122, + 219,122,219,187,187,150,111,150,183,187,183,183,162,187,219,183, + 183,162,183,183,187,50,183,183,187,187,183,42,183,42,26,183, + 183,42,183,183,183,219,183,42,221,183,183,183,183,183,183,42, + 183,187,42,183,221,183,42,187,183,42,183,42,183,183,42,42, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,162,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,162,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 183,78,0,75,59,200,200,24,34,29,253,177,253,29,253,20, + 29,223,34,223,223,35,59,224,95,141,224,150,111,187,26,26, + 187,183,183,166,126,78,183,94,50,163,104,142,142,35,35,59, + 46,47,200,163,222,222,228,15,171,254,97,226,35,46,222,31, + 241,122,0,0,42,94,183,42,183,183,183,94,94,221,221,221, + 162,162,0,122,0,122,226,228,222,177,47,111,78,59,139,95, + 47,46,47,44,46,24,29,20,34,20,229,15,135,223,14,178, + 151,15,229,229,135,135,135,135,226,55,55,190,59,163,0,64, + 64,64,20,183,122,122,219,95,40,0,0,0,0,0,0,0, + 0,0,162,162,162,0,221,94,0,0,104,55,103,46,224,59, + 42,34,0,44,64,99,0,40,200,0,221,221,183,40,183,221, + 162,0,221,221,221,221,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,94,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,221,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,122,59, + 239,94,183,0,0,0,0,126,97,219,78,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,94,0,0,0,0,0,0, + 0,0,0,0,0,122,0,0,166,183,0,0,0,0,0,0, + 64,34,192,142,47,47,47,225,24,0,42,122,0,0,56,183, + 40,187,42,26,219,26,42,253,151,35,150,59,111,219,26,162, + 122,0,0,0,0,42,187,111,166,109,187,187,219,187,42,187, + 187,187,111,187,166,183,187,166,219,187,126,187,111,111,187,132, + 111,187,111,111,187,166,150,187,111,111,187,132,187,187,111,111, + 187,126,187,187,111,111,187,111,187,187,111,111,187,111,111,132, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,221,0,0,0,0,0,0,0,0,0,94,126, + 0,0,0,0,0,0,0,40,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,221,0,0,0, + 0,0,0,0,0,0,94,126,0,0,0,0,0,0,0,0, + 50,162,183,223,253,253,253,29,177,24,223,29,44,46,224,99, + 59,224,59,109,224,99,59,35,24,142,223,177,223,135,48,177, + 253,48,177,253,177,177,253,48,253,48,223,177,223,223,223,84, + 223,177,177,223,129,168,55,15,29,183,241,228,177,226,0,221, + 0,0,0,0,221,183,162,183,78,94,162,183,183,162,78,162, + 122,122,122,0,0,0,24,103,135,29,24,95,162,95,111,163, + 95,47,47,44,59,47,47,29,34,20,171,229,135,135,229,15, + 245,135,135,135,15,135,135,29,104,167,103,177,47,97,122,224, + 47,99,20,162,0,122,122,215,183,0,0,0,0,0,0,0, + 0,0,50,50,0,40,103,48,48,203,226,103,48,135,241,95, + 221,29,0,214,214,64,0,200,104,0,0,0,42,219,0,246, + 221,0,0,0,221,246,221,0,0,0,0,0,0,221,221,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,221,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,221,221,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,42,34, + 44,29,46,50,212,0,0,221,246,111,78,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,221,162,0,0,0,0,122, + 0,0,0,0,0,0,0,122,200,97,0,17,150,0,0,0, + 132,34,64,47,34,254,142,44,59,0,42,0,0,0,0,78, + 183,183,17,12,150,17,26,171,103,223,111,59,95,12,243,243, + 150,243,187,26,42,0,0,0,122,162,187,99,64,224,187,109, + 187,183,183,221,42,42,183,187,187,187,187,12,111,109,187,111, + 150,111,109,109,187,109,111,111,109,109,187,109,111,111,109,109, + 187,109,111,111,109,254,187,111,111,111,109,109,187,254,150,111, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,56,246,163, + 0,0,0,0,0,0,0,40,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,56,246,163,0,0,0,0,0,0,0,0, + 0,0,215,111,95,187,111,26,187,150,109,95,111,59,59,35, + 24,223,223,177,135,222,135,222,222,135,222,129,222,222,129,129, + 222,222,222,135,222,135,48,135,253,135,135,222,135,222,177,222, + 135,135,135,129,168,177,84,46,200,0,94,46,239,183,239,163, + 163,163,239,50,163,37,37,212,212,50,94,94,162,78,122,122, + 0,122,122,0,0,0,92,167,129,223,200,183,78,109,187,224, + 47,47,44,29,34,44,44,15,20,229,151,133,38,133,133,151, + 133,133,245,151,135,29,135,223,177,201,55,48,35,111,78,224, + 99,224,20,183,0,122,183,40,200,104,104,95,95,95,97,95, + 97,95,50,0,56,40,28,135,28,223,173,79,173,21,251,26, + 42,200,0,99,59,182,166,95,200,200,59,47,40,246,94,246, + 212,246,221,94,94,162,221,221,0,0,0,0,0,221,221,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,162,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,162,50,162,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,126, + 44,223,239,122,177,212,122,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,122, + 0,0,0,0,0,0,0,0,183,183,162,109,99,17,0,183, + 95,95,47,44,44,99,44,47,75,0,122,0,0,0,0,0, + 0,0,0,122,42,42,78,24,135,29,111,75,126,183,219,219, + 187,141,254,150,243,12,12,26,56,122,0,0,166,95,111,99, + 109,243,150,132,187,17,183,183,183,183,221,122,0,162,219,111, + 166,166,166,183,183,166,150,227,166,94,183,166,132,126,166,94, + 215,132,132,187,187,94,219,132,132,126,166,183,183,126,111,166, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,212,203,142,162,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,162,0,0,0,0,0,221, + 26,0,0,0,0,0,0,40,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,212,203,142,162,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,162,0,0,0,0,0,221,26,0,0,0,0,0,0,0, + 42,183,42,24,223,223,253,222,222,222,129,31,228,103,228,103, + 228,222,103,103,129,31,129,251,129,31,222,222,129,222,222,222, + 135,253,135,222,48,222,135,222,222,222,222,222,222,222,251,222, + 222,31,228,228,226,212,162,162,162,0,219,219,219,219,166,59, + 126,183,183,227,212,239,215,50,42,221,42,122,122,122,122,122, + 122,122,0,122,122,26,163,177,177,241,50,162,162,221,0,221, + 122,162,94,221,94,50,212,126,126,126,95,95,75,75,22,75, + 203,75,163,187,50,183,239,183,203,137,135,209,126,227,0,183, + 183,183,227,0,0,0,0,162,221,221,94,246,246,246,246,246, + 221,221,94,162,221,42,72,15,38,241,133,55,38,87,55,0, + 221,0,0,0,0,122,122,221,221,40,40,40,212,221,212,212, + 246,221,246,246,221,94,221,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,221,0,0,162,162, + 0,0,0,0,0,0,0,162,0,0,0,0,0,0,94,162, + 0,0,0,0,162,212,162,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,183, + 126,75,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,78, + 0,0,0,0,0,0,212,162,0,162,183,99,243,99,0,183, + 47,47,44,35,47,59,59,35,59,0,0,0,0,122,0,0, + 0,122,42,122,122,42,122,50,241,22,166,59,111,219,219,111, + 166,42,26,166,132,243,243,150,150,243,12,17,26,122,0,162, + 221,94,126,187,166,254,182,99,99,49,182,243,243,187,132,166, + 150,187,219,187,17,111,150,187,219,187,187,132,132,187,187,187, + 17,111,132,166,166,187,132,111,132,132,183,187,219,150,17,187, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,221,0,0,0,129,103,209,162,0,0, + 0,0,0,221,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,221,0,46,0,0,0,0,0,162, + 55,135,0,0,0,0,0,40,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,221,0, + 0,0,129,103,209,162,0,0,0,0,0,221,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,221, + 0,46,0,0,0,0,0,162,55,135,0,0,0,0,0,135, + 201,103,190,55,103,55,55,201,201,55,103,103,103,228,31,222, + 103,222,228,228,103,228,31,103,228,129,228,228,222,222,31,222, + 129,228,129,31,135,222,129,222,129,222,129,129,228,31,129,222, + 222,177,177,203,221,0,0,0,0,0,0,246,241,200,40,221, + 215,203,40,122,122,122,122,0,122,122,122,122,0,122,0,0, + 122,122,0,0,0,122,94,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,221,0,0,0,0,0,183,212,0,0,0,0,0,0, + 0,0,0,0,0,0,122,0,122,122,0,0,0,122,0,0, + 0,0,162,0,0,239,72,21,15,173,72,87,72,15,242,0, + 0,221,0,0,0,0,0,0,122,0,122,0,162,246,94,221, + 221,0,246,221,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,162,162,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,162,0, + 0,0,162,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,162,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,94,94,0,0,0,0,0,0,0,0, + 162,221,221,0,162,0,0,0,0,0,0,122,0,122,42,42, + 42,42,26,26,42,26,0,0,94,162,183,246,183,26,17,219, + 219,219,17,17,17,150,150,12,12,12,243,8,8,8,8,12, + 17,26,42,0,0,0,0,0,221,187,99,99,235,99,182,182, + 182,224,109,182,182,182,182,224,211,182,182,182,99,254,109,182, + 182,182,182,254,109,182,99,182,224,254,109,182,182,99,182,254, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,94,162,241,0,22,50,0,0,0,0, + 0,162,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,162,0,0,0,0,122,122, + 241,203,0,0,0,0,0,40,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,94,162, + 241,0,22,50,0,0,0,0,0,162,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,162,0,0,0,0,122,122,241,203,0,0,0,0,0,201, + 242,55,201,201,103,103,201,177,103,55,103,228,228,228,103,103, + 228,55,103,201,48,129,55,228,228,228,103,129,129,253,223,177, + 135,142,226,135,129,222,222,228,222,129,228,228,129,201,48,177, + 135,241,190,177,226,190,190,223,190,92,226,226,104,223,92,203, + 241,226,92,241,104,203,241,46,104,200,92,241,104,104,104,104, + 104,46,212,50,212,46,221,241,46,46,104,104,104,104,241,241, + 203,104,104,104,142,40,241,241,203,203,203,212,203,203,37,163, + 163,203,95,227,94,0,0,122,162,94,227,212,221,0,94,47, + 94,163,94,94,94,78,162,183,162,162,162,183,227,183,0,183, + 94,183,162,0,0,200,21,15,18,38,38,223,173,40,197,0, + 122,162,0,122,183,42,162,122,221,221,246,221,221,221,221,0, + 221,221,221,0,94,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,162,94,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 122,122,122,42,122,0,0,78,42,122,122,122,42,122,0,122, + 122,122,122,122,42,42,0,0,0,0,0,0,0,122,122,219, + 219,219,17,12,17,187,26,17,17,17,12,243,67,141,49,141, + 67,67,8,8,8,26,42,122,0,0,50,97,200,59,64,99, + 182,99,99,224,64,99,182,99,67,59,64,99,254,67,59,182, + 64,99,182,67,59,182,99,99,224,67,99,59,64,99,99,99 + }; + +static const HdlInfo hdl_huge = +{ + 576, 432, + 199, 38, + 17, 31, + 256, 8, 255, (char *) hdl_huge_colors, + hdl_huge_on, hdl_huge_off +}; diff --git a/blinkentools-2.9/src/hdl-large.h b/blinkentools-2.9/src/hdl-large.h new file mode 100644 index 0000000..6f42b8f --- /dev/null +++ b/blinkentools-2.9/src/hdl-large.h @@ -0,0 +1,8050 @@ +#include "hdl.h" + +static char hdl_large_colors[256][3] = { + { 2, 2, 2}, + { 30,106, 26}, + { 16, 80, 14}, + { 30, 42,144}, + { 10, 60, 10}, + { 30, 41,135}, + { 15, 17, 83}, + {170,134, 97}, + { 77, 6, 6}, + { 10, 9, 51}, + { 67, 78,160}, + { 59, 70,158}, + {194,171, 89}, + { 40, 13, 12}, + {102, 90, 82}, + { 2, 2, 17}, + { 53, 66,155}, + {108, 82,109}, + {109,106,177}, + { 90, 90,169}, + { 49, 62,154}, + { 40, 39, 68}, + { 82, 58, 74}, + {135,119,106}, + {178,170,166}, + { 50, 54,153}, + { 26, 19, 23}, + { 41, 34, 56}, + { 6, 6, 30}, + { 28, 21, 52}, + { 97, 94,169}, + { 38, 54,147}, + {112, 62, 22}, + { 14, 13, 67}, + {140,137,183}, + { 13, 17, 91}, + { 42, 46,148}, + { 29, 11, 9}, + {122,110, 98}, + {109,106,169}, + { 18, 10, 46}, + {204,197,206}, + {198,184,164}, + { 82, 73,161}, + { 19, 14, 28}, + { 98, 98,170}, + { 28, 13, 18}, + { 60, 47, 84}, + {110, 86, 70}, + { 19, 5, 7}, + {145,129,127}, + { 87, 78,137}, + { 64, 37, 31}, + { 74, 74,163}, + { 58, 57, 97}, + {218,138, 6}, + { 80, 78,164}, + { 37, 50,144}, + { 14, 6, 30}, + { 93, 44, 25}, + {170,158,138}, + {122,102, 86}, + {190,158,122}, + { 19, 9, 18}, + {182,182,200}, + { 10, 23, 9}, + {103, 86,168}, + {142,126,106}, + {162,114, 81}, + { 38, 37, 98}, + { 45, 29, 14}, + {122, 74, 18}, + { 14, 6, 8}, + {108, 98,169}, + {192,124, 18}, + { 38, 42,146}, + { 34, 46,136}, + { 95, 81,169}, + { 67, 48, 73}, + { 46, 42, 83}, + { 22, 14, 58}, + {126,102, 82}, + {131,128,183}, + {114, 90, 90}, + { 16, 10, 26}, + { 14, 14, 20}, + { 57, 48, 98}, + { 70, 70,161}, + {182,170,152}, + { 10, 5, 7}, + { 80, 90,165}, + { 62, 62,158}, + { 76, 34, 26}, + { 65, 66,159}, + { 45, 55,138}, + { 83, 68,120}, + { 13, 10, 19}, + { 26, 98, 18}, + { 33, 46,143}, + {192, 70, 10}, + {182,182,193}, + {168,150,120}, + { 77, 86,164}, + { 22, 26, 71}, + {105, 94,161}, + { 44, 29, 52}, + { 89, 82,167}, + {102, 90,170}, + { 22, 22, 76}, + {145,144,194}, + {190,170,142}, + {104, 66, 64}, + { 8, 10, 26}, + { 31, 27, 73}, + { 34, 34,108}, + { 6, 2, 15}, + {126,122,181}, + { 34, 21, 21}, + {162,138,143}, + { 44, 48,160}, + {157, 92, 34}, + { 95, 86,155}, + { 14, 70, 6}, + { 4, 2, 10}, + { 81, 41, 34}, + { 36, 34, 84}, + { 58, 62,158}, + { 98, 82, 70}, + { 56, 32, 29}, + { 14, 14, 46}, + { 32, 28, 52}, + { 84, 64, 98}, + { 38, 44,156}, + { 21, 18, 38}, + { 33, 42,130}, + { 15, 10, 30}, + { 66, 72,159}, + { 18, 15, 46}, + {106,102,169}, + { 54, 58,152}, + { 68, 63,124}, + { 31, 14, 32}, + { 10, 6, 17}, + {157,151,175}, + { 54, 40, 58}, + {122,118,179}, + { 55, 21, 17}, + {174,138, 34}, + {178,174,179}, + {102,102,169}, + {122, 94, 78}, + { 18, 14, 39}, + { 6, 2, 4}, + {114, 98, 82}, + { 17, 18, 72}, + { 18, 66, 16}, + { 97, 90,160}, + { 72, 49, 63}, + { 84, 68, 62}, + { 93, 74,112}, + {198,186,179}, + {148,144,175}, + { 39, 50,137}, + {174,162,151}, + { 62, 74,159}, + { 45, 50,148}, + {114, 24, 12}, + {130, 92, 22}, + {157,120, 73}, + { 70, 86,163}, + { 41, 21, 40}, + { 81, 82,163}, + { 23, 10, 32}, + { 6, 6, 42}, + { 44, 29, 33}, + {115,106,178}, + { 74, 57, 87}, + { 64, 42, 53}, + { 40, 34, 74}, + {154, 50, 6}, + { 35, 42,136}, + { 88, 86,168}, + {110, 62, 45}, + { 73, 55, 56}, + {105, 94,170}, + {178,142, 38}, + {122, 98, 98}, + { 31, 30, 83}, + { 50, 41, 76}, + {110,102,169}, + { 14, 10, 38}, + { 10, 10, 40}, + { 29, 41,150}, + { 28, 20, 36}, + { 96, 86,170}, + { 43, 54,147}, + { 10, 6, 22}, + { 26, 14, 36}, + { 33, 27, 64}, + { 48, 38, 36}, + { 80, 46, 40}, + { 39, 46,136}, + { 6, 6, 17}, + { 7, 6, 38}, + { 26, 38,128}, + { 21, 22, 53}, + { 18, 10, 41}, + {110, 66, 50}, + { 78, 74,136}, + {162,126, 90}, + { 52, 54,162}, + {182,150, 42}, + { 66, 27, 20}, + { 6, 10, 6}, + { 74, 63,106}, + { 13, 46, 10}, + { 6, 6, 5}, + { 56, 42, 38}, + {166,144,112}, + { 96, 90,170}, + { 14, 14, 58}, + { 14, 46, 14}, + { 70, 82,162}, + {115,111,178}, + { 38, 46,145}, + { 58, 66,157}, + { 54, 62,155}, + {162,130, 94}, + {106, 90,172}, + { 51, 34, 54}, + {118, 88, 71}, + { 42, 20, 19}, + { 30, 38,130}, + { 13, 14, 76}, + { 30, 25, 95}, + { 20, 14, 20}, + { 20, 12, 9}, + { 45, 58,151}, + { 10, 10, 7}, + {102, 98,170}, + { 10, 10, 31}, + {114,102,174}, + { 34, 22, 35}, + {109, 74, 64}, + { 10, 6, 27}, + { 2, 2, 6}, + { 88, 78,167}, + { 94, 26, 10}, + { 85, 64, 84}, + {106,102,175}, + {174,154,117}, + { 55, 58,160}, + { 34, 42,143}, + { 6, 6, 10}, + {168,144,148}, + {255,255,255} + }; +static char hdl_large_on[] = { + 132,132,132,132,132,132,132,132,132,132,132,132,132,75,132,75, + 132,75,132,75,132,75,75,75,75,75,75,75,75,75,75,75, + 75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75, + 75,75,75,75,75,75,75,252,252,252,252,75,75,75,75,252, + 252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252, + 252,252,252,252,252,180,252,252,252,252,252,180,252,252,180,252, + 252,180,180,180,180,180,180,180,180,180,180,5,180,180,5,180, + 5,180,5,180,5,180,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,134,232,232,232,5,5,134,5,5,134,232,232, + 232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232, + 232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232, + 232,204,204,204,204,204,204,204,204,204,204,232,232,232,232,232, + 232,232,232,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,3,5,3,5,3,5,3,98,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,98,98,3,3,3,3,3, + 98,98,98,98,98,98,98,98,3,252,252,252,252,252,3,3, + 3,3,3,3,3,3,3,3,3,192,3,3,3,3,3,3, + 3,3,192,3,192,3,192,3,192,192,192,192,192,192,98,98, + 132,132,132,132,132,132,132,132,132,132,132,132,132,132,75,75, + 75,75,75,75,75,75,132,132,132,132,75,75,75,192,75,192, + 75,192,75,192,75,75,75,192,75,192,75,192,75,192,75,192, + 75,192,232,75,192,252,232,75,75,75,75,252,252,252,232,75, + 75,75,75,75,75,75,75,75,75,75,75,75,192,232,252,252, + 232,232,180,3,180,3,252,232,3,180,180,252,180,180,3,180, + 180,180,3,3,3,232,232,232,232,232,232,232,232,5,180,204, + 180,232,232,204,204,232,134,232,232,232,232,232,232,232,232,232, + 232,232,232,232,204,204,232,232,232,204,204,204,204,204,204,204, + 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, + 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, + 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, + 204,204,204,204,204,204,204,204,204,204,204,232,232,232,5,5, + 232,232,232,5,5,5,5,76,5,5,5,5,5,3,5,3, + 5,3,3,3,192,3,3,3,3,3,3,3,3,3,3,3, + 192,3,192,192,192,3,192,192,252,192,192,192,3,192,192,192, + 3,192,3,192,192,192,192,192,192,192,192,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,132,192,252, + 132,132,132,75,132,75,132,132,132,132,132,192,132,192,132,75, + 75,75,75,75,75,75,75,75,75,75,192,75,75,75,75,75, + 75,75,75,75,192,75,75,75,75,232,75,232,75,232,75,232, + 75,75,75,75,75,75,75,75,192,75,75,75,75,75,75,192, + 75,232,192,75,232,192,232,75,232,232,75,75,75,75,192,75, + 252,252,252,252,180,252,252,232,252,232,232,252,3,180,232,232, + 232,232,232,232,3,3,3,232,3,3,232,3,5,232,232,232, + 232,5,5,232,232,204,204,204,232,232,232,232,232,232,232,232, + 232,232,204,232,232,204,204,204,204,204,204,204,204,204,204,204, + 204,232,204,204,204,204,204,204,204,204,204,204,204,204,204,204, + 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, + 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, + 204,204,204,232,204,232,232,204,204,232,204,204,204,204,232,3, + 5,5,232,232,5,192,204,3,192,5,192,3,5,192,5,192, + 5,3,5,5,3,5,3,5,192,192,3,3,3,3,3,3, + 192,3,3,3,192,3,192,192,3,3,192,3,192,3,192,3, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, + 132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132, + 132,132,132,132,132,132,75,75,75,75,75,75,75,75,75,75, + 75,75,75,75,75,75,75,232,75,75,75,75,75,232,75,75, + 75,75,192,75,75,75,75,75,75,232,75,192,75,75,75,75, + 75,232,75,75,75,75,75,192,75,75,192,232,75,232,75,252, + 252,252,252,252,252,252,252,75,252,252,252,252,252,232,3,252, + 252,252,252,252,232,232,232,252,232,232,180,232,232,3,180,232, + 5,232,232,232,5,232,3,204,232,232,232,232,232,232,232,232, + 232,204,232,204,232,232,232,232,232,204,204,204,204,204,232,232, + 232,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, + 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, + 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, + 204,204,232,204,232,204,204,232,232,204,232,232,232,232,5,232, + 232,232,5,3,5,5,3,5,5,98,5,3,5,192,5,192, + 192,192,192,5,3,3,3,3,98,98,3,3,3,3,192,3, + 3,3,3,3,3,3,3,192,192,3,98,192,3,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,98,98, + 132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132, + 132,192,132,75,75,132,132,132,75,132,132,75,132,75,75,75, + 75,75,75,75,232,75,75,75,75,192,75,75,75,75,75,75, + 75,75,75,75,75,252,75,75,75,75,75,75,75,192,75,75, + 75,75,232,75,75,232,75,75,232,75,75,252,75,75,75,252, + 232,232,252,252,232,252,252,232,252,252,252,252,252,252,232,3, + 180,232,232,252,252,252,3,180,252,232,252,180,232,232,3,232, + 180,5,5,232,5,232,232,232,232,232,232,232,204,204,204,232, + 232,232,232,204,232,232,232,232,232,204,232,232,204,204,204,204, + 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, + 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, + 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, + 204,204,204,204,204,204,204,204,232,204,204,3,204,204,232,3, + 5,204,232,204,204,3,5,5,3,5,5,192,5,5,3,5, + 192,192,192,204,3,3,3,3,3,98,3,3,3,3,3,3, + 3,3,192,192,192,3,98,192,3,192,3,3,192,3,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,132, + 132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,192, + 132,75,75,132,132,192,132,132,192,132,75,75,192,132,192,132, + 75,75,75,132,75,75,75,75,75,75,192,75,75,75,75,75, + 75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75, + 75,75,75,75,75,75,75,75,75,75,75,75,252,252,252,75, + 75,75,75,232,75,75,252,75,252,252,180,252,75,232,75,192, + 232,252,252,232,232,180,232,3,5,3,5,3,180,5,232,3, + 232,232,232,5,232,180,5,3,232,232,232,232,232,232,232,204, + 232,204,232,232,204,204,204,204,232,232,232,232,232,204,204,204, + 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, + 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, + 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, + 232,204,232,204,204,204,232,5,3,5,5,204,5,5,3,204, + 204,3,3,5,3,204,5,5,5,98,5,98,5,98,3,3, + 192,192,192,3,204,3,3,3,3,3,3,3,3,192,3,98, + 98,3,98,98,3,192,3,98,3,3,192,192,3,3,192,3, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,98,98, + 132,132,132,132,132,132,119,132,132,132,132,132,132,132,132,132, + 132,132,132,132,75,132,75,132,132,75,132,75,132,75,75,75, + 132,132,75,132,75,75,132,75,75,75,75,75,75,75,192,75, + 132,132,75,75,75,75,75,75,75,75,75,75,75,75,75,75, + 75,75,75,75,75,75,75,75,252,252,75,75,75,75,252,75, + 75,75,75,75,232,75,252,252,252,252,180,252,75,252,75,180, + 3,252,252,252,232,252,232,180,180,134,232,3,180,3,232,3, + 5,5,180,5,232,232,232,5,3,5,3,5,232,232,232,232, + 232,204,232,232,232,232,232,232,232,232,204,204,204,204,204,204, + 204,204,204,204,204,204,204,204,204,204,204,204,232,204,204,232, + 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, + 204,204,204,204,204,204,204,204,204,204,204,204,204,232,232,204, + 204,3,232,3,5,3,204,204,204,5,5,204,5,5,5,3, + 232,232,5,232,3,5,98,204,192,98,5,98,5,5,5,192, + 192,192,5,192,3,3,5,3,3,3,3,3,98,3,3,3, + 3,192,98,3,98,3,192,192,192,3,98,192,3,192,3,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,132, + 119,132,132,132,132,132,132,119,119,132,119,132,132,132,132,132, + 132,132,132,132,132,132,132,132,132,75,132,165,165,165,165,132, + 75,132,75,132,132,75,132,75,132,75,132,75,75,132,132,75, + 75,75,75,75,75,75,75,224,75,75,75,75,75,75,75,75, + 75,75,75,75,75,75,252,75,75,75,75,75,252,180,75,75, + 252,180,75,75,75,252,75,75,180,252,252,76,3,180,180,252, + 252,232,180,252,252,252,252,232,3,232,180,180,5,180,180,232, + 180,232,232,180,5,5,134,5,232,232,232,232,232,232,232,232, + 232,232,232,232,232,232,232,204,232,204,232,232,232,232,204,204, + 204,204,204,232,232,204,204,204,204,204,204,204,204,204,232,204, + 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, + 204,204,204,204,204,204,204,204,204,204,204,204,232,204,204,204, + 232,204,5,204,204,204,232,232,204,204,232,5,134,5,5,180, + 5,3,5,3,5,5,5,3,98,3,5,5,5,98,192,3, + 5,3,98,5,3,5,3,5,3,98,3,192,98,98,192,192, + 192,98,98,3,3,3,3,3,3,192,192,192,192,98,3,3, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,98,98, + 132,132,132,119,132,132,132,132,119,132,132,132,132,132,132,132, + 132,132,132,132,132,132,75,132,132,75,132,165,165,75,165,165, + 165,165,132,75,75,132,75,132,75,75,75,75,75,36,132,75, + 75,75,132,224,224,132,75,224,75,75,75,75,75,75,75,75, + 75,75,75,75,180,75,252,75,201,75,75,75,75,75,180,75, + 75,75,180,75,75,75,180,252,75,180,75,180,98,252,180,252, + 75,252,180,252,180,180,180,180,252,3,180,180,180,180,180,232, + 180,232,232,232,180,232,232,5,5,5,3,5,5,232,232,232, + 232,134,204,232,232,232,232,204,232,232,232,232,232,232,204,232, + 204,204,232,204,232,232,232,204,204,204,204,204,204,204,204,204, + 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, + 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, + 204,204,232,232,232,232,204,3,5,5,5,232,5,5,5,134, + 5,180,5,5,98,98,98,5,98,3,98,98,204,3,192,3, + 192,192,76,3,5,3,5,3,3,3,98,98,192,3,192,192, + 192,192,98,192,192,192,3,3,98,3,3,192,192,192,3,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,132, + 132,119,119,132,132,119,132,119,119,132,119,119,119,132,165,132, + 132,132,132,132,132,132,132,132,132,132,132,165,132,165,165,165, + 132,75,132,132,75,75,132,75,132,132,75,75,132,75,132,36, + 36,36,224,75,75,75,75,75,36,224,224,224,224,224,75,75, + 75,75,180,75,75,75,75,75,75,75,180,75,75,75,75,180, + 75,180,180,75,180,75,75,75,180,75,180,252,252,180,180,75, + 252,252,75,252,180,3,3,75,180,180,180,180,180,180,180,180, + 5,180,5,180,232,5,180,134,5,232,232,232,232,5,5,232, + 232,232,232,232,204,232,232,232,232,232,232,232,204,232,232,204, + 232,232,204,232,232,204,232,204,204,232,232,232,232,204,204,204, + 232,232,232,204,204,204,204,204,204,232,204,232,204,204,204,204, + 204,204,204,204,204,204,204,204,204,204,232,204,204,204,232,204, + 232,232,204,232,232,204,5,204,134,5,5,5,134,5,5,5, + 5,5,5,5,5,5,204,98,204,98,98,3,98,5,98,98, + 5,3,192,3,98,5,3,5,5,3,192,98,98,3,3,192, + 3,3,3,98,192,192,3,3,3,3,192,3,3,192,192,252, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,98,98, + 119,132,132,119,132,119,132,132,165,165,165,132,119,132,165,132, + 132,132,132,132,132,132,132,75,132,132,75,165,165,132,132,165, + 165,75,132,75,75,132,75,165,75,75,165,75,132,75,75,75, + 132,75,132,75,224,132,36,75,75,75,75,75,75,224,224,75, + 75,36,75,75,75,75,75,75,201,201,75,180,75,180,75,180, + 75,75,75,180,75,180,75,75,75,75,75,75,252,252,180,180, + 180,180,180,75,180,180,5,180,180,180,180,180,180,180,5,180, + 232,232,232,5,5,232,232,232,180,134,180,5,232,232,5,232, + 232,134,134,232,232,232,232,232,232,204,204,232,232,232,232,232, + 232,232,232,232,232,232,232,204,204,232,232,204,204,204,204,232, + 232,204,232,232,204,204,232,232,204,232,204,204,232,232,204,232, + 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, + 204,3,5,232,232,232,5,204,204,5,5,204,5,5,5,134, + 5,76,5,5,98,98,98,98,98,204,98,204,98,3,5,98, + 5,3,5,3,3,5,3,5,98,3,3,3,3,98,98,3, + 3,3,192,192,192,98,192,3,3,98,192,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,132, + 119,119,132,119,132,119,119,165,132,119,119,132,119,132,132,132, + 165,132,132,132,132,132,165,165,165,165,165,165,132,132,132,75, + 165,165,165,165,75,132,75,75,165,75,132,36,132,36,36,36, + 75,36,75,36,75,36,75,224,224,36,36,36,36,75,75,201, + 75,75,75,201,75,75,75,75,75,75,201,75,201,201,75,75, + 180,75,201,75,75,75,75,75,75,75,180,180,75,75,252,180, + 252,75,75,180,3,180,180,252,180,180,5,180,180,180,180,180, + 180,5,5,232,232,5,5,180,232,232,232,232,134,232,232,232, + 232,204,232,134,232,232,232,232,5,232,232,232,204,232,232,204, + 232,232,232,204,192,204,232,232,232,204,204,232,204,5,204,204, + 204,204,204,204,204,204,204,232,232,204,232,204,204,204,232,204, + 204,204,204,232,204,204,204,204,204,204,232,232,232,204,232,232, + 232,232,232,232,232,232,5,5,5,204,5,5,134,5,76,98, + 5,5,98,98,5,204,3,3,98,98,98,98,98,5,98,98, + 98,3,3,5,3,5,3,98,204,3,3,3,98,3,3,3, + 3,3,98,192,192,192,98,3,3,3,3,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,98,98, + 119,132,119,132,119,132,119,132,119,132,119,165,165,165,119,119, + 165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165, + 165,165,165,165,165,75,165,165,75,165,75,36,132,36,224,36, + 75,36,224,36,132,224,36,36,224,75,75,75,75,75,75,201, + 75,201,75,36,201,201,224,75,75,75,36,75,75,75,75,201, + 75,75,75,180,180,75,76,75,180,75,75,180,201,75,201,75, + 180,180,180,180,180,252,180,180,180,3,180,180,180,180,180,180, + 180,180,180,5,180,232,232,5,5,5,180,232,5,232,5,134, + 232,232,232,5,232,232,5,232,232,232,232,232,204,232,232,204, + 232,232,232,232,232,204,232,232,232,232,232,232,204,232,232,232, + 204,192,232,204,204,232,204,232,232,232,232,232,232,204,232,232, + 204,232,204,232,204,204,204,204,204,204,204,204,232,204,232,232, + 232,204,232,3,5,204,232,5,5,5,5,5,5,5,5,76, + 5,5,5,98,76,98,76,204,98,98,98,5,3,98,5,3, + 98,98,5,98,98,98,5,3,3,3,98,3,3,3,98,3, + 3,3,3,3,192,192,192,3,192,3,3,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,132, + 119,132,132,119,119,132,119,132,119,119,119,165,165,165,132,119, + 132,132,165,165,165,165,165,165,165,75,165,165,165,165,165,165, + 165,165,165,165,165,75,75,36,132,36,36,75,132,75,132,224, + 36,36,36,36,36,36,75,75,75,36,36,36,36,224,75,75, + 224,75,36,75,75,75,75,224,201,36,75,201,75,201,75,75, + 201,75,36,201,75,75,75,76,201,180,180,75,180,75,252,75, + 180,75,252,75,75,180,180,252,180,180,180,180,180,180,180,5, + 180,180,180,180,180,180,5,180,232,180,232,5,134,5,232,232, + 232,232,232,232,5,134,232,232,5,232,232,232,232,232,232,232, + 232,204,232,232,232,232,232,232,232,232,204,232,232,232,232,232, + 232,232,232,204,204,232,232,204,232,204,232,232,232,232,232,232, + 204,204,232,232,204,204,204,232,204,232,204,232,204,232,232,232, + 204,232,5,232,204,134,134,204,5,5,5,5,5,5,5,5, + 5,5,76,5,76,3,98,76,98,5,98,98,98,98,98,76, + 98,3,98,5,3,5,3,3,98,3,3,98,3,3,3,98, + 3,3,98,3,192,98,98,3,3,3,3,3,3,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,98,98, + 119,119,119,119,119,119,119,119,132,119,119,165,119,165,119,165, + 119,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165, + 165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,36, + 132,224,132,224,36,36,36,36,36,36,224,36,36,36,36,36, + 201,36,201,36,36,36,201,36,75,36,75,36,75,36,201,75, + 201,75,75,201,201,201,75,75,75,201,75,75,180,75,201,75, + 76,75,75,75,75,180,180,180,180,180,3,180,75,180,180,180, + 180,180,180,180,180,180,180,180,232,232,180,180,232,5,134,134, + 134,232,232,232,232,232,134,232,232,232,232,232,204,232,232,3, + 232,232,204,232,232,204,232,232,232,232,204,232,204,232,204,232, + 232,232,192,232,232,232,232,232,232,232,204,232,232,204,232,232, + 232,232,204,232,204,204,204,232,232,232,232,232,232,204,204,232, + 3,204,5,5,5,5,5,5,5,5,5,5,5,5,134,76, + 76,5,76,5,98,204,98,3,76,98,98,98,204,98,98,5, + 98,98,98,98,98,98,98,3,3,3,98,3,3,98,3,3, + 3,98,3,3,192,98,98,192,98,3,3,3,3,3,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,132, + 119,119,119,119,119,119,119,119,119,132,119,119,132,165,132,119, + 119,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165, + 165,165,165,165,165,165,36,165,165,165,165,165,165,36,165,36, + 36,36,165,36,36,36,36,36,224,224,36,224,201,36,36,36, + 36,224,36,36,224,36,75,75,36,201,36,201,36,224,75,36, + 224,201,36,36,224,75,201,201,224,252,201,224,201,201,252,201, + 75,75,76,76,201,75,252,180,75,75,180,180,134,180,180,180, + 180,180,180,180,180,180,180,180,180,180,180,180,180,232,232,232, + 232,134,134,232,232,134,232,5,5,5,3,232,232,180,232,232, + 3,232,232,232,232,232,232,232,232,5,5,134,5,232,5,3, + 232,232,232,232,232,192,232,232,192,232,192,232,192,232,232,232, + 232,232,232,232,192,232,192,232,192,232,232,232,232,3,3,232, + 232,5,134,5,134,134,134,5,134,76,5,76,5,76,76,76, + 5,76,76,76,76,3,76,76,76,98,76,98,76,98,98,98, + 98,5,98,98,98,76,3,98,98,98,98,98,3,98,98,3, + 98,98,3,98,3,98,3,98,192,98,98,252,3,3,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,98,98, + 119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119, + 165,165,165,165,119,132,132,119,165,165,132,165,165,165,165,165, + 165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165, + 36,36,165,75,36,165,165,36,36,36,36,36,224,36,36,36, + 36,36,224,36,201,36,36,36,36,36,36,36,201,36,36,201, + 36,224,201,36,201,36,224,224,36,224,75,75,75,201,75,75, + 201,75,75,180,180,75,75,75,180,180,75,180,180,134,180,180, + 75,180,75,180,180,180,180,180,180,180,180,180,180,180,134,134, + 232,232,180,134,232,134,232,134,134,232,5,180,232,180,232,232, + 5,180,232,232,180,3,5,5,232,232,232,134,134,232,232,5, + 232,232,232,232,232,232,232,232,3,232,232,232,232,232,192,232, + 192,232,192,232,232,232,232,232,180,3,180,3,180,134,5,5, + 76,134,5,134,5,76,76,76,134,76,134,76,134,76,5,76, + 76,76,76,98,76,76,76,98,76,98,98,76,98,76,76,98, + 76,76,98,98,98,98,98,98,98,3,98,98,3,98,3,98, + 98,3,98,98,3,3,98,98,192,192,3,3,252,3,252,3, + 192,192,192,192,3,3,192,192,192,192,192,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,98, + 119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,132, + 119,165,119,119,119,119,119,36,165,165,165,119,165,165,36,165, + 165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,36, + 36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,201, + 36,36,36,36,36,36,165,36,36,36,36,36,36,36,36,36, + 36,201,36,36,36,201,75,75,201,75,224,201,201,75,201,201, + 180,201,201,75,201,180,201,180,75,180,180,180,180,180,180,180, + 180,180,180,180,75,180,180,180,180,180,180,180,180,180,180,232, + 180,180,232,232,204,232,134,232,180,134,134,5,5,5,180,134, + 134,232,5,5,134,5,134,134,134,134,134,134,134,134,134,134, + 180,180,180,180,180,180,5,180,232,180,180,180,180,180,180,180, + 180,180,75,232,180,180,180,180,5,134,5,134,5,134,76,76, + 5,76,76,76,76,5,134,5,76,76,76,76,76,76,57,57, + 98,76,57,76,98,76,76,98,76,76,76,98,98,98,98,76, + 98,98,98,98,76,98,98,76,98,98,98,98,98,98,98,98, + 98,3,98,98,3,98,3,192,98,98,98,252,192,98,98,98, + 3,192,192,3,192,192,192,192,192,192,192,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, + 119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119, + 119,119,119,165,36,119,165,119,119,165,165,165,165,165,165,165, + 36,36,165,165,165,165,165,165,36,165,165,165,165,165,165,165, + 165,165,165,165,36,36,165,165,36,165,36,165,165,165,165,36, + 36,36,36,36,165,36,165,201,36,36,201,36,36,36,36,201, + 36,36,36,201,36,36,36,75,201,201,224,224,224,201,224,201, + 75,75,201,75,201,75,201,201,75,201,75,180,75,180,75,180, + 180,180,180,180,180,180,180,134,180,180,134,180,180,180,180,180, + 180,180,180,232,114,180,180,232,180,5,5,134,134,134,232,5, + 5,134,5,232,134,134,134,134,134,5,204,232,134,134,134,5, + 5,5,5,5,5,134,5,134,134,5,5,5,134,5,134,134, + 134,5,134,180,5,5,5,134,134,134,134,5,134,5,134,134, + 134,5,134,76,76,76,76,134,76,76,76,76,76,76,76,162, + 76,76,57,76,57,76,76,76,57,57,57,57,76,76,98,98, + 76,98,76,98,98,98,98,98,98,3,98,98,98,98,98,98, + 98,98,3,98,3,3,3,98,192,192,192,98,3,192,3,192, + 252,3,192,192,192,3,192,192,192,192,192,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,98,98, + 119,210,119,119,119,119,119,210,119,119,119,119,119,119,119,119, + 119,119,119,165,165,119,165,119,119,119,119,119,119,165,165,165, + 165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165, + 165,165,165,165,165,165,165,36,36,165,36,36,36,36,36,165, + 165,165,165,165,36,36,36,165,165,36,165,36,165,36,36,165, + 36,36,201,36,201,36,36,36,201,36,75,75,201,75,75,201, + 201,201,201,201,180,201,75,180,180,180,75,180,180,180,180,75, + 180,75,134,75,180,180,180,180,180,180,180,180,180,180,134,180, + 232,180,180,180,114,180,5,134,5,134,134,5,134,134,134,134, + 134,134,134,5,134,134,134,134,134,134,134,134,5,134,134,134, + 5,134,134,134,134,134,134,134,134,134,76,76,76,134,134,134, + 76,134,76,5,134,134,76,134,5,180,5,76,76,76,5,76, + 5,76,76,134,76,76,76,76,76,76,76,76,76,76,76,76, + 57,162,76,76,57,76,57,57,76,76,76,76,76,98,76,98, + 76,76,98,76,98,76,98,98,98,98,98,98,98,98,98,98, + 98,98,98,3,98,3,192,98,98,3,98,3,3,252,3,98, + 3,3,3,3,192,192,192,192,192,192,192,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,3, + 119,210,210,210,119,210,119,210,119,210,119,119,210,119,119,119, + 119,119,119,119,119,165,119,165,119,165,165,165,165,119,165,119, + 165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165, + 165,165,165,165,165,165,165,165,165,165,165,165,165,165,36,36, + 36,36,36,165,165,165,36,36,165,36,36,36,165,36,36,36, + 36,36,36,36,165,165,201,75,75,36,201,75,201,201,201,224, + 36,75,224,201,75,201,201,201,75,75,201,201,75,201,180,180, + 75,180,201,180,201,180,201,201,134,180,180,180,180,180,180,180, + 180,180,134,180,114,5,134,134,134,134,76,134,134,134,134,134, + 5,134,134,134,134,134,134,134,5,76,76,134,134,134,134,76, + 76,134,134,134,76,76,76,134,76,134,134,134,134,134,134,134, + 134,134,134,134,76,134,134,76,76,76,5,134,134,76,134,76, + 76,134,76,76,76,76,76,76,76,201,57,201,57,162,162,76, + 57,162,162,162,76,162,76,76,162,57,76,57,57,57,76,76, + 76,98,76,98,98,98,98,98,98,98,98,98,98,98,98,98, + 98,98,98,98,3,3,192,192,98,192,192,192,3,3,3,3, + 3,3,3,3,192,192,192,192,192,192,192,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,252, + 210,210,119,119,210,210,210,119,210,119,210,119,210,119,210,119, + 210,119,119,119,119,165,119,119,165,210,165,210,119,119,119,165, + 165,119,165,165,165,165,165,165,165,165,165,165,165,165,165,165, + 36,165,119,165,165,165,165,165,36,36,36,36,36,36,165,165, + 165,165,165,36,36,36,165,165,36,165,165,36,36,201,36,165, + 36,36,36,201,36,36,36,36,201,36,36,36,201,36,36,201, + 75,201,201,201,201,201,201,201,201,180,201,75,201,75,201,201, + 201,201,180,201,201,180,180,180,180,180,180,180,201,180,180,201, + 180,180,201,180,114,201,76,201,180,180,180,76,180,180,134,76, + 180,134,134,134,134,134,134,76,76,134,134,134,134,134,76,134, + 134,76,76,76,134,134,134,76,134,76,134,134,76,76,76,76, + 76,76,76,76,134,134,76,134,134,76,76,76,76,76,76,76, + 5,76,76,76,76,76,162,201,76,162,76,57,76,76,76,162, + 76,162,57,162,162,162,31,31,162,57,162,162,76,57,57,31, + 76,31,98,31,98,76,98,57,98,98,98,98,98,98,98,98, + 98,98,3,3,3,98,3,192,192,192,3,3,3,3,3,3, + 3,3,3,3,3,192,192,192,192,192,192,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,98, + 210,210,210,210,210,210,210,210,119,210,119,119,119,210,119,119, + 119,119,210,119,119,165,119,119,119,119,119,119,210,165,119,165, + 119,119,165,165,165,165,165,165,165,165,165,165,165,165,165,165, + 165,165,165,165,165,165,165,25,25,165,165,165,165,36,165,165, + 165,165,165,165,165,36,36,165,36,36,165,36,165,165,36,165, + 165,165,165,36,36,165,165,162,36,201,201,36,201,75,36,201, + 201,36,201,201,75,75,75,201,201,75,201,201,201,201,75,180, + 201,201,180,201,201,201,180,201,201,201,201,180,201,180,180,180, + 180,134,76,180,114,134,180,201,201,180,180,201,201,180,134,180, + 180,201,180,134,134,76,134,134,134,134,134,134,134,134,134,134, + 134,134,134,134,134,134,134,76,134,76,76,134,134,134,134,201, + 134,201,76,76,76,76,76,76,134,76,76,76,76,76,76,162, + 76,76,76,76,76,76,76,162,76,162,76,162,162,162,162,162, + 57,57,162,162,162,162,76,162,162,57,162,31,76,162,76,57, + 76,76,76,76,98,31,98,98,98,98,98,98,98,98,98,98, + 98,98,98,5,98,3,3,3,3,192,192,3,192,3,3,252, + 3,3,3,3,3,3,192,192,192,192,192,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,3,98, + 210,210,210,210,210,210,210,119,210,210,210,210,119,119,210,119, + 210,119,119,210,119,119,119,119,119,119,119,165,119,165,119,210, + 119,119,210,165,165,165,165,165,165,165,165,165,165,165,165,165, + 165,165,165,165,165,165,165,36,25,165,165,165,165,165,165,165, + 165,165,165,165,165,165,165,165,165,165,165,165,165,36,165,36, + 165,36,36,165,165,36,165,36,36,36,201,36,201,165,36,165, + 201,36,36,36,201,201,201,201,36,201,201,75,201,75,201,201, + 75,201,201,180,201,201,201,180,180,201,201,201,180,201,201,201, + 201,180,180,201,114,201,201,201,201,201,201,134,201,201,201,201, + 201,180,134,201,201,134,134,76,201,134,201,180,134,134,76,76, + 134,76,76,76,76,76,134,134,76,134,76,201,76,76,201,134, + 201,134,134,76,201,134,201,201,201,201,76,76,76,76,76,76, + 76,76,76,201,162,201,57,76,162,76,162,76,201,162,76,162, + 162,57,162,57,57,162,31,31,162,57,162,76,162,162,76,76, + 31,31,76,31,76,5,98,76,98,98,98,98,98,98,98,98, + 98,98,3,3,98,3,98,3,98,98,98,3,3,192,98,3, + 3,3,3,3,3,192,192,192,192,192,192,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,3,3, + 251,210,210,210,210,210,210,210,210,119,210,210,210,210,119,210, + 119,210,210,119,210,119,119,119,119,210,119,119,119,210,119,165, + 165,165,119,119,210,165,210,165,165,165,210,165,210,165,165,165, + 165,165,165,165,165,165,165,165,165,36,25,165,165,165,165,165, + 165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,36, + 165,165,165,165,165,36,165,165,36,201,36,165,201,201,201,36, + 201,36,201,201,36,201,36,36,201,36,201,201,201,180,36,201, + 201,201,201,201,201,36,201,201,180,201,201,201,180,201,201,180, + 201,201,201,201,114,201,180,134,201,180,201,134,201,201,201,201, + 201,201,201,201,201,201,134,134,201,134,201,201,201,134,134,201, + 134,134,76,76,134,76,76,134,76,134,76,201,201,76,76,76, + 201,201,201,76,201,76,76,76,76,201,201,201,76,76,76,162, + 201,201,162,76,76,76,162,201,162,201,162,162,201,162,162,57, + 162,162,162,162,162,162,76,162,76,162,162,57,162,162,31,76, + 162,76,76,31,76,31,31,76,98,98,98,98,98,98,98,98, + 98,98,98,5,98,98,3,3,3,192,98,192,3,3,192,3, + 3,3,98,252,3,3,192,192,192,192,192,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,3,98,98, + 210,251,210,210,210,210,210,210,210,210,119,210,119,210,210,210, + 210,119,210,210,119,119,210,210,119,210,119,210,119,119,210,210, + 119,210,210,119,165,165,210,210,119,210,165,25,210,165,25,165, + 25,25,165,165,165,25,165,25,25,165,25,165,165,210,165,165, + 165,165,210,165,25,165,165,25,165,25,165,165,165,165,165,165, + 165,165,165,165,165,165,165,165,165,165,165,36,36,165,201,36, + 36,165,162,165,165,201,201,180,36,201,36,201,162,201,201,36, + 201,201,201,201,201,201,201,75,36,201,75,201,36,201,180,201, + 201,201,76,201,114,201,201,201,201,201,201,201,201,201,201,201, + 201,201,201,201,201,201,201,201,201,201,134,201,134,201,201,201, + 201,201,201,201,76,201,201,201,201,201,76,201,76,76,162,201, + 76,76,76,76,162,201,201,162,201,76,76,76,162,201,201,76, + 162,76,76,76,162,162,201,57,201,57,162,57,162,57,162,162, + 162,57,162,57,162,162,31,162,31,57,162,57,162,162,76,162, + 76,31,76,76,76,76,5,57,76,76,98,98,98,98,98,98, + 98,98,98,98,98,98,98,3,3,98,98,192,98,3,98,3, + 98,98,3,3,3,98,192,192,192,192,192,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,3,192,3,98, + 251,251,210,210,210,210,210,210,210,210,210,210,210,119,210,119, + 210,210,210,210,210,119,210,119,210,210,210,119,210,119,210,119, + 210,210,210,210,210,210,25,25,210,210,165,210,165,25,25,165, + 165,165,25,165,25,25,25,165,165,165,25,25,165,165,210,165, + 25,165,25,165,25,25,165,165,25,165,25,165,165,165,25,165, + 165,165,165,165,94,165,165,165,162,165,165,162,36,165,165,180, + 180,36,201,36,201,36,36,201,36,201,36,201,201,36,201,201, + 201,165,201,162,201,201,201,201,201,201,201,201,201,201,201,201, + 201,201,201,162,114,201,201,201,201,201,162,201,201,201,201,201, + 201,201,201,201,201,201,201,201,201,201,201,201,201,201,134,201, + 201,201,76,201,201,76,201,201,201,76,76,201,201,76,201,201, + 162,201,201,76,76,76,76,162,162,162,162,201,162,162,162,76, + 162,162,162,201,201,162,162,162,162,162,162,162,57,201,162,162, + 162,57,162,162,162,162,162,162,162,162,162,76,162,57,162,162, + 76,76,31,31,76,31,76,57,76,98,76,98,98,98,98,98, + 98,98,98,98,98,3,3,3,98,3,3,192,98,192,3,192, + 192,3,3,3,3,252,98,192,192,192,192,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,3,3,3,252,98, + 91,210,91,91,251,251,251,251,210,210,210,210,210,210,210,210, + 210,119,210,119,119,210,210,210,210,210,210,210,210,210,119,119, + 119,210,210,25,25,25,25,25,25,210,25,25,25,165,210,165, + 25,25,165,165,165,165,165,165,25,25,165,25,25,165,25,165, + 25,165,25,25,165,25,25,165,25,165,165,25,165,165,165,25, + 25,94,165,25,165,165,165,165,36,36,165,165,162,36,201,36, + 201,165,180,36,165,201,36,162,180,165,36,201,36,201,162,165, + 162,201,36,201,201,201,162,201,201,162,201,162,201,162,201,201, + 201,201,162,134,114,162,201,201,162,201,201,162,201,201,201,201, + 201,201,76,162,162,162,162,201,201,201,201,201,201,201,201,201, + 201,201,201,162,162,201,162,162,162,201,201,201,162,201,76,162, + 201,76,201,201,162,162,201,201,201,201,76,162,162,201,201,162, + 201,201,162,162,162,162,201,57,162,162,162,162,162,57,162,162, + 162,162,57,162,162,162,31,57,162,162,162,57,162,162,57,162, + 31,76,76,76,76,76,76,57,98,98,98,76,98,98,98,98, + 98,98,98,98,76,98,98,3,3,98,3,98,192,98,3,3, + 3,3,3,3,192,98,192,3,192,192,192,192,192,192,192,192, + 192,192,192,192,192,192,3,192,3,3,3,3,3,192,98,98, + 126,251,91,210,210,210,251,210,251,251,210,210,251,210,119,210, + 210,210,210,210,210,210,210,25,119,210,119,210,25,210,25,119, + 119,119,119,119,210,25,25,210,25,25,25,25,25,210,25,210, + 165,210,165,210,25,210,25,165,165,210,165,210,25,25,25,25, + 165,25,165,25,25,165,25,25,165,25,25,25,25,25,94,165, + 165,25,94,25,94,25,165,165,165,165,165,201,165,165,165,165, + 36,201,162,36,165,162,36,201,36,162,201,165,162,36,201,201, + 201,165,162,165,162,201,165,162,201,165,201,162,201,165,201,201, + 201,201,162,134,114,162,201,201,162,201,201,201,201,201,201,162, + 201,201,201,201,201,201,162,201,162,201,201,201,201,162,201,162, + 162,162,162,201,162,162,201,162,162,162,162,201,162,162,201,162, + 162,162,162,201,201,162,162,162,162,162,162,201,162,162,162,162, + 162,201,162,162,201,57,162,162,162,162,162,162,31,162,31,162, + 162,162,162,162,162,162,162,31,31,162,162,162,162,57,162,162, + 162,162,57,76,31,76,76,76,76,98,98,98,98,98,98,98, + 98,98,98,98,98,98,3,98,98,3,98,98,98,98,192,3, + 3,3,98,3,3,3,3,98,252,252,192,192,192,192,192,192, + 192,192,192,192,3,3,3,3,3,3,3,3,98,3,98,98, + 251,251,91,91,91,91,251,210,251,251,251,210,210,251,210,210, + 210,210,210,210,210,210,210,210,210,210,210,210,165,210,25,210, + 210,210,210,210,25,25,139,25,25,25,25,25,25,25,25,210, + 25,210,25,25,25,25,210,25,210,165,25,25,25,210,25,25, + 25,25,25,165,25,25,25,165,210,165,25,165,25,165,165,25, + 94,25,25,165,165,165,25,165,94,165,165,165,94,165,162,165, + 165,165,165,165,165,201,165,165,165,180,165,36,36,180,165,36, + 162,201,180,201,201,201,201,180,201,201,201,201,201,201,201,201, + 201,201,201,162,114,201,162,201,201,162,201,162,162,162,165,201, + 162,162,201,162,201,162,201,162,162,201,162,162,162,162,162,162, + 162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,201, + 162,162,162,162,162,162,201,201,162,162,201,162,162,31,162,162, + 162,162,162,162,31,31,162,162,162,31,162,76,76,162,162,162, + 162,162,162,162,162,162,162,76,76,76,162,76,76,76,76,76, + 76,76,76,76,76,31,76,76,98,76,98,98,76,98,98,98, + 98,98,98,98,98,98,98,98,3,98,98,3,98,98,98,3, + 3,3,3,98,3,98,98,3,192,3,192,3,192,3,192,3, + 192,3,252,252,3,3,3,3,3,3,3,3,3,98,98,57, + 91,251,251,251,91,210,91,210,251,210,251,210,251,210,251,251, + 251,210,210,210,210,139,210,210,210,210,25,210,210,210,25,210, + 25,25,25,139,25,210,25,139,25,139,210,25,25,139,25,139, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 165,25,25,25,25,25,25,25,210,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,165,25,165,165,165,165,36,165,165, + 165,165,180,165,165,180,36,165,201,36,165,162,36,201,165,201, + 165,201,172,58,80,40,137,40,190,9,40,40,40,137,137,190, + 9,40,40,103,114,165,201,162,162,162,36,201,201,162,162,162, + 201,162,201,162,162,162,162,162,162,162,162,162,162,162,162,162, + 162,162,162,162,94,162,162,162,162,162,162,162,162,162,94,162, + 162,162,162,162,162,162,162,162,162,94,162,162,162,162,31,162, + 31,162,162,162,162,94,162,162,162,31,129,240,112,173,191,191, + 191,173,9,203,191,191,191,191,191,9,9,9,9,191,9,191, + 191,112,191,220,98,76,31,76,76,76,98,98,98,98,98,98, + 98,98,98,98,98,98,98,3,98,98,98,98,98,98,98,98, + 192,3,3,3,3,3,3,3,3,252,3,3,3,3,3,252, + 3,3,3,3,3,3,3,3,3,3,3,3,192,3,98,98, + 91,91,91,251,91,251,91,91,251,251,251,251,251,210,210,251, + 210,210,210,210,210,210,210,210,210,25,210,139,210,139,25,210, + 139,139,139,25,25,210,139,25,210,25,25,210,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,94,25,94,25,165,165,165,165,165,94,165,165, + 165,36,94,162,165,162,165,36,165,187,201,201,165,165,165,180, + 180,201,33,33,6,6,233,6,154,108,154,6,154,233,233,233, + 33,6,233,108,114,162,94,165,165,165,94,94,94,162,94,165, + 94,162,94,94,94,94,94,94,162,162,162,162,94,94,162,94, + 94,94,162,94,94,94,162,162,162,162,162,162,162,162,162,162, + 162,162,162,94,94,94,94,94,162,94,94,94,94,31,94,94, + 94,94,31,94,31,31,31,94,31,237,220,233,9,33,9,9, + 220,233,33,9,33,233,9,33,220,233,191,245,173,233,9,233, + 9,9,191,233,31,31,3,31,57,31,98,57,98,98,98,98, + 98,98,31,98,98,98,98,98,98,98,98,98,98,98,98,3, + 98,3,3,3,3,3,192,192,192,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,98,3,192,252,98,57, + 93,126,91,91,251,251,251,251,91,210,251,251,210,251,210,210, + 251,91,210,210,139,210,139,139,139,139,210,139,210,139,139,139, + 210,210,139,139,210,25,210,139,139,210,139,25,25,139,25,139, + 210,139,139,139,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,139,139,25,25,25, + 25,25,25,25,25,25,25,25,25,94,94,25,165,25,134,133, + 205,154,137,154,137,154,137,133,129,240,129,80,133,154,154,80, + 154,137,220,220,137,33,80,191,173,173,9,80,80,9,80,80, + 190,80,220,220,154,129,80,154,133,137,80,80,137,137,137,137, + 80,137,80,220,220,129,129,191,154,220,129,137,137,137,137,129, + 129,129,129,129,129,129,129,133,220,220,129,129,129,129,129,129, + 133,129,129,129,129,129,129,137,129,129,129,129,129,129,129,220, + 154,133,129,129,190,129,191,129,191,9,129,220,9,220,220,9, + 220,129,220,9,9,9,9,33,9,9,220,220,9,220,9,9, + 9,9,220,191,9,191,191,191,129,191,129,129,129,129,129,191, + 129,9,191,191,98,98,98,98,98,98,98,98,98,98,98,98, + 192,3,3,3,192,3,3,3,192,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,98,3,192,98,98, + 126,93,126,91,91,251,91,210,91,251,251,251,251,251,210,251, + 210,251,251,251,210,251,210,210,210,210,139,139,251,210,139,210, + 139,251,210,139,139,139,139,210,139,139,210,139,251,139,139,210, + 139,139,210,25,210,139,139,139,139,139,139,139,139,139,139,139, + 25,139,139,25,139,25,25,25,139,25,25,25,210,25,139,25, + 25,210,210,25,25,25,210,25,25,165,165,94,25,94,180,9, + 33,40,233,9,33,220,33,9,33,9,203,129,203,40,191,220, + 33,33,220,220,33,220,33,9,108,33,33,33,154,40,191,220, + 191,9,9,220,80,190,220,80,9,154,154,154,33,233,40,33, + 154,33,220,220,220,80,33,220,33,33,154,33,80,33,33,33, + 191,191,220,220,191,80,220,33,220,154,33,220,154,129,154,220, + 220,220,220,220,220,220,80,220,9,220,220,220,220,220,220,220, + 220,9,220,220,220,220,80,33,33,220,33,80,33,233,9,33, + 9,9,9,33,33,154,33,33,80,33,33,9,233,9,233,233, + 220,233,9,220,220,233,220,233,220,233,233,220,233,233,220,233, + 233,220,9,191,204,98,98,98,3,98,3,98,98,98,98,98, + 3,3,3,3,3,3,3,3,192,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,98,3,98,252,98,57, + 91,225,126,93,91,251,91,251,91,210,251,251,251,251,91,251, + 251,251,251,251,251,251,251,251,139,251,251,139,251,251,139,251, + 251,139,139,251,251,251,251,139,251,251,139,251,210,139,139,139, + 139,139,139,139,139,25,139,139,139,139,139,139,139,210,139,139, + 139,139,139,139,139,139,139,139,25,25,210,210,25,210,139,139, + 139,25,25,25,210,25,139,25,25,25,165,25,165,139,201,58, + 9,220,108,33,233,154,33,154,154,33,9,154,233,154,154,80, + 220,173,40,233,154,80,80,80,233,108,154,33,173,203,203,173, + 191,137,33,33,9,9,9,190,9,191,80,154,154,154,108,80, + 129,80,154,154,154,191,191,154,190,203,191,173,129,191,220,154, + 9,154,233,80,220,220,154,154,154,154,129,33,33,220,220,154, + 154,220,33,154,154,154,154,129,154,154,154,33,33,154,80,233, + 154,9,220,33,220,220,33,129,28,33,233,154,80,154,33,154, + 33,154,33,154,80,154,9,33,191,233,80,33,154,33,33,233, + 233,191,233,233,233,33,6,6,6,220,233,220,233,6,220,9, + 233,233,9,173,204,98,98,98,98,98,3,98,98,98,98,98, + 98,98,98,98,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,98,252,98,98, + 93,91,91,126,91,91,91,91,91,91,210,91,251,210,251,251, + 251,251,139,91,139,251,251,251,139,139,251,251,139,251,251,139, + 251,251,139,139,251,251,251,139,251,251,139,139,251,139,91,251, + 139,251,251,139,139,91,139,210,91,251,251,139,139,139,139,139, + 139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, + 139,139,139,25,139,139,25,25,25,25,25,94,94,25,191,9, + 9,190,200,207,207,207,207,182,124,190,200,207,207,207,207,182, + 124,190,200,207,207,207,207,182,124,190,200,207,207,207,207,182, + 124,190,200,207,207,207,207,182,124,190,200,207,207,207,207,182, + 124,190,200,207,207,207,207,182,124,190,200,207,207,207,207,182, + 124,190,200,207,207,207,207,182,124,190,200,207,207,207,207,182, + 124,190,200,207,207,207,207,182,124,190,200,207,207,207,207,182, + 124,190,200,207,207,207,207,182,124,190,200,207,207,207,207,182, + 124,190,200,207,207,207,207,182,124,190,200,207,207,207,207,182, + 124,190,200,207,207,207,207,182,124,190,200,207,207,207,207,182, + 124,233,233,233,35,98,98,98,98,98,98,3,98,98,98,98, + 98,98,98,98,3,3,3,3,3,3,3,3,3,3,252,3, + 3,3,3,3,3,3,3,3,3,3,98,3,3,192,98,57, + 93,93,91,225,91,91,126,91,251,91,251,251,91,251,251,251, + 91,91,251,251,251,251,139,251,126,251,251,251,251,251,139,251, + 251,251,251,251,139,91,139,251,251,139,251,91,139,251,126,139, + 251,251,139,91,139,139,91,139,139,251,139,91,139,139,139,139, + 139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, + 139,139,139,139,139,139,139,139,25,210,25,25,25,210,6,35, + 9,151,243,209,227,227,209,68,111,151,243,209,227,227,209,68, + 111,151,243,209,227,227,209,68,111,151,243,209,227,227,209,68, + 111,151,243,209,227,227,209,68,111,151,243,209,227,227,209,68, + 111,151,243,209,227,227,209,68,111,151,243,209,227,227,209,68, + 111,151,243,209,227,227,209,68,111,151,243,209,227,227,209,68, + 111,151,243,209,227,227,209,68,111,151,243,209,227,227,209,68, + 111,151,243,209,227,227,209,68,111,151,243,209,227,227,209,68, + 111,151,243,209,227,227,209,68,111,151,243,209,227,227,209,68, + 111,151,243,209,227,227,209,68,111,151,243,209,227,227,209,68, + 111,173,173,173,191,3,98,98,98,98,3,98,3,98,98,98, + 98,98,98,98,3,5,98,98,98,3,252,98,98,98,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,98,252,98,98, + 225,93,93,91,93,91,91,126,91,91,91,91,251,91,91,126, + 251,251,251,126,126,126,126,126,251,251,126,126,251,126,126,126, + 91,251,251,126,126,251,251,91,91,251,251,251,251,251,251,139, + 91,251,251,91,139,91,139,91,139,91,139,139,91,91,251,139, + 139,139,139,139,139,91,139,91,139,139,139,91,210,139,210,139, + 139,139,139,139,139,139,139,25,139,139,25,139,25,139,6,35, + 9,190,48,218,218,101,218,7,243,190,48,218,218,101,218,7, + 243,190,48,218,218,101,218,7,243,190,48,218,218,101,218,7, + 243,190,48,218,218,101,218,7,243,190,48,218,218,101,218,7, + 243,190,48,218,218,101,218,7,243,190,48,218,218,101,218,7, + 243,190,48,218,218,101,218,7,243,190,48,218,218,101,218,7, + 243,190,48,218,218,101,218,7,243,190,48,218,218,101,218,7, + 243,190,48,218,218,101,218,7,243,190,48,218,218,101,218,7, + 243,190,48,218,218,101,218,7,243,190,48,218,218,101,218,7, + 243,190,48,218,218,101,218,7,243,190,48,218,218,101,218,7, + 243,9,173,233,233,98,98,76,98,98,3,3,98,3,3,98, + 98,98,98,98,98,98,98,3,3,98,98,98,98,3,3,3, + 180,3,98,98,3,3,98,98,3,3,98,3,3,3,98,57, + 93,93,93,93,126,93,126,126,126,126,126,91,126,126,251,91, + 91,91,251,251,251,251,251,91,126,126,251,91,126,126,126,126, + 126,91,251,126,126,126,139,251,91,91,251,91,91,91,91,251, + 91,139,91,139,251,91,139,251,91,139,91,251,91,139,91,91, + 91,139,210,91,139,139,139,139,91,139,91,139,139,251,91,210, + 91,210,139,139,139,139,139,139,210,139,25,139,139,126,6,233, + 9,129,150,60,163,60,163,250,230,129,150,60,163,60,163,250, + 230,129,150,60,163,60,163,250,230,129,150,60,163,60,163,250, + 230,129,150,60,163,60,163,250,230,129,150,60,163,60,163,250, + 230,129,150,60,163,60,163,250,230,129,150,60,163,60,163,250, + 230,129,150,60,163,60,163,250,230,129,150,60,163,60,163,250, + 230,129,150,60,163,60,163,250,230,129,150,60,163,60,163,250, + 230,129,150,60,163,60,163,250,230,129,150,60,163,60,163,250, + 230,129,150,60,163,60,163,250,230,129,150,60,163,60,163,250, + 230,129,150,60,163,60,163,250,230,129,150,60,163,60,163,250, + 230,9,173,35,233,98,98,3,98,98,98,3,3,98,3,3, + 98,98,98,3,98,3,98,98,98,98,3,3,98,98,98,3, + 252,3,3,192,192,3,3,3,3,3,98,3,3,252,98,98, + 93,93,93,93,93,91,91,93,91,91,91,126,126,91,91,251, + 251,126,91,91,91,91,91,251,251,251,91,126,251,251,251,251, + 126,126,91,126,126,91,91,91,126,139,126,91,126,126,91,91, + 91,91,139,91,91,139,91,91,251,91,91,139,91,139,139,139, + 251,139,139,91,139,91,139,91,139,91,139,139,91,91,139,251, + 139,139,139,139,139,139,139,139,139,139,139,139,139,139,6,33, + 9,190,38,24,148,148,24,88,81,190,38,24,148,148,24,88, + 81,190,38,24,148,148,24,88,81,190,38,24,148,148,24,88, + 81,190,38,24,148,148,24,88,81,190,38,24,148,148,24,88, + 81,190,38,24,148,148,24,88,81,190,38,24,148,148,24,88, + 81,190,38,24,148,148,24,88,81,190,38,24,148,148,24,88, + 81,190,38,24,148,148,24,88,81,190,38,24,148,148,24,88, + 81,190,38,24,148,148,24,88,81,190,38,24,148,148,24,88, + 81,190,38,24,148,148,24,88,81,190,38,24,148,148,24,88, + 81,190,38,24,148,148,24,88,81,190,38,24,148,148,24,88, + 81,173,173,233,233,98,98,76,98,98,98,76,3,3,98,3, + 3,98,5,3,98,98,98,98,98,98,98,98,3,3,98,98, + 98,98,98,98,98,98,98,3,3,3,3,252,98,3,98,57, + 87,87,93,87,11,93,91,93,225,91,91,91,91,91,91,91, + 126,91,91,91,91,126,91,91,91,126,126,91,91,91,91,91, + 126,225,91,91,126,126,126,91,91,91,139,91,139,91,126,126, + 91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,139, + 91,91,139,91,139,91,139,91,139,91,91,139,139,91,91,139, + 251,139,139,139,251,139,139,91,139,139,139,139,139,126,154,9, + 9,129,158,50,254,254,118,67,158,129,158,50,254,254,118,67, + 158,129,158,50,254,254,118,67,158,129,158,50,254,254,118,67, + 158,129,158,50,254,254,118,67,158,129,158,50,254,254,118,67, + 158,129,158,50,254,254,118,67,158,129,158,50,254,254,118,67, + 158,129,158,50,254,254,118,67,158,129,158,50,254,254,118,67, + 158,129,158,50,254,254,118,67,158,129,158,50,254,254,118,67, + 158,129,158,50,254,254,118,67,158,129,158,50,254,254,118,67, + 158,129,158,50,254,254,118,67,158,129,158,50,254,254,118,67, + 158,129,158,50,254,254,118,67,158,129,158,50,254,254,118,67, + 158,9,173,233,233,98,98,3,98,98,98,3,3,98,3,76, + 3,98,98,98,98,98,98,98,3,98,98,98,98,98,98,98, + 98,98,98,98,98,3,98,3,180,3,98,3,3,252,98,98, + 87,87,87,93,93,93,11,93,91,225,93,91,91,91,93,93, + 93,225,126,126,126,91,91,91,91,126,91,225,93,93,225,126, + 91,91,126,126,126,91,91,126,93,91,91,91,91,91,126,91, + 126,93,91,91,126,126,126,126,91,91,91,139,91,91,91,91, + 91,91,139,139,139,139,91,87,139,91,91,91,91,91,91,91, + 91,139,91,91,91,139,139,139,139,91,139,139,139,91,35,233, + 173,129,14,24,64,64,64,88,230,129,14,24,64,64,64,88, + 230,129,14,24,64,64,64,88,230,129,14,24,64,64,64,88, + 230,129,14,24,64,64,64,88,230,129,14,24,64,64,64,88, + 230,129,14,24,64,64,64,88,230,129,14,24,64,64,64,88, + 230,129,14,24,64,64,64,88,230,129,14,24,64,64,64,88, + 230,129,14,24,64,64,64,88,230,129,14,24,64,64,64,88, + 230,129,14,24,64,64,64,88,230,129,14,24,64,64,64,88, + 230,129,14,24,64,64,64,88,230,129,14,24,64,64,64,88, + 230,129,14,24,64,64,64,88,230,129,14,24,64,64,64,88, + 230,173,173,233,233,98,98,98,98,98,98,76,3,98,3,98, + 3,98,98,98,98,98,98,98,3,98,98,98,3,98,98,98, + 98,3,3,252,98,98,98,3,3,252,3,3,3,3,98,57, + 87,164,53,87,87,93,93,93,93,93,93,93,93,126,91,126, + 91,93,93,93,93,93,225,93,93,225,91,126,126,91,93,225, + 126,93,91,93,225,225,91,126,126,93,91,93,126,91,91,93, + 126,225,91,225,91,91,225,91,126,225,139,139,139,139,139,139, + 139,87,139,91,139,139,87,139,139,139,139,87,87,139,139,91, + 91,139,91,91,91,139,139,139,139,139,139,139,139,91,154,9, + 173,190,127,88,42,42,42,62,243,190,127,88,42,42,42,62, + 243,190,127,88,42,42,42,62,243,190,127,88,42,42,42,62, + 243,190,127,88,42,42,42,62,243,190,127,88,42,42,42,62, + 243,190,127,88,42,42,42,62,243,190,127,88,42,42,42,62, + 243,190,127,88,42,42,42,62,243,190,127,88,42,42,42,62, + 243,190,127,88,42,42,42,62,243,190,127,88,42,42,42,62, + 243,190,127,88,42,42,42,62,243,190,127,88,42,42,42,62, + 243,190,127,88,42,42,42,62,243,190,127,88,42,42,42,62, + 243,190,127,88,42,42,42,62,243,190,127,88,42,42,42,62, + 243,173,173,35,35,98,98,3,98,98,98,98,98,98,3,76, + 3,98,98,98,3,98,98,98,3,98,98,98,98,98,98,98, + 98,180,3,98,98,98,98,98,98,252,252,98,98,252,98,98, + 164,87,87,87,93,87,93,87,93,93,225,93,93,93,93,93, + 93,225,93,93,225,225,93,225,225,91,225,93,93,93,91,91, + 93,126,93,91,91,91,225,93,93,91,93,126,93,93,93,91, + 91,91,93,91,225,93,91,225,91,91,93,91,91,87,139,139, + 87,139,87,91,91,91,91,91,139,87,91,91,87,91,139,87, + 139,139,91,87,91,91,91,139,139,139,139,139,91,91,6,233, + 9,191,115,58,58,58,196,244,244,191,115,58,58,58,196,244, + 244,191,115,58,58,58,196,244,244,191,115,58,58,58,196,244, + 244,191,115,58,58,58,196,244,244,191,115,58,58,58,196,244, + 244,191,115,58,58,58,196,244,244,191,115,58,58,58,196,244, + 244,191,115,58,58,58,196,244,244,191,115,58,58,58,196,244, + 244,191,115,58,58,58,196,244,244,191,115,58,58,58,196,244, + 244,191,115,58,58,58,196,244,244,191,115,58,58,58,196,244, + 244,191,115,58,58,58,196,244,244,191,115,58,58,58,196,244, + 244,191,115,58,58,58,196,244,244,191,115,58,58,58,244,142, + 244,173,173,9,233,98,98,98,98,98,98,98,98,98,3,98, + 98,98,98,98,98,98,98,98,98,98,3,76,98,98,98,98, + 98,98,98,98,98,252,252,252,252,252,252,252,3,3,98,57, + 87,87,87,87,93,87,93,87,93,87,93,93,93,93,93,93, + 93,93,93,93,93,93,93,93,93,93,93,93,93,225,93,93, + 93,93,225,93,93,93,93,93,93,91,93,91,93,91,93,93, + 93,225,93,87,93,93,93,225,225,93,93,93,93,93,93,93, + 93,93,139,91,87,91,91,91,91,91,91,87,91,93,93,91, + 93,91,93,91,91,139,126,87,87,91,87,87,91,93,154,9, + 173,190,135,129,129,240,137,129,244,190,135,129,129,240,137,129, + 244,190,135,129,129,240,137,129,244,190,135,129,129,240,137,129, + 244,190,135,129,129,240,137,129,244,190,135,129,129,240,137,129, + 244,190,135,129,129,240,137,129,244,190,135,129,129,240,137,129, + 244,190,135,129,129,240,137,129,244,190,135,129,129,240,137,129, + 244,190,135,129,129,240,137,129,244,190,135,129,129,240,137,129, + 244,190,135,129,129,240,137,129,244,190,135,129,129,240,137,129, + 244,190,135,129,129,240,137,129,244,190,135,129,129,240,137,129, + 244,190,135,129,129,240,137,129,244,190,135,129,129,240,129,129, + 240,173,9,35,35,98,98,98,98,98,98,98,98,98,5,76, + 98,98,98,98,76,98,98,98,76,98,3,98,3,98,98,98, + 3,98,98,3,3,98,98,98,3,98,3,3,3,3,98,98, + 53,53,87,53,87,87,87,87,87,93,11,11,11,93,93,93, + 93,93,93,93,93,93,93,93,93,93,93,93,93,87,87,93, + 11,93,87,93,136,93,93,93,93,93,93,93,225,93,93,93, + 93,93,87,93,93,93,93,93,93,93,93,93,93,93,93,93, + 93,93,93,93,87,87,93,93,87,87,87,87,91,87,87,87, + 87,91,87,91,93,91,87,91,139,93,87,139,91,91,154,9, + 9,203,58,129,129,240,137,133,28,203,58,129,129,240,137,133, + 28,203,58,129,129,240,137,133,28,203,58,129,129,240,137,133, + 28,203,58,129,129,240,137,133,28,203,58,129,129,240,137,133, + 28,203,58,129,129,240,137,133,28,203,58,129,129,240,137,133, + 28,203,58,129,129,240,137,133,28,203,58,129,129,240,137,133, + 28,203,58,129,129,240,137,133,28,203,58,129,129,240,137,133, + 28,203,58,129,129,240,137,133,28,203,58,129,129,240,137,133, + 28,203,58,129,129,240,137,133,28,203,58,129,129,240,137,133, + 28,203,58,129,129,240,137,137,244,203,58,129,129,190,129,129, + 240,173,173,173,35,98,98,98,76,98,98,98,3,98,98,98, + 98,98,98,98,98,98,98,3,3,98,98,3,98,98,98,3, + 3,98,98,98,76,3,3,98,98,98,3,3,98,252,98,57, + 53,53,87,53,87,87,87,87,87,87,87,87,87,11,87,87, + 11,87,93,93,93,93,93,93,93,93,93,93,93,93,87,93, + 87,93,87,93,136,93,136,93,136,93,87,93,136,93,87,87, + 87,87,136,93,93,93,87,93,93,93,93,136,93,93,93,93, + 93,93,93,87,87,87,93,87,87,87,93,87,87,87,87,87, + 91,93,136,87,91,91,91,91,91,91,126,139,87,93,108,9, + 173,190,244,129,137,191,129,129,135,190,244,129,137,191,129,129, + 135,190,244,129,137,191,129,129,135,190,244,129,137,191,129,129, + 135,190,244,129,137,191,129,129,135,190,244,129,137,191,129,129, + 135,190,244,129,137,191,129,129,135,190,244,129,137,191,129,129, + 135,190,244,129,137,191,129,129,135,190,244,129,137,191,129,129, + 135,190,244,129,137,191,129,129,135,190,244,129,137,191,129,129, + 135,190,244,129,137,191,129,129,135,190,244,129,137,191,129,129, + 135,190,244,129,137,191,129,129,135,190,244,129,137,191,129,129, + 135,190,244,129,137,191,129,133,240,190,244,129,133,240,151,151, + 58,9,9,233,35,31,98,98,98,76,98,76,98,98,3,98, + 98,98,98,98,98,98,98,98,3,98,98,3,98,3,98,76, + 3,98,76,98,98,98,98,98,98,98,76,3,3,252,98,57, + 53,53,53,87,87,87,87,87,87,87,87,93,87,93,93,87, + 93,93,87,93,93,93,11,87,93,93,87,87,87,87,87,87, + 11,87,87,87,93,87,93,136,93,87,87,93,93,93,93,87, + 87,87,93,93,93,93,87,87,93,93,136,93,136,87,87,87, + 93,87,87,87,87,87,87,93,87,93,87,87,87,87,87,87, + 87,87,87,87,87,87,87,87,93,139,93,139,139,93,6,9, + 9,190,135,129,133,129,129,129,112,190,135,129,133,129,129,129, + 112,190,135,129,133,129,129,129,112,190,135,129,133,129,129,129, + 112,190,135,129,133,129,129,129,112,190,135,129,133,129,129,129, + 112,190,135,129,133,129,129,129,112,190,135,129,133,129,129,129, + 112,190,135,129,133,129,129,129,112,190,135,129,133,129,129,129, + 112,190,135,129,133,129,129,129,112,190,135,129,133,129,129,129, + 112,190,135,129,133,129,129,129,112,190,135,129,133,129,129,129, + 112,190,135,129,133,129,129,129,112,190,135,129,133,129,129,129, + 112,190,135,129,133,129,129,129,240,190,240,129,137,129,129,129, + 240,173,173,233,233,5,98,76,98,98,98,98,76,98,76,98, + 98,76,3,98,3,76,76,3,98,98,98,98,98,98,3,3, + 76,3,98,98,5,3,3,3,98,3,3,3,98,98,224,98, + 53,53,53,53,53,87,87,53,87,87,87,87,87,87,87,53, + 53,87,87,87,87,93,87,87,87,93,93,87,87,87,87,87, + 87,93,87,87,87,87,87,87,136,93,87,87,87,87,87,87, + 87,87,87,87,87,87,136,87,87,87,87,87,87,136,87,87, + 87,87,87,87,87,87,87,93,87,93,136,93,87,87,87,87, + 87,87,87,87,93,87,87,87,87,87,93,93,225,87,108,9, + 173,240,28,112,240,202,240,240,196,135,28,112,240,202,240,240, + 196,135,28,112,240,202,240,240,196,135,28,112,240,202,240,240, + 196,135,28,112,240,202,240,240,196,135,28,112,240,202,240,240, + 196,135,28,112,240,202,240,240,196,135,28,112,240,202,240,240, + 196,135,28,112,240,202,240,240,196,135,28,112,240,202,240,240, + 196,135,28,112,240,202,240,240,196,135,28,112,240,202,240,240, + 196,135,28,112,240,202,240,240,196,135,28,112,240,202,240,240, + 196,135,28,112,240,202,240,240,196,135,28,112,240,202,240,240, + 196,135,28,112,240,202,240,240,196,240,244,112,129,28,240,240, + 196,173,173,233,35,31,98,57,98,76,98,98,98,98,98,98, + 98,98,3,76,98,98,98,3,3,3,98,3,98,98,98,3, + 98,3,3,98,76,76,76,98,76,98,98,3,3,98,98,57, + 53,53,56,53,53,53,53,87,53,87,53,87,87,53,87,87, + 87,87,53,87,87,87,87,87,87,87,87,11,87,87,87,87, + 93,87,87,87,87,87,87,87,87,87,87,87,87,87,87,53, + 136,87,87,87,87,87,87,87,87,87,87,136,208,87,87,87, + 87,87,87,87,87,87,87,208,87,87,87,87,136,53,87,93, + 87,87,87,93,87,87,93,93,87,87,87,87,93,93,154,9, + 28,190,200,207,207,207,207,182,124,190,200,207,207,207,207,182, + 124,190,200,207,207,207,207,182,124,190,200,207,207,207,207,182, + 124,190,200,207,207,207,207,182,124,190,200,207,207,207,207,182, + 124,190,200,207,207,207,207,182,124,190,200,207,207,207,207,182, + 124,190,200,207,207,207,207,182,124,190,200,207,207,207,207,182, + 124,190,200,207,207,207,207,182,124,190,200,207,207,207,207,182, + 124,190,200,207,207,207,207,182,124,190,200,207,207,207,207,182, + 124,190,200,207,207,207,207,182,124,190,200,207,207,207,207,182, + 124,190,200,207,207,207,207,182,124,190,200,207,207,207,207,182, + 124,15,15,173,220,98,76,98,98,98,98,76,98,98,98,98, + 98,98,98,3,3,3,98,98,98,98,98,98,252,98,98,76, + 98,76,98,3,3,3,98,3,3,3,3,98,98,3,57,98, + 56,53,53,53,53,53,53,53,53,87,53,53,87,87,87,87, + 53,87,87,53,53,87,87,87,136,53,87,87,87,87,87,87, + 87,93,87,87,87,87,87,87,87,53,87,87,87,87,87,56, + 53,87,87,56,136,87,87,208,136,87,87,87,87,87,87,208, + 136,87,87,87,208,87,87,87,208,87,208,87,87,87,87,87, + 87,87,87,87,87,87,87,87,87,93,87,87,87,136,154,233, + 191,129,243,209,227,227,209,68,111,129,243,209,227,227,209,68, + 111,129,243,209,227,227,209,68,111,129,243,209,227,227,209,68, + 111,129,243,209,227,227,209,68,111,129,243,209,227,227,209,68, + 111,129,243,209,227,227,209,68,111,129,243,209,227,227,209,68, + 111,129,243,209,227,227,209,68,111,129,243,209,227,227,209,68, + 111,129,243,209,227,227,209,68,111,129,243,209,227,227,209,68, + 111,129,243,209,227,227,209,68,111,129,243,209,227,227,209,68, + 111,129,243,209,227,227,209,68,111,129,243,209,227,227,209,68, + 111,151,243,209,227,227,209,68,111,129,243,209,227,227,209,68, + 111,173,173,233,35,31,98,76,31,98,76,98,98,98,98,98, + 98,98,98,98,98,98,98,98,57,98,98,98,98,98,98,3, + 3,98,76,98,98,3,98,98,76,98,3,3,98,98,57,57, + 53,53,56,53,53,53,53,53,53,53,87,53,53,53,53,53, + 87,53,53,87,87,87,136,87,87,87,87,87,87,53,87,53, + 87,53,53,87,53,87,53,87,53,87,53,53,53,53,53,87, + 87,53,53,87,87,53,53,87,136,53,53,208,136,136,208,87, + 87,208,136,87,87,136,87,53,87,87,87,87,87,87,87,208, + 87,87,87,87,87,87,87,87,87,93,87,87,136,87,108,9, + 173,206,48,218,218,101,218,7,243,190,48,218,218,101,218,7, + 243,190,48,218,218,101,218,7,243,190,48,218,218,101,218,7, + 243,190,48,218,218,101,218,7,243,190,48,218,218,101,218,7, + 243,190,48,218,218,101,218,7,243,190,48,218,218,101,218,7, + 243,190,48,218,218,101,218,7,243,190,48,218,218,101,218,7, + 243,190,48,218,218,101,218,7,243,190,48,218,218,101,218,7, + 243,190,48,218,218,101,218,7,243,190,48,218,218,101,218,7, + 243,190,48,218,218,101,218,7,243,190,48,218,218,101,218,7, + 243,206,48,218,218,101,218,7,243,190,48,218,218,101,218,7, + 243,173,173,9,233,76,31,98,76,98,98,31,98,76,98,98, + 57,98,98,57,98,98,98,98,98,98,57,98,98,252,98,98, + 98,3,98,98,98,76,3,3,3,180,76,98,3,98,98,57, + 246,53,246,56,56,56,53,53,53,53,53,53,53,53,87,53, + 87,53,53,53,53,53,53,53,87,53,53,136,87,53,136,53, + 87,87,53,87,53,87,53,53,53,53,53,53,136,53,43,53, + 53,87,53,56,56,53,56,53,53,53,53,53,53,53,53,208, + 87,53,56,53,53,56,53,136,136,208,136,87,208,208,136,53, + 87,87,56,87,208,87,87,87,87,87,87,87,87,87,154,9, + 173,129,150,60,163,60,163,250,230,151,150,60,163,60,163,250, + 230,151,150,60,163,60,163,250,230,151,150,60,163,60,163,250, + 230,151,150,60,163,60,163,250,230,151,150,60,163,60,163,250, + 230,151,150,60,163,60,163,250,230,151,150,60,163,60,163,250, + 230,151,150,60,163,60,163,250,230,151,150,60,163,60,163,250, + 230,151,150,60,163,60,163,250,230,151,150,60,163,60,163,250, + 230,151,150,60,163,60,163,250,230,151,150,60,163,60,163,250, + 230,151,150,60,163,60,163,250,230,151,150,60,163,60,163,250, + 230,129,150,60,163,60,163,250,230,190,150,60,163,60,163,250, + 230,173,9,233,233,98,76,31,76,31,3,76,98,98,98,98, + 98,98,98,98,98,98,98,98,98,98,98,98,98,3,98,98, + 98,98,252,98,98,98,98,98,98,3,252,98,3,98,98,57, + 56,56,56,53,53,53,53,56,53,53,53,53,53,87,53,87, + 53,87,53,53,53,87,87,87,53,53,87,53,53,53,53,53, + 53,53,53,53,53,53,43,53,53,53,53,53,53,53,56,53, + 87,53,53,53,53,53,53,136,53,53,53,136,53,53,53,53, + 53,53,53,53,53,53,87,56,53,53,56,53,87,87,208,87, + 136,208,87,87,56,53,53,53,56,87,87,87,136,87,108,173, + 191,190,38,24,148,148,24,88,81,190,38,24,148,148,24,88, + 81,190,38,24,148,148,24,88,81,190,38,24,148,148,24,88, + 81,190,38,24,148,148,24,88,81,190,38,24,148,148,24,88, + 81,190,38,24,148,148,24,88,81,190,38,24,148,148,24,88, + 81,190,38,24,148,148,24,88,81,190,38,24,148,148,24,88, + 81,190,38,24,148,148,24,88,81,190,38,24,148,148,24,88, + 81,190,38,24,148,148,24,88,81,190,38,24,148,148,24,88, + 81,190,38,24,148,148,24,88,81,190,38,24,148,148,24,88, + 81,190,38,24,148,148,24,88,81,190,38,24,148,148,24,88, + 81,9,173,9,233,31,31,3,76,98,31,98,98,98,57,98, + 98,98,31,98,98,98,98,98,98,98,98,98,98,98,98,98, + 98,252,98,252,98,98,98,98,98,98,98,98,98,98,57,57, + 246,53,246,56,56,56,53,56,56,53,53,53,53,53,53,53, + 53,87,87,87,53,53,53,53,87,53,53,53,53,53,53,53, + 53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,56, + 56,53,53,53,53,53,56,53,136,53,56,136,56,53,53,136, + 56,136,56,53,53,56,53,53,53,53,53,53,53,87,56,10, + 208,56,136,208,53,56,136,136,87,87,56,56,87,56,108,173, + 173,190,158,50,254,254,118,67,158,190,158,50,254,254,118,67, + 158,190,158,50,254,254,118,67,158,190,158,50,254,254,118,67, + 158,190,158,50,254,254,118,67,158,190,158,50,254,254,118,67, + 158,190,158,50,254,254,118,67,158,190,158,50,254,254,118,67, + 158,190,158,50,254,254,118,67,158,190,158,50,254,254,118,67, + 158,190,158,50,254,254,118,67,158,190,158,50,254,254,118,67, + 158,190,158,50,254,254,118,67,158,190,158,50,254,254,118,67, + 158,190,158,50,254,254,118,67,158,190,158,50,254,254,118,67, + 158,206,158,50,254,254,118,67,158,190,158,50,254,254,118,67, + 158,173,173,233,233,98,76,31,76,98,76,76,31,98,76,98, + 98,98,98,31,98,31,98,31,98,98,98,98,57,98,98,98, + 57,98,98,252,252,252,98,98,224,98,75,224,98,3,98,57, + 56,246,56,56,53,53,56,53,53,53,53,53,53,53,53,53, + 53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53, + 53,53,53,53,56,56,53,53,53,53,53,53,53,53,10,56, + 53,53,53,53,53,53,53,56,10,53,53,53,53,53,56,10, + 53,56,53,53,53,53,53,53,136,53,56,10,10,56,208,53, + 53,56,56,10,53,53,53,56,136,56,56,56,56,56,154,173, + 203,129,14,24,64,64,64,88,230,129,14,24,64,64,64,88, + 230,129,14,24,64,64,64,88,230,129,14,24,64,64,64,88, + 230,129,14,24,64,64,64,88,230,129,14,24,64,64,64,88, + 230,129,14,24,64,64,64,88,230,129,14,24,64,64,64,88, + 230,129,14,24,64,64,64,88,230,129,14,24,64,64,64,88, + 230,129,14,24,64,64,64,88,230,129,14,24,64,64,64,88, + 230,129,14,24,64,64,64,88,230,129,14,24,64,64,64,88, + 230,129,14,24,64,64,64,88,230,129,14,24,64,64,64,88, + 230,190,14,24,64,64,64,88,230,190,14,24,64,64,64,88, + 230,9,173,9,233,31,76,76,76,98,31,76,76,98,76,31, + 98,31,98,98,98,98,98,98,98,98,98,57,98,98,98,57, + 98,98,98,98,98,98,252,252,98,201,76,252,98,98,57,57, + 246,56,53,246,246,53,53,53,53,53,246,53,53,53,53,53, + 53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53, + 53,53,56,53,53,53,53,43,53,43,56,53,53,56,53,53, + 53,53,10,56,56,53,56,53,56,10,56,53,53,53,43,53, + 53,56,53,53,56,53,53,56,56,10,43,53,53,10,53,56, + 208,53,56,10,53,56,53,53,87,56,56,136,56,56,108,173, + 203,190,127,88,42,42,42,62,243,190,127,88,42,42,42,62, + 243,190,127,88,42,42,42,62,243,190,127,88,42,42,42,62, + 243,190,127,88,42,42,42,62,243,190,127,88,42,42,42,62, + 243,190,127,88,42,42,42,62,243,190,127,88,42,42,42,62, + 243,190,127,88,42,42,42,62,243,190,127,88,42,42,42,62, + 243,190,127,88,42,42,42,62,243,190,127,88,42,42,42,62, + 243,190,127,88,42,42,42,62,243,190,127,88,42,42,42,62, + 243,190,127,88,42,42,42,62,243,190,127,88,42,42,42,62, + 243,190,127,88,42,42,42,62,243,190,127,88,42,42,42,62, + 243,173,173,233,35,31,31,98,31,76,76,98,98,76,98,98, + 98,31,31,98,31,98,98,98,98,31,98,98,98,57,98,98, + 98,98,98,98,98,98,98,252,252,98,98,75,98,98,98,57, + 246,56,171,56,56,246,56,246,56,53,53,53,246,53,53,53, + 53,56,56,53,53,53,53,10,56,53,53,56,53,53,10,56, + 53,56,53,53,53,56,56,10,56,10,56,56,56,56,56,56, + 56,56,56,10,56,56,53,56,53,43,53,56,53,56,56,10, + 56,56,10,56,53,56,56,56,53,56,56,56,56,56,56,56, + 53,53,53,56,10,10,56,10,53,56,56,56,87,56,108,173, + 115,191,115,58,58,58,58,202,244,190,115,58,58,244,244,202, + 244,190,115,58,58,244,244,202,244,190,115,58,58,244,244,202, + 244,190,115,58,58,244,244,202,244,190,115,58,58,244,244,202, + 244,190,115,58,58,244,244,202,244,190,115,58,58,244,244,202, + 244,190,115,58,58,244,244,202,244,190,115,58,58,244,244,202, + 244,190,115,58,58,244,244,202,244,190,115,58,58,244,244,202, + 244,190,115,58,58,244,244,202,244,190,115,58,58,244,244,202, + 244,190,115,58,58,244,196,202,244,191,115,58,58,58,58,142, + 244,191,115,58,58,58,196,202,196,244,115,58,58,58,196,142, + 244,173,173,9,233,31,76,76,98,76,31,98,31,76,31,98, + 98,98,98,98,98,98,98,31,98,98,98,98,57,98,98,98, + 98,98,98,98,98,98,98,98,98,98,98,98,224,224,57,57, + 56,56,246,56,56,56,56,53,56,56,56,53,53,53,53,56, + 53,53,56,56,56,53,53,53,56,10,53,56,56,53,53,56, + 53,10,56,56,10,56,56,53,56,53,56,56,10,56,56,56, + 56,56,56,56,56,56,56,56,56,56,56,56,43,53,43,56, + 56,43,43,56,56,53,56,56,56,56,56,56,56,53,43,56, + 56,56,56,53,43,56,53,56,53,53,87,56,56,56,108,203, + 203,190,58,129,129,129,129,137,244,58,58,129,129,190,151,137, + 244,58,58,129,129,190,151,137,244,58,58,129,129,190,151,137, + 244,58,58,129,129,190,151,137,244,58,58,129,129,190,151,137, + 244,58,58,129,129,190,151,137,244,58,58,129,129,190,151,137, + 244,58,58,129,129,190,151,137,244,58,58,129,129,190,151,137, + 244,58,58,129,129,190,151,137,244,58,58,129,129,190,151,137, + 244,58,58,129,129,190,151,137,244,58,58,129,129,190,151,137, + 244,58,58,129,129,190,137,137,244,58,58,129,129,240,129,129, + 112,190,58,129,129,191,137,137,240,190,58,129,129,240,129,129, + 240,173,173,9,233,31,31,57,76,98,57,76,98,98,98,98, + 31,98,98,31,98,31,3,31,98,98,98,98,98,98,98,98, + 98,252,75,75,76,98,98,98,98,98,98,3,252,224,224,57, + 246,56,171,56,246,56,53,56,246,53,53,53,246,53,246,53, + 56,56,53,53,53,53,53,53,53,53,53,53,53,56,56,53, + 56,53,53,53,53,53,56,56,53,56,53,56,56,56,56,56, + 56,56,56,56,56,56,56,56,56,43,56,56,171,56,171,56, + 56,171,171,56,56,56,56,56,56,53,53,56,56,56,171,56, + 56,53,56,56,56,56,56,53,56,53,56,43,56,56,108,173, + 15,190,58,129,129,240,129,133,112,190,244,129,129,191,129,133, + 112,190,244,129,129,191,129,133,112,190,244,129,129,191,129,133, + 112,190,244,129,129,191,129,133,112,190,244,129,129,191,129,133, + 112,190,244,129,129,191,129,133,112,190,244,129,129,191,129,133, + 112,190,244,129,129,191,129,133,112,190,244,129,129,191,129,133, + 112,190,244,129,129,191,129,133,112,190,244,129,129,191,129,133, + 112,190,244,129,129,191,129,133,112,190,244,129,129,191,129,133, + 112,190,244,129,129,240,129,133,112,190,244,129,129,129,129,151, + 244,190,244,129,133,191,129,129,240,190,240,137,129,190,129,129, + 240,173,173,9,35,31,57,98,57,57,98,57,57,76,31,98, + 98,31,98,98,98,98,98,98,31,98,57,98,98,98,98,98, + 98,57,57,57,98,98,98,98,98,98,98,57,57,224,57,165, + 171,246,56,246,56,246,53,53,246,246,56,53,246,53,56,53, + 53,56,56,53,246,56,56,56,56,56,56,56,56,56,10,56, + 56,56,56,56,56,53,56,56,56,56,56,56,56,56,56,56, + 56,56,10,56,171,56,56,56,171,56,56,56,56,56,56,56, + 56,56,56,56,56,56,56,56,56,56,56,56,56,56,171,56, + 56,56,56,56,56,56,56,56,56,56,56,56,53,56,205,203, + 203,191,244,129,129,129,129,129,244,190,244,133,129,129,129,129, + 244,190,244,133,129,129,129,129,244,190,244,133,129,129,129,129, + 244,190,244,133,129,129,129,129,244,190,244,133,129,129,129,129, + 244,190,244,133,129,129,129,129,244,190,244,133,129,129,129,129, + 244,190,244,133,129,129,129,129,244,190,244,133,129,129,129,129, + 244,190,244,133,129,129,129,129,244,190,244,133,129,129,129,129, + 244,190,244,133,129,129,129,129,244,190,244,133,129,129,129,129, + 244,190,244,133,129,191,129,129,244,191,244,133,133,112,133,129, + 240,191,244,137,129,240,129,151,58,191,244,133,129,191,151,151, + 58,173,173,9,35,31,31,31,76,31,57,76,31,76,98,31, + 76,98,31,98,31,98,31,98,98,98,98,98,57,98,57,98, + 98,98,98,98,224,98,98,98,224,98,98,98,98,224,224,57, + 246,246,56,56,246,56,246,246,53,246,53,246,53,246,53,246, + 246,53,53,246,53,53,53,53,53,56,53,56,53,53,56,56, + 56,56,56,56,56,56,56,56,56,10,56,56,10,56,56,56, + 56,171,56,171,56,56,56,56,56,56,56,56,56,56,56,56, + 56,56,56,56,56,56,56,56,56,56,56,171,171,56,56,56, + 56,56,56,56,56,171,171,10,56,53,56,56,10,171,108,173, + 15,190,135,129,129,240,129,137,28,190,244,137,129,240,129,137, + 28,190,244,137,129,240,129,137,28,190,244,137,129,240,129,137, + 28,190,244,137,129,240,129,137,28,190,244,137,129,240,129,137, + 28,190,244,137,129,240,129,137,28,190,244,137,129,240,129,137, + 28,190,244,137,129,240,129,137,28,190,244,137,129,240,129,137, + 28,190,244,137,129,240,129,137,28,190,244,137,129,240,129,137, + 28,190,244,137,129,240,129,137,28,190,244,137,129,240,129,137, + 28,190,244,137,133,191,129,137,244,190,244,220,129,191,129,129, + 244,190,240,129,129,190,129,129,244,58,244,137,133,129,129,129, + 240,173,173,9,220,31,76,76,31,57,76,31,76,31,31,98, + 31,31,98,31,98,98,98,98,31,98,98,57,98,57,98,57, + 57,98,98,224,98,224,224,224,76,224,224,224,224,224,57,165, + 246,56,246,56,246,56,56,246,53,246,56,246,53,246,53,53, + 246,246,53,246,246,246,56,246,53,56,53,246,56,246,56,56, + 53,56,246,56,56,56,56,56,56,56,56,56,56,171,56,56, + 56,56,56,56,56,56,56,56,56,56,56,171,56,171,56,56, + 56,56,56,171,56,56,56,171,171,171,56,56,171,171,171,171, + 171,56,171,171,171,56,171,56,56,10,56,56,56,246,205,203, + 203,240,202,240,240,240,240,240,244,240,28,112,240,240,240,240, + 244,240,28,112,240,240,240,240,244,240,28,112,240,240,240,240, + 244,240,28,112,240,240,240,240,244,240,28,112,240,240,240,240, + 244,240,28,112,240,240,240,240,244,240,28,112,240,240,240,240, + 244,240,28,112,240,240,240,240,244,240,28,112,240,240,240,240, + 244,240,28,112,240,240,240,240,244,240,28,112,240,240,240,240, + 244,240,28,112,240,240,240,240,244,240,28,112,240,240,240,240, + 196,240,28,112,191,112,240,240,244,240,28,112,240,244,240,240, + 196,240,202,240,129,112,240,240,244,240,28,112,240,28,240,240, + 196,173,9,9,35,31,31,162,31,31,57,57,57,57,31,76, + 98,31,98,98,31,98,31,98,31,31,57,98,57,57,98,98, + 57,57,57,57,57,57,57,57,224,224,224,57,57,165,31,195, + 106,106,106,56,246,246,53,246,246,53,246,53,246,53,246,246, + 246,53,246,246,53,246,53,56,246,56,56,56,56,56,56,56, + 246,56,56,56,56,56,171,56,56,56,171,171,171,56,171,171, + 171,171,222,171,171,171,171,171,56,56,56,56,171,56,56,56, + 56,56,171,56,56,56,171,106,171,171,171,171,171,171,171,171, + 171,171,56,56,56,171,171,171,56,56,56,56,56,171,205,115, + 15,190,200,207,207,207,207,182,124,151,200,207,207,207,207,182, + 124,151,200,207,207,207,207,182,124,151,200,207,207,207,207,182, + 124,151,200,207,207,207,207,182,124,151,200,207,207,207,207,182, + 124,151,200,207,207,207,207,182,124,151,200,207,207,207,207,182, + 124,151,200,207,207,207,207,182,124,151,200,207,207,207,207,182, + 124,151,200,207,207,207,207,182,124,151,200,207,207,207,207,182, + 124,151,200,207,207,207,207,182,124,151,200,207,207,207,207,182, + 124,151,200,207,207,207,207,182,124,151,200,207,207,207,207,182, + 124,206,200,207,207,207,207,182,124,129,200,207,207,207,207,182, + 124,15,15,173,129,31,31,31,31,76,57,31,57,57,57,31, + 31,57,31,31,57,31,57,98,98,98,57,57,98,57,57,57, + 57,98,98,224,224,224,224,224,57,57,57,98,98,57,57,165, + 56,246,246,246,246,246,246,53,246,246,246,53,246,246,53,246, + 246,53,246,56,246,246,246,56,246,246,56,246,56,56,56,171, + 56,171,171,171,171,56,171,171,171,56,56,56,171,171,171,56, + 171,56,56,56,222,171,171,171,171,171,171,56,171,171,171,171, + 171,56,171,171,171,56,56,56,171,171,171,171,171,102,171,171, + 171,102,102,102,102,171,171,171,171,56,56,171,56,106,103,33, + 173,129,243,209,227,227,209,68,111,190,243,209,227,227,209,68, + 111,190,243,209,227,227,209,68,111,190,243,209,227,227,209,68, + 111,190,243,209,227,227,209,68,111,190,243,209,227,227,209,68, + 111,190,243,209,227,227,209,68,111,190,243,209,227,227,209,68, + 111,190,243,209,227,227,209,68,111,190,243,209,227,227,209,68, + 111,190,243,209,227,227,209,68,111,190,243,209,227,227,209,68, + 111,190,243,209,227,227,209,68,111,190,243,209,227,227,209,68, + 111,190,243,209,227,227,209,68,111,190,243,209,227,227,209,68, + 111,129,243,209,227,227,209,68,111,190,243,209,227,227,209,68, + 111,15,173,9,35,31,31,31,31,31,76,31,31,57,57,57, + 98,57,98,31,57,31,31,31,57,57,57,57,57,57,57,98, + 57,57,57,57,57,57,57,224,224,224,36,224,224,57,57,195, + 77,246,246,246,246,246,246,246,53,246,246,246,246,53,246,246, + 53,246,56,56,246,56,246,53,56,246,56,171,56,246,246,56, + 106,246,56,106,246,171,246,171,56,171,171,171,56,56,222,171, + 171,171,171,171,171,171,56,171,171,171,171,171,171,171,171,171, + 171,171,171,171,171,171,171,171,171,171,171,171,171,106,171,171, + 102,171,171,171,171,171,102,171,171,171,171,171,171,102,108,173, + 173,206,48,218,218,101,218,7,243,206,48,218,218,101,218,7, + 243,206,48,218,218,101,218,7,243,206,48,218,218,101,218,7, + 243,206,48,218,218,101,218,7,243,206,48,218,218,101,218,7, + 243,206,48,218,218,101,218,7,243,206,48,218,218,101,218,7, + 243,206,48,218,218,101,218,7,243,206,48,218,218,101,218,7, + 243,206,48,218,218,101,218,7,243,206,48,218,218,101,218,7, + 243,206,48,218,218,101,218,7,243,206,48,218,218,101,218,7, + 243,190,48,218,218,101,218,7,243,190,48,218,218,101,218,7, + 243,135,48,218,218,101,218,7,243,190,48,218,218,101,218,7, + 243,173,173,220,220,31,31,31,31,31,31,31,57,31,31,31, + 31,31,31,57,57,57,57,57,31,57,57,57,57,57,57,57, + 57,57,57,57,57,57,36,57,57,57,57,165,57,165,195,31, + 106,246,246,246,246,246,246,246,246,246,53,246,246,246,53,246, + 246,246,56,246,56,246,246,246,246,106,246,106,171,171,106,56, + 171,171,56,171,106,171,246,106,56,171,171,171,171,171,171,171, + 171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171, + 171,171,171,171,171,171,171,171,102,181,171,171,171,102,181,171, + 181,181,181,102,181,171,90,171,102,181,171,171,171,181,103,40, + 173,129,150,60,163,60,163,250,230,129,150,60,163,60,163,250, + 230,129,150,60,163,60,163,250,230,129,150,60,163,60,163,250, + 230,129,150,60,163,60,163,250,230,129,150,60,163,60,163,250, + 230,129,150,60,163,60,163,250,230,129,150,60,163,60,163,250, + 230,129,150,60,163,60,163,250,230,129,150,60,163,60,163,250, + 230,129,150,60,163,60,163,250,230,129,150,60,163,60,163,250, + 230,129,150,60,163,60,163,250,230,129,150,60,163,60,163,250, + 230,129,150,60,163,60,163,250,230,190,150,60,163,60,163,250, + 230,190,150,60,163,60,163,250,230,206,150,60,163,60,163,250, + 230,173,173,9,35,94,31,31,31,94,31,31,31,31,31,31, + 31,31,31,31,31,31,31,57,31,31,31,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,224,57,165,195, + 246,77,77,246,246,246,246,246,246,246,246,246,246,246,246,246, + 53,246,246,246,56,246,171,246,171,246,171,56,246,106,56,106, + 246,106,106,171,171,171,171,171,106,171,171,171,171,106,171,171, + 171,171,171,171,171,102,171,171,171,171,171,171,171,171,171,171, + 171,171,171,171,171,102,181,102,106,102,181,102,181,171,102,102, + 102,171,171,121,102,90,181,181,171,102,171,171,171,121,103,173, + 28,190,38,24,148,148,24,88,81,206,38,24,148,148,24,88, + 81,206,38,24,148,148,24,88,81,206,38,24,148,148,24,88, + 81,206,38,24,148,148,24,88,81,206,38,24,148,148,24,88, + 81,206,38,24,148,148,24,88,81,206,38,24,148,148,24,88, + 81,206,38,24,148,148,24,88,81,206,38,24,148,148,24,88, + 81,206,38,24,148,148,24,88,81,206,38,24,148,148,24,88, + 81,206,38,24,148,148,24,88,81,206,38,24,148,148,24,88, + 81,190,38,24,148,148,24,88,81,190,38,24,148,148,24,88, + 81,190,38,24,148,148,24,88,81,190,38,24,148,148,24,88, + 81,173,173,220,220,94,31,94,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,57,31,57,57,57,31,57,57,31,57, + 31,57,57,57,57,31,165,165,165,165,57,165,57,31,31,237, + 246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246, + 246,246,246,246,246,246,246,56,106,246,106,106,246,106,171,171, + 56,171,106,106,171,106,56,171,106,106,171,171,171,106,171,171, + 171,171,171,171,171,102,171,171,171,171,171,171,171,171,171,102, + 171,171,171,171,106,171,106,102,171,171,171,171,181,171,121,181, + 102,121,102,181,181,102,102,102,181,181,181,181,102,121,103,9, + 28,129,158,50,254,254,118,67,158,129,158,50,254,254,118,67, + 158,129,158,50,254,254,118,67,158,129,158,50,254,254,118,67, + 158,129,158,50,254,254,118,67,158,129,158,50,254,254,118,67, + 158,129,158,50,254,254,118,67,158,129,158,50,254,254,118,67, + 158,129,158,50,254,254,118,67,158,129,158,50,254,254,118,67, + 158,129,158,50,254,254,118,67,158,129,158,50,254,254,118,67, + 158,129,158,50,254,254,118,67,158,129,158,50,254,254,118,67, + 158,190,158,50,254,254,118,67,158,129,158,50,254,254,118,67, + 158,190,158,50,254,254,118,67,158,129,158,50,254,254,118,67, + 158,173,173,9,35,31,31,31,31,94,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,57,31,31,31,31,57, + 31,57,57,57,57,57,57,57,57,119,57,195,165,195,195,195, + 77,77,77,77,77,246,246,246,246,246,246,246,246,246,246,246, + 246,246,246,246,246,246,246,246,246,106,246,246,171,246,246,106, + 106,106,171,106,106,171,106,106,56,171,106,106,106,171,106,106, + 106,171,171,171,171,106,102,106,102,102,181,171,171,171,171,106, + 171,171,171,102,171,171,102,171,181,121,102,121,102,181,102,102, + 181,102,181,102,121,181,121,102,121,102,181,171,171,19,113,203, + 203,190,14,24,64,64,64,88,230,190,14,24,64,64,64,88, + 230,190,14,24,64,64,64,88,230,190,14,24,64,64,64,88, + 230,190,14,24,64,64,64,88,230,190,14,24,64,64,64,88, + 230,190,14,24,64,64,64,88,230,190,14,24,64,64,64,88, + 230,190,14,24,64,64,64,88,230,190,14,24,64,64,64,88, + 230,190,14,24,64,64,64,88,230,190,14,24,64,64,64,88, + 230,190,14,24,64,64,64,88,230,190,14,24,64,64,64,88, + 230,190,14,24,64,64,64,88,230,190,14,24,64,64,64,88, + 230,190,14,24,64,64,64,88,230,129,14,24,64,64,64,88, + 230,173,173,191,154,237,94,94,31,94,31,94,31,31,31,237, + 31,31,31,31,31,31,31,31,31,31,31,31,31,57,31,31, + 31,31,31,195,31,31,31,195,195,31,25,57,165,195,195,237, + 77,77,77,77,246,77,246,246,246,246,43,246,246,246,246,246, + 246,246,246,246,246,246,246,246,246,246,246,246,106,106,106,106, + 106,106,106,106,106,106,106,106,106,106,171,106,106,171,181,181, + 106,106,106,106,171,106,181,106,106,106,181,181,181,102,106,102, + 181,171,106,102,181,106,181,102,102,181,102,181,102,121,181,181, + 181,121,102,181,102,102,90,181,56,56,19,121,102,19,103,203, + 28,129,127,88,42,42,42,62,243,129,127,88,42,42,42,62, + 243,129,127,88,42,42,42,62,243,129,127,88,42,42,42,62, + 243,129,127,88,42,42,42,62,243,129,127,88,42,42,42,62, + 243,129,127,88,42,42,42,62,243,129,127,88,42,42,42,62, + 243,129,127,88,42,42,42,62,243,129,127,88,42,42,42,62, + 243,129,127,88,42,42,42,62,243,129,127,88,42,42,42,62, + 243,129,127,88,42,42,42,62,243,129,127,88,42,42,42,62, + 243,129,127,88,42,42,42,62,243,190,127,88,42,42,42,62, + 243,129,127,88,42,42,42,62,243,190,127,88,42,42,42,62, + 243,15,173,9,6,237,31,237,31,31,31,94,31,31,31,237, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,195,31,195,31,195,195,119,195,195,57,25,25,237, + 77,77,77,77,246,77,77,246,77,77,246,77,246,246,246,246, + 246,246,246,246,246,246,246,246,246,246,106,106,246,246,246,106, + 106,106,106,106,106,106,106,106,106,106,106,106,181,106,106,106, + 181,106,106,181,106,171,106,102,181,102,106,171,106,106,181,171, + 171,121,181,106,171,102,171,181,121,181,19,181,181,181,181,181, + 102,181,121,102,121,121,121,181,181,181,102,102,181,181,187,203, + 28,135,115,58,244,58,196,28,196,240,115,58,244,244,244,28, + 196,240,115,58,244,244,244,28,196,240,115,58,244,244,244,28, + 196,240,115,58,244,244,244,28,196,240,115,58,244,244,244,28, + 196,240,115,58,244,244,244,28,196,240,115,58,244,244,244,28, + 196,240,115,58,244,244,244,28,196,240,115,58,244,244,244,28, + 196,240,115,58,244,244,244,28,196,240,115,58,244,244,244,28, + 196,240,115,58,244,244,244,28,196,190,115,58,58,58,58,202, + 196,190,115,58,244,244,142,142,244,191,115,58,58,58,58,196, + 244,240,115,58,58,244,196,196,244,244,115,58,58,58,196,142, + 244,173,173,191,220,237,31,94,31,94,31,237,94,237,195,31, + 237,237,195,195,195,195,195,195,31,210,195,195,195,31,31,31, + 195,31,31,31,195,31,195,195,195,237,195,195,195,195,237,237, + 77,77,77,77,246,246,246,77,246,77,77,246,77,77,77,246, + 77,77,246,77,246,77,77,77,246,77,77,246,77,77,246,77, + 246,246,246,246,106,106,106,106,181,181,106,106,106,106,106,106, + 181,181,106,181,181,181,106,106,106,106,181,181,102,106,121,181, + 171,106,102,121,181,121,181,181,102,181,181,181,181,102,121,181, + 181,181,181,181,19,102,102,181,121,121,121,102,121,102,130,203, + 203,240,58,129,129,240,137,151,244,190,244,137,137,191,137,151, + 244,190,244,137,137,191,137,151,244,190,244,137,137,191,137,151, + 244,190,244,137,137,191,137,151,244,190,244,137,137,191,137,151, + 244,190,244,137,137,191,137,151,244,190,244,137,137,191,137,151, + 244,190,244,137,137,191,137,151,244,190,244,137,137,191,137,151, + 244,190,244,137,137,191,137,151,244,190,244,137,137,191,137,151, + 244,190,244,137,137,191,137,151,244,240,58,129,129,129,129,137, + 196,190,58,129,129,190,129,129,112,190,58,129,133,129,129,129, + 244,190,190,129,129,191,137,129,244,190,58,129,129,240,129,129, + 240,15,173,9,35,237,237,94,237,31,94,237,31,237,31,195, + 31,237,31,237,31,195,31,195,237,31,31,31,210,31,195,31, + 195,195,195,31,195,195,31,195,195,195,195,237,195,237,139,237, + 77,77,77,77,77,77,77,77,77,246,77,77,246,77,246,77, + 246,77,77,77,246,246,246,246,246,77,246,77,246,246,77,246, + 77,77,77,77,106,106,106,106,77,77,106,106,106,106,106,106, + 106,106,106,106,106,171,181,181,106,181,106,171,106,106,171,106, + 121,102,121,102,181,102,181,181,181,121,102,121,181,181,181,102, + 121,181,181,181,181,121,121,102,102,102,121,181,181,156,103,203, + 28,190,244,151,129,191,137,129,244,190,240,129,151,240,137,129, + 244,190,240,129,151,240,137,129,244,190,240,129,151,240,137,129, + 244,190,240,129,151,240,137,129,244,190,240,129,151,240,137,129, + 244,190,240,129,151,240,137,129,244,190,240,129,151,240,137,129, + 244,190,240,129,151,240,137,129,244,190,240,129,151,240,137,129, + 244,190,240,129,151,240,137,129,244,190,240,129,151,240,137,129, + 244,190,240,129,151,240,137,129,58,240,244,133,129,240,129,137, + 244,190,244,151,129,190,133,129,244,191,244,129,129,240,129,129, + 244,58,244,129,129,240,133,137,240,190,240,137,129,190,129,129, + 240,173,173,191,205,237,237,94,237,237,237,195,237,195,195,31, + 31,31,237,31,195,237,237,31,31,210,31,237,31,195,195,237, + 237,195,31,210,195,195,195,237,195,237,237,25,237,195,237,20, + 77,66,77,77,77,77,77,77,246,77,77,246,77,77,246,77, + 77,246,77,77,77,77,246,77,246,77,246,77,77,77,77,77, + 106,106,181,77,106,77,77,106,106,106,77,106,106,181,106,106, + 106,106,106,106,106,106,171,121,106,106,106,106,121,121,181,102, + 121,181,181,181,121,171,181,181,181,181,181,102,181,121,181,181, + 102,102,181,181,181,102,121,181,121,102,102,90,181,19,198,115, + 173,190,58,129,129,129,137,137,240,190,58,129,129,129,137,137, + 240,190,58,129,129,129,137,137,240,190,58,129,129,129,137,137, + 240,190,58,129,129,129,137,137,240,190,58,129,129,129,137,137, + 240,190,58,129,129,129,137,137,240,190,58,129,129,129,137,137, + 240,190,58,129,129,129,137,137,240,190,58,129,129,129,137,137, + 240,190,58,129,129,129,137,137,240,190,58,129,129,129,137,137, + 240,190,58,129,129,129,137,137,240,190,244,129,129,129,129,129, + 240,190,58,129,129,240,129,151,240,190,58,129,129,129,129,133, + 240,191,135,129,129,191,129,133,244,191,244,133,129,240,151,151, + 58,173,173,173,6,237,94,31,237,31,94,31,237,237,237,237, + 237,195,195,237,195,31,237,195,237,237,31,237,237,31,210,31, + 237,237,237,237,237,237,31,237,195,195,195,210,25,25,237,139, + 77,77,77,77,77,77,246,77,77,246,77,77,77,77,246,246, + 77,77,77,77,77,77,246,77,246,77,77,246,246,77,77,106, + 77,77,77,106,77,181,106,106,77,194,106,181,194,77,121,106, + 106,181,181,121,181,181,181,106,181,181,121,181,106,106,106,77, + 102,121,171,106,171,19,171,181,171,121,181,121,181,102,121,171, + 121,171,121,181,181,121,181,102,121,121,121,121,181,19,108,203, + 28,190,240,133,129,129,129,129,244,203,240,137,129,129,129,129, + 244,203,240,137,129,129,129,129,244,203,240,137,129,129,129,129, + 244,203,240,137,129,129,129,129,244,203,240,137,129,129,129,129, + 244,203,240,137,129,129,129,129,244,203,240,137,129,129,129,129, + 244,203,240,137,129,129,129,129,244,203,240,137,129,129,129,129, + 244,203,240,137,129,129,129,129,244,203,240,137,129,129,129,129, + 244,203,240,137,129,129,129,129,244,190,244,129,129,85,137,129, + 196,190,240,133,137,191,129,151,244,191,244,129,129,85,129,129, + 240,244,135,133,137,191,129,129,244,58,244,137,137,129,129,129, + 240,173,28,191,154,20,20,94,20,94,237,237,31,195,237,237, + 237,237,237,237,237,237,237,31,210,31,237,237,237,237,237,237, + 237,31,31,31,210,31,210,195,31,210,237,195,237,237,139,20, + 77,77,77,77,77,77,77,77,246,246,246,246,246,246,77,246, + 246,246,77,246,77,246,77,246,77,246,77,77,246,246,77,106, + 106,106,77,106,77,194,77,181,106,194,77,106,106,106,194,194, + 106,106,106,77,106,77,181,106,106,106,181,181,121,181,181,77, + 106,181,121,181,106,121,181,121,181,181,181,181,121,121,121,181, + 181,181,181,181,181,121,121,181,181,181,181,102,121,156,103,244, + 28,240,28,28,240,202,85,240,196,190,202,112,240,28,85,240, + 196,190,202,112,240,28,85,240,196,190,202,112,240,28,85,240, + 196,190,202,112,240,28,85,240,196,190,202,112,240,28,85,240, + 196,190,202,112,240,28,85,240,196,190,202,112,240,28,85,240, + 196,190,202,112,240,28,85,240,196,190,202,112,240,28,85,240, + 196,190,202,112,240,28,85,240,196,190,202,112,240,28,85,240, + 196,190,202,112,240,28,85,240,28,240,112,240,240,28,240,240, + 202,240,28,28,129,28,240,240,196,135,240,240,240,28,240,240, + 196,240,28,28,129,28,240,240,196,191,28,112,129,28,240,240, + 196,173,15,9,6,237,237,94,237,237,94,237,237,195,195,195, + 237,237,31,195,195,195,237,237,237,237,31,31,237,31,237,31, + 251,237,237,237,237,31,237,237,237,31,237,25,237,237,237,20, + 194,194,77,77,77,77,246,77,77,77,246,246,77,246,246,77, + 246,77,246,77,77,77,77,246,246,77,246,246,77,77,106,77, + 77,77,194,77,77,106,194,77,77,106,181,194,181,77,106,106, + 121,77,106,181,121,121,77,121,194,121,77,106,77,181,121,181, + 121,121,181,121,194,121,181,181,121,121,121,181,181,181,121,181, + 121,121,121,181,121,181,121,121,181,121,121,156,181,156,113,15, + 115,206,200,207,207,207,207,182,124,206,200,207,207,207,207,182, + 124,206,200,207,207,207,207,182,124,206,200,207,207,207,207,182, + 124,206,200,207,207,207,207,182,124,206,200,207,207,207,207,182, + 124,206,200,207,207,207,207,182,124,206,200,207,207,207,207,182, + 124,206,200,207,207,207,207,182,124,206,200,207,207,207,207,182, + 124,206,200,207,207,207,207,182,124,206,200,207,207,207,207,182, + 124,206,200,207,207,207,207,182,124,206,200,207,207,207,207,182, + 124,190,200,207,207,207,207,182,124,190,200,207,207,207,207,182, + 124,190,200,207,207,207,207,182,124,129,200,207,207,207,207,182, + 124,15,202,28,129,16,20,94,20,237,20,237,237,237,237,237, + 237,237,237,237,237,237,237,237,237,210,237,237,210,237,31,237, + 237,31,210,31,237,237,195,195,195,237,237,237,25,237,20,139, + 77,77,77,77,77,77,77,246,77,246,77,77,77,77,77,77, + 246,77,246,77,246,77,77,77,77,77,77,77,77,77,77,77, + 77,77,194,194,77,77,194,194,194,194,77,77,194,194,194,77, + 181,194,77,194,194,181,194,121,194,194,194,121,77,121,194,194, + 77,77,77,121,194,77,194,121,121,194,194,121,194,121,194,121, + 121,77,181,121,181,156,181,181,121,181,121,19,156,156,113,9, + 173,129,243,209,227,227,209,68,111,129,243,209,227,227,209,68, + 111,129,243,209,227,227,209,68,111,129,243,209,227,227,209,68, + 111,129,243,209,227,227,209,68,111,129,243,209,227,227,209,68, + 111,129,243,209,227,227,209,68,111,129,243,209,227,227,209,68, + 111,129,243,209,227,227,209,68,111,129,243,209,227,227,209,68, + 111,129,243,209,227,227,209,68,111,129,243,209,227,227,209,68, + 111,129,243,209,227,227,209,68,111,190,243,209,227,227,209,68, + 111,129,243,209,227,227,209,68,111,190,243,209,227,227,209,68, + 111,129,243,209,227,227,209,68,111,190,243,209,227,227,209,68, + 111,15,28,9,233,20,20,31,20,94,237,20,20,237,237,20, + 237,237,237,237,237,237,237,237,237,237,237,237,237,20,237,237, + 20,237,237,31,237,237,237,237,237,237,237,237,237,237,20,20, + 194,194,194,77,77,77,246,77,77,246,77,246,246,77,77,77, + 77,77,77,246,77,246,77,246,77,77,77,106,77,77,77,77, + 77,77,77,77,194,194,77,77,77,77,194,194,121,77,77,194, + 77,77,194,77,194,66,194,194,121,194,66,194,66,194,66,194, + 156,107,156,77,77,66,66,194,194,121,66,66,194,194,194,219, + 194,156,194,121,156,121,194,156,156,156,121,194,121,107,113,191, + 203,135,48,218,218,101,218,7,243,190,48,218,218,101,218,7, + 243,190,48,218,218,101,218,7,243,190,48,218,218,101,218,7, + 243,190,48,218,218,101,218,7,243,190,48,218,218,101,218,7, + 243,190,48,218,218,101,218,7,243,190,48,218,218,101,218,7, + 243,190,48,218,218,101,218,7,243,190,48,218,218,101,218,7, + 243,190,48,218,218,101,218,7,243,190,48,218,218,101,218,7, + 243,190,48,218,218,101,218,7,243,190,48,218,218,101,218,7, + 243,85,48,218,218,101,218,7,243,190,48,218,218,101,218,7, + 243,151,48,218,218,101,218,7,243,129,48,218,218,101,218,7, + 243,15,173,220,154,16,20,20,20,20,237,237,237,20,20,237, + 20,20,20,237,237,237,237,237,20,237,237,20,237,237,20,237, + 237,20,20,237,237,237,20,20,237,237,237,237,237,139,20,226, + 181,194,194,181,77,194,77,106,77,77,77,77,77,77,77,77, + 77,77,77,77,77,77,77,77,77,77,77,77,77,194,194,77, + 77,194,194,77,77,194,194,66,194,77,77,77,77,194,77,194, + 66,66,194,77,194,77,77,194,194,194,194,194,66,194,66,66, + 77,77,66,107,194,77,77,66,194,194,156,66,194,66,194,194, + 194,66,194,66,194,107,66,194,194,156,107,156,156,184,113,191, + 203,190,150,60,163,60,163,250,230,151,150,60,163,60,163,250, + 230,151,150,60,163,60,163,250,230,151,150,60,163,60,163,250, + 230,151,150,60,163,60,163,250,230,151,150,60,163,60,163,250, + 230,151,150,60,163,60,163,250,230,151,150,60,163,60,163,250, + 230,151,150,60,163,60,163,250,230,151,150,60,163,60,163,250, + 230,151,150,60,163,60,163,250,230,151,150,60,163,60,163,250, + 230,151,150,60,163,60,163,250,230,151,150,60,163,60,163,250, + 230,190,150,60,163,60,163,250,230,151,150,60,163,60,163,250, + 230,190,150,60,163,60,163,250,230,206,150,60,163,60,163,250, + 230,15,173,9,35,20,20,20,237,20,20,20,20,237,237,237, + 237,237,20,20,20,20,20,237,20,20,237,20,20,237,20,237, + 237,237,20,237,237,237,237,237,237,237,20,237,237,251,20,20, + 194,194,194,77,181,77,194,77,77,77,77,77,77,77,77,77, + 77,77,77,77,77,77,77,77,106,77,77,194,77,77,77,194, + 194,77,77,194,66,77,66,77,77,66,194,66,66,77,194,66, + 121,77,194,194,77,194,194,66,194,194,194,194,121,194,194,121, + 107,194,121,77,66,66,107,194,66,66,194,194,66,156,66,66, + 66,156,66,156,107,107,156,107,107,107,156,107,107,184,113,203, + 191,190,38,24,148,148,24,88,81,190,38,24,148,148,24,88, + 81,190,38,24,148,148,24,88,81,190,38,24,148,148,24,88, + 81,190,38,24,148,148,24,88,81,190,38,24,148,148,24,88, + 81,190,38,24,148,148,24,88,81,190,38,24,148,148,24,88, + 81,190,38,24,148,148,24,88,81,190,38,24,148,148,24,88, + 81,190,38,24,148,148,24,88,81,190,38,24,148,148,24,88, + 81,190,38,24,148,148,24,88,81,190,38,24,148,148,24,88, + 81,135,38,24,148,148,24,88,81,190,38,24,148,148,24,88, + 81,190,38,24,148,148,24,88,81,190,38,24,148,148,24,88, + 81,173,173,220,220,16,20,20,20,20,20,237,20,20,20,20, + 20,20,237,237,237,237,237,20,20,237,237,20,237,20,237,20, + 20,20,237,20,20,237,237,20,237,20,237,237,20,20,20,16, + 194,194,194,194,194,77,181,194,181,77,77,181,77,77,106,194, + 77,194,77,77,77,77,106,77,194,194,77,194,77,77,77,77, + 194,194,77,194,194,77,194,194,77,194,77,194,194,66,77,77, + 194,77,121,194,194,121,77,194,194,77,66,194,194,121,77,194, + 66,194,156,194,194,194,66,194,194,66,107,156,66,194,107,156, + 66,107,66,66,66,107,107,107,107,107,107,30,156,184,198,28, + 28,129,158,50,254,254,118,67,158,129,158,50,254,254,118,67, + 158,129,158,50,254,254,118,67,158,129,158,50,254,254,118,67, + 158,129,158,50,254,254,118,67,158,129,158,50,254,254,118,67, + 158,129,158,50,254,254,118,67,158,129,158,50,254,254,118,67, + 158,129,158,50,254,254,118,67,158,129,158,50,254,254,118,67, + 158,129,158,50,254,254,118,67,158,129,158,50,254,254,118,67, + 158,129,158,50,254,254,118,67,158,129,158,50,254,254,118,67, + 158,190,158,50,254,254,118,67,158,129,158,50,254,254,118,67, + 158,190,158,50,254,254,118,67,158,190,158,50,254,254,118,67, + 158,15,173,220,154,16,20,20,20,20,20,20,20,20,20,20, + 20,20,20,20,20,20,237,237,20,20,20,20,237,20,20,237, + 237,20,20,237,20,20,237,20,20,20,20,20,20,20,226,16, + 181,194,181,194,181,194,181,77,106,181,194,106,194,181,181,106, + 194,106,194,194,181,106,77,77,106,77,181,77,194,194,194,194, + 77,77,194,77,194,66,77,77,194,77,194,194,194,194,121,194, + 194,66,77,194,194,194,194,121,77,121,194,77,66,77,107,194, + 121,66,66,194,107,66,194,66,107,66,66,66,194,107,66,66, + 107,194,107,107,107,107,107,107,107,107,156,107,156,30,198,203, + 244,129,14,24,64,64,64,88,230,129,14,24,64,64,64,88, + 230,129,14,24,64,64,64,88,230,129,14,24,64,64,64,88, + 230,129,14,24,64,64,64,88,230,129,14,24,64,64,64,88, + 230,129,14,24,64,64,64,88,230,129,14,24,64,64,64,88, + 230,129,14,24,64,64,64,88,230,129,14,24,64,64,64,88, + 230,129,14,24,64,64,64,88,230,129,14,24,64,64,64,88, + 230,129,14,24,64,64,64,88,230,129,14,24,64,64,64,88, + 230,206,14,24,64,64,64,88,230,190,14,24,64,64,64,88, + 230,190,14,24,64,64,64,88,230,190,14,24,64,64,64,88, + 230,173,15,173,205,11,16,16,16,20,20,20,20,20,20,20, + 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, + 20,20,237,20,251,237,20,20,237,20,20,237,237,20,20,226, + 194,19,194,181,194,106,181,181,181,194,181,181,106,106,181,181, + 181,106,106,77,194,181,194,77,181,77,181,194,194,106,77,194, + 194,194,194,194,194,156,194,66,194,66,77,194,77,194,194,77, + 121,66,66,66,194,194,66,107,66,194,194,77,66,194,66,66, + 194,194,66,121,194,228,156,66,66,66,228,228,107,107,107,107, + 228,107,107,107,66,107,107,156,107,156,107,107,107,104,113,28, + 28,190,127,88,42,42,42,62,243,190,127,88,42,42,42,62, + 243,190,127,88,42,42,42,62,243,190,127,88,42,42,42,62, + 243,190,127,88,42,42,42,62,243,190,127,88,42,42,42,62, + 243,190,127,88,42,42,42,62,243,190,127,88,42,42,42,62, + 243,190,127,88,42,42,42,62,243,190,127,88,42,42,42,62, + 243,190,127,88,42,42,42,62,243,190,127,88,42,42,42,62, + 243,190,127,88,42,42,42,62,243,190,127,88,42,42,42,62, + 243,129,127,88,42,42,42,62,243,129,127,88,42,42,42,62, + 243,129,127,88,42,42,42,62,243,190,127,88,42,42,42,62, + 243,173,173,9,35,11,20,16,16,16,20,20,20,20,20,20, + 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, + 20,20,20,20,20,20,20,20,20,20,20,20,251,20,20,16, + 19,194,194,181,194,181,194,181,181,194,181,106,194,181,181,181, + 194,181,181,181,181,77,181,181,77,181,77,106,106,194,194,181, + 194,194,194,194,194,194,194,194,194,194,156,66,156,194,66,107, + 66,194,194,194,66,66,194,194,194,121,107,156,194,121,194,121, + 66,66,66,66,66,66,66,66,107,107,66,228,228,107,228,228, + 107,228,107,107,104,107,107,228,156,228,107,104,107,184,198,28, + 28,191,115,58,58,58,244,244,244,191,115,58,58,58,244,244, + 244,191,115,58,58,58,244,244,244,191,115,58,58,58,244,244, + 244,191,115,58,58,58,244,244,244,191,115,58,58,58,244,244, + 244,191,115,58,58,58,244,244,244,191,115,58,58,58,244,244, + 244,191,115,58,58,58,244,244,244,191,115,58,58,58,244,244, + 244,191,115,58,58,58,244,244,244,191,115,58,58,58,244,244, + 244,190,115,58,244,58,196,202,244,191,115,58,58,58,115,196, + 196,244,202,58,58,58,244,196,244,190,115,58,115,58,58,244, + 244,191,115,58,58,244,115,244,196,244,115,58,58,58,196,142, + 244,15,173,9,205,11,16,16,20,16,20,16,16,20,20,20, + 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, + 20,20,20,20,20,20,237,20,20,20,20,20,20,20,16,226, + 219,19,194,181,19,194,181,181,194,181,181,181,181,194,181,181, + 181,181,194,194,181,77,181,181,194,181,181,194,181,181,194,194, + 181,194,194,194,194,194,194,194,194,194,194,66,194,194,194,194, + 66,66,194,194,156,66,66,107,66,194,66,107,66,66,107,194, + 66,121,66,107,66,66,228,228,228,228,228,228,228,228,156,228, + 156,104,228,107,104,104,104,104,104,104,107,104,104,73,113,115, + 28,190,190,129,129,129,137,129,244,190,190,129,129,129,137,129, + 244,190,190,129,129,129,137,129,244,190,190,129,129,129,137,129, + 244,190,190,129,129,129,137,129,244,190,190,129,129,129,137,129, + 244,190,190,129,129,129,137,129,244,190,190,129,129,129,137,129, + 244,190,190,129,129,129,137,129,244,190,190,129,129,129,137,129, + 244,190,190,129,129,129,137,129,244,190,58,129,137,129,137,129, + 196,190,58,129,137,240,137,137,196,190,135,129,129,191,133,129, + 244,190,58,129,129,191,137,129,196,190,58,129,133,129,129,129, + 196,190,244,137,137,191,133,129,240,190,58,129,129,240,129,129, + 240,173,173,9,154,11,16,16,16,16,16,20,16,16,20,20, + 20,20,20,20,20,20,20,20,20,20,20,20,237,20,20,20, + 20,237,237,20,237,20,20,237,20,20,20,20,237,251,20,16, + 19,194,19,19,194,19,181,181,194,181,181,194,181,181,181,194, + 181,181,181,194,181,19,181,194,181,181,194,181,181,194,181,194, + 194,194,181,194,194,194,194,194,66,194,194,194,194,66,66,66, + 156,194,66,66,66,194,194,66,194,66,194,66,66,194,66,66, + 66,66,107,66,107,228,66,228,228,228,228,228,104,104,228,104, + 104,228,104,104,228,184,228,228,104,228,104,104,104,184,198,28, + 115,58,135,129,129,240,137,133,28,58,135,129,129,240,137,133, + 28,58,135,129,129,240,137,133,28,58,135,129,129,240,137,133, + 28,58,135,129,129,240,137,133,28,58,135,129,129,240,137,133, + 28,58,135,129,129,240,137,133,28,58,135,129,129,240,137,133, + 28,58,135,129,129,240,137,133,28,58,135,129,129,240,137,133, + 28,58,135,129,129,240,137,137,244,191,244,137,129,240,137,137, + 244,190,244,129,137,191,129,137,244,203,58,129,129,191,129,129, + 240,190,244,129,133,191,133,129,244,190,244,129,129,129,129,151, + 244,190,240,137,129,191,129,129,240,190,240,137,129,190,129,129, + 240,15,15,9,205,164,16,16,16,16,20,16,20,16,20,20, + 16,20,20,20,20,20,20,20,20,20,20,20,20,16,20,20, + 20,20,20,237,20,20,237,20,237,237,237,20,20,20,16,20, + 219,194,194,194,181,194,181,194,181,181,194,181,181,194,181,181, + 181,194,181,19,181,194,181,181,194,181,181,194,19,194,181,194, + 181,194,181,194,219,194,156,219,194,66,194,107,156,194,219,66, + 107,156,156,107,107,107,194,107,107,66,194,107,107,121,107,156, + 107,107,107,107,107,228,156,228,228,228,228,228,228,104,184,104, + 184,184,184,184,104,184,104,184,104,184,184,30,104,73,187,202, + 28,191,244,129,129,129,129,129,240,191,244,129,129,129,129,129, + 240,191,244,129,129,129,129,129,240,191,244,129,129,129,129,129, + 240,191,244,129,129,129,129,129,240,191,244,129,129,129,129,129, + 240,191,244,129,129,129,129,129,240,191,244,129,129,129,129,129, + 240,191,244,129,129,129,129,129,240,191,244,129,129,129,129,129, + 240,191,244,129,129,129,129,133,240,190,244,129,129,129,129,133, + 240,190,58,129,137,240,129,133,240,190,244,129,137,190,129,133, + 244,203,244,133,129,129,129,137,240,190,58,129,129,240,129,137, + 240,190,244,137,129,240,129,151,58,191,244,133,129,191,151,151, + 58,173,173,9,6,11,16,16,16,16,16,16,16,16,16,16, + 20,16,20,20,20,20,20,20,20,20,20,20,20,20,20,20, + 20,20,20,20,20,20,20,20,20,20,237,20,20,237,20,20, + 19,19,19,194,194,19,19,181,194,181,181,181,181,181,194,181, + 194,181,181,194,181,181,181,181,181,181,194,181,181,181,219,181, + 219,19,219,181,194,219,194,194,219,219,156,194,219,156,194,219, + 219,219,107,194,107,121,107,107,194,156,107,156,107,107,156,107, + 156,156,184,156,156,107,156,156,104,156,104,228,184,184,184,184, + 184,184,184,184,184,73,73,104,239,104,104,104,104,73,198,15, + 115,58,240,129,129,85,129,151,240,58,240,129,129,85,129,151, + 240,58,240,129,129,85,129,151,240,58,240,129,129,85,129,151, + 240,58,240,129,129,85,129,151,240,58,240,129,129,85,129,151, + 240,58,240,129,129,85,129,151,240,58,240,129,129,85,129,151, + 240,58,240,129,129,85,129,151,240,58,240,129,129,85,129,151, + 240,58,240,129,129,85,129,129,244,190,240,129,129,85,129,129, + 28,190,244,137,137,129,129,129,240,190,135,133,129,129,129,129, + 135,190,244,129,129,240,133,129,244,190,58,129,129,129,133,129, + 28,58,240,137,129,129,129,129,244,58,244,137,133,129,129,129, + 240,173,173,9,65,164,16,16,16,16,20,20,16,16,20,20, + 16,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, + 20,20,20,20,237,20,20,20,20,20,20,20,20,20,20,16, + 194,194,194,194,194,194,19,194,181,194,194,106,77,194,181,194, + 181,77,77,194,194,194,194,181,194,181,219,194,194,181,219,194, + 194,181,219,19,219,219,19,219,194,194,219,194,219,219,219,194, + 194,194,219,219,219,156,219,156,156,219,156,219,219,219,219,219, + 219,219,219,156,219,156,156,156,30,156,30,30,30,107,104,30, + 184,104,184,104,184,30,184,184,239,184,184,239,239,73,130,28, + 28,240,196,240,240,28,240,191,196,240,196,240,240,28,240,191, + 196,240,196,240,240,28,240,191,196,240,196,240,240,28,240,191, + 196,240,196,240,240,28,240,191,196,240,196,240,240,28,240,191, + 196,240,196,240,240,28,240,191,196,240,196,240,240,28,240,191, + 196,240,196,240,240,28,240,191,196,240,196,240,240,28,240,191, + 196,240,196,240,240,28,240,240,202,240,202,240,240,28,240,240, + 196,112,112,112,129,202,240,240,196,240,202,28,129,202,240,190, + 202,240,28,112,240,28,240,240,202,240,112,112,135,28,112,240, + 196,240,28,112,129,202,240,240,244,240,28,112,240,28,240,240, + 196,173,173,9,35,164,16,16,16,16,16,16,20,16,16,16, + 20,16,20,20,20,20,20,20,20,20,20,20,20,20,20,20, + 20,20,237,20,20,237,20,20,20,20,237,237,20,20,20,16, + 228,194,219,194,194,194,194,219,19,194,194,194,19,194,194,194, + 219,19,19,194,194,219,194,194,194,219,194,194,219,194,194,19, + 219,219,194,194,181,194,219,181,219,19,194,219,194,156,219,219, + 219,19,219,219,156,219,219,219,219,219,219,219,219,156,219,219, + 156,19,219,219,30,219,30,30,156,30,30,156,156,30,30,30, + 30,30,45,30,30,104,30,30,104,104,104,104,104,73,187,115, + 115,190,200,207,207,207,207,182,124,190,200,207,207,207,207,182, + 124,190,200,207,207,207,207,182,124,190,200,207,207,207,207,182, + 124,190,200,207,207,207,207,182,124,190,200,207,207,207,207,182, + 124,190,200,207,207,207,207,182,124,190,200,207,207,207,207,182, + 124,190,200,207,207,207,207,182,124,190,200,207,207,207,207,182, + 124,190,200,207,207,207,207,182,124,151,200,207,207,207,207,182, + 124,190,200,207,207,207,207,182,124,190,200,207,207,207,207,182, + 124,151,200,207,207,207,207,182,124,190,200,207,207,207,207,182, + 124,190,200,207,207,207,207,182,124,129,200,207,207,207,207,182, + 124,15,15,173,205,11,16,16,16,16,16,16,16,20,20,16, + 20,20,16,20,16,20,20,20,20,20,20,20,20,20,20,20, + 20,20,20,20,20,20,20,20,237,20,20,20,20,20,20,20, + 228,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194, + 194,77,77,194,194,194,194,219,194,194,219,194,194,194,194,194, + 194,219,219,219,219,219,219,194,194,219,181,219,194,194,194,194, + 219,219,19,219,219,19,156,219,19,121,181,219,219,19,19,19, + 219,156,19,19,30,219,19,30,19,156,30,30,30,219,30,30, + 156,156,30,30,30,239,104,30,45,184,104,184,104,73,187,28, + 173,129,243,209,227,227,209,68,111,129,243,209,227,227,209,68, + 111,129,243,209,227,227,209,68,111,129,243,209,227,227,209,68, + 111,129,243,209,227,227,209,68,111,129,243,209,227,227,209,68, + 111,129,243,209,227,227,209,68,111,129,243,209,227,227,209,68, + 111,129,243,209,227,227,209,68,111,129,243,209,227,227,209,68, + 111,129,243,209,227,227,209,68,111,190,243,209,227,227,209,68, + 111,190,243,209,227,227,209,68,111,129,243,209,227,227,209,68, + 111,190,243,209,227,227,209,68,111,190,243,209,227,227,209,68, + 111,151,243,209,227,227,209,68,111,190,243,209,227,227,209,68, + 111,15,15,173,154,11,16,16,16,16,16,16,16,20,20,16, + 16,16,20,16,20,20,16,16,20,20,20,20,20,20,20,20, + 20,20,20,20,20,20,20,20,20,20,20,237,20,20,16,16, + 219,219,219,194,19,194,194,194,181,194,19,194,194,219,19,194, + 194,219,219,194,194,194,194,194,194,194,194,194,194,194,194,194, + 219,194,194,194,219,194,219,219,219,219,219,219,219,219,219,219, + 194,121,194,19,156,219,19,194,194,219,156,19,194,219,156,219, + 19,19,156,219,19,219,219,19,219,30,156,19,30,30,30,219, + 30,30,30,30,30,30,30,45,104,30,30,104,239,73,187,203, + 191,190,48,218,218,101,218,7,243,190,48,218,218,101,218,7, + 243,190,48,218,218,101,218,7,243,190,48,218,218,101,218,7, + 243,190,48,218,218,101,218,7,243,190,48,218,218,101,218,7, + 243,190,48,218,218,101,218,7,243,190,48,218,218,101,218,7, + 243,190,48,218,218,101,218,7,243,190,48,218,218,101,218,7, + 243,190,48,218,218,101,218,7,243,190,48,218,218,101,218,7, + 243,190,48,218,218,101,218,7,243,151,48,218,218,101,218,7, + 243,190,48,218,218,101,218,7,243,135,48,218,218,101,218,7, + 243,206,48,218,218,101,218,7,243,190,48,218,218,101,218,7, + 243,173,28,220,205,164,16,11,16,16,20,20,16,16,16,16, + 16,20,20,16,16,20,20,16,20,16,20,16,20,20,20,20, + 20,20,20,20,20,20,20,20,20,20,20,20,20,16,20,16, + 219,219,219,194,219,219,194,19,194,194,181,194,194,194,194,181, + 194,194,194,77,194,194,194,194,194,194,219,219,219,107,219,66, + 219,219,107,194,219,194,156,219,194,194,194,219,219,219,219,219, + 219,219,219,219,19,156,219,19,219,19,194,19,181,219,19,121, + 219,19,181,121,19,156,219,30,219,30,30,219,30,156,30,30, + 30,30,30,30,30,104,30,30,104,30,30,30,104,73,178,244, + 191,151,150,60,163,60,163,250,230,151,150,60,163,60,163,250, + 230,151,150,60,163,60,163,250,230,151,150,60,163,60,163,250, + 230,151,150,60,163,60,163,250,230,151,150,60,163,60,163,250, + 230,151,150,60,163,60,163,250,230,151,150,60,163,60,163,250, + 230,151,150,60,163,60,163,250,230,151,150,60,163,60,163,250, + 230,151,150,60,163,60,163,250,230,151,150,60,163,60,163,250, + 230,129,150,60,163,60,163,250,230,190,150,60,163,60,163,250, + 230,206,150,60,163,60,163,250,230,129,150,60,163,60,163,250, + 230,129,150,60,163,60,163,250,230,206,150,60,163,60,163,250, + 230,28,15,233,154,164,16,16,11,11,16,16,16,16,226,16, + 16,16,16,20,16,20,16,16,16,20,16,20,16,16,20,20, + 16,20,20,16,20,20,16,20,20,20,16,20,20,20,20,16, + 219,219,219,219,194,194,19,181,19,194,181,181,194,181,194,181, + 194,181,194,19,194,219,194,194,194,194,194,194,194,194,194,219, + 194,194,194,219,219,219,194,194,219,156,219,219,219,194,194,19, + 219,19,19,181,194,219,19,219,19,219,19,194,219,181,181,19, + 181,219,219,19,194,181,19,19,19,19,19,156,19,30,30,156, + 219,156,156,30,156,30,30,30,45,104,30,104,45,73,187,28, + 203,190,38,24,148,148,24,88,81,190,38,24,148,148,24,88, + 81,190,38,24,148,148,24,88,81,190,38,24,148,148,24,88, + 81,190,38,24,148,148,24,88,81,190,38,24,148,148,24,88, + 81,190,38,24,148,148,24,88,81,190,38,24,148,148,24,88, + 81,190,38,24,148,148,24,88,81,190,38,24,148,148,24,88, + 81,206,38,24,148,148,24,88,81,190,38,24,148,148,24,88, + 81,135,38,24,148,148,24,88,81,190,38,24,148,148,24,88, + 81,190,38,24,148,148,24,88,81,129,38,24,148,148,24,88, + 81,190,38,24,148,148,24,88,81,190,38,24,148,148,24,88, + 81,15,173,9,65,164,164,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,20,16,16, + 20,16,16,20,16,16,20,20,16,16,20,16,20,16,225,225, + 219,219,194,219,194,194,194,181,194,181,181,194,181,181,194,181, + 194,181,194,181,194,181,181,181,181,181,194,194,181,194,181,194, + 194,194,194,194,194,219,219,194,219,219,181,194,19,19,121,181, + 194,194,219,19,181,219,19,19,181,181,19,181,156,219,181,19, + 181,19,19,19,156,194,19,156,156,19,19,219,19,19,30,19, + 19,30,219,30,30,30,30,19,30,30,156,30,30,239,130,28, + 244,129,158,50,254,254,118,67,158,129,158,50,254,254,118,67, + 158,129,158,50,254,254,118,67,158,129,158,50,254,254,118,67, + 158,129,158,50,254,254,118,67,158,129,158,50,254,254,118,67, + 158,129,158,50,254,254,118,67,158,129,158,50,254,254,118,67, + 158,129,158,50,254,254,118,67,158,129,158,50,254,254,118,67, + 158,129,158,50,254,254,118,67,158,129,158,50,254,254,118,67, + 158,190,158,50,254,254,118,67,158,190,158,50,254,254,118,67, + 158,151,158,50,254,254,118,67,158,206,158,50,254,254,118,67, + 158,190,158,50,254,254,118,67,158,129,158,50,254,254,118,67, + 158,173,173,9,108,164,11,16,11,16,16,11,16,16,16,16, + 16,11,16,11,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,11, + 219,194,219,181,194,181,194,181,181,181,181,194,181,181,181,181, + 181,181,181,181,194,181,181,194,181,194,181,181,181,181,181,181, + 181,181,181,181,19,181,181,181,194,181,219,219,181,194,219,219, + 19,19,19,121,219,181,121,181,219,156,181,19,181,181,156,181, + 156,181,156,19,19,19,219,19,19,19,156,19,156,19,19,30, + 30,30,19,30,30,19,30,30,30,30,30,30,30,239,125,115, + 28,190,14,24,64,64,64,88,230,190,14,24,64,64,64,88, + 230,190,14,24,64,64,64,88,230,190,14,24,64,64,64,88, + 230,190,14,24,64,64,64,88,230,190,14,24,64,64,64,88, + 230,190,14,24,64,64,64,88,230,190,14,24,64,64,64,88, + 230,190,14,24,64,64,64,88,230,190,14,24,64,64,64,88, + 230,129,14,24,64,64,64,88,230,190,14,24,64,64,64,88, + 230,190,14,24,64,64,64,88,230,129,14,24,64,64,64,88, + 230,190,14,24,64,64,64,88,230,190,14,24,64,64,64,88, + 230,129,14,24,64,64,64,88,230,129,14,24,64,64,64,88, + 230,28,173,9,65,164,164,11,16,16,11,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,11,16,16,16,16,16,16,225,11,225, + 219,194,219,219,194,181,181,181,181,181,181,181,181,181,181,181, + 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181, + 181,181,181,181,181,181,19,181,181,181,181,19,19,181,181,181, + 194,181,19,181,219,19,219,19,19,219,19,19,19,181,19,19, + 19,19,19,19,19,19,19,156,30,30,19,19,156,19,19,19, + 30,19,30,19,30,30,30,30,30,30,30,30,30,149,178,28, + 203,190,127,88,42,42,42,62,243,190,127,88,42,42,42,62, + 243,190,127,88,42,42,42,62,243,190,127,88,42,42,42,62, + 243,190,127,88,42,42,42,62,243,190,127,88,42,42,42,62, + 243,190,127,88,42,42,42,62,243,190,127,88,42,42,42,62, + 243,190,127,88,42,42,42,62,243,190,127,88,42,42,42,62, + 243,190,127,88,42,42,42,62,243,190,127,88,42,42,42,62, + 243,190,127,88,42,42,42,62,243,190,127,88,42,42,42,62, + 243,190,127,88,42,42,42,62,243,129,127,88,42,42,42,62, + 243,190,127,88,42,42,42,62,243,190,127,88,42,42,42,62, + 243,28,191,173,35,164,16,164,16,11,16,225,11,225,16,11, + 16,11,16,11,225,16,225,11,16,16,16,16,16,16,16,11, + 16,16,16,16,16,16,16,16,11,11,11,16,11,11,11,11, + 219,219,194,181,194,194,194,181,194,181,181,181,181,181,181,181, + 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181, + 181,181,181,181,181,181,181,181,181,181,181,181,181,19,19,181, + 19,19,19,19,181,19,19,19,19,19,19,19,19,19,181,19, + 19,19,19,19,19,19,19,19,19,19,19,19,19,156,19,19, + 19,19,45,19,19,30,90,30,90,45,156,45,30,239,125,28, + 112,191,115,58,58,58,244,244,244,191,115,58,58,58,244,244, + 244,191,115,58,58,58,244,244,244,191,115,58,58,58,244,244, + 244,191,115,58,58,58,244,244,244,191,115,58,58,58,244,244, + 244,191,115,58,58,58,244,244,244,191,115,58,58,58,244,244, + 244,191,115,58,58,58,244,244,244,191,115,58,58,58,244,244, + 244,191,115,58,58,244,244,196,244,190,115,58,244,58,115,196, + 244,191,115,58,58,58,115,244,244,190,115,58,58,244,196,202, + 240,191,115,58,58,58,58,115,244,191,115,58,58,244,196,196, + 244,190,115,58,58,244,196,196,244,244,115,58,58,58,196,142, + 244,15,173,9,205,164,164,11,11,11,11,11,16,11,11,16, + 11,16,16,16,11,11,11,16,11,11,11,16,11,11,11,11, + 11,11,164,16,11,11,11,164,16,11,164,16,11,11,164,164, + 194,19,194,194,181,181,181,181,181,181,181,181,181,181,181,102, + 181,181,102,181,102,181,102,181,102,181,102,181,181,181,181,181, + 102,181,181,102,19,102,19,19,90,181,181,90,181,181,19,181, + 181,181,181,19,181,181,19,181,19,181,181,181,19,19,181,19, + 19,19,19,19,181,19,19,19,19,19,156,19,19,30,19,30, + 19,30,90,45,30,45,45,45,156,45,156,45,45,149,27,15, + 203,190,190,129,129,191,151,129,240,190,190,129,129,191,151,129, + 240,190,190,129,129,191,151,129,240,190,190,129,129,191,151,129, + 240,190,190,129,129,191,151,129,240,190,190,129,129,191,151,129, + 240,190,190,129,129,191,151,129,240,190,190,129,129,191,151,129, + 240,190,190,129,129,191,151,129,240,190,190,129,129,191,151,129, + 244,190,58,129,137,190,137,129,240,190,135,129,137,191,133,151, + 240,58,58,129,129,129,133,129,196,190,58,129,129,190,129,137, + 196,190,58,129,129,191,129,133,196,190,190,129,129,190,137,129, + 196,190,58,129,129,191,137,129,244,190,58,129,129,240,129,129, + 240,15,9,9,154,164,16,164,16,11,11,11,16,11,11,16, + 11,11,11,16,225,16,11,11,16,11,11,164,11,16,164,16, + 164,11,11,164,11,164,11,164,11,16,164,164,11,164,164,10, + 19,194,19,194,181,181,181,106,181,181,181,181,181,102,106,181, + 102,181,181,181,102,181,102,181,102,181,181,102,102,181,102,181, + 181,181,181,181,181,181,102,181,181,90,19,181,181,181,102,19, + 90,19,19,102,19,19,181,19,181,90,19,19,181,181,19,19, + 19,19,19,19,156,19,19,19,19,30,30,19,30,30,90,45, + 90,30,45,30,30,156,30,156,45,45,45,30,30,45,125,28, + 244,58,58,129,151,129,129,129,244,58,58,129,151,129,129,129, + 244,58,58,129,151,129,129,129,244,58,58,129,151,129,129,129, + 244,58,58,129,151,129,129,129,244,58,58,129,151,129,129,129, + 244,58,58,129,151,129,129,129,244,58,58,129,151,129,129,129, + 244,58,58,129,151,129,129,129,244,58,58,129,151,191,137,133, + 28,191,244,137,129,240,137,129,244,58,244,129,129,191,129,129, + 240,190,240,129,129,240,129,133,28,240,240,129,129,240,129,129, + 244,190,244,129,129,129,129,129,244,58,244,129,129,240,137,133, + 28,190,244,137,129,240,133,137,240,190,240,137,129,190,129,129, + 240,28,28,9,65,164,164,11,164,164,11,11,11,11,11,11, + 11,11,11,11,164,16,11,11,11,164,16,164,164,164,164,164, + 164,164,16,164,164,164,11,164,164,164,164,164,164,164,10,164, + 181,194,181,181,181,181,181,106,106,106,171,106,106,181,102,181, + 181,102,181,106,106,106,171,106,171,181,181,181,181,181,181,181, + 102,181,181,181,181,181,181,181,181,181,181,19,19,19,181,19, + 181,19,19,19,19,19,181,19,219,19,19,19,19,19,19,19, + 19,19,156,19,19,156,156,156,19,19,30,19,156,30,30,30, + 30,156,30,90,45,45,45,45,156,45,45,45,45,45,130,202, + 203,191,244,129,137,240,133,151,240,191,244,129,137,240,133,151, + 240,191,244,129,137,240,133,151,240,191,244,129,137,240,133,151, + 240,191,244,129,137,240,133,151,240,191,244,129,137,240,133,151, + 240,191,244,129,137,240,133,151,240,191,244,129,137,240,133,151, + 240,191,244,129,137,240,133,151,240,191,244,129,129,129,137,129, + 135,190,244,133,129,129,133,151,240,191,58,129,133,190,129,137, + 58,240,58,129,129,191,129,129,135,190,244,133,129,190,137,151, + 240,191,244,133,133,240,129,137,240,191,58,129,129,129,129,129, + 135,190,244,133,129,191,129,137,244,191,244,133,129,240,151,151, + 58,28,28,9,108,164,164,164,11,164,164,164,11,11,164,11, + 11,11,164,11,164,164,164,164,164,164,164,164,164,164,164,164, + 164,164,164,164,164,164,164,164,164,164,164,164,164,164,10,10, + 194,181,194,181,181,181,181,181,102,181,181,102,102,181,181,181, + 102,181,106,102,181,102,181,181,102,181,181,102,181,181,181,181, + 181,181,181,181,181,181,181,181,194,181,181,181,181,194,219,194, + 219,219,219,219,156,19,219,19,19,219,156,156,30,156,156,156, + 156,156,156,30,219,30,30,30,104,104,30,30,30,30,30,30, + 30,104,45,45,45,156,45,156,45,45,156,45,30,73,21,15, + 191,190,240,137,129,191,129,151,240,190,240,133,129,191,129,129, + 240,190,240,133,129,191,129,129,240,190,240,133,129,191,129,129, + 240,190,240,133,129,191,129,129,240,190,240,133,129,191,129,129, + 240,190,240,133,129,191,129,129,240,190,240,133,129,191,129,129, + 240,190,240,133,129,191,129,129,240,190,135,133,129,85,129,129, + 244,191,244,129,129,191,129,129,240,190,240,129,129,129,129,133, + 244,58,135,129,151,129,129,129,244,58,244,137,129,129,129,129, + 244,190,244,129,129,240,137,129,240,190,135,133,129,240,129,129, + 244,190,244,137,137,191,133,129,244,58,244,137,137,129,129,129, + 240,15,28,191,205,10,164,164,164,11,164,164,164,164,11,164, + 164,164,164,164,164,11,11,164,164,164,164,164,164,164,164,164, + 164,164,164,10,164,164,164,164,164,164,10,164,164,164,10,10, + 181,181,181,77,181,181,181,181,181,106,181,181,181,181,181,181, + 106,181,106,181,106,181,181,181,181,181,181,181,181,181,181,181, + 181,181,181,181,181,181,194,181,194,219,194,219,219,219,219,219, + 219,219,219,219,156,30,156,219,156,219,156,219,30,30,156,30, + 184,30,107,184,107,228,184,184,184,184,104,104,104,104,104,104, + 30,104,30,104,45,104,45,45,104,45,104,239,239,239,27,115, + 203,240,28,112,240,28,240,240,196,240,28,28,240,28,112,135, + 142,240,28,28,240,28,112,135,142,240,28,28,240,28,112,135, + 142,240,28,28,240,28,112,135,142,240,28,28,240,28,112,135, + 142,240,28,28,240,28,112,135,142,240,28,28,240,28,112,135, + 142,240,28,28,240,28,112,135,196,240,28,112,240,28,240,240, + 202,135,28,112,240,28,240,240,196,240,28,112,85,202,112,240, + 28,240,202,112,129,202,240,240,244,240,28,112,85,28,85,240, + 196,240,28,112,191,112,240,240,142,240,28,28,240,112,240,240, + 202,240,28,112,129,28,112,240,196,191,28,112,129,28,240,240, + 196,203,15,191,154,169,164,10,164,164,164,164,164,164,164,164, + 164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164, + 164,164,10,164,164,10,164,164,10,164,164,164,10,10,10,10, + 194,194,181,19,194,181,194,181,181,181,181,181,181,181,181,181, + 181,181,181,106,181,181,194,181,181,181,181,181,181,181,181,181, + 181,181,181,181,194,181,181,194,19,181,219,181,219,181,19,219, + 156,219,219,219,219,219,184,107,107,219,30,30,107,219,184,107, + 219,219,184,156,184,30,107,107,107,107,184,184,104,107,104,156, + 104,30,104,104,30,104,104,104,45,104,239,239,239,138,125,28, + 244,206,200,207,207,207,207,182,124,206,200,207,207,207,207,182, + 124,206,200,207,207,207,207,182,124,206,200,207,207,207,207,182, + 124,206,200,207,207,207,207,182,124,206,200,207,207,207,207,182, + 124,206,200,207,207,207,207,182,124,206,200,207,207,207,207,182, + 124,206,200,207,207,207,207,182,124,190,200,207,207,207,207,182, + 124,129,200,207,207,207,207,182,124,206,200,207,207,207,207,182, + 124,190,200,207,207,207,207,182,124,129,200,207,207,207,207,182, + 124,151,200,207,207,207,207,182,124,190,200,207,207,207,207,182, + 124,129,200,207,207,207,207,182,124,129,200,207,207,207,207,182, + 124,15,28,173,65,169,10,208,10,10,10,164,164,10,164,164, + 164,164,164,164,164,10,164,164,164,164,164,169,164,164,169,164, + 10,164,10,10,164,10,164,10,164,164,222,164,164,164,222,222, + 19,194,194,181,194,181,194,181,181,194,181,181,194,181,194,181, + 194,181,181,194,181,194,181,194,181,181,181,181,181,181,181,194, + 181,181,181,181,181,181,181,181,194,181,19,19,219,19,19,181, + 19,19,219,219,219,219,30,30,30,219,219,30,156,219,30,30, + 30,219,30,219,156,30,30,184,30,107,156,184,184,184,104,184, + 104,104,104,30,104,104,30,104,239,73,104,104,104,138,27,28, + 28,129,243,209,227,227,209,68,111,129,243,209,227,227,209,68, + 111,129,243,209,227,227,209,68,111,129,243,209,227,227,209,68, + 111,129,243,209,227,227,209,68,111,129,243,209,227,227,209,68, + 111,129,243,209,227,227,209,68,111,129,243,209,227,227,209,68, + 111,129,243,209,227,227,209,68,111,129,243,209,227,227,209,68, + 111,206,243,209,227,227,209,68,111,129,243,209,227,227,209,68, + 111,129,243,209,227,227,209,68,111,206,243,209,227,227,209,68, + 111,190,243,209,227,227,209,68,111,129,243,209,227,227,209,68, + 111,206,243,209,227,227,209,68,111,190,243,209,227,227,209,68, + 111,15,15,28,205,169,169,10,10,10,10,10,10,10,10,10, + 10,164,222,164,10,10,10,10,169,164,164,169,164,164,164,169, + 164,164,10,10,10,164,10,10,222,164,10,222,10,10,10,222, + 194,19,194,194,19,194,194,194,194,194,194,194,194,194,194,19, + 194,194,19,194,194,194,194,194,219,194,219,194,194,194,194,181, + 219,194,194,181,19,219,181,181,19,181,181,181,19,181,19,219, + 219,19,19,19,19,19,19,19,219,219,219,219,30,219,219,219, + 156,219,219,30,219,219,156,156,30,30,184,219,30,30,184,30, + 104,30,104,104,104,104,104,104,104,104,239,239,239,138,178,191, + 191,190,48,218,218,101,218,7,243,85,48,218,218,101,218,7, + 243,85,48,218,218,101,218,7,243,85,48,218,218,101,218,7, + 243,85,48,218,218,101,218,7,243,85,48,218,218,101,218,7, + 243,85,48,218,218,101,218,7,243,85,48,218,218,101,218,7, + 243,85,48,218,218,101,218,7,243,135,48,218,218,101,218,7, + 243,206,48,218,218,101,218,7,243,84,48,218,218,101,218,7, + 243,190,48,218,218,101,218,7,243,206,48,218,218,101,218,7, + 243,135,48,218,218,101,218,7,243,85,48,218,218,101,218,7, + 243,129,48,218,218,101,218,7,243,129,48,218,218,101,218,7, + 243,15,28,9,205,169,222,169,10,169,222,222,10,10,10,10, + 164,222,10,10,10,10,169,164,169,164,169,164,169,164,10,164, + 169,10,10,10,169,10,10,222,10,10,10,10,222,10,222,222, + 194,219,194,194,219,194,194,194,194,194,194,194,194,194,194,219, + 219,194,219,194,19,219,194,194,194,66,219,219,219,219,219,194, + 194,219,219,194,194,219,219,181,219,219,19,19,219,181,19,19, + 19,19,19,19,19,19,19,19,19,219,19,19,19,219,219,219, + 219,19,219,30,219,219,30,219,219,30,30,30,219,30,30,219, + 156,156,30,30,30,156,30,30,104,104,104,239,104,138,178,203, + 191,151,150,60,163,60,163,250,230,190,150,60,163,60,163,250, + 230,190,150,60,163,60,163,250,230,190,150,60,163,60,163,250, + 230,190,150,60,163,60,163,250,230,190,150,60,163,60,163,250, + 230,190,150,60,163,60,163,250,230,190,150,60,163,60,163,250, + 230,190,150,60,163,60,163,250,230,190,150,60,163,60,163,250, + 230,129,150,60,163,60,163,250,230,190,150,60,163,60,163,250, + 230,129,150,60,163,60,163,250,230,129,150,60,163,60,163,250, + 230,190,150,60,163,60,163,250,230,190,150,60,163,60,163,250, + 230,206,150,60,163,60,163,250,230,206,150,60,163,60,163,250, + 230,173,28,220,108,169,169,169,169,169,222,222,222,222,222,222, + 222,222,222,10,169,164,169,10,169,10,169,164,169,169,169,10, + 10,169,10,10,10,169,10,222,10,169,10,10,10,222,222,169, + 228,194,219,228,194,194,194,19,194,194,194,219,194,194,194,194, + 194,219,194,219,194,194,194,194,219,194,194,194,194,194,194,194, + 219,194,194,219,219,194,194,219,181,19,19,194,19,219,219,19, + 194,19,219,19,19,219,219,219,219,19,219,219,30,30,219,156, + 30,30,219,219,30,30,219,30,30,219,30,156,30,30,30,30, + 30,30,156,156,156,30,30,30,45,45,30,104,239,73,21,58, + 203,151,38,24,148,148,24,88,81,151,38,24,148,148,24,88, + 81,151,38,24,148,148,24,88,81,151,38,24,148,148,24,88, + 81,151,38,24,148,148,24,88,81,151,38,24,148,148,24,88, + 81,151,38,24,148,148,24,88,81,151,38,24,148,148,24,88, + 81,151,38,24,148,148,24,88,81,190,38,24,148,148,24,88, + 81,206,38,24,148,148,24,88,81,190,38,24,148,148,24,88, + 81,190,38,24,148,148,24,88,81,190,38,24,148,148,24,88, + 81,206,38,24,148,148,24,88,81,206,38,24,148,148,24,88, + 81,151,38,24,148,148,24,88,81,135,38,24,148,148,24,88, + 81,28,28,191,130,169,169,169,169,169,222,222,222,222,222,222, + 222,10,222,169,10,169,10,169,10,169,10,169,10,10,164,169, + 169,10,169,169,169,10,169,10,169,222,169,222,222,222,169,222, + 228,228,219,219,219,194,194,194,219,219,194,194,194,194,194,19, + 194,219,194,219,194,219,194,194,219,194,219,219,219,194,219,194, + 219,219,194,219,219,219,194,219,219,219,219,219,219,219,219,219, + 219,30,219,219,19,19,30,30,30,30,30,219,219,30,30,30, + 219,30,30,219,30,30,30,30,30,30,239,184,30,30,30,30, + 30,30,30,30,30,30,30,30,104,45,45,45,45,73,21,240, + 203,190,158,50,254,254,118,67,158,190,158,50,254,254,118,67, + 158,190,158,50,254,254,118,67,158,190,158,50,254,254,118,67, + 158,190,158,50,254,254,118,67,158,190,158,50,254,254,118,67, + 158,190,158,50,254,254,118,67,158,190,158,50,254,254,118,67, + 158,190,158,50,254,254,118,67,158,190,158,50,254,254,118,67, + 158,129,158,50,254,254,118,67,158,190,158,50,254,254,118,67, + 158,190,158,50,254,254,118,67,158,190,158,50,254,254,118,67, + 158,129,158,50,254,254,118,67,158,129,158,50,254,254,118,67, + 158,190,158,50,254,254,118,67,158,190,158,50,254,254,118,67, + 158,28,173,191,103,169,169,169,169,169,102,169,169,102,169,169, + 169,169,222,169,222,169,222,169,169,169,10,169,169,169,10,169, + 169,10,169,10,169,222,169,222,10,222,169,169,222,222,169,102, + 184,228,228,228,228,228,228,228,194,194,219,219,228,219,219,228, + 219,194,219,194,219,194,219,66,194,219,66,66,219,228,228,219, + 228,66,107,219,107,107,219,107,66,66,219,219,30,156,219,30, + 219,219,30,30,219,30,19,219,219,219,19,30,30,30,30,219, + 30,30,30,30,219,30,184,30,184,184,30,45,30,184,30,184, + 30,30,45,45,104,104,239,30,45,104,104,239,73,138,125,244, + 240,190,14,24,64,64,64,88,230,190,14,24,64,64,64,88, + 230,190,14,24,64,64,64,88,230,190,14,24,64,64,64,88, + 230,190,14,24,64,64,64,88,230,190,14,24,64,64,64,88, + 230,190,14,24,64,64,64,88,230,190,14,24,64,64,64,88, + 230,190,14,24,64,64,64,88,230,129,14,24,64,64,64,88, + 230,129,14,24,64,64,64,88,230,129,14,24,64,64,64,88, + 230,129,14,24,64,64,64,88,230,190,14,24,64,64,64,88, + 230,190,14,24,64,64,64,88,230,190,14,24,64,64,64,88, + 230,190,14,24,64,64,64,88,230,190,14,24,64,64,64,88, + 230,173,15,9,130,169,169,169,169,169,169,169,169,222,169,102, + 102,169,169,169,169,169,169,222,222,169,169,169,169,169,169,169, + 169,169,169,169,169,169,169,169,169,169,222,222,222,222,222,169, + 184,184,228,228,184,228,228,228,228,228,228,228,228,228,228,228, + 228,228,228,228,228,228,219,228,228,219,219,66,219,219,219,219, + 219,219,228,219,219,184,107,184,219,107,107,219,107,219,107,30, + 156,219,219,30,219,30,30,30,30,30,30,219,30,30,30,30, + 30,30,30,30,30,156,30,30,30,184,30,30,30,30,30,30, + 239,184,30,45,45,30,73,104,239,239,239,239,149,138,27,244, + 203,129,127,88,42,42,42,62,243,129,127,88,42,42,42,62, + 243,129,127,88,42,42,42,62,243,129,127,88,42,42,42,62, + 243,129,127,88,42,42,42,62,243,129,127,88,42,42,42,62, + 243,129,127,88,42,42,42,62,243,129,127,88,42,42,42,62, + 243,129,127,88,42,42,42,62,243,190,127,88,42,42,42,62, + 243,190,127,88,42,42,42,62,243,190,127,88,42,42,42,62, + 243,190,127,88,42,42,42,62,243,129,127,88,42,42,42,62, + 243,190,127,88,42,42,42,62,243,129,127,88,42,42,42,62, + 243,129,127,88,42,42,42,62,243,190,127,88,42,42,42,62, + 243,28,203,9,187,169,169,169,169,169,169,169,169,102,102,102, + 102,102,102,169,169,169,169,169,222,169,169,169,169,169,169,169, + 169,169,169,222,169,222,169,169,222,222,222,169,222,169,222,102, + 184,184,184,184,228,184,184,228,228,228,228,219,228,194,228,219, + 228,219,219,228,219,194,228,219,194,194,66,228,219,228,219,228, + 219,228,219,107,107,219,30,219,184,219,184,107,184,107,219,107, + 107,184,30,30,30,30,30,30,30,30,30,30,19,30,30,30, + 30,30,30,30,219,30,30,30,30,30,30,239,45,45,239,239, + 30,30,104,104,239,239,239,149,149,73,73,138,73,189,21,28, + 244,191,115,58,58,244,115,115,58,191,115,58,58,244,115,115, + 58,191,115,58,58,244,115,115,58,191,115,58,58,244,115,115, + 58,191,115,58,58,244,115,115,58,191,115,58,58,244,115,115, + 58,191,115,58,58,244,115,115,58,191,115,58,58,244,115,115, + 58,191,115,58,58,58,196,142,244,191,115,58,58,58,244,28, + 244,191,115,58,58,244,196,142,244,191,115,58,58,58,115,196, + 244,191,115,58,58,58,244,202,244,191,115,58,58,244,142,142, + 240,240,115,58,58,244,115,196,244,191,115,58,58,244,115,115, + 244,190,115,58,58,244,115,196,196,244,115,58,58,58,196,142, + 244,15,28,112,21,169,169,169,169,169,169,169,169,169,102,102, + 102,102,102,102,102,102,102,169,169,169,169,222,222,169,169,169, + 169,222,169,169,222,169,222,222,169,169,169,222,169,222,102,222, + 184,184,228,228,228,228,184,184,228,219,228,228,228,228,228,194, + 228,184,228,228,228,228,228,228,228,219,228,228,219,228,219,228, + 219,228,219,219,228,107,107,219,184,219,30,184,184,184,107,184, + 219,184,184,184,184,30,30,30,30,30,30,30,30,30,30,30, + 30,45,45,30,30,30,30,30,30,184,30,30,30,30,239,239, + 239,239,239,104,73,239,73,73,149,138,73,138,138,189,21,203, + 244,190,190,129,129,190,137,133,196,190,190,129,129,190,137,133, + 196,190,190,129,129,190,137,133,196,190,190,129,129,190,137,133, + 196,190,190,129,129,190,137,133,196,190,190,129,129,190,137,133, + 196,190,190,129,129,190,137,133,196,190,190,129,129,190,137,133, + 196,190,190,129,129,191,129,129,196,190,190,129,129,240,137,151, + 196,190,135,129,129,190,129,129,244,190,58,129,137,191,133,129, + 196,190,58,129,129,191,151,137,196,190,58,129,129,190,129,129, + 196,190,135,129,129,190,133,129,196,190,58,129,137,190,154,133, + 244,203,244,137,137,191,133,129,240,190,58,129,129,240,129,129, + 240,203,173,173,103,169,169,169,169,169,169,169,169,169,169,169, + 102,169,102,102,102,169,222,102,222,102,169,169,169,222,169,169, + 169,169,169,169,222,169,169,222,222,222,222,222,222,222,169,102, + 228,228,184,184,228,228,228,228,228,228,228,228,219,228,228,228, + 228,228,184,228,228,228,228,219,228,228,228,219,228,228,228,219, + 228,228,184,228,219,107,107,107,219,184,107,219,184,107,30,184, + 184,184,219,184,184,184,184,184,184,30,30,30,184,45,30,30, + 30,30,30,30,30,30,30,30,45,45,45,184,239,45,30,104, + 239,45,239,239,239,239,239,239,73,73,239,73,138,138,178,244, + 28,58,244,129,129,129,129,129,244,58,244,129,129,129,129,129, + 244,58,244,129,129,129,129,129,244,58,244,129,129,129,129,129, + 244,58,244,129,129,129,129,129,244,58,244,129,129,129,129,129, + 244,58,244,129,129,129,129,129,244,58,244,129,129,129,129,129, + 244,58,58,129,129,135,137,137,244,58,58,129,137,240,137,137, + 28,244,244,129,129,135,137,133,28,191,244,137,129,191,129,137, + 244,190,244,129,133,191,129,129,244,190,240,129,129,190,133,129, + 244,203,58,129,129,191,137,129,244,240,244,137,129,240,129,129, + 135,190,240,137,129,191,129,129,240,190,240,137,129,190,129,129, + 240,15,28,112,103,169,169,169,169,169,169,169,169,169,169,169, + 169,169,169,169,102,102,102,102,102,222,102,169,102,169,102,169, + 102,222,222,222,222,222,222,169,169,222,222,222,222,222,222,222, + 184,228,228,184,228,219,228,219,219,228,219,228,228,194,228,219, + 228,219,184,219,228,219,228,184,184,219,228,228,184,228,228,228, + 219,228,184,184,184,184,184,184,107,184,184,184,184,228,107,184, + 184,184,184,184,184,184,184,184,184,184,73,184,184,73,184,239, + 184,30,45,30,184,45,45,30,30,30,45,30,30,45,45,30, + 239,45,45,45,239,239,239,149,239,138,149,73,138,39,21,244, + 191,191,58,129,129,240,129,137,240,191,58,129,129,240,129,137, + 240,191,58,129,129,240,129,137,240,191,58,129,129,240,129,137, + 240,191,58,129,129,240,129,137,240,191,58,129,129,240,129,137, + 240,191,58,129,129,240,129,137,240,191,58,129,129,240,129,137, + 240,191,244,129,133,191,129,137,240,191,244,129,129,129,129,137, + 135,190,58,129,129,191,129,129,135,190,244,137,137,190,129,137, + 240,191,58,137,129,129,129,133,240,191,58,129,129,240,129,129, + 240,190,244,129,129,240,137,137,240,190,244,133,129,191,129,133, + 244,190,244,137,129,240,129,151,58,191,244,137,129,191,151,151, + 58,15,173,191,103,169,169,169,169,169,169,102,102,102,169,169, + 169,169,169,169,169,169,222,169,102,169,169,222,169,222,222,222, + 169,222,222,222,222,222,222,10,222,222,10,10,10,10,222,222, + 184,184,30,228,228,228,228,228,228,219,228,228,219,228,219,228, + 228,228,228,228,228,228,184,228,228,228,228,219,228,228,184,184, + 184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184, + 184,184,184,184,184,184,184,184,184,73,184,184,184,184,184,184, + 239,73,184,184,184,184,184,184,184,184,184,239,73,239,239,239, + 239,239,138,138,149,104,149,104,138,239,73,149,239,138,178,244, + 203,190,135,133,129,240,137,129,240,190,135,133,129,191,137,129, + 240,190,135,133,129,191,137,129,240,190,135,133,129,191,137,129, + 240,190,135,133,129,191,137,129,240,190,135,133,129,191,137,129, + 240,190,135,133,129,191,137,129,240,190,135,133,129,191,137,129, + 240,190,240,129,137,240,137,129,240,190,135,133,129,129,129,129, + 240,190,135,133,133,191,129,129,244,190,240,137,129,129,129,129, + 196,191,240,129,129,129,129,129,196,58,135,133,129,191,137,129, + 240,190,135,137,129,129,129,129,244,191,244,137,129,240,129,137, + 28,58,240,137,129,129,129,129,196,58,240,137,133,129,129,129, + 240,173,28,191,130,169,169,169,169,169,102,102,169,102,169,102, + 102,102,222,222,222,222,169,222,169,222,222,222,222,222,222,222, + 222,222,222,222,10,222,10,222,10,10,10,10,10,10,10,10, + 219,228,219,219,219,219,219,219,228,219,219,219,219,228,219,219, + 219,219,219,219,194,194,219,219,219,228,184,219,184,228,228,184, + 184,228,184,184,184,184,184,184,184,184,184,184,73,184,184,184, + 73,184,184,184,184,184,184,184,184,184,73,73,184,73,184,184, + 184,239,239,239,184,184,239,239,239,239,184,184,184,239,239,239, + 104,104,239,239,149,239,149,239,138,104,45,239,239,149,21,244, + 190,240,28,28,191,112,240,240,142,240,28,28,240,112,240,240, + 142,240,28,28,240,112,240,240,142,240,28,28,240,112,240,240, + 142,240,28,28,240,112,240,240,142,240,28,28,240,112,240,240, + 142,240,28,28,240,112,240,240,142,240,28,28,240,112,240,240, + 196,240,202,112,129,112,240,240,196,240,28,112,240,28,85,240, + 202,112,28,28,191,112,240,240,244,240,28,112,85,28,85,240, + 244,135,202,240,240,202,240,240,244,112,28,28,129,244,112,135, + 196,240,28,112,85,28,85,240,244,240,28,112,85,240,240,240, + 196,240,28,112,129,202,240,240,244,240,28,112,240,28,240,240, + 196,28,28,191,103,169,169,169,169,169,102,102,169,102,222,169, + 222,222,102,102,222,222,222,222,222,222,222,10,222,222,222,10, + 10,10,10,10,10,10,10,10,10,10,10,10,10,164,10,10, + 184,184,219,219,219,219,219,219,219,219,219,219,219,19,194,194, + 219,219,30,219,219,219,219,219,219,219,219,219,219,30,30,228, + 228,184,184,184,184,184,184,73,184,184,184,184,184,184,184,184, + 184,73,184,184,184,184,73,73,73,73,184,184,73,184,73,184, + 184,184,184,184,184,30,184,184,184,184,30,45,45,104,30,104, + 45,45,30,30,104,45,104,45,45,149,149,149,45,39,178,244, + 203,190,200,207,207,207,207,182,124,190,200,207,207,207,207,182, + 124,190,200,207,207,207,207,182,124,190,200,207,207,207,207,182, + 124,190,200,207,207,207,207,182,124,190,200,207,207,207,207,182, + 124,190,200,207,207,207,207,182,124,190,200,207,207,207,207,182, + 124,206,200,207,207,207,207,182,124,190,200,207,207,207,207,182, + 124,190,200,207,207,207,207,182,124,190,200,207,207,207,207,182, + 124,206,200,207,207,207,207,182,124,190,200,207,207,207,207,182, + 124,206,200,207,207,207,207,182,124,151,200,207,207,207,207,182, + 124,190,200,207,207,207,207,182,124,190,200,207,207,207,207,182, + 124,15,28,112,103,169,169,169,169,102,169,222,222,222,222,222, + 222,222,222,222,222,10,222,10,222,10,10,10,10,10,10,10, + 10,164,164,10,164,10,164,10,164,164,164,164,164,164,164,164, + 184,30,30,30,219,19,219,194,19,219,219,219,219,30,30,19, + 219,219,219,30,30,184,30,184,249,228,184,184,184,184,249,184, + 184,184,184,184,184,184,184,184,184,184,73,184,73,184,73,184, + 184,239,73,239,239,30,30,30,30,45,30,30,30,30,45,45, + 184,45,30,45,239,45,45,45,45,45,30,30,45,45,45,30, + 30,45,45,45,45,45,45,45,45,45,104,149,239,149,21,240, + 244,129,243,209,227,227,209,68,111,129,243,209,227,227,209,68, + 111,129,243,209,227,227,209,68,111,129,243,209,227,227,209,68, + 111,129,243,209,227,227,209,68,111,129,243,209,227,227,209,68, + 111,129,243,209,227,227,209,68,111,129,243,209,227,227,209,68, + 111,129,243,209,227,227,209,68,111,129,243,209,227,227,209,68, + 111,129,243,209,227,227,209,68,111,129,243,209,227,227,209,68, + 111,129,243,209,227,227,209,68,111,129,243,209,227,227,209,68, + 111,129,243,209,227,227,209,68,111,190,243,209,227,227,209,68, + 111,151,243,209,227,227,209,68,111,129,243,209,227,227,209,68, + 111,15,15,202,103,169,169,169,169,222,102,169,222,222,10,222, + 222,10,10,222,222,10,10,10,10,10,10,164,164,164,164,164, + 10,10,164,164,164,164,164,164,164,164,164,164,164,164,164,164, + 184,30,19,219,30,19,19,19,219,219,30,30,30,19,219,219, + 19,219,30,219,30,30,184,30,30,30,239,184,184,184,184,184, + 249,184,184,241,184,241,184,73,73,73,184,184,184,184,184,73, + 73,184,184,184,184,73,73,73,73,184,73,239,73,239,184,184, + 239,30,239,30,30,30,45,30,30,30,45,45,30,45,45,45, + 45,45,45,45,45,149,45,45,104,45,149,149,149,149,178,190, + 191,85,48,218,218,101,218,7,243,85,48,218,218,101,218,7, + 243,85,48,218,218,101,218,7,243,85,48,218,218,101,218,7, + 243,85,48,218,218,101,218,7,243,85,48,218,218,101,218,7, + 243,85,48,218,218,101,218,7,243,85,48,218,218,101,218,7, + 243,190,48,218,218,101,218,7,243,190,48,218,218,101,218,7, + 243,129,48,218,218,101,218,7,243,206,48,218,218,101,218,7, + 243,190,48,218,218,101,218,7,243,129,48,218,218,101,218,7, + 243,206,48,218,218,101,218,7,243,190,48,218,218,101,218,7, + 243,206,48,218,218,101,218,7,243,206,48,218,218,101,218,7, + 243,28,28,9,130,169,102,169,222,222,10,10,10,222,222,10, + 10,10,10,10,164,10,10,164,164,164,164,164,164,164,164,164, + 11,11,164,164,11,164,164,164,164,164,11,11,11,11,164,164, + 184,30,30,30,219,45,30,19,30,219,30,249,45,30,30,30, + 30,30,45,30,30,45,30,30,30,219,30,184,30,30,30,184, + 249,184,184,184,184,241,184,184,184,184,241,184,73,73,184,184, + 73,73,73,73,73,73,73,73,73,73,73,239,239,73,149,239, + 189,73,138,189,189,73,138,138,138,73,73,239,73,239,138,138, + 73,239,104,104,149,149,149,149,149,45,45,45,149,39,21,244, + 191,190,150,60,163,60,163,250,230,190,150,60,163,60,163,250, + 230,190,150,60,163,60,163,250,230,190,150,60,163,60,163,250, + 230,190,150,60,163,60,163,250,230,190,150,60,163,60,163,250, + 230,190,150,60,163,60,163,250,230,190,150,60,163,60,163,250, + 230,190,150,60,163,60,163,250,230,190,150,60,163,60,163,250, + 230,190,150,60,163,60,163,250,230,129,150,60,163,60,163,250, + 230,206,150,60,163,60,163,250,230,190,150,60,163,60,163,250, + 230,129,150,60,163,60,163,250,230,151,150,60,163,60,163,250, + 230,129,150,60,163,60,163,250,230,129,150,60,163,60,163,250, + 230,28,112,9,103,169,222,10,222,222,222,10,10,10,10,10, + 10,10,136,10,164,164,10,10,10,164,164,164,164,164,164,164, + 164,11,164,164,11,11,16,11,16,164,164,11,11,11,11,11, + 184,30,30,219,30,30,249,30,219,30,30,45,249,249,30,30, + 30,30,45,249,249,45,30,30,30,45,45,30,30,30,30,219, + 184,184,249,184,249,184,184,73,73,73,184,184,184,184,73,73, + 73,239,73,73,184,73,239,73,239,73,239,73,73,239,73,138, + 239,149,73,239,239,239,73,73,73,239,239,138,239,239,239,239, + 239,149,149,149,104,149,104,149,104,149,149,149,149,39,21,244, + 244,151,38,24,148,148,24,88,81,151,38,24,148,148,24,88, + 81,151,38,24,148,148,24,88,81,151,38,24,148,148,24,88, + 81,151,38,24,148,148,24,88,81,151,38,24,148,148,24,88, + 81,151,38,24,148,148,24,88,81,190,38,24,148,148,24,88, + 81,190,38,24,148,148,24,88,81,190,38,24,148,148,24,88, + 81,190,38,24,148,148,24,88,81,135,38,24,148,148,24,88, + 81,190,38,24,148,148,24,88,81,190,38,24,148,148,24,88, + 81,135,38,24,148,148,24,88,81,190,38,24,148,148,24,88, + 81,190,38,24,148,148,24,88,81,190,38,24,148,148,24,88, + 81,115,203,191,103,102,222,222,10,10,10,10,10,136,10,53, + 136,164,10,164,10,10,164,164,164,164,164,11,11,11,11,164, + 164,164,11,11,164,16,11,11,11,16,16,11,11,11,164,164, + 184,30,45,30,30,30,45,18,45,45,45,45,249,223,30,45, + 30,184,249,18,45,249,30,45,45,249,45,30,30,30,30,30, + 239,184,239,184,45,239,239,45,30,45,239,239,45,45,45,30, + 239,30,239,239,184,184,45,239,239,239,239,184,239,239,239,239, + 239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,149, + 239,149,149,149,104,149,104,149,104,104,149,45,45,149,21,244, + 244,190,158,50,254,254,118,67,158,190,158,50,254,254,118,67, + 158,190,158,50,254,254,118,67,158,190,158,50,254,254,118,67, + 158,190,158,50,254,254,118,67,158,190,158,50,254,254,118,67, + 158,190,158,50,254,254,118,67,158,151,158,50,254,254,118,67, + 158,190,158,50,254,254,118,67,158,190,158,50,254,254,118,67, + 158,190,158,50,254,254,118,67,158,190,158,50,254,254,118,67, + 158,129,158,50,254,254,118,67,158,190,158,50,254,254,118,67, + 158,190,158,50,254,254,118,67,158,190,158,50,254,254,118,67, + 158,190,158,50,254,254,118,67,158,190,158,50,254,254,118,67, + 158,203,191,191,187,102,222,169,169,169,10,169,10,136,10,10, + 164,164,10,164,164,164,164,164,164,164,164,164,164,164,11,11, + 11,11,11,11,164,11,11,11,11,11,11,16,16,16,11,11, + 184,249,30,45,30,30,30,18,223,45,45,249,18,116,18,45, + 249,249,18,145,249,45,45,45,249,249,249,45,30,30,30,30, + 30,45,30,45,30,30,30,30,45,30,30,30,30,30,30,45, + 30,239,30,45,45,45,30,45,45,30,45,45,45,30,45,239, + 239,45,239,239,45,45,45,45,239,149,239,149,149,149,149,104, + 45,45,45,45,149,149,149,149,149,149,149,149,149,18,21,244, + 240,190,14,24,64,64,64,88,230,190,14,24,64,64,64,88, + 230,190,14,24,64,64,64,88,230,190,14,24,64,64,64,88, + 230,190,14,24,64,64,64,88,230,190,14,24,64,64,64,88, + 230,190,14,24,64,64,64,88,230,190,14,24,64,64,64,88, + 230,190,14,24,64,64,64,88,230,129,14,24,64,64,64,88, + 230,190,14,24,64,64,64,88,230,129,14,24,64,64,64,88, + 230,190,14,24,64,64,64,88,230,190,14,24,64,64,64,88, + 230,129,14,24,64,64,64,88,230,190,14,24,64,64,64,88, + 230,190,14,24,64,64,64,88,230,129,14,24,64,64,64,88, + 230,28,28,28,103,102,10,10,10,10,10,10,10,10,10,10, + 10,164,164,164,164,164,164,11,164,11,164,11,11,11,11,11, + 11,11,16,16,16,11,11,11,11,16,11,164,16,11,11,11, + 184,239,30,249,30,45,30,45,223,145,249,249,18,82,223,18, + 249,18,116,145,249,249,249,249,223,249,249,45,45,45,45,45, + 30,45,30,45,45,45,45,45,45,45,45,239,239,45,30,45, + 30,45,30,45,45,239,239,30,239,30,45,45,45,184,45,30, + 45,45,45,45,45,45,45,45,45,45,45,45,45,45,149,45, + 239,45,45,45,45,45,45,149,45,45,104,149,45,39,21,244, + 240,129,127,88,42,42,42,62,243,129,127,88,42,42,42,62, + 243,129,127,88,42,42,42,62,243,129,127,88,42,42,42,62, + 243,129,127,88,42,42,42,62,243,129,127,88,42,42,42,62, + 243,129,127,88,42,42,42,62,243,190,127,88,42,42,42,62, + 243,129,127,88,42,42,42,62,243,190,127,88,42,42,42,62, + 243,129,127,88,42,42,42,62,243,190,127,88,42,42,42,62, + 243,129,127,88,42,42,42,62,243,129,127,88,42,42,42,62, + 243,190,127,88,42,42,42,62,243,129,127,88,42,42,42,62, + 243,129,127,88,42,42,42,62,243,190,127,88,42,42,42,62, + 243,28,244,191,187,222,222,10,10,169,10,164,10,164,164,164, + 10,164,164,164,164,164,164,11,164,11,164,11,11,11,11,11, + 11,164,164,16,164,16,11,11,16,11,16,16,11,16,11,11, + 184,45,249,30,249,30,249,249,249,82,145,18,18,34,223,82, + 223,82,223,116,249,18,18,116,145,18,45,249,45,45,45,30, + 45,45,45,45,45,45,45,30,45,45,30,30,30,30,239,30, + 45,45,45,30,30,45,30,45,45,45,45,30,45,45,30,45, + 30,30,30,239,239,45,239,45,239,45,239,239,45,45,45,149, + 149,104,149,45,45,149,104,45,149,45,149,149,149,149,79,244, + 203,203,115,58,58,58,58,115,196,244,115,58,58,58,58,115, + 196,244,115,58,58,58,58,115,196,244,115,58,58,58,58,115, + 196,244,115,58,58,58,58,115,196,244,115,58,58,58,58,115, + 196,244,115,58,58,58,115,196,240,191,115,58,58,58,196,142, + 196,190,115,58,58,244,142,142,196,190,115,58,58,58,58,244, + 244,135,115,58,58,58,58,115,58,135,115,58,244,58,202,244, + 244,240,115,58,58,58,244,244,244,203,115,58,58,58,244,196, + 244,191,115,58,244,244,244,196,244,190,115,58,58,58,58,244, + 244,190,115,58,58,58,196,202,196,244,115,58,58,58,196,142, + 244,28,191,28,130,102,222,222,10,10,136,10,164,164,164,164, + 164,164,164,164,164,164,164,164,164,164,11,164,11,11,11,11, + 11,11,11,164,16,11,16,11,16,164,16,16,16,11,11,11, + 249,239,249,249,249,249,45,249,18,223,109,116,18,109,116,145, + 109,109,223,109,249,223,116,34,223,249,249,184,184,45,249,45, + 45,249,45,45,45,45,45,45,239,239,239,239,239,239,239,239, + 239,239,239,239,239,239,239,239,239,239,73,239,239,239,239,138, + 149,149,239,239,239,239,149,239,239,239,239,104,149,149,104,45, + 149,104,149,104,149,149,149,104,149,104,149,149,149,138,21,58, + 190,190,135,129,129,240,129,133,244,190,190,129,129,240,129,133, + 244,190,190,129,129,240,129,133,244,190,190,129,129,240,129,133, + 244,190,190,129,129,240,129,133,244,190,190,129,129,240,129,133, + 244,190,190,129,129,191,133,129,196,190,135,129,129,240,137,129, + 244,190,58,129,129,190,129,129,196,190,58,129,129,240,129,129, + 196,191,58,129,129,240,129,133,196,191,135,129,129,129,137,129, + 244,190,58,129,129,240,151,129,196,190,135,129,129,191,137,129, + 244,190,135,129,129,190,151,129,244,58,58,129,129,129,129,129, + 244,58,58,129,129,191,151,137,244,190,58,129,129,240,129,129, + 240,28,203,191,187,222,208,10,169,10,136,136,10,136,10,164, + 164,164,164,164,164,164,164,164,164,164,11,164,164,11,11,11, + 16,11,11,16,11,16,11,16,16,16,11,11,16,16,16,11, + 249,249,249,45,249,223,223,18,18,223,116,148,82,143,82,82, + 148,109,145,109,145,116,143,116,175,249,249,249,249,239,239,45, + 249,45,249,249,239,239,239,239,239,239,239,184,249,239,249,239, + 239,239,239,73,239,239,249,73,249,73,249,73,249,138,138,73, + 73,73,239,73,138,149,73,73,138,138,138,149,73,73,138,138, + 149,149,138,149,138,138,138,138,138,149,239,149,239,39,21,244, + 190,58,58,129,129,129,129,129,240,58,58,129,129,129,129,129, + 240,58,58,129,129,129,129,129,240,58,58,129,129,129,129,129, + 240,58,58,129,129,129,129,129,240,58,58,129,129,129,129,129, + 240,58,244,129,129,191,137,129,244,203,58,129,129,191,129,151, + 244,190,244,129,129,190,129,133,28,190,244,129,137,129,129,151, + 58,190,244,137,137,129,129,137,244,58,244,151,129,240,133,129, + 244,190,244,129,129,129,129,129,135,244,58,129,151,240,137,137, + 244,203,58,137,129,129,129,151,240,190,244,133,129,129,129,151, + 240,190,240,129,129,191,129,137,240,190,240,137,129,190,129,129, + 240,115,244,28,125,102,222,10,10,10,10,10,164,10,164,136, + 164,164,164,164,11,164,164,11,11,11,11,11,11,11,11,16, + 11,16,11,11,11,11,16,11,11,16,16,16,16,16,16,16, + 249,239,249,45,249,249,18,116,34,82,223,34,64,64,143,64, + 109,109,24,143,109,148,109,116,223,18,249,249,249,249,249,45, + 45,239,45,239,239,239,239,239,239,239,239,239,239,239,249,73, + 239,249,249,239,249,73,249,239,249,239,249,239,73,149,138,149, + 138,138,138,73,73,138,138,138,73,239,138,138,138,149,138,138, + 138,138,138,104,138,189,138,138,138,138,104,39,149,39,21,202, + 190,191,244,129,137,240,129,133,244,191,244,129,137,240,129,133, + 244,191,244,129,137,240,129,133,244,191,244,129,137,240,129,133, + 244,191,244,129,137,240,129,133,244,191,244,129,137,240,129,133, + 244,191,58,129,133,240,137,129,240,190,244,129,133,190,129,137, + 240,190,244,133,137,240,137,129,135,190,58,129,133,240,137,137, + 240,191,244,129,137,240,129,137,240,191,244,137,129,191,129,133, + 240,191,58,129,129,240,137,133,244,190,244,129,137,129,129,133, + 240,190,244,129,129,240,129,137,244,191,244,129,129,240,129,137, + 244,191,244,133,151,240,129,133,244,191,244,133,129,240,151,151, + 58,203,203,28,187,222,10,10,10,10,164,164,164,11,164,136, + 164,164,164,164,11,11,11,11,11,11,11,11,11,225,11,11, + 11,16,11,16,16,16,11,16,16,16,16,16,16,16,225,225, + 249,249,249,249,45,249,18,18,223,82,148,148,148,64,160,148, + 143,109,148,64,64,64,34,82,109,82,145,18,249,45,45,239, + 239,239,239,239,239,239,239,45,249,45,45,239,239,239,45,45, + 249,45,45,239,45,45,45,239,45,249,239,249,149,73,239,73, + 239,73,239,149,149,149,149,73,149,138,73,149,149,138,138,138, + 138,138,138,138,138,138,138,138,138,138,138,149,149,39,79,115, + 244,190,135,137,129,191,129,129,240,190,135,133,129,191,129,129, + 240,190,135,133,129,191,129,129,240,190,135,133,129,191,129,129, + 240,190,135,133,129,191,129,129,240,190,135,133,129,191,129,129, + 240,190,240,129,129,129,133,129,240,190,240,129,129,129,133,129, + 28,190,244,129,137,129,129,129,196,190,240,129,129,129,129,129, + 196,190,240,133,129,240,137,129,240,190,240,129,129,191,129,129, + 244,190,135,133,129,129,129,129,240,190,240,133,129,112,129,129, + 240,190,240,133,129,129,133,129,244,190,244,129,129,129,133,129, + 244,58,244,137,137,191,129,129,244,58,244,137,137,129,129,129, + 240,244,28,28,187,102,208,10,136,164,10,136,11,136,164,164, + 11,11,11,11,164,11,164,11,11,11,11,11,11,11,11,225, + 16,16,16,16,16,11,16,225,16,16,225,20,126,16,16,16, + 249,249,249,249,249,249,18,223,223,223,171,34,160,41,41,42, + 209,120,160,41,41,148,254,143,82,145,249,18,249,239,45,45, + 45,239,45,45,239,239,239,45,239,239,45,45,45,239,239,45, + 239,239,249,239,239,239,239,239,45,149,45,45,149,149,149,149, + 149,149,45,239,239,149,149,149,149,149,73,239,239,239,239,149, + 104,138,138,138,104,39,149,138,149,149,138,149,149,39,21,115, + 240,240,28,112,240,240,240,190,196,240,28,28,191,112,240,190, + 196,240,28,28,191,112,240,190,196,240,28,28,191,112,240,190, + 196,240,28,28,191,112,240,190,196,240,28,28,191,112,240,190, + 196,240,244,112,85,28,240,240,196,240,244,112,85,28,240,240, + 196,240,28,112,129,202,240,240,202,240,28,112,240,28,85,240, + 196,240,28,28,240,112,240,240,196,240,28,240,85,244,240,240, + 196,240,28,28,240,28,240,240,196,240,28,28,240,112,240,240, + 142,240,28,244,240,28,112,129,196,240,112,112,240,28,112,129, + 196,191,28,112,129,112,240,240,244,191,28,112,129,28,240,240, + 196,244,244,112,187,169,10,10,136,164,10,164,164,164,164,164, + 11,11,11,11,11,225,11,11,11,225,225,16,16,16,16,16, + 16,225,16,16,20,20,16,16,16,20,225,20,126,20,16,16, + 249,249,249,249,249,18,18,145,34,161,118,250,24,160,41,42, + 12,62,62,41,41,42,143,95,114,75,114,87,249,45,239,30, + 184,30,239,239,45,45,45,239,45,45,45,239,45,45,45,239, + 45,45,45,45,45,239,45,45,239,45,149,149,45,45,45,45, + 45,45,149,149,149,239,149,239,239,45,149,149,149,149,149,149, + 149,149,149,149,149,149,149,149,138,138,239,149,149,149,21,202, + 244,190,200,207,207,207,207,182,124,190,200,207,207,207,207,182, + 124,190,200,207,207,207,207,182,124,190,200,207,207,207,207,182, + 124,190,200,207,207,207,207,182,124,190,200,207,207,207,207,182, + 124,190,200,207,207,207,207,182,124,190,200,207,207,207,207,182, + 124,129,200,207,207,207,207,182,124,206,200,207,207,207,207,182, + 124,129,200,207,207,207,207,182,124,206,200,207,207,207,207,182, + 124,190,200,207,207,207,207,182,124,206,200,207,207,207,207,182, + 124,206,200,207,207,207,207,182,124,206,200,207,207,207,207,182, + 124,129,200,207,207,207,207,182,124,129,200,207,207,207,207,182, + 124,203,28,28,187,222,208,136,136,136,11,164,164,11,11,11, + 87,11,11,11,11,11,93,225,225,225,225,225,11,16,225,16, + 16,225,16,16,225,225,20,16,20,20,20,20,20,226,126,225, + 18,18,18,223,223,116,82,82,82,116,34,159,74,211,110,110, + 68,23,250,62,110,62,186,230,71,59,13,233,232,239,239,45, + 45,45,45,45,30,45,45,45,45,45,30,30,45,45,45,45, + 45,45,45,239,45,239,239,45,45,45,45,149,149,149,149,149, + 149,45,45,239,239,45,149,149,149,45,239,239,149,149,149,149, + 149,149,149,149,104,149,149,149,149,149,104,149,149,39,21,202, + 244,129,243,209,227,227,209,68,111,129,243,209,227,227,209,68, + 111,129,243,209,227,227,209,68,111,129,243,209,227,227,209,68, + 111,129,243,209,227,227,209,68,111,129,243,209,227,227,209,68, + 111,129,243,209,227,227,209,68,111,129,243,209,227,227,209,68, + 111,206,243,209,227,227,209,68,111,85,243,209,227,227,209,68, + 111,206,243,209,227,227,209,68,111,129,243,209,227,227,209,68, + 111,129,243,209,227,227,209,68,111,129,243,209,227,227,209,68, + 111,129,243,209,227,227,209,68,111,190,243,209,227,227,209,68, + 111,190,243,209,227,227,209,68,111,190,243,209,227,227,209,68, + 111,15,15,202,187,222,10,10,136,136,11,11,11,11,11,11, + 11,11,93,11,225,11,225,225,11,11,11,16,16,225,16,225, + 251,16,225,20,20,225,20,126,225,126,225,126,16,16,226,225, + 18,18,18,18,18,18,18,223,145,116,82,109,163,243,211,32, + 64,143,227,71,147,150,7,157,105,72,231,231,80,171,249,239, + 239,30,30,45,45,30,30,45,45,30,45,239,30,45,30,30, + 30,30,30,45,30,45,45,30,184,45,45,45,45,45,45,45, + 45,45,239,45,45,239,45,45,45,149,149,149,45,149,45,149, + 149,45,45,149,149,149,104,45,45,149,149,149,149,149,21,58, + 190,206,48,218,218,101,218,7,243,85,48,218,218,101,218,7, + 243,85,48,218,218,101,218,7,243,85,48,218,218,101,218,7, + 243,85,48,218,218,101,218,7,243,85,48,218,218,101,218,7, + 243,84,48,218,218,101,218,7,243,84,48,218,218,101,218,7, + 243,190,48,218,218,101,218,7,243,190,48,218,218,101,218,7, + 243,190,48,218,218,101,218,7,243,190,48,218,218,101,218,7, + 243,129,48,218,218,101,218,7,243,129,48,218,218,101,218,7, + 243,129,48,218,218,101,218,7,243,190,48,218,218,101,218,7, + 243,190,48,218,218,101,218,7,243,129,48,218,218,101,218,7, + 243,28,202,191,125,10,136,11,164,136,164,87,11,11,11,11, + 11,11,11,225,225,225,225,16,225,16,16,225,16,225,16,16, + 11,225,20,225,225,126,20,225,20,20,126,16,126,226,225,225, + 18,18,18,18,18,18,223,18,223,223,145,109,34,82,148,82, + 161,163,186,52,168,22,243,150,183,47,95,189,116,223,18,249, + 45,239,184,45,239,45,30,30,239,30,30,45,30,45,45,239, + 239,239,30,45,30,30,45,45,30,45,45,45,45,45,45,45, + 45,45,45,45,45,239,239,45,45,45,45,45,45,149,45,45, + 149,45,45,45,45,149,149,45,45,45,45,45,149,138,21,244, + 240,129,150,60,163,60,163,250,230,190,150,60,163,60,163,250, + 230,190,150,60,163,60,163,250,230,190,150,60,163,60,163,250, + 230,190,150,60,163,60,163,250,230,190,150,60,163,60,163,250, + 230,190,150,60,163,60,163,250,230,190,150,60,163,60,163,250, + 230,206,150,60,163,60,163,250,230,206,150,60,163,60,163,250, + 230,129,150,60,163,60,163,250,230,129,150,60,163,60,163,250, + 230,190,150,60,163,60,163,250,230,190,150,60,163,60,163,250, + 230,206,150,60,163,60,163,250,230,129,150,60,163,60,163,250, + 230,129,150,60,163,60,163,250,230,206,150,60,163,60,163,250, + 230,28,15,28,125,10,53,136,164,11,11,11,87,11,11,11, + 11,11,225,11,225,11,11,225,225,225,225,11,16,225,16,225, + 16,225,16,126,16,225,126,225,225,225,20,225,16,16,16,225, + 18,18,249,249,249,18,18,18,18,145,82,82,145,116,109,34, + 109,109,143,167,82,82,82,34,34,116,145,223,18,18,18,18, + 249,45,45,239,45,239,239,239,30,45,45,184,239,30,184,30, + 30,45,45,239,45,239,239,45,239,239,45,45,45,45,45,45, + 239,45,239,149,149,45,149,104,45,45,45,149,45,45,149,149, + 45,149,149,149,45,149,104,149,149,149,149,149,45,39,79,196, + 244,85,38,24,148,148,24,88,81,129,38,24,148,148,24,88, + 81,129,38,24,148,148,24,88,81,129,38,24,148,148,24,88, + 81,129,38,24,148,148,24,88,81,129,38,24,148,148,24,88, + 81,135,38,24,148,148,24,88,81,190,38,24,148,148,24,88, + 81,190,38,24,148,148,24,88,81,190,38,24,148,148,24,88, + 81,129,38,24,148,148,24,88,81,190,38,24,148,148,24,88, + 81,151,38,24,148,148,24,88,81,190,38,24,148,148,24,88, + 81,129,38,24,148,148,24,88,81,206,38,24,148,148,24,88, + 81,135,38,24,148,148,24,88,81,135,38,24,148,148,24,88, + 81,203,28,28,125,10,136,136,136,136,136,164,11,11,11,11, + 11,11,11,11,11,225,225,11,11,11,11,225,11,11,11,225, + 11,11,225,16,16,16,225,16,16,225,16,126,16,225,225,11, + 249,18,18,18,249,249,18,18,18,145,116,145,145,116,34,34, + 82,82,82,7,223,82,145,223,82,223,18,223,18,18,18,18, + 249,249,239,249,239,249,249,249,249,239,239,239,239,249,249,239, + 239,239,239,239,239,239,239,249,45,239,239,239,239,239,239,149, + 149,45,45,45,149,45,149,45,149,45,45,45,149,45,45,149, + 45,45,104,149,104,149,45,104,45,104,149,149,45,149,21,142, + 244,190,158,50,254,254,118,67,158,190,158,50,254,254,118,67, + 158,190,158,50,254,254,118,67,158,190,158,50,254,254,118,67, + 158,190,158,50,254,254,118,67,158,190,158,50,254,254,118,67, + 158,190,158,50,254,254,118,67,158,190,158,50,254,254,118,67, + 158,190,158,50,254,254,118,67,158,190,158,50,254,254,118,67, + 158,190,158,50,254,254,118,67,158,206,158,50,254,254,118,67, + 158,190,158,50,254,254,118,67,158,129,158,50,254,254,118,67, + 158,190,158,50,254,254,118,67,158,190,158,50,254,254,118,67, + 158,190,158,50,254,254,118,67,158,190,158,50,254,254,118,67, + 158,240,28,202,69,222,10,10,136,136,136,136,136,136,136,136, + 11,164,164,11,164,164,11,11,11,11,164,11,11,11,11,11, + 11,11,11,11,11,11,16,11,225,225,11,225,16,16,16,11, + 249,249,249,249,249,249,18,18,18,145,223,223,145,223,82,34, + 82,145,223,12,116,82,145,223,223,116,223,223,18,18,249,249, + 249,249,18,249,249,249,45,249,239,249,249,249,249,239,239,249, + 249,249,249,249,149,249,249,239,149,239,239,239,239,149,149,239, + 239,149,239,239,45,149,45,149,45,149,45,149,104,149,149,104, + 149,45,149,45,149,149,149,149,149,149,45,149,149,149,79,244, + 196,190,14,24,64,64,64,88,230,190,14,24,64,64,64,88, + 230,190,14,24,64,64,64,88,230,190,14,24,64,64,64,88, + 230,190,14,24,64,64,64,88,230,190,14,24,64,64,64,88, + 230,190,14,24,64,64,64,88,230,190,14,24,64,64,64,88, + 230,129,14,24,64,64,64,88,230,129,14,24,64,64,64,88, + 230,190,14,24,64,64,64,88,230,84,14,24,64,64,64,88, + 230,129,14,24,64,64,64,88,230,190,14,24,64,64,64,88, + 230,190,14,24,64,64,64,88,230,190,14,24,64,64,64,88, + 230,190,14,24,64,64,64,88,230,190,14,24,64,64,64,88, + 230,28,28,15,21,222,222,208,10,10,10,10,10,10,10,10, + 53,53,164,10,164,164,164,164,164,164,164,164,164,11,164,11, + 11,11,11,11,11,11,11,225,11,11,16,16,16,11,11,225, + 249,249,249,249,249,249,18,18,18,18,18,18,223,223,145,82, + 145,145,223,42,23,82,223,223,223,223,223,18,18,18,18,249, + 18,249,249,18,249,249,239,249,249,249,45,249,249,249,249,45, + 239,239,239,239,239,239,239,73,249,149,149,149,239,239,239,239, + 239,149,149,149,239,138,104,149,104,149,104,149,45,149,149,149, + 149,149,149,149,73,149,138,138,138,138,104,189,138,39,21,96, + 202,129,127,88,42,42,42,62,243,129,127,88,42,42,42,62, + 243,129,127,88,42,42,42,62,243,129,127,88,42,42,42,62, + 243,129,127,88,42,42,42,62,243,129,127,88,42,42,42,62, + 243,190,127,88,42,42,42,62,243,129,127,88,42,42,42,62, + 243,190,127,88,42,42,42,62,243,190,127,88,42,42,42,62, + 243,190,127,88,42,42,42,62,243,40,127,88,42,42,42,62, + 243,190,127,88,42,42,42,62,243,129,127,88,42,42,42,62, + 243,129,127,88,42,42,42,62,243,129,127,88,42,42,42,62, + 243,190,127,88,42,42,42,62,243,190,127,88,42,42,42,62, + 243,28,28,28,79,102,222,222,222,222,222,10,10,10,10,10, + 10,10,164,10,10,10,10,10,10,164,164,164,164,164,164,164, + 164,164,11,11,11,11,11,11,16,11,11,11,225,225,11,11, + 249,249,249,45,249,249,249,18,18,18,18,18,223,223,223,116, + 223,223,223,42,145,82,223,223,18,223,18,18,18,18,149,18, + 249,149,149,249,249,18,18,249,249,249,249,239,149,249,73,249, + 249,249,249,249,249,249,249,149,73,249,249,138,189,138,138,138, + 138,138,138,73,138,138,138,189,138,138,138,138,149,73,138,138, + 138,189,138,138,138,138,138,138,138,189,39,138,189,39,79,202, + 196,190,115,58,58,58,58,115,58,190,115,58,58,58,58,115, + 58,190,115,58,58,58,58,115,58,190,115,58,58,58,58,115, + 58,190,115,58,58,58,58,115,58,190,115,58,58,58,244,142, + 244,191,115,58,58,58,244,142,244,191,115,58,58,58,115,196, + 244,191,115,58,58,58,244,115,244,191,115,58,58,58,58,115, + 135,240,115,58,58,58,58,115,244,191,115,58,58,58,115,115, + 244,190,115,58,58,58,244,196,244,135,115,58,58,58,115,115, + 58,240,115,58,58,58,115,196,244,240,115,58,58,244,244,196, + 240,191,115,58,58,244,115,196,196,244,115,58,58,58,196,142, + 244,202,28,28,79,102,222,222,222,10,10,222,10,10,10,222, + 10,10,10,164,164,164,164,164,164,164,10,164,10,164,164,164, + 164,164,164,164,164,11,11,11,11,11,11,11,11,11,11,11, + 249,73,249,249,249,45,249,18,18,18,18,18,18,223,223,145, + 223,223,39,12,38,145,223,223,18,18,18,18,18,18,149,249, + 149,249,149,149,45,45,249,249,149,249,249,239,239,249,249,249, + 249,249,249,249,249,249,249,249,249,249,138,138,138,138,138,138, + 73,73,138,138,138,138,138,138,189,138,138,189,39,39,149,138, + 138,138,138,39,138,138,138,138,138,104,39,189,189,39,188,142, + 202,190,58,129,129,191,129,133,244,190,58,129,129,191,129,133, + 244,190,58,129,129,191,129,133,244,190,58,129,129,191,129,133, + 244,190,58,129,129,191,129,133,28,135,58,129,129,129,129,129, + 240,190,58,129,129,240,151,129,196,190,190,129,129,191,133,129, + 244,190,190,129,129,129,220,133,244,190,190,129,129,240,129,133, + 196,191,190,129,129,129,129,133,112,190,190,129,129,191,137,133, + 244,191,58,129,129,191,151,129,244,244,58,129,129,191,133,133, + 196,190,58,129,129,191,133,129,244,190,190,129,129,190,151,129, + 196,190,135,129,129,191,133,129,240,190,58,129,129,240,129,129, + 240,28,28,28,76,90,222,171,222,222,10,10,10,10,10,10, + 10,10,10,10,10,10,10,10,10,164,164,164,164,164,164,164, + 164,164,11,11,164,11,11,11,11,11,11,11,11,11,164,164, + 249,249,184,249,249,249,249,249,249,149,18,18,18,223,223,223, + 39,175,223,12,175,223,18,223,18,18,18,18,18,18,18,18, + 45,249,239,239,249,249,249,45,239,45,249,249,249,239,239,249, + 73,149,239,239,239,239,138,149,239,239,73,149,138,149,138,138, + 149,149,149,73,239,138,138,138,149,149,149,149,239,239,149,149, + 149,138,149,239,149,149,104,149,149,39,104,149,149,39,79,196, + 142,190,244,129,129,129,129,129,244,190,244,129,129,129,129,129, + 244,190,244,129,129,129,129,129,244,190,244,129,129,129,129,129, + 244,190,244,129,129,129,129,129,244,190,240,129,129,240,129,129, + 244,190,58,129,129,191,137,129,244,58,244,129,137,191,129,137, + 244,58,135,129,129,240,129,137,244,58,58,129,137,129,129,129, + 58,58,244,129,129,240,129,129,244,58,58,129,137,129,129,137, + 244,190,244,129,129,129,133,129,135,191,244,129,129,191,129,129, + 244,190,244,129,129,191,129,129,244,58,244,129,129,129,129,129, + 244,203,58,129,151,191,129,129,240,190,240,137,129,190,129,129, + 240,244,202,216,79,102,102,10,222,10,10,222,10,10,10,10, + 10,10,10,10,10,164,164,164,53,164,10,164,164,164,164,164, + 164,164,164,11,11,164,11,164,11,11,11,11,11,11,11,11, + 249,18,249,249,249,249,249,249,18,249,18,18,18,39,39,223, + 223,223,18,12,38,223,223,18,223,18,18,18,149,18,149,18, + 249,249,249,249,249,45,249,249,249,45,239,239,249,249,239,249, + 239,149,249,149,138,239,149,138,138,149,239,239,239,45,45,149, + 149,239,149,149,149,149,149,104,149,149,45,149,149,239,149,104, + 149,239,149,239,149,149,104,149,45,149,149,149,45,39,79,202, + 202,191,240,133,151,240,129,133,240,190,240,133,151,240,129,133, + 240,190,240,133,151,240,129,133,240,190,240,133,151,240,129,133, + 240,190,240,133,151,240,129,133,240,190,58,129,129,190,151,151, + 240,191,244,129,133,240,129,133,240,191,58,129,137,240,129,133, + 240,191,244,129,129,190,129,137,240,191,240,129,133,240,129,129, + 240,191,58,129,129,240,129,129,240,191,244,129,129,240,129,137, + 135,191,240,133,129,240,129,137,244,190,58,129,129,240,129,137, + 240,191,58,129,137,190,129,133,240,191,135,129,129,240,129,151, + 240,190,240,129,129,190,129,151,58,191,244,137,129,191,151,151, + 58,28,202,202,79,169,222,10,222,222,10,10,10,136,10,10, + 10,10,164,53,10,10,10,10,10,164,164,164,164,87,164,164, + 164,164,164,11,11,11,11,11,11,11,11,11,11,11,11,11, + 249,175,249,249,249,249,249,249,249,249,18,18,18,18,175,223, + 18,18,18,12,73,223,223,39,39,18,18,18,18,18,18,18, + 149,149,249,249,149,18,249,149,249,18,149,249,149,249,149,249, + 149,249,149,73,149,149,73,149,149,149,149,149,149,149,149,239, + 239,149,149,149,149,45,149,149,149,239,149,45,45,149,149,149, + 149,149,149,149,45,149,149,149,149,149,149,45,149,149,79,142, + 142,58,244,137,129,191,129,129,28,58,244,137,129,191,129,129, + 28,58,244,137,129,191,129,129,28,58,244,137,129,191,129,129, + 28,58,244,137,129,240,129,129,244,58,135,129,133,129,129,129, + 196,190,240,129,137,191,129,129,240,190,240,133,129,129,129,129, + 240,58,240,129,133,112,137,129,240,58,240,129,129,240,137,129, + 240,190,135,129,133,191,151,151,240,190,135,129,129,191,137,129, + 244,58,244,137,129,191,137,129,244,190,135,133,129,191,137,129, + 244,190,135,129,129,129,129,129,240,244,190,133,129,129,133,129, + 240,58,135,137,129,129,129,129,196,58,240,137,133,129,129,129, + 240,115,15,202,162,102,171,222,56,10,10,10,136,10,10,164, + 10,10,10,164,164,164,164,164,164,164,164,164,164,164,11,11, + 11,11,11,11,11,11,11,11,11,93,11,11,11,11,11,164, + 175,175,175,18,18,18,18,18,18,249,18,18,223,18,18,223, + 223,223,249,12,17,223,223,18,18,18,18,18,18,149,18,18, + 18,18,149,18,149,18,149,18,149,18,149,249,149,249,149,249, + 149,149,18,149,149,18,149,149,249,249,149,138,138,138,149,149, + 149,239,239,104,149,239,149,149,149,149,149,149,149,104,39,149, + 149,104,149,149,149,149,45,149,45,45,149,149,149,149,47,216, + 142,240,28,112,240,240,240,240,196,240,28,112,240,240,240,240, + 196,240,28,112,240,240,240,240,196,240,28,112,240,240,240,240, + 196,240,28,112,240,240,240,240,202,240,202,112,240,202,240,240, + 244,240,244,112,129,112,240,240,196,240,202,28,129,28,240,240, + 196,240,202,240,191,112,240,240,196,240,28,112,240,112,240,240, + 196,240,28,240,240,240,240,240,196,240,202,240,190,112,112,240, + 244,240,28,112,240,28,112,129,196,240,28,28,129,112,240,240, + 196,240,28,112,85,28,240,240,196,240,28,244,240,28,240,240, + 196,240,28,112,85,202,240,240,244,240,28,112,240,28,240,240, + 196,28,15,202,79,102,222,222,10,56,136,10,10,136,10,164, + 164,164,10,53,164,164,164,53,164,53,11,87,11,164,164,87, + 11,11,11,11,11,11,11,11,11,225,16,225,225,11,93,11, + 175,223,175,175,175,249,249,249,18,18,18,18,18,18,175,175, + 18,18,73,12,66,223,223,39,223,18,18,18,18,149,18,149, + 18,149,18,149,18,149,18,18,149,249,18,249,249,18,149,18, + 249,249,149,149,149,149,149,249,149,149,138,149,149,149,138,149, + 138,149,149,39,138,149,149,149,138,149,138,138,149,149,149,149, + 149,39,149,138,149,149,149,104,149,149,45,149,149,169,21,115, + 202,253,245,202,142,202,253,115,115,115,245,115,253,202,115,245, + 253,115,245,253,202,253,115,152,115,115,245,245,152,115,245,245, + 245,253,15,245,115,202,245,245,245,202,115,202,253,202,115,115, + 115,115,115,245,202,253,115,115,152,202,202,253,202,112,253,202, + 202,142,202,196,245,202,245,245,253,115,245,115,115,202,152,115, + 115,115,245,115,115,115,245,115,245,245,245,253,202,202,115,115, + 115,115,115,115,202,202,253,202,115,115,245,245,115,202,115,15, + 202,202,15,245,202,202,15,245,202,202,245,245,15,245,15,245, + 245,115,245,15,202,202,15,15,115,115,15,115,202,245,15,245, + 15,245,115,0,94,222,102,10,222,10,10,10,136,10,10,10, + 10,10,164,164,164,53,164,11,164,164,164,164,164,11,11,11, + 11,11,11,11,11,225,93,225,11,11,225,11,225,225,11,11, + 175,223,175,18,223,18,18,18,175,18,18,175,175,223,18,223, + 175,223,239,211,17,18,223,18,223,39,18,223,18,18,18,18, + 149,18,149,249,149,149,149,149,18,149,18,149,249,149,149,18, + 149,249,249,18,249,249,138,249,39,149,138,138,138,149,138,138, + 39,39,149,149,39,138,138,149,138,149,149,138,39,149,149,39, + 149,39,39,149,149,39,149,149,149,149,149,149,39,174,26,245, + 84,193,193,202,84,115,85,142,89,135,96,152,115,202,89,115, + 112,151,206,135,244,202,202,245,245,135,196,240,0,245,245,245, + 245,152,152,245,0,115,202,49,15,112,190,151,115,202,253,253, + 245,135,135,196,196,202,253,112,190,240,202,245,0,152,152,152, + 152,84,84,44,172,151,44,151,29,253,245,0,152,202,202,129, + 85,115,253,216,0,151,85,129,240,202,15,196,135,240,253,253, + 253,202,253,245,115,115,152,0,152,89,89,216,245,253,245,115, + 245,202,202,15,245,152,245,152,0,245,115,216,202,115,96,142, + 245,142,253,115,115,202,142,245,245,245,253,28,202,245,152,0, + 245,0,245,245,89,151,90,56,10,10,10,10,10,164,164,164, + 164,164,164,164,164,87,164,11,11,164,11,11,87,11,11,11, + 11,11,93,93,11,11,225,225,225,16,225,225,16,16,225,11, + 175,223,223,175,175,175,175,175,18,175,223,18,223,175,223,175, + 223,175,18,211,159,223,223,223,18,223,18,223,223,18,18,18, + 18,18,18,18,18,18,249,18,249,18,149,18,149,18,249,149, + 18,39,39,138,138,39,39,39,138,249,138,138,138,138,39,149, + 149,149,149,39,149,149,138,138,149,39,39,149,39,149,39,149, + 39,149,149,39,39,149,39,149,39,149,149,149,39,178,47,151, + 44,196,96,240,49,96,115,142,72,202,142,196,172,238,202,72, + 80,29,133,240,115,15,245,15,15,133,151,29,202,245,152,115, + 245,112,85,152,72,72,142,96,115,202,84,172,253,152,115,135, + 198,108,29,198,112,129,151,84,63,84,80,151,151,202,89,72, + 72,152,96,44,133,72,206,29,242,115,15,197,172,15,63,63, + 84,129,28,244,28,190,29,29,151,151,80,129,151,240,28,240, + 105,129,133,58,196,191,193,29,29,115,115,115,244,115,115,253, + 115,152,115,115,245,152,196,190,15,96,202,115,84,46,196,142, + 142,15,203,28,28,244,245,115,15,245,245,28,115,152,89,245, + 152,245,115,245,0,220,102,10,136,10,164,10,164,10,10,53, + 164,164,53,164,11,164,87,11,87,11,87,11,11,11,11,11, + 11,11,11,11,225,225,225,225,16,225,16,225,225,225,11,225, + 175,223,223,175,223,175,175,223,175,175,223,18,223,18,223,223, + 223,223,18,185,51,175,223,39,223,223,18,18,18,18,18,18, + 149,18,149,18,249,18,149,18,149,149,249,18,249,39,138,138, + 149,149,149,138,149,149,149,149,39,18,149,149,138,149,149,138, + 138,149,239,138,138,149,138,138,149,149,39,149,39,149,149,149, + 149,149,149,149,149,149,149,149,149,73,149,149,149,229,47,188, + 242,115,72,63,89,89,115,202,89,202,253,253,142,63,96,142, + 196,96,135,205,245,15,112,135,115,151,29,198,135,15,202,115, + 245,196,129,115,58,58,89,202,28,152,202,49,172,216,115,29, + 242,29,29,190,133,235,240,112,96,135,240,235,46,133,190,238, + 72,72,84,58,29,44,29,29,29,191,15,84,172,202,63,72, + 96,63,190,151,129,244,133,137,190,187,151,129,152,151,29,29, + 133,108,162,29,196,190,198,29,193,152,152,245,191,89,115,115, + 115,49,135,190,202,0,129,154,115,46,193,190,202,244,15,202, + 135,115,115,89,220,244,202,115,202,115,115,245,245,15,245,245, + 245,0,245,0,245,154,102,10,53,136,136,164,164,164,164,164, + 164,164,11,164,11,164,164,164,11,11,11,11,87,11,11,11, + 11,11,11,11,225,225,225,225,225,225,16,16,16,226,11,11, + 175,223,175,223,175,223,18,175,18,18,18,175,18,175,18,18, + 223,18,249,147,95,223,223,223,39,18,39,18,39,223,18,18, + 18,249,18,149,18,149,18,249,249,189,249,138,138,249,249,138, + 249,138,138,149,138,249,138,249,149,138,138,138,138,73,138,149, + 138,149,39,104,149,138,149,149,104,149,45,149,104,149,149,138, + 149,149,149,73,149,149,149,149,149,149,149,149,39,198,229,188, + 85,44,72,96,202,89,96,58,72,202,72,172,89,142,142,96, + 96,72,137,105,115,245,245,202,151,96,245,58,202,253,202,202, + 115,245,216,152,63,89,202,245,15,0,142,46,46,29,142,190, + 29,133,244,80,44,63,135,115,152,240,115,15,191,244,44,135, + 142,89,44,44,151,151,193,29,58,115,15,49,63,236,63,84, + 37,129,245,15,28,202,113,187,133,152,245,115,130,198,193,137, + 151,193,133,190,202,115,142,15,115,115,142,245,58,0,152,152, + 152,89,108,187,133,0,115,152,0,142,206,72,89,196,135,115, + 142,216,115,72,129,196,253,253,115,142,202,245,15,152,115,15, + 245,245,245,245,15,154,102,10,10,10,136,136,87,11,164,136, + 164,164,164,11,164,11,11,11,11,11,11,11,11,11,11,11, + 93,11,225,225,225,11,225,16,225,126,225,225,225,225,225,225, + 175,223,175,175,175,223,175,241,175,175,18,175,175,175,175,175, + 223,175,249,227,95,223,39,223,175,175,175,223,39,223,39,18, + 39,149,18,149,18,149,249,249,249,138,73,249,138,138,249,189, + 249,138,138,73,73,73,138,73,73,73,73,138,138,138,73,73, + 73,239,149,149,239,104,149,149,149,138,149,149,149,138,149,138, + 138,104,39,149,149,39,149,149,149,149,45,149,39,27,47,47, + 105,151,72,72,142,152,89,96,142,115,193,172,152,49,58,142, + 72,196,129,198,133,245,245,44,133,244,112,115,202,202,245,245, + 202,245,240,29,84,84,135,216,152,152,96,96,245,29,151,178, + 105,113,129,84,240,245,96,125,133,133,197,151,58,203,63,135, + 142,72,44,58,96,137,190,240,240,28,129,141,172,44,63,72, + 72,129,245,15,15,196,84,135,240,244,173,141,37,202,115,58, + 84,80,205,15,15,15,15,245,0,152,245,245,72,115,72,135, + 89,152,137,154,206,245,245,152,152,89,72,240,142,72,142,137, + 115,245,245,245,220,115,152,115,115,245,245,115,245,0,245,245, + 245,15,245,0,240,154,171,136,136,10,136,10,136,136,10,164, + 11,11,53,11,11,164,11,11,11,11,11,11,11,11,93,11, + 225,225,225,225,16,225,225,16,16,226,126,226,16,226,16,225, + 175,175,175,175,175,175,175,175,175,175,223,175,223,175,223,223, + 175,223,39,168,208,223,223,39,223,223,223,18,175,39,223,18, + 138,18,138,18,249,189,189,189,189,189,249,138,73,138,73,73, + 73,73,73,249,138,149,73,149,149,138,138,239,73,73,149,149, + 149,138,149,104,138,149,138,138,104,138,104,138,138,138,138,138, + 149,149,149,149,138,239,73,138,138,239,138,149,189,198,188,47, + 188,170,172,58,72,152,96,96,115,0,49,172,142,172,72,253, + 245,196,58,29,178,151,178,86,135,151,193,21,135,245,115,115, + 0,244,133,191,152,84,240,58,49,58,84,172,84,112,202,58, + 198,137,133,135,244,178,197,197,244,28,196,188,29,202,15,151, + 112,72,44,84,44,135,196,142,89,135,240,133,137,190,29,58, + 49,115,245,15,196,172,44,202,137,84,84,29,46,80,49,72, + 151,133,29,15,15,245,15,15,115,152,15,15,115,49,72,142, + 253,152,115,58,245,115,115,202,245,115,89,115,142,197,72,15, + 15,245,245,245,245,240,202,240,58,115,115,0,15,115,152,115, + 245,115,245,245,80,137,102,10,10,136,136,11,164,164,11,11, + 164,164,11,164,164,11,11,11,11,11,11,225,11,225,11,225, + 16,11,11,11,225,16,126,225,225,225,16,225,226,16,126,225, + 175,175,241,241,175,175,175,241,241,175,175,18,223,175,175,223, + 18,223,18,68,54,223,39,18,39,39,39,39,18,189,39,18, + 189,39,39,39,249,249,138,249,249,138,73,249,73,249,138,249, + 249,249,73,239,73,249,73,73,138,73,138,138,149,73,138,73, + 138,138,138,138,138,104,39,138,138,138,138,104,138,104,138,138, + 138,189,189,138,189,138,138,138,189,138,138,39,39,242,105,144, + 188,26,63,117,72,142,72,58,96,85,44,96,133,172,172,172, + 89,63,152,49,84,29,188,80,96,151,47,188,151,152,96,115, + 202,190,151,137,115,193,190,103,63,172,84,141,72,245,15,115, + 196,206,112,202,49,63,198,193,141,44,197,29,172,44,129,244, + 135,80,96,29,193,193,69,29,96,142,240,154,29,137,142,206, + 152,115,202,245,197,115,190,244,80,151,29,187,187,29,29,151, + 135,154,29,15,129,202,244,198,133,135,15,115,115,72,206,152, + 142,245,245,28,245,152,206,115,152,245,115,193,115,236,190,245, + 15,245,245,15,15,142,115,28,129,191,191,0,202,115,115,152, + 245,15,0,0,154,154,222,136,136,10,136,164,164,164,164,11, + 11,11,11,11,11,11,87,11,11,225,11,225,225,225,225,11, + 16,225,16,126,225,225,20,126,226,226,226,225,226,16,16,225, + 175,175,175,175,175,175,175,175,175,249,175,241,175,249,18,18, + 175,138,39,167,140,18,175,241,189,189,39,18,189,18,189,189, + 39,189,189,189,189,138,189,138,138,189,249,138,249,138,249,138, + 138,138,138,138,249,73,249,249,73,239,73,239,73,239,73,138, + 104,138,138,138,138,138,104,149,149,138,138,138,138,138,138,138, + 138,73,138,104,138,138,138,104,138,149,138,149,223,188,78,78, + 176,27,105,151,49,49,89,96,96,29,29,80,151,63,172,235, + 89,152,152,115,84,202,188,188,21,206,125,188,137,238,141,58, + 115,37,206,80,152,80,151,29,202,84,72,133,206,245,245,245, + 0,190,245,178,79,142,151,193,46,128,46,29,85,96,72,112, + 240,133,198,84,96,69,79,79,79,115,115,96,112,0,115,240, + 89,115,49,142,135,173,133,80,142,193,197,29,44,187,216,142, + 151,58,129,202,190,244,240,84,72,115,115,15,15,115,72,142, + 115,89,202,137,115,152,112,113,152,202,80,37,202,206,115,245, + 15,245,15,15,15,115,129,191,190,190,28,202,191,245,245,15, + 115,115,245,15,103,80,10,208,164,11,164,11,11,87,11,87, + 11,11,225,225,225,11,11,11,225,11,225,225,225,20,16,225, + 225,16,126,16,126,16,225,16,16,225,16,226,226,226,126,225, + 175,175,175,175,175,241,175,175,175,175,175,241,175,175,241,18, + 175,18,18,167,214,18,39,18,18,189,189,189,138,189,249,249, + 249,138,249,138,189,73,73,73,73,73,73,189,73,73,73,73, + 73,73,73,138,138,138,138,249,138,138,138,73,138,149,149,149, + 73,138,104,138,138,149,138,104,138,104,138,104,138,138,104,138, + 138,149,138,138,138,138,138,149,104,138,138,138,39,144,78,78, + 105,129,28,129,63,44,72,89,115,193,133,135,172,37,115,112, + 142,46,236,236,115,202,84,198,105,151,141,198,151,203,172,196, + 63,236,84,129,72,151,129,151,129,44,172,133,154,135,15,115, + 245,190,244,44,84,115,84,37,141,63,46,84,190,152,172,44, + 190,151,198,29,178,178,178,79,86,80,115,151,190,245,151,240, + 129,151,135,172,28,240,154,85,198,117,29,193,115,113,84,133, + 205,152,152,96,130,244,115,58,172,142,15,245,15,115,191,115, + 115,115,28,240,154,142,245,190,0,108,205,129,137,133,15,245, + 15,245,245,15,15,245,196,240,9,244,115,115,69,190,202,202, + 15,115,190,190,234,154,10,136,136,136,136,136,11,11,11,11, + 87,11,11,11,225,225,225,225,225,225,225,225,225,225,225,16, + 20,225,16,225,126,20,226,226,226,226,20,226,226,226,226,225, + 175,241,241,241,241,241,249,249,241,241,175,18,241,249,18,175, + 18,241,175,230,54,175,175,241,189,175,18,18,189,189,18,189, + 189,138,189,189,249,138,249,138,249,138,138,73,189,249,189,189, + 249,138,249,73,138,73,73,138,138,73,73,138,138,189,104,138, + 138,138,138,138,138,138,138,138,138,138,138,138,138,138,189,138, + 138,104,138,138,138,104,138,138,189,138,138,138,18,105,141,46, + 13,63,112,28,191,242,84,89,202,29,44,141,84,72,49,96, + 63,46,49,152,133,172,89,197,29,29,174,172,44,105,174,154, + 58,49,141,198,29,96,115,135,80,244,142,190,44,190,245,245, + 0,151,28,197,105,205,137,151,49,63,44,172,151,135,133,84, + 129,142,151,115,178,79,188,113,21,133,112,29,205,0,152,151, + 80,133,245,202,15,15,84,141,206,151,231,154,46,187,178,245, + 72,152,245,115,15,202,72,37,172,142,15,245,115,15,154,191, + 240,196,135,15,29,129,96,240,152,108,151,80,154,190,15,15, + 15,15,15,15,15,245,142,190,240,202,115,49,154,187,15,115, + 202,245,112,202,129,151,222,136,11,11,11,11,11,93,11,11, + 11,11,93,225,11,11,11,11,225,225,225,225,225,16,126,126, + 225,20,126,20,16,126,226,16,20,226,226,226,226,20,16,16, + 175,241,73,249,249,241,184,241,73,73,241,73,73,241,189,189, + 175,189,175,71,54,175,39,39,138,189,189,189,18,189,189,138, + 189,189,249,189,189,189,189,138,138,189,249,138,189,138,138,189, + 189,189,138,138,138,138,73,138,138,138,138,73,138,189,189,138, + 73,138,104,138,73,104,39,138,138,138,138,138,104,39,149,138, + 189,138,138,138,138,138,104,39,149,138,138,39,223,130,112,129, + 129,133,130,193,151,44,197,72,202,44,151,84,141,135,240,84, + 117,63,193,46,26,141,193,205,193,29,198,72,196,141,117,26, + 191,130,151,151,84,141,63,240,84,89,151,151,103,152,89,89, + 63,129,190,240,178,105,63,130,151,151,96,178,29,236,46,142, + 135,135,84,49,49,29,187,198,187,193,154,133,151,205,152,152, + 84,137,202,115,15,190,231,13,146,142,197,49,240,133,154,72, + 49,190,137,129,152,245,137,137,152,245,15,0,89,72,108,0, + 89,191,240,191,129,190,253,245,152,80,133,29,137,129,15,15, + 15,245,245,245,15,196,58,63,152,142,245,72,245,114,202,115, + 240,245,115,115,245,154,10,136,136,225,11,136,11,93,93,225, + 225,11,11,225,225,225,225,16,16,225,16,16,126,16,225,20, + 225,20,126,20,16,16,226,126,226,226,20,20,226,226,226,225, + 175,241,241,241,241,241,241,241,241,241,73,241,241,241,241,175, + 249,18,18,111,54,175,73,73,73,138,249,249,138,189,249,189, + 189,138,189,189,249,138,249,189,189,249,189,189,138,189,189,138, + 138,138,138,73,138,138,138,73,138,138,189,138,73,138,138,104, + 138,138,189,189,189,39,138,138,138,138,138,189,39,138,189,39, + 39,189,138,138,39,138,39,138,189,189,39,138,39,29,238,26, + 129,193,229,229,229,105,27,49,89,84,152,152,141,84,196,46, + 141,231,172,245,231,44,235,29,96,151,105,188,133,46,26,13, + 49,49,58,205,240,202,142,240,142,84,112,133,135,49,49,72, + 46,244,133,191,28,235,29,193,245,245,129,37,242,29,245,72, + 135,196,112,202,115,49,198,105,29,151,152,129,129,240,152,89, + 152,253,115,152,115,174,146,128,212,37,170,196,72,80,84,245, + 0,129,205,0,152,152,245,0,0,245,0,191,133,196,72,115, + 84,72,196,103,113,137,113,187,58,240,190,191,58,190,15,245, + 15,245,0,245,245,115,58,0,253,115,115,115,245,190,96,46, + 242,115,245,245,151,103,136,136,11,11,11,225,93,11,225,225, + 93,225,225,225,16,225,16,225,225,16,225,20,225,20,20,225, + 126,225,16,126,226,226,226,20,20,226,226,226,226,251,126,226, + 241,175,241,241,241,241,241,73,73,241,241,241,241,249,241,241, + 241,189,249,59,54,189,73,73,73,73,73,73,249,189,249,249, + 189,189,138,189,189,189,138,73,189,138,73,73,73,73,73,73, + 73,189,138,189,189,189,189,189,189,73,189,138,189,189,189,189, + 189,189,104,39,73,189,189,189,189,189,138,138,189,138,138,138, + 39,189,189,73,39,138,189,189,39,138,39,39,223,242,240,46, + 46,242,177,229,229,105,47,49,89,89,152,37,172,63,130,178, + 193,13,133,235,229,63,26,117,213,130,198,198,26,174,117,63, + 49,89,49,58,151,202,244,240,202,142,137,133,137,72,72,72, + 235,202,244,84,28,28,135,63,29,89,29,151,58,202,198,133, + 245,115,15,115,115,115,63,29,198,151,15,0,202,15,152,152, + 152,152,115,89,231,70,13,236,37,115,49,196,135,190,242,37, + 245,244,142,152,245,0,142,89,115,152,152,137,245,142,142,190, + 115,152,115,191,129,129,151,133,142,202,154,154,129,80,115,152, + 245,245,245,245,152,202,58,152,49,115,253,115,240,190,202,196, + 115,0,245,15,58,135,136,93,136,225,11,225,225,225,93,16, + 226,126,225,225,126,126,225,16,225,20,225,20,126,126,20,20, + 20,20,20,251,251,251,226,226,20,226,251,20,20,20,226,226, + 241,241,175,241,241,241,73,241,241,241,73,241,73,73,73,249, + 73,73,175,200,86,249,249,73,73,73,189,189,73,249,189,73, + 73,138,73,138,73,73,73,138,73,73,138,138,249,138,189,138, + 189,73,189,73,73,73,189,73,73,189,138,189,73,73,189,138, + 73,138,189,73,189,73,73,189,189,189,189,189,189,39,189,138, + 138,149,39,39,138,189,138,138,138,189,138,39,39,130,37,236, + 193,29,177,144,229,105,229,37,245,152,89,236,152,152,130,188, + 63,170,13,146,174,238,236,242,174,170,29,29,112,242,26,13, + 89,49,152,96,112,191,202,190,115,244,113,205,133,240,142,142, + 49,196,245,133,29,203,28,129,202,202,202,216,202,72,29,129, + 190,240,112,96,112,196,72,242,197,202,115,129,244,203,152,152, + 49,89,0,89,152,0,0,0,152,89,202,117,29,84,129,46, + 63,151,115,152,152,0,58,49,49,152,152,129,108,244,240,72, + 49,49,115,133,191,154,137,245,115,253,142,142,244,202,72,89, + 115,0,152,72,253,49,115,152,216,245,245,245,244,196,244,49, + 28,142,152,0,129,205,10,11,225,225,225,225,126,225,16,225, + 225,16,126,126,225,16,126,20,126,126,20,126,20,20,126,126, + 251,251,226,20,20,20,20,251,139,139,20,139,139,139,226,16, + 241,241,241,184,184,241,184,184,184,241,73,249,241,73,241,73, + 249,249,175,52,86,241,189,73,73,73,73,189,73,73,189,249, + 73,189,73,189,189,189,73,73,73,73,73,73,73,73,73,73, + 138,73,138,138,138,73,189,189,73,73,138,138,138,138,73,138, + 189,189,138,138,138,138,149,138,138,189,189,138,104,39,189,189, + 39,138,138,189,189,189,73,149,138,189,138,39,223,157,235,146, + 117,172,128,49,117,37,49,37,115,89,89,152,0,49,84,172, + 49,49,133,72,174,216,235,130,144,235,193,242,193,13,141,49, + 89,49,89,89,72,63,202,63,49,190,206,202,115,202,0,115, + 115,89,58,216,133,151,236,84,133,142,58,29,130,240,202,142, + 142,142,202,244,202,129,89,193,231,202,15,133,135,115,115,152, + 152,49,96,151,84,135,202,245,245,152,49,115,151,96,202,235, + 236,135,152,152,0,15,115,115,152,152,141,141,129,137,245,115, + 29,0,244,103,113,103,154,112,29,80,135,152,152,152,152,0, + 152,152,115,72,253,152,0,0,0,152,245,245,191,129,253,152, + 245,202,152,0,113,108,136,11,11,225,16,16,16,225,126,226, + 226,20,20,251,237,20,20,251,20,251,237,126,20,20,20,20, + 20,226,226,226,226,226,20,20,20,226,20,20,20,20,226,226, + 241,241,241,241,241,184,184,184,184,184,184,184,241,73,73,73, + 73,73,241,200,79,241,73,73,73,73,73,73,73,73,73,73, + 189,73,241,189,189,73,189,189,189,241,73,73,73,189,241,189, + 73,189,73,73,189,189,189,189,189,189,189,189,189,189,39,189, + 189,138,189,189,189,189,189,189,189,189,189,138,73,138,39,138, + 189,189,189,189,138,138,39,138,73,189,189,138,39,200,157,85, + 96,236,13,174,46,44,105,49,0,49,49,152,89,89,49,170, + 49,72,13,117,146,236,26,130,188,84,46,117,44,151,15,15, + 49,49,152,49,72,49,245,49,84,133,96,172,172,72,89,89, + 152,115,89,240,245,202,190,29,29,72,85,133,129,142,115,151, + 244,245,115,202,142,15,253,112,13,15,15,89,152,15,15,152, + 152,152,152,152,115,137,29,84,236,37,191,240,28,28,135,135, + 84,115,115,115,15,173,28,15,15,115,15,58,29,113,245,202, + 113,129,108,113,113,151,115,0,245,0,0,0,115,115,245,0, + 152,152,152,115,0,0,152,152,245,152,0,152,28,154,197,238, + 96,115,0,0,244,96,11,225,16,126,225,16,226,20,20,20, + 20,126,20,20,20,20,251,20,237,20,20,20,126,126,126,226, + 226,20,226,226,226,20,226,226,226,20,226,226,226,226,226,226, + 241,73,228,228,241,184,241,228,184,241,184,73,184,73,73,73, + 241,73,241,52,188,241,73,73,73,73,73,241,189,189,241,241, + 241,189,241,189,241,189,189,189,189,241,241,241,189,189,241,189, + 241,189,175,189,189,189,189,39,189,189,189,189,189,189,39,39, + 39,39,39,39,39,189,189,39,39,189,189,189,189,138,39,189, + 39,39,39,39,189,189,39,39,39,138,39,189,39,229,22,177, + 13,46,235,174,229,236,174,49,152,49,49,152,152,115,72,193, + 72,96,37,112,146,72,236,117,78,133,46,244,213,26,46,46, + 15,115,28,178,188,105,79,188,105,245,152,72,235,54,47,21, + 198,152,152,190,152,245,245,253,202,198,187,72,240,213,202,151, + 129,213,244,202,202,135,44,242,146,202,15,72,152,115,115,152, + 152,152,152,152,72,151,172,190,190,202,202,115,28,112,115,58, + 29,15,173,173,173,15,245,115,15,245,15,15,103,178,187,142, + 198,103,133,191,190,133,115,151,152,152,152,115,133,244,15,115, + 115,152,152,152,240,0,152,152,0,152,0,196,115,142,58,196, + 202,89,152,245,108,129,225,225,16,16,226,16,126,16,226,226, + 20,20,20,20,237,20,237,251,237,119,165,224,20,20,20,226, + 226,20,20,226,226,226,226,226,226,226,226,226,226,226,20,226, + 228,228,241,241,228,228,184,184,184,184,228,228,73,228,73,184, + 184,73,241,199,79,241,184,73,73,73,73,73,189,241,189,241, + 189,241,189,241,39,241,241,241,241,39,241,241,189,189,189,241, + 189,189,189,189,241,241,189,189,241,189,175,39,189,189,189,189, + 189,189,189,189,189,39,39,189,189,189,189,189,189,39,73,39, + 189,189,189,189,39,189,189,189,189,189,189,39,223,177,248,111, + 46,236,46,200,117,231,46,37,49,49,37,152,49,152,49,170, + 49,49,146,231,128,111,117,117,174,197,238,28,72,197,133,242, + 244,15,203,105,196,29,44,85,130,0,0,0,202,151,72,72, + 89,89,89,29,152,202,173,15,173,29,105,235,240,196,129,112, + 129,190,85,133,133,129,96,231,231,15,15,108,113,137,15,115, + 72,152,152,206,193,198,142,205,240,191,245,191,112,28,96,89, + 196,245,245,245,0,15,15,173,15,15,203,0,133,80,133,187, + 151,115,108,125,114,133,0,103,113,244,152,58,115,115,0,152, + 72,152,152,152,190,137,240,58,245,206,190,112,253,142,240,202, + 240,245,245,152,190,133,11,16,16,226,226,226,20,226,20,251, + 20,226,20,251,251,75,234,114,234,234,233,108,6,35,108,108, + 234,187,234,114,114,69,134,232,114,114,114,94,226,20,226,226, + 228,73,228,228,228,228,228,228,228,73,228,228,228,228,73,228, + 73,73,241,128,188,241,184,73,241,73,241,73,73,73,73,189, + 189,189,189,241,189,189,189,189,189,189,189,189,189,189,189,189, + 189,241,189,189,189,189,241,189,189,189,189,241,189,189,73,241, + 189,241,189,189,189,189,189,189,189,189,189,189,189,39,138,189, + 189,189,73,189,189,189,189,138,39,189,189,189,39,217,200,248, + 229,49,231,59,128,89,37,245,152,235,115,242,199,242,152,170, + 235,84,193,174,146,26,128,26,174,130,235,15,47,141,235,197, + 202,28,191,178,193,214,95,178,188,0,0,142,84,85,115,89, + 152,89,49,193,151,151,205,28,244,231,29,29,89,115,142,142, + 96,129,129,135,142,115,236,128,84,28,15,133,187,96,15,203, + 29,117,0,58,63,205,193,142,151,133,244,151,108,103,216,133, + 151,151,29,29,29,29,198,202,15,15,15,245,187,178,187,178, + 133,245,245,112,15,115,152,206,129,190,202,96,142,202,115,152, + 72,152,152,245,108,113,58,49,0,0,0,202,202,244,190,115, + 202,115,245,152,137,205,93,225,16,16,225,16,226,226,16,226, + 237,201,232,234,108,234,234,234,234,234,33,108,108,6,6,6, + 6,108,35,108,108,108,108,154,154,154,6,234,226,226,20,226, + 228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,73, + 228,228,241,70,188,241,241,184,104,73,73,73,73,189,189,189, + 189,189,189,73,189,189,189,189,73,189,189,73,189,189,189,189, + 189,73,189,189,189,189,73,189,241,73,73,241,189,241,189,189, + 189,189,189,189,73,73,189,73,189,189,189,189,189,189,189,189, + 189,39,39,138,39,73,189,189,149,73,189,189,223,183,22,248, + 157,236,212,146,146,49,202,49,236,172,89,176,131,176,26,151, + 170,198,105,178,27,117,85,235,117,117,235,142,242,141,141,29, + 15,135,129,130,130,198,27,27,188,142,151,96,112,115,152,152, + 89,58,188,188,188,229,27,44,70,212,174,198,26,0,253,245, + 253,202,115,240,245,63,231,112,28,15,178,79,29,133,115,28, + 151,151,202,142,130,193,84,29,152,115,72,85,96,152,84,178, + 29,193,198,187,198,198,21,28,173,15,152,0,113,178,125,178, + 29,15,202,245,0,15,245,0,0,135,133,29,129,202,112,152, + 0,245,152,202,244,244,63,115,152,15,137,190,244,220,191,202, + 58,216,129,129,108,29,11,225,226,226,16,226,94,201,114,234, + 108,108,234,114,234,234,234,234,234,234,154,6,108,108,108,108, + 108,108,108,6,108,108,154,108,108,108,108,108,226,226,226,226, + 228,228,228,228,228,66,228,66,228,228,228,228,228,228,228,228, + 73,228,241,170,21,241,184,241,104,73,241,73,73,73,73,73, + 73,73,189,73,189,189,73,189,189,189,189,73,73,189,73,189, + 189,73,73,73,73,189,189,73,189,189,189,73,73,189,189,189, + 73,189,189,189,189,189,189,138,189,189,189,73,189,189,189,189, + 73,73,189,73,138,138,189,189,138,149,138,73,189,177,200,248, + 200,49,37,117,141,235,238,193,49,72,235,105,21,229,105,96, + 193,105,144,78,176,47,89,238,26,46,236,72,245,216,152,112, + 28,72,220,235,144,86,86,176,54,245,245,115,245,115,151,151, + 193,96,84,105,242,44,202,152,253,49,146,170,178,198,89,240, + 202,129,129,202,236,151,113,188,178,15,79,105,113,198,152,115, + 197,29,178,142,188,141,141,198,198,49,72,198,187,172,240,178, + 108,206,193,29,29,29,80,85,152,152,115,152,187,72,58,190, + 135,133,86,133,245,72,63,152,245,154,133,154,29,137,129,152, + 0,202,0,112,240,244,49,115,152,137,137,137,202,191,245,15, + 28,115,137,133,108,205,164,16,94,187,187,234,234,108,234,234, + 234,234,234,234,234,33,234,234,114,234,108,6,108,6,6,6, + 6,108,108,6,6,234,6,6,6,6,108,6,226,226,20,226, + 228,228,228,66,66,66,66,66,66,66,66,66,228,228,228,228, + 228,228,241,117,229,241,228,73,104,228,104,104,104,104,73,73, + 189,189,73,189,73,73,189,73,73,73,73,189,189,73,73,73, + 73,73,189,73,73,73,73,189,73,73,73,189,189,73,73,73, + 138,239,73,189,189,73,138,73,189,189,189,189,104,189,138,138, + 189,189,73,189,189,138,104,73,189,73,189,189,39,199,177,22, + 157,128,231,13,46,174,177,78,174,193,84,63,115,72,72,85, + 151,197,130,144,47,47,105,152,89,0,245,216,216,152,245,202, + 245,115,202,202,29,105,188,47,86,115,28,15,202,28,115,28, + 28,85,96,196,202,115,202,202,202,202,245,72,26,105,188,193, + 84,151,133,178,86,86,21,205,202,202,79,187,193,151,190,202, + 202,151,29,244,137,80,151,206,170,142,15,115,152,245,115,198, + 29,244,58,84,235,63,46,26,152,115,152,245,152,245,245,245, + 245,113,113,198,133,96,216,245,0,29,80,133,133,133,115,0, + 115,15,245,245,202,58,72,115,115,115,196,112,244,205,28,151, + 108,89,129,220,133,240,114,234,234,234,114,114,234,234,114,234, + 234,114,234,114,234,33,234,234,234,234,80,6,108,108,108,108, + 108,6,108,108,108,6,108,108,108,108,6,108,20,226,226,226, + 228,66,66,66,66,66,66,66,66,66,66,228,66,228,228,228, + 228,228,241,170,198,241,228,228,104,104,104,73,104,104,104,104, + 73,189,73,73,73,73,189,73,73,189,73,73,73,73,73,73, + 73,73,73,73,73,73,239,138,189,73,73,73,138,189,73,73, + 73,73,73,73,73,73,189,104,104,104,138,189,104,73,73,104, + 104,189,104,73,73,189,189,73,239,73,73,73,189,156,174,236, + 235,238,236,46,117,172,37,46,96,89,183,183,117,231,242,128, + 63,216,128,37,13,70,212,32,238,253,231,13,13,231,37,13, + 238,115,63,84,85,206,58,58,63,142,135,58,96,135,58,58, + 63,202,112,142,112,58,135,190,85,112,142,72,96,240,142,89, + 238,202,202,89,245,115,89,115,202,115,115,115,72,196,253,202, + 89,202,196,58,142,89,142,240,202,115,89,202,202,202,202,115, + 202,202,142,196,142,240,58,202,202,253,202,115,244,244,240,28, + 15,202,244,244,58,202,115,115,245,202,115,244,244,196,115,202, + 245,15,115,115,142,202,202,202,15,245,115,115,115,115,15,115, + 253,152,152,115,15,108,113,29,40,40,58,9,9,40,9,9, + 9,33,80,6,234,114,114,234,234,234,6,154,6,108,108,6, + 234,6,108,6,108,6,154,108,108,108,6,108,69,103,139,20, + 228,66,66,66,66,77,66,77,66,77,66,66,66,66,66,66, + 66,66,184,26,105,241,228,228,228,228,228,228,104,104,104,104, + 104,104,73,73,73,104,104,73,73,104,104,104,73,73,104,73, + 73,104,73,73,73,73,73,73,73,73,73,104,73,73,73,73, + 73,73,73,104,73,73,104,189,189,189,104,73,149,73,104,189, + 189,104,189,138,104,73,239,73,73,104,104,73,73,138,47,242, + 235,89,141,92,92,92,92,124,217,216,183,124,200,124,200,59, + 26,63,128,182,32,32,32,120,37,152,92,59,59,59,200,59, + 26,89,193,141,141,193,141,193,26,89,197,193,141,197,197,193, + 26,96,193,151,197,197,151,172,26,142,235,49,63,37,63,84, + 26,89,217,127,72,72,49,115,26,216,235,172,58,84,206,58, + 26,152,133,84,206,172,84,84,84,202,44,84,206,58,206,206, + 235,96,44,58,190,135,190,58,235,196,84,190,58,190,58,135, + 142,135,72,58,115,58,244,196,115,89,58,58,58,244,58,58, + 152,142,244,244,244,58,115,142,152,196,244,244,58,244,196,115, + 245,245,135,135,80,233,33,233,233,35,35,35,108,35,35,35, + 35,233,35,35,233,9,33,233,154,108,233,108,108,6,6,108, + 6,108,154,108,108,108,234,154,6,154,108,154,154,129,112,115, + 77,66,77,66,77,77,77,77,77,77,66,77,66,77,66,66, + 66,66,184,193,198,184,228,228,104,228,228,228,228,228,104,104, + 104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104, + 104,104,104,104,104,104,104,104,73,104,104,73,104,104,73,73, + 239,239,104,104,104,104,104,104,104,104,104,104,239,73,239,104, + 104,104,104,104,104,73,239,104,104,138,104,104,104,73,176,229, + 84,115,231,212,124,124,92,124,183,216,52,59,92,59,124,59, + 46,152,124,32,32,71,32,120,26,89,59,32,32,182,182,59, + 193,115,174,105,170,174,170,141,235,253,197,193,193,170,193,141, + 26,84,193,29,193,29,29,141,174,142,133,235,84,235,46,46, + 26,253,236,152,63,49,172,49,242,115,26,151,105,105,193,172, + 26,142,242,44,44,151,172,197,26,142,197,172,172,172,206,84, + 133,96,44,206,84,84,206,58,235,58,84,206,84,172,58,96, + 238,85,58,49,63,58,49,135,96,112,58,58,172,172,244,44, + 216,135,58,58,58,58,58,135,152,96,58,58,58,58,58,142, + 245,202,133,129,33,233,35,35,35,6,233,35,35,35,35,233, + 35,233,35,233,233,233,35,233,33,33,9,154,108,108,154,108, + 154,108,6,6,6,154,154,234,108,108,108,154,154,220,216,245, + 77,66,77,77,66,77,77,66,77,77,77,77,77,121,66,194, + 194,66,184,46,170,184,66,121,121,104,228,104,228,228,228,104, + 104,104,104,104,104,104,104,228,104,104,104,228,104,104,104,104, + 104,104,104,104,104,104,104,104,104,104,73,104,73,104,104,104, + 104,104,104,73,104,104,104,104,104,104,239,73,104,104,104,104, + 138,104,104,104,104,104,104,138,104,104,104,104,239,239,131,157, + 242,115,170,128,170,146,170,92,26,253,146,92,146,92,92,59, + 26,152,124,59,182,59,59,71,46,89,59,32,32,182,182,59, + 46,115,128,52,52,212,174,174,46,89,174,170,170,170,170,170, + 117,58,170,29,29,170,29,29,174,142,141,117,231,141,235,141, + 235,142,46,70,13,141,46,236,242,89,141,193,105,105,242,197, + 235,142,242,141,172,172,193,172,242,202,193,172,44,172,44,197, + 235,196,193,84,172,172,44,63,133,96,197,206,172,84,84,58, + 72,96,58,172,49,172,58,84,142,63,58,135,80,197,244,84, + 115,96,58,58,58,58,58,135,245,135,244,58,58,58,244,142, + 245,190,29,29,6,233,233,35,35,35,35,35,233,35,35,233, + 233,233,233,233,233,233,35,233,233,233,33,33,154,6,108,108, + 6,108,108,108,108,108,108,6,6,6,220,220,191,245,0,115, + 77,66,77,77,246,77,77,77,246,77,77,121,77,77,77,77, + 121,77,184,26,130,184,66,66,121,121,121,121,156,121,228,156, + 156,228,228,104,228,228,104,228,228,104,121,95,214,214,95,51, + 51,121,104,104,104,104,104,104,73,104,104,104,73,104,104,104, + 104,73,104,104,104,73,104,239,104,104,104,104,239,104,104,104, + 104,104,138,104,104,104,104,104,104,104,104,104,104,104,158,157, + 174,142,141,146,146,212,170,212,170,253,231,212,146,13,13,92, + 141,152,92,212,124,59,59,71,141,142,124,59,59,59,128,124, + 141,115,128,105,105,105,170,170,193,142,174,170,170,170,29,170, + 117,112,170,29,29,193,29,193,174,142,46,172,46,231,231,117, + 235,142,46,58,46,46,37,37,174,202,141,193,128,170,29,141, + 133,142,193,193,141,141,197,44,242,142,193,172,197,172,197,197, + 26,58,141,206,84,206,172,84,133,253,172,206,172,172,206,206, + 96,235,58,58,172,49,58,84,238,85,58,172,197,29,58,84, + 253,112,58,58,58,58,72,135,0,135,244,58,203,58,115,58, + 245,129,205,29,6,35,35,6,6,233,35,35,233,35,233,233, + 233,35,233,9,233,233,233,233,35,233,9,233,233,33,80,108, + 108,6,108,6,6,6,108,154,154,154,244,33,28,245,245,202, + 77,77,77,77,77,77,246,77,77,77,246,77,77,246,121,121, + 77,194,107,235,133,184,121,121,121,66,66,66,66,156,66,156, + 228,156,104,156,104,156,104,156,104,47,242,29,21,21,27,85, + 85,130,51,30,104,156,156,214,199,79,159,104,156,104,104,104, + 104,104,239,104,104,239,104,104,73,104,104,104,104,104,104,104, + 104,104,104,104,104,104,104,104,104,104,104,104,104,239,214,183, + 242,72,170,124,52,212,212,212,117,196,231,128,128,212,128,92, + 26,196,146,92,92,124,59,59,235,72,212,124,92,92,128,92, + 26,115,170,170,170,170,170,117,26,196,231,170,231,242,170,117, + 193,84,174,170,174,105,174,174,242,96,26,46,26,141,197,197, + 26,253,183,117,26,117,26,235,242,152,193,193,170,242,141,193, + 26,142,170,193,26,44,26,197,26,253,141,46,172,197,172,63, + 133,96,235,84,96,49,238,89,89,142,96,84,84,84,84,96, + 96,135,49,58,63,63,58,84,112,84,115,244,142,172,142,84, + 245,235,115,196,58,244,244,84,245,135,115,58,58,244,196,196, + 0,154,29,205,108,6,6,6,233,6,6,233,233,233,233,233, + 233,233,35,9,9,9,233,9,233,233,233,33,33,233,233,33, + 33,154,108,108,108,6,108,154,108,154,154,154,245,245,0,240, + 43,77,246,43,77,246,43,246,246,246,246,246,77,246,77,77, + 77,77,107,26,29,184,77,121,77,121,121,121,121,121,121,121, + 156,156,156,156,228,156,228,156,121,85,216,0,152,253,245,0, + 0,0,242,214,214,54,79,85,213,85,27,54,95,54,27,54, + 156,104,104,104,156,104,104,156,104,156,104,156,104,104,104,104, + 104,156,104,104,104,104,104,104,104,104,156,104,156,228,176,183, + 229,142,141,124,92,92,92,92,174,115,231,92,92,212,212,92, + 26,96,231,146,146,212,200,32,63,89,212,92,52,128,128,124, + 197,115,117,174,146,105,170,170,26,142,242,141,170,141,170,170, + 26,96,193,172,172,141,197,193,117,142,117,172,117,231,124,52, + 26,202,217,197,141,141,197,26,174,115,193,198,170,130,141,193, + 26,115,170,29,193,72,44,26,235,253,242,44,235,235,197,172, + 235,216,216,115,216,152,253,238,235,238,206,206,172,206,190,84, + 238,96,84,58,58,206,206,84,96,44,135,203,58,196,58,84, + 115,135,58,244,244,58,196,96,245,44,115,244,244,58,196,142, + 152,133,198,29,154,6,6,35,35,233,233,35,233,35,233,233, + 233,233,233,233,233,9,233,233,9,233,233,233,233,33,233,33, + 33,33,33,233,108,108,154,154,190,245,190,240,152,202,0,112, + 43,77,246,246,43,77,246,43,246,246,246,246,246,246,246,51, + 106,77,107,235,151,30,121,106,121,77,106,121,121,121,121,121, + 156,121,66,121,156,51,95,51,208,253,0,0,0,0,0,0, + 0,0,253,85,202,238,238,253,245,0,202,238,238,0,152,89, + 54,51,156,104,104,156,156,156,156,156,156,104,156,156,156,104, + 156,104,156,156,104,156,156,156,156,156,104,156,156,104,214,183, + 144,49,231,92,124,212,212,124,117,84,141,212,212,128,212,124, + 46,238,231,146,212,212,59,59,26,202,174,128,92,92,128,124, + 26,196,146,105,128,212,105,146,117,142,193,170,170,170,170,170, + 26,135,170,193,29,170,170,193,242,238,141,63,141,13,26,46, + 117,89,217,193,170,170,193,193,117,89,29,170,29,170,141,193, + 235,89,235,115,115,253,89,89,238,202,193,172,172,172,151,172, + 216,216,152,0,0,96,89,115,202,142,44,206,40,206,135,253, + 245,253,72,58,58,190,58,84,72,112,58,206,58,58,240,84, + 202,96,203,190,58,244,58,84,115,206,58,58,58,115,58,244, + 245,108,29,29,154,6,6,6,6,154,35,233,35,233,35,233, + 233,233,233,35,9,233,233,233,9,233,233,233,9,233,33,33, + 33,33,33,33,6,108,6,154,40,15,245,245,245,245,152,115, + 43,77,246,43,43,43,43,246,43,43,246,246,246,43,246,246, + 106,77,194,63,151,219,77,106,121,121,121,106,181,121,121,121, + 121,51,41,41,41,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,245,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,41,51,156,51,30,156,156,121,156, + 121,156,156,156,156,156,156,156,156,156,156,156,156,156,131,157, + 144,72,84,151,151,129,44,151,63,63,85,129,84,85,44,133, + 96,96,193,193,117,27,117,26,96,72,26,133,133,80,133,85, + 96,112,44,44,151,135,133,85,63,89,44,85,235,44,133,235, + 238,142,44,44,151,96,44,235,96,96,235,235,85,96,44,85, + 96,96,193,133,193,96,135,112,72,115,96,135,96,135,135,63, + 238,253,89,89,216,245,245,0,152,245,202,142,96,142,96,216, + 0,0,0,0,238,26,236,152,152,115,202,202,142,89,152,216, + 216,245,89,152,115,202,142,202,142,202,115,253,245,152,115,115, + 142,142,115,245,115,253,115,216,202,202,15,115,152,245,152,115, + 202,103,198,103,154,6,6,154,233,35,6,233,233,233,233,233, + 233,233,233,233,9,9,9,233,233,9,233,233,233,233,233,233, + 9,233,33,33,33,154,108,154,28,245,115,245,245,202,245,245, + 43,43,246,246,43,43,43,43,43,246,43,43,246,51,77,50, + 118,73,121,26,96,194,246,171,106,246,106,121,106,121,121,181, + 208,54,41,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,47,54,129,54,156,156,156,156, + 156,156,156,121,121,156,156,156,156,121,156,156,156,156,214,176, + 144,72,130,217,199,242,217,199,26,96,205,144,199,130,21,199, + 26,216,183,21,217,47,199,79,235,142,21,188,27,130,27,21, + 96,142,130,21,27,193,27,27,96,142,130,130,130,205,27,27, + 142,85,79,86,54,130,130,27,96,96,130,130,27,205,27,21, + 85,213,54,54,140,133,103,27,85,253,27,27,21,205,27,187, + 202,152,85,216,152,216,238,152,245,0,112,133,205,205,125,133, + 152,152,152,238,236,236,26,216,216,216,205,130,85,216,245,245, + 0,0,216,216,0,85,103,29,202,89,205,154,133,133,205,205, + 202,202,133,205,85,129,133,129,202,202,133,137,135,129,137,112, + 152,29,29,29,108,154,35,233,233,220,6,35,233,233,233,233, + 233,35,233,233,233,233,233,233,233,233,173,233,233,9,233,33, + 233,33,33,33,33,33,9,203,152,115,245,245,115,202,245,152, + 0,115,58,234,86,246,43,246,43,43,246,43,43,246,156,163, + 148,95,54,44,242,241,106,106,246,121,171,121,106,171,121,208, + 54,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,135,115,245,108,156,51,121,30, + 208,54,121,156,156,156,121,121,156,121,121,121,121,121,214,183, + 217,72,193,217,199,130,199,27,26,63,193,27,27,117,27,183, + 157,85,130,27,27,65,27,27,85,89,130,27,130,65,27,27, + 238,96,29,130,27,133,130,130,238,142,130,130,130,26,130,130, + 238,235,79,21,79,65,130,130,96,85,130,205,130,133,130,130, + 96,238,208,214,54,65,103,130,85,202,130,130,130,205,130,205, + 85,152,238,96,236,89,44,213,253,152,85,205,205,133,26,205, + 216,152,96,238,216,238,85,216,0,216,216,216,216,216,216,216, + 0,0,0,0,0,0,213,85,202,216,213,112,85,137,133,133, + 202,112,133,137,129,129,129,85,196,244,133,129,85,129,129,240, + 115,29,198,29,108,35,103,35,6,233,154,6,6,35,233,9, + 233,233,35,35,233,173,233,173,233,233,9,233,233,233,233,9, + 233,233,233,33,33,33,9,9,9,115,115,216,245,115,245,245, + 0,115,58,58,6,234,43,246,43,246,43,43,51,246,66,241, + 116,43,38,235,85,73,121,106,121,106,121,121,121,121,208,105, + 253,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,245,245,240,125,130,239,54, + 133,202,140,156,121,121,156,121,121,121,156,121,156,156,131,157, + 157,235,205,199,199,193,199,27,26,26,26,27,199,65,27,217, + 26,213,199,27,217,205,199,127,96,238,21,217,27,26,27,130, + 72,236,242,130,27,133,27,130,72,238,130,130,130,133,130,130, + 112,85,21,21,86,133,130,130,85,235,205,130,27,65,205,130, + 235,238,221,162,79,205,130,130,135,216,103,130,130,65,130,130, + 96,253,85,235,96,216,85,133,96,216,205,130,27,112,85,85, + 216,216,238,96,152,238,26,89,216,216,216,202,253,253,216,89, + 216,0,245,0,152,115,152,0,216,216,96,202,253,129,129,129, + 142,202,133,205,85,129,133,190,202,202,129,137,96,129,151,112, + 202,103,198,130,108,35,154,6,6,6,233,220,233,35,35,35, + 233,233,9,35,233,233,9,233,33,233,233,233,173,233,233,233, + 233,9,33,233,33,33,233,233,220,191,28,245,253,245,245,115, + 58,115,115,15,58,234,43,43,43,246,43,77,246,77,66,66, + 83,29,243,240,142,184,66,121,66,246,246,69,206,187,86,202, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,15,202,0,133,208,129, + 15,0,129,54,156,121,156,156,156,104,121,121,121,121,214,157, + 177,96,133,27,199,130,27,70,26,26,193,27,199,130,199,199, + 26,96,130,27,199,65,21,150,235,72,54,158,27,133,27,199, + 96,85,130,130,199,85,27,130,96,96,130,130,130,26,130,130, + 85,85,79,79,79,65,130,130,85,235,130,205,130,130,130,205, + 235,63,54,54,79,65,103,205,85,238,130,130,130,205,130,205, + 85,142,205,238,152,115,202,96,202,253,205,205,85,216,216,0, + 0,89,152,0,0,245,112,0,0,0,216,253,85,133,253,0, + 0,0,112,112,238,202,85,202,253,253,216,0,216,216,96,133, + 202,202,129,133,240,85,129,85,202,112,133,129,112,133,129,96, + 142,29,130,130,108,6,154,233,220,220,6,220,233,154,154,35, + 154,6,233,233,233,6,9,9,233,33,233,233,33,233,9,233, + 233,233,233,9,233,233,9,9,233,9,9,203,253,245,245,152, + 58,244,115,115,115,58,170,91,43,246,43,43,246,246,77,107, + 22,235,27,235,72,107,106,86,29,205,152,152,142,83,127,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,245,0,245,245,245,115,0, + 0,245,245,202,125,86,140,86,86,130,121,121,121,121,176,144, + 217,89,72,26,26,236,235,235,238,96,238,235,133,253,85,26, + 238,89,213,85,26,236,235,133,238,85,85,85,26,85,85,85, + 238,96,213,85,133,85,235,85,89,89,85,133,133,85,133,133, + 202,213,130,103,130,135,133,133,96,238,133,85,133,85,133,133, + 238,142,221,21,79,133,193,205,96,202,65,205,133,85,205,205, + 96,89,96,253,216,0,0,253,216,216,26,238,238,89,216,0, + 152,216,0,0,0,0,0,0,0,216,152,85,135,44,96,152, + 0,0,135,133,133,112,142,216,0,0,0,216,216,216,213,152, + 202,202,85,112,96,240,112,202,202,245,112,85,202,96,240,202, + 202,205,29,29,154,154,35,154,6,220,233,220,220,6,33,233, + 233,220,220,220,154,6,220,154,33,220,220,233,233,233,233,233, + 9,233,233,233,9,233,233,233,33,233,9,9,28,115,245,202, + 190,244,244,9,233,33,234,80,43,43,95,246,43,246,51,104, + 199,70,26,235,89,131,118,193,0,0,0,0,216,63,174,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,245,245,245,245,245,245,0, + 245,245,0,0,0,202,245,33,28,142,142,86,156,121,159,158, + 248,216,70,92,212,212,212,124,146,238,146,212,124,124,92,59, + 52,216,124,59,59,92,59,59,70,216,32,59,59,59,92,59, + 174,253,128,174,212,70,174,70,242,238,231,13,231,231,231,146, + 26,238,231,212,59,32,212,13,174,238,70,174,231,70,70,70, + 242,72,242,70,70,70,231,212,117,196,231,128,217,200,157,183, + 236,216,117,236,216,0,0,152,152,216,49,72,238,49,216,89, + 216,0,0,0,0,0,0,0,0,0,89,238,63,63,0,245, + 96,96,65,89,152,0,0,0,0,245,216,213,65,216,216,216, + 253,213,65,65,215,65,65,65,202,115,115,216,245,115,152,115, + 115,205,29,29,9,220,6,220,6,220,220,220,220,6,154,154, + 220,9,9,191,154,220,191,220,220,220,220,33,33,9,233,9, + 233,233,9,233,233,233,233,9,233,233,233,9,9,129,245,115, + 244,58,58,40,234,114,210,86,43,91,43,246,43,43,14,183, + 85,65,117,44,216,70,52,26,0,0,0,0,0,216,245,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,245,245,245,245,0,245,245, + 245,245,0,0,0,0,0,202,115,245,129,129,54,181,131,159, + 183,89,13,92,146,231,212,146,217,89,70,212,92,247,92,124, + 52,216,92,212,92,247,92,212,52,152,71,59,59,59,124,124, + 217,238,128,174,174,170,170,231,199,142,13,46,13,46,13,13, + 27,85,231,46,13,13,13,13,199,58,70,128,146,117,128,128, + 199,238,22,32,92,117,128,146,199,96,217,183,177,183,183,158, + 235,89,238,216,0,0,0,152,238,152,247,247,89,216,0,216, + 152,152,0,0,0,0,152,235,216,152,236,49,238,89,152,152, + 152,133,236,63,236,152,152,216,142,238,4,122,97,238,89,65, + 253,133,65,122,97,4,215,221,115,235,115,245,152,72,115,84, + 152,187,125,27,6,220,220,220,220,35,233,233,220,220,6,233, + 33,33,6,33,6,233,33,220,33,33,33,233,233,233,233,233, + 233,233,233,233,9,233,233,233,9,233,233,233,33,9,202,202, + 244,115,28,203,108,234,43,91,91,91,95,93,87,43,47,199, + 70,199,70,85,89,70,216,46,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,245,0,0,0, + 245,245,0,0,0,0,0,245,245,28,253,129,208,30,176,248, + 183,253,52,200,146,231,231,146,52,253,231,92,92,212,212,212, + 199,89,128,52,92,92,92,146,199,89,71,32,92,92,212,212, + 199,96,146,174,146,170,231,141,217,85,117,231,231,231,46,231, + 128,85,247,13,236,37,49,13,174,96,174,117,231,46,231,13, + 174,96,70,52,52,46,13,49,174,96,117,70,117,70,52,70, + 238,89,238,216,0,0,216,236,216,216,247,32,152,216,0,89, + 238,0,0,0,0,0,0,236,242,216,152,152,0,152,0,0, + 0,0,0,152,216,0,152,96,85,133,215,122,97,238,65,221, + 142,85,215,122,1,2,221,193,202,133,152,142,115,89,72,96, + 152,130,178,130,133,129,112,129,112,112,112,112,112,112,85,96, + 112,142,85,96,96,85,96,238,96,96,238,240,112,112,112,112, + 196,112,240,85,112,112,112,85,240,96,96,112,96,112,85,135, + 202,115,115,115,58,80,69,91,91,91,93,140,87,51,158,65, + 217,70,70,235,216,236,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,245, + 0,0,0,0,0,0,0,0,0,0,0,0,133,140,47,158, + 183,213,13,59,212,146,212,146,128,72,200,167,212,212,212,124, + 212,72,128,212,212,212,212,92,128,202,92,247,124,146,231,13, + 52,112,231,37,231,37,37,37,229,238,13,37,13,146,231,37, + 217,96,117,8,99,74,99,231,174,44,231,46,231,46,117,70, + 199,238,200,231,70,70,117,231,26,89,216,238,117,199,174,70, + 236,89,72,72,236,236,49,152,152,152,63,13,37,49,49,236, + 89,152,0,0,0,0,0,0,213,152,152,0,0,0,0,0, + 0,0,0,152,0,72,89,152,0,44,216,65,215,72,49,26, + 58,133,115,196,238,253,253,26,245,235,152,89,152,152,115,44, + 245,198,103,187,17,17,17,17,17,17,17,17,17,17,17,17, + 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17, + 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17, + 245,0,0,245,244,58,58,58,80,234,69,201,54,199,236,199, + 238,213,216,85,253,0,0,0,238,152,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,245,0,0,0,0,0,0,0,245,245,85,177,248, + 183,238,117,124,124,124,124,92,52,89,52,32,59,124,92,146, + 70,72,128,212,231,146,146,146,212,238,70,212,146,13,13,37, + 128,112,231,37,13,37,49,37,174,235,13,236,37,68,59,49, + 199,96,92,146,49,13,8,236,174,85,117,236,46,46,117,70, + 70,85,183,183,236,49,37,49,37,89,146,49,89,231,117,46, + 216,213,216,0,0,216,152,0,0,0,0,0,216,72,49,152, + 0,0,0,0,0,0,0,0,0,0,37,152,0,0,0,0, + 0,0,0,0,0,216,89,152,216,142,245,152,115,49,72,26, + 142,133,152,115,49,253,115,197,253,26,89,49,115,152,72,84, + 245,198,198,130,188,54,176,54,214,131,214,214,214,176,214,158, + 214,131,176,176,159,159,159,159,159,176,78,176,214,214,131,214, + 214,176,214,131,176,95,78,214,159,159,248,17,159,17,17,17, + 0,0,0,0,0,245,115,115,203,115,203,217,183,236,236,236, + 216,216,26,44,253,0,0,0,0,0,0,0,0,245,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,245,0,0,0,0,0,0,0,216,0,47,158, + 157,89,13,146,212,212,146,92,128,89,52,59,212,212,247,92, + 128,72,231,146,212,212,212,49,128,72,128,13,212,37,13,37, + 229,96,231,37,37,37,37,37,174,85,13,49,37,13,212,13, + 128,49,59,55,74,71,247,49,117,85,117,199,217,70,243,111, + 70,89,153,81,236,238,49,8,37,152,166,8,42,41,41,67, + 117,152,0,0,0,0,216,72,0,0,0,0,152,13,49,152, + 0,0,0,0,0,0,0,0,0,0,0,0,0,152,0,0, + 0,0,0,0,0,0,216,63,238,26,152,245,152,115,115,117, + 253,235,49,63,49,152,72,235,245,44,89,115,72,72,152,44, + 245,198,113,198,130,170,130,242,235,26,46,174,105,105,105,27, + 199,117,229,217,144,52,217,177,177,242,130,130,63,46,235,174, + 105,105,174,229,144,117,199,52,199,144,177,217,177,177,78,183, + 0,0,0,0,0,0,0,0,115,115,15,152,152,89,216,213, + 152,0,152,152,253,0,0,0,152,0,0,115,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,177,159, + 183,238,117,212,146,146,212,146,128,72,124,124,212,146,146,146, + 70,49,231,13,146,13,146,37,128,142,146,146,13,37,37,37, + 128,253,231,37,37,49,37,49,174,96,13,49,37,49,231,13, + 199,84,92,120,68,120,179,13,174,85,183,67,41,67,41,148, + 158,236,160,88,8,8,152,8,231,72,146,49,183,183,70,199, + 85,0,0,26,216,89,89,70,152,0,0,0,0,152,152,0, + 0,0,0,0,0,0,0,0,0,0,89,152,152,0,0,0, + 0,253,0,0,0,0,0,235,235,253,0,0,0,0,245,96, + 253,133,49,63,49,152,115,197,115,172,89,49,49,115,49,172, + 253,198,198,198,202,152,135,0,0,0,0,0,216,84,245,245, + 245,245,152,245,151,0,0,245,245,115,112,0,245,0,245,0, + 216,135,0,0,0,245,245,15,44,0,0,0,0,0,152,242, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,152,0,245,0,0,0,152,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,245,0,245,217,158, + 157,72,46,212,92,92,92,92,128,89,52,146,13,124,146,146, + 231,112,32,59,146,212,212,13,174,96,70,13,146,236,37,37, + 174,96,141,37,37,37,13,37,117,96,117,37,37,13,231,37, + 174,151,92,59,247,8,37,49,117,85,183,199,70,72,153,218, + 199,236,110,111,49,37,238,72,70,72,152,152,238,0,216,213, + 216,0,152,89,216,216,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,89,0,152,65,0,0,0,0,0, + 0,0,152,152,152,89,152,0,245,89,0,0,0,0,0,152, + 0,96,37,37,89,152,72,235,115,96,89,72,115,72,115,96, + 245,198,178,198,253,96,129,0,0,0,0,0,202,151,0,245, + 245,0,245,235,133,245,245,0,0,85,190,0,0,245,0,0, + 202,151,0,0,245,0,245,46,151,0,245,245,245,0,112,242, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,245,0,245,0,245,144,248, + 157,72,236,146,231,146,92,212,70,72,13,212,146,146,231,92, + 26,96,128,212,146,212,212,212,70,142,70,212,146,231,146,231, + 70,72,117,212,71,13,231,146,117,72,117,13,92,146,231,146, + 117,84,231,13,26,13,117,231,117,85,117,117,199,117,70,199, + 117,238,128,128,70,70,231,46,216,0,0,0,0,152,0,0, + 0,0,152,152,152,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,216,0,152,0,0,245,0,0,0, + 0,0,0,152,152,89,152,0,0,0,0,0,0,0,0,152, + 0,245,152,115,89,115,89,96,115,72,115,72,89,89,253,96, + 202,198,198,142,235,135,240,0,245,245,245,0,85,151,245,245, + 0,245,245,46,133,245,245,245,245,129,135,245,245,245,245,0, + 85,129,245,0,245,245,245,26,133,245,245,245,245,115,26,29, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,245,0,0,0,144,248, + 183,96,236,212,212,92,92,146,174,238,26,59,212,212,212,59, + 117,72,231,212,212,146,146,146,174,142,231,146,13,49,37,37, + 174,72,243,209,74,49,37,117,117,213,13,236,231,46,46,37, + 117,84,63,89,72,238,72,89,117,238,26,49,72,238,236,236, + 26,238,117,236,49,49,89,89,89,152,89,0,0,0,152,216, + 152,152,0,152,152,0,152,0,0,0,0,0,0,0,0,0, + 0,0,0,0,152,72,152,0,0,0,0,0,0,0,0,0, + 0,0,0,152,152,216,49,152,0,0,0,0,0,0,0,85, + 115,245,245,152,152,152,152,63,202,96,152,115,89,115,89,142, + 115,113,198,202,235,129,129,245,245,245,0,0,44,151,245,245, + 245,0,15,193,133,0,245,245,0,135,129,0,0,245,0,0, + 84,151,245,245,245,245,15,193,193,0,245,245,245,253,26,130, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,229,22, + 157,89,72,146,231,231,212,231,231,72,49,146,231,231,13,146, + 46,89,128,32,231,146,128,231,46,72,46,231,117,13,13,13, + 117,72,52,186,243,141,13,46,46,253,46,37,13,117,46,46, + 46,238,235,236,49,236,236,236,26,72,26,238,236,49,236,238, + 236,216,236,236,46,46,236,46,46,216,152,0,216,216,152,72, + 238,72,216,216,72,152,152,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,152,0,152,152,0,0,0,0,0,0,0,0,0,0,235, + 202,253,0,152,152,72,89,72,115,96,152,152,89,89,115,142, + 115,198,105,202,44,135,135,0,0,245,245,245,44,129,245,245, + 245,245,253,242,133,245,245,245,245,190,190,0,0,245,245,245, + 44,151,245,245,245,245,115,242,133,245,245,245,15,202,117,29, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,216,89, + 152,216,0,216,0,152,216,89,0,0,216,216,216,72,216,0, + 0,216,152,89,152,89,89,89,216,0,216,152,89,216,216,216, + 253,245,72,115,238,89,253,216,0,0,245,152,216,152,89,0, + 0,152,152,115,89,89,152,245,152,216,238,216,0,216,0,152, + 0,216,152,0,0,0,0,216,216,0,152,152,216,152,0,236, + 89,89,89,72,152,152,152,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,245,245, + 0,0,245,0,0,0,0,245,245,245,0,152,152,245,0,0, + 245,202,112,245,133,129,129,245,0,0,245,0,85,151,245,245, + 245,245,245,242,133,245,245,245,245,85,129,245,0,0,245,0, + 44,151,245,245,245,245,245,242,133,245,245,245,0,202,26,130, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,216,52, + 128,231,231,231,174,146,174,146,174,128,128,52,52,52,52,52, + 52,52,177,177,177,124,177,177,200,200,157,124,177,177,157,177, + 52,52,124,177,177,200,177,157,200,157,157,200,183,177,52,177, + 200,177,200,157,157,157,200,177,128,26,235,117,26,238,89,70, + 117,70,52,52,52,199,52,52,128,46,216,0,152,0,0,0, + 152,152,0,152,89,89,152,0,0,0,0,0,0,0,0,89, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96, + 0,152,152,72,245,216,0,0,63,0,0,0,0,152,152,141, + 117,117,26,46,46,46,235,46,235,46,63,63,49,49,89,72, + 72,49,72,0,44,135,240,245,0,0,245,245,44,151,245,15, + 245,245,15,242,80,245,245,245,15,240,190,0,0,0,245,0, + 85,137,245,245,245,245,245,242,137,245,245,245,245,202,26,29, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,186, + 131,248,131,248,22,22,157,183,157,157,157,157,157,176,157,22, + 157,248,22,22,22,78,78,78,176,176,22,22,22,157,22,22, + 131,22,131,183,22,22,22,22,22,22,248,22,248,248,248,176, + 22,176,183,22,22,22,22,157,70,117,217,144,117,72,26,26, + 105,144,144,78,176,157,183,176,174,85,238,72,152,0,152,0, + 0,152,0,0,152,216,238,63,0,0,0,0,0,0,0,0, + 0,0,142,142,0,0,0,0,0,0,0,0,0,0,84,72, + 152,0,0,44,242,144,105,105,229,0,0,0,0,0,216,133, + 105,47,177,177,144,144,229,144,229,144,144,144,229,105,229,229, + 229,188,144,245,133,129,129,0,0,0,245,0,44,129,245,245, + 245,245,245,117,133,245,245,245,0,129,129,245,0,0,245,245, + 44,129,15,245,245,245,15,117,80,245,245,245,245,202,117,29, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,238,17, + 54,176,176,248,176,248,176,131,176,157,131,131,157,176,78,78, + 78,78,78,177,144,144,229,144,144,229,105,130,229,229,78,78, + 176,176,157,78,229,144,78,177,78,78,78,177,177,177,177,144, + 52,78,78,177,78,176,176,47,217,177,78,229,26,216,152,216, + 96,238,235,128,144,177,177,174,26,236,216,0,89,89,152,0, + 0,0,89,216,96,89,216,0,0,0,0,0,0,0,0,0, + 115,238,216,0,0,0,0,0,0,0,0,0,0,152,0,245, + 253,193,27,176,157,176,22,229,253,0,0,245,0,216,216,235, + 63,105,47,176,131,131,131,131,176,176,131,95,95,176,95,95, + 95,95,176,245,133,85,190,0,0,0,0,0,96,190,245,245, + 245,245,245,242,137,245,245,245,245,85,190,0,0,0,0,0, + 96,190,245,245,245,245,245,242,151,245,245,245,245,202,26,29, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,152,0,0, + 72,174,253,0,0,170,89,0,235,235,0,245,235,152,245,0, + 96,235,142,0,152,72,72,89,49,238,63,37,235,63,236,72, + 46,29,112,245,72,152,245,0,0,0,0,245,245,0,26,245, + 229,44,245,0,70,238,199,183,253,0,0,0,0,0,0,0, + 152,115,245,245,245,202,245,0,152,152,0,0,0,0,0,0, + 152,152,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,245,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 245,0,152,115,245,115,152,0,0,0,0,216,0,0,0,236, + 216,0,202,89,115,115,115,115,80,84,142,49,108,29,115,72, + 58,105,229,108,193,178,178,79,188,188,47,187,198,79,47,47, + 47,47,178,29,188,176,176,78,78,178,178,79,188,188,47,187, + 198,79,47,47,47,47,178,29,188,176,176,78,78,47,133,176, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 135,144,135,0,0,229,49,245,44,197,0,0,193,115,0,0, + 197,44,135,216,72,26,117,231,70,174,70,174,70,174,70,70, + 193,105,135,216,235,216,130,0,152,0,152,152,0,0,117,0, + 78,130,253,0,0,85,85,216,213,238,216,0,0,216,216,0, + 0,0,0,0,0,238,0,0,0,0,0,0,0,0,0,216, + 152,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,245,0,0,0,0,0,0,0,0,0,152,235,72,152,89, + 96,0,245,152,216,89,84,63,84,0,245,152,240,238,115,197, + 142,133,133,190,58,205,29,193,193,133,242,44,96,130,29,242, + 242,130,26,84,198,174,105,105,105,205,29,193,193,133,242,44, + 96,130,242,29,242,130,193,63,198,174,105,105,105,130,63,144, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 242,144,151,0,0,78,96,0,174,26,0,0,170,89,0,0, + 26,151,142,216,96,117,242,174,174,128,229,229,174,174,174,174, + 193,105,135,253,26,152,216,152,89,89,89,0,0,0,70,152, + 78,130,115,0,0,85,85,0,216,216,216,0,0,216,0,0, + 0,0,0,0,0,238,0,0,0,0,0,0,216,152,152,152, + 152,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 245,202,202,0,0,0,0,0,0,245,235,216,142,26,238,133, + 96,0,0,0,115,253,216,26,205,152,0,115,85,172,72,130, + 202,133,29,85,133,242,29,130,130,242,151,151,235,198,27,105, + 130,133,28,242,229,144,217,144,130,29,29,130,130,242,151,151, + 235,198,27,174,130,133,112,242,229,144,144,144,130,193,242,144, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,152,0,0,0,0,0, + 174,177,137,245,0,183,49,245,174,174,245,0,229,96,0,0, + 193,44,58,96,44,242,130,174,27,199,144,177,144,144,177,177, + 29,174,190,84,242,216,0,0,0,0,152,0,245,245,117,0, + 157,130,115,0,0,85,85,216,213,213,0,216,0,0,0,238, + 85,152,152,0,245,0,0,152,0,152,216,89,89,152,152,89, + 152,152,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,245,202,142,133,0,0,0,142,198,193,193,63,170, + 0,0,0,0,0,0,0,89,0,0,245,115,0,202,49,170, + 196,0,245,245,44,129,84,152,202,202,142,96,115,85,0,0, + 0,245,245,242,137,245,115,0,0,129,84,152,202,202,142,96, + 115,190,0,0,0,245,245,242,151,0,152,0,245,216,96,29, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,152,0,0,0,0,0,0,0, + 174,78,133,0,0,22,26,245,174,174,0,0,144,63,245,0, + 197,141,112,172,193,174,105,105,229,144,78,78,78,78,144,177, + 130,229,135,151,130,142,0,0,0,0,0,0,0,0,117,245, + 157,130,202,0,0,85,238,216,216,89,0,245,216,0,216,0, + 152,216,0,0,0,0,0,0,0,0,152,216,216,0,0,216, + 236,89,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 245,0,245,216,198,238,142,115,245,216,205,198,105,105,235,242, + 0,0,0,0,245,245,245,245,0,0,115,245,245,96,129,27, + 196,0,0,245,202,29,29,96,96,235,63,142,96,80,0,0, + 0,0,0,130,151,0,0,0,0,29,29,96,96,235,84,72, + 112,133,0,0,0,0,245,242,151,0,0,0,0,0,26,133, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 174,157,29,115,0,22,26,0,174,174,0,0,144,49,245,0, + 242,117,142,84,29,29,27,27,27,188,78,78,177,78,78,177, + 105,229,85,172,130,253,96,117,242,26,117,242,27,70,130,26, + 157,242,202,245,238,133,26,238,216,85,235,89,216,213,216,0, + 0,0,0,0,0,0,0,0,0,152,152,152,89,89,216,152, + 238,0,0,0,0,0,0,0,0,0,0,0,0,0,0,216, + 253,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 245,245,80,151,133,0,240,0,29,44,188,21,198,193,96,115, + 0,0,0,245,133,29,29,245,0,0,115,245,129,96,197,27, + 58,0,0,245,15,133,29,0,0,0,0,0,0,133,245,0, + 0,28,245,117,130,245,245,245,202,29,133,245,0,0,0,0, + 245,133,245,0,0,28,245,242,130,245,245,245,202,96,26,133, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 242,176,178,245,0,22,117,0,170,128,0,0,177,235,15,0, + 174,174,44,206,133,105,105,27,144,47,54,78,47,47,47,78, + 199,229,135,151,130,96,216,238,85,85,85,85,85,85,117,238, + 22,29,142,216,0,85,117,236,85,70,235,85,89,89,0,0, + 46,0,0,0,0,0,0,0,89,89,216,152,216,89,72,72, + 152,0,0,0,0,0,0,0,0,0,0,0,0,216,238,216, + 0,0,0,0,0,0,0,0,0,0,0,0,0,245,0,0, + 0,0,154,198,105,130,79,135,130,26,235,115,152,0,0,0, + 0,0,245,245,151,133,198,29,245,0,245,245,240,96,193,229, + 240,0,245,115,15,133,137,0,0,0,0,0,15,133,0,0, + 0,15,15,242,130,245,0,245,202,137,133,0,0,0,0,0, + 15,133,245,0,0,202,245,130,130,245,0,0,202,44,44,193, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,245,0,0,0,0,0,0,0,0,245, + 63,144,178,244,28,22,141,0,130,128,245,0,229,63,245,0, + 229,229,44,151,29,130,105,178,144,144,176,78,78,78,47,78, + 177,174,240,151,198,85,152,0,152,0,216,216,216,216,26,152, + 248,26,202,0,0,85,117,216,117,27,213,213,0,216,216,213, + 117,216,0,0,0,0,0,0,0,152,0,89,216,0,0,216, + 152,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,245,0, + 0,0,137,130,205,44,133,44,202,245,0,0,152,142,0,0, + 0,245,202,0,129,133,198,105,191,245,245,253,190,112,193,229, + 244,245,245,15,15,133,137,0,0,0,0,0,245,113,240,240, + 240,191,15,130,79,133,115,15,205,80,151,0,0,0,0,0, + 245,113,240,240,240,129,245,242,79,133,115,15,205,235,44,44, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 253,174,125,202,0,22,117,0,174,174,0,0,144,63,245,0, + 128,144,206,151,198,27,178,188,79,47,78,176,86,78,177,177, + 52,27,96,80,105,96,216,0,0,152,245,0,0,0,26,216, + 111,193,142,253,115,238,26,216,85,85,213,216,216,216,238,96, + 235,96,245,245,245,0,216,245,0,0,89,46,89,152,238,152, + 0,0,0,0,0,0,0,0,0,152,152,152,0,0,0,0, + 0,0,0,253,0,0,0,0,0,0,0,0,0,0,0,245, + 0,0,245,0,0,0,115,202,245,253,115,245,245,245,0,152, + 0,0,191,151,142,96,245,245,245,0,253,115,0,58,29,105, + 151,0,0,15,245,137,151,0,142,89,96,0,245,133,216,0, + 216,245,245,26,133,72,216,152,253,151,151,0,142,89,96,0, + 245,133,216,245,245,245,15,117,133,72,253,152,115,142,235,151, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 89,174,125,142,0,22,26,245,130,229,0,0,144,84,245,245, + 170,144,151,151,198,27,188,229,105,229,176,188,176,86,47,47, + 177,174,96,133,198,112,0,0,133,245,245,245,44,253,26,89, + 248,193,196,29,29,85,26,85,213,238,238,238,0,0,0,0, + 216,238,0,0,238,245,0,0,0,216,85,133,235,72,0,0, + 0,0,0,0,0,0,0,0,0,0,152,0,0,0,0,216, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,245,0,0,202,245,190,129,238,135,15,0,0,245,152, + 0,245,202,21,187,130,125,125,0,0,202,202,0,58,198,229, + 190,0,0,15,245,137,151,0,216,152,0,0,245,129,0,245, + 0,0,245,46,142,245,245,115,152,137,151,0,216,152,0,0, + 245,129,0,0,0,0,245,235,142,245,245,245,115,253,85,44, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 245,242,178,202,0,157,231,0,174,229,0,0,144,235,15,245, + 242,229,151,29,29,21,188,188,188,229,144,188,108,78,47,78, + 52,105,240,29,178,72,0,245,130,115,245,245,130,89,235,96, + 111,193,142,130,29,84,235,133,96,238,238,0,0,0,0,0, + 216,245,0,245,202,0,133,115,142,240,240,130,133,0,216,0, + 0,0,0,0,0,0,0,0,0,0,152,152,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,245, + 0,245,191,245,0,245,245,0,115,245,245,253,0,0,245,245, + 196,245,28,113,198,79,21,178,0,0,115,142,0,0,198,170, + 135,0,115,245,245,151,129,0,0,0,0,0,245,151,245,0, + 245,0,245,0,245,0,0,0,0,151,129,0,0,0,0,0, + 245,151,0,245,245,0,245,0,245,0,0,0,0,0,0,245, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 245,170,178,202,0,183,193,245,174,174,0,0,229,63,245,0, + 174,177,151,29,198,178,188,188,86,86,176,131,86,178,78,176, + 157,144,96,113,21,196,245,0,245,245,245,245,245,245,235,152, + 111,130,244,29,29,84,235,152,152,216,216,0,0,0,0,0, + 0,0,0,0,0,245,47,79,96,96,112,105,238,152,0,152, + 152,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 135,202,245,0,0,0,0,0,0,0,0,0,0,0,245,245, + 245,191,154,21,178,178,178,178,15,0,15,142,0,245,178,105, + 190,0,196,245,245,115,115,245,245,0,0,245,245,202,15,245, + 245,245,245,0,0,0,0,0,0,115,115,245,245,0,0,245, + 245,202,245,245,245,245,0,0,0,0,0,0,0,0,0,216, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 245,174,105,196,142,157,117,245,130,128,152,142,235,96,245,115, + 229,177,197,29,198,178,188,188,47,86,54,188,176,176,176,176, + 177,144,172,113,178,202,245,202,245,0,0,115,245,152,235,112, + 243,242,84,130,154,112,235,0,85,216,0,0,0,0,0,0, + 0,0,0,0,0,0,213,213,0,0,0,216,152,152,0,0, + 0,0,0,0,0,0,0,0,152,0,0,0,0,0,0,0, + 0,26,0,0,152,0,0,0,0,0,0,0,0,0,0,0, + 142,245,15,245,0,0,0,0,0,0,0,0,0,0,0,235, + 142,115,29,178,187,178,69,188,245,0,202,196,245,245,105,27, + 151,15,244,115,244,190,240,28,244,244,203,244,58,190,244,191, + 244,244,244,244,244,244,196,28,115,190,240,28,244,244,203,244, + 58,40,244,191,244,244,58,244,244,244,196,28,115,115,115,196, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 142,229,125,135,172,157,46,245,44,84,245,115,115,115,15,245, + 174,144,197,137,29,198,105,178,188,47,47,105,176,54,176,78, + 177,144,172,29,187,142,202,85,245,245,0,245,152,89,89,202, + 174,206,72,58,29,142,235,0,238,238,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,152,0,0,0,216,0,0,0,0,0, + 0,152,0,0,0,0,0,0,0,0,0,0,0,15,245,0, + 0,253,245,245,0,0,0,0,0,0,0,0,0,0,245,245, + 202,245,245,44,105,187,105,29,15,0,202,244,115,15,105,105, + 151,15,244,28,28,203,58,203,28,196,28,240,244,244,244,28, + 244,244,244,28,244,244,244,240,202,203,58,203,28,196,28,240, + 28,244,244,28,28,28,244,28,244,244,244,240,28,112,202,129, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 238,174,105,235,242,63,72,115,72,72,142,89,253,245,245,0, + 242,177,151,244,40,29,198,198,229,86,78,86,86,47,178,144, + 157,177,151,133,198,115,115,96,142,253,202,89,152,130,217,229, + 157,217,240,85,108,135,44,238,202,216,216,216,216,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,152,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,29,193,235, + 245,115,245,0,0,0,0,0,0,0,0,0,245,0,0,0, + 96,28,115,15,29,198,29,151,245,0,245,202,173,15,105,198, + 151,112,191,173,115,115,15,202,244,129,190,203,28,28,28,244, + 28,240,191,190,191,191,190,190,190,115,15,202,244,129,190,203, + 244,28,28,244,240,240,191,190,191,191,190,190,190,191,190,190, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 89,152,0,245,235,135,235,96,202,115,202,245,245,245,245,152, + 49,235,115,0,152,115,115,202,196,240,135,84,63,206,142,115, + 46,63,115,245,202,245,245,216,152,253,253,152,152,27,159,176, + 127,131,245,152,245,245,202,96,89,238,216,216,216,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,152,0,0,152,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,115,152,245, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,115, + 0,202,244,202,135,135,84,135,0,245,245,15,15,15,115,49, + 244,28,191,28,191,9,173,191,173,173,203,244,202,196,240,220, + 33,129,9,190,190,40,9,40,9,9,173,191,173,173,28,28, + 202,196,240,9,33,129,40,190,190,40,9,190,9,191,40,129, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,152, + 96,177,177,157,70,177,177,177,52,157,174,52,52,52,229,52, + 242,52,177,52,128,128,128,174,229,128,128,128,128,174,174,117, + 117,174,242,26,174,117,174,242,242,242,229,242,236,26,117,193, + 193,193,72,96,193,26,238,238,89,152,89,238,142,96,89,216, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,152,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,245,0,0,245, + 245,245,245,245,245,115,28,115,115,28,115,15,15,15,245,202, + 245,15,28,191,28,28,203,15,28,112,28,191,191,28,202,115, + 142,58,129,137,9,9,137,220,137,28,203,15,28,112,203,191, + 191,28,202,89,58,58,191,137,9,9,137,80,40,137,220,80 + }; + +static char hdl_large_off[] = { + 132,132,132,132,132,132,132,132,132,132,132,132,132,75,132,75, + 132,75,132,75,132,75,75,75,75,75,75,75,75,75,75,75, + 75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75, + 75,75,75,75,75,75,75,252,252,252,252,75,75,75,75,252, + 252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252, + 252,252,252,252,252,180,252,252,252,252,252,180,252,252,180,252, + 252,180,180,180,180,180,180,180,180,180,180,5,180,180,5,180, + 5,180,5,180,5,180,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,134,232,232,232,5,5,134,5,5,134,232,232, + 232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232, + 232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232, + 232,204,204,204,204,204,204,204,204,204,204,232,232,232,232,232, + 232,232,232,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,3,5,3,5,3,5,3,98,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,98,98,3,3,3,3,3, + 98,98,98,98,98,98,98,98,3,252,252,252,252,252,3,3, + 3,3,3,3,3,3,3,3,3,192,3,3,3,3,3,3, + 3,3,192,3,192,3,192,3,192,192,192,192,192,192,98,98, + 132,132,132,132,132,132,132,132,132,132,132,132,132,132,75,75, + 75,75,75,75,75,75,132,132,132,132,75,75,75,192,75,192, + 75,192,75,192,75,75,75,192,75,192,75,192,75,192,75,192, + 75,192,232,75,192,252,232,75,75,75,75,252,252,252,232,75, + 75,75,75,75,75,75,75,75,75,75,75,75,192,232,252,252, + 232,232,180,3,180,3,252,232,3,180,180,252,180,180,3,180, + 180,180,3,3,3,232,232,232,232,232,232,232,232,5,180,204, + 180,232,232,204,204,232,134,232,232,232,232,232,232,232,232,232, + 232,232,232,232,204,204,232,232,232,204,204,204,204,204,204,204, + 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, + 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, + 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, + 204,204,204,204,204,204,204,204,204,204,204,232,232,232,5,5, + 232,232,232,5,5,5,5,76,5,5,5,5,5,3,5,3, + 5,3,3,3,192,3,3,3,3,3,3,3,3,3,3,3, + 192,3,192,192,192,3,192,192,252,192,192,192,3,192,192,192, + 3,192,3,192,192,192,192,192,192,192,192,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,132,192,252, + 132,132,132,75,132,75,132,132,132,132,132,192,132,192,132,75, + 75,75,75,75,75,75,75,75,75,75,192,75,75,75,75,75, + 75,75,75,75,192,75,75,75,75,232,75,232,75,232,75,232, + 75,75,75,75,75,75,75,75,192,75,75,75,75,75,75,192, + 75,232,192,75,232,192,232,75,232,232,75,75,75,75,192,75, + 252,252,252,252,180,252,252,232,252,232,232,252,3,180,232,232, + 232,232,232,232,3,3,3,232,3,3,232,3,5,232,232,232, + 232,5,5,232,232,204,204,204,232,232,232,232,232,232,232,232, + 232,232,204,232,232,204,204,204,204,204,204,204,204,204,204,204, + 204,232,204,204,204,204,204,204,204,204,204,204,204,204,204,204, + 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, + 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, + 204,204,204,232,204,232,232,204,204,232,204,204,204,204,232,3, + 5,5,232,232,5,192,204,3,192,5,192,3,5,192,5,192, + 5,3,5,5,3,5,3,5,192,192,3,3,3,3,3,3, + 192,3,3,3,192,3,192,192,3,3,192,3,192,3,192,3, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, + 132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132, + 132,132,132,132,132,132,75,75,75,75,75,75,75,75,75,75, + 75,75,75,75,75,75,75,232,75,75,75,75,75,232,75,75, + 75,75,192,75,75,75,75,75,75,232,75,192,75,75,75,75, + 75,232,75,75,75,75,75,192,75,75,192,232,75,232,75,252, + 252,252,252,252,252,252,252,75,252,252,252,252,252,232,3,252, + 252,252,252,252,232,232,232,252,232,232,180,232,232,3,180,232, + 5,232,232,232,5,232,3,204,232,232,232,232,232,232,232,232, + 232,204,232,204,232,232,232,232,232,204,204,204,204,204,232,232, + 232,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, + 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, + 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, + 204,204,232,204,232,204,204,232,232,204,232,232,232,232,5,232, + 232,232,5,3,5,5,3,5,5,98,5,3,5,192,5,192, + 192,192,192,5,3,3,3,3,98,98,3,3,3,3,192,3, + 3,3,3,3,3,3,3,192,192,3,98,192,3,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,98,98, + 132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132, + 132,192,132,75,75,132,132,132,75,132,132,75,132,75,75,75, + 75,75,75,75,232,75,75,75,75,192,75,75,75,75,75,75, + 75,75,75,75,75,252,75,75,75,75,75,75,75,192,75,75, + 75,75,232,75,75,232,75,75,232,75,75,252,75,75,75,252, + 232,232,252,252,232,252,252,232,252,252,252,252,252,252,232,3, + 180,232,232,252,252,252,3,180,252,232,252,180,232,232,3,232, + 180,5,5,232,5,232,232,232,232,232,232,232,204,204,204,232, + 232,232,232,204,232,232,232,232,232,204,232,232,204,204,204,204, + 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, + 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, + 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, + 204,204,204,204,204,204,204,204,232,204,204,3,204,204,232,3, + 5,204,232,204,204,3,5,5,3,5,5,192,5,5,3,5, + 192,192,192,204,3,3,3,3,3,98,3,3,3,3,3,3, + 3,3,192,192,192,3,98,192,3,192,3,3,192,3,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,132, + 132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,192, + 132,75,75,132,132,192,132,132,192,132,75,75,192,132,192,132, + 75,75,75,132,75,75,75,75,75,75,192,75,75,75,75,75, + 75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75, + 75,75,75,75,75,75,75,75,75,75,75,75,252,252,252,75, + 75,75,75,232,75,75,252,75,252,252,180,252,75,232,75,192, + 232,252,252,232,232,180,232,3,5,3,5,3,180,5,232,3, + 232,232,232,5,232,180,5,3,232,232,232,232,232,232,232,204, + 232,204,232,232,204,204,204,204,232,232,232,232,232,204,204,204, + 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, + 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, + 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, + 232,204,232,204,204,204,232,5,3,5,5,204,5,5,3,204, + 204,3,3,5,3,204,5,5,5,98,5,98,5,98,3,3, + 192,192,192,3,204,3,3,3,3,3,3,3,3,192,3,98, + 98,3,98,98,3,192,3,98,3,3,192,192,3,3,192,3, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,98,98, + 132,132,132,132,132,132,119,132,132,132,132,132,132,132,132,132, + 132,132,132,132,75,132,75,132,132,75,132,75,132,75,75,75, + 132,132,75,132,75,75,132,75,75,75,75,75,75,75,192,75, + 132,132,75,75,75,75,75,75,75,75,75,75,75,75,75,75, + 75,75,75,75,75,75,75,75,252,252,75,75,75,75,252,75, + 75,75,75,75,232,75,252,252,252,252,180,252,75,252,75,180, + 3,252,252,252,232,252,232,180,180,134,232,3,180,3,232,3, + 5,5,180,5,232,232,232,5,3,5,3,5,232,232,232,232, + 232,204,232,232,232,232,232,232,232,232,204,204,204,204,204,204, + 204,204,204,204,204,204,204,204,204,204,204,204,232,204,204,232, + 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, + 204,204,204,204,204,204,204,204,204,204,204,204,204,232,232,204, + 204,3,232,3,5,3,204,204,204,5,5,204,5,5,5,3, + 232,232,5,232,3,5,98,204,192,98,5,98,5,5,5,192, + 192,192,5,192,3,3,5,3,3,3,3,3,98,3,3,3, + 3,192,98,3,98,3,192,192,192,3,98,192,3,192,3,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,132, + 119,132,132,132,132,132,132,119,119,132,119,132,132,132,132,132, + 132,132,132,132,132,132,132,132,132,75,132,165,165,165,165,132, + 75,132,75,132,132,75,132,75,132,75,132,75,75,132,132,75, + 75,75,75,75,75,75,75,224,75,75,75,75,75,75,75,75, + 75,75,75,75,75,75,252,75,75,75,75,75,252,180,75,75, + 252,180,75,75,75,252,75,75,180,252,252,76,3,180,180,252, + 252,232,180,252,252,252,252,232,3,232,180,180,5,180,180,232, + 180,232,232,180,5,5,134,5,232,232,232,232,232,232,232,232, + 232,232,232,232,232,232,232,204,232,204,232,232,232,232,204,204, + 204,204,204,232,232,204,204,204,204,204,204,204,204,204,232,204, + 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, + 204,204,204,204,204,204,204,204,204,204,204,204,232,204,204,204, + 232,204,5,204,204,204,232,232,204,204,232,5,134,5,5,180, + 5,3,5,3,5,5,5,3,98,3,5,5,5,98,192,3, + 5,3,98,5,3,5,3,5,3,98,3,192,98,98,192,192, + 192,98,98,3,3,3,3,3,3,192,192,192,192,98,3,3, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,98,98, + 132,132,132,119,132,132,132,132,119,132,132,132,132,132,132,132, + 132,132,132,132,132,132,75,132,132,75,132,165,165,75,165,165, + 165,165,132,75,75,132,75,132,75,75,75,75,75,36,132,75, + 75,75,132,224,224,132,75,224,75,75,75,75,75,75,75,75, + 75,75,75,75,180,75,252,75,201,75,75,75,75,75,180,75, + 75,75,180,75,75,75,180,252,75,180,75,180,98,252,180,252, + 75,252,180,252,180,180,180,180,252,3,180,180,180,180,180,232, + 180,232,232,232,180,232,232,5,5,5,3,5,5,232,232,232, + 232,134,204,232,232,232,232,204,232,232,232,232,232,232,204,232, + 204,204,232,204,232,232,232,204,204,204,204,204,204,204,204,204, + 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, + 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, + 204,204,232,232,232,232,204,3,5,5,5,232,5,5,5,134, + 5,180,5,5,98,98,98,5,98,3,98,98,204,3,192,3, + 192,192,76,3,5,3,5,3,3,3,98,98,192,3,192,192, + 192,192,98,192,192,192,3,3,98,3,3,192,192,192,3,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,132, + 132,119,119,132,132,119,132,119,119,132,119,119,119,132,165,132, + 132,132,132,132,132,132,132,132,132,132,132,165,132,165,165,165, + 132,75,132,132,75,75,132,75,132,132,75,75,132,75,132,36, + 36,36,224,75,75,75,75,75,36,224,224,224,224,224,75,75, + 75,75,180,75,75,75,75,75,75,75,180,75,75,75,75,180, + 75,180,180,75,180,75,75,75,180,75,180,252,252,180,180,75, + 252,252,75,252,180,3,3,75,180,180,180,180,180,180,180,180, + 5,180,5,180,232,5,180,134,5,232,232,232,232,5,5,232, + 232,232,232,232,204,232,232,232,232,232,232,232,204,232,232,204, + 232,232,204,232,232,204,232,204,204,232,232,232,232,204,204,204, + 232,232,232,204,204,204,204,204,204,232,204,232,204,204,204,204, + 204,204,204,204,204,204,204,204,204,204,232,204,204,204,232,204, + 232,232,204,232,232,204,5,204,134,5,5,5,134,5,5,5, + 5,5,5,5,5,5,204,98,204,98,98,3,98,5,98,98, + 5,3,192,3,98,5,3,5,5,3,192,98,98,3,3,192, + 3,3,3,98,192,192,3,3,3,3,192,3,3,192,192,252, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,98,98, + 119,132,132,119,132,119,132,132,165,165,165,132,119,132,165,132, + 132,132,132,132,132,132,132,75,132,132,75,165,165,132,132,165, + 165,75,132,75,75,132,75,165,75,75,165,75,132,75,75,75, + 132,75,132,75,224,132,36,75,75,75,75,75,75,224,224,75, + 75,36,75,75,75,75,75,75,201,201,75,180,75,180,75,180, + 75,75,75,180,75,180,75,75,75,75,75,75,252,252,180,180, + 180,180,180,75,180,180,5,180,180,180,180,180,180,180,5,180, + 232,232,232,5,5,232,232,232,180,134,180,5,232,232,5,232, + 232,134,134,232,232,232,232,232,232,204,204,232,232,232,232,232, + 232,232,232,232,232,232,232,204,204,232,232,204,204,204,204,232, + 232,204,232,232,204,204,232,232,204,232,204,204,232,232,204,232, + 204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, + 204,3,5,232,232,232,5,204,204,5,5,204,5,5,5,134, + 5,76,5,5,98,98,98,98,98,204,98,204,98,3,5,98, + 5,3,5,3,3,5,3,5,98,3,3,3,3,98,98,3, + 3,3,192,192,192,98,192,3,3,98,192,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,132, + 119,119,132,119,132,119,119,165,132,119,119,132,119,132,132,132, + 165,132,132,132,132,132,165,165,165,165,165,165,132,132,132,75, + 165,165,165,165,75,132,75,75,165,75,132,36,132,36,36,36, + 75,36,75,36,75,36,75,224,224,36,36,36,36,75,75,201, + 75,75,75,201,75,75,75,75,75,75,201,75,201,201,75,75, + 180,75,201,75,75,75,75,75,75,75,180,180,75,75,252,180, + 252,75,75,180,3,180,180,252,180,180,5,180,180,180,180,180, + 180,5,5,232,232,5,5,180,232,232,232,232,134,232,232,232, + 232,204,232,134,232,232,232,232,5,232,232,232,204,232,232,204, + 232,232,232,204,192,204,232,232,232,204,204,232,204,5,204,204, + 204,204,204,204,204,204,204,232,232,204,232,204,204,204,232,204, + 204,204,204,232,204,204,204,204,204,204,232,232,232,204,232,232, + 232,232,232,232,232,232,5,5,5,204,5,5,134,5,76,98, + 5,5,98,98,5,204,3,3,98,98,98,98,98,5,98,98, + 98,3,3,5,3,5,3,98,204,3,3,3,98,3,3,3, + 3,3,98,192,192,192,98,3,3,3,3,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,98,98, + 119,132,119,132,119,132,119,132,119,132,119,165,165,165,119,119, + 165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165, + 165,165,165,165,165,75,165,165,75,165,75,36,132,36,224,36, + 75,36,224,36,132,224,36,36,224,75,75,75,75,75,75,201, + 75,201,75,36,201,201,224,75,75,75,36,75,75,75,75,201, + 75,75,75,180,180,75,76,75,180,75,75,180,201,75,201,75, + 180,180,180,180,180,252,180,180,180,3,180,180,180,180,180,180, + 180,180,180,5,180,232,232,5,5,5,180,232,5,232,5,134, + 232,232,232,5,232,232,5,232,232,232,232,232,204,232,232,204, + 232,232,232,232,232,204,232,232,232,232,232,232,204,232,232,232, + 204,192,232,204,204,232,204,232,232,232,232,232,232,204,232,232, + 204,232,204,232,204,204,204,204,204,204,204,204,232,204,232,232, + 232,204,232,3,5,204,232,5,5,5,5,5,5,5,5,76, + 5,5,5,98,76,98,76,204,98,98,98,5,3,98,5,3, + 98,98,5,98,98,98,5,3,3,3,98,3,3,3,98,3, + 3,3,3,3,192,192,192,3,192,3,3,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,132, + 119,132,132,119,119,132,119,132,119,119,119,165,165,165,132,119, + 132,132,165,165,165,165,165,165,165,75,165,165,165,165,165,165, + 165,165,165,165,165,75,75,36,132,36,36,75,132,75,132,224, + 36,36,36,36,36,36,75,75,75,36,36,36,36,224,75,75, + 224,75,36,75,75,75,75,224,201,36,75,201,75,201,75,75, + 201,75,36,201,75,75,75,76,201,180,180,75,180,75,252,75, + 180,75,252,75,75,180,180,252,180,180,180,180,180,180,180,5, + 180,180,180,180,180,180,5,180,232,180,232,5,134,5,232,232, + 232,232,232,232,5,134,232,232,5,232,232,232,232,232,232,232, + 232,204,232,232,232,232,232,232,232,232,204,232,232,232,232,232, + 232,232,232,204,204,232,232,204,232,204,232,232,232,232,232,232, + 204,204,232,232,204,204,204,232,204,232,204,232,204,232,232,232, + 204,232,5,232,204,134,134,204,5,5,5,5,5,5,5,5, + 5,5,76,5,76,3,98,76,98,5,98,98,98,98,98,76, + 98,3,98,5,3,5,3,3,98,3,3,98,3,3,3,98, + 3,3,98,3,192,98,98,3,3,3,3,3,3,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,98,98, + 119,119,119,119,119,119,119,119,132,119,119,165,119,165,119,165, + 119,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165, + 165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,36, + 132,224,132,224,36,36,36,36,36,36,224,36,36,36,36,36, + 201,36,201,36,36,36,201,36,75,36,75,36,75,36,201,75, + 201,75,75,201,201,201,75,75,75,201,75,75,180,75,201,75, + 76,75,75,75,75,180,180,180,180,180,3,180,75,180,180,180, + 180,180,180,180,180,180,180,180,232,232,180,180,232,5,134,134, + 134,232,232,232,232,232,134,232,232,232,232,232,204,232,232,3, + 232,232,204,232,232,204,232,232,232,232,204,232,204,232,204,232, + 232,232,192,232,232,232,232,232,232,232,204,232,232,204,232,232, + 232,232,204,232,204,204,204,232,232,232,232,232,232,204,204,232, + 3,204,5,5,5,5,5,5,5,5,5,5,5,5,134,76, + 76,5,76,5,98,204,98,3,76,98,98,98,204,98,98,5, + 98,98,98,98,98,98,98,3,3,3,98,3,3,98,3,3, + 3,98,3,3,192,98,98,192,98,3,3,3,3,3,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,132, + 119,119,119,119,119,119,119,119,119,132,119,119,132,165,132,119, + 119,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165, + 165,165,165,165,165,165,36,165,165,165,165,165,165,36,165,36, + 36,36,165,36,36,36,36,36,224,224,36,224,201,36,36,36, + 36,224,36,36,224,36,75,75,36,201,36,201,36,224,75,36, + 224,201,36,36,224,75,201,201,224,252,201,224,201,201,252,201, + 75,75,76,76,201,75,252,180,75,75,180,180,134,180,180,180, + 180,180,180,180,180,180,180,180,180,180,180,180,180,232,232,232, + 232,134,134,232,232,134,232,5,5,5,3,232,232,180,232,232, + 3,232,232,232,232,232,232,232,232,5,5,134,5,232,5,3, + 232,232,232,232,232,192,232,232,192,232,192,232,192,232,232,232, + 232,232,232,232,192,232,192,232,192,232,232,232,232,3,3,232, + 232,5,134,5,134,134,134,5,134,76,5,76,5,76,76,76, + 5,76,76,76,76,3,76,76,76,98,76,98,76,98,98,98, + 98,5,98,98,98,76,3,98,98,98,98,98,3,98,98,3, + 98,98,3,98,3,98,3,98,192,98,98,252,3,3,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,98,98, + 119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119, + 165,165,165,165,119,132,132,119,165,165,132,165,165,165,165,165, + 165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165, + 36,36,165,75,36,165,165,36,36,36,36,36,224,36,36,36, + 36,36,224,36,201,36,36,36,36,36,36,36,201,36,36,201, + 36,224,201,36,201,36,224,224,36,224,75,75,75,201,75,75, + 201,75,75,180,180,75,75,75,180,180,75,180,180,134,180,180, + 75,180,75,180,180,180,180,180,180,180,180,180,180,180,134,134, + 232,232,180,134,232,134,232,134,134,232,5,180,232,180,232,232, + 5,180,232,232,180,3,5,5,232,232,232,134,134,232,232,5, + 232,232,232,232,232,232,232,232,3,232,232,232,232,232,192,232, + 192,232,192,232,232,232,232,232,180,3,180,3,180,134,5,5, + 76,134,5,134,5,76,76,76,134,76,134,76,134,76,5,76, + 76,76,76,98,76,76,76,98,76,98,98,76,98,76,76,98, + 76,76,98,98,98,98,98,98,98,3,98,98,3,98,3,98, + 98,3,98,98,3,3,98,98,192,192,3,3,252,3,252,3, + 192,192,192,192,3,3,192,192,192,192,192,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,98, + 119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,132, + 119,165,119,119,119,119,119,36,165,165,165,119,165,165,36,165, + 165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,36, + 36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,201, + 36,36,36,36,36,36,165,36,36,36,36,36,36,36,36,36, + 36,201,36,36,36,201,75,75,201,75,224,201,201,75,201,201, + 180,201,201,75,201,180,201,180,75,180,180,180,180,180,180,180, + 180,180,180,180,75,180,180,180,180,180,180,180,180,180,180,232, + 180,180,232,232,204,232,134,232,180,134,134,5,5,5,180,134, + 134,232,5,5,134,5,134,134,134,134,134,134,134,134,134,134, + 180,180,180,180,180,180,5,180,232,180,180,180,180,180,180,180, + 180,180,75,232,180,180,180,180,5,134,5,134,5,134,76,76, + 5,76,76,76,76,5,134,5,76,76,76,76,76,76,57,57, + 98,76,57,76,98,76,76,98,76,76,76,98,98,98,98,76, + 98,98,98,98,76,98,98,76,98,98,98,98,98,98,98,98, + 98,3,98,98,3,98,3,192,98,98,98,252,192,98,98,98, + 3,192,192,3,192,192,192,192,192,192,192,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, + 119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119, + 119,119,119,165,36,119,165,119,119,165,165,165,165,165,165,165, + 36,36,165,165,165,165,165,165,36,165,165,165,165,165,165,165, + 165,165,165,165,36,36,165,165,36,165,36,165,165,165,165,36, + 36,36,36,36,165,36,165,201,36,36,201,36,36,36,36,201, + 36,36,36,201,36,36,36,75,201,201,224,224,224,201,224,201, + 75,75,201,75,201,75,201,201,75,201,75,180,75,180,75,180, + 180,180,180,180,180,180,180,134,180,180,134,180,180,180,180,180, + 180,180,180,232,114,180,180,232,180,5,5,134,134,134,232,5, + 5,134,5,232,134,134,134,134,134,5,204,232,134,134,134,5, + 5,5,5,5,5,134,5,134,134,5,5,5,134,5,134,134, + 134,5,134,180,5,5,5,134,134,134,134,5,134,5,134,134, + 134,5,134,76,76,76,76,134,76,76,76,76,76,76,76,162, + 76,76,57,76,57,76,76,76,57,57,57,57,76,76,98,98, + 76,98,76,98,98,98,98,98,98,3,98,98,98,98,98,98, + 98,98,3,98,3,3,3,98,192,192,192,98,3,192,3,192, + 252,3,192,192,192,3,192,192,192,192,192,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,98,98, + 119,210,119,119,119,119,119,210,119,119,119,119,119,119,119,119, + 119,119,119,165,165,119,165,119,119,119,119,119,119,165,165,165, + 165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165, + 165,165,165,165,165,165,165,36,36,165,36,36,36,36,36,165, + 165,165,165,165,36,36,36,165,165,36,165,36,165,36,36,165, + 36,36,201,36,201,36,36,36,201,36,75,75,201,75,75,201, + 201,201,201,201,180,201,75,180,180,180,75,180,180,180,180,75, + 180,75,134,75,180,180,180,180,180,180,180,180,180,180,134,180, + 232,180,180,180,114,180,5,134,5,134,134,5,134,134,134,134, + 134,134,134,5,134,134,134,134,134,134,134,134,5,134,134,134, + 5,134,134,134,134,134,134,134,134,134,76,76,76,134,134,134, + 76,134,76,5,134,134,76,134,5,180,5,76,76,76,5,76, + 5,76,76,134,76,76,76,76,76,76,76,76,76,76,76,76, + 57,162,76,76,57,76,57,57,76,76,76,76,76,98,76,98, + 76,76,98,76,98,76,98,98,98,98,98,98,98,98,98,98, + 98,98,98,3,98,3,192,98,98,3,98,3,3,252,3,98, + 3,3,3,3,192,192,192,192,192,192,192,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,3, + 119,210,210,210,119,210,119,210,119,210,119,119,210,119,119,119, + 119,119,119,119,119,165,119,165,119,165,165,165,165,119,165,119, + 165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165, + 165,165,165,165,165,165,165,165,165,165,165,165,165,165,36,36, + 36,36,36,165,165,165,36,36,165,36,36,36,165,36,36,36, + 36,36,36,36,165,165,201,75,75,36,201,75,201,201,201,224, + 36,75,224,201,75,201,201,201,75,75,201,201,75,201,180,180, + 75,180,201,180,201,180,201,201,134,180,180,180,180,180,180,180, + 180,180,134,180,114,5,134,134,134,134,76,134,134,134,134,134, + 5,134,134,134,134,134,134,134,5,76,76,134,134,134,134,76, + 76,134,134,134,76,76,76,134,76,134,134,134,134,134,134,134, + 134,134,134,134,76,134,134,76,76,76,5,134,134,76,134,76, + 76,134,76,76,76,76,76,76,76,201,57,201,57,162,162,76, + 57,162,162,162,76,162,76,76,162,57,76,57,57,57,76,76, + 76,98,76,98,98,98,98,98,98,98,98,98,98,98,98,98, + 98,98,98,98,3,3,192,192,98,192,192,192,3,3,3,3, + 3,3,3,3,192,192,192,192,192,192,192,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,252, + 210,210,119,119,210,210,210,119,210,119,210,119,210,119,210,119, + 210,119,119,119,119,165,119,119,165,210,165,210,119,119,119,165, + 165,119,165,165,165,165,165,165,165,165,165,165,165,165,165,165, + 36,165,119,165,165,165,165,165,36,36,36,36,36,36,165,165, + 165,165,165,36,36,36,165,165,36,165,165,36,36,201,36,165, + 36,36,36,201,36,36,36,36,201,36,36,36,201,36,36,201, + 75,201,201,201,201,201,201,201,201,180,201,75,201,75,201,201, + 201,201,180,201,201,180,180,180,180,180,180,180,201,180,180,201, + 180,180,201,180,114,201,76,201,180,180,180,76,180,180,134,76, + 180,134,134,134,134,134,134,76,76,134,134,134,134,134,76,134, + 134,76,76,76,134,134,134,76,134,76,134,134,76,76,76,76, + 76,76,76,76,134,134,76,134,134,76,76,76,76,76,76,76, + 5,76,76,76,76,76,162,201,76,162,76,57,76,76,76,162, + 76,162,57,162,162,162,31,31,162,57,162,162,76,57,57,31, + 76,31,98,31,98,76,98,57,98,98,98,98,98,98,98,98, + 98,98,3,3,3,98,3,192,192,192,3,3,3,3,3,3, + 3,3,3,3,3,192,192,192,192,192,192,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,98, + 210,210,210,210,210,210,210,210,119,210,119,119,119,210,119,119, + 119,119,210,119,119,165,119,119,119,119,119,119,210,165,119,165, + 119,119,165,165,165,165,165,165,165,165,165,165,165,165,165,165, + 165,165,165,165,165,165,165,25,25,165,165,165,165,36,165,165, + 165,165,165,165,165,36,36,165,36,36,165,36,165,165,36,165, + 165,165,165,36,36,165,165,162,36,201,201,36,201,75,36,201, + 201,36,201,201,75,75,75,201,201,75,201,201,201,201,75,180, + 201,201,180,201,201,201,180,201,201,201,201,180,201,180,180,180, + 180,134,76,180,114,134,180,201,201,180,180,201,201,180,134,180, + 180,201,180,134,134,76,134,134,134,134,134,134,134,134,134,134, + 134,134,134,134,134,134,134,76,134,76,76,134,134,134,134,201, + 134,201,76,76,76,76,76,76,134,76,76,76,76,76,76,162, + 76,76,76,76,76,76,76,162,76,162,76,162,162,162,162,162, + 57,57,162,162,162,162,76,162,162,57,162,31,76,162,76,57, + 76,76,76,76,98,31,98,98,98,98,98,98,98,98,98,98, + 98,98,98,5,98,3,3,3,3,192,192,3,192,3,3,252, + 3,3,3,3,3,3,192,192,192,192,192,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,3,98, + 210,210,210,210,210,210,210,119,210,210,210,210,119,119,210,119, + 210,119,119,210,119,119,119,119,119,119,119,165,119,165,119,210, + 119,119,210,165,165,165,165,165,165,165,165,165,165,165,165,165, + 165,165,165,165,165,165,165,36,25,165,165,165,165,165,165,165, + 165,165,165,165,165,165,165,165,165,165,165,165,165,36,165,36, + 165,36,36,165,165,36,165,36,36,36,201,36,201,165,36,165, + 201,36,36,36,201,201,201,201,36,201,201,75,201,75,201,201, + 75,201,201,180,201,201,201,180,180,201,201,201,180,201,201,201, + 201,180,180,201,114,201,201,201,201,201,201,134,201,201,201,201, + 201,180,134,201,201,134,134,76,201,134,201,180,134,134,76,76, + 134,76,76,76,76,76,134,134,76,134,76,201,76,76,201,134, + 201,134,134,76,201,134,201,201,201,201,76,76,76,76,76,76, + 76,76,76,201,162,201,57,76,162,76,162,76,201,162,76,162, + 162,57,162,57,57,162,31,31,162,57,162,76,162,162,76,76, + 31,31,76,31,76,5,98,76,98,98,98,98,98,98,98,98, + 98,98,3,3,98,3,98,3,98,98,98,3,3,192,98,3, + 3,3,3,3,3,192,192,192,192,192,192,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,192,3,3, + 251,210,210,210,210,210,210,210,210,119,210,210,210,210,119,210, + 119,210,210,119,210,119,119,119,119,210,119,119,119,210,119,165, + 165,165,119,119,210,165,210,165,165,165,210,165,210,165,165,165, + 165,165,165,165,165,165,165,165,165,36,25,165,165,165,165,165, + 165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,36, + 165,165,165,165,165,36,165,165,36,201,36,165,201,201,201,36, + 201,36,201,201,36,201,36,36,201,36,201,201,201,180,36,201, + 201,201,201,201,201,36,201,201,180,201,201,201,180,201,201,180, + 201,201,201,201,114,201,180,134,201,180,201,134,201,201,201,201, + 201,201,201,201,201,201,134,134,201,134,201,201,201,134,134,201, + 134,134,76,76,134,76,76,134,76,134,76,201,201,76,76,76, + 201,201,201,76,201,76,76,76,76,201,201,201,76,76,76,162, + 201,201,162,76,76,76,162,201,162,201,162,162,201,162,162,57, + 162,162,162,162,162,162,76,162,76,162,162,57,162,162,31,76, + 162,76,76,31,76,31,31,76,98,98,98,98,98,98,98,98, + 98,98,98,5,98,98,3,3,3,192,98,192,3,3,192,3, + 3,3,98,252,3,3,192,192,192,192,192,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,192,3,98,98, + 210,251,210,210,210,210,210,210,210,210,119,210,119,210,210,210, + 210,119,210,210,119,119,210,210,119,210,119,210,119,119,210,210, + 119,210,210,119,165,165,210,210,119,210,165,25,210,165,25,165, + 25,25,165,165,165,25,165,25,25,165,25,165,165,210,165,165, + 165,165,210,165,25,165,165,25,165,25,165,165,165,165,165,165, + 165,165,165,165,165,165,165,165,165,165,165,36,36,165,201,36, + 36,165,162,165,165,201,201,180,36,201,36,201,162,201,201,36, + 201,201,201,201,201,201,201,75,36,201,75,201,36,201,180,201, + 201,201,76,201,114,201,201,201,201,201,201,201,201,201,201,201, + 201,201,201,201,201,201,201,201,201,201,134,201,134,201,201,201, + 201,201,201,201,76,201,201,201,201,201,76,201,76,76,162,201, + 76,76,76,76,162,201,201,162,201,76,76,76,162,201,201,76, + 162,76,76,76,162,162,201,57,201,57,162,57,162,57,162,162, + 162,57,162,57,162,162,31,162,31,57,162,57,162,162,76,162, + 76,31,76,76,76,76,5,57,76,76,98,98,98,98,98,98, + 98,98,98,98,98,98,98,3,3,98,98,192,98,3,98,3, + 98,98,3,3,3,98,192,192,192,192,192,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,192,3,192,3,98, + 251,251,210,210,210,210,210,210,210,210,210,210,210,119,210,119, + 210,210,210,210,210,119,210,119,210,210,210,119,210,119,210,119, + 210,210,210,210,210,210,25,25,210,210,165,210,165,25,25,165, + 165,165,25,165,25,25,25,165,165,165,25,25,165,165,210,165, + 25,165,25,165,25,25,165,165,25,165,25,165,165,165,25,165, + 165,165,165,165,94,165,165,165,162,165,165,162,36,165,165,180, + 180,36,201,36,201,36,36,201,36,201,36,201,201,36,201,201, + 201,165,201,162,201,201,201,201,201,201,201,201,201,201,201,201, + 201,201,201,162,114,201,201,201,201,201,162,201,201,201,201,201, + 201,201,201,201,201,201,201,201,201,201,201,201,201,201,134,201, + 201,201,76,201,201,76,201,201,201,76,76,201,201,76,201,201, + 162,201,201,76,76,76,76,162,162,162,162,201,162,162,162,76, + 162,162,162,201,201,162,162,162,162,162,162,162,57,201,162,162, + 162,57,162,162,162,162,162,162,162,162,162,76,162,57,162,162, + 76,76,31,31,76,31,76,57,76,98,76,98,98,98,98,98, + 98,98,98,98,98,3,3,3,98,3,3,192,98,192,3,192, + 192,3,3,3,3,252,98,192,192,192,192,192,192,192,192,192, + 192,192,192,192,192,192,192,192,192,192,192,3,3,3,252,98, + 91,210,91,91,251,251,251,251,210,210,210,210,210,210,210,210, + 210,119,210,119,119,210,210,210,210,210,210,210,210,210,119,119, + 119,210,210,25,25,25,25,25,25,210,25,25,25,165,210,165, + 25,25,165,165,165,165,165,165,25,25,165,25,25,165,25,165, + 25,165,25,25,165,25,25,165,25,165,165,25,165,165,165,25, + 25,94,165,25,165,165,165,165,36,36,165,165,162,36,201,36, + 201,165,180,36,165,201,36,162,180,165,36,201,36,201,162,165, + 162,201,36,201,201,201,162,201,201,162,201,162,201,162,201,201, + 201,201,162,134,114,162,201,201,162,201,201,162,201,201,201,201, + 201,201,76,162,162,162,162,201,201,201,201,201,201,201,201,201, + 201,201,201,162,162,201,162,162,162,201,201,201,162,201,76,162, + 201,76,201,201,162,162,201,201,201,201,76,162,162,201,201,162, + 201,201,162,162,162,162,201,57,162,162,162,162,162,57,162,162, + 162,162,57,162,162,162,31,57,162,162,162,57,162,162,57,162, + 31,76,76,76,76,76,76,57,98,98,98,76,98,98,98,98, + 98,98,98,98,76,98,98,3,3,98,3,98,192,98,3,3, + 3,3,3,3,192,98,192,3,192,192,192,192,192,192,192,192, + 192,192,192,192,192,192,3,192,3,3,3,3,3,192,98,98, + 126,251,91,210,210,210,251,210,251,251,210,210,251,210,119,210, + 210,210,210,210,210,210,210,25,119,210,119,210,25,210,25,119, + 119,119,119,119,210,25,25,210,25,25,25,25,25,210,25,210, + 165,210,165,210,25,210,25,165,165,210,165,210,25,25,25,25, + 165,25,165,25,25,165,25,25,165,25,25,25,25,25,94,165, + 165,25,94,25,94,25,165,165,165,165,165,201,165,165,165,165, + 36,201,162,36,165,162,36,201,36,162,201,165,162,36,201,201, + 201,165,162,165,162,201,165,162,201,165,201,162,201,165,201,201, + 201,201,162,134,114,162,201,201,162,201,201,201,201,201,201,162, + 201,201,201,201,201,201,162,201,162,201,201,201,201,162,201,162, + 162,162,162,201,162,162,201,162,162,162,162,201,162,162,201,162, + 162,162,162,201,201,162,162,162,162,162,162,201,162,162,162,162, + 162,201,162,162,201,57,162,162,162,162,162,162,31,162,31,162, + 162,162,162,162,162,162,162,31,31,162,162,162,162,57,162,162, + 162,162,57,76,31,76,76,76,76,98,98,98,98,98,98,98, + 98,98,98,98,98,98,3,98,98,3,98,98,98,98,192,3, + 3,3,98,3,3,3,3,98,252,252,192,192,192,192,192,192, + 192,192,192,192,3,3,3,3,3,3,3,3,98,3,98,98, + 251,251,91,91,91,91,251,210,251,251,251,210,210,251,210,210, + 210,210,210,210,210,210,210,210,210,210,210,210,165,210,25,210, + 210,210,210,210,25,25,139,25,25,25,25,25,25,25,25,210, + 25,210,25,25,25,25,210,25,210,165,25,25,25,210,25,25, + 25,25,25,165,25,25,25,165,210,165,25,165,25,165,165,25, + 94,25,25,165,165,165,25,165,94,165,165,165,94,165,162,165, + 165,165,165,165,165,201,165,165,165,180,165,36,36,180,165,36, + 162,201,180,201,201,201,201,180,201,201,201,201,201,201,201,201, + 201,201,201,162,114,201,162,201,201,162,201,162,162,162,165,201, + 162,162,201,162,201,162,201,162,162,201,162,162,162,162,162,162, + 162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,201, + 162,162,162,162,162,162,201,201,162,162,201,162,162,31,162,162, + 162,162,162,162,31,31,162,162,162,31,162,76,76,162,162,162, + 162,162,162,162,162,162,162,76,76,76,162,76,76,76,76,76, + 76,76,76,76,76,31,76,76,98,76,98,98,76,98,98,98, + 98,98,98,98,98,98,98,98,3,98,98,3,98,98,98,3, + 3,3,3,98,3,98,98,3,192,3,192,3,192,3,192,3, + 192,3,252,252,3,3,3,3,3,3,3,3,3,98,98,57, + 91,251,251,251,91,210,91,210,251,210,251,210,251,210,251,251, + 251,210,210,210,210,139,210,210,210,210,25,210,210,210,25,210, + 25,25,25,139,25,210,25,139,25,139,210,25,25,139,25,139, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 165,25,25,25,25,25,25,25,210,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,165,25,165,165,165,165,36,165,165, + 165,165,180,165,165,180,36,165,201,36,165,162,36,201,165,201, + 165,201,172,58,80,40,137,40,190,9,40,40,40,137,137,190, + 9,40,40,103,114,165,201,162,162,162,36,201,201,162,162,162, + 201,162,201,162,162,162,162,162,162,162,162,162,162,162,162,162, + 162,162,162,162,94,162,162,162,162,162,162,162,162,162,94,162, + 162,162,162,162,162,162,162,162,162,94,162,162,162,162,31,162, + 31,162,162,162,162,94,162,162,162,31,129,240,112,173,191,191, + 191,173,9,203,191,191,191,191,191,9,9,9,9,191,9,191, + 191,112,191,220,98,76,31,76,76,76,98,98,98,98,98,98, + 98,98,98,98,98,98,98,3,98,98,98,98,98,98,98,98, + 192,3,3,3,3,3,3,3,3,252,3,3,3,3,3,252, + 3,3,3,3,3,3,3,3,3,3,3,3,192,3,98,98, + 91,91,91,251,91,251,91,91,251,251,251,251,251,210,210,251, + 210,210,210,210,210,210,210,210,210,25,210,139,210,139,25,210, + 139,139,139,25,25,210,139,25,210,25,25,210,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,94,25,94,25,165,165,165,165,165,94,165,165, + 165,36,94,162,165,162,165,36,165,187,201,201,165,165,165,180, + 180,201,33,33,6,6,233,6,154,108,154,6,154,233,233,233, + 33,6,233,108,114,162,94,165,165,165,94,94,94,162,94,165, + 94,162,94,94,94,94,94,94,162,162,162,162,94,94,162,94, + 94,94,162,94,94,94,162,162,162,162,162,162,162,162,162,162, + 162,162,162,94,94,94,94,94,162,94,94,94,94,31,94,94, + 94,94,31,94,31,31,31,94,31,237,220,233,9,33,9,9, + 220,233,33,9,33,233,9,33,220,233,191,245,173,233,9,233, + 9,9,191,233,31,31,3,31,57,31,98,57,98,98,98,98, + 98,98,31,98,98,98,98,98,98,98,98,98,98,98,98,3, + 98,3,3,3,3,3,192,192,192,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,98,3,192,252,98,57, + 93,126,91,91,251,251,251,251,91,210,251,251,210,251,210,210, + 251,91,210,210,139,210,139,139,139,139,210,139,210,139,139,139, + 210,210,139,139,210,25,210,139,139,210,139,25,25,139,25,139, + 210,139,139,139,25,25,25,25,25,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,139,139,25,25,25, + 25,25,25,25,25,25,25,25,25,94,94,25,165,25,134,133, + 205,154,137,154,137,154,137,133,129,240,129,80,133,154,154,80, + 154,137,220,220,137,33,80,191,173,173,9,80,80,9,80,80, + 190,80,220,220,154,129,80,154,133,137,80,80,137,137,137,137, + 80,137,80,220,220,129,129,191,154,220,129,137,137,137,137,129, + 129,129,129,129,129,129,129,133,220,220,129,129,129,129,129,129, + 133,129,129,129,129,129,129,137,129,129,129,129,129,129,129,220, + 154,133,129,129,190,129,191,129,191,9,129,220,9,220,220,9, + 220,129,220,9,9,9,9,33,9,9,220,220,9,220,9,9, + 9,9,220,191,9,191,191,191,129,191,129,129,129,129,129,191, + 129,9,191,191,98,98,98,98,98,98,98,98,98,98,98,98, + 192,3,3,3,192,3,3,3,192,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,98,3,192,98,98, + 126,93,126,91,91,251,91,210,91,251,251,251,251,251,210,251, + 210,251,251,251,210,251,210,210,210,210,139,139,251,210,139,210, + 139,251,210,139,139,139,139,210,139,139,210,139,251,139,139,210, + 139,139,210,25,210,139,139,139,139,139,139,139,139,139,139,139, + 25,139,139,25,139,25,25,25,139,25,25,25,210,25,139,25, + 25,210,210,25,25,25,210,25,25,165,165,94,25,94,180,9, + 33,40,233,9,33,220,33,9,33,9,203,129,203,40,191,220, + 33,33,220,220,33,220,33,9,108,33,33,33,154,40,191,220, + 191,9,9,220,80,190,220,80,9,154,154,154,33,233,40,33, + 154,33,220,220,220,80,33,220,33,33,154,33,80,33,33,33, + 191,191,220,220,191,80,220,33,220,154,33,220,154,129,154,220, + 220,220,220,220,220,220,80,220,9,220,220,220,220,220,220,220, + 220,9,220,220,220,220,80,33,33,220,33,80,33,233,9,33, + 9,9,9,33,33,154,33,33,80,33,33,9,233,9,233,233, + 220,233,9,220,220,233,220,233,220,233,233,220,233,233,220,233, + 233,220,9,191,204,98,98,98,3,98,3,98,98,98,98,98, + 3,3,3,3,3,3,3,3,192,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,98,3,98,252,98,57, + 91,225,126,93,91,251,91,251,91,210,251,251,251,251,91,251, + 251,251,251,251,251,251,251,251,139,251,251,139,251,251,139,251, + 251,139,139,251,251,251,251,139,251,251,139,251,210,139,139,139, + 139,139,139,139,139,25,139,139,139,139,139,139,139,210,139,139, + 139,139,139,139,139,139,139,139,25,25,210,210,25,210,139,139, + 139,25,25,25,210,25,139,25,25,25,165,25,165,139,201,58, + 9,220,108,33,233,154,33,154,154,33,9,154,233,154,154,80, + 220,173,40,233,154,80,80,80,233,108,154,33,173,203,203,173, + 191,137,33,33,9,9,9,190,9,191,80,154,154,154,108,80, + 129,80,154,154,154,191,191,154,190,203,191,173,129,191,220,154, + 9,154,233,80,220,220,154,154,154,154,129,33,33,220,220,154, + 154,220,33,154,154,154,154,129,154,154,154,33,33,154,80,233, + 154,9,220,33,220,220,33,129,28,33,233,154,80,154,33,154, + 33,154,33,154,80,154,9,33,191,233,80,33,154,33,33,233, + 233,191,233,233,233,33,6,6,6,220,233,220,233,6,220,9, + 233,233,9,173,204,98,98,98,98,98,3,98,98,98,98,98, + 98,98,98,98,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,98,252,98,98, + 93,91,91,126,91,91,91,91,91,91,210,91,251,210,251,251, + 251,251,139,91,139,251,251,251,139,139,251,251,139,251,251,139, + 251,251,139,139,251,251,251,139,251,251,139,139,251,139,91,251, + 139,251,251,139,139,91,139,210,91,251,251,139,139,139,139,139, + 139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, + 139,139,139,25,139,139,25,25,25,25,25,94,94,25,191,9, + 9,190,142,142,142,142,142,142,142,190,142,142,142,142,142,142, + 142,190,142,142,142,142,142,142,142,190,142,142,142,142,142,142, + 142,190,142,142,142,142,142,142,142,190,142,142,142,142,142,142, + 142,190,142,142,142,142,142,142,142,190,142,142,142,142,142,142, + 142,190,142,142,142,142,142,142,142,190,142,142,142,142,142,142, + 142,190,142,142,142,142,142,142,142,190,142,142,142,142,142,142, + 142,190,142,142,142,142,142,142,142,190,142,142,142,142,142,142, + 142,190,142,142,142,142,142,142,142,190,142,142,142,142,142,142, + 142,190,142,142,142,142,142,142,142,190,142,142,142,142,142,142, + 142,233,233,233,35,98,98,98,98,98,98,3,98,98,98,98, + 98,98,98,98,3,3,3,3,3,3,3,3,3,3,252,3, + 3,3,3,3,3,3,3,3,3,3,98,3,3,192,98,57, + 93,93,91,225,91,91,126,91,251,91,251,251,91,251,251,251, + 91,91,251,251,251,251,139,251,126,251,251,251,251,251,139,251, + 251,251,251,251,139,91,139,251,251,139,251,91,139,251,126,139, + 251,251,139,91,139,139,91,139,139,251,139,91,139,139,139,139, + 139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, + 139,139,139,139,139,139,139,139,25,210,25,25,25,210,6,35, + 9,151,58,80,80,80,80,40,137,151,58,80,80,80,80,40, + 137,151,58,80,80,80,80,40,137,151,58,80,80,80,80,40, + 137,151,58,80,80,80,80,40,137,151,58,80,80,80,80,40, + 137,151,58,80,80,80,80,40,137,151,58,80,80,80,80,40, + 137,151,58,80,80,80,80,40,137,151,58,80,80,80,80,40, + 137,151,58,80,80,80,80,40,137,151,58,80,80,80,80,40, + 137,151,58,80,80,80,80,40,137,151,58,80,80,80,80,40, + 137,151,58,80,80,80,80,40,137,151,58,80,80,80,80,40, + 137,151,58,80,80,80,80,40,137,151,58,80,80,80,80,40, + 137,173,173,173,191,3,98,98,98,98,3,98,3,98,98,98, + 98,98,98,98,3,5,98,98,98,3,252,98,98,98,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,98,252,98,98, + 225,93,93,91,93,91,91,126,91,91,91,91,251,91,91,126, + 251,251,251,126,126,126,126,126,251,251,126,126,251,126,126,126, + 91,251,251,126,126,251,251,91,91,251,251,251,251,251,251,139, + 91,251,251,91,139,91,139,91,139,91,139,139,91,91,251,139, + 139,139,139,139,139,91,139,91,139,139,139,91,210,139,210,139, + 139,139,139,139,139,139,139,25,139,139,25,139,25,139,6,35, + 9,190,58,40,40,80,80,80,40,190,58,40,40,80,80,80, + 40,190,58,40,40,80,80,80,40,190,58,40,40,80,80,80, + 40,190,58,40,40,80,80,80,40,190,58,40,40,80,80,80, + 40,190,58,40,40,80,80,80,40,190,58,40,40,80,80,80, + 40,190,58,40,40,80,80,80,40,190,58,40,40,80,80,80, + 40,190,58,40,40,80,80,80,40,190,58,40,40,80,80,80, + 40,190,58,40,40,80,80,80,40,190,58,40,40,80,80,80, + 40,190,58,40,40,80,80,80,40,190,58,40,40,80,80,80, + 40,190,58,40,40,80,80,80,40,190,58,40,40,80,80,80, + 137,9,173,233,233,98,98,76,98,98,3,3,98,3,3,98, + 98,98,98,98,98,98,98,3,3,98,98,98,98,3,3,3, + 180,3,98,98,3,3,98,98,3,3,98,3,3,3,98,57, + 93,93,93,93,126,93,126,126,126,126,126,91,126,126,251,91, + 91,91,251,251,251,251,251,91,126,126,251,91,126,126,126,126, + 126,91,251,126,126,126,139,251,91,91,251,91,91,91,91,251, + 91,139,91,139,251,91,139,251,91,139,91,251,91,139,91,91, + 91,139,210,91,139,139,139,139,91,139,91,139,139,251,91,210, + 91,210,139,139,139,139,139,139,210,139,25,139,139,126,6,233, + 9,129,58,80,80,80,80,80,151,129,58,80,80,80,80,80, + 151,129,58,80,80,80,80,80,151,129,58,80,80,80,80,80, + 151,129,58,80,80,80,80,80,151,129,58,80,80,80,80,80, + 151,129,58,80,80,80,80,80,151,129,58,80,80,80,80,80, + 151,129,58,80,80,80,80,80,151,129,58,80,80,80,80,80, + 151,129,58,80,80,80,80,80,151,129,58,80,80,80,80,80, + 151,129,58,80,80,80,80,80,151,129,58,80,80,80,80,80, + 151,129,58,80,80,80,80,80,151,129,58,80,80,80,80,80, + 151,129,58,80,80,80,80,80,151,129,58,80,80,80,80,80, + 40,9,173,35,233,98,98,3,98,98,98,3,3,98,3,3, + 98,98,98,3,98,3,98,98,98,98,3,3,98,98,98,3, + 252,3,3,192,192,3,3,3,3,3,98,3,3,252,98,98, + 93,93,93,93,93,91,91,93,91,91,91,126,126,91,91,251, + 251,126,91,91,91,91,91,251,251,251,91,126,251,251,251,251, + 126,126,91,126,126,91,91,91,126,139,126,91,126,126,91,91, + 91,91,139,91,91,139,91,91,251,91,91,139,91,139,139,139, + 251,139,139,91,139,91,139,91,139,91,139,139,91,91,139,251, + 139,139,139,139,139,139,139,139,139,139,139,139,139,139,6,33, + 9,190,58,80,80,80,80,40,40,190,58,80,80,80,80,40, + 40,190,58,80,80,80,80,40,40,190,58,80,80,80,80,40, + 40,190,58,80,80,80,80,40,40,190,58,80,80,80,80,40, + 40,190,58,80,80,80,80,40,40,190,58,80,80,80,80,40, + 40,190,58,80,80,80,80,40,40,190,58,80,80,80,80,40, + 40,190,58,80,80,80,80,40,40,190,58,80,80,80,80,40, + 40,190,58,80,80,80,80,40,40,190,58,80,80,80,80,40, + 40,190,58,80,80,80,80,40,40,190,58,80,80,80,80,40, + 40,190,58,80,80,80,80,40,40,190,58,80,80,80,80,80, + 151,173,173,233,233,98,98,76,98,98,98,76,3,3,98,3, + 3,98,5,3,98,98,98,98,98,98,98,98,3,3,98,98, + 98,98,98,98,98,98,98,3,3,3,3,252,98,3,98,57, + 87,87,93,87,11,93,91,93,225,91,91,91,91,91,91,91, + 126,91,91,91,91,126,91,91,91,126,126,91,91,91,91,91, + 126,225,91,91,126,126,126,91,91,91,139,91,139,91,126,126, + 91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,139, + 91,91,139,91,139,91,139,91,139,91,91,139,139,91,91,139, + 251,139,139,139,251,139,139,91,139,139,139,139,139,126,154,9, + 9,129,58,40,40,40,40,40,151,129,58,40,40,40,40,40, + 151,129,58,40,40,40,40,40,151,129,58,40,40,40,40,40, + 151,129,58,40,40,40,40,40,151,129,58,40,40,40,40,40, + 151,129,58,40,40,40,40,40,151,129,58,40,40,40,40,40, + 151,129,58,40,40,40,40,40,151,129,58,40,40,40,40,40, + 151,129,58,40,40,40,40,40,151,129,58,40,40,40,40,40, + 151,129,58,40,40,40,40,40,151,129,58,40,40,40,40,40, + 151,129,58,40,40,40,40,40,151,129,58,40,40,40,40,40, + 151,129,58,40,40,40,40,40,151,129,58,40,40,58,40,206, + 40,9,173,233,233,98,98,3,98,98,98,3,3,98,3,76, + 3,98,98,98,98,98,98,98,3,98,98,98,98,98,98,98, + 98,98,98,98,98,3,98,3,180,3,98,3,3,252,98,98, + 87,87,87,93,93,93,11,93,91,225,93,91,91,91,93,93, + 93,225,126,126,126,91,91,91,91,126,91,225,93,93,225,126, + 91,91,126,126,126,91,91,126,93,91,91,91,91,91,126,91, + 126,93,91,91,126,126,126,126,91,91,91,139,91,91,91,91, + 91,91,139,139,139,139,91,87,139,91,91,91,91,91,91,91, + 91,139,91,91,91,139,139,139,139,91,139,139,139,91,35,233, + 173,129,58,40,40,80,80,80,206,129,58,40,40,80,80,80, + 206,129,58,40,40,80,80,80,206,129,58,40,40,80,80,80, + 206,129,58,40,40,80,80,80,206,129,58,40,40,80,80,80, + 206,129,58,40,40,80,80,80,206,129,58,40,40,80,80,80, + 206,129,58,40,40,80,80,80,206,129,58,40,40,80,80,80, + 206,129,58,40,40,80,80,80,206,129,58,40,40,80,80,80, + 206,129,58,40,40,80,80,80,206,129,58,40,40,80,80,80, + 206,129,58,40,40,80,80,80,206,129,58,40,40,80,80,80, + 206,129,58,40,40,80,80,80,206,129,58,40,80,80,40,80, + 151,173,173,233,233,98,98,98,98,98,98,76,3,98,3,98, + 3,98,98,98,98,98,98,98,3,98,98,98,3,98,98,98, + 98,3,3,252,98,98,98,3,3,252,3,3,3,3,98,57, + 87,164,53,87,87,93,93,93,93,93,93,93,93,126,91,126, + 91,93,93,93,93,93,225,93,93,225,91,126,126,91,93,225, + 126,93,91,93,225,225,91,126,126,93,91,93,126,91,91,93, + 126,225,91,225,91,91,225,91,126,225,139,139,139,139,139,139, + 139,87,139,91,139,139,87,139,139,139,139,87,87,139,139,91, + 91,139,91,91,91,139,139,139,139,139,139,139,139,91,154,9, + 173,190,58,80,80,80,80,40,135,190,58,80,80,80,80,40, + 135,190,58,80,80,80,80,40,135,190,58,80,80,80,80,40, + 135,190,58,80,80,80,80,40,135,190,58,80,80,80,80,40, + 135,190,58,80,80,80,80,40,135,190,58,80,80,80,80,40, + 135,190,58,80,80,80,80,40,135,190,58,80,80,80,80,40, + 135,190,58,80,80,80,80,40,135,190,58,80,80,80,80,40, + 135,190,58,80,80,80,80,40,135,190,58,80,80,80,80,40, + 135,190,58,80,80,80,80,40,135,190,58,80,80,80,80,40, + 135,190,58,80,80,80,80,40,135,190,58,80,80,80,80,80, + 190,173,173,35,35,98,98,3,98,98,98,98,98,98,3,76, + 3,98,98,98,3,98,98,98,3,98,98,98,98,98,98,98, + 98,180,3,98,98,98,98,98,98,252,252,98,98,252,98,98, + 164,87,87,87,93,87,93,87,93,93,225,93,93,93,93,93, + 93,225,93,93,225,225,93,225,225,91,225,93,93,93,91,91, + 93,126,93,91,91,91,225,93,93,91,93,126,93,93,93,91, + 91,91,93,91,225,93,91,225,91,91,93,91,91,87,139,139, + 87,139,87,91,91,91,91,91,139,87,91,91,87,91,139,87, + 139,139,91,87,91,91,91,139,139,139,139,139,91,91,6,233, + 9,191,115,58,58,58,196,244,244,191,115,58,58,58,196,244, + 244,191,115,58,58,58,196,244,244,191,115,58,58,58,196,244, + 244,191,115,58,58,58,196,244,244,191,115,58,58,58,196,244, + 244,191,115,58,58,58,196,244,244,191,115,58,58,58,196,244, + 244,191,115,58,58,58,196,244,244,191,115,58,58,58,196,244, + 244,191,115,58,58,58,196,244,244,191,115,58,58,58,196,244, + 244,191,115,58,58,58,196,244,244,191,115,58,58,58,196,244, + 244,191,115,58,58,58,196,244,244,191,115,58,58,58,196,244, + 244,191,115,58,58,58,196,244,244,191,115,58,58,58,244,142, + 244,173,173,9,233,98,98,98,98,98,98,98,98,98,3,98, + 98,98,98,98,98,98,98,98,98,98,3,76,98,98,98,98, + 98,98,98,98,98,252,252,252,252,252,252,252,3,3,98,57, + 87,87,87,87,93,87,93,87,93,87,93,93,93,93,93,93, + 93,93,93,93,93,93,93,93,93,93,93,93,93,225,93,93, + 93,93,225,93,93,93,93,93,93,91,93,91,93,91,93,93, + 93,225,93,87,93,93,93,225,225,93,93,93,93,93,93,93, + 93,93,139,91,87,91,91,91,91,91,91,87,91,93,93,91, + 93,91,93,91,91,139,126,87,87,91,87,87,91,93,154,9, + 173,190,135,129,129,240,137,129,244,190,135,129,129,240,137,129, + 244,190,135,129,129,240,137,129,244,190,135,129,129,240,137,129, + 244,190,135,129,129,240,137,129,244,190,135,129,129,240,137,129, + 244,190,135,129,129,240,137,129,244,190,135,129,129,240,137,129, + 244,190,135,129,129,240,137,129,244,190,135,129,129,240,137,129, + 244,190,135,129,129,240,137,129,244,190,135,129,129,240,137,129, + 244,190,135,129,129,240,137,129,244,190,135,129,129,240,137,129, + 244,190,135,129,129,240,137,129,244,190,135,129,129,240,137,129, + 244,190,135,129,129,240,137,129,244,190,135,129,129,240,129,129, + 240,173,9,35,35,98,98,98,98,98,98,98,98,98,5,76, + 98,98,98,98,76,98,98,98,76,98,3,98,3,98,98,98, + 3,98,98,3,3,98,98,98,3,98,3,3,3,3,98,98, + 53,53,87,53,87,87,87,87,87,93,11,11,11,93,93,93, + 93,93,93,93,93,93,93,93,93,93,93,93,93,87,87,93, + 11,93,87,93,136,93,93,93,93,93,93,93,225,93,93,93, + 93,93,87,93,93,93,93,93,93,93,93,93,93,93,93,93, + 93,93,93,93,87,87,93,93,87,87,87,87,91,87,87,87, + 87,91,87,91,93,91,87,91,139,93,87,139,91,91,154,9, + 9,203,58,129,129,240,137,133,28,203,58,129,129,240,137,133, + 28,203,58,129,129,240,137,133,28,203,58,129,129,240,137,133, + 28,203,58,129,129,240,137,133,28,203,58,129,129,240,137,133, + 28,203,58,129,129,240,137,133,28,203,58,129,129,240,137,133, + 28,203,58,129,129,240,137,133,28,203,58,129,129,240,137,133, + 28,203,58,129,129,240,137,133,28,203,58,129,129,240,137,133, + 28,203,58,129,129,240,137,133,28,203,58,129,129,240,137,133, + 28,203,58,129,129,240,137,133,28,203,58,129,129,240,137,133, + 28,203,58,129,129,240,137,137,244,203,58,129,129,190,129,129, + 240,173,173,173,35,98,98,98,76,98,98,98,3,98,98,98, + 98,98,98,98,98,98,98,3,3,98,98,3,98,98,98,3, + 3,98,98,98,76,3,3,98,98,98,3,3,98,252,98,57, + 53,53,87,53,87,87,87,87,87,87,87,87,87,11,87,87, + 11,87,93,93,93,93,93,93,93,93,93,93,93,93,87,93, + 87,93,87,93,136,93,136,93,136,93,87,93,136,93,87,87, + 87,87,136,93,93,93,87,93,93,93,93,136,93,93,93,93, + 93,93,93,87,87,87,93,87,87,87,93,87,87,87,87,87, + 91,93,136,87,91,91,91,91,91,91,126,139,87,93,108,9, + 173,190,244,129,137,191,129,129,135,190,244,129,137,191,129,129, + 135,190,244,129,137,191,129,129,135,190,244,129,137,191,129,129, + 135,190,244,129,137,191,129,129,135,190,244,129,137,191,129,129, + 135,190,244,129,137,191,129,129,135,190,244,129,137,191,129,129, + 135,190,244,129,137,191,129,129,135,190,244,129,137,191,129,129, + 135,190,244,129,137,191,129,129,135,190,244,129,137,191,129,129, + 135,190,244,129,137,191,129,129,135,190,244,129,137,191,129,129, + 135,190,244,129,137,191,129,129,135,190,244,129,137,191,129,129, + 135,190,244,129,137,191,129,133,240,190,244,129,133,240,151,151, + 58,9,9,233,35,31,98,98,98,76,98,76,98,98,3,98, + 98,98,98,98,98,98,98,98,3,98,98,3,98,3,98,76, + 3,98,76,98,98,98,98,98,98,98,76,3,3,252,98,57, + 53,53,53,87,87,87,87,87,87,87,87,93,87,93,93,87, + 93,93,87,93,93,93,11,87,93,93,87,87,87,87,87,87, + 11,87,87,87,93,87,93,136,93,87,87,93,93,93,93,87, + 87,87,93,93,93,93,87,87,93,93,136,93,136,87,87,87, + 93,87,87,87,87,87,87,93,87,93,87,87,87,87,87,87, + 87,87,87,87,87,87,87,87,93,139,93,139,139,93,6,9, + 9,190,135,129,133,129,129,129,112,190,135,129,133,129,129,129, + 112,190,135,129,133,129,129,129,112,190,135,129,133,129,129,129, + 112,190,135,129,133,129,129,129,112,190,135,129,133,129,129,129, + 112,190,135,129,133,129,129,129,112,190,135,129,133,129,129,129, + 112,190,135,129,133,129,129,129,112,190,135,129,133,129,129,129, + 112,190,135,129,133,129,129,129,112,190,135,129,133,129,129,129, + 112,190,135,129,133,129,129,129,112,190,135,129,133,129,129,129, + 112,190,135,129,133,129,129,129,112,190,135,129,133,129,129,129, + 112,190,135,129,133,129,129,129,240,190,240,129,137,129,129,129, + 240,173,173,233,233,5,98,76,98,98,98,98,76,98,76,98, + 98,76,3,98,3,76,76,3,98,98,98,98,98,98,3,3, + 76,3,98,98,5,3,3,3,98,3,3,3,98,98,224,98, + 53,53,53,53,53,87,87,53,87,87,87,87,87,87,87,53, + 53,87,87,87,87,93,87,87,87,93,93,87,87,87,87,87, + 87,93,87,87,87,87,87,87,136,93,87,87,87,87,87,87, + 87,87,87,87,87,87,136,87,87,87,87,87,87,136,87,87, + 87,87,87,87,87,87,87,93,87,93,136,93,87,87,87,87, + 87,87,87,87,93,87,87,87,87,87,93,93,225,87,108,9, + 173,240,28,112,240,202,240,240,196,135,28,112,240,202,240,240, + 196,135,28,112,240,202,240,240,196,135,28,112,240,202,240,240, + 196,135,28,112,240,202,240,240,196,135,28,112,240,202,240,240, + 196,135,28,112,240,202,240,240,196,135,28,112,240,202,240,240, + 196,135,28,112,240,202,240,240,196,135,28,112,240,202,240,240, + 196,135,28,112,240,202,240,240,196,135,28,112,240,202,240,240, + 196,135,28,112,240,202,240,240,196,135,28,112,240,202,240,240, + 196,135,28,112,240,202,240,240,196,135,28,112,240,202,240,240, + 196,135,28,112,240,202,240,240,196,240,244,112,129,28,240,240, + 196,173,173,233,35,31,98,57,98,76,98,98,98,98,98,98, + 98,98,3,76,98,98,98,3,3,3,98,3,98,98,98,3, + 98,3,3,98,76,76,76,98,76,98,98,3,3,98,98,57, + 53,53,56,53,53,53,53,87,53,87,53,87,87,53,87,87, + 87,87,53,87,87,87,87,87,87,87,87,11,87,87,87,87, + 93,87,87,87,87,87,87,87,87,87,87,87,87,87,87,53, + 136,87,87,87,87,87,87,87,87,87,87,136,208,87,87,87, + 87,87,87,87,87,87,87,208,87,87,87,87,136,53,87,93, + 87,87,87,93,87,87,93,93,87,87,87,87,93,93,154,9, + 28,190,142,142,142,142,142,115,115,190,142,142,142,142,142,115, + 115,190,142,142,142,142,142,115,115,190,142,142,142,142,142,115, + 115,190,142,142,142,142,142,115,115,190,142,142,142,142,142,115, + 115,190,142,142,142,142,142,115,115,190,142,142,142,142,142,115, + 115,190,142,142,142,142,142,115,115,190,142,142,142,142,142,115, + 115,190,142,142,142,142,142,115,115,190,142,142,142,142,142,115, + 115,190,142,142,142,142,142,115,115,190,142,142,142,142,142,115, + 115,190,142,142,142,142,142,115,115,190,142,142,142,142,142,115, + 115,190,142,142,142,142,142,115,89,190,115,115,89,142,142,115, + 142,15,15,173,220,98,76,98,98,98,98,76,98,98,98,98, + 98,98,98,3,3,3,98,98,98,98,98,98,252,98,98,76, + 98,76,98,3,3,3,98,3,3,3,3,98,98,3,57,98, + 56,53,53,53,53,53,53,53,53,87,53,53,87,87,87,87, + 53,87,87,53,53,87,87,87,136,53,87,87,87,87,87,87, + 87,93,87,87,87,87,87,87,87,53,87,87,87,87,87,56, + 53,87,87,56,136,87,87,208,136,87,87,87,87,87,87,208, + 136,87,87,87,208,87,87,87,208,87,208,87,87,87,87,87, + 87,87,87,87,87,87,87,87,87,93,87,87,87,136,154,233, + 191,129,244,40,80,40,80,80,151,129,244,40,80,40,80,80, + 151,129,244,40,80,40,80,80,151,129,244,40,80,40,80,80, + 151,129,244,40,80,40,80,80,151,129,244,40,80,40,80,80, + 151,129,244,40,80,40,80,80,151,129,244,40,80,40,80,80, + 151,129,244,40,80,40,80,80,151,129,244,40,80,40,80,80, + 151,129,244,40,80,40,80,80,151,129,244,40,80,40,80,80, + 151,129,244,40,80,40,80,80,151,129,244,40,80,40,80,80, + 151,129,244,40,80,40,80,80,151,129,244,40,80,40,80,80, + 151,151,203,40,80,40,40,80,40,129,135,80,80,80,80,80, + 80,173,173,233,35,31,98,76,31,98,76,98,98,98,98,98, + 98,98,98,98,98,98,98,98,57,98,98,98,98,98,98,3, + 3,98,76,98,98,3,98,98,76,98,3,3,98,98,57,57, + 53,53,56,53,53,53,53,53,53,53,87,53,53,53,53,53, + 87,53,53,87,87,87,136,87,87,87,87,87,87,53,87,53, + 87,53,53,87,53,87,53,87,53,87,53,53,53,53,53,87, + 87,53,53,87,87,53,53,87,136,53,53,208,136,136,208,87, + 87,208,136,87,87,136,87,53,87,87,87,87,87,87,87,208, + 87,87,87,87,87,87,87,87,87,93,87,87,136,87,108,9, + 173,206,190,40,80,80,80,80,172,190,190,40,80,80,80,80, + 172,190,190,40,80,80,80,80,172,190,190,40,80,80,80,80, + 172,190,190,40,80,80,80,80,172,190,190,40,80,80,80,80, + 172,190,190,40,80,80,80,80,172,190,190,40,80,80,80,80, + 172,190,190,40,80,80,80,80,172,190,190,40,80,80,80,80, + 172,190,190,40,80,80,80,80,172,190,190,40,80,80,80,80, + 172,190,190,40,80,80,80,80,172,190,190,40,80,80,80,80, + 172,190,190,40,80,80,80,80,172,190,190,40,80,80,80,80, + 40,206,135,40,80,80,80,80,40,190,58,40,80,80,80,40, + 137,173,173,9,233,76,31,98,76,98,98,31,98,76,98,98, + 57,98,98,57,98,98,98,98,98,98,57,98,98,252,98,98, + 98,3,98,98,98,76,3,3,3,180,76,98,3,98,98,57, + 246,53,246,56,56,56,53,53,53,53,53,53,53,53,87,53, + 87,53,53,53,53,53,53,53,87,53,53,136,87,53,136,53, + 87,87,53,87,53,87,53,53,53,53,53,53,136,53,43,53, + 53,87,53,56,56,53,56,53,53,53,53,53,53,53,53,208, + 87,53,56,53,53,56,53,136,136,208,136,87,208,208,136,53, + 87,87,56,87,208,87,87,87,87,87,87,87,87,87,154,9, + 173,129,58,80,80,80,80,80,137,151,58,80,80,80,80,80, + 137,151,58,80,80,80,80,80,137,151,58,80,80,80,80,80, + 137,151,58,80,80,80,80,80,137,151,58,80,80,80,80,80, + 137,151,58,80,80,80,80,80,137,151,58,80,80,80,80,80, + 137,151,58,80,80,80,80,80,137,151,58,80,80,80,80,80, + 137,151,58,80,80,80,80,80,137,151,58,80,80,80,80,80, + 137,151,58,80,80,80,80,80,137,151,58,80,80,80,80,80, + 137,151,58,80,80,80,80,80,137,151,58,80,80,80,80,80, + 151,129,58,80,80,80,80,80,151,190,190,80,40,40,80,80, + 206,173,9,233,233,98,76,31,76,31,3,76,98,98,98,98, + 98,98,98,98,98,98,98,98,98,98,98,98,98,3,98,98, + 98,98,252,98,98,98,98,98,98,3,252,98,3,98,98,57, + 56,56,56,53,53,53,53,56,53,53,53,53,53,87,53,87, + 53,87,53,53,53,87,87,87,53,53,87,53,53,53,53,53, + 53,53,53,53,53,53,43,53,53,53,53,53,53,53,56,53, + 87,53,53,53,53,53,53,136,53,53,53,136,53,53,53,53, + 53,53,53,53,53,53,87,56,53,53,56,53,87,87,208,87, + 136,208,87,87,56,53,53,53,56,87,87,87,136,87,108,173, + 191,190,58,80,80,80,80,40,40,190,58,80,80,80,80,40, + 40,190,58,80,80,80,80,40,40,190,58,80,80,80,80,40, + 40,190,58,80,80,80,80,40,40,190,58,80,80,80,80,40, + 40,190,58,80,80,80,80,40,40,190,58,80,80,80,80,40, + 40,190,58,80,80,80,80,40,40,190,58,80,80,80,80,40, + 40,190,58,80,80,80,80,40,40,190,58,80,80,80,80,40, + 40,190,58,80,80,80,80,40,40,190,58,80,80,80,80,40, + 40,190,58,80,80,80,80,40,40,190,58,80,80,80,80,40, + 40,190,58,80,80,80,80,80,151,190,58,80,80,80,80,80, + 137,9,173,9,233,31,31,3,76,98,31,98,98,98,57,98, + 98,98,31,98,98,98,98,98,98,98,98,98,98,98,98,98, + 98,252,98,252,98,98,98,98,98,98,98,98,98,98,57,57, + 246,53,246,56,56,56,53,56,56,53,53,53,53,53,53,53, + 53,87,87,87,53,53,53,53,87,53,53,53,53,53,53,53, + 53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,56, + 56,53,53,53,53,53,56,53,136,53,56,136,56,53,53,136, + 56,136,56,53,53,56,53,53,53,53,53,53,53,87,56,10, + 208,56,136,208,53,56,136,136,87,87,56,56,87,56,108,173, + 173,190,58,40,40,40,40,206,137,190,58,40,40,40,40,206, + 137,190,58,40,40,40,40,206,137,190,58,40,40,40,40,206, + 137,190,58,40,40,40,40,206,137,190,58,40,40,40,40,206, + 137,190,58,40,40,40,40,206,137,190,58,40,40,40,40,206, + 137,190,58,40,40,40,40,206,137,190,58,40,40,40,40,206, + 137,190,58,40,40,40,40,206,137,190,58,40,40,40,40,206, + 137,190,58,40,40,40,40,206,137,190,58,40,40,40,40,206, + 137,190,58,40,40,40,40,40,137,190,58,40,58,40,40,40, + 151,206,190,40,40,40,40,206,206,190,190,40,40,40,206,206, + 206,173,173,233,233,98,76,31,76,98,76,76,31,98,76,98, + 98,98,98,31,98,31,98,31,98,98,98,98,57,98,98,98, + 57,98,98,252,252,252,98,98,224,98,75,224,98,3,98,57, + 56,246,56,56,53,53,56,53,53,53,53,53,53,53,53,53, + 53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53, + 53,53,53,53,56,56,53,53,53,53,53,53,53,53,10,56, + 53,53,53,53,53,53,53,56,10,53,53,53,53,53,56,10, + 53,56,53,53,53,53,53,53,136,53,56,10,10,56,208,53, + 53,56,56,10,53,53,53,56,136,56,56,56,56,56,154,173, + 203,129,58,40,40,80,80,40,137,129,58,40,80,40,80,40, + 137,129,58,40,80,40,80,40,137,129,58,40,80,40,80,40, + 137,129,58,40,80,40,80,40,137,129,58,40,80,40,80,40, + 137,129,58,40,80,40,80,40,137,129,58,40,80,40,80,40, + 137,129,58,40,80,40,80,40,137,129,58,40,80,40,80,40, + 137,129,58,40,80,40,80,40,137,129,58,40,80,40,80,40, + 137,129,58,40,80,40,80,40,137,129,58,40,80,40,80,40, + 137,129,58,40,80,40,80,40,137,129,58,80,80,40,80,80, + 129,190,58,40,80,40,40,80,151,190,58,80,40,40,80,80, + 151,9,173,9,233,31,76,76,76,98,31,76,76,98,76,31, + 98,31,98,98,98,98,98,98,98,98,98,57,98,98,98,57, + 98,98,98,98,98,98,252,252,98,201,76,252,98,98,57,57, + 246,56,53,246,246,53,53,53,53,53,246,53,53,53,53,53, + 53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53, + 53,53,56,53,53,53,53,43,53,43,56,53,53,56,53,53, + 53,53,10,56,56,53,56,53,56,10,56,53,53,53,43,53, + 53,56,53,53,56,53,53,56,56,10,43,53,53,10,53,56, + 208,53,56,10,53,56,53,53,87,56,56,136,56,56,108,173, + 203,190,58,80,80,80,40,80,206,190,203,80,80,80,80,80, + 206,190,203,80,80,80,80,80,206,190,203,80,80,80,80,80, + 206,190,203,80,80,80,80,80,206,190,203,80,80,80,80,80, + 206,190,203,80,80,80,80,80,206,190,203,80,80,80,80,80, + 206,190,203,80,80,80,80,80,206,190,203,80,80,80,80,80, + 206,190,203,80,80,80,80,80,206,190,203,80,80,80,80,80, + 206,190,203,80,80,80,80,80,206,190,203,80,80,80,80,80, + 206,190,203,80,80,80,80,80,206,190,58,80,80,80,80,40, + 206,190,58,80,80,80,80,80,206,190,191,80,80,80,80,80, + 190,173,173,233,35,31,31,98,31,76,76,98,98,76,98,98, + 98,31,31,98,31,98,98,98,98,31,98,98,98,57,98,98, + 98,98,98,98,98,98,98,252,252,98,98,75,98,98,98,57, + 246,56,171,56,56,246,56,246,56,53,53,53,246,53,53,53, + 53,56,56,53,53,53,53,10,56,53,53,56,53,53,10,56, + 53,56,53,53,53,56,56,10,56,10,56,56,56,56,56,56, + 56,56,56,10,56,56,53,56,53,43,53,56,53,56,56,10, + 56,56,10,56,53,56,56,56,53,56,56,56,56,56,56,56, + 53,53,53,56,10,10,56,10,53,56,56,56,87,56,108,173, + 115,191,115,58,58,58,58,202,244,190,115,58,58,244,244,202, + 244,190,115,58,58,244,244,202,244,190,115,58,58,244,244,202, + 244,190,115,58,58,244,244,202,244,190,115,58,58,244,244,202, + 244,190,115,58,58,244,244,202,244,190,115,58,58,244,244,202, + 244,190,115,58,58,244,244,202,244,190,115,58,58,244,244,202, + 244,190,115,58,58,244,244,202,244,190,115,58,58,244,244,202, + 244,190,115,58,58,244,244,202,244,190,115,58,58,244,244,202, + 244,190,115,58,58,244,196,202,244,191,115,58,58,58,58,142, + 244,191,115,58,58,58,196,202,196,244,115,58,58,58,196,142, + 244,173,173,9,233,31,76,76,98,76,31,98,31,76,31,98, + 98,98,98,98,98,98,98,31,98,98,98,98,57,98,98,98, + 98,98,98,98,98,98,98,98,98,98,98,98,224,224,57,57, + 56,56,246,56,56,56,56,53,56,56,56,53,53,53,53,56, + 53,53,56,56,56,53,53,53,56,10,53,56,56,53,53,56, + 53,10,56,56,10,56,56,53,56,53,56,56,10,56,56,56, + 56,56,56,56,56,56,56,56,56,56,56,56,43,53,43,56, + 56,43,43,56,56,53,56,56,56,56,56,56,56,53,43,56, + 56,56,56,53,43,56,53,56,53,53,87,56,56,56,108,203, + 203,190,58,129,129,129,129,137,244,58,58,129,129,190,151,137, + 244,58,58,129,129,190,151,137,244,58,58,129,129,190,151,137, + 244,58,58,129,129,190,151,137,244,58,58,129,129,190,151,137, + 244,58,58,129,129,190,151,137,244,58,58,129,129,190,151,137, + 244,58,58,129,129,190,151,137,244,58,58,129,129,190,151,137, + 244,58,58,129,129,190,151,137,244,58,58,129,129,190,151,137, + 244,58,58,129,129,190,151,137,244,58,58,129,129,190,151,137, + 244,58,58,129,129,190,137,137,244,58,58,129,129,240,129,129, + 112,190,58,129,129,191,137,137,240,190,58,129,129,240,129,129, + 240,173,173,9,233,31,31,57,76,98,57,76,98,98,98,98, + 31,98,98,31,98,31,3,31,98,98,98,98,98,98,98,98, + 98,252,75,75,76,98,98,98,98,98,98,3,252,224,224,57, + 246,56,171,56,246,56,53,56,246,53,53,53,246,53,246,53, + 56,56,53,53,53,53,53,53,53,53,53,53,53,56,56,53, + 56,53,53,53,53,53,56,56,53,56,53,56,56,56,56,56, + 56,56,56,56,56,56,56,56,56,43,56,56,171,56,171,56, + 56,171,171,56,56,56,56,56,56,53,53,56,56,56,171,56, + 56,53,56,56,56,56,56,53,56,53,56,43,56,56,108,173, + 15,190,58,129,129,240,129,133,112,190,244,129,129,191,129,133, + 112,190,244,129,129,191,129,133,112,190,244,129,129,191,129,133, + 112,190,244,129,129,191,129,133,112,190,244,129,129,191,129,133, + 112,190,244,129,129,191,129,133,112,190,244,129,129,191,129,133, + 112,190,244,129,129,191,129,133,112,190,244,129,129,191,129,133, + 112,190,244,129,129,191,129,133,112,190,244,129,129,191,129,133, + 112,190,244,129,129,191,129,133,112,190,244,129,129,191,129,133, + 112,190,244,129,129,240,129,133,112,190,244,129,129,129,129,151, + 244,190,244,129,133,191,129,129,240,190,240,137,129,190,129,129, + 240,173,173,9,35,31,57,98,57,57,98,57,57,76,31,98, + 98,31,98,98,98,98,98,98,31,98,57,98,98,98,98,98, + 98,57,57,57,98,98,98,98,98,98,98,57,57,224,57,165, + 171,246,56,246,56,246,53,53,246,246,56,53,246,53,56,53, + 53,56,56,53,246,56,56,56,56,56,56,56,56,56,10,56, + 56,56,56,56,56,53,56,56,56,56,56,56,56,56,56,56, + 56,56,10,56,171,56,56,56,171,56,56,56,56,56,56,56, + 56,56,56,56,56,56,56,56,56,56,56,56,56,56,171,56, + 56,56,56,56,56,56,56,56,56,56,56,56,53,56,205,203, + 203,191,244,129,129,129,129,129,244,190,244,133,129,129,129,129, + 244,190,244,133,129,129,129,129,244,190,244,133,129,129,129,129, + 244,190,244,133,129,129,129,129,244,190,244,133,129,129,129,129, + 244,190,244,133,129,129,129,129,244,190,244,133,129,129,129,129, + 244,190,244,133,129,129,129,129,244,190,244,133,129,129,129,129, + 244,190,244,133,129,129,129,129,244,190,244,133,129,129,129,129, + 244,190,244,133,129,129,129,129,244,190,244,133,129,129,129,129, + 244,190,244,133,129,191,129,129,244,191,244,133,133,112,133,129, + 240,191,244,137,129,240,129,151,58,191,244,133,129,191,151,151, + 58,173,173,9,35,31,31,31,76,31,57,76,31,76,98,31, + 76,98,31,98,31,98,31,98,98,98,98,98,57,98,57,98, + 98,98,98,98,224,98,98,98,224,98,98,98,98,224,224,57, + 246,246,56,56,246,56,246,246,53,246,53,246,53,246,53,246, + 246,53,53,246,53,53,53,53,53,56,53,56,53,53,56,56, + 56,56,56,56,56,56,56,56,56,10,56,56,10,56,56,56, + 56,171,56,171,56,56,56,56,56,56,56,56,56,56,56,56, + 56,56,56,56,56,56,56,56,56,56,56,171,171,56,56,56, + 56,56,56,56,56,171,171,10,56,53,56,56,10,171,108,173, + 15,190,135,129,129,240,129,137,28,190,244,137,129,240,129,137, + 28,190,244,137,129,240,129,137,28,190,244,137,129,240,129,137, + 28,190,244,137,129,240,129,137,28,190,244,137,129,240,129,137, + 28,190,244,137,129,240,129,137,28,190,244,137,129,240,129,137, + 28,190,244,137,129,240,129,137,28,190,244,137,129,240,129,137, + 28,190,244,137,129,240,129,137,28,190,244,137,129,240,129,137, + 28,190,244,137,129,240,129,137,28,190,244,137,129,240,129,137, + 28,190,244,137,133,191,129,137,244,190,244,220,129,191,129,129, + 244,190,240,129,129,190,129,129,244,58,244,137,133,129,129,129, + 240,173,173,9,220,31,76,76,31,57,76,31,76,31,31,98, + 31,31,98,31,98,98,98,98,31,98,98,57,98,57,98,57, + 57,98,98,224,98,224,224,224,76,224,224,224,224,224,57,165, + 246,56,246,56,246,56,56,246,53,246,56,246,53,246,53,53, + 246,246,53,246,246,246,56,246,53,56,53,246,56,246,56,56, + 53,56,246,56,56,56,56,56,56,56,56,56,56,171,56,56, + 56,56,56,56,56,56,56,56,56,56,56,171,56,171,56,56, + 56,56,56,171,56,56,56,171,171,171,56,56,171,171,171,171, + 171,56,171,171,171,56,171,56,56,10,56,56,56,246,205,203, + 203,240,202,240,240,240,240,240,244,240,28,112,240,240,240,240, + 244,240,28,112,240,240,240,240,244,240,28,112,240,240,240,240, + 244,240,28,112,240,240,240,240,244,240,28,112,240,240,240,240, + 244,240,28,112,240,240,240,240,244,240,28,112,240,240,240,240, + 244,240,28,112,240,240,240,240,244,240,28,112,240,240,240,240, + 244,240,28,112,240,240,240,240,244,240,28,112,240,240,240,240, + 244,240,28,112,240,240,240,240,244,240,28,112,240,240,240,240, + 196,240,28,112,191,112,240,240,244,240,28,112,240,244,240,240, + 196,240,202,240,129,112,240,240,244,240,28,112,240,28,240,240, + 196,173,9,9,35,31,31,162,31,31,57,57,57,57,31,76, + 98,31,98,98,31,98,31,98,31,31,57,98,57,57,98,98, + 57,57,57,57,57,57,57,57,224,224,224,57,57,165,31,195, + 106,106,106,56,246,246,53,246,246,53,246,53,246,53,246,246, + 246,53,246,246,53,246,53,56,246,56,56,56,56,56,56,56, + 246,56,56,56,56,56,171,56,56,56,171,171,171,56,171,171, + 171,171,222,171,171,171,171,171,56,56,56,56,171,56,56,56, + 56,56,171,56,56,56,171,106,171,171,171,171,171,171,171,171, + 171,171,56,56,56,171,171,171,56,56,56,56,56,171,205,115, + 15,190,142,142,115,142,142,142,115,151,142,142,115,142,142,142, + 115,151,142,142,115,142,142,142,115,151,142,142,115,142,142,142, + 115,151,142,142,115,142,142,142,115,151,142,142,115,142,142,142, + 115,151,142,142,115,142,142,142,115,151,142,142,115,142,142,142, + 115,151,142,142,115,142,142,142,115,151,142,142,115,142,142,142, + 115,151,142,142,115,142,142,142,115,151,142,142,115,142,142,142, + 115,151,142,142,115,142,142,142,115,151,142,142,115,142,142,142, + 115,151,142,142,115,142,142,142,115,151,115,142,142,142,142,142, + 115,206,142,115,115,142,142,142,142,129,142,202,142,142,142,115, + 142,15,15,173,129,31,31,31,31,76,57,31,57,57,57,31, + 31,57,31,31,57,31,57,98,98,98,57,57,98,57,57,57, + 57,98,98,224,224,224,224,224,57,57,57,98,98,57,57,165, + 56,246,246,246,246,246,246,53,246,246,246,53,246,246,53,246, + 246,53,246,56,246,246,246,56,246,246,56,246,56,56,56,171, + 56,171,171,171,171,56,171,171,171,56,56,56,171,171,171,56, + 171,56,56,56,222,171,171,171,171,171,171,56,171,171,171,171, + 171,56,171,171,171,56,56,56,171,171,171,171,171,102,171,171, + 171,102,102,102,102,171,171,171,171,56,56,171,56,106,103,33, + 173,129,244,80,80,80,80,80,80,190,244,80,80,80,80,80, + 80,190,244,80,80,80,80,80,80,190,244,80,80,80,80,80, + 80,190,244,80,80,80,80,80,80,190,244,80,80,80,80,80, + 80,190,244,80,80,80,80,80,80,190,244,80,80,80,80,80, + 80,190,244,80,80,80,80,80,80,190,244,80,80,80,80,80, + 80,190,244,80,80,80,80,80,80,190,244,80,80,80,80,80, + 80,190,244,80,80,80,80,80,80,190,244,80,80,80,80,80, + 80,190,58,40,80,80,80,80,80,190,135,80,80,80,40,80, + 80,129,244,80,80,80,80,80,151,190,244,80,40,80,80,80, + 80,15,173,9,35,31,31,31,31,31,76,31,31,57,57,57, + 98,57,98,31,57,31,31,31,57,57,57,57,57,57,57,98, + 57,57,57,57,57,57,57,224,224,224,36,224,224,57,57,195, + 77,246,246,246,246,246,246,246,53,246,246,246,246,53,246,246, + 53,246,56,56,246,56,246,53,56,246,56,171,56,246,246,56, + 106,246,56,106,246,171,246,171,56,171,171,171,56,56,222,171, + 171,171,171,171,171,171,56,171,171,171,171,171,171,171,171,171, + 171,171,171,171,171,171,171,171,171,171,171,171,171,106,171,171, + 102,171,171,171,171,171,102,171,171,171,171,171,171,102,108,173, + 173,206,58,80,40,80,40,80,151,206,58,80,40,80,40,80, + 151,206,58,80,40,80,40,80,151,206,58,80,40,80,40,80, + 151,206,58,80,40,80,40,80,151,206,58,80,40,80,40,80, + 151,206,58,80,40,80,40,80,151,206,58,80,40,80,40,80, + 151,206,58,80,40,80,40,80,151,206,58,80,40,80,40,80, + 151,206,58,80,40,80,40,80,151,206,58,80,40,80,40,80, + 151,206,58,80,40,80,40,80,151,206,58,80,40,80,40,80, + 151,190,190,80,40,80,40,80,151,190,58,40,80,80,80,80, + 206,135,58,80,80,80,40,40,80,190,58,80,80,80,80,40, + 137,173,173,220,220,31,31,31,31,31,31,31,57,31,31,31, + 31,31,31,57,57,57,57,57,31,57,57,57,57,57,57,57, + 57,57,57,57,57,57,36,57,57,57,57,165,57,165,195,31, + 106,246,246,246,246,246,246,246,246,246,53,246,246,246,53,246, + 246,246,56,246,56,246,246,246,246,106,246,106,171,171,106,56, + 171,171,56,171,106,171,246,106,56,171,171,171,171,171,171,171, + 171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171, + 171,171,171,171,171,171,171,171,102,181,171,171,171,102,181,171, + 181,181,181,102,181,171,90,171,102,181,171,171,171,181,103,40, + 173,129,58,80,80,80,80,80,172,129,244,80,80,40,80,80, + 172,129,244,80,80,40,80,80,172,129,244,80,80,40,80,80, + 172,129,244,80,80,40,80,80,172,129,244,80,80,40,80,80, + 172,129,244,80,80,40,80,80,172,129,244,80,80,40,80,80, + 172,129,244,80,80,40,80,80,172,129,244,80,80,40,80,80, + 172,129,244,80,80,40,80,80,172,129,244,80,80,40,80,80, + 172,129,244,80,80,40,80,80,172,129,244,80,80,40,80,80, + 206,129,58,80,80,80,80,80,206,190,58,80,40,80,80,80, + 151,190,135,80,40,80,80,80,206,206,58,80,40,40,80,80, + 206,173,173,9,35,94,31,31,31,94,31,31,31,31,31,31, + 31,31,31,31,31,31,31,57,31,31,31,57,57,57,57,57, + 57,57,57,57,57,57,57,57,57,57,57,57,224,57,165,195, + 246,77,77,246,246,246,246,246,246,246,246,246,246,246,246,246, + 53,246,246,246,56,246,171,246,171,246,171,56,246,106,56,106, + 246,106,106,171,171,171,171,171,106,171,171,171,171,106,171,171, + 171,171,171,171,171,102,171,171,171,171,171,171,171,171,171,171, + 171,171,171,171,171,102,181,102,106,102,181,102,181,171,102,102, + 102,171,171,121,102,90,181,181,171,102,171,171,171,121,103,173, + 28,190,58,80,80,80,40,80,40,206,58,80,80,80,40,80, + 40,206,58,80,80,80,40,80,40,206,58,80,80,80,40,80, + 40,206,58,80,80,80,40,80,40,206,58,80,80,80,40,80, + 40,206,58,80,80,80,40,80,40,206,58,80,80,80,40,80, + 40,206,58,80,80,80,40,80,40,206,58,80,80,80,40,80, + 40,206,58,80,80,80,40,80,40,206,58,80,80,80,40,80, + 40,206,58,80,80,80,40,80,40,206,58,80,80,80,80,80, + 206,190,58,80,80,80,40,80,137,190,58,80,80,80,40,80, + 151,190,58,80,80,80,80,80,151,190,58,80,80,80,80,80, + 137,173,173,220,220,94,31,94,31,31,31,31,31,31,31,31, + 31,31,31,31,31,31,57,31,57,57,57,31,57,57,31,57, + 31,57,57,57,57,31,165,165,165,165,57,165,57,31,31,237, + 246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246, + 246,246,246,246,246,246,246,56,106,246,106,106,246,106,171,171, + 56,171,106,106,171,106,56,171,106,106,171,171,171,106,171,171, + 171,171,171,171,171,102,171,171,171,171,171,171,171,171,171,102, + 171,171,171,171,106,171,106,102,171,171,171,171,181,171,121,181, + 102,121,102,181,181,102,102,102,181,181,181,181,102,121,103,9, + 28,129,58,40,40,40,40,190,151,129,58,40,40,40,40,206, + 151,129,58,40,40,40,40,206,151,129,58,40,40,40,40,206, + 151,129,58,40,40,40,40,206,151,129,58,40,40,40,40,206, + 151,129,58,40,40,40,40,206,151,129,58,40,40,40,40,206, + 151,129,58,40,40,40,40,206,151,129,58,40,40,40,40,206, + 151,129,58,40,40,40,40,206,151,129,58,40,40,40,40,206, + 151,129,58,40,40,40,40,206,151,129,58,40,40,40,40,206, + 137,190,58,40,40,40,40,206,206,129,190,40,40,40,40,206, + 80,190,58,40,40,40,40,206,151,129,58,40,40,40,40,206, + 206,173,173,9,35,31,31,31,31,94,31,31,31,31,31,31, + 31,31,31,31,31,31,31,31,31,31,57,31,31,31,31,57, + 31,57,57,57,57,57,57,57,57,119,57,195,165,195,195,195, + 77,77,77,77,77,246,246,246,246,246,246,246,246,246,246,246, + 246,246,246,246,246,246,246,246,246,106,246,246,171,246,246,106, + 106,106,171,106,106,171,106,106,56,171,106,106,106,171,106,106, + 106,171,171,171,171,106,102,106,102,102,181,171,171,171,171,106, + 171,171,171,102,171,171,102,171,181,121,102,121,102,181,102,102, + 181,102,181,102,121,181,121,102,121,102,181,171,171,19,113,203, + 203,190,58,40,80,80,80,80,206,190,58,80,80,80,80,80, + 206,190,58,80,80,80,80,80,206,190,58,80,80,80,80,80, + 206,190,58,80,80,80,80,80,206,190,58,80,80,80,80,80, + 206,190,58,80,80,80,80,80,206,190,58,80,80,80,80,80, + 206,190,58,80,80,80,80,80,206,190,58,80,80,80,80,80, + 206,190,58,80,80,80,80,80,206,190,58,80,80,80,80,80, + 206,190,58,80,80,80,80,80,206,190,58,80,80,40,80,40, + 151,190,58,40,80,80,80,80,206,190,58,40,80,80,80,40, + 151,190,58,40,40,80,80,40,40,129,58,80,40,40,80,80, + 151,173,173,191,154,237,94,94,31,94,31,94,31,31,31,237, + 31,31,31,31,31,31,31,31,31,31,31,31,31,57,31,31, + 31,31,31,195,31,31,31,195,195,31,25,57,165,195,195,237, + 77,77,77,77,246,77,246,246,246,246,43,246,246,246,246,246, + 246,246,246,246,246,246,246,246,246,246,246,246,106,106,106,106, + 106,106,106,106,106,106,106,106,106,106,171,106,106,171,181,181, + 106,106,106,106,171,106,181,106,106,106,181,181,181,102,106,102, + 181,171,106,102,181,106,181,102,102,181,102,181,102,121,181,181, + 181,121,102,181,102,102,90,181,56,56,19,121,102,19,103,203, + 28,129,203,80,80,80,80,40,135,129,58,80,40,80,80,40, + 135,129,58,80,40,80,80,40,135,129,58,80,40,80,80,40, + 135,129,58,80,40,80,80,40,135,129,58,80,40,80,80,40, + 135,129,58,80,40,80,80,40,135,129,58,80,40,80,80,40, + 135,129,58,80,40,80,80,40,135,129,58,80,40,80,80,40, + 135,129,58,80,40,80,80,40,135,129,58,80,40,80,80,40, + 135,129,58,80,40,80,80,40,135,129,244,80,80,80,40,80, + 206,129,203,80,80,80,80,80,190,190,58,80,80,40,40,80, + 135,129,58,80,80,80,80,80,135,190,191,80,80,80,80,80, + 190,15,173,9,6,237,31,237,31,31,31,94,31,31,31,237, + 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, + 31,31,31,195,31,195,31,195,195,119,195,195,57,25,25,237, + 77,77,77,77,246,77,77,246,77,77,246,77,246,246,246,246, + 246,246,246,246,246,246,246,246,246,246,106,106,246,246,246,106, + 106,106,106,106,106,106,106,106,106,106,106,106,181,106,106,106, + 181,106,106,181,106,171,106,102,181,102,106,171,106,106,181,171, + 171,121,181,106,171,102,171,181,121,181,19,181,181,181,181,181, + 102,181,121,102,121,121,121,181,181,181,102,102,181,181,187,203, + 28,135,115,58,244,58,196,28,196,240,115,58,244,244,244,28, + 196,240,115,58,244,244,244,28,196,240,115,58,244,244,244,28, + 196,240,115,58,244,244,244,28,196,240,115,58,244,244,244,28, + 196,240,115,58,244,244,244,28,196,240,115,58,244,244,244,28, + 196,240,115,58,244,244,244,28,196,240,115,58,244,244,244,28, + 196,240,115,58,244,244,244,28,196,240,115,58,244,244,244,28, + 196,240,115,58,244,244,244,28,196,190,115,58,58,58,58,202, + 196,190,115,58,244,244,142,142,244,191,115,58,58,58,58,196, + 244,240,115,58,58,244,196,196,244,244,115,58,58,58,196,142, + 244,173,173,191,220,237,31,94,31,94,31,237,94,237,195,31, + 237,237,195,195,195,195,195,195,31,210,195,195,195,31,31,31, + 195,31,31,31,195,31,195,195,195,237,195,195,195,195,237,237, + 77,77,77,77,246,246,246,77,246,77,77,246,77,77,77,246, + 77,77,246,77,246,77,77,77,246,77,77,246,77,77,246,77, + 246,246,246,246,106,106,106,106,181,181,106,106,106,106,106,106, + 181,181,106,181,181,181,106,106,106,106,181,181,102,106,121,181, + 171,106,102,121,181,121,181,181,102,181,181,181,181,102,121,181, + 181,181,181,181,19,102,102,181,121,121,121,102,121,102,130,203, + 203,240,58,129,129,240,137,151,244,190,244,137,137,191,137,151, + 244,190,244,137,137,191,137,151,244,190,244,137,137,191,137,151, + 244,190,244,137,137,191,137,151,244,190,244,137,137,191,137,151, + 244,190,244,137,137,191,137,151,244,190,244,137,137,191,137,151, + 244,190,244,137,137,191,137,151,244,190,244,137,137,191,137,151, + 244,190,244,137,137,191,137,151,244,190,244,137,137,191,137,151, + 244,190,244,137,137,191,137,151,244,240,58,129,129,129,129,137, + 196,190,58,129,129,190,129,129,112,190,58,129,133,129,129,129, + 244,190,190,129,129,191,137,129,244,190,58,129,129,240,129,129, + 240,15,173,9,35,237,237,94,237,31,94,237,31,237,31,195, + 31,237,31,237,31,195,31,195,237,31,31,31,210,31,195,31, + 195,195,195,31,195,195,31,195,195,195,195,237,195,237,139,237, + 77,77,77,77,77,77,77,77,77,246,77,77,246,77,246,77, + 246,77,77,77,246,246,246,246,246,77,246,77,246,246,77,246, + 77,77,77,77,106,106,106,106,77,77,106,106,106,106,106,106, + 106,106,106,106,106,171,181,181,106,181,106,171,106,106,171,106, + 121,102,121,102,181,102,181,181,181,121,102,121,181,181,181,102, + 121,181,181,181,181,121,121,102,102,102,121,181,181,156,103,203, + 28,190,244,151,129,191,137,129,244,190,240,129,151,240,137,129, + 244,190,240,129,151,240,137,129,244,190,240,129,151,240,137,129, + 244,190,240,129,151,240,137,129,244,190,240,129,151,240,137,129, + 244,190,240,129,151,240,137,129,244,190,240,129,151,240,137,129, + 244,190,240,129,151,240,137,129,244,190,240,129,151,240,137,129, + 244,190,240,129,151,240,137,129,244,190,240,129,151,240,137,129, + 244,190,240,129,151,240,137,129,58,240,244,133,129,240,129,137, + 244,190,244,151,129,190,133,129,244,191,244,129,129,240,129,129, + 244,58,244,129,129,240,133,137,240,190,240,137,129,190,129,129, + 240,173,173,191,205,237,237,94,237,237,237,195,237,195,195,31, + 31,31,237,31,195,237,237,31,31,210,31,237,31,195,195,237, + 237,195,31,210,195,195,195,237,195,237,237,25,237,195,237,20, + 77,66,77,77,77,77,77,77,246,77,77,246,77,77,246,77, + 77,246,77,77,77,77,246,77,246,77,246,77,77,77,77,77, + 106,106,181,77,106,77,77,106,106,106,77,106,106,181,106,106, + 106,106,106,106,106,106,171,121,106,106,106,106,121,121,181,102, + 121,181,181,181,121,171,181,181,181,181,181,102,181,121,181,181, + 102,102,181,181,181,102,121,181,121,102,102,90,181,19,198,115, + 173,190,58,129,129,129,137,137,240,190,58,129,129,129,137,137, + 240,190,58,129,129,129,137,137,240,190,58,129,129,129,137,137, + 240,190,58,129,129,129,137,137,240,190,58,129,129,129,137,137, + 240,190,58,129,129,129,137,137,240,190,58,129,129,129,137,137, + 240,190,58,129,129,129,137,137,240,190,58,129,129,129,137,137, + 240,190,58,129,129,129,137,137,240,190,58,129,129,129,137,137, + 240,190,58,129,129,129,137,137,240,190,244,129,129,129,129,129, + 240,190,58,129,129,240,129,151,240,190,58,129,129,129,129,133, + 240,191,135,129,129,191,129,133,244,191,244,133,129,240,151,151, + 58,173,173,173,6,237,94,31,237,31,94,31,237,237,237,237, + 237,195,195,237,195,31,237,195,237,237,31,237,237,31,210,31, + 237,237,237,237,237,237,31,237,195,195,195,210,25,25,237,139, + 77,77,77,77,77,77,246,77,77,246,77,77,77,77,246,246, + 77,77,77,77,77,77,246,77,246,77,77,246,246,77,77,106, + 77,77,77,106,77,181,106,106,77,194,106,181,194,77,121,106, + 106,181,181,121,181,181,181,106,181,181,121,181,106,106,106,77, + 102,121,171,106,171,19,171,181,171,121,181,121,181,102,121,171, + 121,171,121,181,181,121,181,102,121,121,121,121,181,19,108,203, + 28,190,240,133,129,129,129,129,244,203,240,137,129,129,129,129, + 244,203,240,137,129,129,129,129,244,203,240,137,129,129,129,129, + 244,203,240,137,129,129,129,129,244,203,240,137,129,129,129,129, + 244,203,240,137,129,129,129,129,244,203,240,137,129,129,129,129, + 244,203,240,137,129,129,129,129,244,203,240,137,129,129,129,129, + 244,203,240,137,129,129,129,129,244,203,240,137,129,129,129,129, + 244,203,240,137,129,129,129,129,244,190,244,129,129,85,137,129, + 196,190,240,133,137,191,129,151,244,191,244,129,129,85,129,129, + 240,244,135,133,137,191,129,129,244,58,244,137,137,129,129,129, + 240,173,28,191,154,20,20,94,20,94,237,237,31,195,237,237, + 237,237,237,237,237,237,237,31,210,31,237,237,237,237,237,237, + 237,31,31,31,210,31,210,195,31,210,237,195,237,237,139,20, + 77,77,77,77,77,77,77,77,246,246,246,246,246,246,77,246, + 246,246,77,246,77,246,77,246,77,246,77,77,246,246,77,106, + 106,106,77,106,77,194,77,181,106,194,77,106,106,106,194,194, + 106,106,106,77,106,77,181,106,106,106,181,181,121,181,181,77, + 106,181,121,181,106,121,181,121,181,181,181,181,121,121,121,181, + 181,181,181,181,181,121,121,181,181,181,181,102,121,156,103,244, + 28,240,28,28,240,202,85,240,196,190,202,112,240,28,85,240, + 196,190,202,112,240,28,85,240,196,190,202,112,240,28,85,240, + 196,190,202,112,240,28,85,240,196,190,202,112,240,28,85,240, + 196,190,202,112,240,28,85,240,196,190,202,112,240,28,85,240, + 196,190,202,112,240,28,85,240,196,190,202,112,240,28,85,240, + 196,190,202,112,240,28,85,240,196,190,202,112,240,28,85,240, + 196,190,202,112,240,28,85,240,28,240,112,240,240,28,240,240, + 202,240,28,28,129,28,240,240,196,135,240,240,240,28,240,240, + 196,240,28,28,129,28,240,240,196,191,28,112,129,28,240,240, + 196,173,15,9,6,237,237,94,237,237,94,237,237,195,195,195, + 237,237,31,195,195,195,237,237,237,237,31,31,237,31,237,31, + 251,237,237,237,237,31,237,237,237,31,237,25,237,237,237,20, + 194,194,77,77,77,77,246,77,77,77,246,246,77,246,246,77, + 246,77,246,77,77,77,77,246,246,77,246,246,77,77,106,77, + 77,77,194,77,77,106,194,77,77,106,181,194,181,77,106,106, + 121,77,106,181,121,121,77,121,194,121,77,106,77,181,121,181, + 121,121,181,121,194,121,181,181,121,121,121,181,181,181,121,181, + 121,121,121,181,121,181,121,121,181,121,121,156,181,156,113,15, + 115,206,89,142,142,115,196,142,142,206,142,142,142,115,142,142, + 142,206,142,142,142,115,142,142,142,206,142,142,142,115,142,142, + 142,206,142,142,142,115,142,142,142,206,142,142,142,115,142,142, + 142,206,142,142,142,115,142,142,142,206,142,142,142,115,142,142, + 142,206,142,142,142,115,142,142,142,206,142,142,142,115,142,142, + 142,206,142,142,142,115,142,142,142,206,142,142,142,115,142,142, + 142,206,142,142,142,115,142,142,115,206,142,142,142,142,142,142, + 115,190,142,115,89,142,142,142,115,190,142,142,142,142,142,115, + 72,190,142,115,89,142,142,142,142,129,89,115,89,142,142,115, + 142,15,202,28,129,16,20,94,20,237,20,237,237,237,237,237, + 237,237,237,237,237,237,237,237,237,210,237,237,210,237,31,237, + 237,31,210,31,237,237,195,195,195,237,237,237,25,237,20,139, + 77,77,77,77,77,77,77,246,77,246,77,77,77,77,77,77, + 246,77,246,77,246,77,77,77,77,77,77,77,77,77,77,77, + 77,77,194,194,77,77,194,194,194,194,77,77,194,194,194,77, + 181,194,77,194,194,181,194,121,194,194,194,121,77,121,194,194, + 77,77,77,121,194,77,194,121,121,194,194,121,194,121,194,121, + 121,77,181,121,181,156,181,181,121,181,121,19,156,156,113,9, + 173,129,190,80,40,80,80,80,151,129,244,80,40,80,80,80, + 151,129,244,80,40,80,80,80,151,129,244,80,40,80,80,80, + 151,129,244,80,40,80,80,80,151,129,244,80,40,80,80,80, + 151,129,244,80,40,80,80,80,151,129,244,80,40,80,80,80, + 151,129,244,80,40,80,80,80,151,129,244,80,40,80,80,80, + 151,129,244,80,40,80,80,80,151,129,244,80,40,80,80,80, + 151,129,244,80,40,80,40,80,80,190,244,80,40,80,40,80, + 151,129,58,80,80,80,80,80,80,190,244,80,40,40,80,80, + 40,129,244,80,80,40,80,80,151,190,244,80,80,80,80,80, + 80,15,28,9,233,20,20,31,20,94,237,20,20,237,237,20, + 237,237,237,237,237,237,237,237,237,237,237,237,237,20,237,237, + 20,237,237,31,237,237,237,237,237,237,237,237,237,237,20,20, + 194,194,194,77,77,77,246,77,77,246,77,246,246,77,77,77, + 77,77,77,246,77,246,77,246,77,77,77,106,77,77,77,77, + 77,77,77,77,194,194,77,77,77,77,194,194,121,77,77,194, + 77,77,194,77,194,66,194,194,121,194,66,194,66,194,66,194, + 156,107,156,77,77,66,66,194,194,121,66,66,194,194,194,219, + 194,156,194,121,156,121,194,156,156,156,121,194,121,107,113,191, + 203,135,244,80,80,40,40,40,40,190,244,80,80,40,40,40, + 40,190,244,80,80,40,40,40,40,190,244,80,80,40,40,40, + 40,190,244,80,80,40,40,40,40,190,244,80,80,40,40,40, + 40,190,244,80,80,40,40,40,40,190,244,80,80,40,40,40, + 40,190,244,80,80,40,40,40,40,190,244,80,80,40,40,40, + 40,190,244,80,80,40,40,40,40,190,244,80,80,40,40,40, + 40,190,244,80,80,80,40,80,151,190,58,80,80,80,80,80, + 40,85,58,80,80,40,80,80,151,190,58,80,80,80,80,80, + 40,151,58,80,80,80,40,40,80,129,58,40,80,80,80,40, + 137,15,173,220,154,16,20,20,20,20,237,237,237,20,20,237, + 20,20,20,237,237,237,237,237,20,237,237,20,237,237,20,237, + 237,20,20,237,237,237,20,20,237,237,237,237,237,139,20,226, + 181,194,194,181,77,194,77,106,77,77,77,77,77,77,77,77, + 77,77,77,77,77,77,77,77,77,77,77,77,77,194,194,77, + 77,194,194,77,77,194,194,66,194,77,77,77,77,194,77,194, + 66,66,194,77,194,77,77,194,194,194,194,194,66,194,66,66, + 77,77,66,107,194,77,77,66,194,194,156,66,194,66,194,194, + 194,66,194,66,194,107,66,194,194,156,107,156,156,184,113,191, + 203,190,58,80,80,80,80,80,151,151,58,80,80,80,80,80, + 151,151,58,80,80,80,80,80,151,151,58,80,80,80,80,80, + 151,151,58,80,80,80,80,80,151,151,58,80,80,80,80,80, + 151,151,58,80,80,80,80,80,151,151,58,80,80,80,80,80, + 151,151,58,80,80,80,80,80,151,151,58,80,80,80,80,80, + 151,151,58,80,80,80,80,80,151,151,58,80,80,80,80,80, + 151,151,58,80,80,80,80,80,151,151,58,80,40,80,80,80, + 80,190,190,80,40,80,40,80,151,151,58,80,80,80,80,80, + 151,190,135,80,80,80,80,80,206,206,190,80,40,40,80,80, + 206,15,173,9,35,20,20,20,237,20,20,20,20,237,237,237, + 237,237,20,20,20,20,20,237,20,20,237,20,20,237,20,237, + 237,237,20,237,237,237,237,237,237,237,20,237,237,251,20,20, + 194,194,194,77,181,77,194,77,77,77,77,77,77,77,77,77, + 77,77,77,77,77,77,77,77,106,77,77,194,77,77,77,194, + 194,77,77,194,66,77,66,77,77,66,194,66,66,77,194,66, + 121,77,194,194,77,194,194,66,194,194,194,194,121,194,194,121, + 107,194,121,77,66,66,107,194,66,66,194,194,66,156,66,66, + 66,156,66,156,107,107,156,107,107,107,156,107,107,184,113,203, + 191,190,58,80,80,80,80,80,40,190,58,80,80,80,80,80, + 40,190,58,80,80,80,80,80,40,190,58,80,80,80,80,80, + 40,190,58,80,80,80,80,80,40,190,58,80,80,80,80,80, + 40,190,58,80,80,80,80,80,40,190,58,80,80,80,80,80, + 40,190,58,80,80,80,80,80,40,190,58,80,80,80,80,80, + 40,190,58,80,80,80,80,80,40,190,58,80,80,80,80,80, + 40,190,58,80,80,80,40,80,40,190,58,80,80,80,80,80, + 206,135,58,80,80,80,40,80,40,190,58,80,80,80,40,80, + 206,190,244,80,40,80,80,80,206,190,58,80,80,80,80,80, + 137,173,173,220,220,16,20,20,20,20,20,237,20,20,20,20, + 20,20,237,237,237,237,237,20,20,237,237,20,237,20,237,20, + 20,20,237,20,20,237,237,20,237,20,237,237,20,20,20,16, + 194,194,194,194,194,77,181,194,181,77,77,181,77,77,106,194, + 77,194,77,77,77,77,106,77,194,194,77,194,77,77,77,77, + 194,194,77,194,194,77,194,194,77,194,77,194,194,66,77,77, + 194,77,121,194,194,121,77,194,194,77,66,194,194,121,77,194, + 66,194,156,194,194,194,66,194,194,66,107,156,66,194,107,156, + 66,107,66,66,66,107,107,107,107,107,107,30,156,184,198,28, + 28,129,58,40,40,40,40,206,151,129,58,40,40,40,40,206, + 151,129,58,40,40,40,40,206,151,129,58,40,40,40,40,206, + 151,129,58,40,40,40,40,206,151,129,58,40,40,40,40,206, + 151,129,58,40,40,40,40,206,151,129,58,40,40,40,40,206, + 151,129,58,40,40,40,40,206,151,129,58,40,40,40,40,206, + 151,129,58,40,40,40,40,206,151,129,58,40,40,40,40,206, + 151,129,58,40,40,40,40,40,151,129,58,40,40,58,40,206, + 151,190,203,40,40,40,40,206,151,129,58,40,40,40,40,206, + 137,190,58,40,40,40,40,206,151,190,190,40,40,40,206,206, + 206,15,173,220,154,16,20,20,20,20,20,20,20,20,20,20, + 20,20,20,20,20,20,237,237,20,20,20,20,237,20,20,237, + 237,20,20,237,20,20,237,20,20,20,20,20,20,20,226,16, + 181,194,181,194,181,194,181,77,106,181,194,106,194,181,181,106, + 194,106,194,194,181,106,77,77,106,77,181,77,194,194,194,194, + 77,77,194,77,194,66,77,77,194,77,194,194,194,194,121,194, + 194,66,77,194,194,194,194,121,77,121,194,77,66,77,107,194, + 121,66,66,194,107,66,194,66,107,66,66,66,194,107,66,66, + 107,194,107,107,107,107,107,107,107,107,156,107,156,30,198,203, + 244,129,58,40,80,80,80,80,206,129,58,40,80,80,80,80, + 206,129,58,40,80,80,80,80,206,129,58,40,80,80,80,80, + 206,129,58,40,80,80,80,80,206,129,58,40,80,80,80,80, + 206,129,58,40,80,80,80,80,206,129,58,40,80,80,80,80, + 206,129,58,40,80,80,80,80,206,129,58,40,80,80,80,80, + 206,129,58,40,80,80,80,80,206,129,58,40,80,80,80,80, + 206,129,58,40,80,80,40,40,40,129,58,40,80,80,40,80, + 151,206,58,80,80,80,40,80,206,190,58,40,80,80,80,80, + 151,190,58,80,80,80,80,80,151,190,58,80,40,40,80,80, + 151,173,15,173,205,11,16,16,16,20,20,20,20,20,20,20, + 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, + 20,20,237,20,251,237,20,20,237,20,20,237,237,20,20,226, + 194,19,194,181,194,106,181,181,181,194,181,181,106,106,181,181, + 181,106,106,77,194,181,194,77,181,77,181,194,194,106,77,194, + 194,194,194,194,194,156,194,66,194,66,77,194,77,194,194,77, + 121,66,66,66,194,194,66,107,66,194,194,77,66,194,66,66, + 194,194,66,121,194,228,156,66,66,66,228,228,107,107,107,107, + 228,107,107,107,66,107,107,156,107,156,107,107,107,104,113,28, + 28,190,58,80,40,80,40,40,135,190,58,80,40,80,40,40, + 135,190,58,80,40,80,40,40,135,190,58,80,40,80,40,40, + 135,190,58,80,40,80,40,40,135,190,58,80,40,80,40,40, + 135,190,58,80,40,80,40,40,135,190,58,80,40,80,40,40, + 135,190,58,80,40,80,40,40,135,190,58,80,40,80,40,40, + 135,190,58,80,40,80,40,40,135,190,58,80,80,40,40,40, + 135,190,203,80,80,80,80,80,206,190,58,80,80,80,80,80, + 190,129,190,40,80,80,80,40,190,129,203,80,80,80,40,40, + 190,129,58,80,40,40,80,80,135,190,191,80,80,80,80,80, + 190,173,173,9,35,11,20,16,16,16,20,20,20,20,20,20, + 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, + 20,20,20,20,20,20,20,20,20,20,20,20,251,20,20,16, + 19,194,194,181,194,181,194,181,181,194,181,106,194,181,181,181, + 194,181,181,181,181,77,181,181,77,181,77,106,106,194,194,181, + 194,194,194,194,194,194,194,194,194,194,156,66,156,194,66,107, + 66,194,194,194,66,66,194,194,194,121,107,156,194,121,194,121, + 66,66,66,66,66,66,66,66,107,107,66,228,228,107,228,228, + 107,228,107,107,104,107,107,228,156,228,107,104,107,184,198,28, + 28,191,115,58,58,58,244,244,244,191,115,58,58,58,244,244, + 244,191,115,58,58,58,244,244,244,191,115,58,58,58,244,244, + 244,191,115,58,58,58,244,244,244,191,115,58,58,58,244,244, + 244,191,115,58,58,58,244,244,244,191,115,58,58,58,244,244, + 244,191,115,58,58,58,244,244,244,191,115,58,58,58,244,244, + 244,191,115,58,58,58,244,244,244,191,115,58,58,58,244,244, + 244,190,115,58,244,58,196,202,244,191,115,58,58,58,115,196, + 196,244,202,58,58,58,244,196,244,190,115,58,115,58,58,244, + 244,191,115,58,58,244,115,244,196,244,115,58,58,58,196,142, + 244,15,173,9,205,11,16,16,20,16,20,16,16,20,20,20, + 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, + 20,20,20,20,20,20,237,20,20,20,20,20,20,20,16,226, + 219,19,194,181,19,194,181,181,194,181,181,181,181,194,181,181, + 181,181,194,194,181,77,181,181,194,181,181,194,181,181,194,194, + 181,194,194,194,194,194,194,194,194,194,194,66,194,194,194,194, + 66,66,194,194,156,66,66,107,66,194,66,107,66,66,107,194, + 66,121,66,107,66,66,228,228,228,228,228,228,228,228,156,228, + 156,104,228,107,104,104,104,104,104,104,107,104,104,73,113,115, + 28,190,190,129,129,129,137,129,244,190,190,129,129,129,137,129, + 244,190,190,129,129,129,137,129,244,190,190,129,129,129,137,129, + 244,190,190,129,129,129,137,129,244,190,190,129,129,129,137,129, + 244,190,190,129,129,129,137,129,244,190,190,129,129,129,137,129, + 244,190,190,129,129,129,137,129,244,190,190,129,129,129,137,129, + 244,190,190,129,129,129,137,129,244,190,58,129,137,129,137,129, + 196,190,58,129,137,240,137,137,196,190,135,129,129,191,133,129, + 244,190,58,129,129,191,137,129,196,190,58,129,133,129,129,129, + 196,190,244,137,137,191,133,129,240,190,58,129,129,240,129,129, + 240,173,173,9,154,11,16,16,16,16,16,20,16,16,20,20, + 20,20,20,20,20,20,20,20,20,20,20,20,237,20,20,20, + 20,237,237,20,237,20,20,237,20,20,20,20,237,251,20,16, + 19,194,19,19,194,19,181,181,194,181,181,194,181,181,181,194, + 181,181,181,194,181,19,181,194,181,181,194,181,181,194,181,194, + 194,194,181,194,194,194,194,194,66,194,194,194,194,66,66,66, + 156,194,66,66,66,194,194,66,194,66,194,66,66,194,66,66, + 66,66,107,66,107,228,66,228,228,228,228,228,104,104,228,104, + 104,228,104,104,228,184,228,228,104,228,104,104,104,184,198,28, + 115,58,135,129,129,240,137,133,28,58,135,129,129,240,137,133, + 28,58,135,129,129,240,137,133,28,58,135,129,129,240,137,133, + 28,58,135,129,129,240,137,133,28,58,135,129,129,240,137,133, + 28,58,135,129,129,240,137,133,28,58,135,129,129,240,137,133, + 28,58,135,129,129,240,137,133,28,58,135,129,129,240,137,133, + 28,58,135,129,129,240,137,137,244,191,244,137,129,240,137,137, + 244,190,244,129,137,191,129,137,244,203,58,129,129,191,129,129, + 240,190,244,129,133,191,133,129,244,190,244,129,129,129,129,151, + 244,190,240,137,129,191,129,129,240,190,240,137,129,190,129,129, + 240,15,15,9,205,164,16,16,16,16,20,16,20,16,20,20, + 16,20,20,20,20,20,20,20,20,20,20,20,20,16,20,20, + 20,20,20,237,20,20,237,20,237,237,237,20,20,20,16,20, + 219,194,194,194,181,194,181,194,181,181,194,181,181,194,181,181, + 181,194,181,19,181,194,181,181,194,181,181,194,19,194,181,194, + 181,194,181,194,219,194,156,219,194,66,194,107,156,194,219,66, + 107,156,156,107,107,107,194,107,107,66,194,107,107,121,107,156, + 107,107,107,107,107,228,156,228,228,228,228,228,228,104,184,104, + 184,184,184,184,104,184,104,184,104,184,184,30,104,73,187,202, + 28,191,244,129,129,129,129,129,240,191,244,129,129,129,129,129, + 240,191,244,129,129,129,129,129,240,191,244,129,129,129,129,129, + 240,191,244,129,129,129,129,129,240,191,244,129,129,129,129,129, + 240,191,244,129,129,129,129,129,240,191,244,129,129,129,129,129, + 240,191,244,129,129,129,129,129,240,191,244,129,129,129,129,129, + 240,191,244,129,129,129,129,133,240,190,244,129,129,129,129,133, + 240,190,58,129,137,240,129,133,240,190,244,129,137,190,129,133, + 244,203,244,133,129,129,129,137,240,190,58,129,129,240,129,137, + 240,190,244,137,129,240,129,151,58,191,244,133,129,191,151,151, + 58,173,173,9,6,11,16,16,16,16,16,16,16,16,16,16, + 20,16,20,20,20,20,20,20,20,20,20,20,20,20,20,20, + 20,20,20,20,20,20,20,20,20,20,237,20,20,237,20,20, + 19,19,19,194,194,19,19,181,194,181,181,181,181,181,194,181, + 194,181,181,194,181,181,181,181,181,181,194,181,181,181,219,181, + 219,19,219,181,194,219,194,194,219,219,156,194,219,156,194,219, + 219,219,107,194,107,121,107,107,194,156,107,156,107,107,156,107, + 156,156,184,156,156,107,156,156,104,156,104,228,184,184,184,184, + 184,184,184,184,184,73,73,104,239,104,104,104,104,73,198,15, + 115,58,240,129,129,85,129,151,240,58,240,129,129,85,129,151, + 240,58,240,129,129,85,129,151,240,58,240,129,129,85,129,151, + 240,58,240,129,129,85,129,151,240,58,240,129,129,85,129,151, + 240,58,240,129,129,85,129,151,240,58,240,129,129,85,129,151, + 240,58,240,129,129,85,129,151,240,58,240,129,129,85,129,151, + 240,58,240,129,129,85,129,129,244,190,240,129,129,85,129,129, + 28,190,244,137,137,129,129,129,240,190,135,133,129,129,129,129, + 135,190,244,129,129,240,133,129,244,190,58,129,129,129,133,129, + 28,58,240,137,129,129,129,129,244,58,244,137,133,129,129,129, + 240,173,173,9,65,164,16,16,16,16,20,20,16,16,20,20, + 16,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, + 20,20,20,20,237,20,20,20,20,20,20,20,20,20,20,16, + 194,194,194,194,194,194,19,194,181,194,194,106,77,194,181,194, + 181,77,77,194,194,194,194,181,194,181,219,194,194,181,219,194, + 194,181,219,19,219,219,19,219,194,194,219,194,219,219,219,194, + 194,194,219,219,219,156,219,156,156,219,156,219,219,219,219,219, + 219,219,219,156,219,156,156,156,30,156,30,30,30,107,104,30, + 184,104,184,104,184,30,184,184,239,184,184,239,239,73,130,28, + 28,240,196,240,240,28,240,191,196,240,196,240,240,28,240,191, + 196,240,196,240,240,28,240,191,196,240,196,240,240,28,240,191, + 196,240,196,240,240,28,240,191,196,240,196,240,240,28,240,191, + 196,240,196,240,240,28,240,191,196,240,196,240,240,28,240,191, + 196,240,196,240,240,28,240,191,196,240,196,240,240,28,240,191, + 196,240,196,240,240,28,240,240,202,240,202,240,240,28,240,240, + 196,112,112,112,129,202,240,240,196,240,202,28,129,202,240,190, + 202,240,28,112,240,28,240,240,202,240,112,112,135,28,112,240, + 196,240,28,112,129,202,240,240,244,240,28,112,240,28,240,240, + 196,173,173,9,35,164,16,16,16,16,16,16,20,16,16,16, + 20,16,20,20,20,20,20,20,20,20,20,20,20,20,20,20, + 20,20,237,20,20,237,20,20,20,20,237,237,20,20,20,16, + 228,194,219,194,194,194,194,219,19,194,194,194,19,194,194,194, + 219,19,19,194,194,219,194,194,194,219,194,194,219,194,194,19, + 219,219,194,194,181,194,219,181,219,19,194,219,194,156,219,219, + 219,19,219,219,156,219,219,219,219,219,219,219,219,156,219,219, + 156,19,219,219,30,219,30,30,156,30,30,156,156,30,30,30, + 30,30,45,30,30,104,30,30,104,104,104,104,104,73,187,115, + 115,190,142,142,142,142,142,115,142,190,142,142,142,142,142,115, + 142,190,142,142,142,142,142,115,142,190,142,142,142,142,142,115, + 142,190,142,142,142,142,142,115,142,190,142,142,142,142,142,115, + 142,190,142,142,142,142,142,115,142,190,142,142,142,142,142,115, + 142,190,142,142,142,142,142,115,142,190,142,142,142,142,142,115, + 142,190,142,142,142,142,142,142,115,151,142,142,142,142,142,142, + 115,190,202,115,142,142,142,115,115,190,142,115,142,142,142,142, + 115,151,142,142,142,115,142,142,115,190,142,142,142,115,142,142, + 142,190,142,115,142,142,142,142,142,129,142,202,142,142,142,115, + 142,15,15,173,205,11,16,16,16,16,16,16,16,20,20,16, + 20,20,16,20,16,20,20,20,20,20,20,20,20,20,20,20, + 20,20,20,20,20,20,20,20,237,20,20,20,20,20,20,20, + 228,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194, + 194,77,77,194,194,194,194,219,194,194,219,194,194,194,194,194, + 194,219,219,219,219,219,219,194,194,219,181,219,194,194,194,194, + 219,219,19,219,219,19,156,219,19,121,181,219,219,19,19,19, + 219,156,19,19,30,219,19,30,19,156,30,30,30,219,30,30, + 156,156,30,30,30,239,104,30,45,184,104,184,104,73,187,28, + 173,129,244,80,80,80,40,80,151,129,244,80,80,80,40,80, + 151,129,244,80,80,80,40,80,151,129,244,80,80,80,40,80, + 151,129,244,80,80,80,40,80,151,129,244,80,80,80,40,80, + 151,129,244,80,80,80,40,80,151,129,244,80,80,80,40,80, + 151,129,244,80,80,80,40,80,151,129,244,80,80,80,40,80, + 151,129,244,80,80,40,40,80,80,190,244,80,80,40,40,80, + 80,190,58,80,80,40,80,80,80,129,244,80,40,40,80,40, + 80,190,244,80,80,80,40,80,80,190,58,80,40,80,40,40, + 137,151,244,80,40,80,80,80,151,190,244,80,40,80,80,80, + 80,15,15,173,154,11,16,16,16,16,16,16,16,20,20,16, + 16,16,20,16,20,20,16,16,20,20,20,20,20,20,20,20, + 20,20,20,20,20,20,20,20,20,20,20,237,20,20,16,16, + 219,219,219,194,19,194,194,194,181,194,19,194,194,219,19,194, + 194,219,219,194,194,194,194,194,194,194,194,194,194,194,194,194, + 219,194,194,194,219,194,219,219,219,219,219,219,219,219,219,219, + 194,121,194,19,156,219,19,194,194,219,156,19,194,219,156,219, + 19,19,156,219,19,219,219,19,219,30,156,19,30,30,30,219, + 30,30,30,30,30,30,30,45,104,30,30,104,239,73,187,203, + 191,190,58,40,40,80,80,80,40,190,58,40,40,80,80,80, + 40,190,58,40,40,80,80,80,40,190,58,40,40,80,80,80, + 40,190,58,40,40,80,80,80,40,190,58,40,40,80,80,80, + 40,190,58,40,40,80,80,80,40,190,58,40,40,80,80,80, + 40,190,58,40,40,80,80,80,40,190,58,40,40,80,80,80, + 40,190,58,40,80,80,80,80,151,190,58,40,80,80,80,80, + 151,190,58,40,80,40,80,80,206,151,58,80,80,80,80,80, + 151,190,244,80,80,80,40,80,151,135,244,80,80,80,80,80, + 40,206,58,80,80,80,40,40,80,190,58,80,80,80,80,40, + 137,173,28,220,205,164,16,11,16,16,20,20,16,16,16,16, + 16,20,20,16,16,20,20,16,20,16,20,16,20,20,20,20, + 20,20,20,20,20,20,20,20,20,20,20,20,20,16,20,16, + 219,219,219,194,219,219,194,19,194,194,181,194,194,194,194,181, + 194,194,194,77,194,194,194,194,194,194,219,219,219,107,219,66, + 219,219,107,194,219,194,156,219,194,194,194,219,219,219,219,219, + 219,219,219,219,19,156,219,19,219,19,194,19,181,219,19,121, + 219,19,181,121,19,156,219,30,219,30,30,219,30,156,30,30, + 30,30,30,30,30,104,30,30,104,30,30,30,104,73,178,244, + 191,151,58,80,80,80,80,80,151,151,58,80,80,80,80,80, + 151,151,58,80,80,80,80,80,151,151,58,80,80,80,80,80, + 151,151,58,80,80,80,80,80,151,151,58,80,80,80,80,80, + 151,151,58,80,80,80,80,80,151,151,58,80,80,80,80,80, + 151,151,58,80,80,80,80,80,151,151,58,80,80,80,80,80, + 151,151,203,80,80,80,80,80,40,151,58,80,80,80,40,80, + 151,129,190,80,80,80,80,80,151,190,190,80,80,40,80,80, + 40,206,58,40,80,80,80,80,151,129,58,80,80,80,80,80, + 151,129,135,80,40,80,80,80,206,206,58,80,40,40,80,80, + 206,28,15,233,154,164,16,16,11,11,16,16,16,16,226,16, + 16,16,16,20,16,20,16,16,16,20,16,20,16,16,20,20, + 16,20,20,16,20,20,16,20,20,20,16,20,20,20,20,16, + 219,219,219,219,194,194,19,181,19,194,181,181,194,181,194,181, + 194,181,194,19,194,219,194,194,194,194,194,194,194,194,194,219, + 194,194,194,219,219,219,194,194,219,156,219,219,219,194,194,19, + 219,19,19,181,194,219,19,219,19,219,19,194,219,181,181,19, + 181,219,219,19,194,181,19,19,19,19,19,156,19,30,30,156, + 219,156,156,30,156,30,30,30,45,104,30,104,45,73,187,28, + 203,190,58,80,80,80,80,80,40,190,58,80,80,80,80,80, + 40,190,58,80,80,80,80,80,40,190,58,80,80,80,80,80, + 40,190,58,80,80,80,80,80,40,190,58,80,80,80,80,80, + 40,190,58,80,80,80,80,80,40,190,58,80,80,80,80,80, + 40,190,58,80,80,80,80,80,40,190,58,80,80,80,80,80, + 206,206,58,80,80,80,40,80,40,190,58,80,80,80,40,80, + 40,135,58,80,80,80,40,80,206,190,58,80,80,80,40,80, + 137,190,190,80,80,80,80,40,40,129,58,80,80,80,80,40, + 40,190,58,80,80,80,80,80,151,190,58,80,80,80,80,80, + 137,15,173,9,65,164,164,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,20,16,16, + 20,16,16,20,16,16,20,20,16,16,20,16,20,16,225,225, + 219,219,194,219,194,194,194,181,194,181,181,194,181,181,194,181, + 194,181,194,181,194,181,181,181,181,181,194,194,181,194,181,194, + 194,194,194,194,194,219,219,194,219,219,181,194,19,19,121,181, + 194,194,219,19,181,219,19,19,181,181,19,181,156,219,181,19, + 181,19,19,19,156,194,19,156,156,19,19,219,19,19,30,19, + 19,30,219,30,30,30,30,19,30,30,156,30,30,239,130,28, + 244,129,190,40,40,58,40,206,151,129,190,40,40,58,40,206, + 151,129,190,40,40,58,40,206,151,129,190,40,40,58,40,206, + 151,129,190,40,40,58,40,206,151,129,190,40,40,58,40,206, + 151,129,190,40,40,58,40,206,151,129,190,40,40,58,40,206, + 151,129,190,40,40,58,40,206,151,129,190,40,40,58,40,40, + 151,129,58,40,40,40,40,206,151,129,190,40,40,40,40,40, + 151,190,190,40,40,40,40,40,151,190,58,40,40,40,40,206, + 206,151,58,40,40,40,40,206,151,206,58,40,40,40,40,40, + 151,190,58,40,40,40,206,40,151,129,58,40,40,40,40,206, + 206,173,173,9,108,164,11,16,11,16,16,11,16,16,16,16, + 16,11,16,11,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,11, + 219,194,219,181,194,181,194,181,181,181,181,194,181,181,181,181, + 181,181,181,181,194,181,181,194,181,194,181,181,181,181,181,181, + 181,181,181,181,19,181,181,181,194,181,219,219,181,194,219,219, + 19,19,19,121,219,181,121,181,219,156,181,19,181,181,156,181, + 156,181,156,19,19,19,219,19,19,19,156,19,156,19,19,30, + 30,30,19,30,30,19,30,30,30,30,30,30,30,239,125,115, + 28,190,58,40,80,80,40,80,206,190,58,40,80,80,40,80, + 206,190,58,40,80,80,40,80,206,190,58,40,80,80,40,80, + 206,190,58,40,80,80,40,80,206,190,58,40,80,80,40,80, + 206,190,58,40,80,80,40,80,206,190,58,40,80,80,40,80, + 206,190,58,40,80,80,40,80,206,190,58,40,80,80,40,40, + 40,129,58,40,80,80,80,80,206,190,58,40,80,80,40,80, + 151,190,58,80,40,80,80,80,151,129,58,80,40,80,80,80, + 190,190,58,40,80,40,80,80,190,190,58,40,40,80,80,80, + 151,129,58,40,80,40,80,40,40,129,58,80,40,40,80,80, + 151,28,173,9,65,164,164,11,16,16,11,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,11,16,16,16,16,16,16,225,11,225, + 219,194,219,219,194,181,181,181,181,181,181,181,181,181,181,181, + 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181, + 181,181,181,181,181,181,19,181,181,181,181,19,19,181,181,181, + 194,181,19,181,219,19,219,19,19,219,19,19,19,181,19,19, + 19,19,19,19,19,19,19,156,30,30,19,19,156,19,19,19, + 30,19,30,19,30,30,30,30,30,30,30,30,30,149,178,28, + 203,190,58,80,80,80,80,40,190,190,58,80,80,80,80,40, + 190,190,58,80,80,80,80,40,190,190,58,80,80,80,80,40, + 190,190,58,80,80,80,80,40,190,190,58,80,80,80,80,40, + 190,190,58,80,80,80,80,40,190,190,58,80,80,80,80,40, + 190,190,58,80,80,80,80,40,190,190,58,80,80,80,80,80, + 84,190,58,80,80,40,80,40,190,190,203,80,80,80,80,80, + 190,190,244,80,80,80,40,80,135,190,203,80,80,80,80,80, + 206,190,58,80,80,80,80,40,151,129,58,80,80,80,80,40, + 190,190,203,80,80,80,80,80,135,190,191,80,80,80,80,80, + 190,28,191,173,35,164,16,164,16,11,16,225,11,225,16,11, + 16,11,16,11,225,16,225,11,16,16,16,16,16,16,16,11, + 16,16,16,16,16,16,16,16,11,11,11,16,11,11,11,11, + 219,219,194,181,194,194,194,181,194,181,181,181,181,181,181,181, + 181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181, + 181,181,181,181,181,181,181,181,181,181,181,181,181,19,19,181, + 19,19,19,19,181,19,19,19,19,19,19,19,19,19,181,19, + 19,19,19,19,19,19,19,19,19,19,19,19,19,156,19,19, + 19,19,45,19,19,30,90,30,90,45,156,45,30,239,125,28, + 112,191,115,58,58,58,244,244,244,191,115,58,58,58,244,244, + 244,191,115,58,58,58,244,244,244,191,115,58,58,58,244,244, + 244,191,115,58,58,58,244,244,244,191,115,58,58,58,244,244, + 244,191,115,58,58,58,244,244,244,191,115,58,58,58,244,244, + 244,191,115,58,58,58,244,244,244,191,115,58,58,58,244,244, + 244,191,115,58,58,244,244,196,244,190,115,58,244,58,115,196, + 244,191,115,58,58,58,115,244,244,190,115,58,58,244,196,202, + 240,191,115,58,58,58,58,115,244,191,115,58,58,244,196,196, + 244,190,115,58,58,244,196,196,244,244,115,58,58,58,196,142, + 244,15,173,9,205,164,164,11,11,11,11,11,16,11,11,16, + 11,16,16,16,11,11,11,16,11,11,11,16,11,11,11,11, + 11,11,164,16,11,11,11,164,16,11,164,16,11,11,164,164, + 194,19,194,194,181,181,181,181,181,181,181,181,181,181,181,102, + 181,181,102,181,102,181,102,181,102,181,102,181,181,181,181,181, + 102,181,181,102,19,102,19,19,90,181,181,90,181,181,19,181, + 181,181,181,19,181,181,19,181,19,181,181,181,19,19,181,19, + 19,19,19,19,181,19,19,19,19,19,156,19,19,30,19,30, + 19,30,90,45,30,45,45,45,156,45,156,45,45,149,27,15, + 203,190,190,129,129,191,151,129,240,190,190,129,129,191,151,129, + 240,190,190,129,129,191,151,129,240,190,190,129,129,191,151,129, + 240,190,190,129,129,191,151,129,240,190,190,129,129,191,151,129, + 240,190,190,129,129,191,151,129,240,190,190,129,129,191,151,129, + 240,190,190,129,129,191,151,129,240,190,190,129,129,191,151,129, + 244,190,58,129,137,190,137,129,240,190,135,129,137,191,133,151, + 240,58,58,129,129,129,133,129,196,190,58,129,129,190,129,137, + 196,190,58,129,129,191,129,133,196,190,190,129,129,190,137,129, + 196,190,58,129,129,191,137,129,244,190,58,129,129,240,129,129, + 240,15,9,9,154,164,16,164,16,11,11,11,16,11,11,16, + 11,11,11,16,225,16,11,11,16,11,11,164,11,16,164,16, + 164,11,11,164,11,164,11,164,11,16,164,164,11,164,164,10, + 19,194,19,194,181,181,181,106,181,181,181,181,181,102,106,181, + 102,181,181,181,102,181,102,181,102,181,181,102,102,181,102,181, + 181,181,181,181,181,181,102,181,181,90,19,181,181,181,102,19, + 90,19,19,102,19,19,181,19,181,90,19,19,181,181,19,19, + 19,19,19,19,156,19,19,19,19,30,30,19,30,30,90,45, + 90,30,45,30,30,156,30,156,45,45,45,30,30,45,125,28, + 244,58,58,129,151,129,129,129,244,58,58,129,151,129,129,129, + 244,58,58,129,151,129,129,129,244,58,58,129,151,129,129,129, + 244,58,58,129,151,129,129,129,244,58,58,129,151,129,129,129, + 244,58,58,129,151,129,129,129,244,58,58,129,151,129,129,129, + 244,58,58,129,151,129,129,129,244,58,58,129,151,191,137,133, + 28,191,244,137,129,240,137,129,244,58,244,129,129,191,129,129, + 240,190,240,129,129,240,129,133,28,240,240,129,129,240,129,129, + 244,190,244,129,129,129,129,129,244,58,244,129,129,240,137,133, + 28,190,244,137,129,240,133,137,240,190,240,137,129,190,129,129, + 240,28,28,9,65,164,164,11,164,164,11,11,11,11,11,11, + 11,11,11,11,164,16,11,11,11,164,16,164,164,164,164,164, + 164,164,16,164,164,164,11,164,164,164,164,164,164,164,10,164, + 181,194,181,181,181,181,181,106,106,106,171,106,106,181,102,181, + 181,102,181,106,106,106,171,106,171,181,181,181,181,181,181,181, + 102,181,181,181,181,181,181,181,181,181,181,19,19,19,181,19, + 181,19,19,19,19,19,181,19,219,19,19,19,19,19,19,19, + 19,19,156,19,19,156,156,156,19,19,30,19,156,30,30,30, + 30,156,30,90,45,45,45,45,156,45,45,45,45,45,130,202, + 203,191,244,129,137,240,133,151,240,191,244,129,137,240,133,151, + 240,191,244,129,137,240,133,151,240,191,244,129,137,240,133,151, + 240,191,244,129,137,240,133,151,240,191,244,129,137,240,133,151, + 240,191,244,129,137,240,133,151,240,191,244,129,137,240,133,151, + 240,191,244,129,137,240,133,151,240,191,244,129,129,129,137,129, + 135,190,244,133,129,129,133,151,240,191,58,129,133,190,129,137, + 58,240,58,129,129,191,129,129,135,190,244,133,129,190,137,151, + 240,191,244,133,133,240,129,137,240,191,58,129,129,129,129,129, + 135,190,244,133,129,191,129,137,244,191,244,133,129,240,151,151, + 58,28,28,9,108,164,164,164,11,164,164,164,11,11,164,11, + 11,11,164,11,164,164,164,164,164,164,164,164,164,164,164,164, + 164,164,164,164,164,164,164,164,164,164,164,164,164,164,10,10, + 194,181,194,181,181,181,181,181,102,181,181,102,102,181,181,181, + 102,181,106,102,181,102,181,181,102,181,181,102,181,181,181,181, + 181,181,181,181,181,181,181,181,194,181,181,181,181,194,219,194, + 219,219,219,219,156,19,219,19,19,219,156,156,30,156,156,156, + 156,156,156,30,219,30,30,30,104,104,30,30,30,30,30,30, + 30,104,45,45,45,156,45,156,45,45,156,45,30,73,21,15, + 191,190,240,137,129,191,129,151,240,190,240,133,129,191,129,129, + 240,190,240,133,129,191,129,129,240,190,240,133,129,191,129,129, + 240,190,240,133,129,191,129,129,240,190,240,133,129,191,129,129, + 240,190,240,133,129,191,129,129,240,190,240,133,129,191,129,129, + 240,190,240,133,129,191,129,129,240,190,135,133,129,85,129,129, + 244,191,244,129,129,191,129,129,240,190,240,129,129,129,129,133, + 244,58,135,129,151,129,129,129,244,58,244,137,129,129,129,129, + 244,190,244,129,129,240,137,129,240,190,135,133,129,240,129,129, + 244,190,244,137,137,191,133,129,244,58,244,137,137,129,129,129, + 240,15,28,191,205,10,164,164,164,11,164,164,164,164,11,164, + 164,164,164,164,164,11,11,164,164,164,164,164,164,164,164,164, + 164,164,164,10,164,164,164,164,164,164,10,164,164,164,10,10, + 181,181,181,77,181,181,181,181,181,106,181,181,181,181,181,181, + 106,181,106,181,106,181,181,181,181,181,181,181,181,181,181,181, + 181,181,181,181,181,181,194,181,194,219,194,219,219,219,219,219, + 219,219,219,219,156,30,156,219,156,219,156,219,30,30,156,30, + 184,30,107,184,107,228,184,184,184,184,104,104,104,104,104,104, + 30,104,30,104,45,104,45,45,104,45,104,239,239,239,27,115, + 203,240,28,112,240,28,240,240,196,240,28,28,240,28,112,135, + 142,240,28,28,240,28,112,135,142,240,28,28,240,28,112,135, + 142,240,28,28,240,28,112,135,142,240,28,28,240,28,112,135, + 142,240,28,28,240,28,112,135,142,240,28,28,240,28,112,135, + 142,240,28,28,240,28,112,135,196,240,28,112,240,28,240,240, + 202,135,28,112,240,28,240,240,196,240,28,112,85,202,112,240, + 28,240,202,112,129,202,240,240,244,240,28,112,85,28,85,240, + 196,240,28,112,191,112,240,240,142,240,28,28,240,112,240,240, + 202,240,28,112,129,28,112,240,196,191,28,112,129,28,240,240, + 196,203,15,191,154,169,164,10,164,164,164,164,164,164,164,164, + 164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164, + 164,164,10,164,164,10,164,164,10,164,164,164,10,10,10,10, + 194,194,181,19,194,181,194,181,181,181,181,181,181,181,181,181, + 181,181,181,106,181,181,194,181,181,181,181,181,181,181,181,181, + 181,181,181,181,194,181,181,194,19,181,219,181,219,181,19,219, + 156,219,219,219,219,219,184,107,107,219,30,30,107,219,184,107, + 219,219,184,156,184,30,107,107,107,107,184,184,104,107,104,156, + 104,30,104,104,30,104,104,104,45,104,239,239,239,138,125,28, + 244,206,142,142,142,142,142,115,115,206,142,142,142,142,142,115, + 115,206,142,142,142,142,142,115,115,206,142,142,142,142,142,115, + 115,206,142,142,142,142,142,115,115,206,142,142,142,142,142,115, + 115,206,142,142,142,142,142,115,115,206,142,142,142,142,142,115, + 115,206,142,142,142,142,142,115,115,190,115,196,142,142,142,142, + 115,129,142,142,142,142,142,115,115,206,115,115,244,196,115,72, + 196,190,142,115,142,142,142,142,142,129,142,142,202,115,196,142, + 115,151,115,142,115,142,142,115,115,190,142,142,115,142,142,142, + 115,129,89,115,253,115,196,142,142,129,89,115,89,142,142,115, + 142,15,28,173,65,169,10,208,10,10,10,164,164,10,164,164, + 164,164,164,164,164,10,164,164,164,164,164,169,164,164,169,164, + 10,164,10,10,164,10,164,10,164,164,222,164,164,164,222,222, + 19,194,194,181,194,181,194,181,181,194,181,181,194,181,194,181, + 194,181,181,194,181,194,181,194,181,181,181,181,181,181,181,194, + 181,181,181,181,181,181,181,181,194,181,19,19,219,19,19,181, + 19,19,219,219,219,219,30,30,30,219,219,30,156,219,30,30, + 30,219,30,219,156,30,30,184,30,107,156,184,184,184,104,184, + 104,104,104,30,104,104,30,104,239,73,104,104,104,138,27,28, + 28,129,244,80,80,80,40,80,151,129,58,80,80,80,40,80, + 151,129,58,80,80,80,40,80,151,129,58,80,80,80,40,80, + 151,129,58,80,80,80,40,80,151,129,58,80,80,80,40,80, + 151,129,58,80,80,80,40,80,151,129,58,80,80,80,40,80, + 151,129,58,80,80,80,40,80,151,129,190,80,40,80,40,80, + 151,206,244,80,80,80,80,80,151,129,190,80,40,80,80,80, + 151,129,58,80,40,80,40,80,151,206,203,40,40,80,40,80, + 80,190,190,80,80,80,80,80,151,129,58,80,80,80,80,80, + 80,206,244,80,80,80,80,80,151,190,244,80,80,80,80,80, + 80,15,15,28,205,169,169,10,10,10,10,10,10,10,10,10, + 10,164,222,164,10,10,10,10,169,164,164,169,164,164,164,169, + 164,164,10,10,10,164,10,10,222,164,10,222,10,10,10,222, + 194,19,194,194,19,194,194,194,194,194,194,194,194,194,194,19, + 194,194,19,194,194,194,194,194,219,194,219,194,194,194,194,181, + 219,194,194,181,19,219,181,181,19,181,181,181,19,181,19,219, + 219,19,19,19,19,19,19,19,219,219,219,219,30,219,219,219, + 156,219,219,30,219,219,156,156,30,30,184,219,30,30,184,30, + 104,30,104,104,104,104,104,104,104,104,239,239,239,138,178,191, + 191,190,58,40,80,80,80,80,40,85,58,40,80,80,80,80, + 40,85,58,40,80,80,80,80,40,85,58,40,80,80,80,80, + 40,85,58,40,80,80,80,80,40,85,58,40,80,80,80,80, + 40,85,58,40,80,80,80,80,40,85,58,40,80,80,80,80, + 40,85,58,40,80,80,80,80,40,135,244,80,40,80,80,80, + 137,206,58,40,40,80,80,80,206,84,58,80,40,80,40,80, + 40,190,58,80,40,80,40,80,40,206,135,80,80,80,80,80, + 151,135,58,80,40,80,80,80,40,85,58,80,40,40,80,80, + 151,129,58,80,80,80,40,40,80,129,58,40,80,80,80,40, + 137,15,28,9,205,169,222,169,10,169,222,222,10,10,10,10, + 164,222,10,10,10,10,169,164,169,164,169,164,169,164,10,164, + 169,10,10,10,169,10,10,222,10,10,10,10,222,10,222,222, + 194,219,194,194,219,194,194,194,194,194,194,194,194,194,194,219, + 219,194,219,194,19,219,194,194,194,66,219,219,219,219,219,194, + 194,219,219,194,194,219,219,181,219,219,19,19,219,181,19,19, + 19,19,19,19,19,19,19,19,19,219,19,19,19,219,219,219, + 219,19,219,30,219,219,30,219,219,30,30,30,219,30,30,219, + 156,156,30,30,30,156,30,30,104,104,104,239,104,138,178,203, + 191,151,244,80,80,80,80,80,137,190,203,80,80,80,80,80, + 137,190,203,80,80,80,80,80,137,190,203,80,80,80,80,80, + 137,190,203,80,80,80,80,80,137,190,203,80,80,80,80,80, + 137,190,203,80,80,80,80,80,137,190,203,80,80,80,80,80, + 137,190,203,80,80,80,80,80,151,190,58,80,80,80,80,80, + 206,129,244,80,80,80,80,80,80,190,190,80,80,80,80,40, + 151,129,190,80,80,80,80,80,151,129,58,80,80,80,80,80, + 40,190,244,80,80,80,80,80,80,190,244,80,80,80,80,80, + 206,206,244,80,80,40,80,80,206,206,190,80,40,40,80,80, + 206,173,28,220,108,169,169,169,169,169,222,222,222,222,222,222, + 222,222,222,10,169,164,169,10,169,10,169,164,169,169,169,10, + 10,169,10,10,10,169,10,222,10,169,10,10,10,222,222,169, + 228,194,219,228,194,194,194,19,194,194,194,219,194,194,194,194, + 194,219,194,219,194,194,194,194,219,194,194,194,194,194,194,194, + 219,194,194,219,219,194,194,219,181,19,19,194,19,219,219,19, + 194,19,219,19,19,219,219,219,219,19,219,219,30,30,219,156, + 30,30,219,219,30,30,219,30,30,219,30,156,30,30,30,30, + 30,30,156,156,156,30,30,30,45,45,30,104,239,73,21,58, + 203,151,58,80,80,80,80,40,40,151,58,80,80,80,80,40, + 40,151,58,80,80,80,80,40,40,151,58,80,80,80,80,40, + 40,151,58,80,80,80,80,40,40,151,58,80,80,80,80,40, + 40,151,58,80,80,80,80,40,40,151,58,80,80,80,80,40, + 40,151,58,80,80,80,80,80,137,190,58,80,80,80,80,80, + 206,206,58,80,80,80,80,40,151,190,58,80,80,80,80,80, + 40,190,58,80,80,80,80,80,206,190,58,80,80,80,40,80, + 137,206,58,80,80,80,80,40,40,206,58,80,80,80,40,80, + 206,151,58,80,80,80,80,80,206,135,58,80,80,80,80,80, + 137,28,28,191,130,169,169,169,169,169,222,222,222,222,222,222, + 222,10,222,169,10,169,10,169,10,169,10,169,10,10,164,169, + 169,10,169,169,169,10,169,10,169,222,169,222,222,222,169,222, + 228,228,219,219,219,194,194,194,219,219,194,194,194,194,194,19, + 194,219,194,219,194,219,194,194,219,194,219,219,219,194,219,194, + 219,219,194,219,219,219,194,219,219,219,219,219,219,219,219,219, + 219,30,219,219,19,19,30,30,30,30,30,219,219,30,30,30, + 219,30,30,219,30,30,30,30,30,30,239,184,30,30,30,30, + 30,30,30,30,30,30,30,30,104,45,45,45,45,73,21,240, + 203,190,58,40,40,40,40,206,80,190,58,40,40,40,40,206, + 80,190,58,40,40,40,40,206,80,190,58,40,40,40,40,206, + 80,190,58,40,40,40,40,206,80,190,58,40,40,40,40,206, + 80,190,58,40,40,40,40,206,80,190,58,40,40,40,40,206, + 80,190,58,40,40,58,40,206,40,190,58,40,40,58,40,206, + 151,129,58,40,40,58,206,40,40,190,58,40,40,40,40,206, + 151,190,58,40,40,40,40,206,137,190,58,40,40,40,40,206, + 206,129,58,40,40,58,40,206,151,129,58,40,40,40,40,206, + 151,190,58,40,40,40,40,206,151,190,190,40,40,40,206,206, + 206,28,173,191,103,169,169,169,169,169,102,169,169,102,169,169, + 169,169,222,169,222,169,222,169,169,169,10,169,169,169,10,169, + 169,10,169,10,169,222,169,222,10,222,169,169,222,222,169,102, + 184,228,228,228,228,228,228,228,194,194,219,219,228,219,219,228, + 219,194,219,194,219,194,219,66,194,219,66,66,219,228,228,219, + 228,66,107,219,107,107,219,107,66,66,219,219,30,156,219,30, + 219,219,30,30,219,30,19,219,219,219,19,30,30,30,30,219, + 30,30,30,30,219,30,184,30,184,184,30,45,30,184,30,184, + 30,30,45,45,104,104,239,30,45,104,104,239,73,138,125,244, + 240,190,58,40,40,80,80,80,206,190,58,40,40,80,80,80, + 206,190,58,40,40,80,80,80,206,190,58,40,40,80,80,80, + 206,190,58,40,40,80,80,80,206,190,58,40,40,80,80,80, + 206,190,58,40,40,80,80,80,206,190,58,40,40,80,80,80, + 206,190,58,40,80,80,40,80,137,129,58,40,80,80,40,80, + 206,129,58,40,80,80,80,80,151,129,58,40,80,80,40,80, + 151,129,58,40,80,40,40,40,80,190,58,40,40,80,80,80, + 206,190,58,40,80,80,80,80,206,190,58,40,80,80,80,80, + 206,190,58,80,80,80,80,80,151,190,58,80,40,40,80,80, + 151,173,15,9,130,169,169,169,169,169,169,169,169,222,169,102, + 102,169,169,169,169,169,169,222,222,169,169,169,169,169,169,169, + 169,169,169,169,169,169,169,169,169,169,222,222,222,222,222,169, + 184,184,228,228,184,228,228,228,228,228,228,228,228,228,228,228, + 228,228,228,228,228,228,219,228,228,219,219,66,219,219,219,219, + 219,219,228,219,219,184,107,184,219,107,107,219,107,219,107,30, + 156,219,219,30,219,30,30,30,30,30,30,219,30,30,30,30, + 30,30,30,30,30,156,30,30,30,184,30,30,30,30,30,30, + 239,184,30,45,45,30,73,104,239,239,239,239,149,138,27,244, + 203,129,58,80,80,80,80,80,85,129,58,80,80,80,80,80, + 85,129,58,80,80,80,80,80,85,129,58,80,80,80,80,80, + 85,129,58,80,80,80,80,80,85,129,58,80,80,80,80,80, + 85,129,58,80,80,80,80,80,85,129,58,80,80,80,80,80, + 85,129,58,80,80,80,80,80,190,190,58,80,80,80,80,40, + 135,190,58,80,80,80,80,80,190,190,58,80,80,40,80,80, + 206,190,58,80,80,80,80,80,135,129,58,80,80,80,80,80, + 190,190,58,80,80,80,80,80,135,129,58,80,80,40,80,80, + 85,129,244,80,40,40,80,80,190,190,191,80,80,80,80,80, + 190,28,203,9,187,169,169,169,169,169,169,169,169,102,102,102, + 102,102,102,169,169,169,169,169,222,169,169,169,169,169,169,169, + 169,169,169,222,169,222,169,169,222,222,222,169,222,169,222,102, + 184,184,184,184,228,184,184,228,228,228,228,219,228,194,228,219, + 228,219,219,228,219,194,228,219,194,194,66,228,219,228,219,228, + 219,228,219,107,107,219,30,219,184,219,184,107,184,107,219,107, + 107,184,30,30,30,30,30,30,30,30,30,30,19,30,30,30, + 30,30,30,30,219,30,30,30,30,30,30,239,45,45,239,239, + 30,30,104,104,239,239,239,149,149,73,73,138,73,189,21,28, + 244,191,115,58,58,244,115,115,58,191,115,58,58,244,115,115, + 58,191,115,58,58,244,115,115,58,191,115,58,58,244,115,115, + 58,191,115,58,58,244,115,115,58,191,115,58,58,244,115,115, + 58,191,115,58,58,244,115,115,58,191,115,58,58,244,115,115, + 58,191,115,58,58,58,196,142,244,191,115,58,58,58,244,28, + 244,191,115,58,58,244,196,142,244,191,115,58,58,58,115,196, + 244,191,115,58,58,58,244,202,244,191,115,58,58,244,142,142, + 240,240,115,58,58,244,115,196,244,191,115,58,58,244,115,115, + 244,190,115,58,58,244,115,196,196,244,115,58,58,58,196,142, + 244,15,28,112,21,169,169,169,169,169,169,169,169,169,102,102, + 102,102,102,102,102,102,102,169,169,169,169,222,222,169,169,169, + 169,222,169,169,222,169,222,222,169,169,169,222,169,222,102,222, + 184,184,228,228,228,228,184,184,228,219,228,228,228,228,228,194, + 228,184,228,228,228,228,228,228,228,219,228,228,219,228,219,228, + 219,228,219,219,228,107,107,219,184,219,30,184,184,184,107,184, + 219,184,184,184,184,30,30,30,30,30,30,30,30,30,30,30, + 30,45,45,30,30,30,30,30,30,184,30,30,30,30,239,239, + 239,239,239,104,73,239,73,73,149,138,73,138,138,189,21,203, + 244,190,190,129,129,190,137,133,196,190,190,129,129,190,137,133, + 196,190,190,129,129,190,137,133,196,190,190,129,129,190,137,133, + 196,190,190,129,129,190,137,133,196,190,190,129,129,190,137,133, + 196,190,190,129,129,190,137,133,196,190,190,129,129,190,137,133, + 196,190,190,129,129,191,129,129,196,190,190,129,129,240,137,151, + 196,190,135,129,129,190,129,129,244,190,58,129,137,191,133,129, + 196,190,58,129,129,191,151,137,196,190,58,129,129,190,129,129, + 196,190,135,129,129,190,133,129,196,190,58,129,137,190,154,133, + 244,203,244,137,137,191,133,129,240,190,58,129,129,240,129,129, + 240,203,173,173,103,169,169,169,169,169,169,169,169,169,169,169, + 102,169,102,102,102,169,222,102,222,102,169,169,169,222,169,169, + 169,169,169,169,222,169,169,222,222,222,222,222,222,222,169,102, + 228,228,184,184,228,228,228,228,228,228,228,228,219,228,228,228, + 228,228,184,228,228,228,228,219,228,228,228,219,228,228,228,219, + 228,228,184,228,219,107,107,107,219,184,107,219,184,107,30,184, + 184,184,219,184,184,184,184,184,184,30,30,30,184,45,30,30, + 30,30,30,30,30,30,30,30,45,45,45,184,239,45,30,104, + 239,45,239,239,239,239,239,239,73,73,239,73,138,138,178,244, + 28,58,244,129,129,129,129,129,244,58,244,129,129,129,129,129, + 244,58,244,129,129,129,129,129,244,58,244,129,129,129,129,129, + 244,58,244,129,129,129,129,129,244,58,244,129,129,129,129,129, + 244,58,244,129,129,129,129,129,244,58,244,129,129,129,129,129, + 244,58,58,129,129,135,137,137,244,58,58,129,137,240,137,137, + 28,244,244,129,129,135,137,133,28,191,244,137,129,191,129,137, + 244,190,244,129,133,191,129,129,244,190,240,129,129,190,133,129, + 244,203,58,129,129,191,137,129,244,240,244,137,129,240,129,129, + 135,190,240,137,129,191,129,129,240,190,240,137,129,190,129,129, + 240,15,28,112,103,169,169,169,169,169,169,169,169,169,169,169, + 169,169,169,169,102,102,102,102,102,222,102,169,102,169,102,169, + 102,222,222,222,222,222,222,169,169,222,222,222,222,222,222,222, + 184,228,228,184,228,219,228,219,219,228,219,228,228,194,228,219, + 228,219,184,219,228,219,228,184,184,219,228,228,184,228,228,228, + 219,228,184,184,184,184,184,184,107,184,184,184,184,228,107,184, + 184,184,184,184,184,184,184,184,184,184,73,184,184,73,184,239, + 184,30,45,30,184,45,45,30,30,30,45,30,30,45,45,30, + 239,45,45,45,239,239,239,149,239,138,149,73,138,39,21,244, + 191,191,58,129,129,240,129,137,240,191,58,129,129,240,129,137, + 240,191,58,129,129,240,129,137,240,191,58,129,129,240,129,137, + 240,191,58,129,129,240,129,137,240,191,58,129,129,240,129,137, + 240,191,58,129,129,240,129,137,240,191,58,129,129,240,129,137, + 240,191,244,129,133,191,129,137,240,191,244,129,129,129,129,137, + 135,190,58,129,129,191,129,129,135,190,244,137,137,190,129,137, + 240,191,58,137,129,129,129,133,240,191,58,129,129,240,129,129, + 240,190,244,129,129,240,137,137,240,190,244,133,129,191,129,133, + 244,190,244,137,129,240,129,151,58,191,244,137,129,191,151,151, + 58,15,173,191,103,169,169,169,169,169,169,102,102,102,169,169, + 169,169,169,169,169,169,222,169,102,169,169,222,169,222,222,222, + 169,222,222,222,222,222,222,10,222,222,10,10,10,10,222,222, + 184,184,30,228,228,228,228,228,228,219,228,228,219,228,219,228, + 228,228,228,228,228,228,184,228,228,228,228,219,228,228,184,184, + 184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184, + 184,184,184,184,184,184,184,184,184,73,184,184,184,184,184,184, + 239,73,184,184,184,184,184,184,184,184,184,239,73,239,239,239, + 239,239,138,138,149,104,149,104,138,239,73,149,239,138,178,244, + 203,190,135,133,129,240,137,129,240,190,135,133,129,191,137,129, + 240,190,135,133,129,191,137,129,240,190,135,133,129,191,137,129, + 240,190,135,133,129,191,137,129,240,190,135,133,129,191,137,129, + 240,190,135,133,129,191,137,129,240,190,135,133,129,191,137,129, + 240,190,240,129,137,240,137,129,240,190,135,133,129,129,129,129, + 240,190,135,133,133,191,129,129,244,190,240,137,129,129,129,129, + 196,191,240,129,129,129,129,129,196,58,135,133,129,191,137,129, + 240,190,135,137,129,129,129,129,244,191,244,137,129,240,129,137, + 28,58,240,137,129,129,129,129,196,58,240,137,133,129,129,129, + 240,173,28,191,130,169,169,169,169,169,102,102,169,102,169,102, + 102,102,222,222,222,222,169,222,169,222,222,222,222,222,222,222, + 222,222,222,222,10,222,10,222,10,10,10,10,10,10,10,10, + 219,228,219,219,219,219,219,219,228,219,219,219,219,228,219,219, + 219,219,219,219,194,194,219,219,219,228,184,219,184,228,228,184, + 184,228,184,184,184,184,184,184,184,184,184,184,73,184,184,184, + 73,184,184,184,184,184,184,184,184,184,73,73,184,73,184,184, + 184,239,239,239,184,184,239,239,239,239,184,184,184,239,239,239, + 104,104,239,239,149,239,149,239,138,104,45,239,239,149,21,244, + 190,240,28,28,191,112,240,240,142,240,28,28,240,112,240,240, + 142,240,28,28,240,112,240,240,142,240,28,28,240,112,240,240, + 142,240,28,28,240,112,240,240,142,240,28,28,240,112,240,240, + 142,240,28,28,240,112,240,240,142,240,28,28,240,112,240,240, + 196,240,202,112,129,112,240,240,196,240,28,112,240,28,85,240, + 202,112,28,28,191,112,240,240,244,240,28,112,85,28,85,240, + 244,135,202,240,240,202,240,240,244,112,28,28,129,244,112,135, + 196,240,28,112,85,28,85,240,244,240,28,112,85,240,240,240, + 196,240,28,112,129,202,240,240,244,240,28,112,240,28,240,240, + 196,28,28,191,103,169,169,169,169,169,102,102,169,102,222,169, + 222,222,102,102,222,222,222,222,222,222,222,10,222,222,222,10, + 10,10,10,10,10,10,10,10,10,10,10,10,10,164,10,10, + 184,184,219,219,219,219,219,219,219,219,219,219,219,19,194,194, + 219,219,30,219,219,219,219,219,219,219,219,219,219,30,30,228, + 228,184,184,184,184,184,184,73,184,184,184,184,184,184,184,184, + 184,73,184,184,184,184,73,73,73,73,184,184,73,184,73,184, + 184,184,184,184,184,30,184,184,184,184,30,45,45,104,30,104, + 45,45,30,30,104,45,104,45,45,149,149,149,45,39,178,244, + 203,190,142,142,115,142,142,115,115,190,142,142,115,142,142,115, + 115,190,142,142,115,142,142,115,115,190,142,142,115,142,142,115, + 115,190,142,142,115,142,142,115,115,190,142,142,115,142,142,115, + 115,190,142,142,115,142,142,115,115,190,142,142,115,142,142,115, + 115,206,115,115,115,142,142,115,115,190,115,202,142,115,142,115, + 115,190,142,142,115,142,142,142,115,190,142,115,202,115,142,142, + 115,206,142,142,142,142,142,142,142,190,142,89,202,142,142,115, + 115,206,142,115,202,115,142,142,115,151,142,115,115,196,142,142, + 142,190,142,115,142,142,142,142,142,190,142,142,142,142,142,115, + 142,15,28,112,103,169,169,169,169,102,169,222,222,222,222,222, + 222,222,222,222,222,10,222,10,222,10,10,10,10,10,10,10, + 10,164,164,10,164,10,164,10,164,164,164,164,164,164,164,164, + 184,30,30,30,219,19,219,194,19,219,219,219,219,30,30,19, + 219,219,219,30,30,184,30,184,249,228,184,184,184,184,249,184, + 184,184,184,184,184,184,184,184,184,184,73,184,73,184,73,184, + 184,239,73,239,239,30,30,30,30,45,30,30,30,30,45,45, + 184,45,30,45,239,45,45,45,45,45,30,30,45,45,45,30, + 30,45,45,45,45,45,45,45,45,45,104,149,239,149,21,240, + 244,129,58,80,80,80,40,80,151,129,58,80,80,80,40,80, + 151,129,58,80,80,80,40,80,151,129,58,80,80,80,40,80, + 151,129,58,80,80,80,40,80,151,129,58,80,80,80,40,80, + 151,129,58,80,80,80,40,80,151,129,58,80,80,80,40,80, + 151,129,135,80,80,80,40,80,151,129,135,80,80,80,40,80, + 80,129,58,40,80,80,80,80,151,129,244,80,40,80,80,80, + 80,129,244,80,40,40,40,80,151,129,58,80,80,80,40,80, + 151,129,244,80,40,80,80,80,80,190,244,80,80,40,80,40, + 137,151,244,80,40,80,80,80,151,129,244,40,40,80,80,80, + 80,15,15,202,103,169,169,169,169,222,102,169,222,222,10,222, + 222,10,10,222,222,10,10,10,10,10,10,164,164,164,164,164, + 10,10,164,164,164,164,164,164,164,164,164,164,164,164,164,164, + 184,30,19,219,30,19,19,19,219,219,30,30,30,19,219,219, + 19,219,30,219,30,30,184,30,30,30,239,184,184,184,184,184, + 249,184,184,241,184,241,184,73,73,73,184,184,184,184,184,73, + 73,184,184,184,184,73,73,73,73,184,73,239,73,239,184,184, + 239,30,239,30,30,30,45,30,30,30,45,45,30,45,45,45, + 45,45,45,45,45,149,45,45,104,45,149,149,149,149,178,190, + 191,85,58,80,80,80,80,80,40,85,58,80,80,80,80,80, + 40,85,58,80,80,80,80,80,40,85,58,80,80,80,80,80, + 40,85,58,80,80,80,80,80,40,85,58,80,80,80,80,80, + 40,85,58,80,80,80,80,80,40,85,58,80,80,80,80,80, + 40,190,58,80,80,80,80,80,172,190,58,40,80,80,80,80, + 206,129,135,80,40,40,80,80,40,206,58,80,80,40,80,80, + 206,190,58,80,80,80,80,40,40,129,244,80,80,80,80,80, + 40,206,58,80,80,40,80,80,151,190,58,80,80,80,80,40, + 40,206,58,80,80,80,40,80,40,206,190,80,80,80,80,40, + 137,28,28,9,130,169,102,169,222,222,10,10,10,222,222,10, + 10,10,10,10,164,10,10,164,164,164,164,164,164,164,164,164, + 11,11,164,164,11,164,164,164,164,164,11,11,11,11,164,164, + 184,30,30,30,219,45,30,19,30,219,30,249,45,30,30,30, + 30,30,45,30,30,45,30,30,30,219,30,184,30,30,30,184, + 249,184,184,184,184,241,184,184,184,184,241,184,73,73,184,184, + 73,73,73,73,73,73,73,73,73,73,73,239,239,73,149,239, + 189,73,138,189,189,73,138,138,138,73,73,239,73,239,138,138, + 73,239,104,104,149,149,149,149,149,45,45,45,149,39,21,244, + 191,190,244,80,40,80,80,80,80,190,244,80,40,80,80,80, + 80,190,244,80,40,80,80,80,80,190,244,80,40,80,80,80, + 80,190,244,80,40,80,80,80,80,190,244,80,40,80,80,80, + 80,190,244,80,40,80,80,80,80,190,244,80,80,80,80,80, + 151,190,135,80,40,80,80,80,137,190,58,80,80,80,80,80, + 44,190,58,80,80,80,40,80,151,129,190,80,80,80,40,80, + 151,206,58,80,80,80,80,80,151,190,58,80,40,80,80,80, + 151,129,190,80,80,80,40,80,40,151,190,80,80,80,80,80, + 151,129,135,80,80,40,80,80,44,129,58,80,40,40,80,80, + 206,28,112,9,103,169,222,10,222,222,222,10,10,10,10,10, + 10,10,136,10,164,164,10,10,10,164,164,164,164,164,164,164, + 164,11,164,164,11,11,16,11,16,164,164,11,11,11,11,11, + 184,30,30,219,30,30,249,30,219,30,30,45,249,249,30,30, + 30,30,45,249,249,45,30,30,30,45,45,30,30,30,30,219, + 184,184,249,184,249,184,184,73,73,73,184,184,184,184,73,73, + 73,239,73,73,184,73,239,73,239,73,239,73,73,239,73,138, + 239,149,73,239,239,239,73,73,73,239,239,138,239,239,239,239, + 239,149,149,149,104,149,104,149,104,149,149,149,149,39,21,244, + 244,151,58,80,80,80,80,80,206,151,58,80,80,80,80,80, + 206,151,58,80,80,80,80,80,206,151,58,80,80,80,80,80, + 206,151,58,80,80,80,80,80,206,151,58,80,80,80,80,80, + 206,151,58,80,80,80,80,80,206,190,58,80,80,80,80,80, + 151,190,58,80,80,80,80,40,137,190,58,80,80,80,40,80, + 40,190,58,80,80,80,80,80,206,135,58,80,80,80,40,80, + 137,190,58,80,80,80,80,80,206,190,58,80,80,80,80,80, + 206,135,58,80,80,80,40,80,40,190,58,80,40,80,80,80, + 40,190,58,80,80,80,80,80,40,190,58,80,80,80,80,80, + 137,115,203,191,103,102,222,222,10,10,10,10,10,136,10,53, + 136,164,10,164,10,10,164,164,164,164,164,11,11,11,11,164, + 164,164,11,11,164,16,11,11,11,16,16,11,11,11,164,164, + 184,30,45,30,30,30,45,18,45,45,45,45,249,223,30,45, + 30,184,249,18,45,249,30,45,45,249,45,30,30,30,30,30, + 239,184,239,184,45,239,239,45,30,45,239,239,45,45,45,30, + 239,30,239,239,184,184,45,239,239,239,239,184,239,239,239,239, + 239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,149, + 239,149,149,149,104,149,104,149,104,104,149,45,45,149,21,244, + 244,190,58,40,40,58,40,206,137,190,58,40,40,58,40,206, + 137,190,58,40,40,58,40,206,137,190,58,40,40,58,40,206, + 137,190,58,40,40,58,40,206,137,190,58,40,40,58,40,206, + 137,190,58,40,40,58,40,206,151,151,58,40,40,58,40,206, + 40,190,58,40,40,40,40,206,40,190,58,40,40,40,40,206, + 137,190,58,40,40,40,40,206,137,190,58,40,40,40,40,206, + 206,129,58,40,40,40,40,206,137,190,58,40,40,58,40,206, + 151,190,58,40,40,40,40,206,151,190,58,40,40,40,40,206, + 151,190,58,40,40,40,40,40,151,190,58,40,40,40,40,206, + 206,203,191,191,187,102,222,169,169,169,10,169,10,136,10,10, + 164,164,10,164,164,164,164,164,164,164,164,164,164,164,11,11, + 11,11,11,11,164,11,11,11,11,11,11,16,16,16,11,11, + 184,249,30,45,30,30,30,18,223,45,45,249,18,116,18,45, + 249,249,18,145,249,45,45,45,249,249,249,45,30,30,30,30, + 30,45,30,45,30,30,30,30,45,30,30,30,30,30,30,45, + 30,239,30,45,45,45,30,45,45,30,45,45,45,30,45,239, + 239,45,239,239,45,45,45,45,239,149,239,149,149,149,149,104, + 45,45,45,45,149,149,149,149,149,149,149,149,149,18,21,244, + 240,190,58,40,80,80,40,80,206,190,58,40,80,80,40,80, + 206,190,58,40,80,80,40,80,206,190,58,40,80,80,40,80, + 206,190,58,40,80,80,40,80,206,190,58,40,80,80,40,80, + 206,190,58,40,80,80,40,80,190,190,58,40,80,80,40,80, + 151,190,58,40,80,40,80,80,151,129,58,40,80,80,80,80, + 151,190,58,80,80,40,40,80,206,129,58,40,80,80,80,80, + 206,190,58,40,80,40,80,80,151,190,58,40,80,80,40,80, + 151,129,58,40,80,80,80,80,151,190,58,80,80,40,80,80, + 151,190,58,80,40,40,80,40,137,129,58,80,40,40,80,80, + 151,28,28,28,103,102,10,10,10,10,10,10,10,10,10,10, + 10,164,164,164,164,164,164,11,164,11,164,11,11,11,11,11, + 11,11,16,16,16,11,11,11,11,16,11,164,16,11,11,11, + 184,239,30,249,30,45,30,45,223,145,249,249,18,82,223,18, + 249,18,116,145,249,249,249,249,223,249,249,45,45,45,45,45, + 30,45,30,45,45,45,45,45,45,45,45,239,239,45,30,45, + 30,45,30,45,45,239,239,30,239,30,45,45,45,184,45,30, + 45,45,45,45,45,45,45,45,45,45,45,45,45,45,149,45, + 239,45,45,45,45,45,45,149,45,45,104,149,45,39,21,244, + 240,129,190,80,80,80,80,40,129,129,190,80,80,80,80,40, + 129,129,190,80,80,80,80,40,129,129,190,80,80,80,80,40, + 129,129,190,80,80,80,80,40,129,129,190,80,80,80,80,40, + 129,129,190,80,80,80,80,80,206,190,58,80,80,80,80,80, + 190,129,203,80,80,80,80,80,190,190,203,80,80,80,40,40, + 135,129,203,80,80,80,80,40,129,190,203,80,80,80,40,80, + 135,129,58,80,80,80,80,40,135,129,190,80,80,80,80,40, + 190,190,58,80,80,80,80,40,190,129,203,80,80,80,40,40, + 135,129,203,80,80,80,80,80,206,190,191,80,80,80,80,80, + 190,28,244,191,187,222,222,10,10,169,10,164,10,164,164,164, + 10,164,164,164,164,164,164,11,164,11,164,11,11,11,11,11, + 11,164,164,16,164,16,11,11,16,11,16,16,11,16,11,11, + 184,45,249,30,249,30,249,249,249,82,145,18,18,34,223,82, + 223,82,223,116,249,18,18,116,145,18,45,249,45,45,45,30, + 45,45,45,45,45,45,45,30,45,45,30,30,30,30,239,30, + 45,45,45,30,30,45,30,45,45,45,45,30,45,45,30,45, + 30,30,30,239,239,45,239,45,239,45,239,239,45,45,45,149, + 149,104,149,45,45,149,104,45,149,45,149,149,149,149,79,244, + 203,203,115,58,58,58,58,115,196,244,115,58,58,58,58,115, + 196,244,115,58,58,58,58,115,196,244,115,58,58,58,58,115, + 196,244,115,58,58,58,58,115,196,244,115,58,58,58,58,115, + 196,244,115,58,58,58,115,196,240,191,115,58,58,58,196,142, + 196,190,115,58,58,244,142,142,196,190,115,58,58,58,58,244, + 244,135,115,58,58,58,58,115,58,135,115,58,244,58,202,244, + 244,240,115,58,58,58,244,244,244,203,115,58,58,58,244,196, + 244,191,115,58,244,244,244,196,244,190,115,58,58,58,58,244, + 244,190,115,58,58,58,196,202,196,244,115,58,58,58,196,142, + 244,28,191,28,130,102,222,222,10,10,136,10,164,164,164,164, + 164,164,164,164,164,164,164,164,164,164,11,164,11,11,11,11, + 11,11,11,164,16,11,16,11,16,164,16,16,16,11,11,11, + 249,239,249,249,249,249,45,249,18,223,109,116,18,109,116,145, + 109,109,223,109,249,223,116,34,223,249,249,184,184,45,249,45, + 45,249,45,45,45,45,45,45,239,239,239,239,239,239,239,239, + 239,239,239,239,239,239,239,239,239,239,73,239,239,239,239,138, + 149,149,239,239,239,239,149,239,239,239,239,104,149,149,104,45, + 149,104,149,104,149,149,149,104,149,104,149,149,149,138,21,58, + 190,190,135,129,129,240,129,133,244,190,190,129,129,240,129,133, + 244,190,190,129,129,240,129,133,244,190,190,129,129,240,129,133, + 244,190,190,129,129,240,129,133,244,190,190,129,129,240,129,133, + 244,190,190,129,129,191,133,129,196,190,135,129,129,240,137,129, + 244,190,58,129,129,190,129,129,196,190,58,129,129,240,129,129, + 196,191,58,129,129,240,129,133,196,191,135,129,129,129,137,129, + 244,190,58,129,129,240,151,129,196,190,135,129,129,191,137,129, + 244,190,135,129,129,190,151,129,244,58,58,129,129,129,129,129, + 244,58,58,129,129,191,151,137,244,190,58,129,129,240,129,129, + 240,28,203,191,187,222,208,10,169,10,136,136,10,136,10,164, + 164,164,164,164,164,164,164,164,164,164,11,164,164,11,11,11, + 16,11,11,16,11,16,11,16,16,16,11,11,16,16,16,11, + 249,249,249,45,249,223,223,18,18,223,116,148,82,143,82,82, + 148,109,145,109,145,116,143,116,175,249,249,249,249,239,239,45, + 249,45,249,249,239,239,239,239,239,239,239,184,249,239,249,239, + 239,239,239,73,239,239,249,73,249,73,249,73,249,138,138,73, + 73,73,239,73,138,149,73,73,138,138,138,149,73,73,138,138, + 149,149,138,149,138,138,138,138,138,149,239,149,239,39,21,244, + 190,58,58,129,129,129,129,129,240,58,58,129,129,129,129,129, + 240,58,58,129,129,129,129,129,240,58,58,129,129,129,129,129, + 240,58,58,129,129,129,129,129,240,58,58,129,129,129,129,129, + 240,58,244,129,129,191,137,129,244,203,58,129,129,191,129,151, + 244,190,244,129,129,190,129,133,28,190,244,129,137,129,129,151, + 58,190,244,137,137,129,129,137,244,58,244,151,129,240,133,129, + 244,190,244,129,129,129,129,129,135,244,58,129,151,240,137,137, + 244,203,58,137,129,129,129,151,240,190,244,133,129,129,129,151, + 240,190,240,129,129,191,129,137,240,190,240,137,129,190,129,129, + 240,115,244,28,125,102,222,10,10,10,10,10,164,10,164,136, + 164,164,164,164,11,164,164,11,11,11,11,11,11,11,11,16, + 11,16,11,11,11,11,16,11,11,16,16,16,16,16,16,16, + 249,239,249,45,249,249,18,116,34,82,223,34,64,64,143,64, + 109,109,24,143,109,148,109,116,223,18,249,249,249,249,249,45, + 45,239,45,239,239,239,239,239,239,239,239,239,239,239,249,73, + 239,249,249,239,249,73,249,239,249,239,249,239,73,149,138,149, + 138,138,138,73,73,138,138,138,73,239,138,138,138,149,138,138, + 138,138,138,104,138,189,138,138,138,138,104,39,149,39,21,202, + 190,191,244,129,137,240,129,133,244,191,244,129,137,240,129,133, + 244,191,244,129,137,240,129,133,244,191,244,129,137,240,129,133, + 244,191,244,129,137,240,129,133,244,191,244,129,137,240,129,133, + 244,191,58,129,133,240,137,129,240,190,244,129,133,190,129,137, + 240,190,244,133,137,240,137,129,135,190,58,129,133,240,137,137, + 240,191,244,129,137,240,129,137,240,191,244,137,129,191,129,133, + 240,191,58,129,129,240,137,133,244,190,244,129,137,129,129,133, + 240,190,244,129,129,240,129,137,244,191,244,129,129,240,129,137, + 244,191,244,133,151,240,129,133,244,191,244,133,129,240,151,151, + 58,203,203,28,187,222,10,10,10,10,164,164,164,11,164,136, + 164,164,164,164,11,11,11,11,11,11,11,11,11,225,11,11, + 11,16,11,16,16,16,11,16,16,16,16,16,16,16,225,225, + 249,249,249,249,45,249,18,18,223,82,148,148,148,64,160,148, + 143,109,148,64,64,64,34,82,109,82,145,18,249,45,45,239, + 239,239,239,239,239,239,239,45,249,45,45,239,239,239,45,45, + 249,45,45,239,45,45,45,239,45,249,239,249,149,73,239,73, + 239,73,239,149,149,149,149,73,149,138,73,149,149,138,138,138, + 138,138,138,138,138,138,138,138,138,138,138,149,149,39,79,115, + 244,190,135,137,129,191,129,129,240,190,135,133,129,191,129,129, + 240,190,135,133,129,191,129,129,240,190,135,133,129,191,129,129, + 240,190,135,133,129,191,129,129,240,190,135,133,129,191,129,129, + 240,190,240,129,129,129,133,129,240,190,240,129,129,129,133,129, + 28,190,244,129,137,129,129,129,196,190,240,129,129,129,129,129, + 196,190,240,133,129,240,137,129,240,190,240,129,129,191,129,129, + 244,190,135,133,129,129,129,129,240,190,240,133,129,112,129,129, + 240,190,240,133,129,129,133,129,244,190,244,129,129,129,133,129, + 244,58,244,137,137,191,129,129,244,58,244,137,137,129,129,129, + 240,244,28,28,187,102,208,10,136,164,10,136,11,136,164,164, + 11,11,11,11,164,11,164,11,11,11,11,11,11,11,11,225, + 16,16,16,16,16,11,16,225,16,16,225,20,126,16,16,16, + 249,249,249,249,249,249,18,223,223,223,171,34,160,41,41,42, + 209,120,160,41,41,148,254,143,82,145,249,18,249,239,45,45, + 45,239,45,45,239,239,239,45,239,239,45,45,45,239,239,45, + 239,239,249,239,239,239,239,239,45,149,45,45,149,149,149,149, + 149,149,45,239,239,149,149,149,149,149,73,239,239,239,239,149, + 104,138,138,138,104,39,149,138,149,149,138,149,149,39,21,115, + 240,240,28,112,240,240,240,190,196,240,28,28,191,112,240,190, + 196,240,28,28,191,112,240,190,196,240,28,28,191,112,240,190, + 196,240,28,28,191,112,240,190,196,240,28,28,191,112,240,190, + 196,240,244,112,85,28,240,240,196,240,244,112,85,28,240,240, + 196,240,28,112,129,202,240,240,202,240,28,112,240,28,85,240, + 196,240,28,28,240,112,240,240,196,240,28,240,85,244,240,240, + 196,240,28,28,240,28,240,240,196,240,28,28,240,112,240,240, + 142,240,28,244,240,28,112,129,196,240,112,112,240,28,112,129, + 196,191,28,112,129,112,240,240,244,191,28,112,129,28,240,240, + 196,244,244,112,187,169,10,10,136,164,10,164,164,164,164,164, + 11,11,11,11,11,225,11,11,11,225,225,16,16,16,16,16, + 16,225,16,16,20,20,16,16,16,20,225,20,126,20,16,16, + 249,249,249,249,249,18,18,145,34,161,118,250,24,160,41,42, + 12,62,62,41,41,42,143,95,114,75,114,87,249,45,239,30, + 184,30,239,239,45,45,45,239,45,45,45,239,45,45,45,239, + 45,45,45,45,45,239,45,45,239,45,149,149,45,45,45,45, + 45,45,149,149,149,239,149,239,239,45,149,149,149,149,149,149, + 149,149,149,149,149,149,149,149,138,138,239,149,149,149,21,202, + 244,190,142,142,115,142,142,115,115,190,142,142,115,142,142,115, + 115,190,142,142,115,142,142,115,115,190,142,142,115,142,142,115, + 115,190,142,142,115,142,142,115,115,190,142,142,115,142,142,115, + 115,190,115,115,202,115,142,115,89,190,115,115,202,115,142,142, + 115,129,89,115,142,142,142,142,115,206,115,89,142,115,142,142, + 115,129,142,142,115,142,142,115,115,206,142,115,142,142,142,142, + 115,190,142,142,142,142,142,115,115,206,142,142,115,142,142,115, + 115,206,142,142,142,115,115,202,115,206,142,89,142,115,115,142, + 89,129,142,115,115,142,142,142,142,129,89,115,89,142,142,115, + 142,203,28,28,187,222,208,136,136,136,11,164,164,11,11,11, + 87,11,11,11,11,11,93,225,225,225,225,225,11,16,225,16, + 16,225,16,16,225,225,20,16,20,20,20,20,20,226,126,225, + 18,18,18,223,223,116,82,82,82,116,34,159,74,211,110,110, + 68,23,250,62,110,62,186,230,71,59,13,233,232,239,239,45, + 45,45,45,45,30,45,45,45,45,45,30,30,45,45,45,45, + 45,45,45,239,45,239,239,45,45,45,45,149,149,149,149,149, + 149,45,45,239,239,45,149,149,149,45,239,239,149,149,149,149, + 149,149,149,149,104,149,149,149,149,149,104,149,149,39,21,202, + 244,129,244,80,80,40,80,80,151,129,58,80,80,40,80,80, + 151,129,58,80,80,40,80,80,151,129,58,80,80,40,80,80, + 151,129,58,80,80,40,80,80,151,129,58,80,80,40,80,80, + 80,129,190,80,40,80,80,80,40,129,190,80,40,80,80,80, + 151,206,240,80,40,80,40,80,80,85,190,80,40,80,40,80, + 151,206,58,80,80,80,80,80,151,129,244,80,80,40,40,80, + 151,129,58,80,40,40,80,80,151,129,58,80,80,40,40,80, + 151,129,244,80,40,80,80,80,151,190,58,80,40,80,80,80, + 137,190,244,80,80,40,80,80,151,190,244,80,80,80,80,80, + 80,15,15,202,187,222,10,10,136,136,11,11,11,11,11,11, + 11,11,93,11,225,11,225,225,11,11,11,16,16,225,16,225, + 251,16,225,20,20,225,20,126,225,126,225,126,16,16,226,225, + 18,18,18,18,18,18,18,223,145,116,82,109,163,243,211,32, + 64,143,227,71,147,150,7,157,105,72,231,231,80,171,249,239, + 239,30,30,45,45,30,30,45,45,30,45,239,30,45,30,30, + 30,30,30,45,30,45,45,30,184,45,45,45,45,45,45,45, + 45,45,239,45,45,239,45,45,45,149,149,149,45,149,45,149, + 149,45,45,149,149,149,104,45,45,149,149,149,149,149,21,58, + 190,206,58,80,80,80,80,80,206,85,58,80,80,80,80,80, + 206,85,58,80,80,80,80,80,206,85,58,80,80,80,80,80, + 206,85,58,80,80,80,80,80,206,85,58,80,80,80,80,80, + 206,84,58,80,80,80,80,80,206,84,58,80,80,40,80,80, + 137,190,58,80,40,80,80,80,40,190,244,80,80,80,40,80, + 137,190,244,80,40,80,80,80,172,190,58,80,80,80,80,80, + 40,129,58,80,80,80,80,80,40,129,58,80,80,80,80,80, + 40,129,196,80,80,80,80,80,151,190,58,80,80,80,40,40, + 80,190,58,80,80,80,40,40,80,129,58,40,80,80,80,40, + 137,28,202,191,125,10,136,11,164,136,164,87,11,11,11,11, + 11,11,11,225,225,225,225,16,225,16,16,225,16,225,16,16, + 11,225,20,225,225,126,20,225,20,20,126,16,126,226,225,225, + 18,18,18,18,18,18,223,18,223,223,145,109,34,82,148,82, + 161,163,186,52,168,22,243,150,183,47,95,189,116,223,18,249, + 45,239,184,45,239,45,30,30,239,30,30,45,30,45,45,239, + 239,239,30,45,30,30,45,45,30,45,45,45,45,45,45,45, + 45,45,45,45,45,239,239,45,45,45,45,45,45,149,45,45, + 149,45,45,45,45,149,149,45,45,45,45,45,149,138,21,244, + 240,129,58,80,80,40,80,80,80,190,58,80,80,40,80,80, + 80,190,58,80,80,40,80,80,80,190,58,80,80,40,80,80, + 80,190,58,80,80,40,80,80,80,190,58,80,80,40,80,80, + 151,190,190,80,80,80,80,80,80,190,190,80,80,80,80,80, + 206,206,190,80,80,80,80,80,151,206,190,80,80,80,80,80, + 206,129,58,80,80,80,80,80,151,129,190,40,80,80,80,80, + 151,190,244,80,80,40,80,80,151,190,58,80,80,80,80,80, + 151,206,58,80,80,80,80,80,151,129,240,80,80,80,80,80, + 206,129,135,80,80,80,80,80,206,206,190,80,40,40,80,80, + 206,28,15,28,125,10,53,136,164,11,11,11,87,11,11,11, + 11,11,225,11,225,11,11,225,225,225,225,11,16,225,16,225, + 16,225,16,126,16,225,126,225,225,225,20,225,16,16,16,225, + 18,18,249,249,249,18,18,18,18,145,82,82,145,116,109,34, + 109,109,143,167,82,82,82,34,34,116,145,223,18,18,18,18, + 249,45,45,239,45,239,239,239,30,45,45,184,239,30,184,30, + 30,45,45,239,45,239,239,45,239,239,45,45,45,45,45,45, + 239,45,239,149,149,45,149,104,45,45,45,149,45,45,149,149, + 45,149,149,149,45,149,104,149,149,149,149,149,45,39,79,196, + 244,85,58,80,80,80,80,80,206,129,58,80,80,80,80,80, + 206,129,58,80,80,80,80,80,206,129,58,80,80,80,80,80, + 206,129,58,80,80,80,80,80,206,129,58,80,80,80,40,80, + 80,135,58,80,80,80,80,80,151,190,58,80,80,80,80,80, + 206,190,58,80,80,80,40,80,137,190,58,80,80,80,80,80, + 206,129,58,80,80,80,80,40,40,190,135,80,80,80,80,80, + 206,151,58,80,80,80,80,80,206,190,58,80,80,80,80,80, + 206,129,58,80,80,80,80,40,40,206,58,80,80,80,80,80, + 206,135,58,80,80,80,80,80,206,135,58,80,80,80,80,80, + 137,203,28,28,125,10,136,136,136,136,136,164,11,11,11,11, + 11,11,11,11,11,225,225,11,11,11,11,225,11,11,11,225, + 11,11,225,16,16,16,225,16,16,225,16,126,16,225,225,11, + 249,18,18,18,249,249,18,18,18,145,116,145,145,116,34,34, + 82,82,82,7,223,82,145,223,82,223,18,223,18,18,18,18, + 249,249,239,249,239,249,249,249,249,239,239,239,239,249,249,239, + 239,239,239,239,239,239,239,249,45,239,239,239,239,239,239,149, + 149,45,45,45,149,45,149,45,149,45,45,45,149,45,45,149, + 45,45,104,149,104,149,45,104,45,104,149,149,45,149,21,142, + 244,190,58,40,40,58,206,190,151,190,58,40,40,58,206,190, + 151,190,58,40,40,58,206,190,151,190,58,40,40,58,206,190, + 151,190,58,40,40,58,206,190,151,190,58,40,40,40,206,206, + 206,190,58,40,40,58,206,190,206,190,58,40,40,58,40,206, + 151,190,58,40,40,40,40,206,206,190,58,40,40,40,40,206, + 151,190,58,40,40,40,40,206,151,206,203,40,40,40,40,206, + 137,190,58,40,40,58,40,206,151,129,58,40,40,58,206,206, + 151,190,58,58,40,58,40,206,151,190,58,40,40,40,206,206, + 151,190,58,40,40,40,40,190,151,190,190,40,40,40,206,206, + 206,240,28,202,69,222,10,10,136,136,136,136,136,136,136,136, + 11,164,164,11,164,164,11,11,11,11,164,11,11,11,11,11, + 11,11,11,11,11,11,16,11,225,225,11,225,16,16,16,11, + 249,249,249,249,249,249,18,18,18,145,223,223,145,223,82,34, + 82,145,223,12,116,82,145,223,223,116,223,223,18,18,249,249, + 249,249,18,249,249,249,45,249,239,249,249,249,249,239,239,249, + 249,249,249,249,149,249,249,239,149,239,239,239,239,149,149,239, + 239,149,239,239,45,149,45,149,45,149,45,149,104,149,149,104, + 149,45,149,45,149,149,149,149,149,149,45,149,149,149,79,244, + 196,190,58,80,80,40,80,80,206,190,58,80,80,40,80,80, + 206,190,58,80,80,40,80,80,206,190,58,80,80,40,80,80, + 206,190,58,80,80,40,80,80,206,190,58,80,40,80,80,80, + 151,190,58,40,80,80,40,80,151,190,58,40,80,80,40,80, + 151,129,58,40,40,80,80,80,206,129,58,40,40,80,40,80, + 206,190,58,40,40,80,80,80,129,84,58,40,40,80,40,80, + 206,129,58,80,80,40,80,80,206,190,58,80,80,80,40,80, + 206,190,58,80,80,80,40,80,151,190,58,40,40,80,80,80, + 151,190,58,40,40,80,80,80,151,190,58,80,40,40,80,80, + 151,28,28,15,21,222,222,208,10,10,10,10,10,10,10,10, + 53,53,164,10,164,164,164,164,164,164,164,164,164,11,164,11, + 11,11,11,11,11,11,11,225,11,11,16,16,16,11,11,225, + 249,249,249,249,249,249,18,18,18,18,18,18,223,223,145,82, + 145,145,223,42,23,82,223,223,223,223,223,18,18,18,18,249, + 18,249,249,18,249,249,239,249,249,249,45,249,249,249,249,45, + 239,239,239,239,239,239,239,73,249,149,149,149,239,239,239,239, + 239,149,149,149,239,138,104,149,104,149,104,149,45,149,149,149, + 149,149,149,149,73,149,138,138,138,138,104,189,138,39,21,96, + 202,129,203,80,80,80,80,40,85,129,203,80,80,80,80,40, + 85,129,203,80,80,80,80,40,85,129,203,80,80,80,80,40, + 85,129,203,80,80,80,80,40,85,129,203,80,80,80,40,80, + 190,190,58,80,80,80,80,80,190,129,58,80,80,80,80,80, + 190,190,58,80,80,80,40,80,85,190,58,80,80,80,80,40, + 129,190,58,80,80,80,40,80,206,40,58,80,80,80,80,80, + 85,190,244,80,80,80,80,40,135,129,203,80,80,80,80,80, + 129,129,58,80,80,80,80,80,190,129,58,80,80,80,80,40, + 190,190,58,80,80,80,80,80,190,190,191,80,80,80,80,80, + 190,28,28,28,79,102,222,222,222,222,222,10,10,10,10,10, + 10,10,164,10,10,10,10,10,10,164,164,164,164,164,164,164, + 164,164,11,11,11,11,11,11,16,11,11,11,225,225,11,11, + 249,249,249,45,249,249,249,18,18,18,18,18,223,223,223,116, + 223,223,223,42,145,82,223,223,18,223,18,18,18,18,149,18, + 249,149,149,249,249,18,18,249,249,249,249,239,149,249,73,249, + 249,249,249,249,249,249,249,149,73,249,249,138,189,138,138,138, + 138,138,138,73,138,138,138,189,138,138,138,138,149,73,138,138, + 138,189,138,138,138,138,138,138,138,189,39,138,189,39,79,202, + 196,190,115,58,58,58,58,115,58,190,115,58,58,58,58,115, + 58,190,115,58,58,58,58,115,58,190,115,58,58,58,58,115, + 58,190,115,58,58,58,58,115,58,190,115,58,58,58,244,142, + 244,191,115,58,58,58,244,142,244,191,115,58,58,58,115,196, + 244,191,115,58,58,58,244,115,244,191,115,58,58,58,58,115, + 135,240,115,58,58,58,58,115,244,191,115,58,58,58,115,115, + 244,190,115,58,58,58,244,196,244,135,115,58,58,58,115,115, + 58,240,115,58,58,58,115,196,244,240,115,58,58,244,244,196, + 240,191,115,58,58,244,115,196,196,244,115,58,58,58,196,142, + 244,202,28,28,79,102,222,222,222,10,10,222,10,10,10,222, + 10,10,10,164,164,164,164,164,164,164,10,164,10,164,164,164, + 164,164,164,164,164,11,11,11,11,11,11,11,11,11,11,11, + 249,73,249,249,249,45,249,18,18,18,18,18,18,223,223,145, + 223,223,39,12,38,145,223,223,18,18,18,18,18,18,149,249, + 149,249,149,149,45,45,249,249,149,249,249,239,239,249,249,249, + 249,249,249,249,249,249,249,249,249,249,138,138,138,138,138,138, + 73,73,138,138,138,138,138,138,189,138,138,189,39,39,149,138, + 138,138,138,39,138,138,138,138,138,104,39,189,189,39,188,142, + 202,190,58,129,129,191,129,133,244,190,58,129,129,191,129,133, + 244,190,58,129,129,191,129,133,244,190,58,129,129,191,129,133, + 244,190,58,129,129,191,129,133,28,135,58,129,129,129,129,129, + 240,190,58,129,129,240,151,129,196,190,190,129,129,191,133,129, + 244,190,190,129,129,129,220,133,244,190,190,129,129,240,129,133, + 196,191,190,129,129,129,129,133,112,190,190,129,129,191,137,133, + 244,191,58,129,129,191,151,129,244,244,58,129,129,191,133,133, + 196,190,58,129,129,191,133,129,244,190,190,129,129,190,151,129, + 196,190,135,129,129,191,133,129,240,190,58,129,129,240,129,129, + 240,28,28,28,76,90,222,171,222,222,10,10,10,10,10,10, + 10,10,10,10,10,10,10,10,10,164,164,164,164,164,164,164, + 164,164,11,11,164,11,11,11,11,11,11,11,11,11,164,164, + 249,249,184,249,249,249,249,249,249,149,18,18,18,223,223,223, + 39,175,223,12,175,223,18,223,18,18,18,18,18,18,18,18, + 45,249,239,239,249,249,249,45,239,45,249,249,249,239,239,249, + 73,149,239,239,239,239,138,149,239,239,73,149,138,149,138,138, + 149,149,149,73,239,138,138,138,149,149,149,149,239,239,149,149, + 149,138,149,239,149,149,104,149,149,39,104,149,149,39,79,196, + 142,190,244,129,129,129,129,129,244,190,244,129,129,129,129,129, + 244,190,244,129,129,129,129,129,244,190,244,129,129,129,129,129, + 244,190,244,129,129,129,129,129,244,190,240,129,129,240,129,129, + 244,190,58,129,129,191,137,129,244,58,244,129,137,191,129,137, + 244,58,135,129,129,240,129,137,244,58,58,129,137,129,129,129, + 58,58,244,129,129,240,129,129,244,58,58,129,137,129,129,137, + 244,190,244,129,129,129,133,129,135,191,244,129,129,191,129,129, + 244,190,244,129,129,191,129,129,244,58,244,129,129,129,129,129, + 244,203,58,129,151,191,129,129,240,190,240,137,129,190,129,129, + 240,244,202,216,79,102,102,10,222,10,10,222,10,10,10,10, + 10,10,10,10,10,164,164,164,53,164,10,164,164,164,164,164, + 164,164,164,11,11,164,11,164,11,11,11,11,11,11,11,11, + 249,18,249,249,249,249,249,249,18,249,18,18,18,39,39,223, + 223,223,18,12,38,223,223,18,223,18,18,18,149,18,149,18, + 249,249,249,249,249,45,249,249,249,45,239,239,249,249,239,249, + 239,149,249,149,138,239,149,138,138,149,239,239,239,45,45,149, + 149,239,149,149,149,149,149,104,149,149,45,149,149,239,149,104, + 149,239,149,239,149,149,104,149,45,149,149,149,45,39,79,202, + 202,191,240,133,151,240,129,133,240,190,240,133,151,240,129,133, + 240,190,240,133,151,240,129,133,240,190,240,133,151,240,129,133, + 240,190,240,133,151,240,129,133,240,190,58,129,129,190,151,151, + 240,191,244,129,133,240,129,133,240,191,58,129,137,240,129,133, + 240,191,244,129,129,190,129,137,240,191,240,129,133,240,129,129, + 240,191,58,129,129,240,129,129,240,191,244,129,129,240,129,137, + 135,191,240,133,129,240,129,137,244,190,58,129,129,240,129,137, + 240,191,58,129,137,190,129,133,240,191,135,129,129,240,129,151, + 240,190,240,129,129,190,129,151,58,191,244,137,129,191,151,151, + 58,28,202,202,79,169,222,10,222,222,10,10,10,136,10,10, + 10,10,164,53,10,10,10,10,10,164,164,164,164,87,164,164, + 164,164,164,11,11,11,11,11,11,11,11,11,11,11,11,11, + 249,175,249,249,249,249,249,249,249,249,18,18,18,18,175,223, + 18,18,18,12,73,223,223,39,39,18,18,18,18,18,18,18, + 149,149,249,249,149,18,249,149,249,18,149,249,149,249,149,249, + 149,249,149,73,149,149,73,149,149,149,149,149,149,149,149,239, + 239,149,149,149,149,45,149,149,149,239,149,45,45,149,149,149, + 149,149,149,149,45,149,149,149,149,149,149,45,149,149,79,142, + 142,58,244,137,129,191,129,129,28,58,244,137,129,191,129,129, + 28,58,244,137,129,191,129,129,28,58,244,137,129,191,129,129, + 28,58,244,137,129,240,129,129,244,58,135,129,133,129,129,129, + 196,190,240,129,137,191,129,129,240,190,240,133,129,129,129,129, + 240,58,240,129,133,112,137,129,240,58,240,129,129,240,137,129, + 240,190,135,129,133,191,151,151,240,190,135,129,129,191,137,129, + 244,58,244,137,129,191,137,129,244,190,135,133,129,191,137,129, + 244,190,135,129,129,129,129,129,240,244,190,133,129,129,133,129, + 240,58,135,137,129,129,129,129,196,58,240,137,133,129,129,129, + 240,115,15,202,162,102,171,222,56,10,10,10,136,10,10,164, + 10,10,10,164,164,164,164,164,164,164,164,164,164,164,11,11, + 11,11,11,11,11,11,11,11,11,93,11,11,11,11,11,164, + 175,175,175,18,18,18,18,18,18,249,18,18,223,18,18,223, + 223,223,249,12,17,223,223,18,18,18,18,18,18,149,18,18, + 18,18,149,18,149,18,149,18,149,18,149,249,149,249,149,249, + 149,149,18,149,149,18,149,149,249,249,149,138,138,138,149,149, + 149,239,239,104,149,239,149,149,149,149,149,149,149,104,39,149, + 149,104,149,149,149,149,45,149,45,45,149,149,149,149,47,216, + 142,240,28,112,240,240,240,240,196,240,28,112,240,240,240,240, + 196,240,28,112,240,240,240,240,196,240,28,112,240,240,240,240, + 196,240,28,112,240,240,240,240,202,240,202,112,240,202,240,240, + 244,240,244,112,129,112,240,240,196,240,202,28,129,28,240,240, + 196,240,202,240,191,112,240,240,196,240,28,112,240,112,240,240, + 196,240,28,240,240,240,240,240,196,240,202,240,190,112,112,240, + 244,240,28,112,240,28,112,129,196,240,28,28,129,112,240,240, + 196,240,28,112,85,28,240,240,196,240,28,244,240,28,240,240, + 196,240,28,112,85,202,240,240,244,240,28,112,240,28,240,240, + 196,28,15,202,79,102,222,222,10,56,136,10,10,136,10,164, + 164,164,10,53,164,164,164,53,164,53,11,87,11,164,164,87, + 11,11,11,11,11,11,11,11,11,225,16,225,225,11,93,11, + 175,223,175,175,175,249,249,249,18,18,18,18,18,18,175,175, + 18,18,73,12,66,223,223,39,223,18,18,18,18,149,18,149, + 18,149,18,149,18,149,18,18,149,249,18,249,249,18,149,18, + 249,249,149,149,149,149,149,249,149,149,138,149,149,149,138,149, + 138,149,149,39,138,149,149,149,138,149,138,138,149,149,149,149, + 149,39,149,138,149,149,149,104,149,149,45,149,149,169,21,115, + 202,253,245,202,142,202,253,115,115,115,245,115,253,202,115,245, + 253,115,245,253,202,253,115,152,115,115,245,245,152,115,245,245, + 245,253,15,245,115,202,245,245,245,202,115,202,253,202,115,115, + 115,115,115,245,202,253,115,115,152,202,202,253,202,112,253,202, + 202,142,202,196,245,202,245,245,253,115,245,115,115,202,152,115, + 115,115,245,115,115,115,245,115,245,245,245,253,202,202,115,115, + 115,115,115,115,202,202,253,202,115,115,245,245,115,202,115,15, + 202,202,15,245,202,202,15,245,202,202,245,245,15,245,15,245, + 245,115,245,15,202,202,15,15,115,115,15,115,202,245,15,245, + 15,245,115,0,94,222,102,10,222,10,10,10,136,10,10,10, + 10,10,164,164,164,53,164,11,164,164,164,164,164,11,11,11, + 11,11,11,11,11,225,93,225,11,11,225,11,225,225,11,11, + 175,223,175,18,223,18,18,18,175,18,18,175,175,223,18,223, + 175,223,239,211,17,18,223,18,223,39,18,223,18,18,18,18, + 149,18,149,249,149,149,149,149,18,149,18,149,249,149,149,18, + 149,249,249,18,249,249,138,249,39,149,138,138,138,149,138,138, + 39,39,149,149,39,138,138,149,138,149,149,138,39,149,149,39, + 149,39,39,149,149,39,149,149,149,149,149,149,39,174,26,245, + 84,193,193,202,84,115,85,142,89,135,96,152,115,202,89,115, + 112,151,206,135,244,202,202,245,245,135,196,240,0,245,245,245, + 245,152,152,245,0,115,202,49,15,112,190,151,115,202,253,253, + 245,135,135,196,196,202,253,112,190,240,202,245,0,152,152,152, + 152,84,84,44,172,151,44,151,29,253,245,0,152,202,202,129, + 85,115,253,216,0,151,85,129,240,202,15,196,135,240,253,253, + 253,202,253,245,115,115,152,0,152,89,89,216,245,253,245,115, + 245,202,202,15,245,152,245,152,0,245,115,216,202,115,96,142, + 245,142,253,115,115,202,142,245,245,245,253,28,202,245,152,0, + 245,0,245,245,89,151,90,56,10,10,10,10,10,164,164,164, + 164,164,164,164,164,87,164,11,11,164,11,11,87,11,11,11, + 11,11,93,93,11,11,225,225,225,16,225,225,16,16,225,11, + 175,223,223,175,175,175,175,175,18,175,223,18,223,175,223,175, + 223,175,18,211,159,223,223,223,18,223,18,223,223,18,18,18, + 18,18,18,18,18,18,249,18,249,18,149,18,149,18,249,149, + 18,39,39,138,138,39,39,39,138,249,138,138,138,138,39,149, + 149,149,149,39,149,149,138,138,149,39,39,149,39,149,39,149, + 39,149,149,39,39,149,39,149,39,149,149,149,39,178,47,151, + 44,196,96,240,49,96,115,142,72,202,142,196,172,238,202,72, + 80,29,133,240,115,15,245,15,15,133,151,29,202,245,152,115, + 245,112,85,152,72,72,142,96,115,202,84,172,253,152,115,135, + 198,108,29,198,112,129,151,84,63,84,80,151,151,202,89,72, + 72,152,96,44,133,72,206,29,242,115,15,197,172,15,63,63, + 84,129,28,244,28,190,29,29,151,151,80,129,151,240,28,240, + 105,129,133,58,196,191,193,29,29,115,115,115,244,115,115,253, + 115,152,115,115,245,152,196,190,15,96,202,115,84,46,196,142, + 142,15,203,28,28,244,245,115,15,245,245,28,115,152,89,245, + 152,245,115,245,0,220,102,10,136,10,164,10,164,10,10,53, + 164,164,53,164,11,164,87,11,87,11,87,11,11,11,11,11, + 11,11,11,11,225,225,225,225,16,225,16,225,225,225,11,225, + 175,223,223,175,223,175,175,223,175,175,223,18,223,18,223,223, + 223,223,18,185,51,175,223,39,223,223,18,18,18,18,18,18, + 149,18,149,18,249,18,149,18,149,149,249,18,249,39,138,138, + 149,149,149,138,149,149,149,149,39,18,149,149,138,149,149,138, + 138,149,239,138,138,149,138,138,149,149,39,149,39,149,149,149, + 149,149,149,149,149,149,149,149,149,73,149,149,149,229,47,188, + 242,115,72,63,89,89,115,202,89,202,253,253,142,63,96,142, + 196,96,135,205,245,15,112,135,115,151,29,198,135,15,202,115, + 245,196,129,115,58,58,89,202,28,152,202,49,172,216,115,29, + 242,29,29,190,133,235,240,112,96,135,240,235,46,133,190,238, + 72,72,84,58,29,44,29,29,29,191,15,84,172,202,63,72, + 96,63,190,151,129,244,133,137,190,187,151,129,152,151,29,29, + 133,108,162,29,196,190,198,29,193,152,152,245,191,89,115,115, + 115,49,135,190,202,0,129,154,115,46,193,190,202,244,15,202, + 135,115,115,89,220,244,202,115,202,115,115,245,245,15,245,245, + 245,0,245,0,245,154,102,10,53,136,136,164,164,164,164,164, + 164,164,11,164,11,164,164,164,11,11,11,11,87,11,11,11, + 11,11,11,11,225,225,225,225,225,225,16,16,16,226,11,11, + 175,223,175,223,175,223,18,175,18,18,18,175,18,175,18,18, + 223,18,249,147,95,223,223,223,39,18,39,18,39,223,18,18, + 18,249,18,149,18,149,18,249,249,189,249,138,138,249,249,138, + 249,138,138,149,138,249,138,249,149,138,138,138,138,73,138,149, + 138,149,39,104,149,138,149,149,104,149,45,149,104,149,149,138, + 149,149,149,73,149,149,149,149,149,149,149,149,39,198,229,188, + 85,44,72,96,202,89,96,58,72,202,72,172,89,142,142,96, + 96,72,137,105,115,245,245,202,151,96,245,58,202,253,202,202, + 115,245,216,152,63,89,202,245,15,0,142,46,46,29,142,190, + 29,133,244,80,44,63,135,115,152,240,115,15,191,244,44,135, + 142,89,44,44,151,151,193,29,58,115,15,49,63,236,63,84, + 37,129,245,15,28,202,113,187,133,152,245,115,130,198,193,137, + 151,193,133,190,202,115,142,15,115,115,142,245,58,0,152,152, + 152,89,108,187,133,0,115,152,0,142,206,72,89,196,135,115, + 142,216,115,72,129,196,253,253,115,142,202,245,15,152,115,15, + 245,245,245,245,15,154,102,10,10,10,136,136,87,11,164,136, + 164,164,164,11,164,11,11,11,11,11,11,11,11,11,11,11, + 93,11,225,225,225,11,225,16,225,126,225,225,225,225,225,225, + 175,223,175,175,175,223,175,241,175,175,18,175,175,175,175,175, + 223,175,249,227,95,223,39,223,175,175,175,223,39,223,39,18, + 39,149,18,149,18,149,249,249,249,138,73,249,138,138,249,189, + 249,138,138,73,73,73,138,73,73,73,73,138,138,138,73,73, + 73,239,149,149,239,104,149,149,149,138,149,149,149,138,149,138, + 138,104,39,149,149,39,149,149,149,149,45,149,39,27,47,47, + 105,151,72,72,142,152,89,96,142,115,193,172,152,49,58,142, + 72,196,129,198,133,245,245,44,133,244,112,115,202,202,245,245, + 202,245,240,29,84,84,135,216,152,152,96,96,245,29,151,178, + 105,113,129,84,240,245,96,125,133,133,197,151,58,203,63,135, + 142,72,44,58,96,137,190,240,240,28,129,141,172,44,63,72, + 72,129,245,15,15,196,84,135,240,244,173,141,37,202,115,58, + 84,80,205,15,15,15,15,245,0,152,245,245,72,115,72,135, + 89,152,137,154,206,245,245,152,152,89,72,240,142,72,142,137, + 115,245,245,245,220,115,152,115,115,245,245,115,245,0,245,245, + 245,15,245,0,240,154,171,136,136,10,136,10,136,136,10,164, + 11,11,53,11,11,164,11,11,11,11,11,11,11,11,93,11, + 225,225,225,225,16,225,225,16,16,226,126,226,16,226,16,225, + 175,175,175,175,175,175,175,175,175,175,223,175,223,175,223,223, + 175,223,39,168,208,223,223,39,223,223,223,18,175,39,223,18, + 138,18,138,18,249,189,189,189,189,189,249,138,73,138,73,73, + 73,73,73,249,138,149,73,149,149,138,138,239,73,73,149,149, + 149,138,149,104,138,149,138,138,104,138,104,138,138,138,138,138, + 149,149,149,149,138,239,73,138,138,239,138,149,189,198,188,47, + 188,170,172,58,72,152,96,96,115,0,49,172,142,172,72,253, + 245,196,58,29,178,151,178,86,135,151,193,21,135,245,115,115, + 0,244,133,191,152,84,240,58,49,58,84,172,84,112,202,58, + 198,137,133,135,244,178,197,197,244,28,196,188,29,202,15,151, + 112,72,44,84,44,135,196,142,89,135,240,133,137,190,29,58, + 49,115,245,15,196,172,44,202,137,84,84,29,46,80,49,72, + 151,133,29,15,15,245,15,15,115,152,15,15,115,49,72,142, + 253,152,115,58,245,115,115,202,245,115,89,115,142,197,72,15, + 15,245,245,245,245,240,202,240,58,115,115,0,15,115,152,115, + 245,115,245,245,80,137,102,10,10,136,136,11,164,164,11,11, + 164,164,11,164,164,11,11,11,11,11,11,225,11,225,11,225, + 16,11,11,11,225,16,126,225,225,225,16,225,226,16,126,225, + 175,175,241,241,175,175,175,241,241,175,175,18,223,175,175,223, + 18,223,18,68,54,223,39,18,39,39,39,39,18,189,39,18, + 189,39,39,39,249,249,138,249,249,138,73,249,73,249,138,249, + 249,249,73,239,73,249,73,73,138,73,138,138,149,73,138,73, + 138,138,138,138,138,104,39,138,138,138,138,104,138,104,138,138, + 138,189,189,138,189,138,138,138,189,138,138,39,39,242,105,144, + 188,26,63,117,72,142,72,58,96,85,44,96,133,172,172,172, + 89,63,152,49,84,29,188,80,96,151,47,188,151,152,96,115, + 202,190,151,137,115,193,190,103,63,172,84,141,72,245,15,115, + 196,206,112,202,49,63,198,193,141,44,197,29,172,44,129,244, + 135,80,96,29,193,193,69,29,96,142,240,154,29,137,142,206, + 152,115,202,245,197,115,190,244,80,151,29,187,187,29,29,151, + 135,154,29,15,129,202,244,198,133,135,15,115,115,72,206,152, + 142,245,245,28,245,152,206,115,152,245,115,193,115,236,190,245, + 15,245,245,15,15,142,115,28,129,191,191,0,202,115,115,152, + 245,15,0,0,154,154,222,136,136,10,136,164,164,164,164,11, + 11,11,11,11,11,11,87,11,11,225,11,225,225,225,225,11, + 16,225,16,126,225,225,20,126,226,226,226,225,226,16,16,225, + 175,175,175,175,175,175,175,175,175,249,175,241,175,249,18,18, + 175,138,39,167,140,18,175,241,189,189,39,18,189,18,189,189, + 39,189,189,189,189,138,189,138,138,189,249,138,249,138,249,138, + 138,138,138,138,249,73,249,249,73,239,73,239,73,239,73,138, + 104,138,138,138,138,138,104,149,149,138,138,138,138,138,138,138, + 138,73,138,104,138,138,138,104,138,149,138,149,223,188,78,78, + 176,27,105,151,49,49,89,96,96,29,29,80,151,63,172,235, + 89,152,152,115,84,202,188,188,21,206,125,188,137,238,141,58, + 115,37,206,80,152,80,151,29,202,84,72,133,206,245,245,245, + 0,190,245,178,79,142,151,193,46,128,46,29,85,96,72,112, + 240,133,198,84,96,69,79,79,79,115,115,96,112,0,115,240, + 89,115,49,142,135,173,133,80,142,193,197,29,44,187,216,142, + 151,58,129,202,190,244,240,84,72,115,115,15,15,115,72,142, + 115,89,202,137,115,152,112,113,152,202,80,37,202,206,115,245, + 15,245,15,15,15,115,129,191,190,190,28,202,191,245,245,15, + 115,115,245,15,103,80,10,208,164,11,164,11,11,87,11,87, + 11,11,225,225,225,11,11,11,225,11,225,225,225,20,16,225, + 225,16,126,16,126,16,225,16,16,225,16,226,226,226,126,225, + 175,175,175,175,175,241,175,175,175,175,175,241,175,175,241,18, + 175,18,18,167,214,18,39,18,18,189,189,189,138,189,249,249, + 249,138,249,138,189,73,73,73,73,73,73,189,73,73,73,73, + 73,73,73,138,138,138,138,249,138,138,138,73,138,149,149,149, + 73,138,104,138,138,149,138,104,138,104,138,104,138,138,104,138, + 138,149,138,138,138,138,138,149,104,138,138,138,39,144,78,78, + 105,129,28,129,63,44,72,89,115,193,133,135,172,37,115,112, + 142,46,236,236,115,202,84,198,105,151,141,198,151,203,172,196, + 63,236,84,129,72,151,129,151,129,44,172,133,154,135,15,115, + 245,190,244,44,84,115,84,37,141,63,46,84,190,152,172,44, + 190,151,198,29,178,178,178,79,86,80,115,151,190,245,151,240, + 129,151,135,172,28,240,154,85,198,117,29,193,115,113,84,133, + 205,152,152,96,130,244,115,58,172,142,15,245,15,115,191,115, + 115,115,28,240,154,142,245,190,0,108,205,129,137,133,15,245, + 15,245,245,15,15,245,196,240,9,244,115,115,69,190,202,202, + 15,115,190,190,234,154,10,136,136,136,136,136,11,11,11,11, + 87,11,11,11,225,225,225,225,225,225,225,225,225,225,225,16, + 20,225,16,225,126,20,226,226,226,226,20,226,226,226,226,225, + 175,241,241,241,241,241,249,249,241,241,175,18,241,249,18,175, + 18,241,175,230,54,175,175,241,189,175,18,18,189,189,18,189, + 189,138,189,189,249,138,249,138,249,138,138,73,189,249,189,189, + 249,138,249,73,138,73,73,138,138,73,73,138,138,189,104,138, + 138,138,138,138,138,138,138,138,138,138,138,138,138,138,189,138, + 138,104,138,138,138,104,138,138,189,138,138,138,18,105,141,46, + 13,63,112,28,191,242,84,89,202,29,44,141,84,72,49,96, + 63,46,49,152,133,172,89,197,29,29,174,172,44,105,174,154, + 58,49,141,198,29,96,115,135,80,244,142,190,44,190,245,245, + 0,151,28,197,105,205,137,151,49,63,44,172,151,135,133,84, + 129,142,151,115,178,79,188,113,21,133,112,29,205,0,152,151, + 80,133,245,202,15,15,84,141,206,151,231,154,46,187,178,245, + 72,152,245,115,15,202,72,37,172,142,15,245,115,15,154,191, + 240,196,135,15,29,129,96,240,152,108,151,80,154,190,15,15, + 15,15,15,15,15,245,142,190,240,202,115,49,154,187,15,115, + 202,245,112,202,129,151,222,136,11,11,11,11,11,93,11,11, + 11,11,93,225,11,11,11,11,225,225,225,225,225,16,126,126, + 225,20,126,20,16,126,226,16,20,226,226,226,226,20,16,16, + 175,241,73,249,249,241,184,241,73,73,241,73,73,241,189,189, + 175,189,175,71,54,175,39,39,138,189,189,189,18,189,189,138, + 189,189,249,189,189,189,189,138,138,189,249,138,189,138,138,189, + 189,189,138,138,138,138,73,138,138,138,138,73,138,189,189,138, + 73,138,104,138,73,104,39,138,138,138,138,138,104,39,149,138, + 189,138,138,138,138,138,104,39,149,138,138,39,223,130,112,129, + 129,133,130,193,151,44,197,72,202,44,151,84,141,135,240,84, + 117,63,193,46,26,141,193,205,193,29,198,72,196,141,117,26, + 191,130,151,151,84,141,63,240,84,89,151,151,103,152,89,89, + 63,129,190,240,178,105,63,130,151,151,96,178,29,236,46,142, + 135,135,84,49,49,29,187,198,187,193,154,133,151,205,152,152, + 84,137,202,115,15,190,231,13,146,142,197,49,240,133,154,72, + 49,190,137,129,152,245,137,137,152,245,15,0,89,72,108,0, + 89,191,240,191,129,190,253,245,152,80,133,29,137,129,15,15, + 15,245,245,245,15,196,58,63,152,142,245,72,245,114,202,115, + 240,245,115,115,245,154,10,136,136,225,11,136,11,93,93,225, + 225,11,11,225,225,225,225,16,16,225,16,16,126,16,225,20, + 225,20,126,20,16,16,226,126,226,226,20,20,226,226,226,225, + 175,241,241,241,241,241,241,241,241,241,73,241,241,241,241,175, + 249,18,18,111,54,175,73,73,73,138,249,249,138,189,249,189, + 189,138,189,189,249,138,249,189,189,249,189,189,138,189,189,138, + 138,138,138,73,138,138,138,73,138,138,189,138,73,138,138,104, + 138,138,189,189,189,39,138,138,138,138,138,189,39,138,189,39, + 39,189,138,138,39,138,39,138,189,189,39,138,39,29,238,26, + 129,193,229,229,229,105,27,49,89,84,152,152,141,84,196,46, + 141,231,172,245,231,44,235,29,96,151,105,188,133,46,26,13, + 49,49,58,205,240,202,142,240,142,84,112,133,135,49,49,72, + 46,244,133,191,28,235,29,193,245,245,129,37,242,29,245,72, + 135,196,112,202,115,49,198,105,29,151,152,129,129,240,152,89, + 152,253,115,152,115,174,146,128,212,37,170,196,72,80,84,245, + 0,129,205,0,152,152,245,0,0,245,0,191,133,196,72,115, + 84,72,196,103,113,137,113,187,58,240,190,191,58,190,15,245, + 15,245,0,245,245,115,58,0,253,115,115,115,245,190,96,46, + 242,115,245,245,151,103,136,136,11,11,11,225,93,11,225,225, + 93,225,225,225,16,225,16,225,225,16,225,20,225,20,20,225, + 126,225,16,126,226,226,226,20,20,226,226,226,226,251,126,226, + 241,175,241,241,241,241,241,73,73,241,241,241,241,249,241,241, + 241,189,249,59,54,189,73,73,73,73,73,73,249,189,249,249, + 189,189,138,189,189,189,138,73,189,138,73,73,73,73,73,73, + 73,189,138,189,189,189,189,189,189,73,189,138,189,189,189,189, + 189,189,104,39,73,189,189,189,189,189,138,138,189,138,138,138, + 39,189,189,73,39,138,189,189,39,138,39,39,223,242,240,46, + 46,242,177,229,229,105,47,49,89,89,152,37,172,63,130,178, + 193,13,133,235,229,63,26,117,213,130,198,198,26,174,117,63, + 49,89,49,58,151,202,244,240,202,142,137,133,137,72,72,72, + 235,202,244,84,28,28,135,63,29,89,29,151,58,202,198,133, + 245,115,15,115,115,115,63,29,198,151,15,0,202,15,152,152, + 152,152,115,89,231,70,13,236,37,115,49,196,135,190,242,37, + 245,244,142,152,245,0,142,89,115,152,152,137,245,142,142,190, + 115,152,115,191,129,129,151,133,142,202,154,154,129,80,115,152, + 245,245,245,245,152,202,58,152,49,115,253,115,240,190,202,196, + 115,0,245,15,58,135,136,93,136,225,11,225,225,225,93,16, + 226,126,225,225,126,126,225,16,225,20,225,20,126,126,20,20, + 20,20,20,251,251,251,226,226,20,226,251,20,20,20,226,226, + 241,241,175,241,241,241,73,241,241,241,73,241,73,73,73,249, + 73,73,175,200,86,249,249,73,73,73,189,189,73,249,189,73, + 73,138,73,138,73,73,73,138,73,73,138,138,249,138,189,138, + 189,73,189,73,73,73,189,73,73,189,138,189,73,73,189,138, + 73,138,189,73,189,73,73,189,189,189,189,189,189,39,189,138, + 138,149,39,39,138,189,138,138,138,189,138,39,39,130,37,236, + 193,29,177,144,229,105,229,37,245,152,89,236,152,152,130,188, + 63,170,13,146,174,238,236,242,174,170,29,29,112,242,26,13, + 89,49,152,96,112,191,202,190,115,244,113,205,133,240,142,142, + 49,196,245,133,29,203,28,129,202,202,202,216,202,72,29,129, + 190,240,112,96,112,196,72,242,197,202,115,129,244,203,152,152, + 49,89,0,89,152,0,0,0,152,89,202,117,29,84,129,46, + 63,151,115,152,152,0,58,49,49,152,152,129,108,244,240,72, + 49,49,115,133,191,154,137,245,115,253,142,142,244,202,72,89, + 115,0,152,72,253,49,115,152,216,245,245,245,244,196,244,49, + 28,142,152,0,129,205,10,11,225,225,225,225,126,225,16,225, + 225,16,126,126,225,16,126,20,126,126,20,126,20,20,126,126, + 251,251,226,20,20,20,20,251,139,139,20,139,139,139,226,16, + 241,241,241,184,184,241,184,184,184,241,73,249,241,73,241,73, + 249,249,175,52,86,241,189,73,73,73,73,189,73,73,189,249, + 73,189,73,189,189,189,73,73,73,73,73,73,73,73,73,73, + 138,73,138,138,138,73,189,189,73,73,138,138,138,138,73,138, + 189,189,138,138,138,138,149,138,138,189,189,138,104,39,189,189, + 39,138,138,189,189,189,73,149,138,189,138,39,223,157,235,146, + 117,172,128,49,117,37,49,37,115,89,89,152,0,49,84,172, + 49,49,133,72,174,216,235,130,144,235,193,242,193,13,141,49, + 89,49,89,89,72,63,202,63,49,190,206,202,115,202,0,115, + 115,89,58,216,133,151,236,84,133,142,58,29,130,240,202,142, + 142,142,202,244,202,129,89,193,231,202,15,133,135,115,115,152, + 152,49,96,151,84,135,202,245,245,152,49,115,151,96,202,235, + 236,135,152,152,0,15,115,115,152,152,141,141,129,137,245,115, + 29,0,244,103,113,103,154,112,29,80,135,152,152,152,152,0, + 152,152,115,72,253,152,0,0,0,152,245,245,191,129,253,152, + 245,202,152,0,113,108,136,11,11,225,16,16,16,225,126,226, + 226,20,20,251,237,20,20,251,20,251,237,126,20,20,20,20, + 20,226,226,226,226,226,20,20,20,226,20,20,20,20,226,226, + 241,241,241,241,241,184,184,184,184,184,184,184,241,73,73,73, + 73,73,241,200,79,241,73,73,73,73,73,73,73,73,73,73, + 189,73,241,189,189,73,189,189,189,241,73,73,73,189,241,189, + 73,189,73,73,189,189,189,189,189,189,189,189,189,189,39,189, + 189,138,189,189,189,189,189,189,189,189,189,138,73,138,39,138, + 189,189,189,189,138,138,39,138,73,189,189,138,39,200,157,85, + 96,236,13,174,46,44,105,49,0,49,49,152,89,89,49,170, + 49,72,13,117,146,236,26,130,188,84,46,117,44,151,15,15, + 49,49,152,49,72,49,245,49,84,133,96,172,172,72,89,89, + 152,115,89,240,245,202,190,29,29,72,85,133,129,142,115,151, + 244,245,115,202,142,15,253,112,13,15,15,89,152,15,15,152, + 152,152,152,152,115,137,29,84,236,37,191,240,28,28,135,135, + 84,115,115,115,15,173,28,15,15,115,15,58,29,113,245,202, + 113,129,108,113,113,151,115,0,245,0,0,0,115,115,245,0, + 152,152,152,115,0,0,152,152,245,152,0,152,28,154,197,238, + 96,115,0,0,244,96,11,225,16,126,225,16,226,20,20,20, + 20,126,20,20,20,20,251,20,237,20,20,20,126,126,126,226, + 226,20,226,226,226,20,226,226,226,20,226,226,226,226,226,226, + 241,73,228,228,241,184,241,228,184,241,184,73,184,73,73,73, + 241,73,241,52,188,241,73,73,73,73,73,241,189,189,241,241, + 241,189,241,189,241,189,189,189,189,241,241,241,189,189,241,189, + 241,189,175,189,189,189,189,39,189,189,189,189,189,189,39,39, + 39,39,39,39,39,189,189,39,39,189,189,189,189,138,39,189, + 39,39,39,39,189,189,39,39,39,138,39,189,39,229,22,177, + 13,46,235,174,229,236,174,49,152,49,49,152,152,115,72,193, + 72,96,37,112,146,72,236,117,78,133,46,244,213,26,46,46, + 15,115,28,178,188,105,79,188,105,245,152,72,235,54,47,21, + 198,152,152,190,152,245,245,253,202,198,187,72,240,213,202,151, + 129,213,244,202,202,135,44,242,146,202,15,72,152,115,115,152, + 152,152,152,152,72,151,172,190,190,202,202,115,28,112,115,58, + 29,15,173,173,173,15,245,115,15,245,15,15,103,178,187,142, + 198,103,133,191,190,133,115,151,152,152,152,115,133,244,15,115, + 115,152,152,152,240,0,152,152,0,152,0,196,115,142,58,196, + 202,89,152,245,108,129,225,225,16,16,226,16,126,16,226,226, + 20,20,20,20,237,20,237,251,237,119,165,224,20,20,20,226, + 226,20,20,226,226,226,226,226,226,226,226,226,226,226,20,226, + 228,228,241,241,228,228,184,184,184,184,228,228,73,228,73,184, + 184,73,241,199,79,241,184,73,73,73,73,73,189,241,189,241, + 189,241,189,241,39,241,241,241,241,39,241,241,189,189,189,241, + 189,189,189,189,241,241,189,189,241,189,175,39,189,189,189,189, + 189,189,189,189,189,39,39,189,189,189,189,189,189,39,73,39, + 189,189,189,189,39,189,189,189,189,189,189,39,223,177,248,111, + 46,236,46,200,117,231,46,37,49,49,37,152,49,152,49,170, + 49,49,146,231,128,111,117,117,174,197,238,28,72,197,133,242, + 244,15,203,105,196,29,44,85,130,0,0,0,202,151,72,72, + 89,89,89,29,152,202,173,15,173,29,105,235,240,196,129,112, + 129,190,85,133,133,129,96,231,231,15,15,108,113,137,15,115, + 72,152,152,206,193,198,142,205,240,191,245,191,112,28,96,89, + 196,245,245,245,0,15,15,173,15,15,203,0,133,80,133,187, + 151,115,108,125,114,133,0,103,113,244,152,58,115,115,0,152, + 72,152,152,152,190,137,240,58,245,206,190,112,253,142,240,202, + 240,245,245,152,190,133,11,16,16,226,226,226,20,226,20,251, + 20,226,20,251,251,75,234,114,234,234,233,108,6,35,108,108, + 234,187,234,114,114,69,134,232,114,114,114,94,226,20,226,226, + 228,73,228,228,228,228,228,228,228,73,228,228,228,228,73,228, + 73,73,241,128,188,241,184,73,241,73,241,73,73,73,73,189, + 189,189,189,241,189,189,189,189,189,189,189,189,189,189,189,189, + 189,241,189,189,189,189,241,189,189,189,189,241,189,189,73,241, + 189,241,189,189,189,189,189,189,189,189,189,189,189,39,138,189, + 189,189,73,189,189,189,189,138,39,189,189,189,39,217,200,248, + 229,49,231,59,128,89,37,245,152,235,115,242,199,242,152,170, + 235,84,193,174,146,26,128,26,174,130,235,15,47,141,235,197, + 202,28,191,178,193,214,95,178,188,0,0,142,84,85,115,89, + 152,89,49,193,151,151,205,28,244,231,29,29,89,115,142,142, + 96,129,129,135,142,115,236,128,84,28,15,133,187,96,15,203, + 29,117,0,58,63,205,193,142,151,133,244,151,108,103,216,133, + 151,151,29,29,29,29,198,202,15,15,15,245,187,178,187,178, + 133,245,245,112,15,115,152,206,129,190,202,96,142,202,115,152, + 72,152,152,245,108,113,58,49,0,0,0,202,202,244,190,115, + 202,115,245,152,137,205,93,225,16,16,225,16,226,226,16,226, + 237,201,232,234,108,234,234,234,234,234,33,108,108,6,6,6, + 6,108,35,108,108,108,108,154,154,154,6,234,226,226,20,226, + 228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,73, + 228,228,241,70,188,241,241,184,104,73,73,73,73,189,189,189, + 189,189,189,73,189,189,189,189,73,189,189,73,189,189,189,189, + 189,73,189,189,189,189,73,189,241,73,73,241,189,241,189,189, + 189,189,189,189,73,73,189,73,189,189,189,189,189,189,189,189, + 189,39,39,138,39,73,189,189,149,73,189,189,223,183,22,248, + 157,236,212,146,146,49,202,49,236,172,89,176,131,176,26,151, + 170,198,105,178,27,117,85,235,117,117,235,142,242,141,141,29, + 15,135,129,130,130,198,27,27,188,142,151,96,112,115,152,152, + 89,58,188,188,188,229,27,44,70,212,174,198,26,0,253,245, + 253,202,115,240,245,63,231,112,28,15,178,79,29,133,115,28, + 151,151,202,142,130,193,84,29,152,115,72,85,96,152,84,178, + 29,193,198,187,198,198,21,28,173,15,152,0,113,178,125,178, + 29,15,202,245,0,15,245,0,0,135,133,29,129,202,112,152, + 0,245,152,202,244,244,63,115,152,15,137,190,244,220,191,202, + 58,216,129,129,108,29,11,225,226,226,16,226,94,201,114,234, + 108,108,234,114,234,234,234,234,234,234,154,6,108,108,108,108, + 108,108,108,6,108,108,154,108,108,108,108,108,226,226,226,226, + 228,228,228,228,228,66,228,66,228,228,228,228,228,228,228,228, + 73,228,241,170,21,241,184,241,104,73,241,73,73,73,73,73, + 73,73,189,73,189,189,73,189,189,189,189,73,73,189,73,189, + 189,73,73,73,73,189,189,73,189,189,189,73,73,189,189,189, + 73,189,189,189,189,189,189,138,189,189,189,73,189,189,189,189, + 73,73,189,73,138,138,189,189,138,149,138,73,189,177,200,248, + 200,49,37,117,141,235,238,193,49,72,235,105,21,229,105,96, + 193,105,144,78,176,47,89,238,26,46,236,72,245,216,152,112, + 28,72,220,235,144,86,86,176,54,245,245,115,245,115,151,151, + 193,96,84,105,242,44,202,152,253,49,146,170,178,198,89,240, + 202,129,129,202,236,151,113,188,178,15,79,105,113,198,152,115, + 197,29,178,142,188,141,141,198,198,49,72,198,187,172,240,178, + 108,206,193,29,29,29,80,85,152,152,115,152,187,72,58,190, + 135,133,86,133,245,72,63,152,245,154,133,154,29,137,129,152, + 0,202,0,112,240,244,49,115,152,137,137,137,202,191,245,15, + 28,115,137,133,108,205,164,16,94,187,187,234,234,108,234,234, + 234,234,234,234,234,33,234,234,114,234,108,6,108,6,6,6, + 6,108,108,6,6,234,6,6,6,6,108,6,226,226,20,226, + 228,228,228,66,66,66,66,66,66,66,66,66,228,228,228,228, + 228,228,241,117,229,241,228,73,104,228,104,104,104,104,73,73, + 189,189,73,189,73,73,189,73,73,73,73,189,189,73,73,73, + 73,73,189,73,73,73,73,189,73,73,73,189,189,73,73,73, + 138,239,73,189,189,73,138,73,189,189,189,189,104,189,138,138, + 189,189,73,189,189,138,104,73,189,73,189,189,39,199,177,22, + 157,128,231,13,46,174,177,78,174,193,84,63,115,72,72,85, + 151,197,130,144,47,47,105,152,89,0,245,216,216,152,245,202, + 245,115,202,202,29,105,188,47,86,115,28,15,202,28,115,28, + 28,85,96,196,202,115,202,202,202,202,245,72,26,105,188,193, + 84,151,133,178,86,86,21,205,202,202,79,187,193,151,190,202, + 202,151,29,244,137,80,151,206,170,142,15,115,152,245,115,198, + 29,244,58,84,235,63,46,26,152,115,152,245,152,245,245,245, + 245,113,113,198,133,96,216,245,0,29,80,133,133,133,115,0, + 115,15,245,245,202,58,72,115,115,115,196,112,244,205,28,151, + 108,89,129,220,133,240,114,234,234,234,114,114,234,234,114,234, + 234,114,234,114,234,33,234,234,234,234,80,6,108,108,108,108, + 108,6,108,108,108,6,108,108,108,108,6,108,20,226,226,226, + 228,66,66,66,66,66,66,66,66,66,66,228,66,228,228,228, + 228,228,241,170,198,241,228,228,104,104,104,73,104,104,104,104, + 73,189,73,73,73,73,189,73,73,189,73,73,73,73,73,73, + 73,73,73,73,73,73,239,138,189,73,73,73,138,189,73,73, + 73,73,73,73,73,73,189,104,104,104,138,189,104,73,73,104, + 104,189,104,73,73,189,189,73,239,73,73,73,189,156,174,236, + 235,238,236,46,117,172,37,46,96,89,183,183,117,231,242,128, + 63,216,128,37,13,70,212,32,238,253,231,13,13,231,37,13, + 238,115,63,84,85,206,58,58,63,142,135,58,96,135,58,58, + 63,202,112,142,112,58,135,190,85,112,142,72,96,240,142,89, + 238,202,202,89,245,115,89,115,202,115,115,115,72,196,253,202, + 89,202,196,58,142,89,142,240,202,115,89,202,202,202,202,115, + 202,202,142,196,142,240,58,202,202,253,202,115,244,244,240,28, + 15,202,244,244,58,202,115,115,245,202,115,244,244,196,115,202, + 245,15,115,115,142,202,202,202,15,245,115,115,115,115,15,115, + 253,152,152,115,15,108,113,29,40,40,58,9,9,40,9,9, + 9,33,80,6,234,114,114,234,234,234,6,154,6,108,108,6, + 234,6,108,6,108,6,154,108,108,108,6,108,69,103,139,20, + 228,66,66,66,66,77,66,77,66,77,66,66,66,66,66,66, + 66,66,184,26,105,241,228,228,228,228,228,228,104,104,104,104, + 104,104,73,73,73,104,104,73,73,104,104,104,73,73,104,73, + 73,104,73,73,73,73,73,73,73,73,73,104,73,73,73,73, + 73,73,73,104,73,73,104,189,189,189,104,73,149,73,104,189, + 189,104,189,138,104,73,239,73,73,104,104,73,73,138,47,242, + 235,89,141,92,92,92,92,124,217,216,183,124,200,124,200,59, + 26,63,128,182,32,32,32,120,37,152,92,59,59,59,200,59, + 26,89,193,141,141,193,141,193,26,89,197,193,141,197,197,193, + 26,96,193,151,197,197,151,172,26,142,235,49,63,37,63,84, + 26,89,217,127,72,72,49,115,26,216,235,172,58,84,206,58, + 26,152,133,84,206,172,84,84,84,202,44,84,206,58,206,206, + 235,96,44,58,190,135,190,58,235,196,84,190,58,190,58,135, + 142,135,72,58,115,58,244,196,115,89,58,58,58,244,58,58, + 152,142,244,244,244,58,115,142,152,196,244,244,58,244,196,115, + 245,245,135,135,80,233,33,233,233,35,35,35,108,35,35,35, + 35,233,35,35,233,9,33,233,154,108,233,108,108,6,6,108, + 6,108,154,108,108,108,234,154,6,154,108,154,154,129,112,115, + 77,66,77,66,77,77,77,77,77,77,66,77,66,77,66,66, + 66,66,184,193,198,184,228,228,104,228,228,228,228,228,104,104, + 104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104, + 104,104,104,104,104,104,104,104,73,104,104,73,104,104,73,73, + 239,239,104,104,104,104,104,104,104,104,104,104,239,73,239,104, + 104,104,104,104,104,73,239,104,104,138,104,104,104,73,176,229, + 84,115,231,212,124,124,92,124,183,216,52,59,92,59,124,59, + 46,152,124,32,32,71,32,120,26,89,59,32,32,182,182,59, + 193,115,174,105,170,174,170,141,235,253,197,193,193,170,193,141, + 26,84,193,29,193,29,29,141,174,142,133,235,84,235,46,46, + 26,253,236,152,63,49,172,49,242,115,26,151,105,105,193,172, + 26,142,242,44,44,151,172,197,26,142,197,172,172,172,206,84, + 133,96,44,206,84,84,206,58,235,58,84,206,84,172,58,96, + 238,85,58,49,63,58,49,135,96,112,58,58,172,172,244,44, + 216,135,58,58,58,58,58,135,152,96,58,58,58,58,58,142, + 245,202,133,129,33,233,35,35,35,6,233,35,35,35,35,233, + 35,233,35,233,233,233,35,233,33,33,9,154,108,108,154,108, + 154,108,6,6,6,154,154,234,108,108,108,154,154,220,216,245, + 77,66,77,77,66,77,77,66,77,77,77,77,77,121,66,194, + 194,66,184,46,170,184,66,121,121,104,228,104,228,228,228,104, + 104,104,104,104,104,104,104,228,104,104,104,228,104,104,104,104, + 104,104,104,104,104,104,104,104,104,104,73,104,73,104,104,104, + 104,104,104,73,104,104,104,104,104,104,239,73,104,104,104,104, + 138,104,104,104,104,104,104,138,104,104,104,104,239,239,131,157, + 242,115,170,128,170,146,170,92,26,253,146,92,146,92,92,59, + 26,152,124,59,182,59,59,71,46,89,59,32,32,182,182,59, + 46,115,128,52,52,212,174,174,46,89,174,170,170,170,170,170, + 117,58,170,29,29,170,29,29,174,142,141,117,231,141,235,141, + 235,142,46,70,13,141,46,236,242,89,141,193,105,105,242,197, + 235,142,242,141,172,172,193,172,242,202,193,172,44,172,44,197, + 235,196,193,84,172,172,44,63,133,96,197,206,172,84,84,58, + 72,96,58,172,49,172,58,84,142,63,58,135,80,197,244,84, + 115,96,58,58,58,58,58,135,245,135,244,58,58,58,244,142, + 245,190,29,29,6,233,233,35,35,35,35,35,233,35,35,233, + 233,233,233,233,233,233,35,233,233,233,33,33,154,6,108,108, + 6,108,108,108,108,108,108,6,6,6,220,220,191,245,0,115, + 77,66,77,77,246,77,77,77,246,77,77,121,77,77,77,77, + 121,77,184,26,130,184,66,66,121,121,121,121,156,121,228,156, + 156,228,228,104,228,228,104,228,228,104,121,95,214,214,95,51, + 51,121,104,104,104,104,104,104,73,104,104,104,73,104,104,104, + 104,73,104,104,104,73,104,239,104,104,104,104,239,104,104,104, + 104,104,138,104,104,104,104,104,104,104,104,104,104,104,158,157, + 174,142,141,146,146,212,170,212,170,253,231,212,146,13,13,92, + 141,152,92,212,124,59,59,71,141,142,124,59,59,59,128,124, + 141,115,128,105,105,105,170,170,193,142,174,170,170,170,29,170, + 117,112,170,29,29,193,29,193,174,142,46,172,46,231,231,117, + 235,142,46,58,46,46,37,37,174,202,141,193,128,170,29,141, + 133,142,193,193,141,141,197,44,242,142,193,172,197,172,197,197, + 26,58,141,206,84,206,172,84,133,253,172,206,172,172,206,206, + 96,235,58,58,172,49,58,84,238,85,58,172,197,29,58,84, + 253,112,58,58,58,58,72,135,0,135,244,58,203,58,115,58, + 245,129,205,29,6,35,35,6,6,233,35,35,233,35,233,233, + 233,35,233,9,233,233,233,233,35,233,9,233,233,33,80,108, + 108,6,108,6,6,6,108,154,154,154,244,33,28,245,245,202, + 77,77,77,77,77,77,246,77,77,77,246,77,77,246,121,121, + 77,194,107,235,133,184,121,121,121,66,66,66,66,156,66,156, + 228,156,104,156,104,156,104,156,104,47,242,29,21,21,27,85, + 85,130,51,30,104,156,156,214,199,79,159,104,156,104,104,104, + 104,104,239,104,104,239,104,104,73,104,104,104,104,104,104,104, + 104,104,104,104,104,104,104,104,104,104,104,104,104,239,214,183, + 242,72,170,124,52,212,212,212,117,196,231,128,128,212,128,92, + 26,196,146,92,92,124,59,59,235,72,212,124,92,92,128,92, + 26,115,170,170,170,170,170,117,26,196,231,170,231,242,170,117, + 193,84,174,170,174,105,174,174,242,96,26,46,26,141,197,197, + 26,253,183,117,26,117,26,235,242,152,193,193,170,242,141,193, + 26,142,170,193,26,44,26,197,26,253,141,46,172,197,172,63, + 133,96,235,84,96,49,238,89,89,142,96,84,84,84,84,96, + 96,135,49,58,63,63,58,84,112,84,115,244,142,172,142,84, + 245,235,115,196,58,244,244,84,245,135,115,58,58,244,196,196, + 0,154,29,205,108,6,6,6,233,6,6,233,233,233,233,233, + 233,233,35,9,9,9,233,9,233,233,233,33,33,233,233,33, + 33,154,108,108,108,6,108,154,108,154,154,154,245,245,0,240, + 43,77,246,43,77,246,43,246,246,246,246,246,77,246,77,77, + 77,77,107,26,29,184,77,121,77,121,121,121,121,121,121,121, + 156,156,156,156,228,156,228,156,121,85,216,0,152,253,245,0, + 0,0,242,214,214,54,79,85,213,85,27,54,95,54,27,54, + 156,104,104,104,156,104,104,156,104,156,104,156,104,104,104,104, + 104,156,104,104,104,104,104,104,104,104,156,104,156,228,176,183, + 229,142,141,124,92,92,92,92,174,115,231,92,92,212,212,92, + 26,96,231,146,146,212,200,32,63,89,212,92,52,128,128,124, + 197,115,117,174,146,105,170,170,26,142,242,141,170,141,170,170, + 26,96,193,172,172,141,197,193,117,142,117,172,117,231,124,52, + 26,202,217,197,141,141,197,26,174,115,193,198,170,130,141,193, + 26,115,170,29,193,72,44,26,235,253,242,44,235,235,197,172, + 235,216,216,115,216,152,253,238,235,238,206,206,172,206,190,84, + 238,96,84,58,58,206,206,84,96,44,135,203,58,196,58,84, + 115,135,58,244,244,58,196,96,245,44,115,244,244,58,196,142, + 152,133,198,29,154,6,6,35,35,233,233,35,233,35,233,233, + 233,233,233,233,233,9,233,233,9,233,233,233,233,33,233,33, + 33,33,33,233,108,108,154,154,190,245,190,240,152,202,0,112, + 43,77,246,246,43,77,246,43,246,246,246,246,246,246,246,51, + 106,77,107,235,151,30,121,106,121,77,106,121,121,121,121,121, + 156,121,66,121,156,51,95,51,208,253,0,0,0,0,0,0, + 0,0,253,85,202,238,238,253,245,0,202,238,238,0,152,89, + 54,51,156,104,104,156,156,156,156,156,156,104,156,156,156,104, + 156,104,156,156,104,156,156,156,156,156,104,156,156,104,214,183, + 144,49,231,92,124,212,212,124,117,84,141,212,212,128,212,124, + 46,238,231,146,212,212,59,59,26,202,174,128,92,92,128,124, + 26,196,146,105,128,212,105,146,117,142,193,170,170,170,170,170, + 26,135,170,193,29,170,170,193,242,238,141,63,141,13,26,46, + 117,89,217,193,170,170,193,193,117,89,29,170,29,170,141,193, + 235,89,235,115,115,253,89,89,238,202,193,172,172,172,151,172, + 216,216,152,0,0,96,89,115,202,142,44,206,40,206,135,253, + 245,253,72,58,58,190,58,84,72,112,58,206,58,58,240,84, + 202,96,203,190,58,244,58,84,115,206,58,58,58,115,58,244, + 245,108,29,29,154,6,6,6,6,154,35,233,35,233,35,233, + 233,233,233,35,9,233,233,233,9,233,233,233,9,233,33,33, + 33,33,33,33,6,108,6,154,40,15,245,245,245,245,152,115, + 43,77,246,43,43,43,43,246,43,43,246,246,246,43,246,246, + 106,77,194,63,151,219,77,106,121,121,121,106,181,121,121,121, + 121,51,41,41,41,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,245,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,41,51,156,51,30,156,156,121,156, + 121,156,156,156,156,156,156,156,156,156,156,156,156,156,131,157, + 144,72,84,151,151,129,44,151,63,63,85,129,84,85,44,133, + 96,96,193,193,117,27,117,26,96,72,26,133,133,80,133,85, + 96,112,44,44,151,135,133,85,63,89,44,85,235,44,133,235, + 238,142,44,44,151,96,44,235,96,96,235,235,85,96,44,85, + 96,96,193,133,193,96,135,112,72,115,96,135,96,135,135,63, + 238,253,89,89,216,245,245,0,152,245,202,142,96,142,96,216, + 0,0,0,0,238,26,236,152,152,115,202,202,142,89,152,216, + 216,245,89,152,115,202,142,202,142,202,115,253,245,152,115,115, + 142,142,115,245,115,253,115,216,202,202,15,115,152,245,152,115, + 202,103,198,103,154,6,6,154,233,35,6,233,233,233,233,233, + 233,233,233,233,9,9,9,233,233,9,233,233,233,233,233,233, + 9,233,33,33,33,154,108,154,28,245,115,245,245,202,245,245, + 43,43,246,246,43,43,43,43,43,246,43,43,246,51,77,50, + 118,73,121,26,96,194,246,171,106,246,106,121,106,121,121,181, + 208,54,41,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,47,54,129,54,156,156,156,156, + 156,156,156,121,121,156,156,156,156,121,156,156,156,156,214,176, + 144,72,130,217,199,242,217,199,26,96,205,144,199,130,21,199, + 26,216,183,21,217,47,199,79,235,142,21,188,27,130,27,21, + 96,142,130,21,27,193,27,27,96,142,130,130,130,205,27,27, + 142,85,79,86,54,130,130,27,96,96,130,130,27,205,27,21, + 85,213,54,54,140,133,103,27,85,253,27,27,21,205,27,187, + 202,152,85,216,152,216,238,152,245,0,112,133,205,205,125,133, + 152,152,152,238,236,236,26,216,216,216,205,130,85,216,245,245, + 0,0,216,216,0,85,103,29,202,89,205,154,133,133,205,205, + 202,202,133,205,85,129,133,129,202,202,133,137,135,129,137,112, + 152,29,29,29,108,154,35,233,233,220,6,35,233,233,233,233, + 233,35,233,233,233,233,233,233,233,233,173,233,233,9,233,33, + 233,33,33,33,33,33,9,203,152,115,245,245,115,202,245,152, + 0,115,58,234,86,246,43,246,43,43,246,43,43,246,156,163, + 148,95,54,44,242,241,106,106,246,121,171,121,106,171,121,208, + 54,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,135,115,245,108,156,51,121,30, + 208,54,121,156,156,156,121,121,156,121,121,121,121,121,214,183, + 217,72,193,217,199,130,199,27,26,63,193,27,27,117,27,183, + 157,85,130,27,27,65,27,27,85,89,130,27,130,65,27,27, + 238,96,29,130,27,133,130,130,238,142,130,130,130,26,130,130, + 238,235,79,21,79,65,130,130,96,85,130,205,130,133,130,130, + 96,238,208,214,54,65,103,130,85,202,130,130,130,205,130,205, + 85,152,238,96,236,89,44,213,253,152,85,205,205,133,26,205, + 216,152,96,238,216,238,85,216,0,216,216,216,216,216,216,216, + 0,0,0,0,0,0,213,85,202,216,213,112,85,137,133,133, + 202,112,133,137,129,129,129,85,196,244,133,129,85,129,129,240, + 115,29,198,29,108,35,103,35,6,233,154,6,6,35,233,9, + 233,233,35,35,233,173,233,173,233,233,9,233,233,233,233,9, + 233,233,233,33,33,33,9,9,9,115,115,216,245,115,245,245, + 0,115,58,58,6,234,43,246,43,246,43,43,51,246,66,241, + 116,43,38,235,85,73,121,106,121,106,121,121,121,121,208,105, + 253,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,245,245,240,125,130,239,54, + 133,202,140,156,121,121,156,121,121,121,156,121,156,156,131,157, + 157,235,205,199,199,193,199,27,26,26,26,27,199,65,27,217, + 26,213,199,27,217,205,199,127,96,238,21,217,27,26,27,130, + 72,236,242,130,27,133,27,130,72,238,130,130,130,133,130,130, + 112,85,21,21,86,133,130,130,85,235,205,130,27,65,205,130, + 235,238,221,162,79,205,130,130,135,216,103,130,130,65,130,130, + 96,253,85,235,96,216,85,133,96,216,205,130,27,112,85,85, + 216,216,238,96,152,238,26,89,216,216,216,202,253,253,216,89, + 216,0,245,0,152,115,152,0,216,216,96,202,253,129,129,129, + 142,202,133,205,85,129,133,190,202,202,129,137,96,129,151,112, + 202,103,198,130,108,35,154,6,6,6,233,220,233,35,35,35, + 233,233,9,35,233,233,9,233,33,233,233,233,173,233,233,233, + 233,9,33,233,33,33,233,233,220,191,28,245,253,245,245,115, + 58,115,115,15,58,234,43,43,43,246,43,77,246,77,66,66, + 83,29,243,240,142,184,66,121,66,246,246,69,206,187,86,202, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,15,202,0,133,208,129, + 15,0,129,54,156,121,156,156,156,104,121,121,121,121,214,157, + 177,96,133,27,199,130,27,70,26,26,193,27,199,130,199,199, + 26,96,130,27,199,65,21,150,235,72,54,158,27,133,27,199, + 96,85,130,130,199,85,27,130,96,96,130,130,130,26,130,130, + 85,85,79,79,79,65,130,130,85,235,130,205,130,130,130,205, + 235,63,54,54,79,65,103,205,85,238,130,130,130,205,130,205, + 85,142,205,238,152,115,202,96,202,253,205,205,85,216,216,0, + 0,89,152,0,0,245,112,0,0,0,216,253,85,133,253,0, + 0,0,112,112,238,202,85,202,253,253,216,0,216,216,96,133, + 202,202,129,133,240,85,129,85,202,112,133,129,112,133,129,96, + 142,29,130,130,108,6,154,233,220,220,6,220,233,154,154,35, + 154,6,233,233,233,6,9,9,233,33,233,233,33,233,9,233, + 233,233,233,9,233,233,9,9,233,9,9,203,253,245,245,152, + 58,244,115,115,115,58,170,91,43,246,43,43,246,246,77,107, + 22,235,27,235,72,107,106,86,29,205,152,152,142,83,127,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,245,0,245,245,245,115,0, + 0,245,245,202,125,86,140,86,86,130,121,121,121,121,176,144, + 217,89,72,26,26,236,235,235,238,96,238,235,133,253,85,26, + 238,89,213,85,26,236,235,133,238,85,85,85,26,85,85,85, + 238,96,213,85,133,85,235,85,89,89,85,133,133,85,133,133, + 202,213,130,103,130,135,133,133,96,238,133,85,133,85,133,133, + 238,142,221,21,79,133,193,205,96,202,65,205,133,85,205,205, + 96,89,96,253,216,0,0,253,216,216,26,238,238,89,216,0, + 152,216,0,0,0,0,0,0,0,216,152,85,135,44,96,152, + 0,0,135,133,133,112,142,216,0,0,0,216,216,216,213,152, + 202,202,85,112,96,240,112,202,202,245,112,85,202,96,240,202, + 202,205,29,29,154,154,35,154,6,220,233,220,220,6,33,233, + 233,220,220,220,154,6,220,154,33,220,220,233,233,233,233,233, + 9,233,233,233,9,233,233,233,33,233,9,9,28,115,245,202, + 190,244,244,9,233,33,234,80,43,43,95,246,43,246,51,104, + 199,70,26,235,89,131,118,193,0,0,0,0,216,63,174,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,245,245,245,245,245,245,0, + 245,245,0,0,0,202,245,33,28,142,142,86,156,121,159,158, + 248,216,70,92,212,212,212,124,146,238,146,212,124,124,92,59, + 52,216,124,59,59,92,59,59,70,216,32,59,59,59,92,59, + 174,253,128,174,212,70,174,70,242,238,231,13,231,231,231,146, + 26,238,231,212,59,32,212,13,174,238,70,174,231,70,70,70, + 242,72,242,70,70,70,231,212,117,196,231,128,217,200,157,183, + 236,216,117,236,216,0,0,152,152,216,49,72,238,49,216,89, + 216,0,0,0,0,0,0,0,0,0,89,238,63,63,0,245, + 96,96,65,89,152,0,0,0,0,245,216,213,65,216,216,216, + 253,213,65,65,215,65,65,65,202,115,115,216,245,115,152,115, + 115,205,29,29,9,220,6,220,6,220,220,220,220,6,154,154, + 220,9,9,191,154,220,191,220,220,220,220,33,33,9,233,9, + 233,233,9,233,233,233,233,9,233,233,233,9,9,129,245,115, + 244,58,58,40,234,114,210,86,43,91,43,246,43,43,14,183, + 85,65,117,44,216,70,52,26,0,0,0,0,0,216,245,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,245,245,245,245,0,245,245, + 245,245,0,0,0,0,0,202,115,245,129,129,54,181,131,159, + 183,89,13,92,146,231,212,146,217,89,70,212,92,247,92,124, + 52,216,92,212,92,247,92,212,52,152,71,59,59,59,124,124, + 217,238,128,174,174,170,170,231,199,142,13,46,13,46,13,13, + 27,85,231,46,13,13,13,13,199,58,70,128,146,117,128,128, + 199,238,22,32,92,117,128,146,199,96,217,183,177,183,183,158, + 235,89,238,216,0,0,0,152,238,152,247,247,89,216,0,216, + 152,152,0,0,0,0,152,235,216,152,236,49,238,89,152,152, + 152,133,236,63,236,152,152,216,142,238,4,122,97,238,89,65, + 253,133,65,122,97,4,215,221,115,235,115,245,152,72,115,84, + 152,187,125,27,6,220,220,220,220,35,233,233,220,220,6,233, + 33,33,6,33,6,233,33,220,33,33,33,233,233,233,233,233, + 233,233,233,233,9,233,233,233,9,233,233,233,33,9,202,202, + 244,115,28,203,108,234,43,91,91,91,95,93,87,43,47,199, + 70,199,70,85,89,70,216,46,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,245,0,0,0, + 245,245,0,0,0,0,0,245,245,28,253,129,208,30,176,248, + 183,253,52,200,146,231,231,146,52,253,231,92,92,212,212,212, + 199,89,128,52,92,92,92,146,199,89,71,32,92,92,212,212, + 199,96,146,174,146,170,231,141,217,85,117,231,231,231,46,231, + 128,85,247,13,236,37,49,13,174,96,174,117,231,46,231,13, + 174,96,70,52,52,46,13,49,174,96,117,70,117,70,52,70, + 238,89,238,216,0,0,216,236,216,216,247,32,152,216,0,89, + 238,0,0,0,0,0,0,236,242,216,152,152,0,152,0,0, + 0,0,0,152,216,0,152,96,85,133,215,122,97,238,65,221, + 142,85,215,122,1,2,221,193,202,133,152,142,115,89,72,96, + 152,130,178,130,133,129,112,129,112,112,112,112,112,112,85,96, + 112,142,85,96,96,85,96,238,96,96,238,240,112,112,112,112, + 196,112,240,85,112,112,112,85,240,96,96,112,96,112,85,135, + 202,115,115,115,58,80,69,91,91,91,93,140,87,51,158,65, + 217,70,70,235,216,236,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,245, + 0,0,0,0,0,0,0,0,0,0,0,0,133,140,47,158, + 183,213,13,59,212,146,212,146,128,72,200,167,212,212,212,124, + 212,72,128,212,212,212,212,92,128,202,92,247,124,146,231,13, + 52,112,231,37,231,37,37,37,229,238,13,37,13,146,231,37, + 217,96,117,8,99,74,99,231,174,44,231,46,231,46,117,70, + 199,238,200,231,70,70,117,231,26,89,216,238,117,199,174,70, + 236,89,72,72,236,236,49,152,152,152,63,13,37,49,49,236, + 89,152,0,0,0,0,0,0,213,152,152,0,0,0,0,0, + 0,0,0,152,0,72,89,152,0,44,216,65,215,72,49,26, + 58,133,115,196,238,253,253,26,245,235,152,89,152,152,115,44, + 245,198,103,187,17,17,17,17,17,17,17,17,17,17,17,17, + 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17, + 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17, + 245,0,0,245,244,58,58,58,80,234,69,201,54,199,236,199, + 238,213,216,85,253,0,0,0,238,152,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,245,0,0,0,0,0,0,0,245,245,85,177,248, + 183,238,117,124,124,124,124,92,52,89,52,32,59,124,92,146, + 70,72,128,212,231,146,146,146,212,238,70,212,146,13,13,37, + 128,112,231,37,13,37,49,37,174,235,13,236,37,68,59,49, + 199,96,92,146,49,13,8,236,174,85,117,236,46,46,117,70, + 70,85,183,183,236,49,37,49,37,89,146,49,89,231,117,46, + 216,213,216,0,0,216,152,0,0,0,0,0,216,72,49,152, + 0,0,0,0,0,0,0,0,0,0,37,152,0,0,0,0, + 0,0,0,0,0,216,89,152,216,142,245,152,115,49,72,26, + 142,133,152,115,49,253,115,197,253,26,89,49,115,152,72,84, + 245,198,198,130,188,54,176,54,214,131,214,214,214,176,214,158, + 214,131,176,176,159,159,159,159,159,176,78,176,214,214,131,214, + 214,176,214,131,176,95,78,214,159,159,248,17,159,17,17,17, + 0,0,0,0,0,245,115,115,203,115,203,217,183,236,236,236, + 216,216,26,44,253,0,0,0,0,0,0,0,0,245,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,245,0,0,0,0,0,0,0,216,0,47,158, + 157,89,13,146,212,212,146,92,128,89,52,59,212,212,247,92, + 128,72,231,146,212,212,212,49,128,72,128,13,212,37,13,37, + 229,96,231,37,37,37,37,37,174,85,13,49,37,13,212,13, + 128,49,59,55,74,71,247,49,117,85,117,199,217,70,243,111, + 70,89,153,81,236,238,49,8,37,152,166,8,42,41,41,67, + 117,152,0,0,0,0,216,72,0,0,0,0,152,13,49,152, + 0,0,0,0,0,0,0,0,0,0,0,0,0,152,0,0, + 0,0,0,0,0,0,216,63,238,26,152,245,152,115,115,117, + 253,235,49,63,49,152,72,235,245,44,89,115,72,72,152,44, + 245,198,113,198,130,170,130,242,235,26,46,174,105,105,105,27, + 199,117,229,217,144,52,217,177,177,242,130,130,63,46,235,174, + 105,105,174,229,144,117,199,52,199,144,177,217,177,177,78,183, + 0,0,0,0,0,0,0,0,115,115,15,152,152,89,216,213, + 152,0,152,152,253,0,0,0,152,0,0,115,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,177,159, + 183,238,117,212,146,146,212,146,128,72,124,124,212,146,146,146, + 70,49,231,13,146,13,146,37,128,142,146,146,13,37,37,37, + 128,253,231,37,37,49,37,49,174,96,13,49,37,49,231,13, + 199,84,92,120,68,120,179,13,174,85,183,67,41,67,41,148, + 158,236,160,88,8,8,152,8,231,72,146,49,183,183,70,199, + 85,0,0,26,216,89,89,70,152,0,0,0,0,152,152,0, + 0,0,0,0,0,0,0,0,0,0,89,152,152,0,0,0, + 0,253,0,0,0,0,0,235,235,253,0,0,0,0,245,96, + 253,133,49,63,49,152,115,197,115,172,89,49,49,115,49,172, + 253,198,198,198,202,152,135,0,0,0,0,0,216,84,245,245, + 245,245,152,245,151,0,0,245,245,115,112,0,245,0,245,0, + 216,135,0,0,0,245,245,15,44,0,0,0,0,0,152,242, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,152,0,245,0,0,0,152,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,245,0,245,217,158, + 157,72,46,212,92,92,92,92,128,89,52,146,13,124,146,146, + 231,112,32,59,146,212,212,13,174,96,70,13,146,236,37,37, + 174,96,141,37,37,37,13,37,117,96,117,37,37,13,231,37, + 174,151,92,59,247,8,37,49,117,85,183,199,70,72,153,218, + 199,236,110,111,49,37,238,72,70,72,152,152,238,0,216,213, + 216,0,152,89,216,216,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,89,0,152,65,0,0,0,0,0, + 0,0,152,152,152,89,152,0,245,89,0,0,0,0,0,152, + 0,96,37,37,89,152,72,235,115,96,89,72,115,72,115,96, + 245,198,178,198,253,96,129,0,0,0,0,0,202,151,0,245, + 245,0,245,235,133,245,245,0,0,85,190,0,0,245,0,0, + 202,151,0,0,245,0,245,46,151,0,245,245,245,0,112,242, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,245,0,245,0,245,144,248, + 157,72,236,146,231,146,92,212,70,72,13,212,146,146,231,92, + 26,96,128,212,146,212,212,212,70,142,70,212,146,231,146,231, + 70,72,117,212,71,13,231,146,117,72,117,13,92,146,231,146, + 117,84,231,13,26,13,117,231,117,85,117,117,199,117,70,199, + 117,238,128,128,70,70,231,46,216,0,0,0,0,152,0,0, + 0,0,152,152,152,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,216,0,152,0,0,245,0,0,0, + 0,0,0,152,152,89,152,0,0,0,0,0,0,0,0,152, + 0,245,152,115,89,115,89,96,115,72,115,72,89,89,253,96, + 202,198,198,142,235,135,240,0,245,245,245,0,85,151,245,245, + 0,245,245,46,133,245,245,245,245,129,135,245,245,245,245,0, + 85,129,245,0,245,245,245,26,133,245,245,245,245,115,26,29, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,245,0,0,0,144,248, + 183,96,236,212,212,92,92,146,174,238,26,59,212,212,212,59, + 117,72,231,212,212,146,146,146,174,142,231,146,13,49,37,37, + 174,72,243,209,74,49,37,117,117,213,13,236,231,46,46,37, + 117,84,63,89,72,238,72,89,117,238,26,49,72,238,236,236, + 26,238,117,236,49,49,89,89,89,152,89,0,0,0,152,216, + 152,152,0,152,152,0,152,0,0,0,0,0,0,0,0,0, + 0,0,0,0,152,72,152,0,0,0,0,0,0,0,0,0, + 0,0,0,152,152,216,49,152,0,0,0,0,0,0,0,85, + 115,245,245,152,152,152,152,63,202,96,152,115,89,115,89,142, + 115,113,198,202,235,129,129,245,245,245,0,0,44,151,245,245, + 245,0,15,193,133,0,245,245,0,135,129,0,0,245,0,0, + 84,151,245,245,245,245,15,193,193,0,245,245,245,253,26,130, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,229,22, + 157,89,72,146,231,231,212,231,231,72,49,146,231,231,13,146, + 46,89,128,32,231,146,128,231,46,72,46,231,117,13,13,13, + 117,72,52,186,243,141,13,46,46,253,46,37,13,117,46,46, + 46,238,235,236,49,236,236,236,26,72,26,238,236,49,236,238, + 236,216,236,236,46,46,236,46,46,216,152,0,216,216,152,72, + 238,72,216,216,72,152,152,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,152,0,152,152,0,0,0,0,0,0,0,0,0,0,235, + 202,253,0,152,152,72,89,72,115,96,152,152,89,89,115,142, + 115,198,105,202,44,135,135,0,0,245,245,245,44,129,245,245, + 245,245,253,242,133,245,245,245,245,190,190,0,0,245,245,245, + 44,151,245,245,245,245,115,242,133,245,245,245,15,202,117,29, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,216,89, + 152,216,0,216,0,152,216,89,0,0,216,216,216,72,216,0, + 0,216,152,89,152,89,89,89,216,0,216,152,89,216,216,216, + 253,245,72,115,238,89,253,216,0,0,245,152,216,152,89,0, + 0,152,152,115,89,89,152,245,152,216,238,216,0,216,0,152, + 0,216,152,0,0,0,0,216,216,0,152,152,216,152,0,236, + 89,89,89,72,152,152,152,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,245,245, + 0,0,245,0,0,0,0,245,245,245,0,152,152,245,0,0, + 245,202,112,245,133,129,129,245,0,0,245,0,85,151,245,245, + 245,245,245,242,133,245,245,245,245,85,129,245,0,0,245,0, + 44,151,245,245,245,245,245,242,133,245,245,245,0,202,26,130, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,216,52, + 128,231,231,231,174,146,174,146,174,128,128,52,52,52,52,52, + 52,52,177,177,177,124,177,177,200,200,157,124,177,177,157,177, + 52,52,124,177,177,200,177,157,200,157,157,200,183,177,52,177, + 200,177,200,157,157,157,200,177,128,26,235,117,26,238,89,70, + 117,70,52,52,52,199,52,52,128,46,216,0,152,0,0,0, + 152,152,0,152,89,89,152,0,0,0,0,0,0,0,0,89, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96, + 0,152,152,72,245,216,0,0,63,0,0,0,0,152,152,141, + 117,117,26,46,46,46,235,46,235,46,63,63,49,49,89,72, + 72,49,72,0,44,135,240,245,0,0,245,245,44,151,245,15, + 245,245,15,242,80,245,245,245,15,240,190,0,0,0,245,0, + 85,137,245,245,245,245,245,242,137,245,245,245,245,202,26,29, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,186, + 131,248,131,248,22,22,157,183,157,157,157,157,157,176,157,22, + 157,248,22,22,22,78,78,78,176,176,22,22,22,157,22,22, + 131,22,131,183,22,22,22,22,22,22,248,22,248,248,248,176, + 22,176,183,22,22,22,22,157,70,117,217,144,117,72,26,26, + 105,144,144,78,176,157,183,176,174,85,238,72,152,0,152,0, + 0,152,0,0,152,216,238,63,0,0,0,0,0,0,0,0, + 0,0,142,142,0,0,0,0,0,0,0,0,0,0,84,72, + 152,0,0,44,242,144,105,105,229,0,0,0,0,0,216,133, + 105,47,177,177,144,144,229,144,229,144,144,144,229,105,229,229, + 229,188,144,245,133,129,129,0,0,0,245,0,44,129,245,245, + 245,245,245,117,133,245,245,245,0,129,129,245,0,0,245,245, + 44,129,15,245,245,245,15,117,80,245,245,245,245,202,117,29, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,238,17, + 54,176,176,248,176,248,176,131,176,157,131,131,157,176,78,78, + 78,78,78,177,144,144,229,144,144,229,105,130,229,229,78,78, + 176,176,157,78,229,144,78,177,78,78,78,177,177,177,177,144, + 52,78,78,177,78,176,176,47,217,177,78,229,26,216,152,216, + 96,238,235,128,144,177,177,174,26,236,216,0,89,89,152,0, + 0,0,89,216,96,89,216,0,0,0,0,0,0,0,0,0, + 115,238,216,0,0,0,0,0,0,0,0,0,0,152,0,245, + 253,193,27,176,157,176,22,229,253,0,0,245,0,216,216,235, + 63,105,47,176,131,131,131,131,176,176,131,95,95,176,95,95, + 95,95,176,245,133,85,190,0,0,0,0,0,96,190,245,245, + 245,245,245,242,137,245,245,245,245,85,190,0,0,0,0,0, + 96,190,245,245,245,245,245,242,151,245,245,245,245,202,26,29, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,152,0,0, + 72,174,253,0,0,170,89,0,235,235,0,245,235,152,245,0, + 96,235,142,0,152,72,72,89,49,238,63,37,235,63,236,72, + 46,29,112,245,72,152,245,0,0,0,0,245,245,0,26,245, + 229,44,245,0,70,238,199,183,253,0,0,0,0,0,0,0, + 152,115,245,245,245,202,245,0,152,152,0,0,0,0,0,0, + 152,152,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,245,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 245,0,152,115,245,115,152,0,0,0,0,216,0,0,0,236, + 216,0,202,89,115,115,115,115,80,84,142,49,108,29,115,72, + 58,105,229,108,193,178,178,79,188,188,47,187,198,79,47,47, + 47,47,178,29,188,176,176,78,78,178,178,79,188,188,47,187, + 198,79,47,47,47,47,178,29,188,176,176,78,78,47,133,176, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 135,144,135,0,0,229,49,245,44,197,0,0,193,115,0,0, + 197,44,135,216,72,26,117,231,70,174,70,174,70,174,70,70, + 193,105,135,216,235,216,130,0,152,0,152,152,0,0,117,0, + 78,130,253,0,0,85,85,216,213,238,216,0,0,216,216,0, + 0,0,0,0,0,238,0,0,0,0,0,0,0,0,0,216, + 152,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,245,0,0,0,0,0,0,0,0,0,152,235,72,152,89, + 96,0,245,152,216,89,84,63,84,0,245,152,240,238,115,197, + 142,133,133,190,58,205,29,193,193,133,242,44,96,130,29,242, + 242,130,26,84,198,174,105,105,105,205,29,193,193,133,242,44, + 96,130,242,29,242,130,193,63,198,174,105,105,105,130,63,144, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 242,144,151,0,0,78,96,0,174,26,0,0,170,89,0,0, + 26,151,142,216,96,117,242,174,174,128,229,229,174,174,174,174, + 193,105,135,253,26,152,216,152,89,89,89,0,0,0,70,152, + 78,130,115,0,0,85,85,0,216,216,216,0,0,216,0,0, + 0,0,0,0,0,238,0,0,0,0,0,0,216,152,152,152, + 152,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 245,202,202,0,0,0,0,0,0,245,235,216,142,26,238,133, + 96,0,0,0,115,253,216,26,205,152,0,115,85,172,72,130, + 202,133,29,85,133,242,29,130,130,242,151,151,235,198,27,105, + 130,133,28,242,229,144,217,144,130,29,29,130,130,242,151,151, + 235,198,27,174,130,133,112,242,229,144,144,144,130,193,242,144, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,152,0,0,0,0,0, + 174,177,137,245,0,183,49,245,174,174,245,0,229,96,0,0, + 193,44,58,96,44,242,130,174,27,199,144,177,144,144,177,177, + 29,174,190,84,242,216,0,0,0,0,152,0,245,245,117,0, + 157,130,115,0,0,85,85,216,213,213,0,216,0,0,0,238, + 85,152,152,0,245,0,0,152,0,152,216,89,89,152,152,89, + 152,152,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,245,202,142,133,0,0,0,142,198,193,193,63,170, + 0,0,0,0,0,0,0,89,0,0,245,115,0,202,49,170, + 196,0,245,245,44,129,84,152,202,202,142,96,115,85,0,0, + 0,245,245,242,137,245,115,0,0,129,84,152,202,202,142,96, + 115,190,0,0,0,245,245,242,151,0,152,0,245,216,96,29, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,152,0,0,0,0,0,0,0, + 174,78,133,0,0,22,26,245,174,174,0,0,144,63,245,0, + 197,141,112,172,193,174,105,105,229,144,78,78,78,78,144,177, + 130,229,135,151,130,142,0,0,0,0,0,0,0,0,117,245, + 157,130,202,0,0,85,238,216,216,89,0,245,216,0,216,0, + 152,216,0,0,0,0,0,0,0,0,152,216,216,0,0,216, + 236,89,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 245,0,245,216,198,238,142,115,245,216,205,198,105,105,235,242, + 0,0,0,0,245,245,245,245,0,0,115,245,245,96,129,27, + 196,0,0,245,202,29,29,96,96,235,63,142,96,80,0,0, + 0,0,0,130,151,0,0,0,0,29,29,96,96,235,84,72, + 112,133,0,0,0,0,245,242,151,0,0,0,0,0,26,133, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 174,157,29,115,0,22,26,0,174,174,0,0,144,49,245,0, + 242,117,142,84,29,29,27,27,27,188,78,78,177,78,78,177, + 105,229,85,172,130,253,96,117,242,26,117,242,27,70,130,26, + 157,242,202,245,238,133,26,238,216,85,235,89,216,213,216,0, + 0,0,0,0,0,0,0,0,0,152,152,152,89,89,216,152, + 238,0,0,0,0,0,0,0,0,0,0,0,0,0,0,216, + 253,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 245,245,80,151,133,0,240,0,29,44,188,21,198,193,96,115, + 0,0,0,245,133,29,29,245,0,0,115,245,129,96,197,27, + 58,0,0,245,15,133,29,0,0,0,0,0,0,133,245,0, + 0,28,245,117,130,245,245,245,202,29,133,245,0,0,0,0, + 245,133,245,0,0,28,245,242,130,245,245,245,202,96,26,133, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 242,176,178,245,0,22,117,0,170,128,0,0,177,235,15,0, + 174,174,44,206,133,105,105,27,144,47,54,78,47,47,47,78, + 199,229,135,151,130,96,216,238,85,85,85,85,85,85,117,238, + 22,29,142,216,0,85,117,236,85,70,235,85,89,89,0,0, + 46,0,0,0,0,0,0,0,89,89,216,152,216,89,72,72, + 152,0,0,0,0,0,0,0,0,0,0,0,0,216,238,216, + 0,0,0,0,0,0,0,0,0,0,0,0,0,245,0,0, + 0,0,154,198,105,130,79,135,130,26,235,115,152,0,0,0, + 0,0,245,245,151,133,198,29,245,0,245,245,240,96,193,229, + 240,0,245,115,15,133,137,0,0,0,0,0,15,133,0,0, + 0,15,15,242,130,245,0,245,202,137,133,0,0,0,0,0, + 15,133,245,0,0,202,245,130,130,245,0,0,202,44,44,193, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,245,0,0,0,0,0,0,0,0,245, + 63,144,178,244,28,22,141,0,130,128,245,0,229,63,245,0, + 229,229,44,151,29,130,105,178,144,144,176,78,78,78,47,78, + 177,174,240,151,198,85,152,0,152,0,216,216,216,216,26,152, + 248,26,202,0,0,85,117,216,117,27,213,213,0,216,216,213, + 117,216,0,0,0,0,0,0,0,152,0,89,216,0,0,216, + 152,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,245,0, + 0,0,137,130,205,44,133,44,202,245,0,0,152,142,0,0, + 0,245,202,0,129,133,198,105,191,245,245,253,190,112,193,229, + 244,245,245,15,15,133,137,0,0,0,0,0,245,113,240,240, + 240,191,15,130,79,133,115,15,205,80,151,0,0,0,0,0, + 245,113,240,240,240,129,245,242,79,133,115,15,205,235,44,44, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 253,174,125,202,0,22,117,0,174,174,0,0,144,63,245,0, + 128,144,206,151,198,27,178,188,79,47,78,176,86,78,177,177, + 52,27,96,80,105,96,216,0,0,152,245,0,0,0,26,216, + 111,193,142,253,115,238,26,216,85,85,213,216,216,216,238,96, + 235,96,245,245,245,0,216,245,0,0,89,46,89,152,238,152, + 0,0,0,0,0,0,0,0,0,152,152,152,0,0,0,0, + 0,0,0,253,0,0,0,0,0,0,0,0,0,0,0,245, + 0,0,245,0,0,0,115,202,245,253,115,245,245,245,0,152, + 0,0,191,151,142,96,245,245,245,0,253,115,0,58,29,105, + 151,0,0,15,245,137,151,0,142,89,96,0,245,133,216,0, + 216,245,245,26,133,72,216,152,253,151,151,0,142,89,96,0, + 245,133,216,245,245,245,15,117,133,72,253,152,115,142,235,151, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 89,174,125,142,0,22,26,245,130,229,0,0,144,84,245,245, + 170,144,151,151,198,27,188,229,105,229,176,188,176,86,47,47, + 177,174,96,133,198,112,0,0,133,245,245,245,44,253,26,89, + 248,193,196,29,29,85,26,85,213,238,238,238,0,0,0,0, + 216,238,0,0,238,245,0,0,0,216,85,133,235,72,0,0, + 0,0,0,0,0,0,0,0,0,0,152,0,0,0,0,216, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,245,0,0,202,245,190,129,238,135,15,0,0,245,152, + 0,245,202,21,187,130,125,125,0,0,202,202,0,58,198,229, + 190,0,0,15,245,137,151,0,216,152,0,0,245,129,0,245, + 0,0,245,46,142,245,245,115,152,137,151,0,216,152,0,0, + 245,129,0,0,0,0,245,235,142,245,245,245,115,253,85,44, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 245,242,178,202,0,157,231,0,174,229,0,0,144,235,15,245, + 242,229,151,29,29,21,188,188,188,229,144,188,108,78,47,78, + 52,105,240,29,178,72,0,245,130,115,245,245,130,89,235,96, + 111,193,142,130,29,84,235,133,96,238,238,0,0,0,0,0, + 216,245,0,245,202,0,133,115,142,240,240,130,133,0,216,0, + 0,0,0,0,0,0,0,0,0,0,152,152,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,245, + 0,245,191,245,0,245,245,0,115,245,245,253,0,0,245,245, + 196,245,28,113,198,79,21,178,0,0,115,142,0,0,198,170, + 135,0,115,245,245,151,129,0,0,0,0,0,245,151,245,0, + 245,0,245,0,245,0,0,0,0,151,129,0,0,0,0,0, + 245,151,0,245,245,0,245,0,245,0,0,0,0,0,0,245, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 245,170,178,202,0,183,193,245,174,174,0,0,229,63,245,0, + 174,177,151,29,198,178,188,188,86,86,176,131,86,178,78,176, + 157,144,96,113,21,196,245,0,245,245,245,245,245,245,235,152, + 111,130,244,29,29,84,235,152,152,216,216,0,0,0,0,0, + 0,0,0,0,0,245,47,79,96,96,112,105,238,152,0,152, + 152,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 135,202,245,0,0,0,0,0,0,0,0,0,0,0,245,245, + 245,191,154,21,178,178,178,178,15,0,15,142,0,245,178,105, + 190,0,196,245,245,115,115,245,245,0,0,245,245,202,15,245, + 245,245,245,0,0,0,0,0,0,115,115,245,245,0,0,245, + 245,202,245,245,245,245,0,0,0,0,0,0,0,0,0,216, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 245,174,105,196,142,157,117,245,130,128,152,142,235,96,245,115, + 229,177,197,29,198,178,188,188,47,86,54,188,176,176,176,176, + 177,144,172,113,178,202,245,202,245,0,0,115,245,152,235,112, + 243,242,84,130,154,112,235,0,85,216,0,0,0,0,0,0, + 0,0,0,0,0,0,213,213,0,0,0,216,152,152,0,0, + 0,0,0,0,0,0,0,0,152,0,0,0,0,0,0,0, + 0,26,0,0,152,0,0,0,0,0,0,0,0,0,0,0, + 142,245,15,245,0,0,0,0,0,0,0,0,0,0,0,235, + 142,115,29,178,187,178,69,188,245,0,202,196,245,245,105,27, + 151,15,244,115,244,190,240,28,244,244,203,244,58,190,244,191, + 244,244,244,244,244,244,196,28,115,190,240,28,244,244,203,244, + 58,40,244,191,244,244,58,244,244,244,196,28,115,115,115,196, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 142,229,125,135,172,157,46,245,44,84,245,115,115,115,15,245, + 174,144,197,137,29,198,105,178,188,47,47,105,176,54,176,78, + 177,144,172,29,187,142,202,85,245,245,0,245,152,89,89,202, + 174,206,72,58,29,142,235,0,238,238,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,152,0,0,0,216,0,0,0,0,0, + 0,152,0,0,0,0,0,0,0,0,0,0,0,15,245,0, + 0,253,245,245,0,0,0,0,0,0,0,0,0,0,245,245, + 202,245,245,44,105,187,105,29,15,0,202,244,115,15,105,105, + 151,15,244,28,28,203,58,203,28,196,28,240,244,244,244,28, + 244,244,244,28,244,244,244,240,202,203,58,203,28,196,28,240, + 28,244,244,28,28,28,244,28,244,244,244,240,28,112,202,129, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 238,174,105,235,242,63,72,115,72,72,142,89,253,245,245,0, + 242,177,151,244,40,29,198,198,229,86,78,86,86,47,178,144, + 157,177,151,133,198,115,115,96,142,253,202,89,152,130,217,229, + 157,217,240,85,108,135,44,238,202,216,216,216,216,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,152,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,29,193,235, + 245,115,245,0,0,0,0,0,0,0,0,0,245,0,0,0, + 96,28,115,15,29,198,29,151,245,0,245,202,173,15,105,198, + 151,112,191,173,115,115,15,202,244,129,190,203,28,28,28,244, + 28,240,191,190,191,191,190,190,190,115,15,202,244,129,190,203, + 244,28,28,244,240,240,191,190,191,191,190,190,190,191,190,190, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 89,152,0,245,235,135,235,96,202,115,202,245,245,245,245,152, + 49,235,115,0,152,115,115,202,196,240,135,84,63,206,142,115, + 46,63,115,245,202,245,245,216,152,253,253,152,152,27,159,176, + 127,131,245,152,245,245,202,96,89,238,216,216,216,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,152,0,0,152,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,115,152,245, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,115, + 0,202,244,202,135,135,84,135,0,245,245,15,15,15,115,49, + 244,28,191,28,191,9,173,191,173,173,203,244,202,196,240,220, + 33,129,9,190,190,40,9,40,9,9,173,191,173,173,28,28, + 202,196,240,9,33,129,40,190,190,40,9,190,9,191,40,129, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,152, + 96,177,177,157,70,177,177,177,52,157,174,52,52,52,229,52, + 242,52,177,52,128,128,128,174,229,128,128,128,128,174,174,117, + 117,174,242,26,174,117,174,242,242,242,229,242,236,26,117,193, + 193,193,72,96,193,26,238,238,89,152,89,238,142,96,89,216, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,152,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,245,0,0,245, + 245,245,245,245,245,115,28,115,115,28,115,15,15,15,245,202, + 245,15,28,191,28,28,203,15,28,112,28,191,191,28,202,115, + 142,58,129,137,9,9,137,220,137,28,203,15,28,112,203,191, + 191,28,202,89,58,58,191,137,9,9,137,80,40,137,220,80 + }; + +static const HdlInfo hdl_large = +{ + 288, 216, + 98, 35, + 8, 14, + 256, 8, 255, (char *) hdl_large_colors, + hdl_large_on, hdl_large_off +}; diff --git a/blinkentools-2.9/src/hdl-medium.h b/blinkentools-2.9/src/hdl-medium.h new file mode 100644 index 0000000..4814eed --- /dev/null +++ b/blinkentools-2.9/src/hdl-medium.h @@ -0,0 +1,2217 @@ +#include "hdl.h" + +static char hdl_medium_colors[256][3] = { + { 2, 2, 2}, + {254,254,254}, + {102,102,169}, + { 62, 74,159}, + { 30, 42,146}, + { 31, 42,141}, + {110, 46, 14}, + { 68, 32, 24}, + { 30, 38,130}, + {178,158,110}, + { 6, 14, 54}, + {125,103,103}, + { 49, 9, 8}, + { 2, 2, 18}, + { 37, 17, 21}, + { 89, 74, 69}, + {150,132,126}, + { 49, 62,154}, + { 56, 43, 56}, + { 13, 24, 15}, + {115,108,182}, + { 6, 6, 30}, + {114,107,178}, + { 78, 87,163}, + { 45, 32, 60}, + {178,154,118}, + { 6, 14, 42}, + { 45, 58,152}, + { 36, 35, 63}, + {158,146,138}, + { 98, 98,170}, + { 23, 10, 18}, + { 83, 67, 70}, + { 36, 29, 61}, + { 47, 49,153}, + {114,106,174}, + { 14, 14, 86}, + { 96, 86,157}, + { 99, 77, 96}, + { 75, 67,149}, + { 25, 10, 9}, + { 75, 59, 94}, + { 18, 10, 21}, + { 27, 14, 36}, + { 74, 35, 20}, + {154,114, 90}, + { 22, 16, 62}, + { 40, 54,149}, + { 46, 32, 25}, + { 6, 10, 50}, + { 56, 62,157}, + { 15, 15, 9}, + { 81, 74,135}, + {146,126, 98}, + {130, 94, 50}, + { 22, 14, 34}, + { 6, 10, 34}, + { 73, 86,165}, + { 41, 54,140}, + { 14, 9, 14}, + {106, 82,102}, + { 15, 2, 6}, + { 34, 42,114}, + { 39, 27, 31}, + { 13, 15, 77}, + { 94, 81,155}, + { 42, 46,146}, + { 33, 46,142}, + { 58, 70,157}, + { 19, 10, 33}, + { 6, 6, 16}, + { 18, 14, 34}, + { 74, 74,163}, + {154,134,106}, + { 66, 42, 26}, + { 16, 58, 14}, + {166,130, 98}, + { 40, 50,134}, + { 98, 94,146}, + { 21, 18, 38}, + { 10, 6, 7}, + {162,142,134}, + {162,138,110}, + { 15, 13, 56}, + { 36, 36, 87}, + { 37, 50,146}, + {146,138,190}, + { 82, 60, 65}, + { 42, 46,141}, + { 67, 78,160}, + { 30, 42,132}, + {148,143,186}, + { 62, 62,158}, + {110, 90, 86}, + { 88, 80,140}, + { 83, 40, 21}, + {122, 94, 82}, + { 6, 6, 34}, + { 49, 43, 84}, + { 6, 14, 50}, + { 14, 10, 33}, + { 55, 58,149}, + { 59, 47, 39}, + {114, 98, 86}, + { 38, 42,149}, + { 18, 66, 10}, + { 36, 20, 37}, + {110,102,169}, + { 58, 31, 20}, + {104, 94,160}, + {102, 89,169}, + {102, 58, 54}, + { 82, 69,113}, + { 49, 17, 19}, + { 6, 6, 24}, + { 14, 18, 87}, + { 6, 10, 6}, + { 28, 26, 45}, + { 6, 2, 5}, + { 32, 37,108}, + { 50, 54,151}, + { 22, 22, 82}, + { 97, 90,154}, + { 78, 40, 47}, + {160,154,182}, + {150, 82, 34}, + { 25, 20, 50}, + { 78, 70,142}, + {114,102,170}, + { 6, 10, 39}, + { 98, 82,168}, + { 10, 10, 65}, + { 34, 28, 46}, + {121,117,178}, + { 67, 51, 83}, + { 58, 42, 45}, + {110, 94,171}, + {110, 98,169}, + {106, 90,172}, + { 38, 46,139}, + { 89, 77,157}, + { 21, 28,103}, + { 27, 18, 35}, + { 14, 14, 32}, + { 42, 46,134}, + { 90, 42, 50}, + { 28, 24, 60}, + {127,123,182}, + {110,110,177}, + { 38, 42,141}, + { 90, 86,155}, + {141,139,182}, + {174,162,154}, + { 34, 42,133}, + {162,134,102}, + { 6, 6, 7}, + { 69, 61, 61}, + { 14, 14, 66}, + {103, 98,170}, + { 56, 66,156}, + { 59, 30, 37}, + { 50, 26, 39}, + { 79, 77,156}, + { 52, 58, 90}, + {130,126,170}, + { 10, 10, 24}, + { 98, 34, 18}, + { 66, 62,138}, + { 27, 19, 23}, + { 49, 56,114}, + { 34, 30,102}, + { 60, 45, 72}, + { 94, 90,170}, + { 82, 82,164}, + { 6, 6, 38}, + { 95, 86,162}, + {102, 94,168}, + { 74, 51, 57}, + { 49, 24, 23}, + { 66, 70,161}, + { 37, 46,134}, + { 28, 20, 46}, + { 70, 74,165}, + { 47, 33, 43}, + { 40, 34, 43}, + { 89, 82,168}, + { 69, 37, 45}, + {105,103,178}, + {110,106,175}, + { 55, 36, 59}, + { 86, 86,167}, + { 78, 54, 39}, + { 37, 22, 25}, + { 99, 51, 29}, + { 10, 14, 43}, + { 2, 2, 7}, + { 18, 14, 21}, + { 76, 60,132}, + { 90, 87,169}, + { 70, 82,162}, + { 58, 36, 42}, + { 14, 6, 21}, + { 94, 86,171}, + { 59, 26, 22}, + { 30, 27, 96}, + { 38, 50,139}, + { 34, 46,146}, + { 47, 50,163}, + { 52, 50, 90}, + { 28, 38,126}, + { 74, 82,159}, + { 51, 54,160}, + {106,106,173}, + {186,178,170}, + { 39, 13, 9}, + { 17, 18, 67}, + { 42, 46,154}, + { 64, 66,160}, + { 49, 38, 63}, + { 67, 45, 55}, + { 74, 38, 44}, + {106,102,170}, + { 28, 22, 37}, + { 69, 54, 62}, + { 14, 10, 22}, + {102, 54, 54}, + { 62, 70,158}, + {126, 70, 26}, + { 80, 78,166}, + { 90, 70, 98}, + { 62, 58,142}, + { 23, 14, 22}, + {196,188,198}, + { 10, 10, 9}, + { 84, 54, 60}, + { 94, 81,169}, + { 10, 6, 23}, + { 98, 86,170}, + { 10, 7, 16}, + { 15, 8, 9}, + { 14, 6, 30}, + { 55, 58,158}, + { 66, 74,159}, + { 18, 14, 44}, + { 97, 94,170}, + { 44, 48,113}, + { 40, 28, 42}, + { 88, 78,170}, + { 70, 70,161}, + { 38, 46,153}, + { 98, 90,170}, + { 30, 14, 18}, + { 43, 50,140}, + { 62, 54,134}, + {106, 94,170}, + {255,255,255} + }; +static char hdl_medium_on[] = { + 216,249,249,249,249,249,249,104,104,104,104,104,104,104,104,104, + 104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104, + 104,104,149,104,149,149,5,149,5,5,5,5,5,153,5,153, + 153,153,153,153,144,144,144,144,90,90,144,144,144,144,144,144, + 144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144, + 144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144, + 144,90,90,90,90,5,90,5,5,5,5,5,5,5,5,5, + 5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 216,104,104,104,104,104,104,249,249,249,249,104,104,104,104,104, + 104,104,104,104,104,104,104,104,104,104,104,104,104,104,149,104, + 149,149,104,149,5,104,149,149,149,149,149,149,149,5,149,5, + 5,5,5,5,144,144,144,144,144,144,90,144,144,144,144,144, + 144,144,144,144,144,144,144,144,144,144,144,180,180,180,180,180, + 180,180,180,180,180,144,144,144,144,144,180,180,180,90,90,144, + 144,8,8,90,90,5,153,90,67,67,67,67,5,5,5,5, + 5,4,4,67,5,5,4,5,5,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 207,216,216,216,216,249,249,249,104,104,249,249,249,249,249,249, + 249,216,216,216,216,66,216,66,216,66,66,66,66,249,139,249, + 249,139,104,104,149,149,104,149,149,149,139,149,149,5,149,153, + 180,180,180,149,153,153,153,5,153,144,144,153,90,90,90,90, + 90,144,144,144,144,144,144,144,144,144,90,144,180,180,180,180, + 144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144, + 90,5,90,5,90,5,67,5,67,67,67,67,67,67,67,67, + 67,67,4,67,67,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 207,207,207,207,249,216,216,216,216,216,216,216,216,216,216,216, + 216,249,249,216,216,216,216,104,249,249,249,249,249,216,66,66, + 66,104,139,66,139,139,139,149,104,139,104,139,149,149,149,104, + 149,149,149,153,144,180,149,180,144,180,180,144,144,144,144,144, + 144,90,144,144,144,144,144,144,144,144,144,144,144,144,144,144, + 144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,5, + 90,90,5,153,153,67,67,67,90,67,67,67,67,67,67,4, + 90,4,90,4,90,67,67,67,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 216,249,249,207,249,216,216,207,216,216,216,216,216,216,216,216, + 216,216,216,216,216,216,216,66,216,66,216,66,66,249,249,249, + 66,104,66,66,66,104,139,139,139,139,104,139,149,149,149,139, + 149,149,149,149,149,180,149,149,180,149,149,149,144,153,153,119, + 144,144,90,90,90,90,90,90,144,144,144,144,144,90,90,90, + 90,90,90,90,90,90,5,144,144,144,144,144,90,90,67,90, + 90,153,67,180,67,90,67,67,67,67,67,67,67,90,67,67, + 67,67,67,67,67,67,4,67,67,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 207,207,216,216,207,207,216,216,207,216,216,216,216,216,216,216, + 216,216,216,66,216,66,34,216,216,216,66,216,216,216,66,66, + 66,34,66,66,66,66,66,66,104,104,139,66,88,139,139,149, + 180,149,153,180,149,149,149,180,149,153,153,153,144,144,144,119, + 153,153,153,153,153,90,90,90,90,144,180,153,90,153,153,153, + 90,153,153,90,90,153,90,153,90,90,67,90,90,67,90,67, + 180,180,67,180,180,205,180,205,67,180,180,67,67,67,67,67, + 67,67,67,67,4,4,67,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 207,207,207,216,216,207,216,216,216,216,216,207,34,34,34,216, + 216,216,216,216,216,216,216,66,216,216,216,216,66,216,66,34, + 66,66,66,66,66,66,88,88,88,88,149,139,139,149,139,149, + 139,149,149,149,180,153,180,149,153,153,153,153,149,149,153,119, + 153,153,153,153,153,153,153,180,153,180,90,153,90,90,90,153, + 90,90,153,153,153,153,90,153,180,90,180,153,90,180,153,180, + 180,67,180,180,180,205,180,180,180,180,205,67,205,205,85,67, + 90,4,67,67,67,90,67,67,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 211,211,207,207,207,207,207,216,207,207,207,216,207,252,34,34, + 34,34,207,34,34,34,34,34,34,34,34,34,34,34,216,252, + 34,252,66,66,34,252,88,34,88,88,88,88,88,88,88,88, + 139,144,180,180,149,180,144,180,180,144,153,180,180,180,180,119, + 153,153,180,153,153,153,153,153,180,153,180,153,153,180,180,180, + 180,180,180,153,180,153,180,180,153,180,180,180,180,180,180,67, + 205,180,205,205,205,205,205,205,58,205,205,205,67,67,67,67, + 67,67,90,67,67,67,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 211,211,207,207,207,207,207,207,207,34,207,34,207,207,207,34, + 34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34, + 216,34,34,252,66,216,66,252,66,252,88,88,252,88,252,139, + 139,88,88,88,144,139,180,144,149,144,144,180,149,144,180,119, + 144,180,180,180,180,180,180,153,180,180,180,180,153,153,153,180, + 90,153,180,180,180,180,180,180,180,180,205,67,180,205,205,180, + 205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,85, + 67,67,67,67,67,90,67,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 241,211,211,207,207,207,211,207,34,211,120,34,34,34,120,211, + 120,211,120,211,34,34,207,34,34,34,120,207,34,120,34,34, + 120,120,120,34,34,34,252,34,252,34,252,252,88,252,88,88, + 88,88,88,88,88,180,88,180,180,180,180,144,144,139,144,119, + 180,180,144,144,144,144,144,77,180,144,144,180,180,180,77,180, + 180,77,180,180,205,180,180,205,180,180,180,205,205,180,180,205, + 205,205,205,216,205,205,205,205,205,205,205,205,85,180,67,205, + 67,67,67,67,67,67,4,67,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 241,241,241,211,211,207,211,211,207,207,120,211,120,207,34,211, + 34,207,34,120,120,120,120,120,120,34,120,211,120,120,120,34, + 34,34,120,120,120,34,252,34,252,34,252,252,88,252,252,252, + 88,252,252,252,88,252,252,252,252,88,88,77,88,252,252,119, + 88,77,77,180,180,77,144,144,180,180,144,144,77,180,180,77, + 180,77,77,180,77,205,180,205,77,77,205,205,205,205,180,205, + 205,205,58,58,58,58,58,58,85,205,205,205,205,85,67,205, + 205,67,67,67,67,67,90,67,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5, + 217,241,211,241,241,241,211,211,211,211,211,120,211,211,241,120, + 241,120,241,211,211,120,211,120,211,27,120,120,120,120,120,120, + 120,120,252,120,34,120,120,58,34,252,34,34,120,252,88,252, + 252,144,180,88,252,88,215,157,157,215,157,157,157,157,157,119, + 77,252,77,77,252,77,77,58,252,77,77,77,77,58,58,58, + 58,58,58,58,77,77,58,205,58,77,205,77,58,58,58,205, + 58,205,49,131,131,10,131,157,10,157,49,131,10,49,141,85, + 67,67,67,67,67,67,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 217,92,241,241,211,211,241,241,241,211,211,211,241,120,211,211, + 241,120,241,101,241,27,241,241,211,211,211,120,241,27,27,120, + 120,211,120,101,120,120,120,120,120,120,169,252,119,46,46,46, + 157,83,83,83,215,215,83,157,131,83,83,83,131,83,131,215, + 83,157,46,215,215,46,215,215,215,215,215,215,215,83,83,215, + 83,215,215,215,215,215,215,83,215,215,215,83,157,215,215,83, + 83,83,83,83,100,157,49,83,83,131,100,131,83,131,49,10, + 157,157,10,10,10,10,209,90,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5, + 92,50,241,241,241,241,211,241,241,241,211,241,120,241,241,27, + 241,241,27,241,211,211,211,120,101,241,241,241,211,211,211,241, + 27,101,120,120,120,120,120,120,120,120,120,120,170,64,215,157, + 83,157,10,215,157,131,157,46,157,157,36,100,49,100,46,131, + 157,83,215,157,157,10,83,83,131,100,83,131,157,157,215,131, + 215,157,157,157,83,131,157,215,157,83,157,215,83,49,157,131, + 131,83,157,64,157,131,157,157,131,157,157,131,131,83,157,64, + 157,64,64,64,36,10,141,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,90,4,5, + 217,217,241,92,241,241,241,241,241,241,241,241,241,241,241,241, + 241,241,241,241,241,241,241,241,241,241,27,241,241,241,101,241, + 241,101,101,101,101,101,230,120,120,120,120,101,121,131,145,111, + 225,174,145,111,225,174,145,111,225,174,145,111,225,174,145,111, + 225,174,145,111,225,174,145,111,225,174,145,111,225,174,145,111, + 225,174,145,111,225,174,145,111,225,174,145,111,225,174,145,111, + 225,174,145,111,225,174,145,111,225,174,145,111,225,174,145,111, + 225,174,145,111,225,174,141,67,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,67,67,67,67,4,5, + 248,92,92,241,92,50,241,241,241,50,50,50,241,241,241,241, + 241,241,241,50,50,50,50,241,241,241,241,92,241,92,241,101, + 241,241,241,101,101,101,101,101,230,101,101,120,141,174,45,82, + 76,174,45,82,76,174,45,82,76,174,45,82,76,174,45,82, + 76,174,45,82,76,174,45,82,76,174,45,82,76,174,45,82, + 76,174,45,82,76,174,45,82,76,174,45,82,76,174,45,82, + 76,174,45,82,76,174,45,82,76,174,45,82,76,174,45,82, + 76,174,45,82,76,174,141,90,67,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,90,67,67, + 179,179,217,50,92,92,50,50,92,241,50,50,50,92,50,50, + 92,50,92,50,92,50,50,92,92,92,241,92,241,92,92,50, + 50,50,50,101,241,101,101,101,101,101,101,101,170,131,53,81, + 73,13,53,81,73,13,53,81,73,13,53,81,73,13,53,81, + 73,13,53,81,73,13,53,81,73,13,53,81,73,13,53,81, + 73,13,53,81,73,13,53,81,73,13,53,81,73,13,53,81, + 73,13,53,81,73,13,53,81,73,13,53,81,73,13,53,81, + 73,13,53,81,73,97,141,67,4,67,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,67,4,90,4,5,5,5,5, + 182,217,217,217,92,92,92,217,50,217,92,92,92,217,92,92, + 50,217,50,92,50,217,92,92,92,217,92,217,92,50,217,92, + 92,92,92,92,92,92,50,92,101,50,101,101,204,174,154,213, + 25,97,154,213,25,97,154,213,25,97,154,213,25,97,154,213, + 25,97,154,213,25,97,154,213,25,97,154,213,25,97,154,213, + 25,97,154,213,25,97,154,213,25,97,154,213,25,97,154,213, + 25,97,154,213,25,97,154,213,25,97,154,213,25,97,154,213, + 25,97,154,213,25,97,141,4,67,67,4,4,4,4,4,4, + 4,206,4,4,4,4,4,67,4,67,67,67,67,5,5,67, + 72,179,217,179,217,217,92,217,217,217,217,217,217,217,217,217, + 217,50,217,217,217,50,217,159,217,50,217,50,217,92,92,92, + 217,92,217,92,92,167,92,217,92,167,92,50,204,49,21,21, + 97,97,97,21,97,97,97,21,97,97,97,21,97,97,97,21, + 97,97,97,21,97,97,97,21,97,97,97,21,97,97,97,21, + 97,97,97,21,97,97,97,21,97,97,97,21,97,97,97,21, + 97,97,97,21,97,97,97,21,97,97,97,21,97,97,97,21, + 97,97,97,114,21,97,141,67,67,67,67,67,4,67,4,206, + 4,4,206,4,5,5,5,4,5,4,5,4,67,67,5,67, + 182,248,248,217,179,217,217,217,217,217,217,217,217,217,217,217, + 217,217,217,50,217,217,217,217,217,217,217,217,217,39,217,217, + 217,217,39,217,217,217,217,167,92,217,50,167,119,174,97,21, + 97,174,97,97,97,174,97,97,97,174,97,97,97,174,97,97, + 97,174,97,97,97,174,97,97,97,174,97,97,97,174,97,97, + 97,174,97,97,97,174,97,97,97,174,97,97,97,174,97,97, + 97,174,97,97,97,174,97,97,97,174,97,97,97,174,97,97, + 97,97,97,97,97,97,141,67,67,67,4,4,67,4,67,4, + 67,67,4,67,4,67,5,67,67,67,67,67,4,5,67,5, + 72,182,182,248,248,248,248,217,179,179,179,248,248,248,248,179, + 248,179,248,179,179,248,248,217,248,248,179,179,179,248,179,179, + 179,179,179,39,179,179,179,217,217,39,92,92,170,129,13,13, + 13,114,13,13,13,114,13,13,13,114,13,13,13,114,13,13, + 13,114,13,13,13,114,13,13,13,114,13,13,13,114,13,13, + 13,114,13,13,13,114,13,13,13,114,13,13,13,114,13,13, + 13,114,13,13,13,114,13,13,13,114,13,13,13,114,13,13, + 13,114,13,13,13,114,141,67,67,67,67,67,67,67,67,4, + 4,67,4,67,5,67,5,5,5,4,4,67,67,4,206,67, + 228,247,248,248,182,248,248,72,248,248,248,248,179,179,179,248, + 248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248, + 248,248,248,248,248,179,39,248,217,179,167,217,170,174,145,111, + 225,174,145,111,225,174,145,111,225,174,145,111,225,174,145,111, + 225,174,145,111,225,174,145,111,225,174,145,111,225,174,145,111, + 225,174,145,111,225,174,145,111,225,174,145,111,225,174,145,111, + 225,174,145,111,225,174,145,111,225,174,145,111,225,174,145,111, + 225,174,145,111,225,174,141,67,67,67,67,67,67,67,67,67, + 67,4,67,5,67,5,67,67,67,67,67,67,67,85,67,67, + 72,228,182,72,182,72,248,248,248,248,182,248,72,248,248,248, + 248,248,248,248,72,248,72,248,248,248,248,248,182,72,52,242, + 72,242,52,179,127,242,179,127,179,226,248,167,84,174,45,82, + 76,13,45,82,76,13,45,82,76,13,45,82,76,13,45,82, + 76,13,45,82,76,13,45,82,76,13,45,82,76,13,45,82, + 76,13,45,82,76,13,45,82,76,13,45,82,76,13,45,82, + 76,13,45,82,76,13,45,82,76,13,45,82,76,13,45,82, + 76,13,45,82,76,174,141,67,47,67,67,67,67,67,67,206, + 67,4,67,5,67,67,67,67,206,67,67,85,67,67,67,67, + 185,72,247,72,72,72,72,72,72,72,248,72,182,72,72,72, + 72,72,72,72,248,72,72,72,72,72,72,72,72,72,182,52, + 72,72,72,72,242,248,52,242,248,52,242,242,204,174,53,81, + 73,174,53,81,73,174,53,81,73,174,53,81,73,174,53,81, + 73,174,53,81,73,174,53,81,73,174,53,81,73,174,53,81, + 73,174,53,81,73,174,53,81,73,174,53,81,73,174,53,81, + 73,174,53,81,73,174,53,81,73,174,53,81,73,174,53,81, + 73,174,53,81,73,97,141,67,67,67,67,67,67,67,85,67, + 206,67,67,67,206,67,67,206,67,67,67,67,67,85,67,85, + 185,72,72,72,72,72,72,72,72,72,72,72,228,228,182,72, + 72,72,72,228,228,72,228,72,162,72,162,72,72,72,72,72, + 72,72,72,52,162,182,72,162,242,72,127,242,84,97,154,213, + 25,97,154,213,25,97,154,213,25,97,154,213,25,97,154,213, + 25,97,154,213,25,97,154,213,25,97,154,213,25,97,154,213, + 25,97,154,213,25,97,154,213,25,97,154,213,25,97,154,213, + 25,97,154,213,25,97,154,213,25,97,154,213,25,97,154,213, + 25,13,154,213,25,97,141,47,85,67,85,67,85,67,67,67, + 85,67,206,5,5,4,5,67,206,85,67,67,67,67,67,85, + 247,247,72,247,72,247,72,72,72,228,228,72,72,72,228,228, + 228,228,228,72,72,162,72,228,72,228,72,72,72,228,162,162, + 162,72,228,162,72,162,162,72,52,72,72,52,170,97,97,13, + 97,97,174,13,97,97,174,13,97,97,174,13,97,97,174,13, + 97,97,174,13,97,97,174,13,97,97,174,13,97,97,174,13, + 97,97,174,13,97,97,174,13,97,97,174,13,97,97,174,13, + 97,97,174,13,97,97,174,13,97,97,174,13,97,97,174,13, + 174,174,174,13,21,21,141,67,47,67,67,67,67,67,85,67, + 67,206,67,67,206,67,206,67,67,67,67,67,67,67,85,67, + 173,247,72,247,182,247,228,247,182,182,228,228,228,72,72,72, + 72,72,228,228,228,228,162,228,228,228,162,228,162,228,162,228, + 228,162,228,228,162,162,162,162,72,72,72,162,33,174,129,97, + 97,97,129,97,97,97,129,97,97,97,129,97,97,97,129,97, + 97,97,129,97,97,97,129,97,97,97,129,97,97,97,129,97, + 97,97,129,97,97,97,129,97,97,97,129,97,97,97,129,97, + 97,97,129,97,97,97,129,97,97,97,129,97,97,174,129,97, + 97,174,129,97,174,174,141,205,85,47,47,67,67,67,85,67, + 67,139,85,85,205,85,206,85,67,85,67,67,47,67,67,85, + 185,247,247,72,247,72,182,247,228,247,72,228,228,228,228,247, + 228,228,228,228,228,228,228,162,228,162,173,228,228,228,173,162, + 173,228,162,173,173,173,173,173,94,173,162,162,84,97,13,13, + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, + 13,114,13,70,13,114,141,58,85,85,85,47,85,85,67,85, + 85,206,67,206,139,67,85,67,67,85,67,85,67,85,85,85, + 185,247,247,247,247,247,247,247,72,247,228,228,228,228,173,173, + 185,228,228,228,228,173,173,228,173,228,173,210,173,173,173,228, + 173,173,228,228,173,173,210,173,210,173,162,210,84,174,145,111, + 225,174,145,111,225,174,145,111,225,174,145,111,225,174,145,111, + 225,174,145,111,225,174,145,111,225,174,145,111,225,174,145,111, + 225,174,145,111,225,174,145,111,225,174,145,111,225,174,145,111, + 225,174,145,111,225,174,145,111,225,174,145,111,225,174,145,111, + 225,174,145,111,225,174,141,58,85,47,85,47,85,85,85,85, + 85,85,85,139,85,85,85,85,85,47,67,47,85,47,85,47, + 185,247,247,72,247,72,247,228,247,228,247,228,185,185,228,228, + 228,173,185,173,173,228,173,173,173,173,173,228,173,173,210,173, + 173,173,173,173,173,173,173,23,173,150,23,173,84,174,45,82, + 76,174,45,82,76,174,45,82,76,174,45,82,76,174,45,82, + 76,174,45,82,76,174,45,82,76,174,45,82,76,174,45,82, + 76,174,45,82,76,174,45,82,76,174,45,82,76,174,45,82, + 76,174,45,82,76,174,45,82,76,174,45,82,76,174,45,82, + 76,174,45,82,76,174,141,58,47,47,85,47,47,47,85,85, + 85,85,85,85,252,85,85,47,85,85,47,85,47,85,85,85, + 235,247,247,247,247,247,247,247,247,247,185,173,173,185,185,185, + 173,173,185,185,185,173,185,185,173,173,185,173,173,185,190,210, + 173,23,173,173,23,190,150,190,23,173,65,190,84,129,53,81, + 73,13,53,81,73,13,53,81,73,13,53,81,73,13,53,81, + 73,13,53,81,73,13,53,81,73,13,53,81,73,13,53,81, + 73,13,53,81,73,13,53,81,73,13,53,81,73,13,53,81, + 73,13,53,81,73,13,53,81,73,174,53,81,73,13,53,81, + 73,174,53,81,73,97,119,47,47,47,47,47,85,47,47,47, + 47,47,47,252,207,85,85,47,47,47,85,85,47,47,47,47, + 130,235,247,247,247,247,247,247,247,247,247,247,247,247,185,185, + 185,185,173,185,185,185,185,185,185,185,185,185,185,173,185,185, + 150,173,190,23,150,190,190,190,150,190,150,173,98,236,154,213, + 25,97,154,213,25,97,154,213,25,97,154,213,25,97,154,213, + 25,97,154,213,25,97,154,213,25,97,154,213,25,97,154,213, + 25,97,154,213,25,97,154,213,25,97,154,213,25,97,154,213, + 25,97,154,213,25,97,154,213,25,13,154,213,25,174,154,213, + 25,21,154,213,25,97,141,58,58,47,47,47,47,47,47,47, + 47,47,47,47,47,47,47,47,47,47,47,47,58,47,47,47, + 130,235,130,247,235,247,247,235,247,247,235,235,185,247,185,247, + 247,235,185,185,185,185,185,185,185,190,185,185,198,185,190,185, + 185,185,65,23,190,190,150,23,190,150,23,190,84,174,97,21, + 97,21,97,21,97,21,97,21,97,21,97,21,97,21,97,21, + 97,21,97,21,97,21,97,21,97,21,97,21,97,21,97,21, + 97,21,97,21,97,21,97,21,97,21,97,21,97,21,97,21, + 97,21,97,21,97,21,97,21,97,174,97,21,21,13,174,114, + 97,21,21,114,21,97,119,58,27,58,47,47,27,47,47,47, + 47,47,47,47,27,47,47,47,47,47,47,47,27,27,27,47, + 130,130,130,247,247,235,235,235,235,247,235,247,247,235,235,235, + 235,185,185,185,185,185,185,185,185,235,185,185,235,185,185,185, + 150,150,190,185,150,190,190,150,150,190,150,190,84,174,97,21, + 97,174,97,21,97,174,97,21,97,174,97,21,97,174,97,21, + 97,174,97,21,97,174,97,21,97,174,97,21,97,174,97,21, + 97,174,97,21,97,174,97,21,97,174,97,21,97,174,97,21, + 97,174,97,21,97,174,97,21,97,174,174,97,174,174,165,97, + 97,174,56,97,97,97,141,58,27,27,27,27,47,27,27,27, + 47,27,27,27,47,27,47,27,47,27,27,27,47,47,47,27, + 130,247,247,235,235,247,235,247,235,247,130,130,247,235,235,235, + 235,235,175,235,235,235,202,202,198,235,175,198,235,235,150,185, + 185,175,150,185,185,175,185,198,150,150,150,172,84,236,13,13, + 13,114,13,13,13,114,13,13,13,114,13,13,13,114,13,13, + 13,114,13,13,13,114,13,13,13,114,13,13,13,114,13,13, + 13,114,13,13,13,114,13,13,13,114,13,13,13,114,13,13, + 13,114,13,13,13,114,13,70,13,114,13,13,114,13,13,13, + 13,13,13,13,13,114,119,17,58,17,27,27,47,27,47,27, + 27,47,211,27,27,27,47,27,27,27,27,27,27,27,27,27, + 237,237,235,235,247,235,235,247,235,235,247,235,235,235,235,202, + 130,237,235,202,202,175,235,235,235,202,235,235,202,175,235,237, + 237,202,237,237,237,175,237,175,250,237,122,250,98,174,145,111, + 225,174,145,111,225,174,145,111,225,174,145,111,225,174,145,111, + 225,174,145,111,225,174,145,111,225,174,145,111,225,174,145,111, + 225,174,145,111,225,174,145,111,225,174,145,111,225,174,145,111, + 225,174,145,111,225,174,145,111,225,174,145,111,225,174,145,111, + 225,174,145,111,225,174,119,17,27,27,27,27,17,27,17,27, + 27,17,27,27,27,27,27,27,27,27,27,27,27,27,27,27, + 202,202,235,235,130,130,130,130,130,130,130,237,130,202,130,235, + 235,237,130,130,237,237,237,237,237,237,237,237,202,237,175,237, + 237,237,37,237,237,250,237,237,250,237,37,250,98,174,45,82, + 76,174,45,82,76,174,45,82,76,174,45,82,76,174,45,82, + 76,174,45,82,76,174,45,82,76,174,45,82,76,174,45,82, + 76,174,45,82,76,174,45,82,76,174,45,82,76,174,45,82, + 76,174,45,82,76,174,45,82,76,174,45,82,76,174,45,82, + 76,13,45,82,76,174,119,17,17,17,17,27,17,27,17,17, + 27,17,27,27,27,17,17,17,17,17,17,17,17,17,17,17, + 202,202,202,202,185,185,198,235,185,185,235,235,235,130,235,237, + 237,235,130,237,130,237,237,237,235,202,175,235,130,202,130,175, + 130,237,237,110,237,237,110,110,110,110,110,110,84,97,53,81, + 73,13,53,81,73,13,53,81,73,13,53,81,73,13,53,81, + 73,13,53,81,73,13,53,81,73,13,53,81,73,13,53,81, + 73,13,53,81,73,13,53,81,73,13,53,81,73,13,53,81, + 73,13,53,81,73,13,53,81,73,13,53,81,73,13,53,81, + 73,174,53,81,73,97,62,68,17,17,17,17,27,17,17,17, + 17,17,17,17,17,27,17,17,27,17,27,17,17,27,17,17, + 202,202,202,202,202,185,202,198,202,198,202,202,198,202,198,235, + 202,202,175,202,175,202,175,250,237,237,250,237,237,237,237,237, + 237,237,237,110,138,138,138,109,109,176,109,176,98,236,154,213, + 25,174,154,213,25,174,154,213,25,174,154,213,25,174,154,213, + 25,174,154,213,25,174,154,213,25,174,154,213,25,174,154,213, + 25,174,154,213,25,174,154,213,25,174,154,213,25,174,154,213, + 25,174,154,213,25,97,154,213,25,174,154,213,25,13,154,213, + 25,13,154,213,25,97,119,68,17,17,17,17,17,17,17,17, + 17,17,17,17,17,27,27,17,17,17,17,17,17,17,17,17, + 244,202,198,198,190,202,198,198,198,198,198,202,202,198,202,198, + 202,202,202,202,202,202,237,202,237,237,237,250,237,250,237,110, + 237,110,110,110,138,138,254,110,254,254,110,254,218,21,174,13, + 97,97,174,13,97,97,174,13,97,97,174,13,97,97,174,13, + 97,97,174,13,97,97,174,13,97,97,174,13,97,97,174,13, + 97,97,174,13,97,97,174,13,97,97,174,13,97,97,174,13, + 97,97,174,13,97,21,174,13,21,97,21,97,174,97,97,97, + 97,97,174,13,97,21,62,17,68,17,17,17,17,17,17,17, + 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17, + 172,202,202,198,198,190,202,202,198,185,198,202,202,202,202,172, + 172,202,172,202,202,202,237,202,202,237,237,250,175,250,250,110, + 237,37,138,122,110,110,158,109,254,158,176,158,98,174,129,97, + 97,174,129,97,97,174,129,97,97,174,129,97,97,174,129,97, + 97,174,129,97,97,174,129,97,97,174,129,97,97,174,129,97, + 97,174,129,97,97,174,129,97,97,174,129,97,97,174,129,97, + 174,174,129,97,174,97,129,97,97,174,97,21,97,97,97,21, + 97,97,129,97,174,174,62,159,68,68,17,17,17,17,17,17, + 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17, + 138,202,202,202,202,202,202,202,202,172,202,202,172,202,172,202, + 202,172,172,172,172,172,172,172,172,172,172,175,172,237,175,122, + 250,250,172,250,78,244,176,244,109,109,109,176,98,13,13,13, + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, + 13,13,13,13,13,114,13,13,13,114,114,13,13,13,70,13, + 13,114,13,70,13,114,28,68,159,17,159,17,17,17,17,17, + 17,17,17,27,17,17,17,17,17,17,17,17,17,17,17,159, + 244,172,202,202,202,202,202,202,237,237,202,237,202,237,202,202, + 237,237,250,250,250,250,250,250,250,237,250,237,172,172,172,172, + 172,175,172,172,244,172,244,244,176,158,109,244,98,49,145,111, + 225,174,145,111,225,174,145,111,225,174,145,111,225,174,145,111, + 225,174,145,111,225,174,145,111,225,174,145,111,225,174,145,111, + 225,174,145,111,225,174,145,111,225,174,145,111,225,174,145,111, + 225,174,145,111,225,174,145,111,225,97,145,111,225,174,145,111, + 225,174,145,111,225,174,119,17,68,17,159,17,17,17,17,17, + 17,17,17,17,17,17,17,17,17,17,17,17,17,159,17,159, + 138,202,202,172,202,202,198,202,202,202,237,202,250,202,237,250, + 202,172,202,237,175,175,237,237,175,172,175,172,250,172,150,172, + 172,172,172,172,172,172,172,244,244,244,244,176,98,97,45,82, + 76,174,45,82,76,174,45,82,76,174,45,82,76,174,45,82, + 76,174,45,82,76,174,45,82,76,174,45,82,76,174,45,82, + 76,174,45,82,76,174,45,82,76,174,45,82,76,174,45,82, + 76,174,45,82,76,174,45,82,76,174,45,82,76,174,45,82, + 76,174,45,82,76,174,62,68,159,68,159,159,159,68,17,159, + 17,17,17,17,17,17,17,68,17,17,68,17,159,17,159,50, + 244,202,190,198,190,202,190,202,190,190,198,198,198,198,198,198, + 198,198,198,172,172,172,198,202,202,172,198,198,202,172,172,172, + 198,190,172,244,244,122,172,244,244,244,244,244,98,97,53,81, + 73,97,53,81,73,97,53,81,73,97,53,81,73,97,53,81, + 73,97,53,81,73,97,53,81,73,97,53,81,73,97,53,81, + 73,97,53,81,73,97,53,81,73,97,53,81,73,97,53,81, + 73,174,53,81,73,97,53,81,73,97,53,81,73,174,53,81, + 73,97,53,81,73,97,62,68,159,68,68,17,159,68,68,68, + 68,68,68,68,68,68,17,68,68,17,68,159,68,159,68,159, + 250,172,202,198,190,190,190,190,190,190,190,190,190,190,190,190, + 190,198,190,190,190,190,190,190,190,190,190,190,190,190,244,198, + 244,172,23,244,172,244,78,244,244,78,244,30,98,236,154,213, + 25,13,154,213,25,13,154,213,25,13,154,213,25,13,154,213, + 25,13,154,213,25,13,154,213,25,13,154,213,25,13,154,213, + 25,13,154,213,25,13,154,213,25,13,154,213,25,13,154,213, + 25,13,154,213,25,13,154,213,25,13,154,213,25,21,154,213, + 25,97,154,213,25,97,62,68,68,159,68,68,68,68,68,68, + 68,68,68,68,68,68,68,68,68,68,68,68,68,68,159,68, + 202,202,190,190,190,173,173,190,190,190,190,190,198,190,190,198, + 190,198,185,173,173,190,190,23,173,190,190,190,190,198,198,244, + 198,172,172,198,244,244,244,244,244,30,244,30,98,97,97,21, + 97,174,174,21,97,174,174,21,97,174,174,21,97,174,174,21, + 97,174,174,21,97,174,174,21,97,174,174,21,97,174,174,21, + 97,174,174,21,97,174,174,21,97,174,174,21,97,174,97,21, + 97,97,97,21,97,174,97,21,97,174,236,21,97,13,97,114, + 21,21,21,114,21,97,62,68,68,68,3,68,68,68,68,68, + 68,3,68,3,3,3,3,68,3,68,68,68,68,68,3,68, + 172,198,185,173,198,190,190,190,198,190,190,190,198,198,172,172, + 172,198,190,190,190,190,190,185,190,198,198,190,172,198,244,244, + 244,172,122,244,244,172,244,244,244,78,30,30,98,21,97,21, + 97,174,97,21,97,174,97,21,97,174,97,21,97,174,97,21, + 97,174,97,21,97,174,97,21,97,174,97,21,97,174,97,21, + 97,174,97,21,97,174,97,21,97,174,97,21,97,174,97,21, + 97,174,56,21,97,97,97,21,97,97,129,21,174,174,165,97, + 97,174,56,97,97,97,62,199,3,3,3,68,3,68,3,89, + 3,3,3,3,3,3,3,89,3,3,3,3,3,3,3,3, + 202,202,202,198,202,202,202,190,202,202,198,198,198,198,198,250, + 250,172,250,250,250,250,244,244,250,110,176,110,176,110,110,110, + 109,176,176,109,176,109,109,109,158,176,109,158,98,236,13,70, + 13,114,13,70,13,114,13,70,13,114,13,70,13,114,13,70, + 13,114,13,70,13,114,13,70,13,114,13,70,13,114,13,70, + 13,114,13,70,13,114,13,70,13,114,13,70,13,114,13,70, + 13,13,13,114,13,114,13,70,13,13,13,13,114,13,13,13, + 13,13,13,13,13,114,98,199,89,3,3,89,89,89,3,89, + 89,89,89,89,89,89,89,89,89,89,89,3,89,3,89,89, + 172,172,202,202,202,202,172,237,202,202,198,190,172,172,237,172, + 172,172,244,244,172,172,172,250,172,244,172,244,244,78,244,244, + 244,244,176,110,176,244,176,176,176,109,109,158,208,129,145,111, + 225,174,145,111,225,174,145,111,225,174,145,111,225,174,145,111, + 225,174,145,111,225,174,145,111,225,174,145,111,225,174,145,111, + 225,174,145,111,225,174,145,111,225,174,145,111,225,174,145,111, + 225,174,145,111,225,174,145,111,225,174,145,111,225,174,145,111, + 225,174,145,111,225,174,208,199,57,199,199,89,89,199,89,89, + 89,89,199,89,89,199,89,89,199,89,89,89,199,199,199,89, + 138,250,237,202,172,237,202,172,172,250,250,202,172,172,172,244, + 244,172,172,244,244,250,172,244,250,244,244,244,244,244,244,244, + 109,244,30,244,109,244,30,244,30,30,158,78,98,97,45,82, + 76,174,45,82,76,174,45,82,76,174,45,82,76,174,45,82, + 76,174,45,82,76,174,45,82,76,174,45,82,76,174,45,82, + 76,174,45,82,76,174,45,82,76,174,45,82,76,174,45,82, + 76,174,45,82,76,174,45,82,76,13,45,82,76,174,45,82, + 76,13,45,82,76,174,169,57,57,57,57,199,57,199,199,57, + 199,199,199,57,199,199,199,57,199,199,57,89,199,199,57,199, + 254,138,138,138,237,250,138,237,138,250,138,110,250,172,244,172, + 172,244,244,172,244,244,244,244,244,244,244,176,176,30,158,176, + 244,109,244,30,244,30,244,158,109,254,176,221,208,236,53,81, + 73,13,53,81,73,13,53,81,73,13,53,81,73,13,53,81, + 73,13,53,81,73,13,53,81,73,13,53,81,73,13,53,81, + 73,13,53,81,73,13,53,81,73,13,53,81,73,13,53,81, + 73,13,53,81,73,13,53,81,73,174,53,81,73,13,53,81, + 73,174,53,81,73,97,208,23,23,57,57,57,199,57,57,57, + 57,57,199,57,57,199,57,199,57,57,57,57,57,57,210,57, + 158,254,138,138,138,138,250,250,138,250,244,244,176,244,244,244, + 244,244,244,244,244,244,244,244,244,244,244,30,244,244,30,158, + 30,158,109,158,158,158,158,221,221,221,158,221,208,236,154,213, + 25,174,154,213,25,97,154,213,25,174,154,213,25,97,154,213, + 25,174,154,213,25,97,154,213,25,174,154,213,25,97,154,213, + 25,174,154,213,25,97,154,213,25,174,154,213,25,97,154,213, + 25,174,154,213,25,174,154,213,25,97,154,213,25,13,154,213, + 25,13,154,213,25,97,169,23,23,23,23,57,57,57,199,57, + 57,57,57,199,199,57,199,57,199,57,57,57,199,57,23,57, + 136,138,244,138,250,138,254,138,138,176,254,138,176,254,254,158, + 254,176,158,176,158,158,176,244,176,176,244,244,176,30,244,244, + 30,244,158,158,158,221,158,158,158,158,107,158,98,165,97,13, + 21,21,97,13,97,21,174,13,21,21,97,13,97,21,174,13, + 21,21,97,13,97,21,174,13,21,21,97,13,97,21,174,13, + 21,21,97,13,97,21,174,13,21,21,97,13,97,97,21,21, + 97,97,174,13,21,21,21,21,174,13,21,97,174,97,97,97, + 97,97,174,13,97,21,163,23,23,23,57,57,199,57,57,199, + 199,199,199,199,199,199,199,199,199,57,57,57,57,57,57,23, + 254,138,172,250,250,250,250,250,138,254,254,136,254,254,254,254, + 158,136,254,254,176,158,158,158,176,176,176,158,254,158,158,254, + 158,158,158,158,158,158,158,158,221,158,158,2,98,100,129,97, + 174,174,129,97,174,97,129,97,174,174,129,97,174,97,129,97, + 174,174,129,97,174,97,129,97,174,174,129,97,174,97,129,97, + 174,174,129,97,174,97,129,97,174,174,129,97,97,174,97,21, + 97,97,129,97,97,174,97,21,174,174,174,97,97,97,97,21, + 97,97,129,97,174,174,169,23,23,23,57,57,199,199,199,89, + 199,89,89,89,3,89,89,199,3,89,3,199,199,199,199,199, + 244,172,172,250,172,172,172,250,244,250,176,176,254,158,254,158, + 254,176,254,254,254,254,136,254,158,158,158,176,158,158,176,30, + 176,78,244,78,78,158,30,30,30,30,2,158,208,21,13,13, + 13,114,13,13,13,114,13,13,13,114,13,13,13,114,13,13, + 13,114,13,13,13,114,13,13,13,114,13,13,13,114,13,13, + 13,114,13,13,13,114,13,13,13,114,13,13,13,13,114,13, + 13,13,13,13,13,114,114,13,70,114,70,13,13,13,70,13, + 13,114,13,70,13,114,245,57,57,199,199,3,89,89,3,89, + 3,3,3,3,3,3,3,3,3,89,3,89,89,89,89,199, + 244,244,172,172,244,244,244,172,244,244,244,244,176,254,254,254, + 158,158,158,158,254,158,254,136,136,136,158,254,254,158,158,221, + 158,158,221,158,158,158,2,158,2,158,2,2,208,236,145,111, + 225,174,145,111,225,174,145,111,225,174,145,111,225,174,145,111, + 225,174,145,111,225,174,145,111,225,174,145,111,225,174,145,111, + 225,174,145,111,225,174,145,111,225,174,145,111,225,174,145,111, + 225,174,145,111,225,13,145,111,225,174,145,111,225,174,145,111, + 225,174,145,111,225,174,169,57,199,199,3,89,3,3,3,3, + 68,3,68,68,3,68,68,3,68,3,3,3,3,3,3,89, + 244,172,187,244,244,187,30,244,158,187,30,244,244,244,244,244, + 244,244,244,244,158,176,30,30,30,30,176,158,158,158,158,176, + 158,158,158,158,158,158,158,221,158,2,158,30,208,236,45,82, + 76,174,45,82,76,174,45,82,76,174,45,82,76,174,45,82, + 76,174,45,82,76,174,45,82,76,174,45,82,76,174,45,82, + 76,174,45,82,76,174,45,82,76,174,45,82,76,174,45,82, + 76,174,45,82,76,174,45,82,76,174,45,82,76,174,45,82, + 76,174,45,82,76,174,245,89,199,3,3,3,3,3,3,3, + 68,68,68,68,68,68,68,68,68,3,68,68,3,3,3,3, + 30,244,244,20,187,187,133,30,20,20,187,187,187,244,244,244, + 244,244,244,244,30,30,244,244,244,30,30,30,30,176,30,30, + 158,30,30,2,30,2,2,2,30,2,2,158,208,236,53,81, + 73,174,53,81,73,97,53,81,73,174,53,81,73,97,53,81, + 73,174,53,81,73,97,53,81,73,174,53,81,73,97,53,81, + 73,174,53,81,73,97,53,81,73,174,53,81,73,174,53,81, + 73,97,53,81,73,174,53,81,73,97,53,81,73,174,53,81, + 73,97,53,81,73,97,245,199,199,199,3,3,3,68,3,68, + 68,68,68,17,68,68,68,68,68,68,68,68,3,3,3,3, + 187,187,30,187,147,20,147,147,133,133,148,133,187,30,30,158, + 158,158,158,30,30,30,2,2,158,30,158,158,158,2,158,158, + 158,158,2,158,2,158,158,158,158,158,158,2,208,165,154,213, + 25,13,154,213,25,13,154,213,25,13,154,213,25,13,154,213, + 25,13,154,213,25,13,154,213,25,13,154,213,25,13,154,213, + 25,13,154,213,25,13,154,213,25,13,154,213,25,13,154,213, + 25,13,154,213,25,13,154,213,25,13,154,213,25,21,154,213, + 25,97,154,213,25,97,169,199,3,3,3,3,3,68,3,68, + 68,68,68,68,68,68,68,68,68,68,3,3,3,3,3,3, + 158,187,20,133,133,124,91,124,86,86,91,133,187,187,158,158, + 158,187,158,158,158,158,30,158,158,158,30,158,158,2,221,2, + 158,158,158,158,221,221,221,221,221,221,221,2,98,165,21,21, + 97,174,97,21,97,174,21,21,97,174,97,21,97,174,21,21, + 97,174,97,21,97,174,21,21,97,174,97,21,97,174,21,21, + 97,174,97,21,97,174,21,114,97,174,174,21,97,174,97,21, + 97,174,21,114,97,174,97,21,97,174,236,21,97,13,97,114, + 21,21,21,114,21,97,245,199,89,3,3,68,68,68,68,68, + 68,17,68,17,17,17,68,17,68,159,159,159,68,68,226,3, + 187,30,187,148,147,152,232,9,124,232,124,86,133,187,30,30, + 30,244,30,30,30,30,158,30,30,30,158,30,30,158,30,158, + 2,2,2,221,2,2,2,221,221,221,221,2,208,236,165,21, + 97,174,165,97,97,97,56,21,97,174,165,97,97,97,56,21, + 97,174,165,97,97,97,56,21,97,174,165,97,97,97,56,21, + 97,174,165,97,97,97,56,97,97,174,97,21,97,174,174,21, + 97,174,165,97,97,97,97,21,97,97,129,21,174,174,165,97, + 97,174,56,97,97,97,245,242,3,3,3,68,68,68,68,68, + 68,68,17,17,68,17,159,68,159,159,68,68,159,226,68,226, + 187,20,133,147,91,81,213,25,25,213,82,87,24,217,158,244, + 30,30,30,158,244,244,30,30,244,244,158,30,30,30,30,30, + 158,30,30,30,158,158,158,221,2,158,2,2,98,165,13,114, + 13,13,13,114,13,13,13,114,13,13,13,114,13,13,13,114, + 13,13,13,114,13,13,13,114,13,13,13,114,13,13,13,114, + 13,13,13,114,13,13,13,114,13,114,13,70,13,114,13,70, + 13,13,114,114,13,114,13,70,13,13,13,13,114,13,13,13, + 13,13,13,13,13,114,208,3,3,68,3,68,17,68,17,17, + 17,68,68,17,159,17,17,159,159,159,159,159,159,159,159,68, + 148,148,148,148,147,91,16,16,16,54,96,223,18,112,187,187, + 158,158,158,30,158,30,158,244,158,30,244,176,30,158,30,30, + 30,2,2,30,2,2,2,212,221,2,158,2,208,114,145,111, + 225,174,145,111,225,174,145,111,225,174,145,111,225,174,145,111, + 225,174,145,111,225,174,145,111,225,174,145,111,225,174,145,111, + 225,174,145,111,225,174,145,111,225,174,145,111,225,174,145,111, + 225,174,145,111,225,174,145,111,225,174,145,111,225,174,145,111, + 225,174,145,111,225,174,245,242,242,68,68,68,68,159,68,68, + 68,159,159,159,159,159,159,159,159,159,159,68,159,226,159,159, + 187,187,187,20,147,147,151,151,164,53,147,147,148,188,212,212, + 212,212,187,187,187,187,187,2,158,187,158,158,158,158,158,158, + 30,30,2,30,30,30,30,2,2,2,30,2,208,238,45,82, + 76,174,45,82,76,174,45,82,76,174,45,82,76,174,45,82, + 76,174,45,82,76,174,45,82,76,174,45,82,76,174,45,82, + 76,174,45,82,76,174,45,82,76,13,45,82,76,174,45,82, + 76,97,45,82,76,174,45,82,76,13,45,82,76,174,45,82, + 76,13,45,82,76,174,169,89,89,3,3,3,3,3,3,68, + 68,68,68,159,68,68,68,68,68,68,68,3,3,3,242,3, + 187,187,212,212,148,188,133,147,133,29,133,20,133,188,187,212, + 187,187,187,2,221,2,187,2,187,158,2,221,2,221,221,221, + 221,221,158,221,221,221,221,221,221,221,221,221,208,118,53,81, + 73,13,53,81,73,13,53,81,73,13,53,81,73,13,53,81, + 73,13,53,81,73,13,53,81,73,13,53,81,73,13,53,81, + 73,13,53,81,73,13,53,81,73,174,53,81,73,13,53,81, + 73,174,53,81,73,13,53,81,73,174,53,81,73,13,53,81, + 73,174,53,81,73,97,169,210,199,89,89,89,3,3,3,3, + 3,3,68,68,68,68,68,3,3,3,3,3,3,89,89,89, + 158,158,187,187,212,188,20,133,133,81,133,188,188,188,187,187, + 187,187,187,2,187,158,158,2,2,187,158,187,2,221,2,158, + 158,221,158,221,221,221,2,2,2,221,221,221,163,238,154,213, + 25,174,154,213,25,174,154,213,25,174,154,213,25,174,154,213, + 25,174,154,213,25,174,154,213,25,174,154,213,25,174,154,213, + 25,174,154,213,25,174,154,213,25,97,154,213,25,97,154,213, + 25,97,154,213,25,174,154,213,25,97,154,213,25,13,154,213, + 25,13,154,213,25,97,169,210,210,89,89,89,89,3,89,3, + 68,3,68,68,68,68,68,68,3,182,3,182,182,3,242,89, + 128,187,187,187,187,188,20,22,20,16,148,148,188,188,188,212, + 221,221,221,212,221,212,212,221,187,2,2,158,158,2,2,2, + 221,2,212,221,2,158,221,221,2,221,30,158,208,118,97,21, + 97,97,97,21,21,97,97,21,97,97,97,21,21,97,97,21, + 97,97,97,21,21,97,97,21,97,97,97,21,21,97,97,21, + 97,97,97,21,21,97,174,13,97,21,97,13,21,21,97,21, + 21,97,174,13,21,21,21,21,174,13,21,97,174,97,97,97, + 97,97,174,13,97,21,169,228,89,89,3,3,3,3,179,3, + 3,3,3,217,68,68,179,3,226,3,3,3,3,242,242,242, + 20,128,187,20,188,188,188,148,20,53,20,188,188,212,212,212, + 212,212,187,212,221,221,221,221,187,187,212,212,2,221,221,2, + 2,158,221,2,2,2,212,221,2,2,2,78,28,70,97,21, + 97,97,97,97,97,97,97,21,97,97,97,97,97,97,97,21, + 97,97,97,97,97,97,97,21,97,97,97,97,97,97,97,21, + 97,97,97,97,97,97,129,97,174,174,129,97,174,97,97,97, + 97,97,129,97,97,174,97,21,174,174,174,97,97,97,97,21, + 97,97,129,97,174,174,169,210,228,89,89,182,3,3,179,3, + 68,68,68,159,68,68,159,68,68,226,226,3,3,3,3,242, + 20,20,20,188,188,148,20,22,148,45,148,148,148,35,188,212, + 188,188,188,221,212,212,212,212,221,221,221,221,221,221,221,221, + 221,212,212,212,212,221,221,2,212,221,2,78,24,55,114,13, + 13,13,114,13,13,13,114,13,13,13,114,13,13,13,114,13, + 13,13,114,13,13,13,114,13,13,13,114,13,13,13,114,13, + 13,13,114,13,13,13,13,13,13,114,13,13,13,13,114,70, + 13,114,13,13,13,114,114,13,70,114,70,13,13,13,70,13, + 13,114,13,70,13,114,13,89,89,3,3,3,179,68,3,68, + 179,159,68,159,159,159,68,226,226,68,3,226,226,3,226,3, + 20,20,128,20,20,20,20,20,148,11,20,35,188,188,188,212, + 212,221,212,221,107,187,221,221,221,221,221,221,221,221,221,221, + 158,158,2,158,2,2,221,2,2,2,2,122,218,132,201,80, + 224,238,42,224,224,224,222,236,70,100,100,165,70,70,165,31, + 70,70,59,142,71,146,71,55,165,100,100,100,71,59,196,55, + 79,165,201,31,42,42,114,165,146,100,224,79,126,126,79,236, + 236,80,70,238,238,42,146,118,236,42,224,236,224,70,236,236, + 70,238,118,118,118,195,129,182,89,3,3,3,179,68,68,68, + 179,159,68,159,159,159,159,159,68,68,226,68,226,3,226,3, + 20,20,20,128,22,188,22,148,188,11,148,148,148,35,35,188, + 188,188,188,188,188,188,107,107,107,107,158,221,158,221,158,158, + 221,221,221,221,221,221,221,158,221,2,158,122,24,24,231,201, + 70,80,201,201,201,238,100,222,33,71,117,224,118,195,243,236, + 100,201,69,201,165,142,143,71,181,224,126,196,224,236,71,71, + 69,100,79,243,69,238,13,240,236,71,126,43,42,46,114,70, + 114,236,13,118,238,13,97,195,155,118,80,42,13,195,13,70, + 236,13,13,70,13,118,69,242,182,242,226,68,68,159,217,159, + 68,68,159,50,50,50,159,159,159,159,68,68,159,68,68,226, + 22,128,20,128,20,22,22,35,188,93,35,35,188,188,188,107, + 188,107,188,221,221,212,221,187,158,107,158,107,158,107,221,221, + 221,158,2,158,221,221,107,158,221,221,158,78,18,171,222,201, + 201,196,222,69,31,201,118,236,33,132,24,83,31,42,71,71, + 79,42,69,236,13,236,143,55,142,14,55,236,224,71,79,146, + 218,46,165,114,165,238,42,165,83,43,146,79,143,100,165,165, + 69,201,118,236,118,238,165,13,143,100,69,224,195,195,13,236, + 165,165,236,70,13,70,121,226,242,226,226,68,68,68,68,159, + 159,159,159,159,159,50,159,159,159,159,159,68,159,68,68,68, + 128,20,128,22,128,22,35,35,107,60,35,107,107,188,107,221, + 221,221,221,221,107,137,107,137,107,107,107,221,107,221,137,221, + 221,107,221,188,158,221,221,107,221,221,221,122,142,231,165,100, + 42,240,55,31,201,31,31,231,69,126,142,79,106,100,142,55, + 100,100,143,243,118,236,100,132,79,42,43,71,69,100,243,24, + 84,33,143,224,201,243,13,13,231,142,69,181,71,236,236,70, + 69,118,195,236,100,97,100,243,236,243,46,129,13,13,13,118, + 100,13,236,126,70,195,100,226,226,226,226,159,159,159,159,159, + 50,50,50,17,50,159,50,50,159,50,159,159,159,159,159,159, + 128,137,137,137,137,137,107,107,221,15,107,107,221,221,107,107, + 107,221,107,221,212,221,221,137,158,107,158,107,158,221,137,137, + 221,137,221,212,107,221,212,107,221,107,212,78,201,71,189,183, + 106,224,118,31,79,231,42,168,142,55,33,142,168,239,100,236, + 165,236,143,100,239,201,100,97,142,70,43,79,42,236,114,118, + 146,126,165,129,61,238,118,14,178,251,42,69,224,165,118,195, + 155,118,97,165,201,80,83,243,46,143,69,97,195,195,195,236, + 238,70,13,129,42,155,143,217,226,159,217,159,159,50,50,50, + 50,159,50,241,27,17,50,50,50,50,50,159,159,159,159,159, + 128,128,128,128,128,128,128,107,254,87,107,107,137,107,107,187, + 221,107,107,107,137,137,107,221,107,158,107,158,107,107,221,221, + 137,221,107,107,221,212,107,221,107,221,107,78,40,168,189,63, + 192,118,201,80,222,251,251,14,196,246,142,142,251,61,61,165, + 240,236,79,100,118,201,236,55,165,224,165,224,143,236,165,165, + 231,69,100,114,118,61,201,59,118,118,31,71,31,240,118,118, + 201,118,69,100,236,118,83,126,165,100,165,201,118,195,61,118, + 118,118,70,240,236,13,71,68,217,159,159,159,50,159,17,17, + 17,241,17,17,50,50,17,17,17,50,50,50,50,50,159,159, + 128,137,137,136,137,137,137,137,254,134,158,137,137,158,137,107, + 137,221,158,137,158,137,137,128,128,128,128,128,107,107,107,107, + 107,107,107,107,128,107,107,107,212,107,188,78,186,231,14,192, + 14,118,61,61,31,201,231,14,196,218,231,231,42,238,42,142, + 55,43,238,142,142,165,165,118,165,79,55,100,165,114,118,236, + 196,31,118,13,0,118,118,69,55,224,21,114,224,224,13,174, + 13,118,100,146,79,79,215,79,13,118,195,236,118,118,236,118, + 0,118,195,69,201,80,165,159,159,159,50,17,17,17,50,17, + 17,241,17,27,27,241,241,17,27,17,17,17,50,50,50,159, + 137,136,254,254,136,136,137,137,176,219,137,137,137,128,128,128, + 107,137,137,254,109,109,137,107,107,107,107,107,107,128,128,107, + 35,107,221,221,107,2,221,212,128,128,128,78,234,48,14,48, + 251,239,201,55,42,40,192,108,63,63,201,142,43,236,243,33, + 24,222,0,143,42,118,42,236,174,55,181,165,165,100,71,100, + 14,224,243,79,21,42,236,79,71,100,194,79,224,236,100,100, + 97,21,21,146,33,70,126,129,79,236,236,118,118,155,236,243, + 61,13,165,165,114,195,71,50,159,17,17,50,27,34,8,141, + 204,170,204,204,204,170,204,204,170,204,204,170,62,144,27,50, + 136,138,138,138,138,138,254,136,254,18,137,137,137,137,137,137, + 137,109,109,254,109,109,110,158,137,107,107,107,107,107,107,137, + 107,107,107,221,107,221,158,221,221,221,107,122,234,135,214,14, + 201,239,168,134,192,146,218,18,31,168,196,42,42,236,79,218, + 98,132,165,155,224,201,24,24,71,14,192,142,114,114,165,224, + 126,165,24,181,114,222,55,181,142,201,71,143,146,126,146,132, + 69,118,114,146,146,194,224,118,118,143,46,100,118,195,114,165, + 201,236,100,100,114,114,126,159,169,144,119,170,204,204,204,204, + 204,204,204,204,204,204,204,204,204,204,204,204,146,204,121,170, + 138,138,138,138,138,138,110,138,138,218,158,254,254,137,137,137, + 136,110,109,110,110,110,109,138,109,137,109,137,137,78,137,221, + 137,107,221,137,107,107,107,221,107,107,107,109,18,48,14,251, + 63,192,183,231,251,31,192,183,108,59,40,40,42,155,70,79, + 117,142,236,236,236,165,236,70,165,165,238,79,142,143,79,117, + 79,114,126,100,236,236,100,71,100,236,118,13,100,165,240,224, + 224,70,70,114,70,71,243,236,70,236,143,165,13,118,13,236, + 118,70,114,165,100,70,243,121,46,121,146,36,215,46,121,121, + 115,121,115,121,115,121,215,121,121,215,121,115,215,121,121,215, + 237,130,130,130,237,110,110,237,110,24,136,254,109,254,109,254, + 109,110,109,109,109,109,109,122,122,109,109,158,137,109,109,78, + 137,78,158,109,109,158,158,109,109,109,109,78,41,231,192,220, + 186,200,108,95,145,192,220,227,227,192,95,193,193,231,192,106, + 106,42,43,142,142,168,142,142,79,231,31,31,31,42,48,31, + 42,231,231,142,55,196,69,55,43,224,69,69,55,42,240,69, + 71,236,240,240,100,224,201,61,240,236,240,69,165,236,240,236, + 236,236,97,240,118,165,215,36,36,36,115,115,36,36,36,131, + 36,36,36,36,131,36,36,36,36,36,36,36,131,36,36,115, + 130,130,130,130,235,130,130,237,130,246,110,110,237,110,254,109, + 176,109,176,109,109,110,110,110,237,109,109,109,78,137,137,137, + 109,137,109,109,137,109,136,158,109,158,158,158,229,106,14,203, + 203,14,178,203,203,14,7,95,193,14,95,225,95,43,161,160, + 161,224,161,161,106,231,146,181,106,142,251,168,251,51,14,40, + 40,79,43,161,142,196,43,43,142,196,31,43,43,143,69,69, + 43,224,69,69,31,236,69,240,42,224,69,69,201,165,240,240, + 236,236,240,97,236,243,157,115,115,115,36,36,36,131,131,36, + 36,36,131,64,36,115,36,131,131,64,36,36,36,131,36,64, + 130,235,140,140,130,130,65,130,65,132,37,237,37,37,37,237, + 250,110,110,110,109,109,109,122,65,237,37,37,37,37,37,122, + 37,122,109,122,122,109,138,109,122,109,122,109,229,246,113,7, + 7,14,192,108,7,231,178,7,95,168,203,7,7,231,192,106, + 106,42,106,14,106,231,106,106,106,79,251,14,161,143,183,142, + 168,231,222,106,142,231,142,42,79,196,55,55,43,59,80,80, + 80,236,69,69,224,201,42,100,42,224,240,224,201,236,236,201, + 236,201,61,236,13,126,215,115,115,115,64,115,64,36,131,64, + 64,64,64,131,131,64,64,64,131,64,131,157,157,64,64,64, + 140,140,140,140,140,140,140,185,65,222,37,37,175,175,175,37, + 37,65,110,109,110,250,37,37,37,37,65,175,65,37,37,37, + 37,122,65,237,122,122,122,122,138,122,122,122,112,183,142,178, + 63,168,168,192,192,168,63,178,200,231,63,63,246,196,142,63, + 106,196,142,142,142,42,222,222,142,42,79,168,168,59,184,222, + 142,224,142,142,142,80,80,155,118,118,42,42,224,0,155,239, + 80,80,100,165,155,118,13,224,240,236,165,114,165,236,236,114, + 236,236,97,118,236,126,215,215,64,64,64,64,64,115,157,131, + 131,64,36,10,64,131,64,64,131,131,10,131,131,64,64,64, + 197,127,140,127,140,140,65,122,140,222,175,185,65,150,150,37, + 122,197,140,65,65,65,235,37,237,65,106,175,173,65,65,37, + 175,167,165,127,37,52,94,122,37,122,37,37,112,183,132,246, + 218,168,222,246,184,183,184,184,184,196,184,132,28,196,117,132, + 132,165,117,117,33,224,98,28,117,42,117,117,132,165,163,28, + 117,236,33,117,117,70,233,59,165,155,79,126,79,0,59,51, + 233,155,224,155,155,0,195,155,143,70,143,143,143,143,79,143, + 194,224,79,243,56,146,115,115,215,64,64,64,157,64,157,10, + 131,64,64,131,64,131,10,36,10,131,64,131,157,64,64,64, + 118,46,253,39,127,140,65,130,94,222,37,65,150,52,65,127, + 0,155,46,230,140,175,172,175,250,94,117,122,65,37,162,94, + 127,224,118,70,208,70,117,162,37,37,37,37,112,200,222,48, + 246,168,222,132,184,168,117,132,102,132,218,117,132,231,222,117, + 132,42,222,222,117,51,84,28,117,51,117,222,117,201,163,28, + 146,116,117,117,117,80,196,155,51,70,117,51,155,80,155,118, + 118,0,116,165,155,118,165,116,155,155,118,165,165,165,143,143, + 100,165,129,143,236,126,46,115,64,215,157,64,64,157,215,131, + 64,157,64,157,131,64,64,115,131,157,64,157,157,157,64,215, + 118,13,146,197,140,140,65,94,183,79,175,98,126,165,103,79, + 0,0,155,146,39,140,140,175,94,63,55,37,98,222,165,103, + 79,70,13,0,195,195,0,70,100,83,117,162,112,218,14,178, + 178,192,192,203,108,192,108,108,108,192,44,44,108,168,192,63, + 14,231,14,168,214,51,14,108,113,79,63,192,48,196,135,63, + 178,79,183,135,102,236,59,0,118,155,239,233,155,0,0,195, + 0,0,42,201,155,59,224,118,118,116,19,51,155,51,19,19, + 51,70,70,70,70,146,83,157,157,157,157,215,157,131,215,49, + 157,157,157,215,131,157,157,215,157,131,157,10,215,10,131,215, + 129,121,149,230,39,127,127,48,192,59,191,80,118,195,236,0, + 0,0,215,149,253,39,52,52,184,63,59,191,155,195,118,236, + 195,0,0,195,195,195,195,0,0,0,70,169,32,135,108,108, + 178,178,74,7,7,178,203,7,7,192,193,95,7,192,63,178, + 14,222,14,214,14,192,178,44,178,222,192,14,192,168,74,178, + 14,222,168,200,48,233,80,118,155,118,166,118,80,155,0,0, + 51,80,118,0,0,155,80,155,233,26,105,19,19,19,75,75, + 19,224,118,118,236,146,146,146,146,146,33,146,132,33,24,24, + 33,33,146,132,33,24,33,33,24,184,33,24,33,246,33,33, + 48,146,119,230,39,39,156,48,192,116,80,155,0,0,0,0, + 0,0,0,84,230,92,217,156,48,192,116,80,155,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,155,171,135,251,44, + 44,178,44,95,203,178,178,203,113,178,178,113,214,14,251,40, + 40,168,14,108,178,192,95,6,113,192,168,40,108,168,102,231, + 12,116,12,32,102,80,155,118,118,118,80,239,61,0,0,0, + 0,155,118,0,0,0,0,118,80,80,155,201,42,224,238,118, + 224,42,201,80,201,146,171,134,134,134,41,41,41,41,229,38, + 38,41,41,41,41,229,38,38,60,60,38,229,229,41,41,41, + 102,100,100,131,115,246,233,116,233,233,0,0,0,195,0,0, + 0,0,195,100,131,215,48,239,116,233,233,0,0,0,195,0, + 0,0,0,0,0,0,0,0,0,0,0,0,18,135,214,44, + 7,178,7,203,203,14,203,113,113,14,178,214,40,168,14,40, + 40,168,251,40,113,192,111,125,203,168,32,103,29,48,152,12, + 40,51,214,32,156,155,155,80,233,0,0,118,0,0,0,0, + 0,0,155,118,0,0,0,0,59,155,0,0,233,42,239,118, + 201,233,61,61,165,146,56,70,195,195,238,0,0,118,238,0, + 195,236,195,0,118,238,0,195,42,42,118,118,201,118,118,0, + 51,13,195,155,80,118,155,0,118,0,118,0,80,0,0,0, + 0,0,0,0,155,155,155,155,0,118,0,118,0,80,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,218,200,251,113, + 203,14,113,203,7,14,108,203,203,168,178,113,14,168,44,193, + 14,251,214,178,14,168,214,214,40,168,192,192,74,51,48,214, + 40,118,155,0,0,0,155,118,0,0,0,0,0,0,0,118, + 118,0,0,0,0,0,118,80,118,0,0,0,118,118,201,80, + 201,155,80,80,233,146,143,70,0,0,69,0,0,201,236,0, + 118,42,195,0,59,236,195,155,222,142,195,195,224,201,0,195, + 118,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,118,0, + 0,0,0,0,0,0,0,0,0,0,0,0,222,63,239,14, + 113,51,231,40,40,40,178,251,14,239,51,251,40,239,102,200, + 40,80,239,40,40,80,239,80,239,80,51,155,80,80,239,233, + 59,80,0,118,80,80,118,80,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,118,0,0,0,0,0,155,118,0,118, + 118,118,118,118,118,142,42,236,195,0,79,195,195,51,224,195, + 70,79,195,195,42,224,195,13,222,222,155,195,224,51,195,195, + 155,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,168,219,200,200, + 108,160,200,186,200,135,74,219,200,123,219,135,219,219,102,219, + 219,177,219,177,219,219,219,219,219,192,63,51,168,178,200,200, + 74,168,155,0,118,118,0,80,155,0,0,0,0,0,195,0, + 0,0,0,0,80,0,80,231,42,118,0,118,168,63,192,106, + 106,106,142,43,55,222,236,70,0,0,143,195,195,143,236,195, + 195,143,195,195,196,201,195,118,222,142,195,195,236,42,195,195, + 80,0,0,0,0,0,118,80,0,0,0,0,0,0,0,0, + 0,0,0,0,118,0,0,118,118,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,51,218,218,218, + 218,183,218,218,183,183,183,63,63,246,106,48,183,189,183,63, + 246,63,246,63,246,200,246,135,102,117,192,80,0,233,168,246, + 192,80,118,118,0,118,118,0,0,0,0,0,0,195,118,0, + 0,0,0,0,0,236,246,184,222,0,0,0,224,142,183,218, + 218,218,18,98,189,134,79,79,71,71,79,142,79,142,117,142, + 222,79,142,79,79,117,222,142,132,132,222,222,117,79,79,142, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,118,118,0,222,196,233, + 168,168,0,196,0,69,236,42,63,48,246,48,48,106,165,51, + 233,118,118,0,51,189,0,233,233,155,155,155,0,0,0,195, + 0,0,0,0,118,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,195,195,0,0,118,155,42,233,155,195,155, + 224,118,236,165,31,79,71,222,132,142,126,246,132,142,218,189, + 24,126,184,246,142,24,18,246,24,24,246,189,189,142,33,246, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,195,114, + 0,0,0,0,0,0,0,0,0,0,0,0,0,63,79,51, + 14,63,0,192,0,196,165,79,246,183,219,171,18,246,69,71, + 0,0,0,0,51,218,155,155,233,233,0,0,155,155,0,118, + 0,155,80,118,155,80,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,195,238,224,195,70,117,222,231,0,195,195, + 118,195,195,70,222,195,236,143,240,224,143,0,195,224,236,0, + 0,100,195,0,224,224,195,0,231,55,195,195,238,224,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,80,195,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,48,146,196, + 63,63,195,106,195,192,196,181,33,218,171,171,134,218,196,79, + 51,168,168,168,168,200,70,59,51,231,51,155,0,155,0,0, + 0,118,118,80,118,118,0,0,0,0,0,0,155,0,0,0, + 0,0,0,0,0,13,126,222,143,222,181,236,0,0,236,117, + 165,195,236,236,246,195,118,165,0,0,100,0,195,224,79,0, + 165,224,195,195,224,71,195,165,79,231,165,0,79,224,195,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,195,195,0,0, + 0,0,195,195,195,195,13,195,13,13,13,13,13,183,33,71, + 63,161,118,63,195,161,55,132,218,98,41,171,219,200,69,142, + 118,0,0,0,51,18,70,80,51,168,155,0,80,51,0,0, + 0,118,233,118,80,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,118,143,70,165,118,195,155,195,195,165,100, + 71,195,70,236,33,195,13,236,118,118,165,70,236,51,79,118, + 224,165,70,114,143,222,118,224,196,79,224,118,79,143,114,70, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,195,13,13,114,114,13,13,13,13,118,13,63,24,42, + 63,246,195,106,195,246,243,33,24,189,171,218,134,189,243,222, + 195,224,195,196,42,135,55,55,79,233,233,0,0,155,0,118, + 116,236,222,155,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,195,195,195,118,70,70,195,0,195,13,33,84, + 181,195,70,236,106,195,195,165,0,0,165,195,195,155,195,195, + 195,165,0,0,195,195,195,195,70,155,195,0,0,155,0,195, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,195,70,118,195,195,70,70,70,118,13,118,142,33,224, + 63,63,155,79,13,161,126,33,98,208,134,253,134,177,126,126, + 13,195,118,118,59,219,79,71,59,233,0,0,0,0,0,195, + 222,195,233,118,0,0,0,0,0,0,118,0,0,80,0,0, + 0,0,0,0,155,70,195,0,0,0,0,0,80,56,33,84, + 117,118,13,165,24,114,114,13,13,114,236,21,118,13,114,13, + 118,236,236,13,236,70,13,118,118,236,13,118,13,70,114,114, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,195, + 0,0,69,222,246,33,161,246,246,246,106,246,161,183,132,43, + 231,238,80,195,0,63,55,243,146,218,171,171,218,135,243,79, + 114,155,70,59,246,135,224,143,224,80,155,0,0,0,0,0, + 0,0,0,0,0,0,0,0,118,0,0,0,0,0,0,0, + 0,0,0,224,80,118,0,0,0,0,0,195,118,114,69,33, + 243,118,13,165,132,13,97,236,236,174,236,165,129,97,100,97, + 174,100,100,165,174,100,129,129,100,100,100,100,174,240,236,129, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,59,0,0,80,201,0,80,118,118, + 195,192,234,234,234,177,219,123,219,186,177,177,219,200,161,48, + 48,161,63,63,63,192,161,192,14,192,14,142,142,192,231,231, + 168,231,168,231,18,189,224,31,80,155,80,224,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,195,0,195,118, + 13,114,236,13,61,129,165,49,49,129,129,174,97,100,100,243, + 83,83,131,83,83,83,69,83,83,83,83,83,83,83,100,236, + 0,0,0,0,0,0,118,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,118,118,80,251,108,178,155,168,0, + 201,31,160,145,145,145,219,123,177,123,145,123,200,220,186,7, + 186,186,7,186,186,203,160,160,178,200,160,161,203,160,178,161, + 161,192,192,14,168,231,142,168,42,42,168,42,201,118,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,195,0,0,195, + 100,100,69,83,69,83,69,83,46,46,46,46,83,83,46,46, + 46,46,46,46,83,83,46,46,121,46,46,83,46,46,83,46, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,118,118,239,80,118,0,118,220,145,123,220,113, + 251,192,113,123,123,123,123,123,123,186,186,220,203,160,160,161, + 160,160,160,161,161,192,246,246,106,192,246,192,222,106,192,142, + 106,192,142,222,231,168,42,155,155,80,239,80,155,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,118,0,0,0,195, + 236,69,55,31,43,31,31,43,43,42,31,31,43,43,42,42, + 69,69,31,69,69,43,43,181,43,106,43,69,55,55,69,55, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,118,40,31,0,118,192,160,160,189,160, + 160,183,161,161,161,161,161,161,161,113,161,161,106,106,106,106, + 106,142,142,106,106,106,43,106,14,43,43,14,43,43,31,43, + 251,43,251,14,14,251,80,80,155,80,233,155,80,0,0,0, + 118,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,201,118,236,118,236, + 236,240,55,69,69,43,69,69,43,43,69,69,69,43,69,69, + 43,43,43,43,43,181,43,181,43,106,43,43,43,46,69,43, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,80,41,79,181,246,186,189,186, + 219,123,219,219,189,160,160,24,160,189,161,106,106,106,106,106, + 14,106,106,106,106,106,106,43,106,106,142,43,142,43,142,43, + 43,142,243,43,43,42,80,80,118,80,80,80,155,118,0,118, + 155,0,0,0,0,0,0,118,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,69,243,69,71,69, + 71,143,69,201,195,195,97,69,100,69,243,243,69,69,243,69, + 83,69,69,83,240,240,83,240,83,69,131,69,69,69,69,69, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,13,195,118,155,236, + 224,69,71,55,132,246,106,132,246,246,246,222,168,231,168,222, + 192,168,222,222,63,63,63,222,183,135,183,246,246,63,246,246, + 246,63,222,168,231,231,231,42,118,80,118,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,118,100,71,143,71, + 71,143,116,195,0,0,195,165,129,240,100,165,129,100,165,236, + 56,97,236,236,129,240,100,100,100,100,165,97,236,56,21,100, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,195,0,0,0, + 0,0,222,214,113,113,32,171,223,186,113,14,219,32,32,135, + 178,113,160,223,200,200,14,203,145,15,229,32,186,186,123,15, + 32,32,7,113,113,15,32,32,12,12,155,118,0,155,0,0, + 0,0,155,0,0,118,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,195,195,238,70,195, + 118,195,118,0,195,0,118,61,189,189,24,161,251,61,201,201, + 201,55,142,222,142,79,42,118,238,80,201,142,142,31,239,31 + }; +static char hdl_medium_off[] = { + 216,249,249,249,249,249,249,104,104,104,104,104,104,104,104,104, + 104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104, + 104,104,149,104,149,149,5,149,5,5,5,5,5,153,5,153, + 153,153,153,153,144,144,144,144,90,90,144,144,144,144,144,144, + 144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144, + 144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144, + 144,90,90,90,90,5,90,5,5,5,5,5,5,5,5,5, + 5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 216,104,104,104,104,104,104,249,249,249,249,104,104,104,104,104, + 104,104,104,104,104,104,104,104,104,104,104,104,104,104,149,104, + 149,149,104,149,5,104,149,149,149,149,149,149,149,5,149,5, + 5,5,5,5,144,144,144,144,144,144,90,144,144,144,144,144, + 144,144,144,144,144,144,144,144,144,144,144,180,180,180,180,180, + 180,180,180,180,180,144,144,144,144,144,180,180,180,90,90,144, + 144,8,8,90,90,5,153,90,67,67,67,67,5,5,5,5, + 5,4,4,67,5,5,4,5,5,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 207,216,216,216,216,249,249,249,104,104,249,249,249,249,249,249, + 249,216,216,216,216,66,216,66,216,66,66,66,66,249,139,249, + 249,139,104,104,149,149,104,149,149,149,139,149,149,5,149,153, + 180,180,180,149,153,153,153,5,153,144,144,153,90,90,90,90, + 90,144,144,144,144,144,144,144,144,144,90,144,180,180,180,180, + 144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144, + 90,5,90,5,90,5,67,5,67,67,67,67,67,67,67,67, + 67,67,4,67,67,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 207,207,207,207,249,216,216,216,216,216,216,216,216,216,216,216, + 216,249,249,216,216,216,216,104,249,249,249,249,249,216,66,66, + 66,104,139,66,139,139,139,149,104,139,104,139,149,149,149,104, + 149,149,149,153,144,180,149,180,144,180,180,144,144,144,144,144, + 144,90,144,144,144,144,144,144,144,144,144,144,144,144,144,144, + 144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,5, + 90,90,5,153,153,67,67,67,90,67,67,67,67,67,67,4, + 90,4,90,4,90,67,67,67,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 216,249,249,207,249,216,216,207,216,216,216,216,216,216,216,216, + 216,216,216,216,216,216,216,66,216,66,216,66,66,249,249,249, + 66,104,66,66,66,104,139,139,139,139,104,139,149,149,149,139, + 149,149,149,149,149,180,149,149,180,149,149,149,144,153,153,119, + 144,144,90,90,90,90,90,90,144,144,144,144,144,90,90,90, + 90,90,90,90,90,90,5,144,144,144,144,144,90,90,67,90, + 90,153,67,180,67,90,67,67,67,67,67,67,67,90,67,67, + 67,67,67,67,67,67,4,67,67,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 207,207,216,216,207,207,216,216,207,216,216,216,216,216,216,216, + 216,216,216,66,216,66,34,216,216,216,66,216,216,216,66,66, + 66,34,66,66,66,66,66,66,104,104,139,66,88,139,139,149, + 180,149,153,180,149,149,149,180,149,153,153,153,144,144,144,119, + 153,153,153,153,153,90,90,90,90,144,180,153,90,153,153,153, + 90,153,153,90,90,153,90,153,90,90,67,90,90,67,90,67, + 180,180,67,180,180,205,180,205,67,180,180,67,67,67,67,67, + 67,67,67,67,4,4,67,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 207,207,207,216,216,207,216,216,216,216,216,207,34,34,34,216, + 216,216,216,216,216,216,216,66,216,216,216,216,66,216,66,34, + 66,66,66,66,66,66,88,88,88,88,149,139,139,149,139,149, + 139,149,149,149,180,153,180,149,153,153,153,153,149,149,153,119, + 153,153,153,153,153,153,153,180,153,180,90,153,90,90,90,153, + 90,90,153,153,153,153,90,153,180,90,180,153,90,180,153,180, + 180,67,180,180,180,205,180,180,180,180,205,67,205,205,85,67, + 90,4,67,67,67,90,67,67,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 211,211,207,207,207,207,207,216,207,207,207,216,207,252,34,34, + 34,34,207,34,34,34,34,34,34,34,34,34,34,34,216,252, + 34,252,66,66,34,252,88,34,88,88,88,88,88,88,88,88, + 139,144,180,180,149,180,144,180,180,144,153,180,180,180,180,119, + 153,153,180,153,153,153,153,153,180,153,180,153,153,180,180,180, + 180,180,180,153,180,153,180,180,153,180,180,180,180,180,180,67, + 205,180,205,205,205,205,205,205,58,205,205,205,67,67,67,67, + 67,67,90,67,67,67,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 211,211,207,207,207,207,207,207,207,34,207,34,207,207,207,34, + 34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34, + 216,34,34,252,66,216,66,252,66,252,88,88,252,88,252,139, + 139,88,88,88,144,139,180,144,149,144,144,180,149,144,180,119, + 144,180,180,180,180,180,180,153,180,180,180,180,153,153,153,180, + 90,153,180,180,180,180,180,180,180,180,205,67,180,205,205,180, + 205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,85, + 67,67,67,67,67,90,67,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 241,211,211,207,207,207,211,207,34,211,120,34,34,34,120,211, + 120,211,120,211,34,34,207,34,34,34,120,207,34,120,34,34, + 120,120,120,34,34,34,252,34,252,34,252,252,88,252,88,88, + 88,88,88,88,88,180,88,180,180,180,180,144,144,139,144,119, + 180,180,144,144,144,144,144,77,180,144,144,180,180,180,77,180, + 180,77,180,180,205,180,180,205,180,180,180,205,205,180,180,205, + 205,205,205,216,205,205,205,205,205,205,205,205,85,180,67,205, + 67,67,67,67,67,67,4,67,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 241,241,241,211,211,207,211,211,207,207,120,211,120,207,34,211, + 34,207,34,120,120,120,120,120,120,34,120,211,120,120,120,34, + 34,34,120,120,120,34,252,34,252,34,252,252,88,252,252,252, + 88,252,252,252,88,252,252,252,252,88,88,77,88,252,252,119, + 88,77,77,180,180,77,144,144,180,180,144,144,77,180,180,77, + 180,77,77,180,77,205,180,205,77,77,205,205,205,205,180,205, + 205,205,58,58,58,58,58,58,85,205,205,205,205,85,67,205, + 205,67,67,67,67,67,90,67,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5, + 217,241,211,241,241,241,211,211,211,211,211,120,211,211,241,120, + 241,120,241,211,211,120,211,120,211,27,120,120,120,120,120,120, + 120,120,252,120,34,120,120,58,34,252,34,34,120,252,88,252, + 252,144,180,88,252,88,215,157,157,215,157,157,157,157,157,119, + 77,252,77,77,252,77,77,58,252,77,77,77,77,58,58,58, + 58,58,58,58,77,77,58,205,58,77,205,77,58,58,58,205, + 58,205,49,131,131,10,131,157,10,157,49,131,10,49,141,85, + 67,67,67,67,67,67,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 217,92,241,241,211,211,241,241,241,211,211,211,241,120,211,211, + 241,120,241,101,241,27,241,241,211,211,211,120,241,27,27,120, + 120,211,120,101,120,120,120,120,120,120,169,252,119,46,46,46, + 157,83,83,83,215,215,83,157,131,83,83,83,131,83,131,215, + 83,157,46,215,215,46,215,215,215,215,215,215,215,83,83,215, + 83,215,215,215,215,215,215,83,215,215,215,83,157,215,215,83, + 83,83,83,83,100,157,49,83,83,131,100,131,83,131,49,10, + 157,157,10,10,10,10,209,90,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5, + 92,50,241,241,241,241,211,241,241,241,211,241,120,241,241,27, + 241,241,27,241,211,211,211,120,101,241,241,241,211,211,211,241, + 27,101,120,120,120,120,120,120,120,120,120,120,170,64,215,157, + 83,157,10,215,157,131,157,46,157,157,36,100,49,100,46,131, + 157,83,215,157,157,10,83,83,131,100,83,131,157,157,215,131, + 215,157,157,157,83,131,157,215,157,83,157,215,83,49,157,131, + 131,83,157,64,157,131,157,157,131,157,157,131,131,83,157,64, + 157,64,64,64,36,10,141,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,90,4,5, + 217,217,241,92,241,241,241,241,241,241,241,241,241,241,241,241, + 241,241,241,241,241,241,241,241,241,241,27,241,241,241,101,241, + 241,101,101,101,101,101,230,120,120,120,120,101,121,131,99,49, + 129,174,99,49,129,174,99,49,129,174,99,49,129,174,99,49, + 129,174,99,49,129,174,99,49,129,174,99,49,129,174,99,49, + 129,174,99,49,129,174,99,49,129,174,99,49,129,174,99,49, + 129,174,99,49,129,174,99,49,129,174,99,49,129,174,99,49, + 129,174,99,49,129,174,141,67,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,67,67,67,67,4,5, + 248,92,92,241,92,50,241,241,241,50,50,50,241,241,241,241, + 241,241,241,50,50,50,50,241,241,241,241,92,241,92,241,101, + 241,241,241,101,101,101,101,101,230,101,101,120,141,174,10,99, + 174,174,10,99,174,174,10,99,174,174,10,99,174,174,10,99, + 174,174,10,99,174,174,10,99,174,174,10,99,174,174,10,99, + 174,174,10,99,174,174,10,99,174,174,10,99,174,174,10,99, + 174,174,10,99,174,174,10,99,174,174,10,99,174,174,10,99, + 174,174,10,99,174,174,141,90,67,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,90,67,67, + 179,179,217,50,92,92,50,50,92,241,50,50,50,92,50,50, + 92,50,92,50,92,50,50,92,92,92,241,92,241,92,92,50, + 50,50,50,101,241,101,101,101,101,101,101,101,170,131,49,26, + 97,13,49,26,97,13,49,26,97,13,49,26,97,13,49,26, + 97,13,49,26,97,13,49,26,97,13,49,26,97,13,49,26, + 97,13,49,26,97,13,49,26,97,13,49,26,97,13,49,26, + 97,13,49,26,97,13,49,26,97,13,49,26,97,13,49,26, + 97,13,49,26,97,97,141,67,4,67,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,67,4,90,4,5,5,5,5, + 182,217,217,217,92,92,92,217,50,217,92,92,92,217,92,92, + 50,217,50,92,50,217,92,92,92,217,92,217,92,50,217,92, + 92,92,92,92,92,92,50,92,101,50,101,101,204,174,143,99, + 129,97,243,194,129,97,243,194,129,97,243,194,129,97,243,194, + 129,97,243,194,129,97,243,194,129,97,243,194,129,97,243,194, + 129,97,243,194,129,97,243,194,129,97,243,194,129,97,243,194, + 129,97,243,194,129,97,243,194,129,97,243,194,129,97,243,194, + 129,97,243,194,129,97,141,4,67,67,4,4,4,4,4,4, + 4,206,4,4,4,4,4,67,4,67,67,67,67,5,5,67, + 72,179,217,179,217,217,92,217,217,217,217,217,217,217,217,217, + 217,50,217,217,217,50,217,159,217,50,217,50,217,92,92,92, + 217,92,217,92,92,167,92,217,92,167,92,50,204,49,21,21, + 97,97,97,21,97,97,97,21,97,97,97,21,97,97,97,21, + 97,97,97,21,97,97,97,21,97,97,97,21,97,97,97,21, + 97,97,97,21,97,97,97,21,97,97,97,21,97,97,97,21, + 97,97,97,21,97,97,97,21,97,97,97,21,97,97,97,21, + 97,97,97,114,21,97,141,67,67,67,67,67,4,67,4,206, + 4,4,206,4,5,5,5,4,5,4,5,4,67,67,5,67, + 182,248,248,217,179,217,217,217,217,217,217,217,217,217,217,217, + 217,217,217,50,217,217,217,217,217,217,217,217,217,39,217,217, + 217,217,39,217,217,217,217,167,92,217,50,167,119,174,97,21, + 97,174,97,97,97,174,97,97,97,174,97,97,97,174,97,97, + 97,174,97,97,97,174,97,97,97,174,97,97,97,174,97,97, + 97,174,97,97,97,174,97,97,97,174,97,97,97,174,97,97, + 97,174,97,97,97,174,97,97,97,174,97,97,97,174,97,97, + 97,97,97,97,97,97,141,67,67,67,4,4,67,4,67,4, + 67,67,4,67,4,67,5,67,67,67,67,67,4,5,67,5, + 72,182,182,248,248,248,248,217,179,179,179,248,248,248,248,179, + 248,179,248,179,179,248,248,217,248,248,179,179,179,248,179,179, + 179,179,179,39,179,179,179,217,217,39,92,92,170,129,13,13, + 13,114,13,13,13,114,13,13,13,114,13,13,13,114,13,13, + 13,114,13,13,13,114,13,13,13,114,13,13,13,114,13,13, + 13,114,13,13,13,114,13,13,13,114,13,13,13,114,13,13, + 13,114,13,13,13,114,13,13,13,114,13,13,13,114,13,13, + 13,114,13,13,13,114,141,67,67,67,67,67,67,67,67,4, + 4,67,4,67,5,67,5,5,5,4,4,67,67,4,206,67, + 228,247,248,248,182,248,248,72,248,248,248,248,179,179,179,248, + 248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248, + 248,248,248,248,248,179,39,248,217,179,167,217,170,174,10,49, + 129,174,99,49,129,174,99,49,129,174,99,49,129,174,99,49, + 129,174,99,49,129,174,99,49,129,174,99,49,129,174,99,49, + 129,174,99,49,129,174,99,49,129,174,99,49,129,174,99,49, + 129,174,99,49,129,174,99,49,129,174,99,49,129,174,99,49, + 129,174,10,49,174,174,141,67,67,67,67,67,67,67,67,67, + 67,4,67,5,67,5,67,67,67,67,67,67,67,85,67,67, + 72,228,182,72,182,72,248,248,248,248,182,248,72,248,248,248, + 248,248,248,248,72,248,72,248,248,248,248,248,182,72,52,242, + 72,242,52,179,127,242,179,127,179,226,248,167,84,174,10,49, + 174,13,10,49,174,13,10,49,174,13,10,49,174,13,10,49, + 174,13,10,49,174,13,10,49,174,13,10,49,174,13,10,49, + 174,13,10,49,174,13,10,49,174,13,10,49,174,13,10,49, + 174,13,10,49,174,13,10,49,174,13,10,49,174,13,10,49, + 174,13,10,10,174,174,141,67,47,67,67,67,67,67,67,206, + 67,4,67,5,67,67,67,67,206,67,67,85,67,67,67,67, + 185,72,247,72,72,72,72,72,72,72,248,72,182,72,72,72, + 72,72,72,72,248,72,72,72,72,72,72,72,72,72,182,52, + 72,72,72,72,242,248,52,242,248,52,242,242,204,174,194,26, + 49,174,194,26,49,174,194,26,49,174,194,26,49,174,194,26, + 49,174,194,26,49,174,194,26,49,174,194,26,49,174,194,26, + 49,174,194,26,49,174,194,26,49,174,194,26,49,174,194,26, + 49,174,194,26,49,174,194,26,49,174,194,26,49,174,194,26, + 49,174,194,129,129,97,141,67,67,67,67,67,67,67,85,67, + 206,67,67,67,206,67,67,206,67,67,67,67,67,85,67,85, + 185,72,72,72,72,72,72,72,72,72,72,72,228,228,182,72, + 72,72,72,228,228,72,228,72,162,72,162,72,72,72,72,72, + 72,72,72,52,162,182,72,162,242,72,127,242,84,97,194,26, + 56,97,26,26,56,97,26,26,56,97,26,26,56,97,26,26, + 56,97,26,26,56,97,26,26,56,97,26,26,56,97,26,26, + 56,97,26,26,56,97,26,26,56,97,26,26,56,97,26,26, + 56,97,26,26,56,97,26,26,56,97,26,26,56,97,26,26, + 56,13,194,26,174,97,141,47,85,67,85,67,85,67,67,67, + 85,67,206,5,5,4,5,67,206,85,67,67,67,67,67,85, + 247,247,72,247,72,247,72,72,72,228,228,72,72,72,228,228, + 228,228,228,72,72,162,72,228,72,228,72,72,72,228,162,162, + 162,72,228,162,72,162,162,72,52,72,72,52,170,97,97,13, + 97,97,174,13,97,97,174,13,97,97,174,13,97,97,174,13, + 97,97,174,13,97,97,174,13,97,97,174,13,97,97,174,13, + 97,97,174,13,97,97,174,13,97,97,174,13,97,97,174,13, + 97,97,174,13,97,97,174,13,97,97,174,13,97,97,174,13, + 174,174,174,13,21,21,141,67,47,67,67,67,67,67,85,67, + 67,206,67,67,206,67,206,67,67,67,67,67,67,67,85,67, + 173,247,72,247,182,247,228,247,182,182,228,228,228,72,72,72, + 72,72,228,228,228,228,162,228,228,228,162,228,162,228,162,228, + 228,162,228,228,162,162,162,162,72,72,72,162,33,174,129,97, + 97,97,129,97,97,97,129,97,97,97,129,97,97,97,129,97, + 97,97,129,97,97,97,129,97,97,97,129,97,97,97,129,97, + 97,97,129,97,97,97,129,97,97,97,129,97,97,97,129,97, + 97,97,129,97,97,97,129,97,97,97,129,97,97,174,129,97, + 97,174,129,97,174,174,141,205,85,47,47,67,67,67,85,67, + 67,139,85,85,205,85,206,85,67,85,67,67,47,67,67,85, + 185,247,247,72,247,72,182,247,228,247,72,228,228,228,228,247, + 228,228,228,228,228,228,228,162,228,162,173,228,228,228,173,162, + 173,228,162,173,173,173,173,173,94,173,162,162,84,97,13,13, + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, + 13,114,13,70,13,114,141,58,85,85,85,47,85,85,67,85, + 85,206,67,206,139,67,85,67,67,85,67,85,67,85,85,85, + 185,247,247,247,247,247,247,247,72,247,228,228,228,228,173,173, + 185,228,228,228,228,173,173,228,173,228,173,210,173,173,173,228, + 173,173,228,228,173,173,210,173,210,173,162,210,84,174,99,49, + 129,174,10,49,129,174,10,49,129,174,10,49,129,174,10,49, + 129,174,10,49,129,174,10,49,129,174,10,49,129,174,10,49, + 129,174,10,49,129,174,10,49,129,174,10,49,129,174,10,49, + 129,174,10,49,129,174,10,49,129,174,99,49,129,174,10,49, + 174,174,49,49,174,174,141,58,85,47,85,47,85,85,85,85, + 85,85,85,139,85,85,85,85,85,47,67,47,85,47,85,47, + 185,247,247,72,247,72,247,228,247,228,247,228,185,185,228,228, + 228,173,185,173,173,228,173,173,173,173,173,228,173,173,210,173, + 173,173,173,173,173,173,173,23,173,150,23,173,84,174,10,49, + 174,174,10,49,174,174,10,49,174,174,10,49,174,174,10,49, + 174,174,10,49,174,174,10,49,174,174,10,49,174,174,10,49, + 174,174,10,49,174,174,10,49,174,174,10,49,174,174,10,49, + 174,174,10,49,174,174,10,49,174,174,10,49,174,174,10,99, + 129,174,10,49,129,174,141,58,47,47,85,47,47,47,85,85, + 85,85,85,85,252,85,85,47,85,85,47,85,47,85,85,85, + 235,247,247,247,247,247,247,247,247,247,185,173,173,185,185,185, + 173,173,185,185,185,173,185,185,173,173,185,173,173,185,190,210, + 173,23,173,173,23,190,150,190,23,173,65,190,84,129,194,26, + 174,13,83,26,174,13,83,26,174,13,83,26,174,13,83,26, + 174,13,83,26,174,13,83,26,174,13,83,26,174,13,83,26, + 174,13,83,26,174,13,83,26,174,13,83,26,174,13,83,26, + 174,13,83,26,174,13,83,26,174,174,194,26,174,13,194,99, + 97,174,26,49,97,97,119,47,47,47,47,47,85,47,47,47, + 47,47,47,252,207,85,85,47,47,47,85,85,47,47,47,47, + 130,235,247,247,247,247,247,247,247,247,247,247,247,247,185,185, + 185,185,173,185,185,185,185,185,185,185,185,185,185,173,185,185, + 150,173,190,23,150,190,190,190,150,190,150,173,98,236,194,194, + 129,97,194,194,129,97,194,194,129,97,194,194,129,97,194,194, + 129,97,194,194,129,97,194,194,129,97,194,194,129,97,194,194, + 129,97,194,194,129,97,194,194,129,97,194,194,129,97,194,194, + 129,97,194,194,129,97,194,194,129,13,194,194,129,174,194,129, + 129,21,194,26,56,97,141,58,58,47,47,47,47,47,47,47, + 47,47,47,47,47,47,47,47,47,47,47,47,58,47,47,47, + 130,235,130,247,235,247,247,235,247,247,235,235,185,247,185,247, + 247,235,185,185,185,185,185,185,185,190,185,185,198,185,190,185, + 185,185,65,23,190,190,150,23,190,150,23,190,84,174,97,21, + 97,21,97,21,97,21,97,21,97,21,97,21,97,21,97,21, + 97,21,97,21,97,21,97,21,97,21,97,21,97,21,97,21, + 97,21,97,21,97,21,97,21,97,21,97,21,97,21,97,21, + 97,21,97,21,97,21,97,21,97,174,97,21,21,13,174,114, + 97,21,21,114,21,97,119,58,27,58,47,47,27,47,47,47, + 47,47,47,47,27,47,47,47,47,47,47,47,27,27,27,47, + 130,130,130,247,247,235,235,235,235,247,235,247,247,235,235,235, + 235,185,185,185,185,185,185,185,185,235,185,185,235,185,185,185, + 150,150,190,185,150,190,190,150,150,190,150,190,84,174,97,21, + 97,174,97,21,97,174,97,21,97,174,97,21,97,174,97,21, + 97,174,97,21,97,174,97,21,97,174,97,21,97,174,97,21, + 97,174,97,21,97,174,97,21,97,174,97,21,97,174,97,21, + 97,174,97,21,97,174,97,21,97,174,174,97,174,174,165,97, + 97,174,56,97,97,97,141,58,27,27,27,27,47,27,27,27, + 47,27,27,27,47,27,47,27,47,27,27,27,47,47,47,27, + 130,247,247,235,235,247,235,247,235,247,130,130,247,235,235,235, + 235,235,175,235,235,235,202,202,198,235,175,198,235,235,150,185, + 185,175,150,185,185,175,185,198,150,150,150,172,84,236,13,13, + 13,114,13,13,13,114,13,13,13,114,13,13,13,114,13,13, + 13,114,13,13,13,114,13,13,13,114,13,13,13,114,13,13, + 13,114,13,13,13,114,13,13,13,114,13,13,13,114,13,13, + 13,114,13,13,13,114,13,70,13,114,13,13,114,13,13,13, + 13,13,13,13,13,114,119,17,58,17,27,27,47,27,47,27, + 27,47,211,27,27,27,47,27,27,27,27,27,27,27,27,27, + 237,237,235,235,247,235,235,247,235,235,247,235,235,235,235,202, + 130,237,235,202,202,175,235,235,235,202,235,235,202,175,235,237, + 237,202,237,237,237,175,237,175,250,237,122,250,98,174,10,49, + 129,174,99,49,129,174,99,49,129,174,99,49,129,174,99,49, + 129,174,99,49,129,174,99,49,129,174,99,49,129,174,99,49, + 129,174,99,49,129,174,99,49,129,174,99,49,129,174,99,49, + 129,174,99,49,129,174,10,49,174,174,194,49,174,174,10,49, + 129,174,10,49,174,174,119,17,27,27,27,27,17,27,17,27, + 27,17,27,27,27,27,27,27,27,27,27,27,27,27,27,27, + 202,202,235,235,130,130,130,130,130,130,130,237,130,202,130,235, + 235,237,130,130,237,237,237,237,237,237,237,237,202,237,175,237, + 237,237,37,237,237,250,237,237,250,237,37,250,98,174,10,49, + 174,174,10,49,174,174,10,49,174,174,10,49,174,174,10,49, + 174,174,10,49,174,174,10,49,174,174,10,49,174,174,10,49, + 174,174,10,49,174,174,10,49,174,174,10,49,174,174,10,49, + 174,174,10,49,174,174,10,99,174,174,10,10,129,174,10,49, + 49,13,10,10,174,174,119,17,17,17,17,27,17,27,17,17, + 27,17,27,27,27,17,17,17,17,17,17,17,17,17,17,17, + 202,202,202,202,185,185,198,235,185,185,235,235,235,130,235,237, + 237,235,130,237,130,237,237,237,235,202,175,235,130,202,130,175, + 130,237,237,110,237,237,110,110,110,110,110,110,84,97,194,26, + 49,13,194,26,49,13,194,26,49,13,194,26,49,13,194,26, + 49,13,194,26,49,13,194,26,49,13,194,26,49,13,194,26, + 49,13,194,26,49,13,194,26,49,13,194,26,49,13,194,26, + 49,13,194,26,129,13,49,129,49,13,194,49,174,13,194,26, + 174,174,194,49,129,97,62,68,17,17,17,17,27,17,17,17, + 17,17,17,17,17,27,17,17,27,17,27,17,17,27,17,17, + 202,202,202,202,202,185,202,198,202,198,202,202,198,202,198,235, + 202,202,175,202,175,202,175,250,237,237,250,237,237,237,237,237, + 237,237,237,110,138,138,138,109,109,176,109,176,98,236,194,26, + 165,174,194,26,165,174,194,26,165,174,194,26,165,174,194,26, + 165,174,194,26,165,174,194,26,165,174,194,26,165,174,194,26, + 165,174,194,26,165,174,194,26,165,174,194,26,165,174,194,26, + 165,174,194,26,129,97,194,26,129,174,194,26,129,13,10,194, + 129,13,194,26,97,97,119,68,17,17,17,17,17,17,17,17, + 17,17,17,17,17,27,27,17,17,17,17,17,17,17,17,17, + 244,202,198,198,190,202,198,198,198,198,198,202,202,198,202,198, + 202,202,202,202,202,202,237,202,237,237,237,250,237,250,237,110, + 237,110,110,110,138,138,254,110,254,254,110,254,218,21,174,13, + 97,97,174,13,97,97,174,13,97,97,174,13,97,97,174,13, + 97,97,174,13,97,97,174,13,97,97,174,13,97,97,174,13, + 97,97,174,13,97,97,174,13,97,97,174,13,97,97,174,13, + 97,97,174,13,97,21,174,13,21,97,21,97,174,97,97,97, + 97,97,174,13,97,21,62,17,68,17,17,17,17,17,17,17, + 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17, + 172,202,202,198,198,190,202,202,198,185,198,202,202,202,202,172, + 172,202,172,202,202,202,237,202,202,237,237,250,175,250,250,110, + 237,37,138,122,110,110,158,109,254,158,176,158,98,174,129,97, + 97,174,129,97,97,174,129,97,97,174,129,97,97,174,129,97, + 97,174,129,97,97,174,129,97,97,174,129,97,97,174,129,97, + 97,174,129,97,97,174,129,97,97,174,129,97,97,174,129,97, + 174,174,129,97,174,97,129,97,97,174,97,21,97,97,97,21, + 97,97,129,97,174,174,62,159,68,68,17,17,17,17,17,17, + 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17, + 138,202,202,202,202,202,202,202,202,172,202,202,172,202,172,202, + 202,172,172,172,172,172,172,172,172,172,172,175,172,237,175,122, + 250,250,172,250,78,244,176,244,109,109,109,176,98,13,13,13, + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, + 13,13,13,13,13,114,13,13,13,114,114,13,13,13,70,13, + 13,114,13,70,13,114,28,68,159,17,159,17,17,17,17,17, + 17,17,17,27,17,17,17,17,17,17,17,17,17,17,17,159, + 244,172,202,202,202,202,202,202,237,237,202,237,202,237,202,202, + 237,237,250,250,250,250,250,250,250,237,250,237,172,172,172,172, + 172,175,172,172,244,172,244,244,176,158,109,244,98,49,10,49, + 129,174,10,49,129,174,10,49,129,174,10,49,129,174,10,49, + 129,174,10,49,129,174,10,49,129,174,10,49,129,174,10,49, + 129,174,10,49,129,174,10,49,129,174,10,49,129,174,10,49, + 129,174,194,49,174,174,99,49,174,97,10,49,129,174,49,49, + 174,174,49,49,174,174,119,17,68,17,159,17,17,17,17,17, + 17,17,17,17,17,17,17,17,17,17,17,17,17,159,17,159, + 138,202,202,172,202,202,198,202,202,202,237,202,250,202,237,250, + 202,172,202,237,175,175,237,237,175,172,175,172,250,172,150,172, + 172,172,172,172,172,172,172,244,244,244,244,176,98,97,10,49, + 174,174,10,49,174,174,10,49,174,174,10,49,174,174,10,49, + 174,174,10,49,174,174,10,49,174,174,10,49,174,174,10,49, + 174,174,10,49,174,174,10,49,174,174,10,49,174,174,10,49, + 174,174,10,10,129,174,10,49,129,174,10,10,174,174,10,10, + 129,174,10,49,129,174,62,68,159,68,159,159,159,68,17,159, + 17,17,17,17,17,17,17,68,17,17,68,17,159,17,159,50, + 244,202,190,198,190,202,190,202,190,190,198,198,198,198,198,198, + 198,198,198,172,172,172,198,202,202,172,198,198,202,172,172,172, + 198,190,172,244,244,122,172,244,244,244,244,244,98,97,194,26, + 174,97,194,26,174,97,194,26,174,97,194,26,174,97,194,26, + 174,97,194,26,174,97,194,26,174,97,194,26,174,97,194,26, + 174,97,194,26,174,97,194,26,174,97,194,26,174,97,194,26, + 174,174,129,49,97,97,26,49,97,97,194,26,174,174,194,26, + 174,97,26,49,97,97,62,68,159,68,68,17,159,68,68,68, + 68,68,68,68,68,68,17,68,68,17,68,159,68,159,68,159, + 250,172,202,198,190,190,190,190,190,190,190,190,190,190,190,190, + 190,198,190,190,190,190,190,190,190,190,190,190,190,190,244,198, + 244,172,23,244,172,244,78,244,244,78,244,30,98,236,194,194, + 129,13,194,194,129,13,194,194,129,13,194,194,129,13,194,194, + 129,13,194,194,129,13,194,194,129,13,194,194,129,13,194,194, + 129,13,194,194,129,13,194,194,129,13,194,194,129,13,194,194, + 129,13,243,194,129,13,194,26,129,13,194,49,129,21,194,49, + 56,97,194,26,56,97,62,68,68,159,68,68,68,68,68,68, + 68,68,68,68,68,68,68,68,68,68,68,68,68,68,159,68, + 202,202,190,190,190,173,173,190,190,190,190,190,198,190,190,198, + 190,198,185,173,173,190,190,23,173,190,190,190,190,198,198,244, + 198,172,172,198,244,244,244,244,244,30,244,30,98,97,97,21, + 97,174,174,21,97,174,174,21,97,174,174,21,97,174,174,21, + 97,174,174,21,97,174,174,21,97,174,174,21,97,174,174,21, + 97,174,174,21,97,174,174,21,97,174,174,21,97,174,97,21, + 97,97,97,21,97,174,97,21,97,174,236,21,97,13,97,114, + 21,21,21,114,21,97,62,68,68,68,3,68,68,68,68,68, + 68,3,68,3,3,3,3,68,3,68,68,68,68,68,3,68, + 172,198,185,173,198,190,190,190,198,190,190,190,198,198,172,172, + 172,198,190,190,190,190,190,185,190,198,198,190,172,198,244,244, + 244,172,122,244,244,172,244,244,244,78,30,30,98,21,97,21, + 97,174,97,21,97,174,97,21,97,174,97,21,97,174,97,21, + 97,174,97,21,97,174,97,21,97,174,97,21,97,174,97,21, + 97,174,97,21,97,174,97,21,97,174,97,21,97,174,97,21, + 97,174,56,21,97,97,97,21,97,97,129,21,174,174,165,97, + 97,174,56,97,97,97,62,199,3,3,3,68,3,68,3,89, + 3,3,3,3,3,3,3,89,3,3,3,3,3,3,3,3, + 202,202,202,198,202,202,202,190,202,202,198,198,198,198,198,250, + 250,172,250,250,250,250,244,244,250,110,176,110,176,110,110,110, + 109,176,176,109,176,109,109,109,158,176,109,158,98,236,13,70, + 13,114,13,70,13,114,13,70,13,114,13,70,13,114,13,70, + 13,114,13,70,13,114,13,70,13,114,13,70,13,114,13,70, + 13,114,13,70,13,114,13,70,13,114,13,70,13,114,13,70, + 13,13,13,114,13,114,13,70,13,13,13,13,114,13,13,13, + 13,13,13,13,13,114,98,199,89,3,3,89,89,89,3,89, + 89,89,89,89,89,89,89,89,89,89,89,3,89,3,89,89, + 172,172,202,202,202,202,172,237,202,202,198,190,172,172,237,172, + 172,172,244,244,172,172,172,250,172,244,172,244,244,78,244,244, + 244,244,176,110,176,244,176,176,176,109,109,158,208,129,10,49, + 174,174,10,49,174,174,10,49,174,174,10,49,174,174,10,49, + 174,174,10,49,174,174,10,49,174,174,10,49,174,174,10,49, + 174,174,10,49,174,174,10,49,174,174,10,49,174,174,10,49, + 129,174,10,49,129,174,10,49,174,174,10,49,174,174,10,49, + 129,174,10,49,174,174,208,199,57,199,199,89,89,199,89,89, + 89,89,199,89,89,199,89,89,199,89,89,89,199,199,199,89, + 138,250,237,202,172,237,202,172,172,250,250,202,172,172,172,244, + 244,172,172,244,244,250,172,244,250,244,244,244,244,244,244,244, + 109,244,30,244,109,244,30,244,30,30,158,78,98,97,10,99, + 174,174,10,99,174,174,10,99,174,174,10,99,174,174,10,99, + 174,174,10,99,174,174,10,99,174,174,10,99,174,174,10,99, + 174,174,10,99,174,174,10,99,174,174,10,99,174,174,10,49, + 129,174,10,49,174,174,49,10,49,13,10,10,129,174,10,49, + 49,13,10,10,174,174,169,57,57,57,57,199,57,199,199,57, + 199,199,199,57,199,199,199,57,199,199,57,89,199,199,57,199, + 254,138,138,138,237,250,138,237,138,250,138,110,250,172,244,172, + 172,244,244,172,244,244,244,244,244,244,244,176,176,30,158,176, + 244,109,244,30,244,30,244,158,109,254,176,221,208,236,49,129, + 49,13,129,49,129,13,49,129,49,13,129,49,129,13,49,129, + 49,13,129,49,129,13,49,129,49,13,129,49,129,13,49,129, + 49,13,129,49,129,13,49,129,49,13,129,49,129,13,49,99, + 174,13,129,26,49,13,194,49,174,174,194,49,174,13,194,26, + 174,174,194,49,129,97,208,23,23,57,57,57,199,57,57,57, + 57,57,199,57,57,199,57,199,57,57,57,57,57,57,210,57, + 158,254,138,138,138,138,250,250,138,250,244,244,176,244,244,244, + 244,244,244,244,244,244,244,244,244,244,244,30,244,244,30,158, + 30,158,109,158,158,158,158,221,221,221,158,221,208,236,194,26, + 129,174,194,26,129,97,194,26,129,174,194,26,129,97,194,26, + 129,174,194,26,129,97,194,26,129,174,194,26,129,97,194,26, + 129,174,194,26,129,97,194,26,129,174,194,26,129,97,194,26, + 129,174,194,26,129,174,194,194,56,97,194,26,129,13,10,194, + 129,13,194,26,97,97,169,23,23,23,23,57,57,57,199,57, + 57,57,57,199,199,57,199,57,199,57,57,57,199,57,23,57, + 136,138,244,138,250,138,254,138,138,176,254,138,176,254,254,158, + 254,176,158,176,158,158,176,244,176,176,244,244,176,30,244,244, + 30,244,158,158,158,221,158,158,158,158,107,158,98,165,97,13, + 21,21,97,13,97,21,174,13,21,21,97,13,97,21,174,13, + 21,21,97,13,97,21,174,13,21,21,97,13,97,21,174,13, + 21,21,97,13,97,21,174,13,21,21,97,13,97,97,21,21, + 97,97,174,13,21,21,21,21,174,13,21,97,174,97,97,97, + 97,97,174,13,97,21,163,23,23,23,57,57,199,57,57,199, + 199,199,199,199,199,199,199,199,199,57,57,57,57,57,57,23, + 254,138,172,250,250,250,250,250,138,254,254,136,254,254,254,254, + 158,136,254,254,176,158,158,158,176,176,176,158,254,158,158,254, + 158,158,158,158,158,158,158,158,221,158,158,2,98,100,129,97, + 174,174,129,97,174,97,129,97,174,174,129,97,174,97,129,97, + 174,174,129,97,174,97,129,97,174,174,129,97,174,97,129,97, + 174,174,129,97,174,97,129,97,174,174,129,97,97,174,97,21, + 97,97,129,97,97,174,97,21,174,174,174,97,97,97,97,21, + 97,97,129,97,174,174,169,23,23,23,57,57,199,199,199,89, + 199,89,89,89,3,89,89,199,3,89,3,199,199,199,199,199, + 244,172,172,250,172,172,172,250,244,250,176,176,254,158,254,158, + 254,176,254,254,254,254,136,254,158,158,158,176,158,158,176,30, + 176,78,244,78,78,158,30,30,30,30,2,158,208,21,13,13, + 13,114,13,13,13,114,13,13,13,114,13,13,13,114,13,13, + 13,114,13,13,13,114,13,13,13,114,13,13,13,114,13,13, + 13,114,13,13,13,114,13,13,13,114,13,13,13,13,114,13, + 13,13,13,13,13,114,114,13,70,114,70,13,13,13,70,13, + 13,114,13,70,13,114,245,57,57,199,199,3,89,89,3,89, + 3,3,3,3,3,3,3,3,3,89,3,89,89,89,89,199, + 244,244,172,172,244,244,244,172,244,244,244,244,176,254,254,254, + 158,158,158,158,254,158,254,136,136,136,158,254,254,158,158,221, + 158,158,221,158,158,158,2,158,2,158,2,2,208,236,194,49, + 174,174,194,49,174,174,194,49,174,174,194,49,174,174,194,49, + 174,174,194,49,174,174,194,49,174,174,194,49,174,174,194,49, + 174,174,194,49,174,174,194,49,174,174,194,49,129,174,194,49, + 129,174,10,49,174,13,10,49,174,174,99,49,129,174,49,49, + 174,174,49,49,174,174,169,57,199,199,3,89,3,3,3,3, + 68,3,68,68,3,68,68,3,68,3,3,3,3,3,3,89, + 244,172,187,244,244,187,30,244,158,187,30,244,244,244,244,244, + 244,244,244,244,158,176,30,30,30,30,176,158,158,158,158,176, + 158,158,158,158,158,158,158,221,158,2,158,30,208,236,10,10, + 129,174,10,99,49,174,10,10,129,174,10,99,49,174,10,10, + 129,174,10,99,49,174,10,10,129,174,10,99,49,174,10,10, + 129,174,10,99,49,174,10,10,129,174,10,10,174,174,10,10, + 174,174,10,49,49,174,10,49,129,174,10,10,174,174,10,10, + 129,174,10,49,129,174,245,89,199,3,3,3,3,3,3,3, + 68,68,68,68,68,68,68,68,68,3,68,68,3,3,3,3, + 30,244,244,20,187,187,133,30,20,20,187,187,187,244,244,244, + 244,244,244,244,30,30,244,244,244,30,30,30,30,176,30,30, + 158,30,30,2,30,2,2,2,30,2,2,158,208,236,129,26, + 174,174,129,26,97,97,129,26,174,174,129,26,97,97,129,26, + 174,174,129,26,97,97,129,26,174,174,129,26,97,97,129,26, + 174,174,129,26,97,97,129,26,174,174,49,26,174,174,49,194, + 174,97,26,26,129,174,26,49,174,97,194,26,174,174,194,26, + 174,97,26,49,97,97,245,199,199,199,3,3,3,68,3,68, + 68,68,68,17,68,68,68,68,68,68,68,68,3,3,3,3, + 187,187,30,187,147,20,147,147,133,133,148,133,187,30,30,158, + 158,158,158,30,30,30,2,2,158,30,158,158,158,2,158,158, + 158,158,2,158,2,158,158,158,158,158,158,2,208,165,243,49, + 129,13,143,49,129,13,243,49,129,13,143,49,129,13,243,49, + 129,13,143,49,129,13,243,49,129,13,143,49,129,13,243,49, + 129,13,143,49,129,13,243,49,129,13,143,194,129,13,143,194, + 129,13,194,49,174,13,194,26,129,13,194,49,129,21,194,49, + 56,97,194,26,56,97,169,199,3,3,3,3,3,68,3,68, + 68,68,68,68,68,68,68,68,68,68,3,3,3,3,3,3, + 158,187,20,133,133,124,91,124,86,86,91,133,187,187,158,158, + 158,187,158,158,158,158,30,158,158,158,30,158,158,2,221,2, + 158,158,158,158,221,221,221,221,221,221,221,2,98,165,21,21, + 97,174,97,21,97,174,21,21,97,174,97,21,97,174,21,21, + 97,174,97,21,97,174,21,21,97,174,97,21,97,174,21,21, + 97,174,97,21,97,174,21,114,97,174,174,21,97,174,97,21, + 97,174,21,114,97,174,97,21,97,174,236,21,97,13,97,114, + 21,21,21,114,21,97,245,199,89,3,3,68,68,68,68,68, + 68,17,68,17,17,17,68,17,68,159,159,159,68,68,226,3, + 187,30,187,148,147,152,232,9,124,232,124,86,133,187,30,30, + 30,244,30,30,30,30,158,30,30,30,158,30,30,158,30,158, + 2,2,2,221,2,2,2,221,221,221,221,2,208,236,165,21, + 97,174,165,97,97,97,56,21,97,174,165,97,97,97,56,21, + 97,174,165,97,97,97,56,21,97,174,165,97,97,97,56,21, + 97,174,165,97,97,97,56,97,97,174,97,21,97,174,174,21, + 97,174,165,97,97,97,97,21,97,97,129,21,174,174,165,97, + 97,174,56,97,97,97,245,242,3,3,3,68,68,68,68,68, + 68,68,17,17,68,17,159,68,159,159,68,68,159,226,68,226, + 187,20,133,147,91,81,213,25,25,213,82,87,24,217,158,244, + 30,30,30,158,244,244,30,30,244,244,158,30,30,30,30,30, + 158,30,30,30,158,158,158,221,2,158,2,2,98,165,13,114, + 13,13,13,114,13,13,13,114,13,13,13,114,13,13,13,114, + 13,13,13,114,13,13,13,114,13,13,13,114,13,13,13,114, + 13,13,13,114,13,13,13,114,13,114,13,70,13,114,13,70, + 13,13,114,114,13,114,13,70,13,13,13,13,114,13,13,13, + 13,13,13,13,13,114,208,3,3,68,3,68,17,68,17,17, + 17,68,68,17,159,17,17,159,159,159,159,159,159,159,159,68, + 148,148,148,148,147,91,16,16,16,54,96,223,18,112,187,187, + 158,158,158,30,158,30,158,244,158,30,244,176,30,158,30,30, + 30,2,2,30,2,2,2,212,221,2,158,2,208,114,99,49, + 49,174,10,49,129,174,99,49,49,174,10,49,129,174,99,49, + 49,174,10,49,129,174,99,49,49,174,10,49,129,174,99,49, + 49,174,10,49,129,174,99,49,129,174,10,49,174,174,10,49, + 129,174,49,49,174,174,10,49,174,174,10,49,174,174,10,49, + 129,174,10,49,174,174,245,242,242,68,68,68,68,159,68,68, + 68,159,159,159,159,159,159,159,159,159,159,68,159,226,159,159, + 187,187,187,20,147,147,151,151,164,53,147,147,148,188,212,212, + 212,212,187,187,187,187,187,2,158,187,158,158,158,158,158,158, + 30,30,2,30,30,30,30,2,2,2,30,2,208,238,10,49, + 129,174,10,49,49,174,10,49,129,174,10,49,49,174,10,49, + 129,174,10,49,49,174,10,49,129,174,10,49,49,174,10,49, + 129,174,10,49,49,174,10,49,174,13,10,10,174,174,10,49, + 49,97,10,99,174,174,49,10,49,13,10,10,129,174,10,49, + 49,13,10,10,174,174,169,89,89,3,3,3,3,3,3,68, + 68,68,68,159,68,68,68,68,68,68,68,3,3,3,242,3, + 187,187,212,212,148,188,133,147,133,29,133,20,133,188,187,212, + 187,187,187,2,221,2,187,2,187,158,2,221,2,221,221,221, + 221,221,158,221,221,221,221,221,221,221,221,221,208,118,129,26, + 174,13,129,26,174,13,129,26,174,13,129,26,174,13,129,26, + 174,13,129,26,174,13,129,26,174,13,129,26,174,13,129,26, + 174,13,129,26,174,13,129,26,49,174,129,49,129,13,49,26, + 97,174,129,129,49,13,194,49,174,174,194,49,174,13,194,26, + 174,174,194,49,129,97,169,210,199,89,89,89,3,3,3,3, + 3,3,68,68,68,68,68,3,3,3,3,3,3,89,89,89, + 158,158,187,187,212,188,20,133,133,81,133,188,188,188,187,187, + 187,187,187,2,187,158,158,2,2,187,158,187,2,221,2,158, + 158,221,158,221,221,221,2,2,2,221,221,221,163,238,194,26, + 129,174,194,194,129,174,194,26,129,174,194,194,129,174,194,26, + 129,174,194,194,129,174,194,26,129,174,194,194,129,174,194,26, + 129,174,194,194,129,174,194,26,56,97,194,26,129,97,194,26, + 97,97,194,26,129,174,194,194,56,97,194,26,129,13,10,194, + 129,13,194,26,97,97,169,210,210,89,89,89,89,3,89,3, + 68,3,68,68,68,68,68,68,3,182,3,182,182,3,242,89, + 128,187,187,187,187,188,20,22,20,16,148,148,188,188,188,212, + 221,221,221,212,221,212,212,221,187,2,2,158,158,2,2,2, + 221,2,212,221,2,158,221,221,2,221,30,158,208,118,97,21, + 97,97,97,21,21,97,97,21,97,97,97,21,21,97,97,21, + 97,97,97,21,21,97,97,21,97,97,97,21,21,97,97,21, + 97,97,97,21,21,97,174,13,97,21,97,13,21,21,97,21, + 21,97,174,13,21,21,21,21,174,13,21,97,174,97,97,97, + 97,97,174,13,97,21,169,228,89,89,3,3,3,3,179,3, + 3,3,3,217,68,68,179,3,226,3,3,3,3,242,242,242, + 20,128,187,20,188,188,188,148,20,53,20,188,188,212,212,212, + 212,212,187,212,221,221,221,221,187,187,212,212,2,221,221,2, + 2,158,221,2,2,2,212,221,2,2,2,78,28,70,97,21, + 97,97,97,97,97,97,97,21,97,97,97,97,97,97,97,21, + 97,97,97,97,97,97,97,21,97,97,97,97,97,97,97,21, + 97,97,97,97,97,97,129,97,174,174,129,97,174,97,97,97, + 97,97,129,97,97,174,97,21,174,174,174,97,97,97,97,21, + 97,97,129,97,174,174,169,210,228,89,89,182,3,3,179,3, + 68,68,68,159,68,68,159,68,68,226,226,3,3,3,3,242, + 20,20,20,188,188,148,20,22,148,45,148,148,148,35,188,212, + 188,188,188,221,212,212,212,212,221,221,221,221,221,221,221,221, + 221,212,212,212,212,221,221,2,212,221,2,78,24,55,114,13, + 13,13,114,13,13,13,114,13,13,13,114,13,13,13,114,13, + 13,13,114,13,13,13,114,13,13,13,114,13,13,13,114,13, + 13,13,114,13,13,13,13,13,13,114,13,13,13,13,114,70, + 13,114,13,13,13,114,114,13,70,114,70,13,13,13,70,13, + 13,114,13,70,13,114,13,89,89,3,3,3,179,68,3,68, + 179,159,68,159,159,159,68,226,226,68,3,226,226,3,226,3, + 20,20,128,20,20,20,20,20,148,11,20,35,188,188,188,212, + 212,221,212,221,107,187,221,221,221,221,221,221,221,221,221,221, + 158,158,2,158,2,2,221,2,2,2,2,122,218,132,201,80, + 224,238,42,224,224,224,222,236,70,100,100,165,70,70,165,31, + 70,70,59,142,71,146,71,55,165,100,100,100,71,59,196,55, + 79,165,201,31,42,42,114,165,146,100,224,79,126,126,79,236, + 236,80,70,238,238,42,146,118,236,42,224,236,224,70,236,236, + 70,238,118,118,118,195,129,182,89,3,3,3,179,68,68,68, + 179,159,68,159,159,159,159,159,68,68,226,68,226,3,226,3, + 20,20,20,128,22,188,22,148,188,11,148,148,148,35,35,188, + 188,188,188,188,188,188,107,107,107,107,158,221,158,221,158,158, + 221,221,221,221,221,221,221,158,221,2,158,122,24,24,231,201, + 70,80,201,201,201,238,100,222,33,71,117,224,118,195,243,236, + 100,201,69,201,165,142,143,71,181,224,126,196,224,236,71,71, + 69,100,79,243,69,238,13,240,236,71,126,43,42,46,114,70, + 114,236,13,118,238,13,97,195,155,118,80,42,13,195,13,70, + 236,13,13,70,13,118,69,242,182,242,226,68,68,159,217,159, + 68,68,159,50,50,50,159,159,159,159,68,68,159,68,68,226, + 22,128,20,128,20,22,22,35,188,93,35,35,188,188,188,107, + 188,107,188,221,221,212,221,187,158,107,158,107,158,107,221,221, + 221,158,2,158,221,221,107,158,221,221,158,78,18,171,222,201, + 201,196,222,69,31,201,118,236,33,132,24,83,31,42,71,71, + 79,42,69,236,13,236,143,55,142,14,55,236,224,71,79,146, + 218,46,165,114,165,238,42,165,83,43,146,79,143,100,165,165, + 69,201,118,236,118,238,165,13,143,100,69,224,195,195,13,236, + 165,165,236,70,13,70,121,226,242,226,226,68,68,68,68,159, + 159,159,159,159,159,50,159,159,159,159,159,68,159,68,68,68, + 128,20,128,22,128,22,35,35,107,60,35,107,107,188,107,221, + 221,221,221,221,107,137,107,137,107,107,107,221,107,221,137,221, + 221,107,221,188,158,221,221,107,221,221,221,122,142,231,165,100, + 42,240,55,31,201,31,31,231,69,126,142,79,106,100,142,55, + 100,100,143,243,118,236,100,132,79,42,43,71,69,100,243,24, + 84,33,143,224,201,243,13,13,231,142,69,181,71,236,236,70, + 69,118,195,236,100,97,100,243,236,243,46,129,13,13,13,118, + 100,13,236,126,70,195,100,226,226,226,226,159,159,159,159,159, + 50,50,50,17,50,159,50,50,159,50,159,159,159,159,159,159, + 128,137,137,137,137,137,107,107,221,15,107,107,221,221,107,107, + 107,221,107,221,212,221,221,137,158,107,158,107,158,221,137,137, + 221,137,221,212,107,221,212,107,221,107,212,78,201,71,189,183, + 106,224,118,31,79,231,42,168,142,55,33,142,168,239,100,236, + 165,236,143,100,239,201,100,97,142,70,43,79,42,236,114,118, + 146,126,165,129,61,238,118,14,178,251,42,69,224,165,118,195, + 155,118,97,165,201,80,83,243,46,143,69,97,195,195,195,236, + 238,70,13,129,42,155,143,217,226,159,217,159,159,50,50,50, + 50,159,50,241,27,17,50,50,50,50,50,159,159,159,159,159, + 128,128,128,128,128,128,128,107,254,87,107,107,137,107,107,187, + 221,107,107,107,137,137,107,221,107,158,107,158,107,107,221,221, + 137,221,107,107,221,212,107,221,107,221,107,78,40,168,189,63, + 192,118,201,80,222,251,251,14,196,246,142,142,251,61,61,165, + 240,236,79,100,118,201,236,55,165,224,165,224,143,236,165,165, + 231,69,100,114,118,61,201,59,118,118,31,71,31,240,118,118, + 201,118,69,100,236,118,83,126,165,100,165,201,118,195,61,118, + 118,118,70,240,236,13,71,68,217,159,159,159,50,159,17,17, + 17,241,17,17,50,50,17,17,17,50,50,50,50,50,159,159, + 128,137,137,136,137,137,137,137,254,134,158,137,137,158,137,107, + 137,221,158,137,158,137,137,128,128,128,128,128,107,107,107,107, + 107,107,107,107,128,107,107,107,212,107,188,78,186,231,14,192, + 14,118,61,61,31,201,231,14,196,218,231,231,42,238,42,142, + 55,43,238,142,142,165,165,118,165,79,55,100,165,114,118,236, + 196,31,118,13,0,118,118,69,55,224,21,114,224,224,13,174, + 13,118,100,146,79,79,215,79,13,118,195,236,118,118,236,118, + 0,118,195,69,201,80,165,159,159,159,50,17,17,17,50,17, + 17,241,17,27,27,241,241,17,27,17,17,17,50,50,50,159, + 137,136,254,254,136,136,137,137,176,219,137,137,137,128,128,128, + 107,137,137,254,109,109,137,107,107,107,107,107,107,128,128,107, + 35,107,221,221,107,2,221,212,128,128,128,78,234,48,14,48, + 251,239,201,55,42,40,192,108,63,63,201,142,43,236,243,33, + 24,222,0,143,42,118,42,236,174,55,181,165,165,100,71,100, + 14,224,243,79,21,42,236,79,71,100,194,79,224,236,100,100, + 97,21,21,146,33,70,126,129,79,236,236,118,118,155,236,243, + 61,13,165,165,114,195,71,50,159,17,17,50,27,34,8,141, + 204,170,204,204,204,170,204,204,170,204,204,170,62,144,27,50, + 136,138,138,138,138,138,254,136,254,18,137,137,137,137,137,137, + 137,109,109,254,109,109,110,158,137,107,107,107,107,107,107,137, + 107,107,107,221,107,221,158,221,221,221,107,122,234,135,214,14, + 201,239,168,134,192,146,218,18,31,168,196,42,42,236,79,218, + 98,132,165,155,224,201,24,24,71,14,192,142,114,114,165,224, + 126,165,24,181,114,222,55,181,142,201,71,143,146,126,146,132, + 69,118,114,146,146,194,224,118,118,143,46,100,118,195,114,165, + 201,236,100,100,114,114,126,159,169,144,119,170,204,204,204,204, + 204,204,204,204,204,204,204,204,204,204,204,204,146,204,121,170, + 138,138,138,138,138,138,110,138,138,218,158,254,254,137,137,137, + 136,110,109,110,110,110,109,138,109,137,109,137,137,78,137,221, + 137,107,221,137,107,107,107,221,107,107,107,109,18,48,14,251, + 63,192,183,231,251,31,192,183,108,59,40,40,42,155,70,79, + 117,142,236,236,236,165,236,70,165,165,238,79,142,143,79,117, + 79,114,126,100,236,236,100,71,100,236,118,13,100,165,240,224, + 224,70,70,114,70,71,243,236,70,236,143,165,13,118,13,236, + 118,70,114,165,100,70,243,121,46,121,146,36,215,46,121,121, + 115,121,115,121,115,121,215,121,121,215,121,115,215,121,121,215, + 237,130,130,130,237,110,110,237,110,24,136,254,109,254,109,254, + 109,110,109,109,109,109,109,122,122,109,109,158,137,109,109,78, + 137,78,158,109,109,158,158,109,109,109,109,78,41,231,192,220, + 186,200,108,95,145,192,220,227,227,192,95,193,193,231,192,106, + 106,42,43,142,142,168,142,142,79,231,31,31,31,42,48,31, + 42,231,231,142,55,196,69,55,43,224,69,69,55,42,240,69, + 71,236,240,240,100,224,201,61,240,236,240,69,165,236,240,236, + 236,236,97,240,118,165,215,36,36,36,115,115,36,36,36,131, + 36,36,36,36,131,36,36,36,36,36,36,36,131,36,36,115, + 130,130,130,130,235,130,130,237,130,246,110,110,237,110,254,109, + 176,109,176,109,109,110,110,110,237,109,109,109,78,137,137,137, + 109,137,109,109,137,109,136,158,109,158,158,158,229,106,14,203, + 203,14,178,203,203,14,7,95,193,14,95,225,95,43,161,160, + 161,224,161,161,106,231,146,181,106,142,251,168,251,51,14,40, + 40,79,43,161,142,196,43,43,142,196,31,43,43,143,69,69, + 43,224,69,69,31,236,69,240,42,224,69,69,201,165,240,240, + 236,236,240,97,236,243,157,115,115,115,36,36,36,131,131,36, + 36,36,131,64,36,115,36,131,131,64,36,36,36,131,36,64, + 130,235,140,140,130,130,65,130,65,132,37,237,37,37,37,237, + 250,110,110,110,109,109,109,122,65,237,37,37,37,37,37,122, + 37,122,109,122,122,109,138,109,122,109,122,109,229,246,113,7, + 7,14,192,108,7,231,178,7,95,168,203,7,7,231,192,106, + 106,42,106,14,106,231,106,106,106,79,251,14,161,143,183,142, + 168,231,222,106,142,231,142,42,79,196,55,55,43,59,80,80, + 80,236,69,69,224,201,42,100,42,224,240,224,201,236,236,201, + 236,201,61,236,13,126,215,115,115,115,64,115,64,36,131,64, + 64,64,64,131,131,64,64,64,131,64,131,157,157,64,64,64, + 140,140,140,140,140,140,140,185,65,222,37,37,175,175,175,37, + 37,65,110,109,110,250,37,37,37,37,65,175,65,37,37,37, + 37,122,65,237,122,122,122,122,138,122,122,122,112,183,142,178, + 63,168,168,192,192,168,63,178,200,231,63,63,246,196,142,63, + 106,196,142,142,142,42,222,222,142,42,79,168,168,59,184,222, + 142,224,142,142,142,80,80,155,118,118,42,42,224,0,155,239, + 80,80,100,165,155,118,13,224,240,236,165,114,165,236,236,114, + 236,236,97,118,236,126,215,215,64,64,64,64,64,115,157,131, + 131,64,36,10,64,131,64,64,131,131,10,131,131,64,64,64, + 197,127,140,127,140,140,65,122,140,222,175,185,65,150,150,37, + 122,197,140,65,65,65,235,37,237,65,106,175,173,65,65,37, + 175,167,165,127,37,52,94,122,37,122,37,37,112,183,132,246, + 218,168,222,246,184,183,184,184,184,196,184,132,28,196,117,132, + 132,165,117,117,33,224,98,28,117,42,117,117,132,165,163,28, + 117,236,33,117,117,70,233,59,165,155,79,126,79,0,59,51, + 233,155,224,155,155,0,195,155,143,70,143,143,143,143,79,143, + 194,224,79,243,56,146,115,115,215,64,64,64,157,64,157,10, + 131,64,64,131,64,131,10,36,10,131,64,131,157,64,64,64, + 118,46,253,39,127,140,65,130,94,222,37,65,150,52,65,127, + 0,155,46,230,140,175,172,175,250,94,117,122,65,37,162,94, + 127,224,118,70,208,70,117,162,37,37,37,37,112,200,222,48, + 246,168,222,132,184,168,117,132,102,132,218,117,132,231,222,117, + 132,42,222,222,117,51,84,28,117,51,117,222,117,201,163,28, + 146,116,117,117,117,80,196,155,51,70,117,51,155,80,155,118, + 118,0,116,165,155,118,165,116,155,155,118,165,165,165,143,143, + 100,165,129,143,236,126,46,115,64,215,157,64,64,157,215,131, + 64,157,64,157,131,64,64,115,131,157,64,157,157,157,64,215, + 118,13,146,197,140,140,65,94,183,79,175,98,126,165,103,79, + 0,0,155,146,39,140,140,175,94,63,55,37,98,222,165,103, + 79,70,13,0,195,195,0,70,100,83,117,162,112,218,14,178, + 178,192,192,203,108,192,108,108,108,192,44,44,108,168,192,63, + 14,231,14,168,214,51,14,108,113,79,63,192,48,196,135,63, + 178,79,183,135,102,236,59,0,118,155,239,233,155,0,0,195, + 0,0,42,201,155,59,224,118,118,116,19,51,155,51,19,19, + 51,70,70,70,70,146,83,157,157,157,157,215,157,131,215,49, + 157,157,157,215,131,157,157,215,157,131,157,10,215,10,131,215, + 129,121,149,230,39,127,127,48,192,59,191,80,118,195,236,0, + 0,0,215,149,253,39,52,52,184,63,59,191,155,195,118,236, + 195,0,0,195,195,195,195,0,0,0,70,169,32,135,108,108, + 178,178,74,7,7,178,203,7,7,192,193,95,7,192,63,178, + 14,222,14,214,14,192,178,44,178,222,192,14,192,168,74,178, + 14,222,168,200,48,233,80,118,155,118,166,118,80,155,0,0, + 51,80,118,0,0,155,80,155,233,26,105,19,19,19,75,75, + 19,224,118,118,236,146,146,146,146,146,33,146,132,33,24,24, + 33,33,146,132,33,24,33,33,24,184,33,24,33,246,33,33, + 48,146,119,230,39,39,156,48,192,116,80,155,0,0,0,0, + 0,0,0,84,230,92,217,156,48,192,116,80,155,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,155,171,135,251,44, + 44,178,44,95,203,178,178,203,113,178,178,113,214,14,251,40, + 40,168,14,108,178,192,95,6,113,192,168,40,108,168,102,231, + 12,116,12,32,102,80,155,118,118,118,80,239,61,0,0,0, + 0,155,118,0,0,0,0,118,80,80,155,201,42,224,238,118, + 224,42,201,80,201,146,171,134,134,134,41,41,41,41,229,38, + 38,41,41,41,41,229,38,38,60,60,38,229,229,41,41,41, + 102,100,100,131,115,246,233,116,233,233,0,0,0,195,0,0, + 0,0,195,100,131,215,48,239,116,233,233,0,0,0,195,0, + 0,0,0,0,0,0,0,0,0,0,0,0,18,135,214,44, + 7,178,7,203,203,14,203,113,113,14,178,214,40,168,14,40, + 40,168,251,40,113,192,111,125,203,168,32,103,29,48,152,12, + 40,51,214,32,156,155,155,80,233,0,0,118,0,0,0,0, + 0,0,155,118,0,0,0,0,59,155,0,0,233,42,239,118, + 201,233,61,61,165,146,56,70,195,195,238,0,0,118,238,0, + 195,236,195,0,118,238,0,195,42,42,118,118,201,118,118,0, + 51,13,195,155,80,118,155,0,118,0,118,0,80,0,0,0, + 0,0,0,0,155,155,155,155,0,118,0,118,0,80,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,218,200,251,113, + 203,14,113,203,7,14,108,203,203,168,178,113,14,168,44,193, + 14,251,214,178,14,168,214,214,40,168,192,192,74,51,48,214, + 40,118,155,0,0,0,155,118,0,0,0,0,0,0,0,118, + 118,0,0,0,0,0,118,80,118,0,0,0,118,118,201,80, + 201,155,80,80,233,146,143,70,0,0,69,0,0,201,236,0, + 118,42,195,0,59,236,195,155,222,142,195,195,224,201,0,195, + 118,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,118,0, + 0,0,0,0,0,0,0,0,0,0,0,0,222,63,239,14, + 113,51,231,40,40,40,178,251,14,239,51,251,40,239,102,200, + 40,80,239,40,40,80,239,80,239,80,51,155,80,80,239,233, + 59,80,0,118,80,80,118,80,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,118,0,0,0,0,0,155,118,0,118, + 118,118,118,118,118,142,42,236,195,0,79,195,195,51,224,195, + 70,79,195,195,42,224,195,13,222,222,155,195,224,51,195,195, + 155,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,168,219,200,200, + 108,160,200,186,200,135,74,219,200,123,219,135,219,219,102,219, + 219,177,219,177,219,219,219,219,219,192,63,51,168,178,200,200, + 74,168,155,0,118,118,0,80,155,0,0,0,0,0,195,0, + 0,0,0,0,80,0,80,231,42,118,0,118,168,63,192,106, + 106,106,142,43,55,222,236,70,0,0,143,195,195,143,236,195, + 195,143,195,195,196,201,195,118,222,142,195,195,236,42,195,195, + 80,0,0,0,0,0,118,80,0,0,0,0,0,0,0,0, + 0,0,0,0,118,0,0,118,118,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,51,218,218,218, + 218,183,218,218,183,183,183,63,63,246,106,48,183,189,183,63, + 246,63,246,63,246,200,246,135,102,117,192,80,0,233,168,246, + 192,80,118,118,0,118,118,0,0,0,0,0,0,195,118,0, + 0,0,0,0,0,236,246,184,222,0,0,0,224,142,183,218, + 218,218,18,98,189,134,79,79,71,71,79,142,79,142,117,142, + 222,79,142,79,79,117,222,142,132,132,222,222,117,79,79,142, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,118,118,0,222,196,233, + 168,168,0,196,0,69,236,42,63,48,246,48,48,106,165,51, + 233,118,118,0,51,189,0,233,233,155,155,155,0,0,0,195, + 0,0,0,0,118,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,195,195,0,0,118,155,42,233,155,195,155, + 224,118,236,165,31,79,71,222,132,142,126,246,132,142,218,189, + 24,126,184,246,142,24,18,246,24,24,246,189,189,142,33,246, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,195,114, + 0,0,0,0,0,0,0,0,0,0,0,0,0,63,79,51, + 14,63,0,192,0,196,165,79,246,183,219,171,18,246,69,71, + 0,0,0,0,51,218,155,155,233,233,0,0,155,155,0,118, + 0,155,80,118,155,80,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,195,238,224,195,70,117,222,231,0,195,195, + 118,195,195,70,222,195,236,143,240,224,143,0,195,224,236,0, + 0,100,195,0,224,224,195,0,231,55,195,195,238,224,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,80,195,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,48,146,196, + 63,63,195,106,195,192,196,181,33,218,171,171,134,218,196,79, + 51,168,168,168,168,200,70,59,51,231,51,155,0,155,0,0, + 0,118,118,80,118,118,0,0,0,0,0,0,155,0,0,0, + 0,0,0,0,0,13,126,222,143,222,181,236,0,0,236,117, + 165,195,236,236,246,195,118,165,0,0,100,0,195,224,79,0, + 165,224,195,195,224,71,195,165,79,231,165,0,79,224,195,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,195,195,0,0, + 0,0,195,195,195,195,13,195,13,13,13,13,13,183,33,71, + 63,161,118,63,195,161,55,132,218,98,41,171,219,200,69,142, + 118,0,0,0,51,18,70,80,51,168,155,0,80,51,0,0, + 0,118,233,118,80,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,118,143,70,165,118,195,155,195,195,165,100, + 71,195,70,236,33,195,13,236,118,118,165,70,236,51,79,118, + 224,165,70,114,143,222,118,224,196,79,224,118,79,143,114,70, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,195,13,13,114,114,13,13,13,13,118,13,63,24,42, + 63,246,195,106,195,246,243,33,24,189,171,218,134,189,243,222, + 195,224,195,196,42,135,55,55,79,233,233,0,0,155,0,118, + 116,236,222,155,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,195,195,195,118,70,70,195,0,195,13,33,84, + 181,195,70,236,106,195,195,165,0,0,165,195,195,155,195,195, + 195,165,0,0,195,195,195,195,70,155,195,0,0,155,0,195, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,195,70,118,195,195,70,70,70,118,13,118,142,33,224, + 63,63,155,79,13,161,126,33,98,208,134,253,134,177,126,126, + 13,195,118,118,59,219,79,71,59,233,0,0,0,0,0,195, + 222,195,233,118,0,0,0,0,0,0,118,0,0,80,0,0, + 0,0,0,0,155,70,195,0,0,0,0,0,80,56,33,84, + 117,118,13,165,24,114,114,13,13,114,236,21,118,13,114,13, + 118,236,236,13,236,70,13,118,118,236,13,118,13,70,114,114, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,195, + 0,0,69,222,246,33,161,246,246,246,106,246,161,183,132,43, + 231,238,80,195,0,63,55,243,146,218,171,171,218,135,243,79, + 114,155,70,59,246,135,224,143,224,80,155,0,0,0,0,0, + 0,0,0,0,0,0,0,0,118,0,0,0,0,0,0,0, + 0,0,0,224,80,118,0,0,0,0,0,195,118,114,69,33, + 243,118,13,165,132,13,97,236,236,174,236,165,129,97,100,97, + 174,100,100,165,174,100,129,129,100,100,100,100,174,240,236,129, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,59,0,0,80,201,0,80,118,118, + 195,192,234,234,234,177,219,123,219,186,177,177,219,200,161,48, + 48,161,63,63,63,192,161,192,14,192,14,142,142,192,231,231, + 168,231,168,231,18,189,224,31,80,155,80,224,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,195,0,195,118, + 13,114,236,13,61,129,165,49,49,129,129,174,97,100,100,243, + 83,83,131,83,83,83,69,83,83,83,83,83,83,83,100,236, + 0,0,0,0,0,0,118,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,118,118,80,251,108,178,155,168,0, + 201,31,160,145,145,145,219,123,177,123,145,123,200,220,186,7, + 186,186,7,186,186,203,160,160,178,200,160,161,203,160,178,161, + 161,192,192,14,168,231,142,168,42,42,168,42,201,118,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,195,0,0,195, + 100,100,69,83,69,83,69,83,46,46,46,46,83,83,46,46, + 46,46,46,46,83,83,46,46,121,46,46,83,46,46,83,46, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,118,118,239,80,118,0,118,220,145,123,220,113, + 251,192,113,123,123,123,123,123,123,186,186,220,203,160,160,161, + 160,160,160,161,161,192,246,246,106,192,246,192,222,106,192,142, + 106,192,142,222,231,168,42,155,155,80,239,80,155,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,118,0,0,0,195, + 236,69,55,31,43,31,31,43,43,42,31,31,43,43,42,42, + 69,69,31,69,69,43,43,181,43,106,43,69,55,55,69,55, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,118,40,31,0,118,192,160,160,189,160, + 160,183,161,161,161,161,161,161,161,113,161,161,106,106,106,106, + 106,142,142,106,106,106,43,106,14,43,43,14,43,43,31,43, + 251,43,251,14,14,251,80,80,155,80,233,155,80,0,0,0, + 118,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,201,118,236,118,236, + 236,240,55,69,69,43,69,69,43,43,69,69,69,43,69,69, + 43,43,43,43,43,181,43,181,43,106,43,43,43,46,69,43, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,80,41,79,181,246,186,189,186, + 219,123,219,219,189,160,160,24,160,189,161,106,106,106,106,106, + 14,106,106,106,106,106,106,43,106,106,142,43,142,43,142,43, + 43,142,243,43,43,42,80,80,118,80,80,80,155,118,0,118, + 155,0,0,0,0,0,0,118,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,69,243,69,71,69, + 71,143,69,201,195,195,97,69,100,69,243,243,69,69,243,69, + 83,69,69,83,240,240,83,240,83,69,131,69,69,69,69,69, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,13,195,118,155,236, + 224,69,71,55,132,246,106,132,246,246,246,222,168,231,168,222, + 192,168,222,222,63,63,63,222,183,135,183,246,246,63,246,246, + 246,63,222,168,231,231,231,42,118,80,118,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,118,100,71,143,71, + 71,143,116,195,0,0,195,165,129,240,100,165,129,100,165,236, + 56,97,236,236,129,240,100,100,100,100,165,97,236,56,21,100, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,195,0,0,0, + 0,0,222,214,113,113,32,171,223,186,113,14,219,32,32,135, + 178,113,160,223,200,200,14,203,145,15,229,32,186,186,123,15, + 32,32,7,113,113,15,32,32,12,12,155,118,0,155,0,0, + 0,0,155,0,0,118,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,195,195,238,70,195, + 118,195,118,0,195,0,118,61,189,189,24,161,251,61,201,201, + 201,55,142,222,142,79,42,118,238,80,201,142,142,31,239,31 + }; + +static const HdlInfo hdl_medium = +{ + 144, 108, + 46, 14, + 4, 7, + 256, 8, 255, (char *) hdl_medium_colors, + hdl_medium_on, hdl_medium_off +}; diff --git a/blinkentools-2.9/src/hdl-small.h b/blinkentools-2.9/src/hdl-small.h new file mode 100644 index 0000000..cb9377d --- /dev/null +++ b/blinkentools-2.9/src/hdl-small.h @@ -0,0 +1,814 @@ +#include "hdl.h" + +static char hdl_small_colors[256][3] = { + { 0, 0, 0}, + { 16, 16, 16}, + { 33, 33, 33}, + { 57, 57, 57}, + { 82, 82, 82}, + { 90, 90, 90}, + { 99, 99, 99}, + { 49, 33, 33}, + { 24, 16, 16}, + { 82, 49, 49}, + { 57, 33, 33}, + { 74, 41, 41}, + { 16, 8, 8}, + { 66, 33, 33}, + { 33, 16, 16}, + { 57, 24, 24}, + { 41, 16, 16}, + { 24, 8, 8}, + { 49, 16, 16}, + { 16, 0, 0}, + { 90, 41, 33}, + { 82, 33, 24}, + { 74, 33, 24}, + { 57, 24, 16}, + { 66, 33, 24}, + {140,115,107}, + { 66, 41, 33}, + { 49, 24, 16}, + { 33, 8, 0}, + { 74, 33, 16}, + {107, 90, 82}, + { 74, 57, 49}, + { 66, 49, 41}, + { 33, 16, 8}, + { 57, 41, 33}, + { 66, 33, 16}, + { 90, 41, 16}, + { 82, 33, 8}, + { 57, 33, 16}, + {132, 99, 74}, + { 99, 57, 24}, + {107, 57, 16}, + {198,181,165}, + {107, 90, 74}, + {148,132,115}, + { 49, 41, 33}, + { 74, 66, 57}, + {198,181,156}, + {189,173,148}, + { 49, 49, 41}, + { 24, 24, 8}, + { 8, 16, 8}, + { 8, 33, 8}, + { 8, 49, 8}, + { 0, 8, 8}, + { 8, 24, 33}, + { 0, 8, 33}, + { 74, 90,165}, + { 33, 41, 82}, + { 57, 74,156}, + { 57, 74,165}, + { 49, 66,156}, + { 8, 16, 57}, + { 33, 41, 90}, + { 24, 33, 82}, + { 41, 57,148}, + { 24, 33, 90}, + { 16, 24, 74}, + { 24, 41,140}, + { 24, 41,148}, + { 24, 33, 99}, + { 16, 24, 82}, + { 0, 8, 66}, + { 82, 90,165}, + { 74, 82,165}, + { 66, 74,156}, + { 57, 66,156}, + { 41, 49,132}, + { 24, 33,107}, + { 24, 33,115}, + { 24, 33,123}, + { 16, 24, 99}, + { 8, 16, 82}, + { 49, 57,148}, + { 49, 57,156}, + { 41, 49,148}, + { 41, 49,156}, + { 33, 41,132}, + { 33, 41,140}, + {140,140,189}, + { 24, 24, 33}, + {123,123,173}, + { 33, 33, 49}, + { 16, 16, 24}, + {123,123,189}, + { 41, 41, 66}, + { 90, 90,148}, + {115,115,189}, + { 99, 99,165}, + { 24, 24, 41}, + { 99, 99,173}, + { 99, 99,181}, + { 90, 90,165}, + { 66, 66,123}, + { 90, 90,173}, + { 8, 8, 16}, + { 33, 33, 66}, + { 66, 66,132}, + { 82, 82,165}, + { 24, 24, 49}, + { 16, 16, 33}, + { 74, 74,156}, + { 41, 41, 90}, + { 33, 33, 74}, + { 74, 74,165}, + { 74, 74,173}, + { 66, 66,156}, + { 24, 24, 57}, + { 66, 66,165}, + { 16, 16, 41}, + { 24, 24, 66}, + { 57, 57,156}, + { 41, 41,115}, + { 41, 41,123}, + { 49, 49,148}, + { 49, 49,156}, + { 33, 33,107}, + { 49, 49,165}, + { 41, 41,140}, + { 33, 33,115}, + { 16, 16, 66}, + { 24, 24, 99}, + { 8, 8, 41}, + { 16, 16, 82}, + { 16, 16, 90}, + { 8, 8, 49}, + { 16, 16, 99}, + { 16, 16,107}, + { 8, 8, 74}, + { 8, 8, 82}, + { 0, 0, 8}, + { 0, 0, 16}, + { 0, 0, 24}, + { 0, 0, 33}, + { 0, 0, 41}, + { 0, 0, 49}, + {107, 99,181}, + { 90, 82,165}, + { 90, 82,173}, + { 82, 74,173}, + {115,107,173}, + {123,115,189}, + {115,107,181}, + {107, 99,173}, + { 90, 82,148}, + { 99, 90,165}, + { 99, 90,173}, + { 74, 66,132}, + { 33, 24, 99}, + { 16, 8, 74}, + {140,132,189}, + {132,123,189}, + { 82, 74,132}, + { 74, 66,123}, + { 57, 49,107}, + { 24, 16, 74}, + { 16, 8, 66}, + {123,115,165}, + {107, 99,148}, + { 99, 90,148}, + { 82, 74,123}, + { 57, 49, 99}, + { 66, 57,115}, + { 41, 33, 82}, + { 16, 8, 57}, + {115,107,148}, + {115, 99,181}, + { 49, 41, 82}, + { 90, 74,156}, + { 99, 82,173}, + { 41, 33, 74}, + { 90, 74,165}, + { 24, 16, 57}, + { 16, 8, 49}, + {115, 99,173}, + {107, 90,173}, + { 99, 82,165}, + { 66, 49,132}, + {107, 90,165}, + {140,132,165}, + {123,115,148}, + { 74, 66, 99}, + { 57, 49, 82}, + { 49, 41, 74}, + { 99, 82,148}, + { 90, 74,140}, + { 41, 33, 66}, + { 82, 66,132}, + { 24, 16, 49}, + { 16, 8, 41}, + { 8, 0, 33}, + { 33, 24, 57}, + {107, 90,148}, + {148,140,165}, + {140,132,156}, + { 24, 16, 41}, + { 16, 8, 33}, + {132,123,148}, + { 49, 33, 74}, + { 66, 49, 90}, + { 24, 16, 33}, + { 49, 33, 66}, + { 24, 8, 41}, + { 74, 66, 82}, + { 16, 8, 24}, + { 66, 57, 74}, + { 33, 8, 49}, + { 57, 41, 66}, + { 24, 8, 33}, + { 66, 49, 74}, + { 49, 33, 57}, + { 41, 24, 49}, + { 33, 16, 41}, + { 74, 66, 74}, + { 41, 33, 41}, + { 33, 24, 33}, + { 57, 41, 57}, + { 49, 33, 49}, + { 24, 16, 24}, + { 41, 24, 41}, + { 57, 33, 57}, + { 16, 8, 16}, + { 49, 24, 49}, + { 33, 16, 33}, + { 41, 16, 41}, + { 8, 0, 8}, + { 57, 33, 49}, + { 41, 24, 33}, + {181,165,173}, + {156,140,148}, + { 57, 41, 49}, + { 49, 33, 41}, + { 57, 24, 41}, + { 24, 8, 16}, + { 49, 16, 33}, + { 66, 49, 57}, + { 66, 33, 49}, + { 33, 16, 24}, + { 82, 41, 57}, + { 49, 24, 33}, + { 66, 41, 49}, + { 74, 41, 49}, + { 66, 33, 41}, + { 90, 49, 57}, + { 82, 41, 49}, + {255,255,255} + }; +static char hdl_small_on[] = { + 127,125,86,86,86,86,85,85,85,85,85,85,85,85,85,85, + 85,85,85,128,128,128,128,128,128,88,88,88,88,88,87,87, + 87,87,87,87,87,87,87,87,87,87,87,87,87,88,88,88, + 88,88,88,88,88,88,88,88,88,88,88,88,68,68,68,68, + 69,69,69,69,69,69,69,69, + 127,127,125,125,125,125,125,124,124,124,85,85,85,85,85,85, + 85,85,85,85,85,85,85,85,85,85,128,128,128,128,128,128, + 85,128,128,128,128,128,128,128,128,128,128,128,128,128,85,85, + 85,128,88,88,88,88,88,88,85,85,85,85,69,68,68,68, + 68,69,68,69,69,69,69,69, + 127,127,125,125,84,125,125,125,124,124,125,124,124,124,124,124, + 124,124,124,124,124,129,126,126,70,126,64,174,166,174,62,81, + 78,78,78,78,70,126,78,126,126,126,126,78,78,78,78,78, + 78,67,62,62,72,62,62,62,131,79,79,131,80,68,68,68, + 68,68,68,68,69,69,69,69, + 121,127,84,84,84,84,84,84,83,83,83,84,83,84,83,124, + 124,124,124,124,124,130,135,135,135,135,135,62,62,144,198,232, + 212,216,212,234,199,132,135,132,135,135,135,221,216,222,222,212, + 234,135,62,62,135,135,135,135,135,145,144,144,134,68,68,68, + 68,68,68,68,68,69,68,68, + 121,121,121,121,121,121,121,121,121,121,121,121,84,121,84,84, + 83,83,83,83,83,138,145,39,31,39,31,39,31,39,31,39, + 31,39,31,39,31,39,31,39,31,39,31,39,31,39,31,39, + 31,39,31,39,31,39,31,39,31,39,31,145,137,88,88,88, + 88,68,68,88,88,69,88,88, + 118,60,60,60,76,121,121,76,121,121,121,121,121,121,121,121, + 121,121,121,121,121,174,143,42,30,42,30,42,30,42,30,42, + 30,42,30,42,30,42,30,42,30,42,30,42,30,42,30,42, + 30,42,30,42,30,42,30,42,30,42,30,144,136,88,88,88, + 88,88,88,68,88,69,88,88, + 118,118,118,118,118,116,116,116,116,116,116,116,116,116,116,116, + 116,116,116,116,116,174,143,223,92,223,92,223,92,223,92,223, + 92,223,92,223,92,223,92,223,92,223,92,223,92,223,92,223, + 92,223,92,223,92,223,92,223,92,223,92,144,81,88,88,88, + 88,88,88,88,88,69,88,88, + 114,118,118,118,118,118,116,116,116,116,116,116,116,116,116,116, + 116,116,116,116,116,174,143,141,142,141,142,141,142,141,142,141, + 142,141,142,141,142,141,142,141,142,141,142,141,142,141,142,141, + 142,141,142,141,142,141,142,141,142,141,142,143,81,88,88,88, + 88,88,88,68,68,69,88,88, + 114,118,118,118,118,118,116,116,116,116,116,116,116,116,116,116, + 116,116,116,116,116,174,143,39,31,39,31,39,31,39,31,39, + 31,39,31,39,31,39,31,39,31,39,31,39,31,39,31,39, + 31,39,31,39,31,39,31,39,31,39,31,143,81,88,88,88, + 88,88,88,68,68,69,88,88, + 115,114,114,114,114,114,114,114,111,111,114,111,111,111,111,111, + 111,116,75,116,116,174,144,42,30,42,30,42,30,42,30,42, + 30,42,30,42,30,42,30,42,30,42,30,42,30,42,30,42, + 30,42,30,42,30,42,30,42,30,42,30,144,81,88,88,88, + 88,88,88,88,88,69,88,69, + 115,114,114,114,114,114,114,114,114,114,114,114,111,111,111,111, + 111,111,111,111,111,183,143,223,92,223,92,223,92,223,92,223, + 92,223,92,223,92,223,92,223,92,223,92,223,92,223,92,223, + 92,223,92,223,92,223,92,223,92,223,92,143,134,88,88,88, + 88,85,88,88,85,69,88,88, + 149,149,114,114,108,108,108,108,108,108,108,108,108,108,108,108, + 108,111,111,108,108,183,142,141,142,141,142,141,142,141,142,141, + 142,141,142,141,142,141,142,141,142,141,142,141,142,141,142,141, + 142,141,142,141,142,141,142,141,142,141,142,143,134,88,88,88, + 88,85,85,85,85,85,88,85, + 149,149,108,108,108,108,108,108,108,108,108,108,108,108,108,108, + 108,108,108,108,108,183,143,39,31,39,31,39,31,39,31,39, + 31,39,31,39,31,39,31,39,31,39,31,39,31,39,31,39, + 31,39,31,39,31,39,31,39,31,39,31,142,71,85,85,85, + 85,85,85,85,85,85,85,85, + 148,149,149,149,108,108,108,108,108,108,108,108,108,108,108,108, + 108,108,108,108,108,183,144,42,30,42,30,42,30,42,30,42, + 30,42,30,42,30,42,30,42,30,42,30,42,30,42,30,42, + 30,42,30,42,30,42,30,42,30,42,30,143,71,85,85,85, + 85,85,85,85,85,85,85,85, + 148,148,148,148,148,148,147,108,108,108,108,108,108,108,108,108, + 108,108,108,108,108,183,143,223,92,223,92,223,92,223,92,223, + 92,223,92,223,92,223,92,223,92,223,92,223,92,223,92,223, + 92,223,92,223,92,223,92,223,92,223,92,142,71,65,65,65, + 65,65,65,85,85,86,85,85, + 148,148,148,148,148,148,148,147,147,147,147,147,147,147,147,147, + 147,147,147,147,147,183,142,141,142,141,142,141,142,141,142,141, + 142,141,142,141,142,141,142,141,142,141,142,141,142,141,142,141, + 142,141,142,141,142,141,142,141,142,141,142,141,71,65,65,65, + 65,65,65,65,65,86,86,86, + 148,148,148,148,179,179,179,179,186,186,179,186,186,179,186,186, + 186,155,155,155,155,198,144,39,31,39,31,39,31,39,31,39, + 31,39,31,39,31,39,31,39,31,39,31,39,31,39,31,39, + 31,39,31,39,31,39,31,39,31,39,31,142,66,83,83,65, + 65,86,86,86,86,86,86,86, + 148,148,148,148,179,179,179,186,186,186,179,179,156,156,156,156, + 156,156,156,156,156,198,144,42,30,42,30,42,30,42,30,42, + 30,42,30,42,30,42,30,42,30,42,30,42,30,42,30,42, + 30,42,30,42,30,42,30,42,30,42,30,142,66,84,84,61, + 61,61,84,84,84,84,84,84, + 148,148,148,148,104,156,156,156,156,156,185,185,185,185,185,185, + 185,185,185,185,185,109,142,223,92,223,92,223,92,223,92,223, + 92,223,92,223,92,223,92,223,92,223,92,223,92,223,92,223, + 92,223,92,223,92,223,92,223,92,223,92,142,66,61,61,61, + 61,61,84,84,84,84,84,84, + 148,148,148,104,104,156,156,156,104,104,156,156,155,156,156,156, + 156,156,98,153,153,109,143,141,142,141,142,141,142,141,142,141, + 142,141,142,141,142,141,142,141,142,141,142,141,142,141,142,141, + 142,141,142,141,142,141,142,141,142,141,142,142,66,61,61,61, + 61,61,61,84,84,84,84,84, + 148,148,179,179,156,156,104,102,102,102,104,104,104,104,102,155, + 156,155,155,156,156,117,62,39,31,39,31,39,31,39,31,39, + 31,39,31,39,31,39,31,39,31,39,31,39,31,39,31,39, + 31,39,31,39,31,39,31,39,31,39,31,143,66,76,76,61, + 61,61,61,61,61,61,61,61, + 148,148,149,149,148,104,104,104,102,104,102,102,102,102,102,102, + 102,102,102,155,155,109,132,42,30,42,30,42,30,42,30,42, + 30,42,30,42,30,42,30,42,30,42,30,42,30,42,30,42, + 30,42,30,42,30,42,30,42,30,42,30,142,64,76,76,76, + 76,76,76,76,76,61,61,61, + 149,149,149,149,148,104,104,104,104,104,156,156,156,156,156,156, + 155,98,98,100,100,109,142,223,92,223,92,223,92,223,92,223, + 92,223,92,223,92,223,92,223,92,223,92,223,92,223,92,223, + 92,223,92,223,92,223,92,223,92,223,92,141,64,59,59,59, + 59,59,59,59,59,60,59,59, + 148,148,148,148,104,104,104,156,156,156,156,156,156,156,156,156, + 188,188,185,185,185,109,200,141,142,141,142,141,142,141,142,141, + 142,141,142,141,142,141,142,141,142,141,142,141,142,141,142,141, + 142,141,142,141,142,141,142,141,142,141,142,141,63,75,75,75, + 75,75,75,75,75,118,118,118, + 156,156,156,156,156,156,104,104,156,156,156,156,156,156,156,156, + 156,100,98,100,100,109,62,39,31,39,31,39,31,39,31,39, + 31,39,31,39,31,39,31,39,31,39,31,39,31,39,31,39, + 31,39,31,39,31,39,31,39,31,39,31,142,112,74,74,74, + 74,74,74,74,74,74,74,74, + 146,185,185,156,156,156,156,156,156,156,156,156,100,100,100,100, + 153,153,153,153,153,109,132,42,30,42,30,42,30,42,30,42, + 30,42,30,42,30,42,30,42,30,42,30,42,30,42,30,42, + 30,42,30,42,30,42,30,42,30,42,30,141,112,73,73,73, + 57,57,74,74,74,74,74,74, + 101,156,156,185,185,185,185,185,153,153,100,100,100,100,100,100, + 100,100,98,100,100,117,56,223,92,223,92,223,92,223,92,223, + 92,223,92,223,92,223,92,223,92,223,92,223,92,223,92,223, + 92,223,92,223,92,223,92,223,92,223,92,141,112,57,57,74, + 74,74,74,74,74,74,74,74, + 104,104,104,104,156,156,153,153,153,153,153,153,153,153,100,100, + 100,100,100,100,100,109,183,141,142,141,142,141,142,141,142,141, + 142,141,142,141,142,141,142,141,142,141,142,141,142,141,142,141, + 142,141,142,141,142,141,142,141,142,141,142,141,63,74,74,74, + 118,118,118,118,75,60,60,60, + 101,101,146,146,100,100,156,100,100,100,100,100,100,100,100,100, + 100,100,98,98,98,109,174,39,31,39,31,39,31,39,31,39, + 31,39,31,39,31,39,31,39,31,39,31,39,31,39,31,39, + 31,39,31,39,31,39,31,39,31,39,31,141,58,75,75,75, + 75,118,60,60,59,60,60,60, + 146,94,89,160,161,97,100,100,100,100,100,100,153,153,153,153, + 153,153,153,153,153,117,200,42,30,42,30,42,30,42,30,42, + 30,42,30,42,30,42,30,42,30,42,30,42,30,42,30,42, + 30,42,30,42,30,42,30,42,30,42,30,141,58,75,75,75, + 75,118,60,59,59,60,60,76, + 152,203,47,48,238,162,155,100,100,100,100,100,100,100,100,100, + 100,153,153,153,153,109,214,223,92,223,92,223,92,223,92,223, + 92,223,92,223,92,223,92,223,92,223,92,223,92,223,92,223, + 92,223,92,223,92,223,92,223,92,223,92,140,58,75,75,59, + 76,76,76,76,76,76,61,76, + 152,91,239,44,25,191,96,146,100,100,100,100,100,100,100,100, + 100,100,98,98,98,109,183,141,142,141,142,141,142,141,142,141, + 142,141,142,141,142,141,142,141,142,141,142,141,142,141,142,141, + 142,141,142,141,142,141,142,141,142,141,142,141,58,75,75,76, + 76,76,76,76,76,60,76,76, + 146,152,94,189,91,151,152,153,153,153,153,153,153,153,153,153, + 153,153,153,153,153,109,174,39,31,39,31,39,31,39,31,39, + 31,39,31,39,31,39,31,39,31,39,31,39,31,39,31,39, + 31,39,31,39,31,39,31,39,31,39,31,141,58,74,74,74, + 118,118,118,118,118,118,60,60, + 146,146,146,204,167,153,153,153,153,153,100,153,153,100,100,100, + 100,100,100,100,100,109,132,42,30,42,30,42,30,42,30,42, + 30,42,30,42,30,42,30,42,30,42,30,42,30,42,30,42, + 30,42,30,42,30,42,30,42,30,42,30,140,112,75,75,75, + 75,118,118,118,118,118,60,118, + 146,152,146,207,150,146,153,153,153,153,153,153,153,153,153,153, + 153,153,153,153,169,205,235,223,92,223,92,223,92,223,92,223, + 92,223,92,223,92,223,92,223,92,223,92,223,92,223,92,223, + 92,223,92,223,92,223,92,223,92,223,92,0,106,75,75,75, + 75,75,75,75,59,59,60,59, + 152,152,152,190,188,152,150,153,153,153,153,153,153,153,153,153, + 153,153,153,153,96,196,235,235,231,105,214,119,205,140,214,214, + 105,214,198,206,206,206,105,206,206,206,231,105,119,110,205,183, + 214,235,235,206,214,235,231,141,105,105,140,0,117,75,75,75, + 75,59,59,59,76,76,76,76, + 152,152,152,175,169,152,153,153,153,153,153,153,153,153,153,153, + 153,153,188,153,169,227,214,105,205,231,12,198,92,218,206,119, + 206,105,105,198,228,206,214,201,113,200,214,105,206,205,119,214, + 214,105,105,214,200,199,206,140,141,200,200,140,58,75,75,76, + 76,76,76,76,76,76,76,76, + 176,176,152,202,169,153,153,153,153,153,153,153,153,153,153,153, + 153,153,188,153,169,214,227,228,235,210,247,93,205,228,231,105, + 206,214,105,199,214,110,206,105,198,200,235,105,33,214,214,105, + 235,105,214,214,183,200,200,0,235,0,200,235,117,76,76,76, + 76,76,76,76,76,76,76,61, + 184,153,176,194,154,184,153,153,153,184,184,153,153,153,153,153, + 153,188,188,150,168,237,247,17,0,231,243,237,210,228,231,210, + 214,110,231,214,205,214,214,214,17,214,140,105,214,105,214,141, + 141,142,182,183,183,214,140,0,235,0,214,140,120,76,76,76, + 76,60,76,76,61,61,61,84, + 185,185,184,195,195,184,184,153,153,153,153,153,153,153,188,188, + 188,188,188,150,169,250,16,231,225,210,92,237,235,105,200,177, + 205,141,214,110,228,222,214,119,205,182,214,119,110,214,119,119, + 110,140,117,119,105,206,200,140,200,105,200,141,58,77,77,77, + 123,123,123,122,129,126,126,158, + 186,186,185,195,195,153,188,188,188,188,188,188,188,188,188,188, + 188,188,188,188,188,221,247,242,13,15,237,40,23,21,228,222, + 214,218,214,199,214,231,214,228,231,210,214,206,214,214,206,214, + 214,105,142,214,105,214,206,105,105,105,142,105,174,138,159,138, + 139,138,139,72,138,138,133,133, + 147,147,179,157,197,185,155,155,155,155,188,184,188,188,188,188, + 188,188,188,188,153,217,18,15,18,23,16,36,35,20,247,249, + 228,237,228,222,228,14,14,14,243,222,228,210,214,214,214,105, + 231,214,206,105,214,214,142,105,142,105,142,214,159,82,82,82, + 82,82,82,138,138,82,138,72, + 181,111,155,162,107,155,155,156,147,156,178,164,178,146,178,155, + 153,155,188,188,188,219,237,247,90,225,93,224,90,222,228,222, + 93,90,99,92,93,210,90,95,110,99,110,235,140,214,214,0, + 0,105,235,0,214,105,200,214,200,214,214,206,165,82,82,133, + 138,138,82,138,138,138,138,138, + 187,181,184,213,163,178,103,172,188,171,214,140,214,173,214,119, + 172,163,103,163,178,219,237,247,247,237,8,10,7,7,210,222, + 228,210,99,221,228,99,90,95,110,222,90,235,235,228,235,0, + 140,235,235,235,235,54,105,214,55,105,214,110,130,72,72,72, + 72,138,138,72,72,72,62,72, + 123,149,170,50,237,235,0,0,2,0,0,0,0,0,0,0, + 0,0,140,140,201,215,23,23,35,35,33,29,35,29,237,16, + 14,33,16,37,237,14,27,38,17,34,45,0,0,28,0,0, + 0,235,0,235,0,51,52,1,53,105,0,110,180,180,180,208, + 193,180,208,193,193,193,211,211, + 62,58,228,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,240,23,22,35,23,14,23,14,33,14,33, + 243,33,24,41,14,46,43,26,19,32,49,0,0,0,0,0, + 0,0,0,0,0,235,0,231,235,105,0,206,210,90,225,225, + 224,225,229,224,225,222,225,224, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,224,16,27,14,16,14,27,14,14,34,10, + 8,16,243,231,243,12,8,14,12,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,235,235,235,0,214,140,140,140,235, + 105,0,105,0,235,140,0,105, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,227,226,227,240,227,226,227,227,240,226,236, + 226,240,226,245,241,231,12,227,237,0,0,0,0,0,0,0, + 0,0,0,231,222,235,0,225,227,227,220,220,205,205,99,222, + 222,210,205,225,210,110,210,222, + 0,0,0,0,0,0,0,140,140,0,0,0,0,0,0,0, + 0,0,0,0,0,8,93,247,231,105,214,247,241,241,210,235, + 0,12,210,235,235,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,235,105,235,228,235,235,105,214,210,110,110,93,210, + 210,210,205,225,210,210,210,222, + 0,0,0,0,0,0,0,0,140,0,0,0,140,140,140,140, + 140,140,141,141,140,225,99,237,228,8,229,92,219,219,222,105, + 12,247,225,235,1,0,235,0,0,0,0,0,0,0,0,0, + 0,0,0,214,205,110,105,0,110,105,105,210,0,141,105,214, + 105,140,93,105,235,140,105,93, + 0,0,0,0,0,0,0,0,235,0,0,0,140,140,141,141, + 141,141,141,140,0,228,92,237,228,8,230,180,192,209,221,214, + 0,231,229,206,235,0,0,140,214,231,0,0,0,0,0,0, + 0,0,0,140,140,140,0,214,173,214,214,210,140,105,140,140, + 140,140,235,140,235,140,140,235, + 0,0,0,0,0,0,0,0,235,0,0,0,0,0,0,231, + 221,221,221,222,229,229,210,8,235,231,229,109,211,217,222,214, + 0,225,227,214,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,235,140,0,0,0,105,198,105,214,110,143,200,200,200, + 132,200,200,132,200,132,132,200, + 0,0,0,0,0,0,0,0,235,0,0,17,249,243,0,237, + 253,254,251,9,9,11,252,252,13,10,10,249,7,249,237,237, + 237,247,228,228,235,231,140,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,206,206,206,199,183,199,183, + 174,174,183,174,183,174,183,183, + 0,0,0,0,0,0,0,0,235,12,12,231,251,248,242,242, + 252,252,246,242,242,244,237,237,237,237,233,233,228,228,228,228, + 210,233,231,0,235,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,235,105,140,214,206,214,214,218,206,206, + 206,212,218,218,206,206,218,206 + }; + +static char hdl_small_off[] = { + 127,125,86,86,86,86,85,85,85,85,85,85,85,85,85,85, + 85,85,85,128,128,128,128,128,128,88,88,88,88,88,87,87, + 87,87,87,87,87,87,87,87,87,87,87,87,87,88,88,88, + 88,88,88,88,88,88,88,88,88,88,88,88,68,68,68,68, + 69,69,69,69,69,69,69,69, + 127,127,125,125,125,125,125,124,124,124,85,85,85,85,85,85, + 85,85,85,85,85,85,85,85,85,85,128,128,128,128,128,128, + 85,128,128,128,128,128,128,128,128,128,128,128,128,128,85,85, + 85,128,88,88,88,88,88,88,85,85,85,85,69,68,68,68, + 68,69,68,69,69,69,69,69, + 127,127,125,125,84,125,125,125,124,124,125,124,124,124,124,124, + 124,124,124,124,124,129,126,126,70,126,64,174,166,174,62,81, + 78,78,78,78,70,126,78,126,126,126,126,78,78,78,78,78, + 78,67,62,62,72,62,62,62,131,79,79,131,80,68,68,68, + 68,68,68,68,69,69,69,69, + 121,127,84,84,84,84,84,84,83,83,83,84,83,84,83,124, + 124,124,124,124,124,130,135,135,135,135,135,62,62,144,198,232, + 212,216,212,234,199,132,135,132,135,135,135,221,216,222,222,212, + 234,135,62,62,135,135,135,135,135,145,144,144,134,68,68,68, + 68,68,68,68,68,69,68,68, + 121,121,121,121,121,121,121,121,121,121,121,121,84,121,84,84, + 83,83,83,83,83,138,145,183,200,183,200,183,200,183,200,183, + 200,183,200,183,200,183,200,183,200,183,200,183,200,183,200,183, + 200,183,200,183,200,183,200,183,200,183,200,145,137,88,88,88, + 88,68,68,88,88,69,88,88, + 118,60,60,60,76,121,121,76,121,121,121,121,121,121,121,121, + 121,121,121,121,121,174,143,174,132,174,132,174,132,174,132,174, + 132,174,132,174,132,174,132,174,132,174,132,174,132,174,132,174, + 132,174,132,174,132,174,132,174,132,174,132,144,136,88,88,88, + 88,88,88,68,88,69,88,88, + 118,118,118,118,118,116,116,116,116,116,116,116,116,116,116,116, + 116,116,116,116,116,174,143,200,200,200,200,200,200,200,200,200, + 200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200, + 200,200,200,200,200,200,200,200,200,200,200,144,81,88,88,88, + 88,88,88,88,88,69,88,88, + 114,118,118,118,118,118,116,116,116,116,116,116,116,116,116,116, + 116,116,116,116,116,174,143,214,142,214,142,214,142,214,142,214, + 142,214,142,214,142,214,142,214,142,214,142,214,142,214,142,214, + 142,214,142,214,142,214,142,214,142,214,142,143,81,88,88,88, + 88,88,88,68,68,69,88,88, + 114,118,118,118,118,118,116,116,116,116,116,116,116,116,116,116, + 116,116,116,116,116,174,143,183,200,183,200,183,200,183,200,183, + 200,183,200,183,200,183,200,183,200,183,200,183,200,183,200,183, + 200,183,200,183,200,183,200,183,200,183,200,143,81,88,88,88, + 88,88,88,68,68,69,88,88, + 115,114,114,114,114,114,114,114,111,111,114,111,111,111,111,111, + 111,116,75,116,116,174,144,174,132,174,132,174,132,174,132,174, + 132,174,132,174,132,174,132,174,132,174,132,174,132,174,132,174, + 132,174,132,174,132,174,132,174,132,174,132,144,81,88,88,88, + 88,88,88,88,88,69,88,69, + 115,114,114,114,114,114,114,114,114,114,114,114,111,111,111,111, + 111,111,111,111,111,183,143,200,200,200,200,200,200,200,200,200, + 200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200, + 200,200,200,200,200,200,200,200,200,200,200,143,134,88,88,88, + 88,85,88,88,85,69,88,88, + 149,149,114,114,108,108,108,108,108,108,108,108,108,108,108,108, + 108,111,111,108,108,183,142,214,142,214,142,214,142,214,142,214, + 142,214,142,214,142,214,142,214,142,214,142,214,142,214,142,214, + 142,214,142,214,142,214,142,214,142,214,142,143,134,88,88,88, + 88,85,85,85,85,85,88,85, + 149,149,108,108,108,108,108,108,108,108,108,108,108,108,108,108, + 108,108,108,108,108,183,143,183,200,183,200,183,200,183,200,183, + 200,183,200,183,200,183,200,183,200,183,200,183,200,183,200,183, + 200,183,200,183,200,183,200,183,200,183,200,142,71,85,85,85, + 85,85,85,85,85,85,85,85, + 148,149,149,149,108,108,108,108,108,108,108,108,108,108,108,108, + 108,108,108,108,108,183,144,174,132,174,132,174,132,174,132,174, + 132,174,132,174,132,174,132,174,132,174,132,174,132,174,132,174, + 132,174,132,174,132,174,132,174,132,174,132,143,71,85,85,85, + 85,85,85,85,85,85,85,85, + 148,148,148,148,148,148,147,108,108,108,108,108,108,108,108,108, + 108,108,108,108,108,183,143,200,200,200,200,200,200,200,200,200, + 200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200, + 200,200,200,200,200,200,200,200,200,200,200,142,71,65,65,65, + 65,65,65,85,85,86,85,85, + 148,148,148,148,148,148,148,147,147,147,147,147,147,147,147,147, + 147,147,147,147,147,183,142,214,142,214,142,214,142,214,142,214, + 142,214,142,214,142,214,142,214,142,214,142,214,142,214,142,214, + 142,214,142,214,142,214,142,214,142,214,142,141,71,65,65,65, + 65,65,65,65,65,86,86,86, + 148,148,148,148,179,179,179,179,186,186,179,186,186,179,186,186, + 186,155,155,155,155,198,144,183,200,183,200,183,200,183,200,183, + 200,183,200,183,200,183,200,183,200,183,200,183,200,183,200,183, + 200,183,200,183,200,183,200,183,200,183,200,142,66,83,83,65, + 65,86,86,86,86,86,86,86, + 148,148,148,148,179,179,179,186,186,186,179,179,156,156,156,156, + 156,156,156,156,156,198,144,174,132,174,132,174,132,174,132,174, + 132,174,132,174,132,174,132,174,132,174,132,174,132,174,132,174, + 132,174,132,174,132,174,132,174,132,174,132,142,66,84,84,61, + 61,61,84,84,84,84,84,84, + 148,148,148,148,104,156,156,156,156,156,185,185,185,185,185,185, + 185,185,185,185,185,109,142,200,200,200,200,200,200,200,200,200, + 200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200, + 200,200,200,200,200,200,200,200,200,200,200,142,66,61,61,61, + 61,61,84,84,84,84,84,84, + 148,148,148,104,104,156,156,156,104,104,156,156,155,156,156,156, + 156,156,98,153,153,109,143,214,142,214,142,214,142,214,142,214, + 142,214,142,214,142,214,142,214,142,214,142,214,142,214,142,214, + 142,214,142,214,142,214,142,214,142,214,142,142,66,61,61,61, + 61,61,61,84,84,84,84,84, + 148,148,179,179,156,156,104,102,102,102,104,104,104,104,102,155, + 156,155,155,156,156,117,62,183,200,183,200,183,200,183,200,183, + 200,183,200,183,200,183,200,183,200,183,200,183,200,183,200,183, + 200,183,200,183,200,183,200,183,200,183,200,143,66,76,76,61, + 61,61,61,61,61,61,61,61, + 148,148,149,149,148,104,104,104,102,104,102,102,102,102,102,102, + 102,102,102,155,155,109,132,174,132,174,132,174,132,174,132,174, + 132,174,132,174,132,174,132,174,132,174,132,174,132,174,132,174, + 132,174,132,174,132,174,132,174,132,174,132,142,64,76,76,76, + 76,76,76,76,76,61,61,61, + 149,149,149,149,148,104,104,104,104,104,156,156,156,156,156,156, + 155,98,98,100,100,109,142,200,200,200,200,200,200,200,200,200, + 200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200, + 200,200,200,200,200,200,200,200,200,200,200,141,64,59,59,59, + 59,59,59,59,59,60,59,59, + 148,148,148,148,104,104,104,156,156,156,156,156,156,156,156,156, + 188,188,185,185,185,109,200,214,142,214,142,214,142,214,142,214, + 142,214,142,214,142,214,142,214,142,214,142,214,142,214,142,214, + 142,214,142,214,142,214,142,214,142,214,142,141,63,75,75,75, + 75,75,75,75,75,118,118,118, + 156,156,156,156,156,156,104,104,156,156,156,156,156,156,156,156, + 156,100,98,100,100,109,62,183,200,183,200,183,200,183,200,183, + 200,183,200,183,200,183,200,183,200,183,200,183,200,183,200,183, + 200,183,200,183,200,183,200,183,200,183,200,142,112,74,74,74, + 74,74,74,74,74,74,74,74, + 146,185,185,156,156,156,156,156,156,156,156,156,100,100,100,100, + 153,153,153,153,153,109,132,174,132,174,132,174,132,174,132,174, + 132,174,132,174,132,174,132,174,132,174,132,174,132,174,132,174, + 132,174,132,174,132,174,132,174,132,174,132,141,112,73,73,73, + 57,57,74,74,74,74,74,74, + 101,156,156,185,185,185,185,185,153,153,100,100,100,100,100,100, + 100,100,98,100,100,117,56,200,200,200,200,200,200,200,200,200, + 200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200, + 200,200,200,200,200,200,200,200,200,200,200,141,112,57,57,74, + 74,74,74,74,74,74,74,74, + 104,104,104,104,156,156,153,153,153,153,153,153,153,153,100,100, + 100,100,100,100,100,109,183,214,142,214,142,214,142,214,142,214, + 142,214,142,214,142,214,142,214,142,214,142,214,142,214,142,214, + 142,214,142,214,142,214,142,214,142,214,142,141,63,74,74,74, + 118,118,118,118,75,60,60,60, + 101,101,146,146,100,100,156,100,100,100,100,100,100,100,100,100, + 100,100,98,98,98,109,174,183,200,183,200,183,200,183,200,183, + 200,183,200,183,200,183,200,183,200,183,200,183,200,183,200,183, + 200,183,200,183,200,183,200,183,200,183,200,141,58,75,75,75, + 75,118,60,60,59,60,60,60, + 146,94,89,160,161,97,100,100,100,100,100,100,153,153,153,153, + 153,153,153,153,153,117,200,174,132,174,132,174,132,174,132,174, + 132,174,132,174,132,174,132,174,132,174,132,174,132,174,132,174, + 132,174,132,174,132,174,132,174,132,174,132,141,58,75,75,75, + 75,118,60,59,59,60,60,76, + 152,203,47,48,238,162,155,100,100,100,100,100,100,100,100,100, + 100,153,153,153,153,109,214,200,200,200,200,200,200,200,200,200, + 200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200, + 200,200,200,200,200,200,200,200,200,200,200,140,58,75,75,59, + 76,76,76,76,76,76,61,76, + 152,91,239,44,25,191,96,146,100,100,100,100,100,100,100,100, + 100,100,98,98,98,109,183,214,142,214,142,214,142,214,142,214, + 142,214,142,214,142,214,142,214,142,214,142,214,142,214,142,214, + 142,214,142,214,142,214,142,214,142,214,142,141,58,75,75,76, + 76,76,76,76,76,60,76,76, + 146,152,94,189,91,151,152,153,153,153,153,153,153,153,153,153, + 153,153,153,153,153,109,174,183,200,183,200,183,200,183,200,183, + 200,183,200,183,200,183,200,183,200,183,200,183,200,183,200,183, + 200,183,200,183,200,183,200,183,200,183,200,141,58,74,74,74, + 118,118,118,118,118,118,60,60, + 146,146,146,204,167,153,153,153,153,153,100,153,153,100,100,100, + 100,100,100,100,100,109,132,174,132,174,132,174,132,174,132,174, + 132,174,132,174,132,174,132,174,132,174,132,174,132,174,132,174, + 132,174,132,174,132,174,132,174,132,174,132,140,112,75,75,75, + 75,118,118,118,118,118,60,118, + 146,152,146,207,150,146,153,153,153,153,153,153,153,153,153,153, + 153,153,153,153,169,205,235,200,200,200,200,200,200,200,200,200, + 200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200, + 200,200,200,200,200,200,200,200,200,200,200,0,106,75,75,75, + 75,75,75,75,59,59,60,59, + 152,152,152,190,188,152,150,153,153,153,153,153,153,153,153,153, + 153,153,153,153,96,196,235,235,231,105,214,119,205,140,214,214, + 105,214,198,206,206,206,105,206,206,206,231,105,119,110,205,183, + 214,235,235,206,214,235,231,141,105,105,140,0,117,75,75,75, + 75,59,59,59,76,76,76,76, + 152,152,152,175,169,152,153,153,153,153,153,153,153,153,153,153, + 153,153,188,153,169,227,214,105,205,231,12,198,92,218,206,119, + 206,105,105,198,228,206,214,201,113,200,214,105,206,205,119,214, + 214,105,105,214,200,199,206,140,141,200,200,140,58,75,75,76, + 76,76,76,76,76,76,76,76, + 176,176,152,202,169,153,153,153,153,153,153,153,153,153,153,153, + 153,153,188,153,169,214,227,228,235,210,247,93,205,228,231,105, + 206,214,105,199,214,110,206,105,198,200,235,105,33,214,214,105, + 235,105,214,214,183,200,200,0,235,0,200,235,117,76,76,76, + 76,76,76,76,76,76,76,61, + 184,153,176,194,154,184,153,153,153,184,184,153,153,153,153,153, + 153,188,188,150,168,237,247,17,0,231,243,237,210,228,231,210, + 214,110,231,214,205,214,214,214,17,214,140,105,214,105,214,141, + 141,142,182,183,183,214,140,0,235,0,214,140,120,76,76,76, + 76,60,76,76,61,61,61,84, + 185,185,184,195,195,184,184,153,153,153,153,153,153,153,188,188, + 188,188,188,150,169,250,16,231,225,210,92,237,235,105,200,177, + 205,141,214,110,228,222,214,119,205,182,214,119,110,214,119,119, + 110,140,117,119,105,206,200,140,200,105,200,141,58,77,77,77, + 123,123,123,122,129,126,126,158, + 186,186,185,195,195,153,188,188,188,188,188,188,188,188,188,188, + 188,188,188,188,188,221,247,242,13,15,237,40,23,21,228,222, + 214,218,214,199,214,231,214,228,231,210,214,206,214,214,206,214, + 214,105,142,214,105,214,206,105,105,105,142,105,174,138,159,138, + 139,138,139,72,138,138,133,133, + 147,147,179,157,197,185,155,155,155,155,188,184,188,188,188,188, + 188,188,188,188,153,217,18,15,18,23,16,36,35,20,247,249, + 228,237,228,222,228,14,14,14,243,222,228,210,214,214,214,105, + 231,214,206,105,214,214,142,105,142,105,142,214,159,82,82,82, + 82,82,82,138,138,82,138,72, + 181,111,155,162,107,155,155,156,147,156,178,164,178,146,178,155, + 153,155,188,188,188,219,237,247,90,225,93,224,90,222,228,222, + 93,90,99,92,93,210,90,95,110,99,110,235,140,214,214,0, + 0,105,235,0,214,105,200,214,200,214,214,206,165,82,82,133, + 138,138,82,138,138,138,138,138, + 187,181,184,213,163,178,103,172,188,171,214,140,214,173,214,119, + 172,163,103,163,178,219,237,247,247,237,8,10,7,7,210,222, + 228,210,99,221,228,99,90,95,110,222,90,235,235,228,235,0, + 140,235,235,235,235,54,105,214,55,105,214,110,130,72,72,72, + 72,138,138,72,72,72,62,72, + 123,149,170,50,237,235,0,0,2,0,0,0,0,0,0,0, + 0,0,140,140,201,215,23,23,35,35,33,29,35,29,237,16, + 14,33,16,37,237,14,27,38,17,34,45,0,0,28,0,0, + 0,235,0,235,0,51,52,1,53,105,0,110,180,180,180,208, + 193,180,208,193,193,193,211,211, + 62,58,228,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,240,23,22,35,23,14,23,14,33,14,33, + 243,33,24,41,14,46,43,26,19,32,49,0,0,0,0,0, + 0,0,0,0,0,235,0,231,235,105,0,206,210,90,225,225, + 224,225,229,224,225,222,225,224, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,224,16,27,14,16,14,27,14,14,34,10, + 8,16,243,231,243,12,8,14,12,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,235,235,235,0,214,140,140,140,235, + 105,0,105,0,235,140,0,105, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,227,226,227,240,227,226,227,227,240,226,236, + 226,240,226,245,241,231,12,227,237,0,0,0,0,0,0,0, + 0,0,0,231,222,235,0,225,227,227,220,220,205,205,99,222, + 222,210,205,225,210,110,210,222, + 0,0,0,0,0,0,0,140,140,0,0,0,0,0,0,0, + 0,0,0,0,0,8,93,247,231,105,214,247,241,241,210,235, + 0,12,210,235,235,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,235,105,235,228,235,235,105,214,210,110,110,93,210, + 210,210,205,225,210,210,210,222, + 0,0,0,0,0,0,0,0,140,0,0,0,140,140,140,140, + 140,140,141,141,140,225,99,237,228,8,229,92,219,219,222,105, + 12,247,225,235,1,0,235,0,0,0,0,0,0,0,0,0, + 0,0,0,214,205,110,105,0,110,105,105,210,0,141,105,214, + 105,140,93,105,235,140,105,93, + 0,0,0,0,0,0,0,0,235,0,0,0,140,140,141,141, + 141,141,141,140,0,228,92,237,228,8,230,180,192,209,221,214, + 0,231,229,206,235,0,0,140,214,231,0,0,0,0,0,0, + 0,0,0,140,140,140,0,214,173,214,214,210,140,105,140,140, + 140,140,235,140,235,140,140,235, + 0,0,0,0,0,0,0,0,235,0,0,0,0,0,0,231, + 221,221,221,222,229,229,210,8,235,231,229,109,211,217,222,214, + 0,225,227,214,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,235,140,0,0,0,105,198,105,214,110,143,200,200,200, + 132,200,200,132,200,132,132,200, + 0,0,0,0,0,0,0,0,235,0,0,17,249,243,0,237, + 253,254,251,9,9,11,252,252,13,10,10,249,7,249,237,237, + 237,247,228,228,235,231,140,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,206,206,206,199,183,199,183, + 174,174,183,174,183,174,183,183, + 0,0,0,0,0,0,0,0,235,12,12,231,251,248,242,242, + 252,252,246,242,242,244,237,237,237,237,233,233,228,228,228,228, + 210,233,231,0,235,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,235,105,140,214,206,214,214,218,206,206, + 206,212,218,218,206,206,218,206 + }; + +static const HdlInfo hdl_small = +{ + 72, 54, + 23, 4, + 2, 4, + 256, 8, 255, (char *) hdl_small_colors, + hdl_small_on, hdl_small_off +}; diff --git a/blinkentools-2.9/src/hdl.h b/blinkentools-2.9/src/hdl.h new file mode 100644 index 0000000..0527ba6 --- /dev/null +++ b/blinkentools-2.9/src/hdl.h @@ -0,0 +1,51 @@ +#ifndef __HDL_H__ +#define __HDL_H__ + +#define BLINKEN_WIDTH 18 +#define BLINKEN_HEIGHT 8 + +typedef enum +{ + IMAGE_PLAIN, + IMAGE_HDL_SMALL, + IMAGE_HDL_MEDIUM, + IMAGE_HDL_LARGE, + IMAGE_HDL_HUGE, + LAST_IMAGE +} ImageType; + +typedef struct +{ + int width; + int height; + int offx; + int offy; + int dx; + int dy; + int ncolors; + int cbits; + int trans; + char *colors; + char *on; + char *off; +} HdlInfo; + + +static char hdl_plain_colors[6] = { 0x0, 0x0, 0x0, 0xFF, 0xFF, 0xFF }; + +static const HdlInfo hdl_plain = +{ + 0, 0, + 0, 0, + 1, 1, + 2, 1, -1, hdl_plain_colors, + NULL, NULL +}; + +#include "hdl-small.h" +#include "hdl-medium.h" +#include "hdl-large.h" +#include "hdl-huge.h" + + +#endif /* __HDL_H__ */