gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r3246 - in GNUnet: . libwebserver libwebserver/contrib libw


From: grothoff
Subject: [GNUnet-SVN] r3246 - in GNUnet: . libwebserver libwebserver/contrib libwebserver/contrib/Win32 libwebserver/contrib/Win32/help libwebserver/contrib/help libwebserver/contrib/tools libwebserver/doc libwebserver/doc/examples libwebserver/doc/examples/SoundRecorder libwebserver/doc/examples/SoundRecorder/include libwebserver/doc/examples/SoundRecorder/src libwebserver/doc/examples/cgi-bin libwebserver/include libwebserver/src
Date: Fri, 18 Aug 2006 14:42:21 -0700 (PDT)

Author: grothoff
Date: 2006-08-18 14:41:52 -0700 (Fri, 18 Aug 2006)
New Revision: 3246

Added:
   GNUnet/libwebserver/
   GNUnet/libwebserver/AUTHORS
   GNUnet/libwebserver/COPYING
   GNUnet/libwebserver/COPYRIGHT
   GNUnet/libwebserver/ChangeLog
   GNUnet/libwebserver/INSTALL
   GNUnet/libwebserver/Makefile.am
   GNUnet/libwebserver/NEWS
   GNUnet/libwebserver/README
   GNUnet/libwebserver/TODO
   GNUnet/libwebserver/config.guess
   GNUnet/libwebserver/config.sub
   GNUnet/libwebserver/configure.ac
   GNUnet/libwebserver/contrib/
   GNUnet/libwebserver/contrib/Win32/
   GNUnet/libwebserver/contrib/Win32/dirent.c
   GNUnet/libwebserver/contrib/Win32/dirent.h
   GNUnet/libwebserver/contrib/Win32/flock.c
   GNUnet/libwebserver/contrib/Win32/flock.h
   GNUnet/libwebserver/contrib/Win32/help/
   GNUnet/libwebserver/contrib/Win32/help/help.cfg
   GNUnet/libwebserver/contrib/Win32/help/help.dsp
   GNUnet/libwebserver/contrib/Win32/help/help.ico
   GNUnet/libwebserver/contrib/Win32/help/help.rc
   GNUnet/libwebserver/contrib/Win32/help/mime.types
   GNUnet/libwebserver/contrib/Win32/help/resource.h
   GNUnet/libwebserver/contrib/Win32/libwebserver.dsp
   GNUnet/libwebserver/contrib/Win32/libwebserver.dsw
   GNUnet/libwebserver/contrib/help/
   GNUnet/libwebserver/contrib/help/engine.h
   GNUnet/libwebserver/contrib/help/examples.h
   GNUnet/libwebserver/contrib/help/functions.h
   GNUnet/libwebserver/contrib/help/help.c
   GNUnet/libwebserver/contrib/help/help.cfg
   GNUnet/libwebserver/contrib/help/info.h
   GNUnet/libwebserver/contrib/help/makeheader.bat
   GNUnet/libwebserver/contrib/help/mime.types
   GNUnet/libwebserver/contrib/help/security.h
   GNUnet/libwebserver/contrib/tools/
   GNUnet/libwebserver/contrib/tools/checkpid
   GNUnet/libwebserver/contrib/tools/data2header.c
   GNUnet/libwebserver/contrib/tools/httptest.pl
   GNUnet/libwebserver/contrib/tools/myvc_install.bat
   GNUnet/libwebserver/contrib/tools/win2unix.sh
   GNUnet/libwebserver/doc/
   GNUnet/libwebserver/doc/examples.html
   GNUnet/libwebserver/doc/examples/
   GNUnet/libwebserver/doc/examples/SoundRecorder/
   GNUnet/libwebserver/doc/examples/SoundRecorder/include/
   GNUnet/libwebserver/doc/examples/SoundRecorder/include/debug.h
   GNUnet/libwebserver/doc/examples/SoundRecorder/include/soundbuffers.h
   GNUnet/libwebserver/doc/examples/SoundRecorder/include/soundcard.h
   GNUnet/libwebserver/doc/examples/SoundRecorder/include/soundmixer.h
   GNUnet/libwebserver/doc/examples/SoundRecorder/src/
   GNUnet/libwebserver/doc/examples/SoundRecorder/src/main.c
   GNUnet/libwebserver/doc/examples/SoundRecorder/src/soundbuffers.c
   GNUnet/libwebserver/doc/examples/SoundRecorder/src/soundcard.c
   GNUnet/libwebserver/doc/examples/SoundRecorder/src/soundmixer.c
   GNUnet/libwebserver/doc/examples/cgi-bin/
   GNUnet/libwebserver/doc/examples/cgi-bin/index.cgi
   GNUnet/libwebserver/doc/examples/cgi-bin/simple.cgi
   GNUnet/libwebserver/doc/examples/cgi-bin/simple1.cgi
   GNUnet/libwebserver/doc/examples/cgi.c
   GNUnet/libwebserver/doc/examples/demo.c
   GNUnet/libwebserver/doc/examples/foo-cert.pem
   GNUnet/libwebserver/doc/examples/packetmounter.c
   GNUnet/libwebserver/doc/functions.html
   GNUnet/libwebserver/doc/info.html
   GNUnet/libwebserver/doc/security.html
   GNUnet/libwebserver/include/
   GNUnet/libwebserver/include/Makefile.am
   GNUnet/libwebserver/include/webserver_gnunet.h
   GNUnet/libwebserver/ltmain.sh
   GNUnet/libwebserver/src/
   GNUnet/libwebserver/src/Makefile.am
   GNUnet/libwebserver/src/client.c
   GNUnet/libwebserver/src/client.h
   GNUnet/libwebserver/src/clientinfo.c
   GNUnet/libwebserver/src/clientinfo.h
   GNUnet/libwebserver/src/config.h
   GNUnet/libwebserver/src/debug.h
   GNUnet/libwebserver/src/error.c
   GNUnet/libwebserver/src/error.h
   GNUnet/libwebserver/src/fnmatch.c
   GNUnet/libwebserver/src/fnmatch.h
   GNUnet/libwebserver/src/gethandler.c
   GNUnet/libwebserver/src/gethandler.h
   GNUnet/libwebserver/src/logo.h
   GNUnet/libwebserver/src/memory.c
   GNUnet/libwebserver/src/memory.h
   GNUnet/libwebserver/src/module.c
   GNUnet/libwebserver/src/module.h
   GNUnet/libwebserver/src/outgif.c
   GNUnet/libwebserver/src/outgif.h
   GNUnet/libwebserver/src/outstream.c
   GNUnet/libwebserver/src/outstream.h
   GNUnet/libwebserver/src/server.c
   GNUnet/libwebserver/src/server.h
   GNUnet/libwebserver/src/socket.c
   GNUnet/libwebserver/src/socket.h
   GNUnet/libwebserver/src/utils.c
   GNUnet/libwebserver/src/utils.h
   GNUnet/libwebserver/src/web_server.h
   GNUnet/libwebserver/src/weblog.c
   GNUnet/libwebserver/src/weblog.h
Modified:
   GNUnet/Makefile.am
   GNUnet/configure.ac
Log:
lws

Modified: GNUnet/Makefile.am
===================================================================
--- GNUnet/Makefile.am  2006-08-18 20:37:47 UTC (rev 3245)
+++ GNUnet/Makefile.am  2006-08-18 21:41:52 UTC (rev 3246)
@@ -1,5 +1,5 @@
 INCLUDES = -I$(top_srcdir)/src/include
-SUBDIRS  = m4 po libltdl src doc contrib
+SUBDIRS  = m4 po libltdl libwebserver src doc contrib
 
 EXTRA_DIST = \
  ABOUT-NLS \

Modified: GNUnet/configure.ac
===================================================================
--- GNUnet/configure.ac 2006-08-18 20:37:47 UTC (rev 3245)
+++ GNUnet/configure.ac 2006-08-18 21:41:52 UTC (rev 3246)
@@ -47,6 +47,7 @@
 AC_PROG_LIBTOOL
 AC_LIB_LTDL
 AC_CONFIG_SUBDIRS(libltdl)
+AC_CONFIG_SUBDIRS(libwebserver)
 
 # large file support
 AC_SYS_LARGEFILE

Added: GNUnet/libwebserver/AUTHORS
===================================================================
--- GNUnet/libwebserver/AUTHORS 2006-08-18 20:37:47 UTC (rev 3245)
+++ GNUnet/libwebserver/AUTHORS 2006-08-18 21:41:52 UTC (rev 3246)
@@ -0,0 +1,27 @@
+Luis Figueiredo (address@hidden)
+       Main Programmer, designer
+
+Christian Grothoff (address@hidden)
+       Adaptation for GNUnet (work in progress)
+
+People who contributed:
+       Jo�o Luis Marques (address@hidden)
+               minor bug reported (redirectors, stdout)
+       'oddsock' (address@hidden) 
+               Licensing tip, and minor bug reported (segv in querystring)
+       Rocco Carbone (address@hidden) 
+               Return code for web_server_run tip
+       Johannes E. Schindelin (address@hidden) 
+               Spell checking, Makefile portability, and security 'How do I 
create my own certificate?'
+               bugfixes, examples hello world!
+       Richard Offer (address@hidden)
+               checkboxes, (multiple variables) tip
+       Sven Anders (address@hidden) 
+               new web_client_setcookie()
+       Hilobok Andrew (address@hidden)
+               FreeBSD portability
+
+#linuxhelp @ ptnet.org 
+
+Rui - to let me know the existence of strftime (yeah i didn't knew)
+Jo�o Luis Marques Pinto - a problem with redirection (stdout & exit());

Added: GNUnet/libwebserver/COPYING
===================================================================
--- GNUnet/libwebserver/COPYING 2006-08-18 20:37:47 UTC (rev 3245)
+++ GNUnet/libwebserver/COPYING 2006-08-18 21:41:52 UTC (rev 3246)
@@ -0,0 +1,506 @@
+                 GNU LESSER GENERAL PUBLIC LICENSE
+                      Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 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.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                           Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+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 and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+                 GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, 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 library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete 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 distribute a copy of this License along with the
+Library.
+
+  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 Library or any portion
+of it, thus forming a work based on the Library, 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) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+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 Library, 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 Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you 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.
+
+  If distribution of 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 satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be 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.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library 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.
+
+  9. 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 Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+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 with
+this License.
+
+  11. 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 Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library 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 Library.
+
+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.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library 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.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser 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 Library
+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 Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+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
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "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
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. 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 LIBRARY 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
+LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), 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 Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  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.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+
+
+

Added: GNUnet/libwebserver/COPYRIGHT
===================================================================
--- GNUnet/libwebserver/COPYRIGHT       2006-08-18 20:37:47 UTC (rev 3245)
+++ GNUnet/libwebserver/COPYRIGHT       2006-08-18 21:41:52 UTC (rev 3246)
@@ -0,0 +1,7 @@
+Copyright 2002, 2003 Luis Figueiredo. All rights reserved
+
+See the LICENSE file
+
+The origin of this software must not be misrepresented, either by
+explicit claim or by omission.  Since few users ever read sources,
+credits must appear in the documentation.

Added: GNUnet/libwebserver/ChangeLog
===================================================================
--- GNUnet/libwebserver/ChangeLog       2006-08-18 20:37:47 UTC (rev 3245)
+++ GNUnet/libwebserver/ChangeLog       2006-08-18 21:41:52 UTC (rev 3246)
@@ -0,0 +1,245 @@
+Fri Aug 18 15:21:30 PDT 2006
+       Starting to adopt the code to the GNUnet build system.
+       Applied patch to allow for shutdown.
+
+0.5.3
+       Wen Apr 28 14:52:43 GMT 2004
+               Luis Figueiredo -- Long time no see, i've decided to check one 
mail dated from released version 0.5.2, was about cookies
+                                                   it seems that was no 
problem to me, but i made a minor changes anyway
+                                                       void 
web_client_setcookie(char *name, char *value, char *timeoutf, char *path, char 
*domain, int secure)
+                                                       path and domain, can be 
called as "" for disable, instead of previous only, NULL that disables the 
domain and path
+       Tue Jan 13 18:43:11 GMT 2004
+               Luis Figueiredo -- I've put a prefix in each internal function 
"__ILWS_"
+
+       Wen Oct 22 18:38:52 GMT 2003
+               Luis Figueiredo -- Applied some changes reported by (freebsd 
port): Hilobok Andrew (address@hidden), added Last-Modified on lws_list(); 
improved file handling
+
+       Thu Sep 25 13:11:21 GMT 2003
+               Luis Figueiredo -- Minor change the ClientInfo->request also 
gives the '/' (for lws_list)
+
+       Wen Sep 24 23:02:51 GMT 2003
+               Luis Figueiredo -- Corrected some code (for portability) 
reported by Hilobok Andrew (address@hidden)
+0.5.2
+       Thu Sep 18 21:33:05 GMT 2003
+               Luis Figueiredo -- Changed function set_EGApalette to 
web_client_gifsetpalette("filename.act oe "EGA");, and web_client_outputgif to 
web_client_gifoutput
+                                  (sorry for usual users of web_client_gif* :P)
+
+       Sun Sep 14 22:29:02 GMT 2003
+               Luis Figueiredo -- new functions added (web_server_aliasdir, 
web_server_useMIMEfile, web_client_contenttype);
+
+0.5.1
+       Wen Sep 10 17:56:14 GMT 2003
+               Luis Figueiredo -- Code clean up, new error system!
+
+       Sex Sep 05 19:12:14 GMT 2003
+               Luis Figueiredo -- improved the function tmpfname, added 
documentation to section security
+
+       Sex Sep 05 06:16:01 GMT 2003
+               Luis Figueiredo -- i have lie down late, lately :o), well 
add_oustream prototipe changed to handle flock (filelock)
+                                               to avoid race condition on 
temorary files, added the util funtion for winnt flock
+                                               
+                                               -- changed way to log "stetic?"
+
+                                               -- calculate and outputs 
Content-rage and Content-length if the get handler has the WS_USELEN turned on
+                                               
+       Wen Sep 03 05:57:11 GMT 2003
+               Luis Figueiredo -- one day after (almost literaly), corrected 
something in ClientInfo->Cookie(), 
+                                               And an new feature to 
web_client_setcookie, this function can now be called after end of headers.
+                       
+       Tue Sep 02 05:28:11 GMT 2003
+               Luis Figueiredo -- oh my!, nice hour for coding, finished 206 
(partial content) resuming (Content-range:)
+
+       Mon Sep 01 19:35:32 GMT 2003
+               Luis Figueiredo -- now output header : "Content-length:"
+       
+       Mon Sep 01 06:22:21 GMT 2003
+               Luis Figueiredo -- read_client optimized for speed (select 
removed, non_block sockets only)
+
+       Sex Aug 29 16:07:15 GMT 2003
+               Luis Figueiredo -- Corrected a bug on output_client() 
(writetemp) if the lib doesn't output (EAGAIN) the function
+                               was returning, and retry using local variable 
writetemp (reading new data), now fseeks to last data written
+
+       Fri Aug 22 15:20:31 GMT 2003
+               Luis Figueiredo -- removed engine.h from help server (read the 
source if you want to know how it works), some changes in web_server_getconf!
+
+       Thu Aug 15 16:59:04 GMT 2003
+               Luis Figueiredo -- New functions and flag, flag is WS_DYNVAR 
(handler), to use dynamic variables on data ouput
+                                               web_client_setvar, 
web_client_delvar , web_client_getvar, exchanges "$variable;" into 'variable' 
value 
+                                               previous defined with 
web_client_setvar("variable","something");
+
+0.5.0
+
+       Wen Jul 30 03:45:28 GMT 2003
+               Luis Figueiredo -- IE 5.0 was confusing me with no \r\n\r\n 
after post data, i solved the problem using content-length value
+                               changed errno (on output_client) to 
WSAGetLastError() on windows (#ifdef WIN32)
+
+       Fri Jul 25 06:10:03 GMT 2003
+               Luis Figueiredo -- Work around outgif.c, to support transparency
+       
+       Wen Jul 21 20:13:12 GMT 2003
+               Luis Figueiredo -- Added set_gifEGApalette(), and global var 
GLOBALGIFPAL for web_client_outputgif();
+
+       Tue Jul 15 15:31:10 GMT 2003
+               Luis Figueiredo -- Start develop the config file, added some 
new elements to struct server, Added a ClientInfo->Conf( to get entries from 
config file )
+
+    Thu Apr 10 14:11:31 GMT 2003
+               Luis Figueiredo -- Some changes on web_client_setcookie() made 
by Sven Anders <address@hidden> applied
+       
+       Thu Apr 10 14:11:34 GMT 2003
+               Luis Figueiredo -- Some bugfixes reported by 
(http://www.stanford.edu/~engler) Ken Ashcraft <address@hidden>
+
+0.4.1
+
+       Thu Mar 20 14:35:23 GMT 2003
+               Luis Figueiredo -- Fuck war! :o), minor Changes in help server
+
+       Wen Mar 19 21:46:32 GMT 2003
+               Luis Figueiredo -- new features for checkbox (or multiple 
variables) ClientInfo->Query("#xpto") returns the number of references to xpto
+                                                  ClientInfo->Query("xpto") 
gives one value and fetches to another; if "#xpto" is bigger than one, "xpto" 
called twice will be diferent
+
+       Fri Mar 07 11:29:12 GMT 2003
+               Luis Figueiredo -- Added the extern "C" {} to web_server.h
+
+0.4.0   // new features and fixes (new version)
+
+       Wen Feb 12 16:23:13 GMT 2003
+               Luis Figueiredo -- Added Cookie example, and Johannes E. 
Schindelin entered on project (officialy)
+
+       Mon Feb 09 17:24:45 GMT 2003
+               Luis Figueiredo -- web_client_setcookie(); done, Changed 
ClientInfo->Header(),Post(),Query(); when is called with
+                                               NULL argument, this function 
returns whole client header;
+                                               Added ClientInfo->Cookie();
+
+       Wen Feb 05 22:12:03 GMT 2003
+               Luis Figueiredo -- Start to develop web_client_setcookie();
+
+       Fri Jan 31 05:24:31 GMT 2003
+               Johannes E. Schindelin (patch) -- More spell checking (even in 
the code, heh!) client.h, client.c, examples.html functions.html info.html 
security.html
+                                                  He also added an example 
(hello_world)
+                                                                          
bugfix on clientinfo.c: post data and query data!
+       Sun Jan 26 21:22:34 GMT 2003
+               Luis Figueiredo -- Change the order of ChangeLog (this file) 
(was last version on Bottom)
+
+       Thu Jan 23 17:10:11 GMT 2003
+               Luis Figueiredo -- Patch from Johannes E. Schindelin, spell 
checking and make file portabilitie
+
+0.3.5
+       
+       Mon Jan 20 01:43:45 GMT 2003
+               Luis Figueiredo -- Changed the return codes from 
web_server_run() (Rocco Carbone address@hidden ideia), and some minor fix's on 
socket.c
+
+       Sat Jan 18 18:31:23 GMT 2003
+               Luis Figueiredo -- Corrected a querystring parser error(thanks 
'oddsock')
+
+0.3.4
+
+       Fri Dec 27 20:01:04 GMT 2002
+               Luis Figueiredo -- using closesocket (when deleting client) on 
WIN32, when client lost the connection the stat is (5) (5 delete client)
+
+       Thu Dec 26 23:16:21 GMT 2002
+               Luis Figueiredo -- (outstream.[ch]) Added an argument to 
add_outstream (char *fname); since the lib have a problem with atributing to 
stdout (*stdout=*nfile),
+                                               changed the tmpfile(), to 
'tmpnam' (tmpfname) and use freopen; (unlinking fname when deleting outstreams)
+0.3.3
+
+       Wen Nov 27 18:16:34 GMT 2002
+               Luis Figueiredo -- Produces output files to projectroot/bin
+
+       Wen Nov 27 00:24:31 GMT 2002
+               Luis Figueiredo -- Built strncasecmp function (Win32 doesn't 
have) for using in strcasestr (MultiPart in clientinfo)
+
+       Mon Nov 25 16:16:23 GMT 2002
+               Luis Figueiredo -- Help html's converted into header files, 
help server, doesn't need external files now, help.html directory moved to 
project root
+
+       Fri Nov 22 17:45:34 GMT 2002
+               Luis Figueiredo -- Win32 project files and help server updated
+       
+       Sat Nov 16 21:22:13 GMT 2002
+               Luis Figueiredo -- Example SoundRecorder w/ new features
+
+       Fri Nov 15 20:38:48 GMT 2002
+               Luis Figueiredo -- Mem checker added (case of low mem)
+
+0.3.2
+
+       Fri Nov 15 11:11:50 GMT 2002
+               Luis Figueiredo -- Added a new example (SoundRecorder)
+
+       Fri Nov 15 00:37:44 GMT 2002
+               Luis Figueiredo -- Created make install
+
+       Thu Nov 14 19:45:47 GMT 2002
+               Luis Figueiredo -- Changed client.c (now outputs 400 invalid 
request)
+
+       Wed Nov 13 23:39:46 GMT 2002
+               Luis Figueiredo -- added a feature, (web_client_outputgif) 
using xvgifwr.c (from xv 3.10a)
+                               module is callod outgif.c
+       
+       Wed Nov 13 04:27:12 GMT 2002
+               Luis Figueiredo -- Added a debug program (.pl) http butcher
+
+       Wed Nov 13 04:06:48 GMT 2002
+               Luis Figueiredo -- Fixed up a minor bug on client read data, 
make rule dist (to create package on makefile), removed Hdrdate to new mydate 
(using strftime)
+                               discard hextoi to using strtol(str,NULL,16)
+0.3.1
+
+       Sun Nov 10 21:05:40 GMT 2002
+               Luis Figueiredo -- Code cleanup, removed useless functions, 
developing documentation
+
+       Sun Nov 10 12:08:02 GMT 2002
+               Luis Figueiredo -- Changed regex to fnmatch once again (regex 
was giving problems w/ portability, and fnmatch is easier to use for
+                               newbies)
+
+
+       Thu Nov  7 20:05:48 GMT 2002
+               Luis Figueiredo -- create module (utils.c) for base64decode, 
hextoi, strcasestr, Add documentation to example
+
+
+       Wed Nov  6 16:12:22 GMT 2002
+               Luis Figueiredo -- Changed again way of determine that the 
client sent all data, it checks about 5 times if doesn't have new data,
+                                               then marks all data readed, 
ClientInfo upload files (MultiPart) done, wow, new logo, 
+                                               supports 
(enctype='Multipart/form-data') (tested in lynx and netscape and IE)
+
+       Thu Oct 31 18:11:28 GMT 2002
+               Luis Figueiredo -- Optimized functions Post,Header,Query // now 
holds the already queryied into a list, when it requests again
+                                               lib doesn't process request 
gives the saved data: ex:
+                                               
if(ClientInfo->Query("queryval")) { // query val doesn't exists in list add
+                                                       
blah=atoi(ClientInfo->Query("queryval")); // return previous saved val that's 
on the list
+                                               };
+                                               better for memory and speed 
optimizations
+
+0.3.0 and previous 
+
+       Wed Oct 30 22:54:37 GMT 2002
+               Luis Figueiredo -- Changed way of determine that the client 
sent all data 
+                                               before:
+                                                       if there is no more 
data then search \r\n\r\n in the hole data readed // wrong, multipart/form-data 
was not doing right now
+                                               now:
+                                                       if there is no more 
data then if the last two bytes is \r\n then mark all readed and process // i 
think that need improvments
+
+       Mon Oct 14 20:20:05 GMT 2002
+               Luis Figueiredo -- An example of a cgi handler was made, added 
the Date: header to server header
+
+       Mon Oct  7 16:56:15 GMT 2002
+               Luis Figueiredo -- Repaired some safe bugs, Added vars to stats 
proposes, inserted an liblogo, added debug instructions
+
+       Wed Apr 10 20:02:55 GMT 2002
+               Luis Figueiredo -- Make use of autoconf , removed 
open_memstream (doesn't work well w/ stdout structure on netbsd portability)
+                                               linux slack 7.1 uses "extern 
FILE *stdout", netbsd uses "extern FILE __sF[]" so i cannot make use of pointers
+
+       Mon Apr  8 15:04:31 GMT 2002
+               Luis Figueiredo -- Oh my.. kurt cobain is dead :o), 
restructured the code, separated into various files                             
                                    
+
+       Wed Mar 27 18:59:10 GMT 2002
+               Luis Figueiredo -- using regex instead of fnmatch(fnmatch only 
appears becouse of apache, i didn't knew it)
+
+       Mon Mar 25 14:46:13 GMT 2002
+               Luis Figueiredo -- wow, one month later..., discard 
web_server_addstr, and now process the stdout to server
+                                               using a tmpfile for streaming 
(not so good, but :o))
+
+       Mon Feb 25 06:27:58 GMT 2002
+               Luis Figueiredo -- Many corrections and new functions were 
added, until today
+
+       Fri Dec 28 12:51:11 GMT 2001
+               Luis Figueiredo -- I Corrected the input to handle only data 
when \n\r(twice) is arrived
+
+

Added: GNUnet/libwebserver/INSTALL
===================================================================
--- GNUnet/libwebserver/INSTALL 2006-08-18 20:37:47 UTC (rev 3245)
+++ GNUnet/libwebserver/INSTALL 2006-08-18 21:41:52 UTC (rev 3246)
@@ -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.
+

Added: GNUnet/libwebserver/Makefile.am
===================================================================
--- GNUnet/libwebserver/Makefile.am     2006-08-18 20:37:47 UTC (rev 3245)
+++ GNUnet/libwebserver/Makefile.am     2006-08-18 21:41:52 UTC (rev 3246)
@@ -0,0 +1,3 @@
+SUBDIRS = include src
+
+

Added: GNUnet/libwebserver/NEWS
===================================================================
--- GNUnet/libwebserver/NEWS    2006-08-18 20:37:47 UTC (rev 3245)
+++ GNUnet/libwebserver/NEWS    2006-08-18 21:41:52 UTC (rev 3246)
@@ -0,0 +1 @@
+See ChangeLog.

Added: GNUnet/libwebserver/README
===================================================================
--- GNUnet/libwebserver/README  2006-08-18 20:37:47 UTC (rev 3245)
+++ GNUnet/libwebserver/README  2006-08-18 21:41:52 UTC (rev 3246)
@@ -0,0 +1,7 @@
+This is an adaptation of libwebserver for GNUnet.
+
+Non-essential code from old libwebserver library
+was moved to contrib/, documentation was moved
+to doc/.  
+
+The build system was changed to use automake.

Added: GNUnet/libwebserver/TODO
===================================================================
--- GNUnet/libwebserver/TODO    2006-08-18 20:37:47 UTC (rev 3245)
+++ GNUnet/libwebserver/TODO    2006-08-18 21:41:52 UTC (rev 3246)
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+try to make just makefile for win instead of project file
+
+check for integer overflow
+do a webserver stresser
+
+
+
+
+CORRECT: netbsd dont free's the memory (linux's free) // i don't know why!
+
+
+DONE: WS_USECONF is completed just make test and turn it better
+DONE: WS_DYNVAR ( for using web_client_setvar("color","#FFFFFF")), 
printf("<BODY bgcolor='$color;>"); ) usefull for web_client_addfile();) <- DONE
+DONE: there is some mem buffer that is not freeing on logfile example 
something related to web_client_addfile (corrected)
+DONE: upload is missing somethind debug ok, but release is crashing (was 
related to writetemp[WRITEMAX+1])
+DONE: faster way to upload and download! remove newdata ( is delaying 
operation) 
+DONE: content-range header (for resuming)
+DONE: logging (put it on process_client)
+DONE: Find a better way to manage "tmpfname" (using flocks)
+DONE: make web_client_setcookie works called in whatever where in the handle 
function, (keep on an database maybe as varlist);
+DONE: remove wrotesize and varsize from client to outstream
+DONE: The war beguns, and i'm coding :o), reduce error mensaging to one file 
(reduce static mem space);
+DONE: similar: maybe make the web_server_MIMEfile(server,"const char *");, to 
next do the web_server_adddir(server,"/home/users/www",WS_LISTING);
+
+MAYBE DONE: Well something wrong about downloading several imgs, sometimes 
apears the 'X' image! figure why (requires intensive tests)
+DONE: lib isn't close files well, probably is that becouse the Ximage
+DONE: do the freebsd port by Hilobok Andrew (address@hidden)
+DONE: URGENT: Change names of internal functions, we don't want conflits with 
other ppl functions (such as already defined symbols)
+
+
+TODO: The flag WS_USECGI, act as a cgi using env instead ClientInfo
+TODO: better to do is web_server_addcgi("* /*",execfile.exe,0);
+
+
+TODO: make the web_client_addurl function 
(web_client_addurl("http://127.0.0.1";); as web_client_addfile("path/to/file");)
+TODO: WS_USEMOD (modulated system to use) /(maybe need WS_USECONF, for 
describe modules)
+
+
+IMPROVE: Find a way to manage dll (stdout,stdin,etc)    
+IMPROVE: WS_DYNVAR
+
+
+
+
+

Added: GNUnet/libwebserver/config.guess
===================================================================
--- GNUnet/libwebserver/config.guess    2006-08-18 20:37:47 UTC (rev 3245)
+++ GNUnet/libwebserver/config.guess    2006-08-18 21:41:52 UTC (rev 3246)
@@ -0,0 +1,1500 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation,
+#   Inc.
+
+timestamp='2006-07-02'
+
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Originally written by Per Bothner <address@hidden>.
+# Please send patches to <address@hidden>.  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 <address@hidden>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 
2002, 2003, 2004, 2005
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit ;;
+    --version | -v )
+       echo "$version" ; exit ;;
+    --help | --h* | -h )
+       echo "$usage"; exit ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )        # Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help" >&2
+       exit 1 ;;
+    * )
+       break ;;
+  esac
+done
+
+if test $# != 0; then
+  echo "$me: too many arguments$help" >&2
+  exit 1
+fi
+
+trap 'exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+set_cc_for_build='
+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && 
exit \$exitcode" 0 ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 
;
+: ${TMPDIR=/tmp} ;
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n 
"$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) 
; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating 
insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } 
;
+dummy=$tmp/dummy ;
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,)    echo "int x;" > $dummy.c ;
+       for c in cc gcc c89 c99 ; do
+         if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
+            CC_FOR_BUILD="$c"; break ;
+         fi ;
+       done ;
+       if test x"$CC_FOR_BUILD" = x ; then
+         CC_FOR_BUILD=no_compiler_found ;
+       fi
+       ;;
+ ,,*)   CC_FOR_BUILD=$CC ;;
+ ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
+esac ; set_cc_for_build= ;'
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (address@hidden 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 ;;
+    *:OpenBSD:*:*)
+       UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+       echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
+       exit ;;
+    *:ekkoBSD:*:*)
+       echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
+       exit ;;
+    *:SolidBSD:*:*)
+       echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
+       exit ;;
+    macppc:MirBSD:*:*)
+       echo powerpc-unknown-mirbsd${UNAME_RELEASE}
+       exit ;;
+    *:MirBSD:*:*)
+       echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+       exit ;;
+    alpha:OSF1:*:*)
+       case $UNAME_RELEASE in
+       *4.0)
+               UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+               ;;
+       *5.*)
+               UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+               ;;
+       esac
+       # According to Compaq, /usr/sbin/psrinfo has been available on
+       # OSF/1 and Tru64 systems produced since 1995.  I hope that
+       # covers most systems running today.  This code pipes the CPU
+       # types through head -n 1, so we only detect the type of CPU 0.
+       ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) 
processor.*$/\1/p' | head -n 1`
+       case "$ALPHA_CPU_TYPE" in
+           "EV4 (21064)")
+               UNAME_MACHINE="alpha" ;;
+           "EV4.5 (21064)")
+               UNAME_MACHINE="alpha" ;;
+           "LCA4 (21066/21068)")
+               UNAME_MACHINE="alpha" ;;
+           "EV5 (21164)")
+               UNAME_MACHINE="alphaev5" ;;
+           "EV5.6 (21164A)")
+               UNAME_MACHINE="alphaev56" ;;
+           "EV5.6 (21164PC)")
+               UNAME_MACHINE="alphapca56" ;;
+           "EV5.7 (21164PC)")
+               UNAME_MACHINE="alphapca57" ;;
+           "EV6 (21264)")
+               UNAME_MACHINE="alphaev6" ;;
+           "EV6.7 (21264A)")
+               UNAME_MACHINE="alphaev67" ;;
+           "EV6.8CB (21264C)")
+               UNAME_MACHINE="alphaev68" ;;
+           "EV6.8AL (21264B)")
+               UNAME_MACHINE="alphaev68" ;;
+           "EV6.8CX (21264D)")
+               UNAME_MACHINE="alphaev68" ;;
+           "EV6.9A (21264/EV69A)")
+               UNAME_MACHINE="alphaev69" ;;
+           "EV7 (21364)")
+               UNAME_MACHINE="alphaev7" ;;
+           "EV7.9 (21364A)")
+               UNAME_MACHINE="alphaev79" ;;
+       esac
+       # A Pn.n version is a patched version.
+       # A Vn.n version is a released version.
+       # A Tn.n version is a released field test version.
+       # A Xn.n version is an unreleased experimental baselevel.
+       # 1.2 uses "1.2" for uname -r.
+       echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 
's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+       exit ;;
+    Alpha\ *:Windows_NT*:*)
+       # How do we know it's Interix rather than the generic POSIX subsystem?
+       # Should we change UNAME_MACHINE based on the output of uname instead
+       # of the specific Alpha model?
+       echo alpha-pc-interix
+       exit ;;
+    21064:Windows_NT:50:3)
+       echo alpha-dec-winnt3.5
+       exit ;;
+    Amiga*:UNIX_System_V:4.0:*)
+       echo m68k-unknown-sysv4
+       exit ;;
+    *:[Aa]miga[Oo][Ss]:*:*)
+       echo ${UNAME_MACHINE}-unknown-amigaos
+       exit ;;
+    *:[Mm]orph[Oo][Ss]:*:*)
+       echo ${UNAME_MACHINE}-unknown-morphos
+       exit ;;
+    *:OS/390:*:*)
+       echo i370-ibm-openedition
+       exit ;;
+    *:z/VM:*:*)
+       echo s390-ibm-zvmoe
+       exit ;;
+    *:OS400:*:*)
+        echo powerpc-ibm-os400
+       exit ;;
+    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+       echo arm-acorn-riscix${UNAME_RELEASE}
+       exit ;;
+    arm:riscos:*:*|arm:RISCOS:*:*)
+       echo arm-unknown-riscos
+       exit ;;
+    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+       echo hppa1.1-hitachi-hiuxmpp
+       exit ;;
+    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+       # address@hidden (Earle F. Ake) contributed MIS and NILE.
+       if test "`(/bin/universe) 2>/dev/null`" = att ; then
+               echo pyramid-pyramid-sysv3
+       else
+               echo pyramid-pyramid-bsd
+       fi
+       exit ;;
+    NILE*:*:*:dcosx)
+       echo pyramid-pyramid-svr4
+       exit ;;
+    DRS?6000:unix:4.0:6*)
+       echo sparc-icl-nx6
+       exit ;;
+    DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
+       case `/usr/bin/uname -p` in
+           sparc) echo sparc-icl-nx7; exit ;;
+       esac ;;
+    sun4H:SunOS:5.*:*)
+       echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+       echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    i86pc:SunOS:5.*:*)
+       echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    sun4*:SunOS:6*:*)
+       # According to config.sub, this is the proper way to canonicalize
+       # SunOS6.  Hard to guess exactly what SunOS6 will be like, but
+       # it's likely to be more like Solaris than SunOS4.
+       echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    sun4*:SunOS:*:*)
+       case "`/usr/bin/arch -k`" in
+           Series*|S4*)
+               UNAME_RELEASE=`uname -v`
+               ;;
+       esac
+       # Japanese Language versions have a version number like `4.1.3-JL'.
+       echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+       exit ;;
+    sun3*:SunOS:*:*)
+       echo m68k-sun-sunos${UNAME_RELEASE}
+       exit ;;
+    sun*:*:4.2BSD:*)
+       UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 
2>/dev/null`
+       test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+       case "`/bin/arch`" in
+           sun3)
+               echo m68k-sun-sunos${UNAME_RELEASE}
+               ;;
+           sun4)
+               echo sparc-sun-sunos${UNAME_RELEASE}
+               ;;
+       esac
+       exit ;;
+    aushp:SunOS:*:*)
+       echo sparc-auspex-sunos${UNAME_RELEASE}
+       exit ;;
+    # The situation for MiNT is a little confusing.  The machine name
+    # can be virtually everything (everything which is not
+    # "atarist" or "atariste" at least should have a processor
+    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
+    # to the lowercase version "mint" (or "freemint").  Finally
+    # the system name "TOS" denotes a system which is actually not
+    # MiNT.  But MiNT is downward compatible to TOS, so this should
+    # be no problem.
+    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+       exit ;;
+    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+       echo m68k-atari-mint${UNAME_RELEASE}
+        exit ;;
+    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+       exit ;;
+    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+        echo m68k-milan-mint${UNAME_RELEASE}
+        exit ;;
+    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+        echo m68k-hades-mint${UNAME_RELEASE}
+        exit ;;
+    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+        echo m68k-unknown-mint${UNAME_RELEASE}
+        exit ;;
+    m68k:machten:*:*)
+       echo m68k-apple-machten${UNAME_RELEASE}
+       exit ;;
+    powerpc:machten:*:*)
+       echo powerpc-apple-machten${UNAME_RELEASE}
+       exit ;;
+    RISC*:Mach:*:*)
+       echo mips-dec-mach_bsd4.3
+       exit ;;
+    RISC*:ULTRIX:*:*)
+       echo mips-dec-ultrix${UNAME_RELEASE}
+       exit ;;
+    VAX*:ULTRIX*:*:*)
+       echo vax-dec-ultrix${UNAME_RELEASE}
+       exit ;;
+    2020:CLIX:*:* | 2430:CLIX:*:*)
+       echo clipper-intergraph-clix${UNAME_RELEASE}
+       exit ;;
+    mips:*:*:UMIPS | mips:*:*:RISCos)
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+#ifdef __cplusplus
+#include <stdio.h>  /* for printf() prototype */
+       int main (int argc, char *argv[]) {
+#else
+       int main (argc, argv) int argc; char *argv[]; {
+#endif
+       #if defined (host_mips) && defined (MIPSEB)
+       #if defined (SYSTYPE_SYSV)
+         printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+       #endif
+       #if defined (SYSTYPE_SVR4)
+         printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+       #endif
+       #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+         printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+       #endif
+       #endif
+         exit (-1);
+       }
+EOF
+       $CC_FOR_BUILD -o $dummy $dummy.c &&
+         dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+         SYSTEM_NAME=`$dummy $dummyarg` &&
+           { echo "$SYSTEM_NAME"; exit; }
+       echo mips-mips-riscos${UNAME_RELEASE}
+       exit ;;
+    Motorola:PowerMAX_OS:*:*)
+       echo powerpc-motorola-powermax
+       exit ;;
+    Motorola:*:4.3:PL8-*)
+       echo powerpc-harris-powermax
+       exit ;;
+    Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+       echo powerpc-harris-powermax
+       exit ;;
+    Night_Hawk:Power_UNIX:*:*)
+       echo powerpc-harris-powerunix
+       exit ;;
+    m88k:CX/UX:7*:*)
+       echo m88k-harris-cxux7
+       exit ;;
+    m88k:*:4*:R4*)
+       echo m88k-motorola-sysv4
+       exit ;;
+    m88k:*:3*:R3*)
+       echo m88k-motorola-sysv3
+       exit ;;
+    AViiON:dgux:*:*)
+        # DG/UX returns AViiON for all architectures
+        UNAME_PROCESSOR=`/usr/bin/uname -p`
+       if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+       then
+           if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+              [ ${TARGET_BINARY_INTERFACE}x = x ]
+           then
+               echo m88k-dg-dgux${UNAME_RELEASE}
+           else
+               echo m88k-dg-dguxbcs${UNAME_RELEASE}
+           fi
+       else
+           echo i586-dg-dgux${UNAME_RELEASE}
+       fi
+       exit ;;
+    M88*:DolphinOS:*:*)        # DolphinOS (SVR3)
+       echo m88k-dolphin-sysv3
+       exit ;;
+    M88*:*:R3*:*)
+       # Delta 88k system running SVR3
+       echo m88k-motorola-sysv3
+       exit ;;
+    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+       echo m88k-tektronix-sysv3
+       exit ;;
+    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+       echo m68k-tektronix-bsd
+       exit ;;
+    *:IRIX*:*:*)
+       echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+       exit ;;
+    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+       echo romp-ibm-aix     # uname -m gives an 8 hex-code CPU id
+       exit ;;               # Note that: echo "'`uname -s`'" gives 'AIX '
+    i*86:AIX:*:*)
+       echo i386-ibm-aix
+       exit ;;
+    ia64:AIX:*:*)
+       if [ -x /usr/bin/oslevel ] ; then
+               IBM_REV=`/usr/bin/oslevel`
+       else
+               IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+       fi
+       echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+       exit ;;
+    *:AIX:2:3)
+       if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+               eval $set_cc_for_build
+               sed 's/^                //' << EOF >$dummy.c
+               #include <sys/systemcfg.h>
+
+               main()
+                       {
+                       if (!__power_pc())
+                               exit(1);
+                       puts("powerpc-ibm-aix3.2.5");
+                       exit(0);
+                       }
+EOF
+               if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
+               then
+                       echo "$SYSTEM_NAME"
+               else
+                       echo rs6000-ibm-aix3.2.5
+               fi
+       elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+               echo rs6000-ibm-aix3.2.4
+       else
+               echo rs6000-ibm-aix3.2
+       fi
+       exit ;;
+    *:AIX:*:[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 ;;
+    *:AIX:*:*)
+       echo rs6000-ibm-aix
+       exit ;;
+    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+       echo romp-ibm-bsd4.4
+       exit ;;
+    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
+       echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
+       exit ;;                             # report: romp-ibm BSD 4.3
+    *:BOSX:*:*)
+       echo rs6000-bull-bosx
+       exit ;;
+    DPX/2?00:B.O.S.:*:*)
+       echo m68k-bull-sysv3
+       exit ;;
+    9000/[34]??:4.3bsd:1.*:*)
+       echo m68k-hp-bsd
+       exit ;;
+    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+       echo m68k-hp-bsd4.4
+       exit ;;
+    9000/[34678]??:HP-UX:*:*)
+       HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+       case "${UNAME_MACHINE}" in
+           9000/31? )            HP_ARCH=m68000 ;;
+           9000/[34]?? )         HP_ARCH=m68k ;;
+           9000/[678][0-9][0-9])
+               if [ -x /usr/bin/getconf ]; then
+                   sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 
2>/dev/null`
+                    case "${sc_cpu_version}" in
+                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+                      532)                      # CPU_PA_RISC2_0
+                        case "${sc_kernel_bits}" in
+                          32) HP_ARCH="hppa2.0n" ;;
+                          64) HP_ARCH="hppa2.0w" ;;
+                         '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
+                        esac ;;
+                    esac
+               fi
+               if [ "${HP_ARCH}" = "" ]; then
+                   eval $set_cc_for_build
+                   sed 's/^              //' << EOF >$dummy.c
+
+              #define _HPUX_SOURCE
+              #include <stdlib.h>
+              #include <unistd.h>
+
+              int main ()
+              {
+              #if defined(_SC_KERNEL_BITS)
+                  long bits = sysconf(_SC_KERNEL_BITS);
+              #endif
+                  long cpu  = sysconf (_SC_CPU_VERSION);
+
+                  switch (cpu)
+               {
+               case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+               case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+               case CPU_PA_RISC2_0:
+              #if defined(_SC_KERNEL_BITS)
+                   switch (bits)
+                       {
+                       case 64: puts ("hppa2.0w"); break;
+                       case 32: puts ("hppa2.0n"); break;
+                       default: puts ("hppa2.0"); break;
+                       } break;
+              #else  /* !defined(_SC_KERNEL_BITS) */
+                   puts ("hppa2.0"); break;
+              #endif
+               default: puts ("hppa1.0"); break;
+               }
+                  exit (0);
+              }
+EOF
+                   (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && 
HP_ARCH=`$dummy`
+                   test -z "$HP_ARCH" && HP_ARCH=hppa
+               fi ;;
+       esac
+       if [ ${HP_ARCH} = "hppa2.0w" ]
+       then
+           eval $set_cc_for_build
+
+           # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
+           # 32-bit code.  hppa64-hp-hpux* has the same kernel and a compiler
+           # generating 64-bit code.  GNU and HP use different nomenclature:
+           #
+           # $ CC_FOR_BUILD=cc ./config.guess
+           # => hppa2.0w-hp-hpux11.23
+           # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
+           # => hppa64-hp-hpux11.23
+
+           if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
+               grep __LP64__ >/dev/null
+           then
+               HP_ARCH="hppa2.0w"
+           else
+               HP_ARCH="hppa64"
+           fi
+       fi
+       echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+       exit ;;
+    ia64:HP-UX:*:*)
+       HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+       echo ia64-hp-hpux${HPUX_REV}
+       exit ;;
+    3050*:HI-UX:*:*)
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+       #include <unistd.h>
+       int
+       main ()
+       {
+         long cpu = sysconf (_SC_CPU_VERSION);
+         /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+            true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
+            results, however.  */
+         if (CPU_IS_PA_RISC (cpu))
+           {
+             switch (cpu)
+               {
+                 case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+                 case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+                 case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+                 default: puts ("hppa-hitachi-hiuxwe2"); break;
+               }
+           }
+         else if (CPU_IS_HP_MC68K (cpu))
+           puts ("m68k-hitachi-hiuxwe2");
+         else puts ("unknown-hitachi-hiuxwe2");
+         exit (0);
+       }
+EOF
+       $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
+               { echo "$SYSTEM_NAME"; exit; }
+       echo unknown-hitachi-hiuxwe2
+       exit ;;
+    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+       echo hppa1.1-hp-bsd
+       exit ;;
+    9000/8??:4.3bsd:*:*)
+       echo hppa1.0-hp-bsd
+       exit ;;
+    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+       echo hppa1.0-hp-mpeix
+       exit ;;
+    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+       echo hppa1.1-hp-osf
+       exit ;;
+    hp8??:OSF1:*:*)
+       echo hppa1.0-hp-osf
+       exit ;;
+    i*86:OSF1:*:*)
+       if [ -x /usr/sbin/sysversion ] ; then
+           echo ${UNAME_MACHINE}-unknown-osf1mk
+       else
+           echo ${UNAME_MACHINE}-unknown-osf1
+       fi
+       exit ;;
+    parisc*:Lites*:*:*)
+       echo hppa1.1-hp-lites
+       exit ;;
+    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+       echo c1-convex-bsd
+        exit ;;
+    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+       if getsysinfo -f scalar_acc
+       then echo c32-convex-bsd
+       else echo c2-convex-bsd
+       fi
+        exit ;;
+    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+       echo c34-convex-bsd
+        exit ;;
+    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+       echo c38-convex-bsd
+        exit ;;
+    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+       echo c4-convex-bsd
+        exit ;;
+    CRAY*Y-MP:*:*:*)
+       echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    CRAY*[A-Z]90:*:*:*)
+       echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+       | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+             -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+             -e 's/\.[^.]*$/.X/'
+       exit ;;
+    CRAY*TS:*:*:*)
+       echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    CRAY*T3E:*:*:*)
+       echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    CRAY*SV1:*:*:*)
+       echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    *:UNICOS/mp:*:*)
+       echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+       FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 
'abcdefghijklmnopqrstuvwxyz'`
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 
'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+        exit ;;
+    5000:UNIX_System_V:4.*:*)
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 
'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 
'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+       exit ;;
+    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+       echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+       exit ;;
+    sparc*:BSD/OS:*:*)
+       echo sparc-unknown-bsdi${UNAME_RELEASE}
+       exit ;;
+    *:BSD/OS:*:*)
+       echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+       exit ;;
+    *:FreeBSD:*:*)
+       case ${UNAME_MACHINE} in
+           pc98)
+               echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 
's/[-(].*//'` ;;
+           amd64)
+               echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 
's/[-(].*//'` ;;
+           *)
+               echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed 
-e 's/[-(].*//'` ;;
+       esac
+       exit ;;
+    i*:CYGWIN*:*)
+       echo ${UNAME_MACHINE}-pc-cygwin
+       exit ;;
+    i*:MINGW*:*)
+       echo ${UNAME_MACHINE}-pc-mingw32
+       exit ;;
+    i*:windows32*:*)
+       # uname -m includes "-pc" on this system.
+       echo ${UNAME_MACHINE}-mingw32
+       exit ;;
+    i*:PW*:*)
+       echo ${UNAME_MACHINE}-pc-pw32
+       exit ;;
+    x86:Interix*:[3456]*)
+       echo i586-pc-interix${UNAME_RELEASE}
+       exit ;;
+    EM64T:Interix*:[3456]*)
+       echo x86_64-unknown-interix${UNAME_RELEASE}
+       exit ;;
+    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+       echo i${UNAME_MACHINE}-pc-mks
+       exit ;;
+    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+       # How do we know it's Interix rather than the generic POSIX subsystem?
+       # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+       # UNAME_MACHINE based on the output of uname instead of i386?
+       echo i586-pc-interix
+       exit ;;
+    i*:UWIN*:*)
+       echo ${UNAME_MACHINE}-pc-uwin
+       exit ;;
+    amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
+       echo x86_64-unknown-cygwin
+       exit ;;
+    p*:CYGWIN*:*)
+       echo powerpcle-unknown-cygwin
+       exit ;;
+    prep*:SunOS:5.*:*)
+       echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 
's/[^.]*//'`
+       exit ;;
+    *:GNU:*:*)
+       # the GNU system
+       echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo 
${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+       exit ;;
+    *:GNU/*:*:*)
+       # other systems with GNU libc and userland
+       echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' 
| tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+       exit ;;
+    i*86:Minix:*:*)
+       echo ${UNAME_MACHINE}-pc-minix
+       exit ;;
+    arm*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    avr32*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    cris:Linux:*:*)
+       echo cris-axis-linux-gnu
+       exit ;;
+    crisv32:Linux:*:*)
+       echo crisv32-axis-linux-gnu
+       exit ;;
+    frv:Linux:*:*)
+       echo frv-unknown-linux-gnu
+       exit ;;
+    ia64:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    m32r*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    m68*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    mips:Linux:*:*)
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+       #undef CPU
+       #undef mips
+       #undef mipsel
+       #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || 
defined(MIPSEL)
+       CPU=mipsel
+       #else
+       #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || 
defined(MIPSEB)
+       CPU=mips
+       #else
+       CPU=
+       #endif
+       #endif
+EOF
+       eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+           /^CPU/{
+               s: ::g
+               p
+           }'`"
+       test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+       ;;
+    mips64:Linux:*:*)
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+       #undef CPU
+       #undef mips64
+       #undef mips64el
+       #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || 
defined(MIPSEL)
+       CPU=mips64el
+       #else
+       #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || 
defined(MIPSEB)
+       CPU=mips64
+       #else
+       CPU=
+       #endif
+       #endif
+EOF
+       eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+           /^CPU/{
+               s: ::g
+               p
+           }'`"
+       test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+       ;;
+    or32:Linux:*:*)
+       echo or32-unknown-linux-gnu
+       exit ;;
+    ppc:Linux:*:*)
+       echo powerpc-unknown-linux-gnu
+       exit ;;
+    ppc64:Linux:*:*)
+       echo powerpc64-unknown-linux-gnu
+       exit ;;
+    alpha:Linux:*:*)
+       case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+         EV5)   UNAME_MACHINE=alphaev5 ;;
+         EV56)  UNAME_MACHINE=alphaev56 ;;
+         PCA56) UNAME_MACHINE=alphapca56 ;;
+         PCA57) UNAME_MACHINE=alphapca56 ;;
+         EV6)   UNAME_MACHINE=alphaev6 ;;
+         EV67)  UNAME_MACHINE=alphaev67 ;;
+         EV68*) UNAME_MACHINE=alphaev68 ;;
+        esac
+       objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
+       if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+       echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+       exit ;;
+    parisc:Linux:*:* | hppa:Linux:*:*)
+       # Look for CPU level
+       case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+         PA7*) echo hppa1.1-unknown-linux-gnu ;;
+         PA8*) echo hppa2.0-unknown-linux-gnu ;;
+         *)    echo hppa-unknown-linux-gnu ;;
+       esac
+       exit ;;
+    parisc64:Linux:*:* | hppa64:Linux:*:*)
+       echo hppa64-unknown-linux-gnu
+       exit ;;
+    s390:Linux:*:* | s390x:Linux:*:*)
+       echo ${UNAME_MACHINE}-ibm-linux
+       exit ;;
+    sh64*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    sh*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    sparc:Linux:*:* | sparc64:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    vax:Linux:*:*)
+       echo ${UNAME_MACHINE}-dec-linux-gnu
+       exit ;;
+    x86_64:Linux:*:*)
+       echo x86_64-unknown-linux-gnu
+       exit ;;
+    i*86:Linux:*:*)
+       # The BFD linker knows what the default object file format is, so
+       # first see if it will tell us. cd to the root directory to prevent
+       # problems with other programs or directories called `ld' in the path.
+       # Set LC_ALL=C to ensure ld outputs messages in English.
+       ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
+                        | sed -ne '/supported targets:/!d
+                                   s/[         ][      ]*/ /g
+                                   s/.*supported targets: *//
+                                   s/ .*//
+                                   p'`
+        case "$ld_supported_targets" in
+         elf32-i386)
+               TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
+               ;;
+         a.out-i386-linux)
+               echo "${UNAME_MACHINE}-pc-linux-gnuaout"
+               exit ;;
+         coff-i386)
+               echo "${UNAME_MACHINE}-pc-linux-gnucoff"
+               exit ;;
+         "")
+               # 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 ;;
+       esac
+       # Determine whether the default compiler is a.out or elf
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+       #include <features.h>
+       #ifdef __ELF__
+       # ifdef __GLIBC__
+       #  if __GLIBC__ >= 2
+       LIBC=gnu
+       #  else
+       LIBC=gnulibc1
+       #  endif
+       # else
+       LIBC=gnulibc1
+       # endif
+       #else
+       #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) 
|| defined(__SUNPRO_CC)
+       LIBC=gnu
+       #else
+       LIBC=gnuaout
+       #endif
+       #endif
+       #ifdef __dietlibc__
+       LIBC=dietlibc
+       #endif
+EOF
+       eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+           /^LIBC/{
+               s: ::g
+               p
+           }'`"
+       test x"${LIBC}" != x && {
+               echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
+               exit
+       }
+       test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; }
+       ;;
+    i*86:DYNIX/ptx:4*:*)
+       # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+       # earlier versions are messed up and put the nodename in both
+       # sysname and nodename.
+       echo i386-sequent-sysv4
+       exit ;;
+    i*86:UNIX_SV:4.2MP:2.*)
+        # Unixware is an offshoot of SVR4, but it has its own version
+        # number series starting with 2...
+        # I am not positive that other SVR4 systems won't match this,
+       # I just have to hope.  -- rms.
+        # Use sysv4.2uw... so that sysv4* matches it.
+       echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+       exit ;;
+    i*86:OS/2:*:*)
+       # If we were able to find `uname', then EMX Unix compatibility
+       # is probably installed.
+       echo ${UNAME_MACHINE}-pc-os2-emx
+       exit ;;
+    i*86:XTS-300:*:STOP)
+       echo ${UNAME_MACHINE}-unknown-stop
+       exit ;;
+    i*86:atheos:*:*)
+       echo ${UNAME_MACHINE}-unknown-atheos
+       exit ;;
+    i*86:syllable:*:*)
+       echo ${UNAME_MACHINE}-pc-syllable
+       exit ;;
+    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
+       echo i386-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    i*86:*DOS:*:*)
+       echo ${UNAME_MACHINE}-pc-msdosdjgpp
+       exit ;;
+    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+       UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+       if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+               echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+       else
+               echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+       fi
+       exit ;;
+    i*86:*:5:[678]*)
+       # UnixWare 7.x, OpenUNIX and OpenServer 6.
+       case `/bin/uname -X | grep "^Machine"` in
+           *486*)           UNAME_MACHINE=i486 ;;
+           *Pentium)        UNAME_MACHINE=i586 ;;
+           *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+       esac
+       echo 
${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+       exit ;;
+    i*86:*:3.2:*)
+       if test -f /usr/options/cb.name; then
+               UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+               echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+       elif /bin/uname -X 2>/dev/null >/dev/null ; then
+               UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+               (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+               (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+                       && UNAME_MACHINE=i586
+               (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+                       && UNAME_MACHINE=i686
+               (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+                       && UNAME_MACHINE=i686
+               echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+       else
+               echo ${UNAME_MACHINE}-pc-sysv32
+       fi
+       exit ;;
+    pc:*:*:*)
+       # Left here for compatibility:
+        # uname -m prints for DJGPP always 'pc', but it prints nothing about
+        # the processor, so we play safe by assuming i386.
+       echo i386-pc-msdosdjgpp
+        exit ;;
+    Intel:Mach:3*:*)
+       echo i386-pc-mach3
+       exit ;;
+    paragon:*:*:*)
+       echo i860-intel-osf1
+       exit ;;
+    i860:*:4.*:*) # i860-SVR4
+       if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+         echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+       else # Add other i860-SVR4 vendors below as they are discovered.
+         echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
+       fi
+       exit ;;
+    mini*:CTIX:SYS*5:*)
+       # "miniframe"
+       echo m68010-convergent-sysv
+       exit ;;
+    mc68k:UNIX:SYSTEM5:3.51m)
+       echo m68k-convergent-sysv
+       exit ;;
+    M680?0:D-NIX:5.3:*)
+       echo m68k-diab-dnix
+       exit ;;
+    M68*:*:R3V[5678]*:*)
+       test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
+    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 
3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | 
SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
+       OS_REL=''
+       test -r /etc/.relid \
+       && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+       /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+         && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+       /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+         && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+          && { echo i486-ncr-sysv4; exit; } ;;
+    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+       echo m68k-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    mc68030:UNIX_System_V:4.*:*)
+       echo m68k-atari-sysv4
+       exit ;;
+    TSUNAMI:LynxOS:2.*:*)
+       echo sparc-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    rs6000:LynxOS:2.*:*)
+       echo rs6000-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
+       echo powerpc-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    SM[BE]S:UNIX_SV:*:*)
+       echo mips-dde-sysv${UNAME_RELEASE}
+       exit ;;
+    RM*:ReliantUNIX-*:*:*)
+       echo mips-sni-sysv4
+       exit ;;
+    RM*:SINIX-*:*:*)
+       echo mips-sni-sysv4
+       exit ;;
+    *:SINIX-*:*:*)
+       if uname -p 2>/dev/null >/dev/null ; then
+               UNAME_MACHINE=`(uname -p) 2>/dev/null`
+               echo ${UNAME_MACHINE}-sni-sysv4
+       else
+               echo ns32k-sni-sysv
+       fi
+       exit ;;
+    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+                      # says <address@hidden>
+        echo i586-unisys-sysv4
+        exit ;;
+    *:UNIX_System_V:4*:FTX*)
+       # From Gerald Hewes <address@hidden>.
+       # How about differentiating between stratus architectures? -djm
+       echo hppa1.1-stratus-sysv4
+       exit ;;
+    *:*:*:FTX*)
+       # From address@hidden
+       echo i860-stratus-sysv4
+       exit ;;
+    i*86:VOS:*:*)
+       # From address@hidden
+       echo ${UNAME_MACHINE}-stratus-vos
+       exit ;;
+    *:VOS:*:*)
+       # From address@hidden
+       echo hppa1.1-stratus-vos
+       exit ;;
+    mc68*:A/UX:*:*)
+       echo m68k-apple-aux${UNAME_RELEASE}
+       exit ;;
+    news*:NEWS-OS:6*:*)
+       echo mips-sony-newsos6
+       exit ;;
+    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+       if [ -d /usr/nec ]; then
+               echo mips-nec-sysv${UNAME_RELEASE}
+       else
+               echo mips-unknown-sysv${UNAME_RELEASE}
+       fi
+        exit ;;
+    BeBox:BeOS:*:*)    # BeOS running on hardware made by Be, PPC only.
+       echo powerpc-be-beos
+       exit ;;
+    BeMac:BeOS:*:*)    # BeOS running on Mac or Mac clone, PPC only.
+       echo powerpc-apple-beos
+       exit ;;
+    BePC:BeOS:*:*)     # BeOS running on Intel PC compatible.
+       echo i586-pc-beos
+       exit ;;
+    SX-4:SUPER-UX:*:*)
+       echo sx4-nec-superux${UNAME_RELEASE}
+       exit ;;
+    SX-5:SUPER-UX:*:*)
+       echo sx5-nec-superux${UNAME_RELEASE}
+       exit ;;
+    SX-6:SUPER-UX:*:*)
+       echo sx6-nec-superux${UNAME_RELEASE}
+       exit ;;
+    Power*:Rhapsody:*:*)
+       echo powerpc-apple-rhapsody${UNAME_RELEASE}
+       exit ;;
+    *:Rhapsody:*:*)
+       echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+       exit ;;
+    *:Darwin:*:*)
+       UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+       case $UNAME_PROCESSOR in
+           unknown) UNAME_PROCESSOR=powerpc ;;
+       esac
+       echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+       exit ;;
+    *:procnto*:*:* | *:QNX:[0123456789]*:*)
+       UNAME_PROCESSOR=`uname -p`
+       if test "$UNAME_PROCESSOR" = "x86"; then
+               UNAME_PROCESSOR=i386
+               UNAME_MACHINE=pc
+       fi
+       echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+       exit ;;
+    *:QNX:*:4*)
+       echo i386-pc-qnx
+       exit ;;
+    NSE-?:NONSTOP_KERNEL:*:*)
+       echo nse-tandem-nsk${UNAME_RELEASE}
+       exit ;;
+    NSR-?:NONSTOP_KERNEL:*:*)
+       echo nsr-tandem-nsk${UNAME_RELEASE}
+       exit ;;
+    *:NonStop-UX:*:*)
+       echo mips-compaq-nonstopux
+       exit ;;
+    BS2000:POSIX*:*:*)
+       echo bs2000-siemens-sysv
+       exit ;;
+    DS/*:UNIX_System_V:*:*)
+       echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+       exit ;;
+    *:Plan9:*:*)
+       # "uname -m" is not consistent, so use $cputype instead. 386
+       # is converted to i386 for consistency with other x86
+       # operating systems.
+       if test "$cputype" = "386"; then
+           UNAME_MACHINE=i386
+       else
+           UNAME_MACHINE="$cputype"
+       fi
+       echo ${UNAME_MACHINE}-unknown-plan9
+       exit ;;
+    *:TOPS-10:*:*)
+       echo pdp10-unknown-tops10
+       exit ;;
+    *:TENEX:*:*)
+       echo pdp10-unknown-tenex
+       exit ;;
+    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+       echo pdp10-dec-tops20
+       exit ;;
+    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+       echo pdp10-xkl-tops20
+       exit ;;
+    *:TOPS-20:*:*)
+       echo pdp10-unknown-tops20
+       exit ;;
+    *:ITS:*:*)
+       echo pdp10-unknown-its
+       exit ;;
+    SEI:*:*:SEIUX)
+        echo mips-sei-seiux${UNAME_RELEASE}
+       exit ;;
+    *:DragonFly:*:*)
+       echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 
's/[-(].*//'`
+       exit ;;
+    *:*VMS:*:*)
+       UNAME_MACHINE=`(uname -p) 2>/dev/null`
+       case "${UNAME_MACHINE}" in
+           A*) echo alpha-dec-vms ; exit ;;
+           I*) echo ia64-dec-vms ; exit ;;
+           V*) echo vax-dec-vms ; exit ;;
+       esac ;;
+    *:XENIX:*:SysV)
+       echo i386-pc-xenix
+       exit ;;
+    i*86:skyos:*:*)
+       echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ 
.*$//'
+       exit ;;
+    i*86:rdos:*:*)
+       echo ${UNAME_MACHINE}-pc-rdos
+       exit ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+eval $set_cc_for_build
+cat >$dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#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 <sys/param.h>
+  printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+          "4"
+#else
+         ""
+#endif
+         ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+  printf ("arm-acorn-riscix\n"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+  printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+  int version;
+  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+  if (version < 4)
+    printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+  else
+    printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+  exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+  printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+  printf ("ns32k-encore-mach\n"); exit (0);
+#else
+  printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+  printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+  printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+  printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+    struct utsname un;
+
+    uname(&un);
+
+    if (strncmp(un.version, "V2", 2) == 0) {
+       printf ("i386-sequent-ptx2\n"); exit (0);
+    }
+    if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+       printf ("i386-sequent-ptx1\n"); exit (0);
+    }
+    printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+# if !defined (ultrix)
+#  include <sys/param.h>
+#  if defined (BSD)
+#   if BSD == 43
+      printf ("vax-dec-bsd4.3\n"); exit (0);
+#   else
+#    if BSD == 199006
+      printf ("vax-dec-bsd4.3reno\n"); exit (0);
+#    else
+      printf ("vax-dec-bsd\n"); exit (0);
+#    endif
+#   endif
+#  else
+    printf ("vax-dec-bsd\n"); exit (0);
+#  endif
+# else
+    printf ("vax-dec-ultrix\n"); exit (0);
+# endif
+#endif
+
+#if defined (alliant) && defined (i860)
+  printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+  exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
+       { echo "$SYSTEM_NAME"; exit; }
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+    case `getsysinfo -f cpu_type` in
+    c1*)
+       echo c1-convex-bsd
+       exit ;;
+    c2*)
+       if getsysinfo -f scalar_acc
+       then echo c32-convex-bsd
+       else echo c2-convex-bsd
+       fi
+       exit ;;
+    c34*)
+       echo c34-convex-bsd
+       exit ;;
+    c38*)
+       echo c38-convex-bsd
+       exit ;;
+    c4*)
+       echo c4-convex-bsd
+       exit ;;
+    esac
+fi
+
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+  http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.guess
+and
+  http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.sub
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <address@hidden> 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:


Property changes on: GNUnet/libwebserver/config.guess
___________________________________________________________________
Name: svn:executable
   + *

Added: GNUnet/libwebserver/config.sub
===================================================================
--- GNUnet/libwebserver/config.sub      2006-08-18 20:37:47 UTC (rev 3245)
+++ GNUnet/libwebserver/config.sub      2006-08-18 21:41:52 UTC (rev 3246)
@@ -0,0 +1,1608 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation,
+#   Inc.
+
+timestamp='2006-07-02'
+
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine.  It does not imply ALL GNU software can.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Please send patches to <address@hidden>.  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 <address@hidden>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 
2002, 2003, 2004, 2005
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit ;;
+    --version | -v )
+       echo "$version" ; exit ;;
+    --help | --h* | -h )
+       echo "$usage"; exit ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )        # Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help"
+       exit 1 ;;
+
+    *local*)
+       # First pass through any local machine types.
+       echo $1
+       exit ;;
+
+    * )
+       break ;;
+  esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+    exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+    exit 1;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+  nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
+  uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | 
netbsd*-gnu* | \
+  storm-chaos* | os2-emx* | rtmk-nova*)
+    os=-$maybe_os
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+    ;;
+  *)
+    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+    if [ $basic_machine != $1 ]
+    then os=`echo $1 | sed 's/.*-/-/'`
+    else os=; fi
+    ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work.  We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+       -sun*os*)
+               # Prevent following clause from handling this invalid input.
+               ;;
+       -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+       -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+       -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+       -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+       -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+       -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+       -apple | -axis | -knuth | -cray)
+               os=
+               basic_machine=$1
+               ;;
+       -sim | -cisco | -oki | -wec | -winbond)
+               os=
+               basic_machine=$1
+               ;;
+       -scout)
+               ;;
+       -wrs)
+               os=-vxworks
+               basic_machine=$1
+               ;;
+       -chorusos*)
+               os=-chorusos
+               basic_machine=$1
+               ;;
+       -chorusrdb)
+               os=-chorusrdb
+               basic_machine=$1
+               ;;
+       -hiux*)
+               os=-hiuxwe2
+               ;;
+       -sco6)
+               os=-sco5v6
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco5)
+               os=-sco3.2v5
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco4)
+               os=-sco3.2v4
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco3.2.[4-9]*)
+               os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco3.2v[4-9]*)
+               # Don't forget version if it is 3.2v4 or newer.
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco5v6*)
+               # Don't forget version if it is 3.2v4 or newer.
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco*)
+               os=-sco3.2v2
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -udk*)
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -isc)
+               os=-isc2.2
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -clix*)
+               basic_machine=clipper-intergraph
+               ;;
+       -isc*)
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -lynx*)
+               os=-lynxos
+               ;;
+       -ptx*)
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+               ;;
+       -windowsnt*)
+               os=`echo $os | sed -e 's/windowsnt/winnt/'`
+               ;;
+       -psos*)
+               os=-psos
+               ;;
+       -mint | -mint[0-9]*)
+               basic_machine=m68k-atari
+               os=-mint
+               ;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+       # Recognize the basic CPU types without company name.
+       # Some are omitted here because they have special meanings below.
+       1750a | 580 \
+       | a29k \
+       | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+       | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | 
alpha64pca5[67] \
+       | am33_2.0 \
+       | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | 
avr32 \
+       | bfin \
+       | c4x | clipper \
+       | d10v | d30v | dlx | dsp16xx \
+       | fr30 | frv \
+       | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+       | i370 | i860 | i960 | ia64 \
+       | ip2k | iq2000 \
+       | m32c | m32r | m32rle | m68000 | m68k | m88k \
+       | maxq | mb | microblaze | mcore \
+       | mips | mipsbe | mipseb | mipsel | mipsle \
+       | mips16 \
+       | mips64 | mips64el \
+       | mips64vr | mips64vrel \
+       | mips64orion | mips64orionel \
+       | mips64vr4100 | mips64vr4100el \
+       | mips64vr4300 | mips64vr4300el \
+       | mips64vr5000 | mips64vr5000el \
+       | mips64vr5900 | mips64vr5900el \
+       | mipsisa32 | mipsisa32el \
+       | mipsisa32r2 | mipsisa32r2el \
+       | mipsisa64 | mipsisa64el \
+       | mipsisa64r2 | mipsisa64r2el \
+       | mipsisa64sb1 | mipsisa64sb1el \
+       | mipsisa64sr71k | mipsisa64sr71kel \
+       | mipstx39 | mipstx39el \
+       | mn10200 | mn10300 \
+       | mt \
+       | msp430 \
+       | nios | nios2 \
+       | ns16k | ns32k \
+       | or32 \
+       | pdp10 | pdp11 | pj | pjl \
+       | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+       | pyramid \
+       | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | 
sh[1234]le | sh3ele \
+       | sh64 | sh64le \
+       | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | 
sparclite \
+       | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
+       | spu | strongarm \
+       | tahoe | thumb | tic4x | tic80 | tron \
+       | v850 | v850e \
+       | we32k \
+       | x86 | xscale | xscalee[bl] | xstormy16 | xtensa \
+       | z8k)
+               basic_machine=$basic_machine-unknown
+               ;;
+       m6811 | m68hc11 | m6812 | m68hc12)
+               # Motorola 68HC11/12.
+               basic_machine=$basic_machine-unknown
+               os=-none
+               ;;
+       m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+               ;;
+       ms1)
+               basic_machine=mt-unknown
+               ;;
+
+       # We use `pc' rather than `unknown'
+       # because (1) that's what they normally are, and
+       # (2) the word "unknown" tends to confuse beginning users.
+       i*86 | x86_64)
+         basic_machine=$basic_machine-pc
+         ;;
+       # Object if more than one company name word.
+       *-*-*)
+               echo Invalid configuration \`$1\': machine \`$basic_machine\' 
not recognized 1>&2
+               exit 1
+               ;;
+       # Recognize the basic CPU types with company name.
+       580-* \
+       | a29k-* \
+       | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+       | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+       | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+       | arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
+       | avr-* | avr32-* \
+       | bfin-* | bs2000-* \
+       | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+       | clipper-* | craynv-* | cydra-* \
+       | d10v-* | d30v-* | dlx-* \
+       | elxsi-* \
+       | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
+       | h8300-* | h8500-* \
+       | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+       | i*86-* | i860-* | i960-* | ia64-* \
+       | ip2k-* | iq2000-* \
+       | m32c-* | m32r-* | m32rle-* \
+       | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+       | m88110-* | m88k-* | maxq-* | mcore-* \
+       | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+       | mips16-* \
+       | mips64-* | mips64el-* \
+       | mips64vr-* | mips64vrel-* \
+       | mips64orion-* | mips64orionel-* \
+       | mips64vr4100-* | mips64vr4100el-* \
+       | mips64vr4300-* | mips64vr4300el-* \
+       | mips64vr5000-* | mips64vr5000el-* \
+       | mips64vr5900-* | mips64vr5900el-* \
+       | mipsisa32-* | mipsisa32el-* \
+       | mipsisa32r2-* | mipsisa32r2el-* \
+       | mipsisa64-* | mipsisa64el-* \
+       | mipsisa64r2-* | mipsisa64r2el-* \
+       | mipsisa64sb1-* | mipsisa64sb1el-* \
+       | mipsisa64sr71k-* | mipsisa64sr71kel-* \
+       | mipstx39-* | mipstx39el-* \
+       | mmix-* \
+       | mt-* \
+       | msp430-* \
+       | nios-* | nios2-* \
+       | none-* | np1-* | ns16k-* | ns32k-* \
+       | orion-* \
+       | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+       | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+       | pyramid-* \
+       | romp-* | rs6000-* \
+       | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | 
shbe-* \
+       | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+       | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | 
sparclet-* \
+       | sparclite-* \
+       | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* 
| sx?-* \
+       | tahoe-* | thumb-* \
+       | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+       | tron-* \
+       | v850-* | v850e-* | vax-* \
+       | we32k-* \
+       | x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \
+       | 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
+               ;;
+       abacus)
+               basic_machine=abacus-unknown
+               ;;
+       adobe68k)
+               basic_machine=m68010-adobe
+               os=-scout
+               ;;
+       alliant | fx80)
+               basic_machine=fx80-alliant
+               ;;
+       altos | altos3068)
+               basic_machine=m68k-altos
+               ;;
+       am29k)
+               basic_machine=a29k-none
+               os=-bsd
+               ;;
+       amd64)
+               basic_machine=x86_64-pc
+               ;;
+       amd64-*)
+               basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       amdahl)
+               basic_machine=580-amdahl
+               os=-sysv
+               ;;
+       amiga | amiga-*)
+               basic_machine=m68k-unknown
+               ;;
+       amigaos | amigados)
+               basic_machine=m68k-unknown
+               os=-amigaos
+               ;;
+       amigaunix | amix)
+               basic_machine=m68k-unknown
+               os=-sysv4
+               ;;
+       apollo68)
+               basic_machine=m68k-apollo
+               os=-sysv
+               ;;
+       apollo68bsd)
+               basic_machine=m68k-apollo
+               os=-bsd
+               ;;
+       aux)
+               basic_machine=m68k-apple
+               os=-aux
+               ;;
+       balance)
+               basic_machine=ns32k-sequent
+               os=-dynix
+               ;;
+       c90)
+               basic_machine=c90-cray
+               os=-unicos
+               ;;
+       convex-c1)
+               basic_machine=c1-convex
+               os=-bsd
+               ;;
+       convex-c2)
+               basic_machine=c2-convex
+               os=-bsd
+               ;;
+       convex-c32)
+               basic_machine=c32-convex
+               os=-bsd
+               ;;
+       convex-c34)
+               basic_machine=c34-convex
+               os=-bsd
+               ;;
+       convex-c38)
+               basic_machine=c38-convex
+               os=-bsd
+               ;;
+       cray | j90)
+               basic_machine=j90-cray
+               os=-unicos
+               ;;
+       craynv)
+               basic_machine=craynv-cray
+               os=-unicosmp
+               ;;
+       cr16c)
+               basic_machine=cr16c-unknown
+               os=-elf
+               ;;
+       crds | unos)
+               basic_machine=m68k-crds
+               ;;
+       crisv32 | crisv32-* | etraxfs*)
+               basic_machine=crisv32-axis
+               ;;
+       cris | cris-* | etrax*)
+               basic_machine=cris-axis
+               ;;
+       crx)
+               basic_machine=crx-unknown
+               os=-elf
+               ;;
+       da30 | da30-*)
+               basic_machine=m68k-da30
+               ;;
+       decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | 
decstatn)
+               basic_machine=mips-dec
+               ;;
+       decsystem10* | dec10*)
+               basic_machine=pdp10-dec
+               os=-tops10
+               ;;
+       decsystem20* | dec20*)
+               basic_machine=pdp10-dec
+               os=-tops20
+               ;;
+       delta | 3300 | motorola-3300 | motorola-delta \
+             | 3300-motorola | delta-motorola)
+               basic_machine=m68k-motorola
+               ;;
+       delta88)
+               basic_machine=m88k-motorola
+               os=-sysv3
+               ;;
+       djgpp)
+               basic_machine=i586-pc
+               os=-msdosdjgpp
+               ;;
+       dpx20 | dpx20-*)
+               basic_machine=rs6000-bull
+               os=-bosx
+               ;;
+       dpx2* | dpx2*-bull)
+               basic_machine=m68k-bull
+               os=-sysv3
+               ;;
+       ebmon29k)
+               basic_machine=a29k-amd
+               os=-ebmon
+               ;;
+       elxsi)
+               basic_machine=elxsi-elxsi
+               os=-bsd
+               ;;
+       encore | umax | mmax)
+               basic_machine=ns32k-encore
+               ;;
+       es1800 | OSE68k | ose68k | ose | OSE)
+               basic_machine=m68k-ericsson
+               os=-ose
+               ;;
+       fx2800)
+               basic_machine=i860-alliant
+               ;;
+       genix)
+               basic_machine=ns32k-ns
+               ;;
+       gmicro)
+               basic_machine=tron-gmicro
+               os=-sysv
+               ;;
+       go32)
+               basic_machine=i386-pc
+               os=-go32
+               ;;
+       h3050r* | hiux*)
+               basic_machine=hppa1.1-hitachi
+               os=-hiuxwe2
+               ;;
+       h8300hms)
+               basic_machine=h8300-hitachi
+               os=-hms
+               ;;
+       h8300xray)
+               basic_machine=h8300-hitachi
+               os=-xray
+               ;;
+       h8500hms)
+               basic_machine=h8500-hitachi
+               os=-hms
+               ;;
+       harris)
+               basic_machine=m88k-harris
+               os=-sysv3
+               ;;
+       hp300-*)
+               basic_machine=m68k-hp
+               ;;
+       hp300bsd)
+               basic_machine=m68k-hp
+               os=-bsd
+               ;;
+       hp300hpux)
+               basic_machine=m68k-hp
+               os=-hpux
+               ;;
+       hp3k9[0-9][0-9] | hp9[0-9][0-9])
+               basic_machine=hppa1.0-hp
+               ;;
+       hp9k2[0-9][0-9] | hp9k31[0-9])
+               basic_machine=m68000-hp
+               ;;
+       hp9k3[2-9][0-9])
+               basic_machine=m68k-hp
+               ;;
+       hp9k6[0-9][0-9] | hp6[0-9][0-9])
+               basic_machine=hppa1.0-hp
+               ;;
+       hp9k7[0-79][0-9] | hp7[0-79][0-9])
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k78[0-9] | hp78[0-9])
+               # FIXME: really hppa2.0-hp
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | 
hp9k893 | hp893)
+               # FIXME: really hppa2.0-hp
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k8[0-9][13679] | hp8[0-9][13679])
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k8[0-9][0-9] | hp8[0-9][0-9])
+               basic_machine=hppa1.0-hp
+               ;;
+       hppa-next)
+               os=-nextstep3
+               ;;
+       hppaosf)
+               basic_machine=hppa1.1-hp
+               os=-osf
+               ;;
+       hppro)
+               basic_machine=hppa1.1-hp
+               os=-proelf
+               ;;
+       i370-ibm* | ibm*)
+               basic_machine=i370-ibm
+               ;;
+# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
+       i*86v32)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-sysv32
+               ;;
+       i*86v4*)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-sysv4
+               ;;
+       i*86v)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-sysv
+               ;;
+       i*86sol2)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-solaris2
+               ;;
+       i386mach)
+               basic_machine=i386-mach
+               os=-mach
+               ;;
+       i386-vsta | vsta)
+               basic_machine=i386-unknown
+               os=-vsta
+               ;;
+       iris | iris4d)
+               basic_machine=mips-sgi
+               case $os in
+                   -irix*)
+                       ;;
+                   *)
+                       os=-irix4
+                       ;;
+               esac
+               ;;
+       isi68 | isi)
+               basic_machine=m68k-isi
+               os=-sysv
+               ;;
+       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
+               ;;
+       monitor)
+               basic_machine=m68k-rom68k
+               os=-coff
+               ;;
+       morphos)
+               basic_machine=powerpc-unknown
+               os=-morphos
+               ;;
+       msdos)
+               basic_machine=i386-pc
+               os=-msdos
+               ;;
+       ms1-*)
+               basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
+               ;;
+       mvs)
+               basic_machine=i370-ibm
+               os=-mvs
+               ;;
+       ncr3000)
+               basic_machine=i486-ncr
+               os=-sysv4
+               ;;
+       netbsd386)
+               basic_machine=i386-unknown
+               os=-netbsd
+               ;;
+       netwinder)
+               basic_machine=armv4l-rebel
+               os=-linux
+               ;;
+       news | news700 | news800 | news900)
+               basic_machine=m68k-sony
+               os=-newsos
+               ;;
+       news1000)
+               basic_machine=m68030-sony
+               os=-newsos
+               ;;
+       news-3600 | risc-news)
+               basic_machine=mips-sony
+               os=-newsos
+               ;;
+       necv70)
+               basic_machine=v70-nec
+               os=-sysv
+               ;;
+       next | m*-next )
+               basic_machine=m68k-next
+               case $os in
+                   -nextstep* )
+                       ;;
+                   -ns2*)
+                     os=-nextstep2
+                       ;;
+                   *)
+                     os=-nextstep3
+                       ;;
+               esac
+               ;;
+       nh3000)
+               basic_machine=m68k-harris
+               os=-cxux
+               ;;
+       nh[45]000)
+               basic_machine=m88k-harris
+               os=-cxux
+               ;;
+       nindy960)
+               basic_machine=i960-intel
+               os=-nindy
+               ;;
+       mon960)
+               basic_machine=i960-intel
+               os=-mon960
+               ;;
+       nonstopux)
+               basic_machine=mips-compaq
+               os=-nonstopux
+               ;;
+       np1)
+               basic_machine=np1-gould
+               ;;
+       nsr-tandem)
+               basic_machine=nsr-tandem
+               ;;
+       op50n-* | op60c-*)
+               basic_machine=hppa1.1-oki
+               os=-proelf
+               ;;
+       openrisc | openrisc-*)
+               basic_machine=or32-unknown
+               ;;
+       os400)
+               basic_machine=powerpc-ibm
+               os=-os400
+               ;;
+       OSE68000 | ose68000)
+               basic_machine=m68000-ericsson
+               os=-ose
+               ;;
+       os68k)
+               basic_machine=m68k-none
+               os=-os68k
+               ;;
+       pa-hitachi)
+               basic_machine=hppa1.1-hitachi
+               os=-hiuxwe2
+               ;;
+       paragon)
+               basic_machine=i860-intel
+               os=-osf
+               ;;
+       pbd)
+               basic_machine=sparc-tti
+               ;;
+       pbb)
+               basic_machine=m68k-tti
+               ;;
+       pc532 | pc532-*)
+               basic_machine=ns32k-pc532
+               ;;
+       pc98)
+               basic_machine=i386-pc
+               ;;
+       pc98-*)
+               basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pentium | p5 | k5 | k6 | nexgen | viac3)
+               basic_machine=i586-pc
+               ;;
+       pentiumpro | p6 | 6x86 | athlon | athlon_*)
+               basic_machine=i686-pc
+               ;;
+       pentiumii | pentium2 | pentiumiii | pentium3)
+               basic_machine=i686-pc
+               ;;
+       pentium4)
+               basic_machine=i786-pc
+               ;;
+       pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+               basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pentiumpro-* | p6-* | 6x86-* | athlon-*)
+               basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+               basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pentium4-*)
+               basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pn)
+               basic_machine=pn-gould
+               ;;
+       power)  basic_machine=power-ibm
+               ;;
+       ppc)    basic_machine=powerpc-unknown
+               ;;
+       ppc-*)  basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       ppcle | powerpclittle | ppc-le | powerpc-little)
+               basic_machine=powerpcle-unknown
+               ;;
+       ppcle-* | powerpclittle-*)
+               basic_machine=powerpcle-`echo $basic_machine | sed 
's/^[^-]*-//'`
+               ;;
+       ppc64)  basic_machine=powerpc64-unknown
+               ;;
+       ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 
's/^[^-]*-//'`
+               ;;
+       ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+               basic_machine=powerpc64le-unknown
+               ;;
+       ppc64le-* | powerpc64little-*)
+               basic_machine=powerpc64le-`echo $basic_machine | sed 
's/^[^-]*-//'`
+               ;;
+       ps2)
+               basic_machine=i386-ibm
+               ;;
+       pw32)
+               basic_machine=i586-unknown
+               os=-pw32
+               ;;
+       rdos)
+               basic_machine=i386-pc
+               os=-rdos
+               ;;
+       rom68k)
+               basic_machine=m68k-rom68k
+               os=-coff
+               ;;
+       rm[46]00)
+               basic_machine=mips-siemens
+               ;;
+       rtpc | rtpc-*)
+               basic_machine=romp-ibm
+               ;;
+       s390 | s390-*)
+               basic_machine=s390-ibm
+               ;;
+       s390x | s390x-*)
+               basic_machine=s390x-ibm
+               ;;
+       sa29200)
+               basic_machine=a29k-amd
+               os=-udi
+               ;;
+       sb1)
+               basic_machine=mipsisa64sb1-unknown
+               ;;
+       sb1el)
+               basic_machine=mipsisa64sb1el-unknown
+               ;;
+       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
+               ;;
+       xbox)
+               basic_machine=i686-pc
+               os=-mingw32
+               ;;
+       xps | xps100)
+               basic_machine=xps100-honeywell
+               ;;
+       ymp)
+               basic_machine=ymp-cray
+               os=-unicos
+               ;;
+       z8k-*-coff)
+               basic_machine=z8k-unknown
+               os=-sim
+               ;;
+       none)
+               basic_machine=none-none
+               os=-none
+               ;;
+
+# Here we handle the default manufacturer of certain CPU types.  It is in
+# some cases the only manufacturer, in others, it is the most popular.
+       w89k)
+               basic_machine=hppa1.1-winbond
+               ;;
+       op50n)
+               basic_machine=hppa1.1-oki
+               ;;
+       op60c)
+               basic_machine=hppa1.1-oki
+               ;;
+       romp)
+               basic_machine=romp-ibm
+               ;;
+       mmix)
+               basic_machine=mmix-knuth
+               ;;
+       rs6000)
+               basic_machine=rs6000-ibm
+               ;;
+       vax)
+               basic_machine=vax-dec
+               ;;
+       pdp10)
+               # there are many clones, so DEC is not a safe bet
+               basic_machine=pdp10-unknown
+               ;;
+       pdp11)
+               basic_machine=pdp11-dec
+               ;;
+       we32k)
+               basic_machine=we32k-att
+               ;;
+       sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele)
+               basic_machine=sh-unknown
+               ;;
+       sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
+               basic_machine=sparc-sun
+               ;;
+       cydra)
+               basic_machine=cydra-cydrome
+               ;;
+       orion)
+               basic_machine=orion-highlevel
+               ;;
+       orion105)
+               basic_machine=clipper-highlevel
+               ;;
+       mac | mpw | mac-mpw)
+               basic_machine=m68k-apple
+               ;;
+       pmac | pmac-mpw)
+               basic_machine=powerpc-apple
+               ;;
+       *-unknown)
+               # Make sure to match an already-canonicalized machine name.
+               ;;
+       *)
+               echo Invalid configuration \`$1\': machine \`$basic_machine\' 
not recognized 1>&2
+               exit 1
+               ;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+       *-digital*)
+               basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+               ;;
+       *-commodore*)
+               basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+               ;;
+       *)
+               ;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+        # First match some system type aliases
+        # that might get confused with valid system types.
+       # -solaris* is a basic system type, with this one exception.
+       -solaris1 | -solaris1.*)
+               os=`echo $os | sed -e 's|solaris1|sunos4|'`
+               ;;
+       -solaris)
+               os=-solaris2
+               ;;
+       -svr4*)
+               os=-sysv4
+               ;;
+       -unixware*)
+               os=-sysv4.2uw
+               ;;
+       -gnu/linux*)
+               os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+               ;;
+       # First accept the basic system types.
+       # The portable systems comes first.
+       # Each alternative MUST END IN A *, to match a version number.
+       # -sysv* is not here because it comes later, after sysvr4.
+       -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+             | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
+             | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
+             | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+             | -aos* \
+             | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+             | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+             | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
+             | -openbsd* | -solidbsd* \
+             | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+             | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+             | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+             | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+             | -chorusos* | -chorusrdb* \
+             | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+             | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
+             | -uxpv* | -beos* | -mpeix* | -udk* \
+             | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+             | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+             | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+             | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+             | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+             | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
+             | -skyos* | -haiku* | -rdos* | -toppers*)
+       # Remember, each alternative MUST END IN *, to match a version number.
+               ;;
+       -qnx*)
+               case $basic_machine in
+                   x86-* | i*86-*)
+                       ;;
+                   *)
+                       os=-nto$os
+                       ;;
+               esac
+               ;;
+       -nto-qnx*)
+               ;;
+       -nto*)
+               os=`echo $os | sed -e 's|nto|nto-qnx|'`
+               ;;
+       -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+             | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* 
\
+             | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+               ;;
+       -mac*)
+               os=`echo $os | sed -e 's|mac|macos|'`
+               ;;
+       -linux-dietlibc)
+               os=-linux-dietlibc
+               ;;
+       -linux*)
+               os=`echo $os | sed -e 's|linux|linux-gnu|'`
+               ;;
+       -sunos5*)
+               os=`echo $os | sed -e 's|sunos5|solaris2|'`
+               ;;
+       -sunos6*)
+               os=`echo $os | sed -e 's|sunos6|solaris3|'`
+               ;;
+       -opened*)
+               os=-openedition
+               ;;
+        -os400*)
+               os=-os400
+               ;;
+       -wince*)
+               os=-wince
+               ;;
+       -osfrose*)
+               os=-osfrose
+               ;;
+       -osf*)
+               os=-osf
+               ;;
+       -utek*)
+               os=-bsd
+               ;;
+       -dynix*)
+               os=-bsd
+               ;;
+       -acis*)
+               os=-aos
+               ;;
+       -atheos*)
+               os=-atheos
+               ;;
+       -syllable*)
+               os=-syllable
+               ;;
+       -386bsd)
+               os=-bsd
+               ;;
+       -ctix* | -uts*)
+               os=-sysv
+               ;;
+       -nova*)
+               os=-rtmk-nova
+               ;;
+       -ns2 )
+               os=-nextstep2
+               ;;
+       -nsk*)
+               os=-nsk
+               ;;
+       # Preserve the version number of sinix5.
+       -sinix5.*)
+               os=`echo $os | sed -e 's|sinix|sysv|'`
+               ;;
+       -sinix*)
+               os=-sysv4
+               ;;
+        -tpf*)
+               os=-tpf
+               ;;
+       -triton*)
+               os=-sysv3
+               ;;
+       -oss*)
+               os=-sysv3
+               ;;
+       -svr4)
+               os=-sysv4
+               ;;
+       -svr3)
+               os=-sysv3
+               ;;
+       -sysvr4)
+               os=-sysv4
+               ;;
+       # This must come after -sysvr4.
+       -sysv*)
+               ;;
+       -ose*)
+               os=-ose
+               ;;
+       -es1800*)
+               os=-ose
+               ;;
+       -xenix)
+               os=-xenix
+               ;;
+       -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+               os=-mint
+               ;;
+       -aros*)
+               os=-aros
+               ;;
+       -kaos*)
+               os=-kaos
+               ;;
+       -zvmoe)
+               os=-zvmoe
+               ;;
+       -none)
+               ;;
+       *)
+               # Get rid of the `-' at the beginning of $os.
+               os=`echo $os | sed 's/[^-]*-//'`
+               echo Invalid configuration \`$1\': system \`$os\' not 
recognized 1>&2
+               exit 1
+               ;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system.  Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+        spu-*)
+               os=-elf
+               ;;
+       *-acorn)
+               os=-riscix1.2
+               ;;
+       arm*-rebel)
+               os=-linux
+               ;;
+       arm*-semi)
+               os=-aout
+               ;;
+        c4x-* | tic4x-*)
+               os=-coff
+               ;;
+       # This must come before the *-dec entry.
+       pdp10-*)
+               os=-tops20
+               ;;
+       pdp11-*)
+               os=-none
+               ;;
+       *-dec | vax-*)
+               os=-ultrix4.2
+               ;;
+       m68*-apollo)
+               os=-domain
+               ;;
+       i386-sun)
+               os=-sunos4.0.2
+               ;;
+       m68000-sun)
+               os=-sunos3
+               # This also exists in the configure program, but was not the
+               # default.
+               # os=-sunos4
+               ;;
+       m68*-cisco)
+               os=-aout
+               ;;
+       mips*-cisco)
+               os=-elf
+               ;;
+       mips*-*)
+               os=-elf
+               ;;
+       or32-*)
+               os=-coff
+               ;;
+       *-tti)  # must be before sparc entry or we get the wrong os.
+               os=-sysv3
+               ;;
+       sparc-* | *-sun)
+               os=-sunos4.1.1
+               ;;
+       *-be)
+               os=-beos
+               ;;
+       *-haiku)
+               os=-haiku
+               ;;
+       *-ibm)
+               os=-aix
+               ;;
+       *-knuth)
+               os=-mmixware
+               ;;
+       *-wec)
+               os=-proelf
+               ;;
+       *-winbond)
+               os=-proelf
+               ;;
+       *-oki)
+               os=-proelf
+               ;;
+       *-hp)
+               os=-hpux
+               ;;
+       *-hitachi)
+               os=-hiux
+               ;;
+       i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+               os=-sysv
+               ;;
+       *-cbm)
+               os=-amigaos
+               ;;
+       *-dg)
+               os=-dgux
+               ;;
+       *-dolphin)
+               os=-sysv3
+               ;;
+       m68k-ccur)
+               os=-rtu
+               ;;
+       m88k-omron*)
+               os=-luna
+               ;;
+       *-next )
+               os=-nextstep
+               ;;
+       *-sequent)
+               os=-ptx
+               ;;
+       *-crds)
+               os=-unos
+               ;;
+       *-ns)
+               os=-genix
+               ;;
+       i370-*)
+               os=-mvs
+               ;;
+       *-next)
+               os=-nextstep3
+               ;;
+       *-gould)
+               os=-sysv
+               ;;
+       *-highlevel)
+               os=-bsd
+               ;;
+       *-encore)
+               os=-bsd
+               ;;
+       *-sgi)
+               os=-irix
+               ;;
+       *-siemens)
+               os=-sysv4
+               ;;
+       *-masscomp)
+               os=-rtu
+               ;;
+       f30[01]-fujitsu | f700-fujitsu)
+               os=-uxpv
+               ;;
+       *-rom68k)
+               os=-coff
+               ;;
+       *-*bug)
+               os=-coff
+               ;;
+       *-apple)
+               os=-macos
+               ;;
+       *-atari*)
+               os=-mint
+               ;;
+       *)
+               os=-none
+               ;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer.  We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+       *-unknown)
+               case $os in
+                       -riscix*)
+                               vendor=acorn
+                               ;;
+                       -sunos*)
+                               vendor=sun
+                               ;;
+                       -aix*)
+                               vendor=ibm
+                               ;;
+                       -beos*)
+                               vendor=be
+                               ;;
+                       -hpux*)
+                               vendor=hp
+                               ;;
+                       -mpeix*)
+                               vendor=hp
+                               ;;
+                       -hiux*)
+                               vendor=hitachi
+                               ;;
+                       -unos*)
+                               vendor=crds
+                               ;;
+                       -dgux*)
+                               vendor=dg
+                               ;;
+                       -luna*)
+                               vendor=omron
+                               ;;
+                       -genix*)
+                               vendor=ns
+                               ;;
+                       -mvs* | -opened*)
+                               vendor=ibm
+                               ;;
+                       -os400*)
+                               vendor=ibm
+                               ;;
+                       -ptx*)
+                               vendor=sequent
+                               ;;
+                       -tpf*)
+                               vendor=ibm
+                               ;;
+                       -vxsim* | -vxworks* | -windiss*)
+                               vendor=wrs
+                               ;;
+                       -aux*)
+                               vendor=apple
+                               ;;
+                       -hms*)
+                               vendor=hitachi
+                               ;;
+                       -mpw* | -macos*)
+                               vendor=apple
+                               ;;
+                       -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+                               vendor=atari
+                               ;;
+                       -vos*)
+                               vendor=stratus
+                               ;;
+               esac
+               basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+               ;;
+esac
+
+echo $basic_machine$os
+exit
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:


Property changes on: GNUnet/libwebserver/config.sub
___________________________________________________________________
Name: svn:executable
   + *

Added: GNUnet/libwebserver/configure.ac
===================================================================
--- GNUnet/libwebserver/configure.ac    2006-08-18 20:37:47 UTC (rev 3245)
+++ GNUnet/libwebserver/configure.ac    2006-08-18 21:41:52 UTC (rev 3246)
@@ -0,0 +1,36 @@
+dnl Process this file with autoconf to produce a configure script.
+AC_INIT([libwebserver],[0.5.3-GNUnet],address@hidden)
+AM_INIT_AUTOMAKE([libwebserver], [0.5.3-GNUnet])
+AC_CONFIG_HEADER([config.h])
+
+AC_PROG_CC
+AC_PROG_MAKE_SET
+AC_PROG_INSTALL
+AC_DISABLE_STATIC
+AC_PROG_LIBTOOL
+
+AC_HEADER_STDC
+AC_CHECK_HEADERS([arpa/inet.h fcntl.h limits.h netinet/in.h stddef.h stdlib.h 
string.h sys/socket.h sys/time.h unistd.h])
+
+# Checks for typedefs, structures, and compiler characteristics.
+AC_C_CONST
+AC_TYPE_SIZE_T
+AC_HEADER_TIME
+AC_STRUCT_TM
+
+# Checks for library functions.
+AC_FUNC_MEMCMP
+AC_TYPE_SIGNAL
+AC_FUNC_STRFTIME
+AC_FUNC_VPRINTF
+AC_CHECK_FUNCS([inet_ntoa memset select socket strchr strerror strncasecmp 
strstr strtol])
+
+AC_SUBST(INCLUDE)
+AC_SUBST(LIBDIR)
+AC_SUBST(LIBS)
+
+AC_CONFIG_FILES([Makefile 
+src/Makefile
+include/Makefile
+])
+AC_OUTPUT

Added: GNUnet/libwebserver/contrib/Win32/dirent.c
===================================================================
--- GNUnet/libwebserver/contrib/Win32/dirent.c  2006-08-18 20:37:47 UTC (rev 
3245)
+++ GNUnet/libwebserver/contrib/Win32/dirent.c  2006-08-18 21:41:52 UTC (rev 
3246)
@@ -0,0 +1,277 @@
+/* 
+   dir.c for MS-DOS by Samuel Lam <address@hidden>, June/87 
+ */
+
+/* #ifdef WIN32 */
+/* 
+ * @(#)dir.c 1.4 87/11/06 Public Domain. 
+ * 
+ *  A public domain implementation of BSD directory routines for 
+ *  MS-DOS.  Written by Michael Rendell ({uunet,address@hidden), 
+ *  August 1897 
+ *  Ported to OS/2 by Kai Uwe Rommel 
+ *  December 1989, February 1990 
+ *  Ported to Windows NT 22 May 91 
+ *    other mods Summer '92 address@hidden 
+ *  opendirx() was horribly written, very inefficient, and did not take care
+ *    of all cases.  It is still not too clean, but it is far more efficient.
+ *    Changes made by Gordon Chaffee (address@hidden)
+ */
+
+
+/*Includes: 
+ *    crt 
+ */
+#include <windows.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys\types.h>
+#include <sys\stat.h>
+#include "dirent.h"
+
+#define stat _stat
+
+/* 
+ *    NT specific 
+ */
+#include <stdio.h>
+
+/* 
+ *    random typedefs 
+ */
+#define HDIR        HANDLE
+#define HFILE       HANDLE
+#define PHFILE      PHANDLE
+
+/* 
+ *    local functions 
+ */
+static char *getdirent(char *);
+static void free_dircontents(struct _dircontents *);
+
+static HDIR FindHandle;
+static WIN32_FIND_DATA FileFindData;
+
+static struct dirent dp;
+
+DIR *opendirx(char *name, char *pattern)
+{
+    struct stat statb;
+    DIR *dirp;
+    char c;
+    char *s;
+    struct _dircontents *dp;
+    int len;
+    int unc;
+    char path[OFS_MAXPATHNAME];
+    register char *ip, *op;
+
+    for (ip = name, op = path;; op++, ip++) {
+       *op = *ip;
+       if (*ip == '\0') {
+           break;
+       }
+    }
+    len = ip - name;
+    if (len > 0) {
+       unc = ((path[0] == '\\' || path[0] == '/') &&
+              (path[1] == '\\' || path[1] == '/'));
+       c = path[len - 1];
+       if (unc) {
+           if (c != '\\' && c != '/') {
+               path[len] = '/';
+               len++;
+               path[len] = '\0';
+           }
+       } else {
+           if ((c == '\\' || c == '/') && (len > 1)) {
+               len--;
+               path[len] = '\0';
+
+               if (path[len - 1] == ':') {
+                   path[len] = '/';
+                   len++;
+                   path[len] = '.';
+                   len++;
+                   path[len] = '\0';
+               }
+           } else if (c == ':') {
+               path[len] = '.';
+               len++;
+               path[len] = '\0';
+           }
+       }
+    } else {
+       unc = 0;
+       path[0] = '.';
+       path[1] = '\0';
+       len = 1;
+    }
+
+    if (stat(path, &statb) < 0 || (statb.st_mode & S_IFMT) != S_IFDIR) {
+       return NULL;
+    }
+    dirp = malloc(sizeof(DIR));
+    if (dirp == NULL) {
+       return dirp;
+    }
+    c = path[len - 1];
+    if (c == '.') {
+       if (len == 1) {
+           len--;
+       } else {
+           c = path[len - 2];
+           if (c == '\\' || c == ':') {
+               len--;
+           } else {
+               path[len] = '/';
+               len++;
+           }
+       }
+    } else if (!unc && ((len != 1) || (c != '\\' && c != '/'))) {
+       path[len] = '/';
+       len++;
+    }
+    strcpy(path + len, pattern);
+
+    dirp->dd_loc = 0;
+    dirp->dd_contents = dirp->dd_cp = NULL;
+
+    if ((s = getdirent(path)) == NULL) {
+       return dirp;
+    }
+    do {
+       if (((dp = malloc(sizeof(struct _dircontents))) == NULL) ||
+            ((dp->_d_entry = malloc(strlen(s) + 1)) == NULL)) {
+           if (dp)
+               free(dp);
+           free_dircontents(dirp->dd_contents);
+
+           return NULL;
+       }
+       if (dirp->dd_contents)
+           dirp->dd_cp = dirp->dd_cp->_d_next = dp;
+       else
+           dirp->dd_contents = dirp->dd_cp = dp;
+
+       strcpy(dp->_d_entry, s);
+       dp->_d_next = NULL;
+
+    }
+    while ((s = getdirent(NULL)) != NULL);
+
+    dirp->dd_cp = dirp->dd_contents;
+    return dirp;
+}
+
+DIR *opendir(char *name)
+{
+    return opendirx(name, "*");
+}
+
+void closedir(DIR * dirp)
+{
+    free_dircontents(dirp->dd_contents);
+    free(dirp);
+}
+
+struct dirent *readdir(DIR * dirp)
+{
+    /* static struct dirent dp; */
+    if (dirp->dd_cp == NULL)
+       return NULL;
+
+    /*strcpy(dp.d_name,dirp->dd_cp->_d_entry); */
+
+    dp.d_name = dirp->dd_cp->_d_entry;
+
+    dp.d_namlen = dp.d_reclen =
+       strlen(dp.d_name);
+
+    dp.d_ino = dirp->dd_loc + 1;       /* fake the inode */
+
+    dirp->dd_cp = dirp->dd_cp->_d_next;
+    dirp->dd_loc++;
+
+
+    return &dp;
+}
+
+void seekdir(DIR * dirp, long off)
+{
+    long i = off;
+    struct _dircontents *dp;
+
+    if (off >= 0) {
+       for (dp = dirp->dd_contents; --i >= 0 && dp; dp = dp->_d_next);
+
+       dirp->dd_loc = off - (i + 1);
+       dirp->dd_cp = dp;
+    }
+}
+
+
+long telldir(DIR * dirp)
+{
+    return dirp->dd_loc;
+}
+
+static void free_dircontents(struct _dircontents *dp)
+{
+    struct _dircontents *odp;
+
+    while (dp) {
+       if (dp->_d_entry)
+           free(dp->_d_entry);
+
+       dp = (odp = dp)->_d_next;
+       free(odp);
+    }
+}
+/* end of "free_dircontents" */
+
+static char *getdirent(char *dir)
+{
+    int got_dirent;
+
+    if (dir != NULL) {         /* get first entry */
+       if ((FindHandle = FindFirstFile(dir, &FileFindData))
+           == (HDIR) 0xffffffff) {
+           return NULL;
+       }
+       got_dirent = 1;
+    } else                     /* get next entry */
+       got_dirent = FindNextFile(FindHandle, &FileFindData);
+
+    if (got_dirent)
+       return FileFindData.cFileName;
+    else {
+       FindClose(FindHandle);
+       return NULL;
+    }
+}
+/* end of getdirent() */
+
+struct passwd *_cdecl
+ getpwnam(char *name)
+{
+    return NULL;
+}
+
+struct passwd *_cdecl
+ getpwuid(int uid)
+{
+    return NULL;
+}
+
+int getuid()
+{
+    return 0;
+}
+
+void _cdecl
+ endpwent(void)
+{
+}
+
+/* #endif */


Property changes on: GNUnet/libwebserver/contrib/Win32/dirent.c
___________________________________________________________________
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/contrib/Win32/dirent.h
===================================================================
--- GNUnet/libwebserver/contrib/Win32/dirent.h  2006-08-18 20:37:47 UTC (rev 
3245)
+++ GNUnet/libwebserver/contrib/Win32/dirent.h  2006-08-18 21:41:52 UTC (rev 
3246)
@@ -0,0 +1,56 @@
+/* 
+ * @(#) dirent.h 2.0 17 Jun 91   Public Domain. 
+ * 
+ *  A public domain implementation of BSD directory routines for 
+ *  MS-DOS.  Written by Michael Rendell ({uunet,address@hidden), 
+ *  August 1987 
+ * 
+ *  Enhanced and ported to OS/2 by Kai Uwe Rommel; added scandir() prototype 
+ *  December 1989, February 1990 
+ *  Change of MAXPATHLEN for HPFS, October 1990 
+ *   
+ *  Unenhanced and ported to Windows NT by Bill Gallagher 
+ *  17 Jun 91 
+ *  changed d_name to char * instead of array, removed non-std extensions 
+ *  
+ *  Cleanup, other hackery, Summer '92, Brian Moran , address@hidden 
+ */ 
+
+#ifndef _DIRENT
+#define _DIRENT
+
+#include <direct.h>
+
+struct dirent 
+{ 
+    ino_t    d_ino;                   /* a bit of a farce */ 
+    short    d_reclen;                /* more farce */ 
+    short    d_namlen;                /* length of d_name */ 
+    char    *d_name;
+}; 
+ 
+struct _dircontents 
+{ 
+    char *_d_entry; 
+    struct _dircontents *_d_next; 
+}; 
+ 
+typedef struct _dirdesc 
+{ 
+    int  dd_id;                           /* uniquely identify each open 
directory*/ 
+    long dd_loc;                       /* where we are in directory entry */ 
+    struct _dircontents *dd_contents;  /* pointer to contents of dir */ 
+    struct _dircontents *dd_cp;                /* pointer to current position 
*/ 
+} 
+DIR; 
+ 
+extern DIR *opendir(char *); 
+extern struct dirent *readdir(DIR *); 
+extern void seekdir(DIR *, long); 
+extern long telldir(DIR *); 
+extern void closedir(DIR *); 
+#define rewinddir(dirp) seekdir(dirp, 0L) 
+
+#endif /* _DIRENT */
+
+/* end of dirent.h */ 


Property changes on: GNUnet/libwebserver/contrib/Win32/dirent.h
___________________________________________________________________
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/contrib/Win32/flock.c
===================================================================
--- GNUnet/libwebserver/contrib/Win32/flock.c   2006-08-18 20:37:47 UTC (rev 
3245)
+++ GNUnet/libwebserver/contrib/Win32/flock.c   2006-08-18 21:41:52 UTC (rev 
3246)
@@ -0,0 +1,57 @@
+/* Copyrights 2002 Luis Figueiredo (address@hidden) All rights reserved. 
+ *
+ * See the LICENSE file
+ *
+ * The origin of this software must not be misrepresented, either by
+ * explicit claim or by omission.  Since few users ever read sources,
+ * credits must appear in the documentation.
+ *
+ * date: 19:49,07-49-2002
+ *
+ * -- description: File lock for winnt
+ *
+
+/*********************************************************************************************************/
+/* 
+ * simulate a file lock, using locking region on WINNT
+ */
+#include "flock.h"
+
+
+
+#define LK_ERR(f,i)    ((f) ? (i = 0) : (i=-1))
+#define LK_LEN         0xffff0000
+
+int flock(int fd, int oper) {
+    OVERLAPPED o;
+    int i = -1;
+    HANDLE fh;
+
+    fh = (HANDLE)_get_osfhandle(fd);
+    memset(&o, 0, sizeof(o));
+
+    switch(oper) {
+               case LOCK_SH:           /* shared lock */
+                       LK_ERR(LockFileEx(fh, 0, 0, LK_LEN, 0, &o),i);
+               break;
+               case LOCK_EX:           /* exclusive lock */
+                       LK_ERR(LockFileEx(fh, LOCKFILE_EXCLUSIVE_LOCK, 0, 
LK_LEN, 0, &o),i);
+               break;
+               case LOCK_SH|LOCK_NB:   /* non-blocking shared lock */
+                       LK_ERR(LockFileEx(fh, LOCKFILE_FAIL_IMMEDIATELY, 0, 
LK_LEN, 0, &o),i);
+               break;
+               case LOCK_EX|LOCK_NB:   /* non-blocking exclusive lock */
+                       
LK_ERR(LockFileEx(fh,LOCKFILE_EXCLUSIVE_LOCK|LOCKFILE_FAIL_IMMEDIATELY,0, 
LK_LEN, 0, &o),i);
+               break;
+               case LOCK_UN:           /* unlock lock */
+                       LK_ERR(UnlockFileEx(fh, 0, LK_LEN, 0, &o),i);
+               break;
+               default:                        /* unknown */
+                       //errno = EINVAL; // i heard that on some versions 
errno is a function (win32 MT lib?)
+               break;
+    }
+    return i;
+}
+
+#undef LK_ERR
+#undef LK_LEN
\ No newline at end of file


Property changes on: GNUnet/libwebserver/contrib/Win32/flock.c
___________________________________________________________________
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/contrib/Win32/flock.h
===================================================================
--- GNUnet/libwebserver/contrib/Win32/flock.h   2006-08-18 20:37:47 UTC (rev 
3245)
+++ GNUnet/libwebserver/contrib/Win32/flock.h   2006-08-18 21:41:52 UTC (rev 
3246)
@@ -0,0 +1,31 @@
+/* Copyrights 2002 Luis Figueiredo (address@hidden) All rights reserved. 
+ *
+ * See the LICENSE file
+ *
+ * The origin of this software must not be misrepresented, either by
+ * explicit claim or by omission.  Since few users ever read sources,
+ * credits must appear in the documentation.
+ *
+ * file: utils.h
+ *
+ * description: Header
+ *
+ * date: 19:50,07-50-2002
+ */
+
+#ifndef _FLOCK_H_
+#define _FLOCK_H_
+
+#include <windows.h>
+#include <io.h> // this?
+#include <errno.h>
+
+#define LOCK_SH 1
+#define LOCK_EX 2
+#define LOCK_NB 4
+#define LOCK_UN 8      
+
+int flock (int,int);
+
+
+#endif
\ No newline at end of file


Property changes on: GNUnet/libwebserver/contrib/Win32/flock.h
___________________________________________________________________
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/contrib/Win32/help/help.cfg
===================================================================
--- GNUnet/libwebserver/contrib/Win32/help/help.cfg     2006-08-18 20:37:47 UTC 
(rev 3245)
+++ GNUnet/libwebserver/contrib/Win32/help/help.cfg     2006-08-18 21:41:52 UTC 
(rev 3246)
@@ -0,0 +1,13 @@
+[LIBWEBSERVER]
+LOG=help.log
+PORT=81
+USESSL=0
+LOCAL=0
+DYNVAR=0
+
+
+[PERSONAL_CONF]
+PORT=Portability
+MOST=general key guard
+IP=127.0.0.1
+

Added: GNUnet/libwebserver/contrib/Win32/help/help.dsp
===================================================================
--- GNUnet/libwebserver/contrib/Win32/help/help.dsp     2006-08-18 20:37:47 UTC 
(rev 3245)
+++ GNUnet/libwebserver/contrib/Win32/help/help.dsp     2006-08-18 21:41:52 UTC 
(rev 3246)
@@ -0,0 +1,157 @@
+# Microsoft Developer Studio Project File - Name="help" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=help - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "help.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "help.mak" CFG="help - Win32 Release"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "help - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "help - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "help - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D 
"_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../include" /D "WIN32" /D "NDEBUG" /D 
"_CONSOLE" /D "_MBCS" /YX /FD /Zm200 /c
+# ADD BASE RSC /l 0x816 /d "NDEBUG"
+# ADD RSC /l 0x816 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib 
advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib 
odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib 
advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib 
odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 libwebserver.lib wsock32.lib user32.lib /nologo 
/subsystem:console /machine:I386 /out:"../../bin/help.exe" /libpath:"../../bin"
+# SUBTRACT LINK32 /pdb:none /nodefaultlib
+
+!ELSEIF  "$(CFG)" == "help - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D 
"_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /Gm /GX /ZI /Od /I "../../include" /D "_CONSOLE" /D "WIN32" 
/D "DEBUG" /D "_MBCS" /FA /FR /YX /FD /Zm200 /GZ /c
+# ADD BASE RSC /l 0x816 /d "_DEBUG"
+# ADD RSC /l 0x816 /d "DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib 
advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib 
odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib 
advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib 
odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libwebserver.lib wsock32.lib user32.lib /nologo 
/subsystem:console /debug /machine:I386 /out:"../../bin/help.exe" /pdbtype:sept 
/libpath:"../../bin"
+# SUBTRACT LINK32 /pdb:none
+
+!ENDIF 
+
+# Begin Target
+
+# Name "help - Win32 Release"
+# Name "help - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\help\help.c
+
+!IF  "$(CFG)" == "help - Win32 Release"
+
+# ADD CPP /I "../../include ./"
+# SUBTRACT CPP /I "../../include"
+
+!ELSEIF  "$(CFG)" == "help - Win32 Debug"
+
+# ADD CPP /I "../../include help/"
+# SUBTRACT CPP /I "../../include"
+
+!ENDIF 
+
+# End Source File
+# Begin Source File
+
+SOURCE=.\help.rc
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\help\examples.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\help\functions.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\help\info.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\help\security.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# Begin Source File
+
+SOURCE=.\help.ico
+# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=..\..\help.html\examples.html
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\help.html\functions.html
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\help.html\info.html
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\help.html\security.html
+# End Source File
+# End Target
+# End Project


Property changes on: GNUnet/libwebserver/contrib/Win32/help/help.dsp
___________________________________________________________________
Name: svn:eol-style
   + CRLF

Added: GNUnet/libwebserver/contrib/Win32/help/help.ico
===================================================================
(Binary files differ)


Property changes on: GNUnet/libwebserver/contrib/Win32/help/help.ico
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: GNUnet/libwebserver/contrib/Win32/help/help.rc
===================================================================
--- GNUnet/libwebserver/contrib/Win32/help/help.rc      2006-08-18 20:37:47 UTC 
(rev 3245)
+++ GNUnet/libwebserver/contrib/Win32/help/help.rc      2006-08-18 21:41:52 UTC 
(rev 3246)
@@ -0,0 +1,72 @@
+//Microsoft Developer Studio generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "afxres.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// Portuguese (Portugal) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_PTG)
+#ifdef _WIN32
+LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE
+#pragma code_page(1252)
+#endif //_WIN32
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE DISCARDABLE 
+BEGIN
+    "resource.h\0"
+END
+
+2 TEXTINCLUDE DISCARDABLE 
+BEGIN
+    "#include ""afxres.h""\r\n"
+    "\0"
+END
+
+3 TEXTINCLUDE DISCARDABLE 
+BEGIN
+    "\r\n"
+    "\0"
+END
+
+#endif    // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Icon
+//
+
+// Icon with lowest ID value placed first to ensure application icon
+// remains consistent on all systems.
+IDI_ICON1               ICON    DISCARDABLE     "help.ico"
+#endif    // Portuguese (Portugal) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif    // not APSTUDIO_INVOKED
+

Added: GNUnet/libwebserver/contrib/Win32/help/mime.types
===================================================================
--- GNUnet/libwebserver/contrib/Win32/help/mime.types   2006-08-18 20:37:47 UTC 
(rev 3245)
+++ GNUnet/libwebserver/contrib/Win32/help/mime.types   2006-08-18 21:41:52 UTC 
(rev 3246)
@@ -0,0 +1,469 @@
+# This is a comment. I love comments.
+
+# This file controls what Internet media types are sent to the client for
+# given file extension(s).  Sending the correct media type to the client
+# is important so they know how to handle the content of the file.
+# Extra types can either be added here or by using an AddType directive
+# in your config files. For more information about Internet media types,
+# please read RFC 2045, 2046, 2047, 2048, and 2077.  The Internet media type
+# registry is at <ftp://ftp.iana.org/in-notes/iana/assignments/media-types/>.
+
+# MIME type                    Extension
+application/EDI-Consent
+application/EDI-X12
+application/EDIFACT
+application/activemessage
+application/andrew-inset       ez
+application/applefile
+application/atomicmail
+application/batch-SMTP
+application/beep+xml
+application/cals-1840
+application/commonground
+application/cybercash
+application/dca-rft
+application/dec-dx
+application/dvcs
+application/eshop
+application/http
+application/hyperstudio
+application/iges
+application/index
+application/index.cmd
+application/index.obj
+application/index.response
+application/index.vnd
+application/iotp
+application/ipp
+application/isup
+application/font-tdpfr
+application/mac-binhex40       hqx
+application/mac-compactpro     cpt
+application/macwriteii
+application/marc
+application/mathematica
+application/mathematica-old
+application/msword             doc
+application/news-message-id
+application/news-transmission
+application/ocsp-request
+application/ocsp-response
+application/octet-stream       bin dms lha lzh exe class so dll
+application/oda                        oda
+application/parityfec
+application/pdf                        pdf
+application/pgp-encrypted
+application/pgp-keys
+application/pgp-signature
+application/pkcs10
+application/pkcs7-mime
+application/pkcs7-signature
+application/pkix-cert
+application/pkix-crl
+application/pkixcmp
+application/postscript         ai eps ps
+application/prs.alvestrand.titrax-sheet
+application/prs.cww
+application/prs.nprend
+application/qsig
+application/remote-printing
+application/riscos
+application/rtf
+application/sdp
+application/set-payment
+application/set-payment-initiation
+application/set-registration
+application/set-registration-initiation
+application/sgml
+application/sgml-open-catalog
+application/sieve
+application/slate
+application/smil               smi smil
+application/timestamp-query
+application/timestamp-reply
+application/vemmi
+application/vnd.3M.Post-it-Notes
+application/vnd.FloGraphIt
+application/vnd.accpac.simply.aso
+application/vnd.accpac.simply.imp
+application/vnd.acucobol
+application/vnd.aether.imp
+application/vnd.anser-web-certificate-issue-initiation
+application/vnd.anser-web-funds-transfer-initiation
+application/vnd.audiograph
+application/vnd.businessobjects
+application/vnd.bmi
+application/vnd.canon-cpdl
+application/vnd.canon-lips
+application/vnd.claymore
+application/vnd.commerce-battelle
+application/vnd.commonspace
+application/vnd.comsocaller
+application/vnd.contact.cmsg
+application/vnd.cosmocaller
+application/vnd.cups-postscript
+application/vnd.cups-raster
+application/vnd.cups-raw
+application/vnd.ctc-posml
+application/vnd.cybank
+application/vnd.dna
+application/vnd.dpgraph
+application/vnd.dxr
+application/vnd.ecdis-update
+application/vnd.ecowin.chart
+application/vnd.ecowin.filerequest
+application/vnd.ecowin.fileupdate
+application/vnd.ecowin.series
+application/vnd.ecowin.seriesrequest
+application/vnd.ecowin.seriesupdate
+application/vnd.enliven
+application/vnd.epson.esf
+application/vnd.epson.msf
+application/vnd.epson.quickanime
+application/vnd.epson.salt
+application/vnd.epson.ssf
+application/vnd.ericsson.quickcall
+application/vnd.eudora.data
+application/vnd.fdf
+application/vnd.ffsns
+application/vnd.framemaker
+application/vnd.fsc.weblaunch
+application/vnd.fujitsu.oasys
+application/vnd.fujitsu.oasys2
+application/vnd.fujitsu.oasys3
+application/vnd.fujitsu.oasysgp
+application/vnd.fujitsu.oasysprs
+application/vnd.fujixerox.ddd
+application/vnd.fujixerox.docuworks
+application/vnd.fujixerox.docuworks.binder
+application/vnd.fut-misnet
+application/vnd.grafeq
+application/vnd.groove-account
+application/vnd.groove-identity-message
+application/vnd.groove-injector
+application/vnd.groove-tool-message
+application/vnd.groove-tool-template
+application/vnd.groove-vcard
+application/vnd.hhe.lesson-player
+application/vnd.hp-HPGL
+application/vnd.hp-PCL
+application/vnd.hp-PCLXL
+application/vnd.hp-hpid
+application/vnd.hp-hps
+application/vnd.httphone
+application/vnd.hzn-3d-crossword
+application/vnd.ibm.afplinedata
+application/vnd.ibm.MiniPay
+application/vnd.ibm.modcap
+application/vnd.informix-visionary
+application/vnd.intercon.formnet
+application/vnd.intertrust.digibox
+application/vnd.intertrust.nncp
+application/vnd.intu.qbo
+application/vnd.intu.qfx
+application/vnd.irepository.package+xml
+application/vnd.is-xpr
+application/vnd.japannet-directory-service
+application/vnd.japannet-jpnstore-wakeup
+application/vnd.japannet-payment-wakeup
+application/vnd.japannet-registration
+application/vnd.japannet-registration-wakeup
+application/vnd.japannet-setstore-wakeup
+application/vnd.japannet-verification
+application/vnd.japannet-verification-wakeup
+application/vnd.koan
+application/vnd.lotus-1-2-3
+application/vnd.lotus-approach
+application/vnd.lotus-freelance
+application/vnd.lotus-notes
+application/vnd.lotus-organizer
+application/vnd.lotus-screencam
+application/vnd.lotus-wordpro
+application/vnd.mcd
+application/vnd.mediastation.cdkey
+application/vnd.meridian-slingshot
+application/vnd.mif            mif
+application/vnd.minisoft-hp3000-save
+application/vnd.mitsubishi.misty-guard.trustweb
+application/vnd.mobius.daf
+application/vnd.mobius.dis
+application/vnd.mobius.msl
+application/vnd.mobius.plc
+application/vnd.mobius.txf
+application/vnd.motorola.flexsuite
+application/vnd.motorola.flexsuite.adsi
+application/vnd.motorola.flexsuite.fis
+application/vnd.motorola.flexsuite.gotap
+application/vnd.motorola.flexsuite.kmr
+application/vnd.motorola.flexsuite.ttc
+application/vnd.motorola.flexsuite.wem
+application/vnd.mozilla.xul+xml
+application/vnd.ms-artgalry
+application/vnd.ms-asf
+application/vnd.ms-excel       xls
+application/vnd.ms-lrm
+application/vnd.ms-powerpoint  ppt
+application/vnd.ms-project
+application/vnd.ms-tnef
+application/vnd.ms-works
+application/vnd.mseq
+application/vnd.msign
+application/vnd.music-niff
+application/vnd.musician
+application/vnd.netfpx
+application/vnd.noblenet-directory
+application/vnd.noblenet-sealer
+application/vnd.noblenet-web
+application/vnd.novadigm.EDM
+application/vnd.novadigm.EDX
+application/vnd.novadigm.EXT
+application/vnd.osa.netdeploy
+application/vnd.palm
+application/vnd.pg.format
+application/vnd.pg.osasli
+application/vnd.powerbuilder6
+application/vnd.powerbuilder6-s
+application/vnd.powerbuilder7
+application/vnd.powerbuilder7-s
+application/vnd.powerbuilder75
+application/vnd.powerbuilder75-s
+application/vnd.previewsystems.box
+application/vnd.publishare-delta-tree
+application/vnd.pvi.ptid1
+application/vnd.pwg-xhtml-print+xml
+application/vnd.rapid
+application/vnd.s3sms
+application/vnd.seemail
+application/vnd.shana.informed.formdata
+application/vnd.shana.informed.formtemplate
+application/vnd.shana.informed.interchange
+application/vnd.shana.informed.package
+application/vnd.sss-cod
+application/vnd.sss-dtf
+application/vnd.sss-ntf
+application/vnd.street-stream
+application/vnd.svd
+application/vnd.swiftview-ics
+application/vnd.triscape.mxs
+application/vnd.trueapp
+application/vnd.truedoc
+application/vnd.tve-trigger
+application/vnd.ufdl
+application/vnd.uplanet.alert
+application/vnd.uplanet.alert-wbxml
+application/vnd.uplanet.bearer-choice-wbxml
+application/vnd.uplanet.bearer-choice
+application/vnd.uplanet.cacheop
+application/vnd.uplanet.cacheop-wbxml
+application/vnd.uplanet.channel
+application/vnd.uplanet.channel-wbxml
+application/vnd.uplanet.list
+application/vnd.uplanet.list-wbxml
+application/vnd.uplanet.listcmd
+application/vnd.uplanet.listcmd-wbxml
+application/vnd.uplanet.signal
+application/vnd.vcx
+application/vnd.vectorworks
+application/vnd.vidsoft.vidconference
+application/vnd.visio
+application/vnd.vividence.scriptfile
+application/vnd.wap.sic
+application/vnd.wap.slc
+application/vnd.wap.wbxml      wbxml
+application/vnd.wap.wmlc       wmlc
+application/vnd.wap.wmlscriptc wmlsc
+application/vnd.webturbo
+application/vnd.wrq-hp3000-labelled
+application/vnd.wt.stf
+application/vnd.xara
+application/vnd.xfdl
+application/vnd.yellowriver-custom-menu
+application/whoispp-query
+application/whoispp-response
+application/wita
+application/wordperfect5.1
+application/x-bcpio            bcpio
+application/x-cdlink           vcd
+application/x-chess-pgn                pgn
+application/x-compress
+application/x-cpio             cpio
+application/x-csh              csh
+application/x-director         dcr dir dxr
+application/x-dvi              dvi
+application/x-futuresplash     spl
+application/x-gtar             gtar
+application/x-gzip
+application/x-hdf              hdf
+application/x-javascript       js
+application/x-koan             skp skd skt skm
+application/x-latex            latex
+application/x-netcdf           nc cdf
+application/x-sh               sh
+application/x-shar             shar
+application/x-shockwave-flash  swf
+application/x-stuffit          sit
+application/x-sv4cpio          sv4cpio
+application/x-sv4crc           sv4crc
+application/x-tar              tar
+application/x-tcl              tcl
+application/x-tex              tex
+application/x-texinfo          texinfo texi
+application/x-troff            t tr roff
+application/x-troff-man                man
+application/x-troff-me         me
+application/x-troff-ms         ms
+application/x-ustar            ustar
+application/x-wais-source      src
+application/x400-bp
+application/xml
+application/xml-dtd
+application/xml-external-parsed-entity
+application/zip                        zip
+audio/32kadpcm
+audio/basic                    au snd
+audio/g.722.1
+audio/l16
+audio/midi                     mid midi kar
+audio/mp4a-latm
+audio/mpa-robust
+audio/mpeg                     mpga mp2 mp3
+audio/parityfec
+audio/prs.sid
+audio/telephone-event
+audio/tone
+audio/vnd.cisco.nse
+audio/vnd.cns.anp1
+audio/vnd.cns.inf1
+audio/vnd.digital-winds
+audio/vnd.everad.plj
+audio/vnd.lucent.voice
+audio/vnd.nortel.vbk
+audio/vnd.nuera.ecelp4800
+audio/vnd.nuera.ecelp7470
+audio/vnd.nuera.ecelp9600
+audio/vnd.octel.sbc
+audio/vnd.qcelp
+audio/vnd.rhetorex.32kadpcm
+audio/vnd.vmx.cvsd
+audio/x-aiff                   aif aiff aifc
+audio/x-mpegurl                        m3u
+audio/x-pn-realaudio           ram rm
+audio/x-pn-realaudio-plugin    rpm
+audio/x-realaudio              ra
+audio/x-wav                    wav
+chemical/x-pdb                 pdb
+chemical/x-xyz                 xyz
+image/bmp                      bmp
+image/cgm
+image/g3fax
+image/gif                      gif
+image/ief                      ief
+image/jpeg                     jpeg jpg jpe
+image/naplps
+image/png                      png
+image/prs.btif
+image/prs.pti
+image/tiff                     tiff tif
+image/vnd.cns.inf2
+image/vnd.dwg
+image/vnd.dxf
+image/vnd.fastbidsheet
+image/vnd.fpx
+image/vnd.fst
+image/vnd.fujixerox.edmics-mmr
+image/vnd.fujixerox.edmics-rlc
+image/vnd.mix
+image/vnd.net-fpx
+image/vnd.svf
+image/vnd.wap.wbmp             wbmp
+image/vnd.xiff
+image/x-cmu-raster             ras
+image/x-portable-anymap                pnm
+image/x-portable-bitmap                pbm
+image/x-portable-graymap       pgm
+image/x-portable-pixmap                ppm
+image/x-rgb                    rgb
+image/x-xbitmap                        xbm
+image/x-xpixmap                        xpm
+image/x-xwindowdump            xwd
+message/delivery-status
+message/disposition-notification
+message/external-body
+message/http
+message/news
+message/partial
+message/rfc822
+message/s-http
+model/iges                     igs iges
+model/mesh                     msh mesh silo
+model/vnd.dwf
+model/vnd.flatland.3dml
+model/vnd.gdl
+model/vnd.gs-gdl
+model/vnd.gtw
+model/vnd.mts
+model/vnd.vtu
+model/vrml                     wrl vrml
+multipart/alternative
+multipart/appledouble
+multipart/byteranges
+multipart/digest
+multipart/encrypted
+multipart/form-data
+multipart/header-set
+multipart/mixed
+multipart/parallel
+multipart/related
+multipart/report
+multipart/signed
+multipart/voice-message
+text/calendar
+text/css                       css
+text/directory
+text/enriched
+text/html                      html htm
+text/parityfec
+text/plain                     asc txt
+text/prs.lines.tag
+text/rfc822-headers
+text/richtext                  rtx
+text/rtf                       rtf
+text/sgml                      sgml sgm
+text/tab-separated-values      tsv
+text/t140
+text/uri-list
+text/vnd.DMClientScript
+text/vnd.IPTC.NITF
+text/vnd.IPTC.NewsML
+text/vnd.abc
+text/vnd.curl
+text/vnd.flatland.3dml
+text/vnd.fly
+text/vnd.fmi.flexstor
+text/vnd.in3d.3dml
+text/vnd.in3d.spot
+text/vnd.latex-z
+text/vnd.motorola.reflex
+text/vnd.ms-mediapackage
+text/vnd.wap.si
+text/vnd.wap.sl
+text/vnd.wap.wml               wml
+text/vnd.wap.wmlscript         wmls
+text/x-setext                  etx
+text/xml                       xml xsl
+text/xml-external-parsed-entity
+video/mp4v-es
+video/mpeg                     mpeg mpg mpe
+video/parityfec
+video/pointer
+video/quicktime                        qt mov
+video/vnd.fvt
+video/vnd.motorola.video
+video/vnd.motorola.videop
+video/vnd.mpegurl              mxu
+video/vnd.mts
+video/vnd.nokia.interleaved-multimedia
+video/vnd.vivo
+video/x-msvideo                        avi
+video/x-sgi-movie              movie
+x-conference/x-cooltalk                ice

Added: GNUnet/libwebserver/contrib/Win32/help/resource.h
===================================================================
--- GNUnet/libwebserver/contrib/Win32/help/resource.h   2006-08-18 20:37:47 UTC 
(rev 3245)
+++ GNUnet/libwebserver/contrib/Win32/help/resource.h   2006-08-18 21:41:52 UTC 
(rev 3246)
@@ -0,0 +1,16 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Developer Studio generated include file.
+// Used by help.rc
+//
+#define IDI_ICON1                       101
+
+// Next default values for new objects
+// 
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE        102
+#define _APS_NEXT_COMMAND_VALUE         40001
+#define _APS_NEXT_CONTROL_VALUE         1000
+#define _APS_NEXT_SYMED_VALUE           101
+#endif
+#endif


Property changes on: GNUnet/libwebserver/contrib/Win32/help/resource.h
___________________________________________________________________
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/contrib/Win32/libwebserver.dsp
===================================================================
--- GNUnet/libwebserver/contrib/Win32/libwebserver.dsp  2006-08-18 20:37:47 UTC 
(rev 3245)
+++ GNUnet/libwebserver/contrib/Win32/libwebserver.dsp  2006-08-18 21:41:52 UTC 
(rev 3246)
@@ -0,0 +1,237 @@
+# Microsoft Developer Studio Project File - Name="libwebserver" - Package 
Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=libwebserver - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "libwebserver.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "libwebserver.mak" CFG="libwebserver - Win32 Release"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "libwebserver - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "libwebserver - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "libwebserver - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" 
/YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../include" /I "./" /D "WIN32" /D "NDEBUG" 
/D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD BASE RSC /l 0x816 /d "NDEBUG"
+# ADD RSC /l 0x816 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"../bin/libwebserver.lib"
+
+!ELSEIF  "$(CFG)" == "libwebserver - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" 
/D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /Gm /GX /ZI /Od /I "./" /I "../include" /D "_LIB" /D "WIN32" 
/D "_DEBUG" /D "_MBCS" /FA /YX /FD /GZ /c
+# SUBTRACT CPP /X
+# ADD BASE RSC /l 0x816 /d "_DEBUG"
+# ADD RSC /l 0x816 /d "DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"../bin/libwebserver.lib"
+
+!ENDIF 
+
+# Begin Target
+
+# Name "libwebserver - Win32 Release"
+# Name "libwebserver - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\src\client.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\clientinfo.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\dirent.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\error.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\flock.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\fnmatch.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\gethandler.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\memory.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\outgif.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\outstream.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\server.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\socket.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\utils.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\weblog.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\include\client.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\include\clientinfo.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\include\config.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\include\debug.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\dirent.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\include\error.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\flock.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\include\fnmatch.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\include\gethandler.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\include\logo.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\include\memory.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\include\module.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\include\outgif.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\include\outstream.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\include\server.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\include\socket.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\include\utils.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\include\web_server.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\include\weblog.h
+# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=..\Authors
+# End Source File
+# Begin Source File
+
+SOURCE=..\ChangeLog
+# End Source File
+# Begin Source File
+
+SOURCE=..\Todo
+# End Source File
+# End Target
+# End Project


Property changes on: GNUnet/libwebserver/contrib/Win32/libwebserver.dsp
___________________________________________________________________
Name: svn:eol-style
   + CRLF

Added: GNUnet/libwebserver/contrib/Win32/libwebserver.dsw
===================================================================
--- GNUnet/libwebserver/contrib/Win32/libwebserver.dsw  2006-08-18 20:37:47 UTC 
(rev 3245)
+++ GNUnet/libwebserver/contrib/Win32/libwebserver.dsw  2006-08-18 21:41:52 UTC 
(rev 3246)
@@ -0,0 +1,44 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "help"=".\help\help.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+    Begin Project Dependency
+    Project_Dep_Name libwebserver
+    End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "libwebserver"=".\libwebserver.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+


Property changes on: GNUnet/libwebserver/contrib/Win32/libwebserver.dsw
___________________________________________________________________
Name: svn:eol-style
   + CRLF

Added: GNUnet/libwebserver/contrib/help/engine.h
===================================================================
--- GNUnet/libwebserver/contrib/help/engine.h   2006-08-18 20:37:47 UTC (rev 
3245)
+++ GNUnet/libwebserver/contrib/help/engine.h   2006-08-18 21:41:52 UTC (rev 
3246)
@@ -0,0 +1,9 @@
+/*
+ * by data2header by Luis Figueiredo (address@hidden)
+ */
+#ifndef _ENGINE_H_
+#define _ENGINE_H_
+
+char engine[]="";
+
+#endif


Property changes on: GNUnet/libwebserver/contrib/help/engine.h
___________________________________________________________________
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/contrib/help/examples.h
===================================================================
--- GNUnet/libwebserver/contrib/help/examples.h 2006-08-18 20:37:47 UTC (rev 
3245)
+++ GNUnet/libwebserver/contrib/help/examples.h 2006-08-18 21:41:52 UTC (rev 
3246)
@@ -0,0 +1,605 @@
+/*
+ * by data2header by Luis Figueiredo (address@hidden)
+ */
+#ifndef _EXAMPLES_H_
+#define _EXAMPLES_H_
+
+char 
examples[]="\x3C\x63\x65\x6E\x74\x65\x72\x3E\x3C\x48\x33\x3E\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27"
+"\x30\x30\x37\x37\x30\x30\x27\x3E\x6C\x69\x62\x77\x65\x62\x73\x65\x72\x76\x65\x72\x20\x65\x78\x61\x6D\x70"
+"\x6C\x65\x73\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x48\x33\x3E\x3C\x2F\x63\x65\x6E\x74\x65\x72\x3E\x3C\x42"
+"\x52\x3E\x3C\x42\x52\x3E\xA\xA\x3C\x21\x2D\x2D\x20\x4A\x6F\x68\x61\x6E\x6E\x65\x73\x20\x45\x2E\x20\x53"
+"\x63\x68\x69\x6E\x64\x65\x6C\x69\x6E\x20\x2D\x2D\x3E\xA\x3C\x63\x65\x6E\x74\x65\x72\x3E\x3C\x41\x20\x6E"
+"\x61\x6D\x65\x3D\x68\x65\x6C\x6C\x6F\x77\x6F\x72\x6C\x64\x3E\x3C\x42\x3E\x3C\x66\x6F\x6E\x74\x20\x63\x6F"
+"\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37\x37\x27\x3E\x3C\x61\x20\x68\x72\x65\x66\x3D\x2F\x68\x65\x6C\x6C"
+"\x6F\x3E\x3C\x48\x33\x3E\x48\x65\x6C\x6C\x6F\x20\x57\x6F\x72\x6C\x64\x3C\x2F\x48\x33\x3E\x3C\x2F\x61\x3E"
+"\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\x3C\x2F\x63\x65\x6E\x74\x65\x72\x3E\xA\x3C\x73\x6D\x61\x6C"
+"\x6C\x3E\x20\x3C\x42\x3E\x75\x73\x65\x64\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x3A\x3C\x2F\x42\x3E\x3C"
+"\x42\x52\x3E\xA\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69"
+"\x6F\x6E\x73\x23\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E\x69\x74\x27\x3E\x77\x65\x62\x5F\x73"
+"\x65\x72\x76\x65\x72\x5F\x69\x6E\x69\x74\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\xA\x3C\x61\x20\x68\x72\x65\x66"
+"\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x73\x65\x72"
+"\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x27\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72"
+"\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\xA\x3C\x61\x20\x68\x72\x65"
+"\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x73\x65"
+"\x72\x76\x65\x72\x5F\x72\x75\x6E\x27\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x72\x75\x6E\x3C\x2F"
+"\x61\x3E\x3C\x42\x52\x3E\xA\x3C\x2F\x73\x6D\x61\x6C\x6C\x3E\x3C\x42\x52\x3E\xA\xA\x54\x68\x69\x73\x20"
+"\x65\x78\x61\x6D\x70\x6C\x65\x20\x73\x74\x61\x72\x74\x73\x20\x74\x68\x65\x20\x73\x65\x72\x76\x65\x72\x20"
+"\x77\x69\x74\x68\x20\x6F\x6E\x65\x20\x68\x61\x6E\x64\x6C\x65\x72\x20\x66\x6F\x72\x20\x61\x6C\x6C\x20\x72"
+"\x65\x71\x75\x65\x73\x74\x73\x20\x70\x6F\x69\x6E\x74\x69\x6E\x67\x20\x74\x6F\x20\x68\x65\x6C\x6C\x6F\x5F"
+"\x77\x6F\x72\x6C\x64\x28\x29\xA\x74\x68\x61\x74\x20\x70\x72\x69\x6E\x74\x73\x20\x74\x68\x65\x20\x63\x6F"
+"\x6E\x74\x65\x6E\x74\x2D\x74\x79\x70\x65\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x65\x6E\x64\x20\x6F\x66"
+"\x20\x74\x68\x65\x20\x68\x65\x61\x64\x65\x72\x20\x22\x5C\x72\x5C\x6E\x5C\x72\x5C\x6E\x22\x20\x61\x6E\x64"
+"\x20\x6F\x6E\x65\x20\x73\x69\x6D\x70\x6C\x65\x20\x70\x72\x69\x6E\x74\x66\x20\x77\x69\x74\x68\x20\x48\x65"
+"\x6C\x6C\x6F\x20\x77\x6F\x72\x6C\x64\x3C\x42\x52\x3E\x3C\x42\x52\x3E\xA\xA\x3C\x54\x41\x42\x4C\x45\x20"
+"\x77\x69\x64\x74\x68\x3D\x27\x31\x30\x30\x25\x27\x20\x62\x67\x63\x6F\x6C\x6F\x72\x3D\x27\x43\x46\x43\x46"
+"\x43\x46\x27\x20\x62\x6F\x72\x64\x65\x72\x3D\x30\x3E\x3C\x54\x52\x3E\x3C\x54\x44\x3E\xA\x3C\x43\x4F\x44"
+"\x45\x3E\x3C\x50\x52\x45\x3E\xA\x23\x69\x6E\x63\x6C\x75\x64\x65\x20\x22\x77\x65\x62\x5F\x73\x65\x72\x76"
+"\x65\x72\x2E\x68\x22\xA\x23\x69\x6E\x63\x6C\x75\x64\x65\x20\x26\x6C\x74\x3B\x73\x74\x64\x69\x6F\x2E\x68"
+"\x26\x67\x74\x3B\xA\xA\xA\x76\x6F\x69\x64\x20\x68\x65\x6C\x6C\x6F\x5F\x77\x6F\x72\x6C\x64\x28\x29\x20"
+"\x7B\xA\x9\x70\x72\x69\x6E\x74\x66\x28\x22\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x74\x79\x70\x65\x3A\x20\x74"
+"\x65\x78\x74\x2F\x70\x6C\x61\x69\x6E\x5C\x72\x5C\x6E\x5C\x72\x5C\x6E\x22\x29\x3B\xA\x9\x70\x72\x69\x6E"
+"\x74\x66\x28\x22\x48\x65\x6C\x6C\x6F\x2C\x20\x57\x6F\x72\x6C\x64\x21\x5C\x72\x5C\x6E\x22\x29\x3B\xA\x7D"
+"\xA\xA\x69\x6E\x74\x20\x6D\x61\x69\x6E\x28\x69\x6E\x74\x20\x61\x72\x67\x63\x2C\x63\x68\x61\x72\x2A\x2A"
+"\x20\x61\x72\x67\x76\x29\x20\x7B\xA\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x72\x75\x63\x74\x20\x77\x65"
+"\x62\x5F\x73\x65\x72\x76\x65\x72\x20\x73\x65\x72\x76\x65\x72\x3B\x20\x2F\x2F\x20\x73\x65\x72\x76\x65\x72"
+"\x20\x68\x61\x6E\x64\x6C\x65\x72\xA\x20\x20\x20\x20\x20\x20\x20\x20\x69\x66\x28\x21\x77\x65\x62\x5F\x73"
+"\x65\x72\x76\x65\x72\x5F\x69\x6E\x69\x74\x28\x26\x73\x65\x72\x76\x65\x72\x2C\x38\x30\x2C\x22\x68\x65\x6C"
+"\x70\x2E\x6C\x6F\x67\x22\x2C\x30\x29\x29\x20\x7B\x20\x2F\x2F\x20\x69\x6E\x69\x74\x69\x61\x6C\x69\x7A\x65"
+"\x20\x61\x6E\x64\x20\x73\x74\x61\x72\x74\x20\x74\x68\x65\x20\x73\x65\x72\x76\x65\x72\x20\x61\x74\x20\x70"
+"\x6F\x72\x74\x20\x38\x30\x2C\x20\x6C\x6F\x67\x67\x69\x6E\x67\x20\x74\x6F\x20\x68\x65\x6C\x70\x2E\x6C\x6F"
+"\x67\xA\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x66\x70\x72\x69\x6E\x74\x66\x28"
+"\x73\x74\x64\x65\x72\x72\x2C\x22\x63\x61\x6E\x27\x74\x20\x6F\x70\x65\x6E\x20\x6C\x69\x73\x74\x65\x6E\x20"
+"\x73\x6F\x63\x6B\x65\x74\x5C\x6E\x22\x29\x3B\xA\x9\x9\x72\x65\x74\x75\x72\x6E\x20\x31\x3B\xA\x20\x20"
+"\x20\x20\x20\x20\x20\x20\x7D\x3B\xA\xA\x20\x20\x20\x20\x20\x20\x20\x20\x77\x65\x62\x5F\x73\x65\x72\x76"
+"\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x28\x26\x73\x65\x72\x76\x65\x72\x2C\x22\x2A\x20\x2A"
+"\x22\x2C\x68\x65\x6C\x6C\x6F\x5F\x77\x6F\x72\x6C\x64\x2C\x30\x29\x3B\x20\x2F\x2F\x20\x61\x64\x64\x20\x68"
+"\x61\x6E\x64\x6C\x65\x72\x20\x66\x6F\x72\x20\x61\x6C\x6C\x20\x72\x65\x71\x75\x65\x73\x74\x73\xA\x20\x20"
+"\x20\x20\x20\x20\x20\x20\x77\x68\x69\x6C\x65\x28\x31\x29\x20\x7B\xA\x20\x20\x20\x20\x20\x20\x20\x20\x20"
+"\x20\x20\x20\x20\x20\x20\x20\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x72\x75\x6E\x28\x26\x73\x65\x72"
+"\x76\x65\x72\x29\x3B\x20\x20\x20\x2F\x2F\x20\x72\x75\x6E\x20\x73\x65\x72\x76\x65\x72\xA\x20\x20\x20\x20"
+"\x20\x20\x20\x20\x7D\x3B\xA\x7D\xA\x3C\x2F\x50\x52\x45\x3E\x3C\x2F\x43\x4F\x44\x45\x3E\xA\x3C\x2F\x54"
+"\x44\x3E\x3C\x2F\x54\x52\x3E\x3C\x2F\x54\x41\x42\x4C\x45\x3E\xA\x3C\x48\x52\x3E\x3C\x42\x52\x3E\xA\xA"
+"\x3C\x63\x65\x6E\x74\x65\x72\x3E\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x6C\x6F\x67\x66\x69\x6C\x65\x3E\x3C\x42"
+"\x3E\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37\x37\x27\x3E\x3C\x61\x20\x68"
+"\x72\x65\x66\x3D\x27\x2F\x6C\x6F\x67\x27\x3E\x3C\x48\x33\x3E\x6C\x6F\x67\x66\x69\x6C\x65\x3C\x2F\x48\x33"
+"\x3E\x3C\x2F\x61\x3E\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\x3C\x2F\x63\x65\x6E\x74\x65\x72\x3E\xA"
+"\x3C\x73\x6D\x61\x6C\x6C\x3E\x20\x3C\x42\x3E\x75\x73\x65\x64\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x3A"
+"\x3C\x2F\x42\x3E\x3C\x42\x52\x3E\xA\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66"
+"\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E\x69\x74\x27\x3E"
+"\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E\x69\x74\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\xA\x3C\x61"
+"\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65"
+"\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x27\x3E\x77\x65\x62\x5F\x73"
+"\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\xA\x3C"
+"\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77"
+"\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x72\x75\x6E\x27\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F"
+"\x72\x75\x6E\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\xA\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C"
+"\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x61\x64\x64"
+"\x66\x69\x6C\x65\x27\x3E\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x61\x64\x64\x66\x69\x6C\x65\x3C\x2F"
+"\x61\x3E\x3C\x42\x52\x3E\xA\x3C\x2F\x73\x6D\x61\x6C\x6C\x3E\x3C\x42\x52\x3E\xA\xA\x54\x68\x69\x73\x20"
+"\x65\x78\x61\x6D\x70\x6C\x65\x20\x75\x73\x65\x73\x20\x74\x68\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20"
+"\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23"
+"\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x61\x64\x64\x66\x69\x6C\x65\x27\x3E\x77\x65\x62\x5F\x63\x6C"
+"\x69\x65\x6E\x74\x5F\x61\x64\x64\x66\x69\x6C\x65\x3C\x2F\x61\x3E\x20\x74\x6F\x20\x73\x65\x6E\x64\x20\x61"
+"\x20\x66\x69\x6C\x65\x20\x74\x6F\x20\x63\x6C\x69\x65\x6E\x74\xA\x3C\x42\x52\x3E\x3C\x42\x52\x3E\xA\x3C"
+"\x54\x41\x42\x4C\x45\x20\x77\x69\x64\x74\x68\x3D\x27\x31\x30\x30\x25\x27\x20\x62\x67\x63\x6F\x6C\x6F\x72"
+"\x3D\x27\x43\x46\x43\x46\x43\x46\x27\x20\x62\x6F\x72\x64\x65\x72\x3D\x30\x3E\x3C\x54\x52\x3E\x3C\x54\x44"
+"\x3E\xA\x3C\x43\x4F\x44\x45\x3E\x3C\x50\x52\x45\x3E\xA\x23\x69\x6E\x63\x6C\x75\x64\x65\x20\x22\x77\x65"
+"\x62\x5F\x73\x65\x72\x76\x65\x72\x2E\x68\x22\xA\x23\x69\x6E\x63\x6C\x75\x64\x65\x20\x26\x6C\x74\x3B\x73"
+"\x74\x64\x69\x6F\x2E\x68\x26\x67\x74\x3B\xA\xA\x76\x6F\x69\x64\x20\x6C\x6F\x67\x66\x69\x6C\x65\x28\x29"
+"\x20\x7B\xA\x20\x20\x20\x20\x20\x20\x20\x20\x70\x72\x69\x6E\x74\x66\x28\x22\x43\x6F\x6E\x74\x65\x6E\x74"
+"\x2D\x74\x79\x70\x65\x3A\x20\x74\x65\x78\x74\x2F\x70\x6C\x61\x69\x6E\x5C\x72\x5C\x6E\x5C\x72\x5C\x6E\x22"
+"\x29\x3B\xA\x20\x20\x20\x20\x20\x20\x20\x20\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x61\x64\x64\x66"
+"\x69\x6C\x65\x28\x73\x65\x72\x76\x65\x72\x2E\x6C\x6F\x67\x66\x69\x6C\x65\x29\x3B\x20\x2F\x2F\x20\x61\x64"
+"\x64\x20\x68\x65\x6C\x70\x2E\x6C\x6F\x67\x20\x66\x69\x6C\x65\x20\x74\x6F\x20\x6F\x75\x74\x70\x75\x74\xA"
+"\x20\x20\x20\x20\x20\x20\x20\x20\x70\x72\x69\x6E\x74\x66\x28\x22\x45\x6E\x64\x20\x6F\x66\x20\x6C\x6F\x67"
+"\x5C\x6E\x22\x29\x3B\xA\x7D\x3B\xA\x20\x20\x20\x20\x20\x20\x20\x20\xA\xA\x6D\x61\x69\x6E\x28\x29\x20"
+"\x7B\xA\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x72\x75\x63\x74\x20\x77\x65\x62\x5F\x73\x65\x72\x76\x65"
+"\x72\x20\x73\x65\x72\x76\x65\x72\x3B\x20\x2F\x2F\x20\x73\x65\x72\x76\x65\x72\x20\x68\x61\x6E\x64\x6C\x65"
+"\x72\xA\x20\x20\x20\x20\x20\x20\x20\x20\x69\x66\x28\x21\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x69"
+"\x6E\x69\x74\x28\x26\x73\x65\x72\x76\x65\x72\x2C\x38\x32\x2C\x22\x68\x65\x6C\x70\x2E\x6C\x6F\x67\x22\x2C"
+"\x30\x29\x29\x20\x7B\x20\x2F\x2F\x20\x69\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x65\xA\x20\x20\x20\x20"
+"\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x66\x70\x72\x69\x6E\x74\x66\x28\x73\x74\x64\x65\x72\x72"
+"\x2C\x22\x63\x61\x6E\x27\x74\x20\x6F\x70\x65\x6E\x20\x6C\x69\x73\x74\x65\x6E\x20\x73\x6F\x63\x6B\x65\x74"
+"\x5C\x6E\x22\x29\x3B\xA\x20\x20\x20\x20\x20\x20\x20\x20\x7D\x3B\xA\xA\x20\x20\x20\x20\x20\x20\x20\x20"
+"\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x28\x26\x73\x65\x72"
+"\x76\x65\x72\x2C\x22\x2A\x20\x2F\x6C\x6F\x67\x22\x2C\x6C\x6F\x67\x66\x69\x6C\x65\x2C\x30\x29\x3B\x20\x2F"
+"\x2F\x20\x61\x64\x64\x20\x68\x61\x6E\x64\x6C\x65\x72\x20\x66\x6F\x72\x20\x68\x74\x74\x70\x3A\x2F\x2F\x68"
+"\x6F\x73\x74\x2F\x6C\x6F\x67\x20\x72\x65\x71\x75\x65\x73\x74\x73\xA\x20\x20\x20\x20\x20\x20\x20\x20\x77"
+"\x68\x69\x6C\x65\x28\x31\x29\x20\x7B\xA\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20"
+"\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x72\x75\x6E\x28\x26\x73\x65\x72\x76\x65\x72\x29\x3B\x20\x20"
+"\x20\x2F\x2F\x20\x72\x75\x6E\x20\x73\x65\x72\x76\x65\x72\xA\x20\x20\x20\x20\x20\x20\x20\x20\x7D\x3B\xA"
+"\x7D\x3B\xA\x3C\x2F\x50\x52\x45\x3E\x3C\x2F\x43\x4F\x44\x45\x3E\xA\x3C\x2F\x54\x44\x3E\x3C\x2F\x54\x52"
+"\x3E\x3C\x2F\x54\x41\x42\x4C\x45\x3E\xA\x3C\x48\x52\x3E\x3C\x42\x52\x3E\xA\xA\xA\x3C\x63\x65\x6E\x74"
+"\x65\x72\x3E\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x69\x6D\x61\x67\x65\x75\x70\x3E\x3C\x42\x3E\x3C\x66\x6F\x6E"
+"\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37\x37\x27\x3E\x3C\x61\x20\x68\x72\x65\x66\x3D\x27"
+"\x2F\x69\x6D\x61\x67\x65\x27\x3E\x3C\x48\x33\x3E\x49\x6D\x61\x67\x65\x20\x55\x70\x6C\x6F\x61\x64\x65\x72"
+"\x3C\x2F\x48\x33\x3E\x3C\x2F\x61\x3E\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\x3C\x2F\x63\x65\x6E\x74"
+"\x65\x72\x3E\xA\x3C\x73\x6D\x61\x6C\x6C\x3E\x20\x3C\x42\x3E\x75\x73\x65\x64\x20\x66\x75\x6E\x63\x74\x69"
+"\x6F\x6E\x73\x3A\x3C\x2F\x42\x3E\x3C\x42\x52\x3E\xA\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65"
+"\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E"
+"\x69\x74\x27\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E\x69\x74\x3C\x2F\x61\x3E\x3C\x42\x52"
+"\x3E\xA\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E"
+"\x73\x23\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x27\x3E\x77"
+"\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x3C\x2F\x61\x3E\x3C\x42"
+"\x52\x3E\xA\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F"
+"\x6E\x73\x23\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x72\x75\x6E\x27\x3E\x77\x65\x62\x5F\x73\x65\x72"
+"\x76\x65\x72\x5F\x72\x75\x6E\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\xA\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F"
+"\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x63\x6C\x69\x65\x6E\x74\x69\x6E\x66\x6F"
+"\x27\x3E\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\xA\x3C\x2F\x73\x6D\x61"
+"\x6C\x6C\x3E\x3C\x42\x52\x3E\xA\xA\xA\x54\x68\x69\x73\x20\x65\x78\x61\x6D\x70\x6C\x65\x20\x75\x73\x65"
+"\x73\x20\x74\x68\x65\x20\x73\x74\x72\x75\x63\x74\x20\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65"
+"\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x63\x6C\x69\x65\x6E\x74\x69\x6E\x66\x6F\x27\x3E\x43"
+"\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x3C\x2F\x61\x3E\x20\x66\x6F\x72\x20\x66\x65\x74\x63\x68\x69\x6E\x67"
+"\x20\x74\x68\x65\x20\x69\x6E\x70\x75\x74\x20\x66\x72\x6F\x6D\x20\x74\x68\x65\x20\x63\x6C\x69\x65\x6E\x74"
+"\xA\x75\x73\x69\x6E\x67\x20\x74\x68\x65\x20\x51\x75\x65\x72\x79\x28\x22\x69\x6D\x67\x22\x29\x20\x74\x6F"
+"\x20\x73\x65\x6E\x64\x20\x74\x68\x65\x20\x69\x6D\x61\x67\x65\x20\x3C\x42\x52\x3E\xA\x61\x6E\x64\x20\x6D"
+"\x75\x6C\x74\x69\x70\x61\x72\x74\x20\x66\x6F\x72\x20\x66\x65\x74\x63\x68\x69\x6E\x67\x20\x74\x68\x65\x20"
+"\x75\x70\x6C\x6F\x61\x64\x65\x64\x20\x66\x69\x6C\x65\x3C\x42\x52\x3E\xA\xA\xA\x3C\x42\x52\x3E\x3C\x42"
+"\x52\x3E\xA\x3C\x54\x41\x42\x4C\x45\x20\x77\x69\x64\x74\x68\x3D\x27\x31\x30\x30\x25\x27\x20\x62\x67\x63"
+"\x6F\x6C\x6F\x72\x3D\x27\x43\x46\x43\x46\x43\x46\x27\x20\x62\x6F\x72\x64\x65\x72\x3D\x30\x3E\x3C\x54\x52"
+"\x3E\x3C\x54\x44\x3E\xA\x3C\x43\x4F\x44\x45\x3E\x3C\x50\x52\x45\x3E\xA\x23\x69\x6E\x63\x6C\x75\x64\x65"
+"\x20\x22\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x2E\x68\x22\xA\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20"
+"\x20\x20\x20\x20\x20\x20\xA\x23\x69\x6E\x63\x6C\x75\x64\x65\x20\x26\x6C\x74\x3B\x73\x74\x64\x6C\x69\x62"
+"\x2E\x68\x26\x67\x74\x3B\xA\x20\x20\x20\x20\x20\x20\x20\x20\xA\x73\x74\x72\x75\x63\x74\x20\x69\x6D\x61"
+"\x67\x65\x20\x7B\xA\x9\x63\x68\x61\x72\x20\x2A\x64\x61\x74\x61\x3B\xA\x9\x73\x69\x7A\x65\x5F\x74\x20"
+"\x73\x69\x7A\x65\x3B\xA\x7D\x20\x69\x6D\x61\x67\x65\x3D\x7B\x4E\x55\x4C\x4C\x2C\x30\x7D\x3B\xA\xA\x76"
+"\x6F\x69\x64\x20\x69\x6D\x61\x67\x65\x6F\x75\x74\x28\x29\x20\x7B\xA\x9\x69\x66\x28\x73\x74\x72\x6C\x65"
+"\x6E\x28\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x3E\x51\x75\x65\x72\x79\x28\x22\x69\x6D\x67\x22\x29"
+"\x29\x29\x20\x7B\xA\x9\x9\x69\x66\x28\x69\x6D\x61\x67\x65\x2E\x64\x61\x74\x61\x21\x3D\x4E\x55\x4C\x4C"
+"\x29\x20\x7B\xA\x9\x9\x9\x70\x72\x69\x6E\x74\x66\x28\x22\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x74\x79\x70"
+"\x65\x3A\x20\x69\x6D\x61\x67\x65\x2F\x6A\x70\x65\x67\x5C\x72\x5C\x6E\x5C\x72\x5C\x6E\x22\x29\x3B\xA\x9"
+"\x9\x9\x66\x77\x72\x69\x74\x65\x28\x69\x6D\x61\x67\x65\x2E\x64\x61\x74\x61\x2C\x69\x6D\x61\x67\x65\x2E"
+"\x73\x69\x7A\x65\x2C\x31\x2C\x73\x74\x64\x6F\x75\x74\x29\x3B\xA\x9\x9\x7D\x3B\xA\x9\x9\x72\x65\x74"
+"\x75\x72\x6E\x3B\xA\x9\x7D\x3B\xA\x9\x70\x72\x69\x6E\x74\x66\x28\x22\x43\x6F\x6E\x74\x65\x6E\x74\x2D"
+"\x74\x79\x70\x65\x3A\x20\x74\x65\x78\x74\x2F\x68\x74\x6D\x6C\x5C\x72\x5C\x6E\x5C\x72\x5C\x6E\x22\x29\x3B"
+"\xA\x9\x70\x72\x69\x6E\x74\x66\x28\x22\x26\x6C\x74\x3B\x48\x54\x4D\x4C\x26\x67\x74\x3B\x5C\x6E\x22\x29"
+"\x3B\xA\x9\x70\x72\x69\x6E\x74\x66\x28\x22\x26\x6C\x74\x3B\x42\x4F\x44\x59\x20\x62\x67\x63\x6F\x6C\x6F"
+"\x72\x3D\x27\x45\x46\x45\x46\x45\x46\x27\x26\x67\x74\x3B\x5C\x6E\x22\x29\x3B\x20\x20\x20\x20\x20\x20\x20"
+"\x20\xA\x9\x70\x72\x69\x6E\x74\x66\x28\x22\x26\x6C\x74\x3B\x66\x6F\x72\x6D\x20\x61\x63\x74\x69\x6F\x6E"
+"\x3D\x27\x2F\x27\x20\x65\x6E\x63\x74\x79\x70\x65\x3D\x27\x6D\x75\x6C\x74\x69\x70\x61\x72\x74\x2F\x66\x6F"
+"\x72\x6D\x2D\x64\x61\x74\x61\x27\x26\x67\x74\x3B\x5C\x6E\x22\x29\x3B\xA\x9\x70\x72\x69\x6E\x74\x66\x28"
+"\x22\x26\x6C\x74\x3B\x69\x6E\x70\x75\x74\x20\x74\x79\x70\x65\x3D\x66\x69\x6C\x65\x20\x6E\x61\x6D\x65\x3D"
+"\x69\x6D\x61\x67\x65\x26\x67\x74\x3B\x26\x6C\x74\x3B\x42\x52\x26\x67\x74\x3B\x5C\x6E\x22\x29\x3B\xA\x9"
+"\x70\x72\x69\x6E\x74\x66\x28\x22\x26\x6C\x74\x3B\x2F\x66\x6F\x72\x6D\x26\x67\x74\x3B\x5C\x6E\x22\x29\x3B"
+"\xA\x9\x69\x66\x28\x73\x74\x72\x6C\x65\x6E\x28\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x3E\x4D\x75"
+"\x6C\x74\x69\x50\x61\x72\x74\x28\x22\x69\x6D\x61\x67\x65\x22\x29\x2E\x64\x61\x74\x61\x29\x29\x20\x7B\xA"
+"\x9\x9\x70\x72\x69\x6E\x74\x66\x28\x22\x25\x73\x26\x6C\x74\x3B\x42\x52\x26\x67\x74\x3B\x26\x6C\x74\x3B"
+"\x69\x6D\x67\x20\x73\x72\x63\x3D\x27\x2F\x3F\x69\x6D\x67\x3D\x25\x73\x2E\x6A\x70\x67\x27\x26\x67\x74\x3B"
+"\x5C\x6E\x22\x2C\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x3E\x4D\x75\x6C\x74\x69\x50\x61\x72\x74\x28"
+"\x22\x69\x6D\x61\x67\x65\x22\x29\x2E\x66\x69\x6C\x65\x6E\x61\x6D\x65\x2C\x43\x6C\x69\x65\x6E\x74\x49\x6E"
+"\x66\x6F\x2D\x3E\x4D\x75\x6C\x74\x69\x50\x61\x72\x74\x28\x22\x69\x6D\x61\x67\x65\x22\x29\x2E\x66\x69\x6C"
+"\x65\x6E\x61\x6D\x65\x29\x3B\xA\x9\x9\x66\x72\x65\x65\x28\x69\x6D\x61\x67\x65\x2E\x64\x61\x74\x61\x29"
+"\x3B\xA\x9\x9\x69\x6D\x61\x67\x65\x2E\x64\x61\x74\x61\x3D\x6D\x61\x6C\x6C\x6F\x63\x28\x43\x6C\x69\x65"
+"\x6E\x74\x49\x6E\x66\x6F\x2D\x3E\x4D\x75\x6C\x74\x69\x50\x61\x72\x74\x28\x22\x69\x6D\x61\x67\x65\x22\x29"
+"\x2E\x73\x69\x7A\x65\x2B\x31\x29\x3B\xA\x9\x9\x6D\x65\x6D\x63\x70\x79\x28\x69\x6D\x61\x67\x65\x2E\x64"
+"\x61\x74\x61\x2C\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x3E\x4D\x75\x6C\x74\x69\x50\x61\x72\x74\x28"
+"\x22\x69\x6D\x61\x67\x65\x22\x29\x2E\x64\x61\x74\x61\x2C\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x3E"
+"\x4D\x75\x6C\x74\x69\x50\x61\x72\x74\x28\x22\x69\x6D\x61\x67\x65\x22\x29\x2E\x73\x69\x7A\x65\x29\x3B\xA"
+"\x9\x9\x69\x6D\x61\x67\x65\x2E\x73\x69\x7A\x65\x3D\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x3E\x4D"
+"\x75\x6C\x74\x69\x50\x61\x72\x74\x28\x22\x69\x6D\x61\x67\x65\x22\x29\x2E\x73\x69\x7A\x65\x3B\xA\x9\x7D"
+"\x65\x6C\x73\x65\x20\x7B\xA\x9\x9\x66\x72\x65\x65\x28\x69\x6D\x61\x67\x65\x2E\x64\x61\x74\x61\x29\x3B"
+"\xA\x9\x9\x69\x6D\x61\x67\x65\x2E\x64\x61\x74\x61\x3D\x4E\x55\x4C\x4C\x3B\xA\x9\x7D\x3B\xA\x9\x70"
+"\x72\x69\x6E\x74\x66\x28\x22\x26\x6C\x74\x3B\x2F\x42\x4F\x44\x59\x26\x67\x74\x3B\x5C\x6E\x22\x29\x3B\xA"
+"\x9\x70\x72\x69\x6E\x74\x66\x28\x22\x26\x6C\x74\x3B\x2F\x48\x54\x4D\x4C\x26\x67\x74\x3B\x5C\x6E\x22\x29"
+"\x3B\xA\x7D\x3B\xA\xA\xA\xA\x6D\x61\x69\x6E\x28\x29\x20\x7B\xA\x9\x73\x74\x72\x75\x63\x74\x20\x77"
+"\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x20\x73\x65\x72\x76\x65\x72\x3B\xA\x9\x69\x66\x28\x21\x77\x65\x62"
+"\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E\x69\x74\x28\x26\x73\x65\x72\x76\x65\x72\x2C\x38\x30\x2C\x22\x74"
+"\x65\x73\x74\x65\x2E\x6C\x6F\x67\x22\x2C\x30\x29\x29\x20\x7B\xA\x9\x9\x66\x70\x72\x69\x6E\x74\x66\x28"
+"\x73\x74\x64\x65\x72\x72\x2C\x22\x63\x61\x6E\x27\x74\x20\x6F\x70\x65\x6E\x20\x6C\x69\x73\x74\x65\x6E\x20"
+"\x73\x6F\x63\x6B\x65\x74\x5C\x6E\x22\x29\x3B\xA\x9\x7D\x3B\xA\x9\x77\x65\x62\x5F\x73\x65\x72\x76\x65"
+"\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x28\x26\x73\x65\x72\x76\x65\x72\x2C\x22\x2A\x20\x2F\x22"
+"\x2C\x69\x6D\x61\x67\x65\x6F\x75\x74\x2C\x30\x29\x3B\xA\x9\x77\x68\x69\x6C\x65\x28\x31\x29\x20\x7B\xA"
+"\x9\x9\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x72\x75\x6E\x28\x26\x73\x65\x72\x76\x65\x72\x29\x3B"
+"\xA\x9\x7D\x3B\xA\x7D\x3B\xA\x3C\x2F\x50\x52\x45\x3E\x3C\x2F\x43\x4F\x44\x45\x3E\xA\x3C\x2F\x54\x44"
+"\x3E\x3C\x2F\x54\x52\x3E\x3C\x2F\x54\x41\x42\x4C\x45\x3E\xA\x3C\x48\x52\x3E\x3C\x42\x52\x3E\xA\xA\xA"
+"\x3C\x63\x65\x6E\x74\x65\x72\x3E\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x61\x75\x74\x68\x3E\x3C\x42\x3E\x3C\x66"
+"\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37\x37\x27\x3E\x3C\x61\x20\x68\x72\x65\x66"
+"\x3D\x27\x2F\x61\x75\x74\x68\x27\x3E\x3C\x48\x33\x3E\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x69\x6F"
+"\x6E\x3C\x2F\x48\x33\x3E\x3C\x2F\x61\x3E\x20\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\x3C\x2F\x63\x65"
+"\x6E\x74\x65\x72\x3E\xA\x3C\x73\x6D\x61\x6C\x6C\x3E\x20\x3C\x42\x3E\x75\x73\x65\x64\x20\x66\x75\x6E\x63"
+"\x74\x69\x6F\x6E\x73\x3A\x3C\x2F\x42\x3E\x3C\x42\x52\x3E\xA\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F"
+"\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F"
+"\x69\x6E\x69\x74\x27\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E\x69\x74\x3C\x2F\x61\x3E\x3C"
+"\x42\x52\x3E\xA\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69"
+"\x6F\x6E\x73\x23\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x27"
+"\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x3C\x2F\x61\x3E"
+"\x3C\x42\x52\x3E\xA\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74"
+"\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x72\x75\x6E\x27\x3E\x77\x65\x62\x5F\x73"
+"\x65\x72\x76\x65\x72\x5F\x72\x75\x6E\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\xA\x3C\x61\x20\x68\x72\x65\x66\x3D"
+"\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x63\x6C\x69\x65"
+"\x6E\x74\x5F\x48\x54\x54\x50\x64\x69\x72\x65\x63\x74\x69\x76\x65\x27\x3E\x77\x65\x62\x5F\x63\x6C\x69\x65"
+"\x6E\x74\x5F\x48\x54\x54\x50\x64\x69\x72\x65\x63\x74\x69\x76\x65\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\xA\x3C"
+"\x2F\x73\x6D\x61\x6C\x6C\x3E\x3C\x42\x52\x3E\xA\xA\x48\x65\x72\x65\x20\x77\x65\x27\x72\x65\x20\x75\x73"
+"\x69\x6E\x67\x20\x74\x68\x65\x20\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75"
+"\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x48\x54\x54\x50\x64\x69\x72"
+"\x65\x63\x74\x69\x76\x65\x27\x3E\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x48\x54\x54\x50\x64\x69\x72"
+"\x65\x63\x74\x69\x76\x65\x3C\x2F\x61\x3E\x20\x74\x6F\x20\x73\x65\x74\x20\x75\x70\x20\x74\x68\x65\x20\x73"
+"\x65\x72\x76\x65\x72\x20\x72\x65\x73\x70\x6F\x6E\x73\x65\xA\xA\x3C\x42\x52\x3E\x3C\x42\x52\x3E\xA\x75"
+"\x73\x65\x72\x3A\x20\x22\x75\x73\x65\x72\x6E\x61\x6D\x65\x22\x2C\x20\x70\x61\x73\x73\x3A\x20\x22\x70\x61"
+"\x73\x73\x77\x6F\x72\x64\x22\xA\x3C\x42\x52\x3E\xA\x3C\x54\x41\x42\x4C\x45\x20\x77\x69\x64\x74\x68\x3D"
+"\x27\x31\x30\x30\x25\x27\x20\x62\x67\x63\x6F\x6C\x6F\x72\x3D\x27\x43\x46\x43\x46\x43\x46\x27\x20\x62\x6F"
+"\x72\x64\x65\x72\x3D\x30\x3E\x3C\x54\x52\x3E\x3C\x54\x44\x3E\xA\x3C\x43\x4F\x44\x45\x3E\x3C\x50\x52\x45"
+"\x3E\xA\x23\x69\x6E\x63\x6C\x75\x64\x65\x20\x22\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x2E\x68\x22\xA"
+"\x23\x69\x6E\x63\x6C\x75\x64\x65\x20\x26\x6C\x74\x3B\x73\x74\x64\x69\x6F\x2E\x68\x26\x67\x74\x3B\xA\x23"
+"\x69\x6E\x63\x6C\x75\x64\x65\x20\x26\x6C\x74\x3B\x73\x74\x72\x69\x6E\x67\x2E\x68\x26\x67\x74\x3B\xA\xA"
+"\xA\x76\x6F\x69\x64\x20\x75\x72\x6C\x61\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x28\x29\x20\x7B\xA"
+"\x20\x20\x20\x20\x20\x20\x20\x20\x69\x66\x28\x21\x73\x74\x72\x6C\x65\x6E\x28\x43\x6C\x69\x65\x6E\x74\x49"
+"\x6E\x66\x6F\x2D\x3E\x75\x73\x65\x72\x29\x20\x7C\x7C\x20\x21\x73\x74\x72\x6C\x65\x6E\x28\x43\x6C\x69\x65"
+"\x6E\x74\x49\x6E\x66\x6F\x2D\x3E\x70\x61\x73\x73\x29\x20\x26\x26\xA\x20\x20\x20\x20\x20\x20\x20\x20\x20"
+"\x20\x20\x20\x73\x74\x72\x63\x6D\x70\x28\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x3E\x75\x73\x65\x72"
+"\x2C\x22\x75\x73\x65\x72\x6E\x61\x6D\x65\x22\x29\x20\x7C\x7C\x20\x73\x74\x72\x63\x6D\x70\x28\x43\x6C\x69"
+"\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x3E\x70\x61\x73\x73\x2C\x22\x70\x61\x73\x73\x77\x6F\x72\x64\x22\x29\x29"
+"\x20\x7B\x20\x2F\x2F\x20\x79\x6F\x75\x20\x63\x61\x6E\x20\x72\x65\x61\x64\x20\x74\x68\x69\x6E\x67\x73\x20"
+"\x66\x72\x6F\x6D\x20\x61\x20\x61\x75\x74\x68\x20\x66\x69\x6C\x65\xA\x20\x20\x20\x20\x20\x20\x20\x20\x20"
+"\x20\x20\x20\x20\x20\x20\x20\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x48\x54\x54\x50\x64\x69\x72\x65"
+"\x63\x74\x69\x76\x65\x28\x22\x48\x54\x54\x50\x2F\x31\x2E\x31\x20\x34\x30\x31\x20\x41\x75\x74\x68\x6F\x72"
+"\x69\x7A\x61\x74\x69\x6F\x6E\x20\x52\x65\x71\x75\x69\x72\x65\x64\x22\x29\x3B\xA\x20\x20\x20\x20\x20\x20"
+"\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x70\x72\x69\x6E\x74\x66\x28\x22\x57\x57\x57\x2D\x41\x75\x74\x68"
+"\x65\x6E\x74\x69\x63\x61\x74\x65\x3A\x20\x42\x61\x73\x69\x63\x20\x72\x65\x61\x6C\x6D\x3D\x5C\x22\x54\x68"
+"\x69\x73\x20\x73\x69\x74\x65\x20\x69\x6E\x66\x6F\x5C\x22\x5C\x72\x5C\x6E\x22\x29\x3B\xA\x20\x20\x20\x20"
+"\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x70\x72\x69\x6E\x74\x66\x28\x22\x43\x6F\x6E\x74\x65\x6E"
+"\x74\x2D\x74\x79\x70\x65\x3A\x20\x74\x65\x78\x74\x2F\x68\x74\x6D\x6C\x5C\x72\x5C\x6E\x5C\x72\x5C\x6E\x22"
+"\x29\x3B\xA\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x70\x72\x69\x6E\x74\x66\x28"
+"\x22\x26\x6C\x74\x3B\x42\x4F\x44\x59\x26\x67\x74\x3B\x5C\x6E\x22\x29\x3B\xA\x20\x20\x20\x20\x20\x20\x20"
+"\x20\x20\x20\x20\x20\x20\x20\x20\x20\x70\x72\x69\x6E\x74\x66\x28\x22\x26\x6C\x74\x3B\x66\x6F\x6E\x74\x20"
+"\x63\x6F\x6C\x6F\x72\x3D\x27\x46\x46\x30\x30\x30\x30\x27\x26\x67\x74\x3B\x41\x63\x63\x65\x73\x73\x20\x64"
+"\x65\x6E\x69\x65\x64\x26\x6C\x74\x3B\x2F\x66\x6F\x6E\x74\x26\x67\x74\x3B\x5C\x6E\x22\x29\x3B\xA\x20\x20"
+"\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x70\x72\x69\x6E\x74\x66\x28\x22\x26\x6C\x74\x3B"
+"\x2F\x42\x4F\x44\x59\x26\x67\x74\x3B\x5C\x6E\x22\x29\x3B\xA\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20"
+"\x20\x20\x20\x20\x20\x72\x65\x74\x75\x72\x6E\x3B\xA\x20\x20\x20\x20\x20\x20\x20\x20\x7D\xA\x20\x20\x20"
+"\x20\x20\x20\x20\x20\x70\x72\x69\x6E\x74\x66\x28\x22\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x74\x79\x70\x65\x3A"
+"\x20\x74\x65\x78\x74\x2F\x68\x74\x6D\x6C\x5C\x72\x5C\x6E\x5C\x72\x5C\x6E\x22\x29\x3B\x20\x20\x20\x20\x20"
+"\x20\x20\x20\x20\xA\x20\x20\x20\x20\x20\x20\x20\x20\x70\x72\x69\x6E\x74\x66\x28\x22\x26\x6C\x74\x3B\x42"
+"\x4F\x44\x59\x20\x62\x67\x63\x6F\x6C\x6F\x72\x3D\x27\x45\x46\x45\x46\x45\x46\x27\x26\x67\x74\x3B\x5C\x6E"
+"\x22\x29\x3B\x20\x20\x20\x20\x20\x20\x20\x20\xA\x20\x20\x20\x20\x20\x20\x20\x20\x70\x72\x69\x6E\x74\x66"
+"\x28\x22\x59\x6F\x75\x20\x65\x6E\x74\x65\x72\x65\x64\x20\x69\x6E\x20\x79\x6F\x75\x72\x20\x61\x72\x65\x61"
+"\x5C\x6E\x22\x29\x3B\xA\x20\x20\x20\x20\x20\x20\x20\x20\x70\x72\x69\x6E\x74\x66\x28\x22\x26\x6C\x74\x3B"
+"\x2F\x42\x4F\x44\x59\x26\x67\x74\x3B\x26\x6C\x74\x3B\x2F\x48\x54\x4D\x4C\x26\x67\x74\x3B\x5C\x6E\x22\x29"
+"\x3B\xA\x7D\x3B\xA\xA\xA\x6D\x61\x69\x6E\x28\x29\x20\x7B\xA\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74"
+"\x72\x75\x63\x74\x20\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x20\x73\x65\x72\x76\x65\x72\x3B\x20\x2F\x2F"
+"\x20\x73\x65\x72\x76\x65\x72\x20\x68\x61\x6E\x64\x6C\x65\x72\xA\x20\x20\x20\x20\x20\x20\x20\x20\x69\x66"
+"\x28\x21\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E\x69\x74\x28\x26\x73\x65\x72\x76\x65\x72\x2C"
+"\x38\x33\x2C\x22\x68\x65\x6C\x70\x2E\x6C\x6F\x67\x22\x2C\x30\x29\x29\x20\x7B\x20\x2F\x2F\x20\x69\x6E\x69"
+"\x74\x69\x61\x6C\x69\x7A\x65\xA\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x66\x70"
+"\x72\x69\x6E\x74\x66\x28\x73\x74\x64\x65\x72\x72\x2C\x22\x63\x61\x6E\x27\x74\x20\x6F\x70\x65\x6E\x20\x6C"
+"\x69\x73\x74\x65\x6E\x20\x73\x6F\x63\x6B\x65\x74\x5C\x6E\x22\x29\x3B\xA\x20\x20\x20\x20\x20\x20\x20\x20"
+"\x7D\x3B\xA\xA\x20\x20\x20\x20\x20\x20\x20\x20\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64\x64"
+"\x68\x61\x6E\x64\x6C\x65\x72\x28\x26\x73\x65\x72\x76\x65\x72\x2C\x22\x2A\x20\x2F\x61\x75\x74\x68\x22\x2C"
+"\x75\x72\x6C\x61\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x2C\x30\x29\x3B\xA\x20\x20\x20\x20\x20\x20"
+"\x20\x20\x77\x68\x69\x6C\x65\x28\x31\x29\x20\x7B\xA\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20"
+"\x20\x20\x20\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x72\x75\x6E\x28\x26\x73\x65\x72\x76\x65\x72\x29"
+"\x3B\x20\x20\x20\x2F\x2F\x20\x72\x75\x6E\x20\x73\x65\x72\x76\x65\x72\xA\x20\x20\x20\x20\x20\x20\x20\x20"
+"\x7D\x3B\xA\x7D\x3B\xA\x3C\x2F\x50\x52\x45\x3E\x3C\x2F\x43\x4F\x44\x45\x3E\xA\x3C\x2F\x54\x44\x3E\x3C"
+"\x2F\x54\x52\x3E\x3C\x2F\x54\x41\x42\x4C\x45\x3E\xA\x3C\x48\x52\x3E\x3C\x42\x52\x3E\xA\xA\xA\x3C\x43"
+"\x45\x4E\x54\x45\x52\x3E\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x73\x73\x6C\x3E\x3C\x42\x3E\x3C\x66\x6F\x6E\x74"
+"\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37\x37\x27\x3E\x3C\x48\x33\x3E\x6F\x70\x65\x6E\x73\x73"
+"\x6C\x20\x66\x6F\x72\x20\x28\x68\x74\x74\x70\x73\x29\x3C\x2F\x48\x33\x3E\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C"
+"\x2F\x42\x3E\x3C\x2F\x43\x45\x4E\x54\x45\x52\x3E\xA\x3C\x73\x6D\x61\x6C\x6C\x3E\x20\x3C\x42\x3E\x75\x73"
+"\x65\x64\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x3A\x3C\x2F\x42\x3E\x3C\x42\x52\x3E\xA\x3C\x61\x20\x68"
+"\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F"
+"\x73\x65\x72\x76\x65\x72\x5F\x48\x54\x54\x50\x64\x69\x72\x65\x63\x74\x69\x76\x65\x27\x3E\x77\x65\x62\x5F"
+"\x73\x65\x72\x76\x65\x72\x5F\x75\x73\x65\x53\x53\x4C\x63\x65\x72\x74\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\xA"
+"\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23"
+"\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E\x69\x74\x27\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65"
+"\x72\x5F\x69\x6E\x69\x74\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\xA\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F"
+"\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F"
+"\x72\x75\x6E\x27\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x72\x75\x6E\x3C\x2F\x61\x3E\x3C\x42\x52"
+"\x3E\xA\x3C\x2F\x73\x6D\x61\x6C\x6C\x3E\x3C\x42\x52\x3E\xA\xA\x48\x65\x72\x65\x20\x77\x65\x20\x73\x65"
+"\x74\x75\x70\x20\x61\x20\x73\x65\x72\x76\x65\x72\x20\x61\x6E\x64\x20\x77\x65\x20\x75\x73\x65\x20\x74\x68"
+"\x65\x20\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E"
+"\x73\x23\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x75\x73\x65\x53\x53\x4C\x63\x65\x72\x74\x27\x3E\x77"
+"\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x75\x73\x65\x53\x53\x4C\x63\x65\x72\x74\x3C\x2F\x61\x3E\x20\x74"
+"\x6F\x20\x75\x73\x65\x20\x73\x70\x65\x63\x69\x66\x69\x63\x20\x63\x65\x72\x74\x69\x66\x69\x63\x61\x74\x65"
+"\x20\x66\x69\x6C\x65\xA\x61\x6E\x64\x20\x77\x65\x20\x73\x74\x61\x72\x74\x20\x74\x68\x65\x20\x73\x65\x72"
+"\x76\x65\x72\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x66\x6C\x61\x67\x20\x57\x53\x5F\x55\x53\x45\x53\x53"
+"\x4C\x20\x66\x6F\x72\x20\x73\x65\x63\x75\x72\x65\x20\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x73\x20\x28"
+"\x6C\x69\x62\x77\x65\x62\x73\x65\x72\x76\x65\x72\x20\x63\x6F\x6D\x70\x69\x6C\x65\x64\x20\x77\x2F\x20\x6F"
+"\x70\x65\x6E\x73\x73\x6C\x29\x3C\x42\x52\x3E\x3C\x42\x52\x3E\xA\xA\x53\x65\x65\x20\x61\x6C\x73\x6F\x20"
+"\x74\x68\x65\x20\x70\x61\x63\x6B\x65\x74\x6D\x6F\x75\x6E\x74\x65\x72\x20\x65\x78\x61\x6D\x70\x6C\x65\x20"
+"\x69\x6E\x20\x74\x68\x65\x20\x65\x78\x61\x6D\x70\x6C\x65\x20\x64\x69\x72\x65\x63\x74\x6F\x72\x79\x2E\x20"
+"\xA\x3C\x42\x52\x3E\xA\x3C\x54\x41\x42\x4C\x45\x20\x77\x69\x64\x74\x68\x3D\x27\x31\x30\x30\x25\x27\x20"
+"\x62\x67\x63\x6F\x6C\x6F\x72\x3D\x27\x43\x46\x43\x46\x43\x46\x27\x20\x62\x6F\x72\x64\x65\x72\x3D\x30\x3E"
+"\x3C\x54\x52\x3E\x3C\x54\x44\x3E\xA\x3C\x43\x4F\x44\x45\x3E\x3C\x50\x52\x45\x3E\xA\xA\x20\x20\xA\x23"
+"\x69\x6E\x63\x6C\x75\x64\x65\x20\x22\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x2E\x68\x22\xA\xA\x69\x6E"
+"\x74\x20\x6D\x61\x69\x6E\x28\x29\xA\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x72\x75\x63\x74\x20\x77\x65"
+"\x62\x5F\x73\x65\x72\x76\x65\x72\x20\x73\x65\x72\x76\x65\x72\x73\x73\x6C\x3B\xA\x20\x20\x20\x20\x20\x20"
+"\x20\x20\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x75\x73\x65\x53\x53\x4C\x63\x65\x72\x74\x28\x26\x73"
+"\x65\x72\x76\x65\x72\x73\x73\x6C\x2C\x22\x66\x6F\x6F\x2D\x63\x65\x72\x74\x2E\x70\x65\x6D\x22\x29\x3B\x20"
+"\x2F\x2F\x20\x43\x65\x72\x74\x69\x66\x69\x63\x61\x74\x65\x20\x66\x69\x6C\x65\x20\x20\x20\x20\xA\x20\x20"
+"\x20\x20\x20\x20\x20\x20\x69\x66\x28\x21\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E\x69\x74\x28"
+"\x26\x73\x65\x72\x76\x65\x72\x73\x73\x6C\x2C\x34\x34\x33\x2C\x22\x68\x65\x6C\x70\x2E\x6C\x6F\x67\x22\x2C"
+"\x57\x53\x5F\x55\x53\x45\x53\x53\x4C\x29\x29\x20\x7B\xA\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20"
+"\x20\x20\x20\x20\x66\x70\x72\x69\x6E\x74\x66\x28\x73\x74\x64\x65\x72\x72\x2C\x22\x43\x61\x6E\x6E\x6F\x74"
+"\x20\x6F\x70\x65\x6E\x20\x70\x6F\x72\x74\x5C\x6E\x22\x29\x3B\xA\x20\x20\x20\x20\x20\x20\x20\x20\x7D\x3B"
+"\xA\x20\x20\x20\x20\x20\x20\x20\x20\x77\x68\x69\x6C\x65\x28\x31\x29\x20\x7B\xA\x20\x20\x20\x20\x20\x20"
+"\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x72\x75\x6E\x28\x26"
+"\x73\x65\x72\x76\x65\x72\x73\x73\x6C\x29\x3B\xA\x20\x20\x20\x20\x20\x20\x20\x20\x7D\x3B\xA\x7D\x3B\xA"
+"\x3C\x2F\x50\x52\x45\x3E\x3C\x2F\x43\x4F\x44\x45\x3E\xA\x3C\x2F\x54\x44\x3E\x3C\x2F\x54\x52\x3E\x3C\x2F"
+"\x54\x41\x42\x4C\x45\x3E\xA\x41\x6C\x6C\x20\x74\x68\x65\x20\x72\x65\x73\x74\x20\x69\x73\x20\x74\x68\x65"
+"\x20\x73\x61\x6D\x65\x20\x61\x73\x20\x77\x69\x74\x68\x6F\x75\x74\x20\x53\x53\x4C\x2E\x20\xA\x3C\x48\x52"
+"\x3E\x3C\x42\x52\x3E\xA\xA\xA\x3C\x63\x65\x6E\x74\x65\x72\x3E\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x6F\x75"
+"\x74\x67\x69\x66\x3E\x3C\x42\x3E\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37"
+"\x37\x27\x3E\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x67\x69\x66\x27\x3E\x3C\x48\x33\x3E\x47\x69\x66\x20"
+"\x67\x65\x6E\x65\x72\x61\x74\x6F\x72\x3C\x2F\x48\x33\x3E\x3C\x2F\x61\x3E\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C"
+"\x2F\x42\x3E\x3C\x2F\x63\x65\x6E\x74\x65\x72\x3E\xA\x3C\x73\x6D\x61\x6C\x6C\x3E\x20\x3C\x42\x3E\x75\x73"
+"\x65\x64\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x3B\x3C\x2F\x42\x3E\x3C\x42\x52\x3E\xA\x3C\x61\x20\x68"
+"\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F"
+"\x73\x65\x72\x76\x65\x72\x5F\x69\x6E\x69\x74\x27\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E"
+"\x69\x74\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\xA\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70"
+"\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68"
+"\x61\x6E\x64\x6C\x65\x72\x27\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64"
+"\x6C\x65\x72\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\xA\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C"
+"\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x72\x75\x6E"
+"\x27\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x72\x75\x6E\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\xA\x3C"
+"\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77"
+"\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x67\x69\x66\x73\x65\x74\x70\x61\x6C\x65\x74\x74\x65\x27\x3E\x77"
+"\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x67\x69\x66\x73\x65\x74\x70\x61\x6C\x65\x74\x74\x65\x3C\x2F\x61"
+"\x3E\x3C\x42\x52\x3E\xA\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63"
+"\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x67\x69\x66\x6F\x75\x74\x70\x75\x74"
+"\x27\x3E\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x67\x69\x66\x6F\x75\x74\x70\x75\x74\x3C\x2F\x61\x3E"
+"\x3C\x42\x52\x3E\xA\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74"
+"\x69\x6F\x6E\x73\x23\x63\x6C\x69\x65\x6E\x74\x69\x6E\x66\x6F\x27\x3E\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66"
+"\x6F\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\xA\x3C\x2F\x73\x6D\x61\x6C\x6C\x3E\x3C\x42\x52\x3E\xA\xA\x54\x68"
+"\x69\x73\x20\x65\x78\x61\x6D\x70\x6C\x65\x20\x64\x72\x61\x77\x73\x20\x61\x6E\x20\x63\x69\x72\x63\x6C\x65"
+"\x20\x61\x74\x20\x78\x2C\x79\x20\x72\x65\x71\x75\x65\x73\x74\x65\x64\x20\x62\x79\x20\x63\x6C\x69\x65\x6E"
+"\x74\x2C\x20\x61\x6E\x64\x20\x6F\x75\x74\x70\x75\x74\x73\x20\x77\x69\x74\x68\x20\x66\x75\x6E\x63\x74\x69"
+"\x6F\x6E\x20\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F"
+"\x6E\x73\x23\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x67\x69\x66\x6F\x75\x74\x70\x75\x74\x27\x3E\x77"
+"\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x67\x69\x66\x6F\x75\x74\x70\x75\x74\x3C\x2F\x61\x3E\xA\xA\xA"
+"\x3C\x42\x52\x3E\x3C\x42\x52\x3E\xA\x3C\x54\x41\x42\x4C\x45\x20\x77\x69\x64\x74\x68\x3D\x27\x31\x30\x30"
+"\x25\x27\x20\x62\x67\x63\x6F\x6C\x6F\x72\x3D\x27\x43\x46\x43\x46\x43\x46\x27\x20\x62\x6F\x72\x64\x65\x72"
+"\x3D\x30\x3E\x3C\x54\x52\x3E\x3C\x54\x44\x3E\xA\x3C\x43\x4F\x44\x45\x3E\x3C\x50\x52\x45\x3E\xA\x23\x69"
+"\x6E\x63\x6C\x75\x64\x65\x20\x22\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x2E\x68\x22\xA\x23\x69\x6E\x63"
+"\x6C\x75\x64\x65\x20\x26\x6C\x74\x3B\x73\x74\x64\x69\x6F\x2E\x68\x26\x67\x74\x3B\xA\x23\x69\x6E\x63\x6C"
+"\x75\x64\x65\x20\x26\x6C\x74\x3B\x6D\x61\x74\x68\x2E\x68\x26\x67\x74\x3B\xA\xA\xA\x23\x64\x65\x66\x69"
+"\x6E\x65\x20\x47\x49\x46\x53\x49\x44\x45\x20\x33\x32\x30\xA\x63\x68\x61\x72\x20\x67\x69\x66\x64\x61\x74"
+"\x61\x5B\x47\x49\x46\x53\x49\x44\x45\x2A\x47\x49\x46\x53\x49\x44\x45\x5D\x3B\xA\x76\x6F\x69\x64\x20\x6F"
+"\x75\x74\x67\x69\x66\x28\x29\x20\x7B\xA\x9\x66\x6C\x6F\x61\x74\x20\x69\x3B\xA\x9\x69\x6E\x74\x20\x78"
+"\x2C\x79\x2C\x78\x63\x2C\x79\x63\x3B\xA\x9\x69\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3B\xA\x9\x77\x65\x62"
+"\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x67\x69\x66\x73\x65\x74\x70\x61\x6C\x65\x74\x74\x65\x28\x22\x45\x47\x41"
+"\x22\x29\x3B\xA\x9\x69\x66\x28\x2A\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x3E\x51\x75\x65\x72\x79"
+"\x28\x22\x69\x6D\x67\x22\x29\x21\x3D\x30\x29\x20\x7B\xA\x9\x9\x70\x72\x69\x6E\x74\x66\x28\x22\x43\x6F"
+"\x6E\x74\x65\x6E\x74\x2D\x74\x79\x70\x65\x3A\x20\x69\x6D\x61\x67\x65\x2F\x67\x69\x66\x5C\x72\x5C\x6E\x5C"
+"\x72\x5C\x6E\x22\x29\x3B\xA\x9\x9\x69\x66\x28\x21\x73\x74\x72\x63\x6D\x70\x28\x43\x6C\x69\x65\x6E\x74"
+"\x49\x6E\x66\x6F\x2D\x3E\x51\x75\x65\x72\x79\x28\x22\x69\x6D\x67\x22\x29\x2C\x22\x63\x69\x72\x63\x6C\x65"
+"\x22\x29\x29\x20\x7B\xA\x9\x9\x9\x78\x63\x3D\x61\x74\x6F\x69\x28\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66"
+"\x6F\x2D\x3E\x51\x75\x65\x72\x79\x28\x22\x78\x22\x29\x29\x25\x47\x49\x46\x53\x49\x44\x45\x3B\xA\x9\x9"
+"\x9\x79\x63\x3D\x61\x74\x6F\x69\x28\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x3E\x51\x75\x65\x72\x79"
+"\x28\x22\x79\x22\x29\x29\x25\x47\x49\x46\x53\x49\x44\x45\x3B\xA\x9\x9\x9\x63\x6F\x6C\x6F\x72\x3D\x28"
+"\x72\x61\x6E\x64\x28\x29\x25\x31\x35\x29\x2B\x31\x3B\xA\x9\x9\x9\x66\x6F\x72\x28\x69\x3D\x30\x3B\x69"
+"\x3C\x36\x2E\x32\x38\x3B\x69\x2B\x3D\x30\x2E\x30\x31\x29\x20\x7B\xA\x9\x9\x9\x9\x78\x3D\x28\x69\x6E"
+"\x74\x29\x28\x47\x49\x46\x53\x49\x44\x45\x2B\x28\x78\x63\x2B\x63\x6F\x73\x28\x69\x29\x2A\x31\x30\x29\x29"
+"\x25\x47\x49\x46\x53\x49\x44\x45\x3B\xA\x9\x9\x9\x9\x79\x3D\x28\x69\x6E\x74\x29\x28\x47\x49\x46\x53"
+"\x49\x44\x45\x2B\x28\x79\x63\x2B\x73\x69\x6E\x28\x69\x29\x2A\x31\x30\x29\x29\x25\x47\x49\x46\x53\x49\x44"
+"\x45\x3B\xA\x9\x9\x9\x9\x67\x69\x66\x64\x61\x74\x61\x5B\x78\x2B\x28\x79\x2A\x47\x49\x46\x53\x49\x44"
+"\x45\x29\x5D\x3D\x63\x6F\x6C\x6F\x72\x3B\xA\x9\x9\x9\x7D\x3B\xA\x9\x9\x7D\x3B\xA\x9\x9\x77\x65"
+"\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x67\x69\x66\x6F\x75\x74\x70\x75\x74\x28\x67\x69\x66\x64\x61\x74\x61"
+"\x2C\x47\x49\x46\x53\x49\x44\x45\x2C\x47\x49\x46\x53\x49\x44\x45\x29\x3B\xA\x9\x7D\x3B\xA\x9\x70\x72"
+"\x69\x6E\x74\x66\x28\x22\x26\x6C\x74\x3B\x63\x65\x6E\x74\x65\x72\x26\x67\x74\x3B\x47\x65\x6E\x65\x72\x61"
+"\x74\x65\x64\x20\x61\x20\x63\x69\x72\x63\x6C\x65\x20\x28\x63\x6C\x69\x63\x6B\x20\x69\x6E\x73\x69\x64\x65"
+"\x20\x74\x68\x65\x20\x69\x6D\x61\x67\x65\x29\x26\x6C\x74\x3B\x42\x52\x26\x67\x74\x3B\x5C\x6E\x22\x29\x3B"
+"\xA\x9\x70\x72\x69\x6E\x74\x66\x28\x22\x50\x72\x65\x73\x73\x65\x64\x20\x78\x3D\x25\x73\x2C\x79\x3D\x25"
+"\x73\x26\x6C\x74\x3B\x42\x52\x26\x67\x74\x3B\x5C\x6E\x22\x2C\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D"
+"\x3E\x51\x75\x65\x72\x79\x28\x22\x78\x22\x29\x2C\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x3E\x51\x75"
+"\x65\x72\x79\x28\x22\x79\x22\x29\x29\x3B\xA\x9\x70\x72\x69\x6E\x74\x66\x28\x22\x26\x6C\x74\x3B\x66\x6F"
+"\x72\x6D\x26\x67\x74\x3B\x26\x6C\x74\x3B\x69\x6E\x70\x75\x74\x20\x74\x79\x70\x65\x3D\x69\x6D\x61\x67\x65"
+"\x20\x62\x6F\x72\x64\x65\x72\x3D\x30\x20\x73\x72\x63\x3D\x27\x2F\x67\x69\x66\x3F\x69\x6D\x67\x3D\x63\x69"
+"\x72\x63\x6C\x65\x26\x78\x3D\x25\x73\x26\x79\x3D\x25\x73\x27\x26\x67\x74\x3B\x26\x6C\x74\x3B\x2F\x66\x6F"
+"\x72\x6D\x26\x67\x74\x3B\x26\x6C\x74\x3B\x2F\x43\x45\x4E\x54\x45\x52\x26\x67\x74\x3B\x5C\x6E\x22\x2C\x43"
+"\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x3E\x51\x75\x65\x72\x79\x28\x22\x78\x22\x29\x2C\x43\x6C\x69\x65"
+"\x6E\x74\x49\x6E\x66\x6F\x2D\x3E\x51\x75\x65\x72\x79\x28\x22\x79\x22\x29\x29\x3B\xA\x7D\x3B\xA\xA\xA"
+"\x6D\x61\x69\x6E\x28\x29\x20\x7B\xA\x9\x73\x74\x72\x75\x63\x74\x20\x77\x65\x62\x5F\x73\x65\x72\x76\x65"
+"\x72\x20\x73\x65\x72\x76\x65\x72\x3B\x20\x2F\x2F\x20\x73\x65\x72\x76\x65\x72\x20\x68\x61\x6E\x64\x6C\x65"
+"\x72\xA\x9\x6D\x65\x6D\x73\x65\x74\x28\x67\x69\x66\x64\x61\x74\x61\x2C\x30\x2C\x47\x49\x46\x53\x49\x44"
+"\x45\x2A\x47\x49\x46\x53\x49\x44\x45\x29\x3B\xA\x9\x69\x66\x28\x21\x77\x65\x62\x5F\x73\x65\x72\x76\x65"
+"\x72\x5F\x69\x6E\x69\x74\x28\x26\x73\x65\x72\x76\x65\x72\x2C\x38\x33\x2C\x22\x68\x65\x6C\x70\x2E\x6C\x6F"
+"\x67\x22\x2C\x30\x29\x29\x20\x7B\x20\x2F\x2F\x20\x69\x6E\x69\x74\x69\x61\x6C\x69\x7A\x65\xA\x9\x9\x66"
+"\x70\x72\x69\x6E\x74\x66\x28\x73\x74\x64\x65\x72\x72\x2C\x22\x63\x61\x6E\x27\x74\x20\x6F\x70\x65\x6E\x20"
+"\x6C\x69\x73\x74\x65\x6E\x20\x73\x6F\x63\x6B\x65\x74\x5C\x6E\x22\x29\x3B\xA\x9\x7D\x3B\xA\xA\x9\x77"
+"\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x28\x26\x73\x65\x72\x76"
+"\x65\x72\x2C\x22\x2A\x20\x2F\x67\x69\x66\x22\x2C\x6F\x75\x74\x67\x69\x66\x2C\x30\x29\x3B\xA\x9\x77\x68"
+"\x69\x6C\x65\x28\x31\x29\x20\x7B\xA\x9\x9\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x72\x75\x6E\x28"
+"\x26\x73\x65\x72\x76\x65\x72\x29\x3B\x20\x20\x20\x2F\x2F\x20\x72\x75\x6E\x20\x73\x65\x72\x76\x65\x72\xA"
+"\x9\x7D\x3B\xA\x7D\x3B\xA\x3C\x2F\x50\x52\x45\x3E\x3C\x2F\x43\x4F\x44\x45\x3E\xA\x3C\x2F\x54\x44\x3E"
+"\x3C\x2F\x54\x52\x3E\x3C\x2F\x54\x41\x42\x4C\x45\x3E\xA\x3C\x48\x52\x3E\x3C\x42\x52\x3E\xA\xA\xA\xA"
+"\x3C\x43\x45\x4E\x54\x45\x52\x3E\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x63\x6F\x6F\x6B\x69\x65\x3E\x3C\x42\x3E"
+"\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37\x37\x27\x3E\x3C\x61\x20\x68\x72"
+"\x65\x66\x3D\x2F\x63\x6F\x6F\x6B\x69\x65\x3E\x3C\x48\x33\x3E\x43\x6F\x6F\x6B\x69\x65\x73\x3C\x2F\x48\x33"
+"\x3E\x3C\x2F\x61\x3E\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\x3C\x2F\x43\x45\x4E\x54\x45\x52\x3E\xA"
+"\x3C\x73\x6D\x61\x6C\x6C\x3E\x20\x3C\x42\x3E\x75\x73\x65\x64\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x3B"
+"\x3C\x2F\x42\x3E\x3C\x42\x52\x3E\xA\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66"
+"\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E\x69\x74\x27\x3E"
+"\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E\x69\x74\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\xA\x3C\x61"
+"\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65"
+"\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x27\x3E\x77\x65\x62\x5F\x73"
+"\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\xA\x3C"
+"\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77"
+"\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x72\x75\x6E\x27\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F"
+"\x72\x75\x6E\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\xA\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C"
+"\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x63\x6C\x69\x65\x6E\x74\x69\x6E\x66\x6F\x27\x3E\x43\x6C"
+"\x69\x65\x6E\x74\x49\x6E\x66\x6F\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\xA\x3C\x61\x20\x68\x72\x65\x66\x3D\x27"
+"\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E"
+"\x74\x5F\x73\x65\x74\x63\x6F\x6F\x6B\x69\x65\x27\x3E\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x73\x65"
+"\x74\x63\x6F\x6F\x6B\x69\x65\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\xA\x3C\x2F\x73\x6D\x61\x6C\x6C\x3E\x3C\x42"
+"\x52\x3E\xA\xA\x54\x68\x69\x73\x20\x65\x78\x61\x6D\x70\x6C\x65\x20\x66\x65\x74\x63\x68\x73\x20\x61\x6E"
+"\x20\x63\x6C\x69\x65\x6E\x74\x20\x69\x6E\x70\x75\x74\x20\x61\x6E\x64\x20\x73\x65\x74\x27\x73\x20\x61\x6E"
+"\x20\x63\x6F\x6F\x6B\x69\x65\x20\x66\x6F\x72\x20\x31\x35\x20\x6D\x69\x6E\x75\x74\x65\x73\x20\x22\x2B\x31"
+"\x35\x4D\x22\x20\x75\x73\x69\x6E\x67\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x3C\x61\x20\x68\x72\x65\x66"
+"\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x63\x6C\x69"
+"\x65\x6E\x74\x5F\x73\x65\x74\x63\x6F\x6F\x6B\x69\x65\x27\x3E\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F"
+"\x73\x65\x74\x63\x6F\x6F\x6B\x69\x65\x3C\x2F\x61\x3E\xA\xA\x3C\x42\x52\x3E\x3C\x42\x52\x3E\xA\x3C\x54"
+"\x41\x42\x4C\x45\x20\x77\x69\x64\x74\x68\x3D\x27\x31\x30\x30\x25\x27\x20\x62\x67\x63\x6F\x6C\x6F\x72\x3D"
+"\x27\x43\x46\x43\x46\x43\x46\x27\x20\x62\x6F\x72\x64\x65\x72\x3D\x30\x3E\x3C\x54\x52\x3E\x3C\x54\x44\x3E"
+"\xA\x3C\x43\x4F\x44\x45\x3E\x3C\x50\x52\x45\x3E\xA\x23\x69\x6E\x63\x6C\x75\x64\x65\x20\x22\x77\x65\x62"
+"\x5F\x73\x65\x72\x76\x65\x72\x2E\x68\x22\xA\x23\x69\x6E\x63\x6C\x75\x64\x65\x20\x26\x6C\x74\x3B\x73\x74"
+"\x64\x69\x6F\x2E\x68\x26\x67\x74\x3B\xA\xA\xA\x76\x6F\x69\x64\x20\x63\x6F\x6F\x6B\x69\x65\x28\x29\x20"
+"\x7B\xA\x9\x69\x66\x28\x73\x74\x72\x6C\x65\x6E\x28\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x3E\x50"
+"\x6F\x73\x74\x28\x22\x75\x73\x65\x72\x22\x29\x29\x29\xA\x9\x9\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74"
+"\x5F\x73\x65\x74\x63\x6F\x6F\x6B\x69\x65\x28\x22\x75\x73\x65\x72\x6E\x61\x6D\x65\x22\x2C\x43\x6C\x69\x65"
+"\x6E\x74\x49\x6E\x66\x6F\x2D\x3E\x50\x6F\x73\x74\x28\x22\x75\x73\x65\x72\x22\x29\x2C\x22\x2B\x31\x35\x4D"
+"\x22\x29\x3B\xA\x9\x70\x72\x69\x6E\x74\x66\x28\x22\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x74\x79\x70\x65\x3A"
+"\x20\x74\x65\x78\x74\x2F\x68\x74\x6D\x6C\x5C\x72\x5C\x6E\x5C\x72\x5C\x6E\x22\x29\x3B\xA\x9\x70\x72\x69"
+"\x6E\x74\x66\x28\x22\x26\x6C\x74\x3B\x66\x6F\x72\x6D\x20\x6D\x65\x74\x68\x6F\x64\x3D\x27\x50\x4F\x53\x54"
+"\x27\x26\x67\x74\x3B\x5C\x72\x5C\x6E\x22\x29\x3B\xA\x9\x70\x72\x69\x6E\x74\x66\x28\x22\x26\x6C\x74\x3B"
+"\x69\x6E\x70\x75\x74\x20\x74\x79\x70\x65\x3D\x27\x74\x65\x78\x74\x27\x20\x6E\x61\x6D\x65\x3D\x27\x75\x73"
+"\x65\x72\x27\x20\x76\x61\x6C\x75\x65\x3D\x27\x25\x73\x27\x26\x67\x74\x3B\x5C\x72\x5C\x6E\x26\x6C\x74\x3B"
+"\x42\x52\x26\x67\x74\x3B\x22\x2C\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x3E\x43\x6F\x6F\x6B\x69\x65"
+"\x28\x22\x75\x73\x65\x72\x6E\x61\x6D\x65\x22\x29\x29\x3B\xA\x9\x70\x72\x69\x6E\x74\x66\x28\x22\x26\x6C"
+"\x74\x3B\x69\x6E\x70\x75\x74\x20\x74\x79\x70\x65\x3D\x27\x73\x75\x62\x6D\x69\x74\x27\x20\x6E\x61\x6D\x65"
+"\x3D\x27\x73\x65\x6E\x64\x27\x20\x76\x61\x6C\x75\x65\x3D\x27\x20\x47\x4F\x21\x20\x27\x26\x67\x74\x3B\x5C"
+"\x72\x5C\x6E\x26\x6C\x74\x3B\x42\x52\x26\x67\x74\x3B\x22\x29\x3B\xA\x9\x70\x72\x69\x6E\x74\x66\x28\x22"
+"\x26\x6C\x74\x3B\x2F\x66\x6F\x72\x6D\x26\x67\x74\x3B\x5C\x72\x5C\x6E\x22\x29\x3B\xA\x7D\xA\xA\x69\x6E"
+"\x74\x20\x6D\x61\x69\x6E\x28\x69\x6E\x74\x20\x61\x72\x67\x63\x2C\x63\x68\x61\x72\x2A\x2A\x20\x61\x72\x67"
+"\x76\x29\x20\x7B\xA\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x72\x75\x63\x74\x20\x77\x65\x62\x5F\x73\x65"
+"\x72\x76\x65\x72\x20\x73\x65\x72\x76\x65\x72\x3B\x20\x2F\x2F\x20\x73\x65\x72\x76\x65\x72\x20\x68\x61\x6E"
+"\x64\x6C\x65\x72\xA\x20\x20\x20\x20\x20\x20\x20\x20\x69\x66\x28\x21\x77\x65\x62\x5F\x73\x65\x72\x76\x65"
+"\x72\x5F\x69\x6E\x69\x74\x28\x26\x73\x65\x72\x76\x65\x72\x2C\x38\x30\x2C\x22\x68\x65\x6C\x70\x2E\x6C\x6F"
+"\x67\x22\x2C\x30\x29\x29\x20\x7B\x20\x2F\x2F\x20\x69\x6E\x69\x74\x69\x61\x6C\x69\x7A\x65\xA\x20\x20\x20"
+"\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x66\x70\x72\x69\x6E\x74\x66\x28\x73\x74\x64\x65\x72"
+"\x72\x2C\x22\x63\x61\x6E\x27\x74\x20\x6F\x70\x65\x6E\x20\x6C\x69\x73\x74\x65\x6E\x20\x73\x6F\x63\x6B\x65"
+"\x74\x5C\x6E\x22\x29\x3B\xA\x9\x9\x72\x65\x74\x75\x72\x6E\x20\x31\x3B\xA\x20\x20\x20\x20\x20\x20\x20"
+"\x20\x7D\x3B\xA\xA\x20\x20\x20\x20\x20\x20\x20\x20\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64"
+"\x64\x68\x61\x6E\x64\x6C\x65\x72\x28\x26\x73\x65\x72\x76\x65\x72\x2C\x22\x2A\x20\x2F\x2A\x22\x2C\x63\x6F"
+"\x6F\x6B\x69\x65\x2C\x30\x29\x3B\x20\x2F\x2F\x20\x61\x64\x64\x20\x68\x61\x6E\x64\x6C\x65\x72\x20\x66\x6F"
+"\x72\x20\x61\x6C\x6C\x20\x72\x65\x71\x75\x65\x73\x74\x73\xA\x20\x20\x20\x20\x20\x20\x20\x20\x77\x68\x69"
+"\x6C\x65\x28\x31\x29\x20\x7B\xA\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x77\x65"
+"\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x72\x75\x6E\x28\x26\x73\x65\x72\x76\x65\x72\x29\x3B\x20\x20\x20\x2F"
+"\x2F\x20\x72\x75\x6E\x20\x73\x65\x72\x76\x65\x72\xA\x20\x20\x20\x20\x20\x20\x20\x20\x7D\x3B\xA\x7D\xA"
+"\xA\x3C\x2F\x50\x52\x45\x3E\x3C\x2F\x43\x4F\x44\x45\x3E\xA\x3C\x2F\x54\x44\x3E\x3C\x2F\x54\x52\x3E\x3C"
+"\x2F\x54\x41\x42\x4C\x45\x3E\xA\x3C\x48\x52\x3E\x3C\x42\x52\x3E\xA\xA\x3C\x63\x65\x6E\x74\x65\x72\x3E"
+"\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x63\x68\x65\x63\x6B\x62\x6F\x78\x3E\x3C\x42\x3E\x3C\x66\x6F\x6E\x74\x20"
+"\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37\x37\x27\x3E\x3C\x61\x20\x68\x72\x65\x66\x3D\x2F\x63\x68"
+"\x65\x63\x6B\x62\x6F\x78\x3E\x3C\x48\x33\x3E\x43\x68\x65\x63\x6B\x62\x6F\x78\x3C\x2F\x48\x33\x3E\x3C\x2F"
+"\x61\x3E\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\x3C\x2F\x63\x65\x6E\x74\x65\x72\x3E\xA\x3C\x73\x6D"
+"\x61\x6C\x6C\x3E\x20\x3C\x42\x3E\x75\x73\x65\x64\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x3B\x3C\x2F\x42"
+"\x3E\x3C\x42\x52\x3E\xA\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63"
+"\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E\x69\x74\x27\x3E\x77\x65\x62"
+"\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E\x69\x74\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\xA\x3C\x61\x20\x68\x72"
+"\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x73"
+"\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x27\x3E\x77\x65\x62\x5F\x73\x65\x72\x76"
+"\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\xA\x3C\x61\x20\x68"
+"\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F"
+"\x73\x65\x72\x76\x65\x72\x5F\x72\x75\x6E\x27\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x72\x75\x6E"
+"\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\xA\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66"
+"\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x63\x6C\x69\x65\x6E\x74\x69\x6E\x66\x6F\x27\x3E\x43\x6C\x69\x65\x6E"
+"\x74\x49\x6E\x66\x6F\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\xA\x3C\x2F\x73\x6D\x61\x6C\x6C\x3E\x3C\x42\x52\x3E"
+"\xA\xA\x54\x68\x69\x73\x20\x65\x78\x61\x6D\x70\x6C\x65\x20\x75\x73\x65\x73\x20\x61\x20\x65\x73\x70\x65"
+"\x63\x69\x66\x69\x63\x20\x63\x61\x73\x65\x20\x66\x72\x6F\x6D\x20\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F"
+"\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x63\x6C\x69\x65\x6E\x74\x69\x6E\x66\x6F"
+"\x27\x3E\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x3C\x2F\x61\x3E\x20\x71\x75\x65\x72\x79\x20\x61\x6E\x64"
+"\x20\x70\x6F\x73\x74\x2C\x20\x75\x73\x69\x6E\x67\x20\x74\x68\x65\x20\x27\x23\x27\x20\x61\x73\x20\x70\x72"
+"\x65\x66\x69\x78\x20\x6F\x66\x20\x76\x61\x72\x6E\x61\x6D\x65\x20\x72\x65\x74\x75\x72\x6E\x69\x6E\x67\x20"
+"\x74\x68\x65\x20\x6E\x75\x6D\x62\x65\x72\x20\x6F\x66\x20\x6F\x63\x63\x75\x72\x65\x6E\x63\x65\x73\xA\xA"
+"\xA\x3C\x42\x52\x3E\x3C\x42\x52\x3E\xA\x3C\x54\x41\x42\x4C\x45\x20\x77\x69\x64\x74\x68\x3D\x27\x31\x30"
+"\x30\x25\x27\x20\x62\x67\x63\x6F\x6C\x6F\x72\x3D\x27\x43\x46\x43\x46\x43\x46\x27\x20\x62\x6F\x72\x64\x65"
+"\x72\x3D\x30\x3E\x3C\x54\x52\x3E\x3C\x54\x44\x3E\xA\x3C\x43\x4F\x44\x45\x3E\x3C\x50\x52\x45\x3E\xA\xA"
+"\x23\x69\x6E\x63\x6C\x75\x64\x65\x20\x22\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x2E\x68\x22\xA\x23\x69"
+"\x6E\x63\x6C\x75\x64\x65\x20\x26\x6C\x74\x3B\x73\x74\x64\x69\x6F\x2E\x68\x26\x67\x74\x3B\xA\xA\xA\x76"
+"\x6F\x69\x64\x20\x63\x68\x65\x63\x6B\x62\x6F\x78\x28\x29\x20\x7B\xA\x9\x69\x6E\x74\x20\x69\x3D\x30\x3B"
+"\xA\x9\x63\x68\x61\x72\x20\x2A\x74\x78\x74\x5B\x5D\x3D\x7B\x22\x6F\x6E\x65\x22\x2C\x22\x74\x77\x6F\x22"
+"\x2C\x22\x74\x68\x72\x65\x65\x22\x2C\x22\x66\x6F\x75\x72\x22\x2C\x22\x66\x69\x76\x65\x22\x7D\x3B\xA\x9"
+"\x70\x72\x69\x6E\x74\x66\x28\x22\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x74\x79\x70\x65\x3A\x20\x74\x65\x78\x74"
+"\x2F\x68\x74\x6D\x6C\x5C\x72\x5C\x6E\x5C\x72\x5C\x6E\x22\x29\x3B\xA\x9\x70\x72\x69\x6E\x74\x66\x28\x22"
+"\x26\x6C\x74\x3B\x66\x6F\x72\x6D\x20\x6D\x65\x74\x68\x6F\x64\x3D\x27\x51\x55\x45\x52\x59\x27\x26\x67\x74"
+"\x3B\x5C\x72\x5C\x6E\x22\x29\x3B\xA\x9\xA\x9\x66\x6F\x72\x28\x69\x3D\x30\x3B\x69\x3C\x35\x3B\x69\x2B"
+"\x2B\x29\x20\x7B\x9\xA\x9\x9\x70\x72\x69\x6E\x74\x66\x28\x22\x26\x6C\x74\x3B\x69\x6E\x70\x75\x74\x20"
+"\x74\x79\x70\x65\x3D\x27\x63\x68\x65\x63\x6B\x62\x6F\x78\x27\x20\x6E\x61\x6D\x65\x3D\x27\x6E\x75\x6D\x62"
+"\x65\x72\x27\x20\x76\x61\x6C\x75\x65\x3D\x27\x25\x73\x27\x26\x67\x74\x3B\x5C\x72\x5C\x6E\x26\x6C\x74\x3B"
+"\x42\x52\x26\x67\x74\x3B\x22\x2C\x74\x78\x74\x5B\x69\x5D\x29\x3B\x9\xA\x9\x7D\x3B\xA\x9\x70\x72\x69"
+"\x6E\x74\x66\x28\x22\x26\x6C\x74\x3B\x69\x6E\x70\x75\x74\x20\x74\x79\x70\x65\x3D\x27\x73\x75\x62\x6D\x69"
+"\x74\x27\x20\x6E\x61\x6D\x65\x3D\x27\x73\x65\x6E\x64\x27\x20\x76\x61\x6C\x75\x65\x3D\x27\x20\x53\x45\x4E"
+"\x44\x20\x27\x26\x67\x74\x3B\x5C\x72\x5C\x6E\x26\x6C\x74\x3B\x42\x52\x26\x67\x74\x3B\x22\x29\x3B\xA\x9"
+"\x70\x72\x69\x6E\x74\x66\x28\x22\x26\x6C\x74\x3B\x2F\x66\x6F\x72\x6D\x26\x67\x74\x3B\x5C\x72\x5C\x6E\x22"
+"\x29\x3B\xA\x9\xA\x9\x70\x72\x69\x6E\x74\x66\x28\x22\x59\x6F\x75\x20\x68\x61\x76\x65\x20\x63\x68\x6F"
+"\x6F\x73\x65\x6E\x20\x26\x6C\x74\x3B\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x46\x46\x30\x30\x30"
+"\x30\x27\x26\x67\x74\x3B\x25\x64\x26\x6C\x74\x3B\x2F\x66\x6F\x6E\x74\x26\x67\x74\x3B\x20\x6E\x75\x6D\x62"
+"\x65\x72\x73\x3A\x20\x5C\x72\x5C\x6E\x22\x2C\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x3E\x51\x75\x65"
+"\x72\x79\x28\x22\x23\x6E\x75\x6D\x62\x65\x72\x22\x29\x29\x3B\xA\x9\x66\x6F\x72\x28\x69\x3D\x30\x3B\x69"
+"\x26\x6C\x74\x3B\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x3E\x51\x75\x65\x72\x79\x28\x22\x23\x6E\x75"
+"\x6D\x62\x65\x72\x22\x29\x3B\x69\x2B\x2B\x29\x20\x7B\x9\xA\x9\x9\x70\x72\x69\x6E\x74\x66\x28\x22\x26"
+"\x6C\x74\x3B\x62\x3E\x25\x73\x26\x6C\x74\x3B\x2F\x62\x26\x67\x74\x3B\x2C\x5C\x72\x5C\x6E\x5C\x72\x5C\x6E"
+"\x22\x2C\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x3E\x51\x75\x65\x72\x79\x28\x22\x6E\x75\x6D\x62\x65"
+"\x72\x22\x29\x29\x3B\xA\x9\x7D\x3B\xA\x9\x70\x72\x69\x6E\x74\x66\x28\x22\x2E\x2E\x2E\x26\x6C\x74\x3B"
+"\x42\x52\x26\x67\x74\x3B\x5C\x72\x5C\x6E\x5C\x72\x5C\x6E\x22\x29\x3B\xA\x9\xA\x7D\xA\x69\x6E\x74\x20"
+"\x6D\x61\x69\x6E\x28\x69\x6E\x74\x20\x61\x72\x67\x63\x2C\x63\x68\x61\x72\x2A\x2A\x20\x61\x72\x67\x76\x29"
+"\x20\x7B\xA\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x72\x75\x63\x74\x20\x77\x65\x62\x5F\x73\x65\x72\x76"
+"\x65\x72\x20\x73\x65\x72\x76\x65\x72\x3B\x20\x2F\x2F\x20\x73\x65\x72\x76\x65\x72\x20\x68\x61\x6E\x64\x6C"
+"\x65\x72\xA\x20\x20\x20\x20\x20\x20\x20\x20\x69\x66\x28\x21\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F"
+"\x69\x6E\x69\x74\x28\x26\x73\x65\x72\x76\x65\x72\x2C\x38\x30\x2C\x22\x68\x65\x6C\x70\x2E\x6C\x6F\x67\x22"
+"\x2C\x30\x29\x29\x20\x7B\x20\x2F\x2F\x20\x69\x6E\x69\x74\x69\x61\x6C\x69\x7A\x65\xA\x20\x20\x20\x20\x20"
+"\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x66\x70\x72\x69\x6E\x74\x66\x28\x73\x74\x64\x65\x72\x72\x2C"
+"\x22\x63\x61\x6E\x27\x74\x20\x6F\x70\x65\x6E\x20\x6C\x69\x73\x74\x65\x6E\x20\x73\x6F\x63\x6B\x65\x74\x5C"
+"\x6E\x22\x29\x3B\xA\x9\x9\x72\x65\x74\x75\x72\x6E\x20\x31\x3B\xA\x20\x20\x20\x20\x20\x20\x20\x20\x7D"
+"\x3B\xA\xA\x20\x20\x20\x20\x20\x20\x20\x20\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68"
+"\x61\x6E\x64\x6C\x65\x72\x28\x26\x73\x65\x72\x76\x65\x72\x2C\x22\x2A\x20\x2F\x2A\x22\x2C\x63\x68\x65\x63"
+"\x6B\x62\x6F\x78\x2C\x30\x29\x3B\x20\x2F\x2F\x20\x61\x64\x64\x20\x68\x61\x6E\x64\x6C\x65\x72\x20\x66\x6F"
+"\x72\x20\x61\x6C\x6C\x20\x72\x65\x71\x75\x65\x73\x74\x73\xA\x20\x20\x20\x20\x20\x20\x20\x20\x77\x68\x69"
+"\x6C\x65\x28\x31\x29\x20\x7B\xA\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x77\x65"
+"\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x72\x75\x6E\x28\x26\x73\x65\x72\x76\x65\x72\x29\x3B\x20\x20\x20\x2F"
+"\x2F\x20\x72\x75\x6E\x20\x73\x65\x72\x76\x65\x72\xA\x20\x20\x20\x20\x20\x20\x20\x20\x7D\x3B\xA\x7D\xA"
+"\xA\x3C\x2F\x50\x52\x45\x3E\x3C\x2F\x43\x4F\x44\x45\x3E\xA\x3C\x2F\x54\x44\x3E\x3C\x2F\x54\x52\x3E\x3C"
+"\x2F\x54\x41\x42\x4C\x45\x3E\xA\x3C\x48\x52\x3E\x3C\x42\x52\x3E\xA\xA\x3C\x41\x20\x6E\x61\x6D\x65\x3D"
+"\x63\x6F\x6E\x66\x65\x78\x61\x6D\x70\x6C\x65\x3E\x3C\x42\x3E\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72"
+"\x3D\x27\x30\x30\x30\x30\x37\x37\x27\x3E\x3C\x61\x20\x68\x72\x65\x66\x3D\x2F\x63\x6F\x6E\x66\x65\x78\x61"
+"\x6D\x70\x6C\x65\x3E\x3C\x48\x33\x3E\x43\x6F\x6E\x66\x69\x67\x20\x65\x78\x61\x6D\x70\x6C\x65\x3C\x2F\x48"
+"\x33\x3E\x3C\x2F\x61\x3E\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\xA\x3C\x73\x6D\x61\x6C\x6C\x3E\x20"
+"\x3C\x42\x3E\x75\x73\x65\x64\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x3B\x3C\x2F\x42\x3E\x3C\x42\x52\x3E"
+"\xA\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73"
+"\x23\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E\x69\x74\x27\x3E\x77\x65\x62\x5F\x73\x65\x72\x76"
+"\x65\x72\x5F\x69\x6E\x69\x74\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\xA\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F"
+"\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72"
+"\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x27\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64"
+"\x64\x68\x61\x6E\x64\x6C\x65\x72\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\xA\x3C\x61\x20\x68\x72\x65\x66\x3D\x27"
+"\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x73\x65\x72\x76\x65"
+"\x72\x5F\x72\x75\x6E\x27\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x72\x75\x6E\x3C\x2F\x61\x3E\x3C"
+"\x42\x52\x3E\xA\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69"
+"\x6F\x6E\x73\x23\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x61\x64\x64\x66\x69\x6C\x65\x27\x3E\x77\x65"
+"\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x61\x64\x64\x66\x69\x6C\x65\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\xA\x3C"
+"\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x63"
+"\x6C\x69\x65\x6E\x74\x69\x6E\x66\x6F\x27\x3E\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x3C\x2F\x61\x3E\x3C"
+"\x42\x52\x3E\xA\x3C\x2F\x73\x6D\x61\x6C\x6C\x3E\x3C\x42\x52\x3E\xA\xA\xA\x3C\x42\x52\x3E\x3C\x42\x52"
+"\x3E\xA\x3C\x54\x41\x42\x4C\x45\x20\x77\x69\x64\x74\x68\x3D\x27\x31\x30\x30\x25\x27\x20\x62\x67\x63\x6F"
+"\x6C\x6F\x72\x3D\x27\x43\x46\x43\x46\x43\x46\x27\x20\x62\x6F\x72\x64\x65\x72\x3D\x30\x3E\x3C\x54\x52\x3E"
+"\x3C\x54\x44\x3E\xA\x3C\x43\x4F\x44\x45\x3E\x3C\x50\x52\x45\x3E\xA\x23\x69\x6E\x63\x6C\x75\x64\x65\x20"
+"\x22\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x2E\x68\x22\xA\x23\x69\x6E\x63\x6C\x75\x64\x65\x20\x26\x6C"
+"\x74\x3B\x73\x74\x64\x69\x6F\x2E\x68\x26\x67\x74\x3B\xA\xA\xA\x76\x6F\x69\x64\x20\x63\x6F\x6E\x66\x65"
+"\x78\x61\x6D\x70\x6C\x65\x28\x29\x20\x7B\xA\x9\x70\x72\x69\x6E\x74\x66\x28\x22\x43\x6F\x6E\x74\x65\x6E"
+"\x74\x2D\x74\x79\x70\x65\x3A\x20\x74\x65\x78\x74\x2F\x68\x74\x6D\x6C\x5C\x72\x5C\x6E\x5C\x72\x5C\x6E\x22"
+"\x29\x3B\xA\x9\x70\x72\x69\x6E\x74\x66\x28\x22\x26\x6C\x74\x3B\x50\x52\x45\x26\x67\x74\x3B\x22\x29\x3B"
+"\xA\x9\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x61\x64\x64\x66\x69\x6C\x65\x28\x73\x65\x72\x76\x65"
+"\x72\x2E\x63\x6F\x6E\x66\x66\x69\x6C\x65\x29\x3B\x20\x2F\x2F\x20\x61\x64\x64\x20\x68\x65\x6C\x70\x2E\x63"
+"\x66\x67\x20\x66\x69\x6C\x65\x20\x74\x6F\x20\x6F\x75\x74\x70\x75\x74\x9\xA\x9\x70\x72\x69\x6E\x74\x66"
+"\x28\x22\x26\x6C\x74\x3B\x2F\x50\x52\x45\x26\x67\x74\x3B\x22\x29\x3B\xA\x9\x70\x72\x69\x6E\x74\x66\x28"
+"\x22\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x3E\x43\x6F\x6E\x66\x28\x5C\x22\x50\x45\x52\x53\x4F\x4E"
+"\x41\x4C\x5F\x43\x4F\x4E\x46\x5C\x22\x2C\x5C\x22\x50\x4F\x52\x54\x5C\x22\x29\x3D\x25\x73\x26\x6C\x74\x3B"
+"\x42\x52\x26\x67\x74\x3B\x5C\x6E\x22\x2C\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x3E\x43\x6F\x6E\x66"
+"\x28\x22\x50\x45\x52\x53\x4F\x4E\x41\x4C\x5F\x43\x4F\x4E\x46\x22\x2C\x22\x50\x4F\x52\x54\x22\x29\x29\x3B"
+"\xA\x9\x70\x72\x69\x6E\x74\x66\x28\x22\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x3E\x43\x6F\x6E\x66"
+"\x28\x5C\x22\x50\x45\x52\x53\x4F\x4E\x41\x4C\x5F\x43\x4F\x4E\x46\x5C\x22\x2C\x5C\x22\x49\x50\x5C\x22\x29"
+"\x3D\x25\x73\x26\x6C\x74\x3B\x42\x52\x26\x67\x74\x3B\x5C\x6E\x22\x2C\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66"
+"\x6F\x2D\x3E\x43\x6F\x6E\x66\x28\x22\x50\x45\x52\x53\x4F\x4E\x41\x4C\x5F\x43\x4F\x4E\x46\x22\x2C\x22\x49"
+"\x50\x22\x29\x29\x3B\xA\x9\x70\x72\x69\x6E\x74\x66\x28\x22\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D"
+"\x3E\x43\x6F\x6E\x66\x28\x5C\x22\x4C\x49\x42\x57\x45\x42\x53\x45\x52\x56\x45\x52\x5C\x22\x2C\x5C\x22\x50"
+"\x4F\x52\x54\x5C\x22\x29\x3D\x25\x73\x26\x6C\x74\x3B\x42\x52\x26\x67\x74\x3B\x5C\x6E\x22\x2C\x43\x6C\x69"
+"\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x3E\x43\x6F\x6E\x66\x28\x22\x4C\x49\x42\x57\x45\x42\x53\x45\x52\x56\x45"
+"\x52\x22\x2C\x22\x50\x4F\x52\x54\x22\x29\x29\x3B\xA\x9\xA\x7D\xA\xA\x69\x6E\x74\x20\x6D\x61\x69\x6E"
+"\x28\x69\x6E\x74\x20\x61\x72\x67\x63\x2C\x63\x68\x61\x72\x2A\x2A\x20\x61\x72\x67\x76\x29\x20\x7B\xA\x20"
+"\x20\x20\x20\x20\x20\x20\x20\x73\x74\x72\x75\x63\x74\x20\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x20\x73"
+"\x65\x72\x76\x65\x72\x3B\x20\x2F\x2F\x20\x73\x65\x72\x76\x65\x72\x20\x68\x61\x6E\x64\x6C\x65\x72\xA\x20"
+"\x20\x20\x20\x20\x20\x20\x20\x69\x66\x28\x21\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E\x69\x74"
+"\x28\x26\x73\x65\x72\x76\x65\x72\x2C\x38\x30\x2C\x22\x68\x65\x6C\x70\x2E\x63\x66\x67\x22\x2C\x57\x53\x5F"
+"\x55\x53\x45\x45\x58\x54\x43\x4F\x4E\x46\x29\x29\x20\x7B\x20\x2F\x2F\x20\x69\x6E\x69\x74\x69\x61\x6C\x69"
+"\x7A\x65\xA\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x66\x70\x72\x69\x6E\x74\x66"
+"\x28\x73\x74\x64\x65\x72\x72\x2C\x22\x63\x61\x6E\x27\x74\x20\x6F\x70\x65\x6E\x20\x6C\x69\x73\x74\x65\x6E"
+"\x20\x73\x6F\x63\x6B\x65\x74\x5C\x6E\x22\x29\x3B\xA\x9\x9\x72\x65\x74\x75\x72\x6E\x20\x31\x3B\xA\x20"
+"\x20\x20\x20\x20\x20\x20\x20\x7D\x3B\xA\xA\x20\x20\x20\x20\x20\x20\x20\x20\x77\x65\x62\x5F\x73\x65\x72"
+"\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x28\x26\x73\x65\x72\x76\x65\x72\x2C\x22\x2A\x20"
+"\x2A\x22\x2C\x63\x6F\x6E\x66\x65\x78\x61\x6D\x70\x6C\x65\x2C\x30\x29\x3B\x20\x2F\x2F\x20\x61\x64\x64\x20"
+"\x68\x61\x6E\x64\x6C\x65\x72\x20\x66\x6F\x72\x20\x61\x6C\x6C\x20\x72\x65\x71\x75\x65\x73\x74\x73\xA\x20"
+"\x20\x20\x20\x20\x20\x20\x20\x77\x68\x69\x6C\x65\x28\x31\x29\x20\x7B\xA\x20\x20\x20\x20\x20\x20\x20\x20"
+"\x20\x20\x20\x20\x20\x20\x20\x20\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x72\x75\x6E\x28\x26\x73\x65"
+"\x72\x76\x65\x72\x29\x3B\x20\x20\x20\x2F\x2F\x20\x72\x75\x6E\x20\x73\x65\x72\x76\x65\x72\xA\x20\x20\x20"
+"\x20\x20\x20\x20\x20\x7D\x3B\xA\x7D\xA\x3C\x2F\x50\x52\x45\x3E\x3C\x2F\x43\x4F\x44\x45\x3E\xA\x3C\x2F"
+"\x54\x44\x3E\x3C\x2F\x54\x52\x3E\x3C\x2F\x54\x41\x42\x4C\x45\x3E";
+
+#endif


Property changes on: GNUnet/libwebserver/contrib/help/examples.h
___________________________________________________________________
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/contrib/help/functions.h
===================================================================
--- GNUnet/libwebserver/contrib/help/functions.h        2006-08-18 20:37:47 UTC 
(rev 3245)
+++ GNUnet/libwebserver/contrib/help/functions.h        2006-08-18 21:41:52 UTC 
(rev 3246)
@@ -0,0 +1,800 @@
+/*
+ * by data2header by Luis Figueiredo (address@hidden)
+ */
+#ifndef _FUNCTIONS_H_
+#define _FUNCTIONS_H_
+
+char 
functions[]="\x3C\x63\x65\x6E\x74\x65\x72\x3E\x3C\x48\x33\x3E\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27"
+"\x30\x30\x37\x37\x30\x30\x27\x3E\x6C\x69\x62\x77\x65\x62\x73\x65\x72\x76\x65\x72\x20\x46\x75\x6E\x63\x74"
+"\x69\x6F\x6E\x73\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x48\x33\x3E\x3C\x2F\x63\x65\x6E\x74\x65\x72\x3E\x3C"
+"\x42\x52\x3E\x3C\x42\x52\x3E\xA\x3C\x66\x6F\x6E\x74\x20\x66\x61\x63\x65\x3D\x27\x56\x65\x72\x64\x61\x6E"
+"\x61\x27\x3E\xA\xA\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E"
+"\x69\x74\x3E\x3C\x42\x3E\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37\x37\x27"
+"\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E\x69\x74\x28\x29\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C"
+"\x2F\x42\x3E\x3C\x42\x52\x3E\x3C\x42\x52\x3E\xA\x3C\x42\x3E\x4E\x41\x4D\x45\x3C\x2F\x42\x3E\xA\x3C\x55"
+"\x4C\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E\x69\x74\x20\x2D\x20\x49\x6E\x69\x74\x69\x61"
+"\x6C\x69\x7A\x65\x20\x77\x65\x62\x73\x65\x72\x76\x65\x72\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x53\x59\x4E"
+"\x4F\x50\x53\x49\x53\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x23\x69\x6E\x63\x6C\x75\x64\x65\x20\x22\x77\x65"
+"\x62\x5F\x73\x65\x72\x76\x65\x72\x2E\x68\x22\x3C\x42\x52\x3E\x3C\x42\x52\x3E\x69\x6E\x74\x20\x77\x65\x62"
+"\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E\x69\x74\x28\x73\x74\x72\x75\x63\x74\x20\x77\x65\x62\x5F\x73\x65"
+"\x72\x76\x65\x72\x20\x2A\x3C\x55\x3E\x73\x65\x72\x76\x65\x72\x3C\x2F\x55\x3E\x2C\x20\x69\x6E\x74\x20\x3C"
+"\x55\x3E\x70\x6F\x72\x74\x3C\x2F\x55\x3E\x2C\x20\x63\x6F\x6E\x73\x74\x20\x63\x68\x61\x72\x20\x2A\x3C\x55"
+"\x3E\x6C\x6F\x67\x66\x69\x6C\x65\x3C\x2F\x55\x3E\x2C\x20\x69\x6E\x74\x20\x3C\x55\x3E\x66\x6C\x61\x67\x73"
+"\x3C\x2F\x55\x3E\x29\x3B\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x44\x45\x53\x43\x52\x49\x50\x54\x49\x4F\x4E"
+"\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x54\x68\x65\x20\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E"
+"\x69\x74\x28\x29\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x69\x6E\x69\x74\x69\x61\x6C\x69\x7A\x65\x73\x20"
+"\x74\x68\x65\x20\x73\x65\x72\x76\x65\x72\x20\x68\x61\x6E\x64\x6C\x65\x72\x20\x3C\x55\x3E\x73\x65\x72\x76"
+"\x65\x72\x3C\x2F\x55\x3E\x2C\x20\x73\x74\x61\x72\x74\x20\x61\x20\x6C\x69\x73\x74\x65\x6E\x20\x73\x6F\x63"
+"\x6B\x65\x74\x20\x61\x74\x20\x70\x6F\x72\x74\x20\x3C\x55\x3E\x70\x6F\x72\x74\x3C\x2F\x55\x3E\x2C\x20\x77"
+"\x69\x74\x68\x20\x74\x68\x65\x20\x6C\x6F\x67\x66\x69\x6C\x65\x20\x3C\x55\x3E\x6C\x6F\x67\x66\x69\x6C\x65"
+"\x3C\x2F\x55\x3E\x20\x74\x6F\x20\x70\x72\x6F\x64\x75\x63\x65\x20\x74\x68\x65\x20\x77\x65\x62\x73\x65\x72"
+"\x76\x65\x72\x20\x6C\x6F\x67\x3C\x42\x52\x3E\x20\x69\x66\x20\x57\x53\x5F\x55\x53\x45\x45\x58\x54\x43\x4F"
+"\x4E\x46\x20\x66\x6C\x61\x67\x20\x69\x73\x20\x75\x73\x65\x64\x2C\x20\x74\x68\x65\x20\x3C\x55\x3E\x6C\x6F"
+"\x67\x66\x69\x6C\x65\x3C\x2F\x55\x3E\x20\x77\x69\x6C\x6C\x20\x62\x65\x20\x74\x68\x65\x20\x63\x6F\x6E\x66"
+"\x69\x67\x20\x66\x69\x6C\x65\x20\x3C\x42\x52\x3E\xA\x3C\x55\x3E\x66\x6C\x61\x67\x73\x3C\x2F\x55\x3E\x20"
+"\x3C\x42\x52\x3E\xA\x57\x53\x5F\x55\x53\x45\x53\x53\x4C\x20\x66\x6F\x72\x20\x6F\x70\x65\x6E\x73\x73\x6C"
+"\x20\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x73\x20\x28\x68\x74\x74\x70\x73\x20\x73\x75\x70\x70\x6F\x72"
+"\x74\x29\x3C\x42\x52\x3E\xA\x57\x53\x5F\x55\x53\x45\x45\x58\x54\x43\x4F\x4E\x46\x20\x66\x6F\x72\x20\x75"
+"\x73\x69\x6E\x67\x20\x61\x20\x65\x78\x74\x65\x72\x6E\x61\x6C\x20\x63\x6F\x6E\x66\x69\x67\x20\x66\x69\x6C"
+"\x65\x3C\x42\x52\x3E\xA\x57\x53\x5F\x4C\x4F\x43\x41\x4C\x20\x6F\x6E\x6C\x79\x20\x61\x63\x63\x65\x70\x74"
+"\x73\x20\x31\x32\x37\x2E\x30\x2E\x30\x2E\x31\x20\x28\x6C\x6F\x63\x61\x6C\x29\x20\x63\x6F\x6E\x6E\x65\x63"
+"\x74\x69\x6F\x6E\x73\xA\x3C\x2F\x55\x4C\x3E\xA\xA\x3C\x42\x3E\x52\x45\x54\x55\x52\x4E\x20\x56\x41\x4C"
+"\x55\x45\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x4F\x6E\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x31\x20\x69"
+"\x73\x20\x72\x65\x74\x75\x72\x6E\x65\x64\x2C\x20\x4F\x6E\x20\x65\x72\x72\x6F\x72\x2C\x20\x30\x20\x69\x73"
+"\x20\x72\x65\x74\x75\x72\x6E\x65\x64\x3C\x2F\x55\x4C\x3E\xA\x3C\x48\x52\x3E\x3C\x42\x52\x3E\xA\x20\xA"
+"\xA\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E"
+"\x64\x6C\x65\x72\x3E\x3C\x42\x3E\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37"
+"\x37\x27\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x28\x29"
+"\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\x3C\x42\x52\x3E\x3C\x42\x52\x3E\xA\x3C\x42\x3E\x4E\x41\x4D"
+"\x45\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61"
+"\x6E\x64\x6C\x65\x72\x20\x2D\x20\x61\x64\x64\x73\x20\x61\x20\x72\x65\x71\x75\x65\x73\x74\x20\x68\x61\x6E"
+"\x64\x6C\x65\x72\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x53\x59\x4E\x4F\x50\x53\x49\x53\x3C\x2F\x42\x3E\xA"
+"\x3C\x55\x4C\x3E\x23\x69\x6E\x63\x6C\x75\x64\x65\x20\x22\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x2E\x68"
+"\x22\x3C\x42\x52\x3E\x3C\x42\x52\x3E\x69\x6E\x74\x20\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64"
+"\x64\x68\x61\x6E\x64\x6C\x65\x72\x28\x73\x74\x72\x75\x63\x74\x20\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72"
+"\x20\x2A\x3C\x55\x3E\x73\x65\x72\x76\x65\x72\x3C\x2F\x55\x3E\x2C\x20\x63\x6F\x6E\x73\x74\x20\x63\x68\x61"
+"\x72\x20\x2A\x3C\x55\x3E\x6D\x73\x74\x72\x3C\x2F\x55\x3E\x2C\x20\x76\x6F\x69\x64\x20\x28\x2A\x3C\x55\x3E"
+"\x66\x75\x6E\x63\x3C\x2F\x55\x3E\x29\x28\x29\x2C\x20\x69\x6E\x74\x20\x3C\x55\x3E\x66\x6C\x61\x67\x73\x3C"
+"\x2F\x55\x3E\x29\x3B\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x44\x45\x53\x43\x52\x49\x50\x54\x49\x4F\x4E\x3C"
+"\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x54\x68\x65\x20\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64\x64"
+"\x68\x61\x6E\x64\x6C\x65\x72\x28\x29\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x61\x64\x64\x73\x20\x61\x20"
+"\x72\x65\x71\x75\x65\x73\x74\x20\x68\x61\x6E\x64\x6C\x65\x72\x20\x3C\x55\x3E\x6D\x73\x74\x72\x3C\x2F\x55"
+"\x3E\x20\x74\x6F\x20\x74\x68\x65\x20\x73\x65\x72\x76\x65\x72\x20\x68\x61\x6E\x64\x6C\x65\x72\x20\x3C\x55"
+"\x3E\x73\x65\x72\x76\x65\x72\x3C\x2F\x55\x3E\x20\x74\x68\x72\x6F\x75\x67\x68\x20\x74\x68\x65\x20\x66\x75"
+"\x6E\x63\x74\x69\x6F\x6E\x20\x3C\x55\x3E\x66\x75\x6E\x63\x3C\x2F\x55\x3E\x2E\x3C\x42\x52\x3E\xA\x3C\x55"
+"\x3E\x6D\x73\x74\x72\x3C\x2F\x55\x3E\x20\x69\x73\x20\x61\x20\x73\x74\x72\x69\x6E\x67\x20\x63\x6F\x6E\x74"
+"\x61\x69\x6E\x69\x6E\x67\x20\x65\x78\x70\x72\x65\x73\x73\x69\x6F\x6E\x73\x20\x28\x61\x73\x20\x6D\x61\x74"
+"\x63\x68\x69\x6E\x67\x20\x66\x69\x6C\x65\x73\x29\x20\x74\x6F\x20\x6D\x61\x74\x63\x68\x20\x77\x69\x74\x68"
+"\x20\x74\x68\x65\x20\x63\x6C\x69\x65\x6E\x74\x20\x72\x65\x71\x75\x65\x73\x74\x20\x28\x47\x45\x54\x20\x2F"
+"\x3C\x42\x3E\x62\x6C\x61\x68\x2E\x68\x74\x6D\x6C\x3C\x2F\x42\x3E\x3F\x69\x64\x3D\x31\x20\x48\x54\x54\x50"
+"\x2F\x31\x2E\x30\x2C\x20\x77\x69\x6C\x6C\x20\x62\x65\x20\x6D\x61\x74\x63\x68\x65\x64\x20\x62\x79\x20\x3C"
+"\x55\x3E\x6D\x73\x74\x72\x3C\x2F\x55\x3E\x3D\x22\x2A\x20\x2F\x62\x6C\x61\x68\x2E\x68\x74\x6D\x6C\x22\x29"
+"\x3C\x42\x52\x3E\xA\x3C\x55\x3E\x66\x6C\x61\x67\x73\x3A\x3C\x2F\x55\x3E\x20\x3C\x42\x52\x3E\xA\x57\x53"
+"\x5F\x4C\x4F\x43\x41\x4C\x20\x2D\x20\x6F\x6E\x6C\x79\x20\x6C\x6F\x63\x61\x6C\x20\x63\x6F\x6E\x6E\x65\x63"
+"\x74\x69\x6F\x6E\x73\x20\x61\x72\x65\x20\x68\x61\x6E\x64\x6C\x65\x64\x3C\x42\x52\x3E\xA\x57\x53\x5F\x44"
+"\x59\x4E\x56\x41\x52\x20\x2D\x20\x74\x72\x65\x61\x74\x20\x64\x79\x6E\x61\x6D\x69\x63\x20\x76\x61\x72\x69"
+"\x61\x62\x6C\x65\x73\x20\x6F\x6E\x20\x6F\x75\x74\x70\x75\x74\x20\x28\x41\x74\x65\x6E\x74\x69\x6F\x6E\x3A"
+"\x20\x74\x68\x69\x73\x20\x64\x69\x73\x61\x62\x6C\x65\x73\x20\x22\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x72\x61"
+"\x6E\x67\x65\x22\x20\x61\x6E\x64\x20\x22\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x6C\x65\x6E\x67\x74\x68\x22\x20"
+"\x68\x65\x61\x64\x65\x72\x2C\x20\x72\x65\x73\x70\x6F\x6E\x64\x69\x6E\x67\x20\x22\x35\x30\x31\x20\x6E\x6F"
+"\x74\x20\x69\x6D\x70\x6C\x65\x6D\x65\x6E\x74\x65\x64\x22\x29\x3C\x42\x52\x3E\xA\x57\x53\x5F\x55\x53\x45"
+"\x4C\x45\x4E\x20\x2D\x20\x57\x69\x74\x68\x20\x74\x68\x69\x73\x20\x66\x6C\x61\x67\x2C\x20\x6C\x69\x62\x72"
+"\x61\x72\x79\x20\x63\x61\x6C\x63\x75\x6C\x61\x74\x65\x20\x74\x68\x65\x20\x68\x65\x61\x64\x65\x72\x20\x22"
+"\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x6C\x65\x6E\x67\x74\x68\x22\x20\x61\x6E\x64\x20\x22\x43\x6F\x6E\x74\x65"
+"\x6E\x74\x2D\x72\x61\x6E\x67\x65\x22\x20\x69\x74\x20\x73\x65\x6C\x66\x2C\x20\x75\x73\x65\x66\x75\x6C\x20"
+"\x66\x6F\x72\x20\x72\x65\x73\x75\x6D\x69\x6E\x67\x2C\x20\x63\x6F\x6E\x74\x65\x6E\x74\x2D\x6C\x65\x6E\x67"
+"\x74\x68\x20\x63\x61\x6E\x20\x62\x65\x20\x6D\x69\x73\x63\x61\x6C\x63\x75\x6C\x61\x74\x65\x64\x20\x69\x66"
+"\x20\x74\x68\x65\x20\x66\x69\x6C\x65\x20\x61\x64\x64\x65\x64\x20\x62\x79\x20\x28\x77\x65\x62\x5F\x63\x6C"
+"\x69\x65\x6E\x74\x5F\x61\x64\x64\x66\x69\x6C\x65\x29\x20\x63\x68\x61\x6E\x67\x65\x73\x20\x74\x68\x65\x20"
+"\x73\x69\x7A\x65\x20\x6F\x66\x20\x63\x6F\x6E\x74\x65\x6E\x74\x73\x2C\x20\x62\x65\x74\x77\x65\x65\x6E\x20"
+"\x63\x61\x6C\x63\x75\x6C\x61\x74\x69\x6E\x67\x20\x61\x6E\x64\x20\x6F\x75\x74\x70\x75\x74\x3C\x42\x52\x3E"
+"\xA\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x52\x45\x54\x55\x52\x4E\x20\x56\x41\x4C\x55\x45\x3C\x2F\x42\x3E"
+"\xA\x3C\x55\x4C\x3E\x4F\x6E\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x31\x20\x69\x73\x20\x72\x65\x74\x75"
+"\x72\x6E\x65\x64\x2C\x20\x4F\x6E\x20\x65\x72\x72\x6F\x72\x2C\x20\x30\x20\x69\x73\x20\x72\x65\x74\x75\x72"
+"\x6E\x65\x64\x3C\x2F\x55\x4C\x3E\xA\x3C\x48\x52\x3E\x3C\x42\x52\x3E\xA\xA\x3C\x41\x20\x6E\x61\x6D\x65"
+"\x3D\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x6C\x69\x61\x73\x64\x69\x72\x3E\x3C\x42\x3E\x3C\x66"
+"\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37\x37\x27\x3E\x77\x65\x62\x5F\x73\x65\x72"
+"\x76\x65\x72\x5F\x61\x6C\x69\x61\x73\x64\x69\x72\x28\x29\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\x3C"
+"\x42\x52\x3E\x3C\x42\x52\x3E\xA\x3C\x42\x3E\x4E\x41\x4D\x45\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x77\x65"
+"\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x6C\x69\x61\x73\x64\x69\x72\x20\x2D\x20\x47\x65\x6E\x65\x72\x61"
+"\x74\x65\x73\x20\x61\x20\x64\x69\x72\x65\x63\x74\x6F\x72\x79\x20\x6C\x69\x73\x74\x2C\x20\x61\x6E\x64\x20"
+"\x75\x73\x65\x20\x66\x69\x6C\x65\x20\x62\x61\x73\x65\x64\x20\x73\x65\x72\x76\x65\x72\x3C\x2F\x55\x4C\x3E"
+"\xA\x3C\x42\x3E\x53\x59\x4E\x4F\x50\x53\x49\x53\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x23\x69\x6E\x63\x6C"
+"\x75\x64\x65\x20\x22\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x2E\x68\x22\x3C\x42\x52\x3E\x3C\x42\x52\x3E"
+"\x69\x6E\x74\x20\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x6C\x69\x61\x73\x64\x69\x72\x28\x73\x74"
+"\x72\x75\x63\x74\x20\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x20\x2A\x3C\x55\x3E\x73\x65\x72\x76\x65\x72"
+"\x3C\x2F\x55\x3E\x2C\x20\x63\x6F\x6E\x73\x74\x20\x63\x68\x61\x72\x20\x2A\x3C\x55\x3E\x61\x6C\x69\x61\x73"
+"\x3C\x2F\x55\x3E\x2C\x20\x63\x68\x61\x72\x20\x2A\x3C\x55\x3E\x70\x61\x74\x68\x3C\x2F\x55\x3E\x2C\x20\x69"
+"\x6E\x74\x20\x3C\x55\x3E\x66\x6C\x61\x67\x73\x3C\x2F\x55\x3E\x29\x3B\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E"
+"\x44\x45\x53\x43\x52\x49\x50\x54\x49\x4F\x4E\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x54\x68\x65\x20\x77\x65"
+"\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x6C\x69\x61\x73\x64\x69\x72\x28\x29\x20\x66\x75\x6E\x63\x74\x69"
+"\x6F\x6E\x20\x61\x64\x64\x73\x20\x61\x6E\x20\x61\x6C\x69\x61\x73\x20\x3C\x55\x3E\x61\x6C\x69\x61\x73\x3C"
+"\x2F\x55\x3E\x20\x74\x6F\x20\x74\x68\x65\x20\x73\x65\x72\x76\x65\x72\x20\x68\x61\x6E\x64\x6C\x65\x72\x20"
+"\x3C\x55\x3E\x73\x65\x72\x76\x65\x72\x3C\x2F\x55\x3E\x20\x61\x6E\x64\x20\x75\x73\x65\x20\x66\x69\x6C\x65"
+"\x73\x20\x66\x72\x6F\x6D\x20\x3C\x55\x3E\x70\x61\x74\x68\x3C\x2F\x55\x3E\x2E\x3C\x42\x52\x3E\xA\x3C\x55"
+"\x3E\x66\x6C\x61\x67\x73\x3A\x3C\x2F\x55\x3E\x20\x3C\x42\x52\x3E\xA\x57\x53\x5F\x4C\x4F\x43\x41\x4C\x20"
+"\x2D\x20\x6F\x6E\x6C\x79\x20\x6C\x6F\x63\x61\x6C\x20\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x73\x20\x61"
+"\x72\x65\x20\x68\x61\x6E\x64\x6C\x65\x64\x3C\x42\x52\x3E\xA\x57\x53\x5F\x44\x59\x4E\x56\x41\x52\x20\x2D"
+"\x20\x74\x72\x65\x61\x74\x20\x64\x79\x6E\x61\x6D\x69\x63\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x73\x20\x6F"
+"\x6E\x20\x6F\x75\x74\x70\x75\x74\x20\x28\x41\x74\x65\x6E\x74\x69\x6F\x6E\x3A\x20\x74\x68\x69\x73\x20\x64"
+"\x69\x73\x61\x62\x6C\x65\x73\x20\x22\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x72\x61\x6E\x67\x65\x22\x20\x61\x6E"
+"\x64\x20\x22\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x6C\x65\x6E\x67\x74\x68\x22\x20\x68\x65\x61\x64\x65\x72\x2C"
+"\x20\x72\x65\x73\x70\x6F\x6E\x64\x69\x6E\x67\x20\x22\x35\x30\x31\x20\x6E\x6F\x74\x20\x69\x6D\x70\x6C\x65"
+"\x6D\x65\x6E\x74\x65\x64\x22\x29\x3C\x42\x52\x3E\xA\x57\x53\x5F\x55\x53\x45\x4C\x45\x4E\x20\x2D\x20\x57"
+"\x69\x74\x68\x20\x74\x68\x69\x73\x20\x66\x6C\x61\x67\x2C\x20\x6C\x69\x62\x72\x61\x72\x79\x20\x63\x61\x6C"
+"\x63\x75\x6C\x61\x74\x65\x20\x74\x68\x65\x20\x68\x65\x61\x64\x65\x72\x20\x22\x43\x6F\x6E\x74\x65\x6E\x74"
+"\x2D\x6C\x65\x6E\x67\x74\x68\x22\x20\x61\x6E\x64\x20\x22\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x72\x61\x6E\x67"
+"\x65\x22\x20\x69\x74\x20\x73\x65\x6C\x66\x2C\x20\x75\x73\x65\x66\x75\x6C\x20\x66\x6F\x72\x20\x72\x65\x73"
+"\x75\x6D\x69\x6E\x67\x2C\x20\x63\x6F\x6E\x74\x65\x6E\x74\x2D\x6C\x65\x6E\x67\x74\x68\x20\x63\x61\x6E\x20"
+"\x62\x65\x20\x6D\x69\x73\x63\x61\x6C\x63\x75\x6C\x61\x74\x65\x64\x20\x69\x66\x20\x74\x68\x65\x20\x66\x69"
+"\x6C\x65\x20\x61\x64\x64\x65\x64\x20\x62\x79\x20\x28\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x61\x64"
+"\x64\x66\x69\x6C\x65\x29\x20\x63\x68\x61\x6E\x67\x65\x73\x20\x74\x68\x65\x20\x73\x69\x7A\x65\x20\x6F\x66"
+"\x20\x63\x6F\x6E\x74\x65\x6E\x74\x73\x2C\x20\x62\x65\x74\x77\x65\x65\x6E\x20\x63\x61\x6C\x63\x75\x6C\x61"
+"\x74\x69\x6E\x67\x20\x61\x6E\x64\x20\x6F\x75\x74\x70\x75\x74\x3C\x42\x52\x3E\xA\x3C\x2F\x55\x4C\x3E\xA"
+"\x3C\x42\x3E\x52\x45\x54\x55\x52\x4E\x20\x56\x41\x4C\x55\x45\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x4F\x6E"
+"\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x31\x20\x69\x73\x20\x72\x65\x74\x75\x72\x6E\x65\x64\x2C\x20\x4F"
+"\x6E\x20\x65\x72\x72\x6F\x72\x2C\x20\x30\x20\x69\x73\x20\x72\x65\x74\x75\x72\x6E\x65\x64\x3C\x2F\x55\x4C"
+"\x3E\xA\x3C\x48\x52\x3E\x3C\x42\x52\x3E\xA\xA\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x77\x65\x62\x5F\x73\x65"
+"\x72\x76\x65\x72\x5F\x72\x75\x6E\x3E\x3C\x42\x3E\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30"
+"\x30\x30\x30\x37\x37\x27\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x72\x75\x6E\x28\x29\x3C\x2F\x66"
+"\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\x3C\x42\x52\x3E\x3C\x42\x52\x3E\xA\x3C\x42\x3E\x4E\x41\x4D\x45\x3C\x2F"
+"\x42\x3E\xA\x3C\x55\x4C\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x72\x75\x6E\x20\x2D\x20\x72\x75"
+"\x6E\x20\x74\x68\x65\x20\x73\x65\x72\x76\x65\x72\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x53\x59\x4E\x4F\x50"
+"\x53\x49\x53\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x23\x69\x6E\x63\x6C\x75\x64\x65\x20\x22\x77\x65\x62\x5F"
+"\x73\x65\x72\x76\x65\x72\x2E\x68\x22\x3C\x42\x52\x3E\x3C\x42\x52\x3E\x69\x6E\x74\x20\x77\x65\x62\x5F\x73"
+"\x65\x72\x76\x65\x72\x5F\x72\x75\x6E\x28\x73\x74\x72\x75\x63\x74\x20\x77\x65\x62\x5F\x73\x65\x72\x76\x65"
+"\x72\x20\x2A\x3C\x55\x3E\x73\x65\x72\x76\x65\x72\x3C\x2F\x55\x3E\x29\x3B\x3C\x2F\x55\x4C\x3E\xA\x3C\x42"
+"\x3E\x44\x45\x53\x43\x52\x49\x50\x54\x49\x4F\x4E\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x54\x68\x65\x20\x77"
+"\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x72\x75\x6E\x28\x29\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x70"
+"\x72\x6F\x63\x65\x73\x73\x65\x73\x20\x72\x65\x71\x75\x65\x73\x74\x73\x20\x74\x6F\x20\x74\x68\x65\x20\x73"
+"\x65\x72\x76\x65\x72\x20\x3C\x55\x3E\x73\x65\x72\x76\x65\x72\x3C\x2F\x55\x3E\x2E\x20\x54\x68\x69\x73\x20"
+"\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x6D\x75\x73\x74\x20\x62\x65\x20\x63\x61\x6C\x6C\x65\x64\x20\x66\x72"
+"\x6F\x6D\x20\x74\x68\x65\x20\x6D\x61\x69\x6E\x20\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x20\x6C\x6F"
+"\x6F\x70\x20\x28\x74\x68\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x20\x64\x6F\x65\x73\x6E\x27\x74\x20"
+"\x6C\x6F\x6F\x70\x20\x69\x74\x20\x73\x65\x6C\x66\x29\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x52\x45\x54\x55"
+"\x52\x4E\x20\x56\x41\x4C\x55\x45\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x4F\x6E\x20\x73\x75\x63\x63\x65\x73"
+"\x73\x2C\x20\x67\x72\x65\x61\x74\x65\x72\x20\x74\x68\x61\x6E\x20\x30\x2C\x20\x69\x73\x20\x72\x65\x74\x75"
+"\x72\x6E\x65\x64\x20\x28\x32\x20\x69\x66\x20\x74\x68\x65\x72\x65\x20\x77\x61\x73\x6E\x27\x74\x20\x63\x6C"
+"\x69\x65\x6E\x74\x2C\x20\x31\x20\x69\x66\x20\x73\x6F\x6D\x65\x20\x72\x65\x71\x75\x65\x73\x74\x20\x77\x61"
+"\x73\x20\x70\x72\x6F\x63\x65\x73\x73\x65\x64\x29\x2C\x20\x4F\x6E\x20\x65\x72\x72\x6F\x72\x2C\x20\x30\x20"
+"\x69\x73\x20\x72\x65\x74\x75\x72\x6E\x65\x64\x3C\x2F\x55\x4C\x3E\xA\x3C\x48\x52\x3E\x3C\x42\x52\x3E\xA"
+"\xA\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x67\x65\x74\x63\x6F\x6E"
+"\x66\x3E\x3C\x42\x3E\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37\x37\x27\x3E"
+"\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x67\x65\x74\x63\x6F\x6E\x66\x28\x29\x3C\x2F\x66\x6F\x6E\x74"
+"\x3E\x3C\x2F\x42\x3E\x3C\x42\x52\x3E\x3C\x42\x52\x3E\xA\x3C\x42\x3E\x4E\x41\x4D\x45\x3C\x2F\x42\x3E\xA"
+"\x3C\x55\x4C\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x67\x65\x74\x63\x6F\x6E\x66\x20\x2D\x20\x67"
+"\x65\x74\x20\x64\x61\x74\x61\x20\x66\x72\x6F\x6D\x20\x63\x6F\x6E\x66\x69\x67\x20\x66\x69\x6C\x65\x72\x3C"
+"\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x53\x59\x4E\x4F\x50\x53\x49\x53\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x23"
+"\x69\x6E\x63\x6C\x75\x64\x65\x20\x22\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x2E\x68\x22\x3C\x42\x52\x3E"
+"\x3C\x42\x52\x3E\x63\x68\x61\x72\x20\x2A\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x67\x65\x74\x63\x6F"
+"\x6E\x66\x28\x73\x74\x72\x75\x63\x74\x20\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x20\x2A\x3C\x55\x3E\x73"
+"\x65\x72\x76\x65\x72\x3C\x2F\x55\x3E\x2C\x63\x68\x61\x72\x20\x2A\x3C\x55\x3E\x74\x6F\x70\x69\x63\x3C\x2F"
+"\x55\x3E\x2C\x63\x68\x61\x72\x20\x2A\x3C\x55\x3E\x6B\x65\x79\x3C\x2F\x55\x3E\x29\x3B\x3C\x2F\x55\x4C\x3E"
+"\xA\x3C\x42\x3E\x44\x45\x53\x43\x52\x49\x50\x54\x49\x4F\x4E\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x54\x68"
+"\x65\x20\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x67\x65\x74\x63\x6F\x6E\x66\x28\x29\x20\x66\x75\x6E"
+"\x63\x74\x69\x6F\x6E\x20\x61\x6C\x6C\x6F\x63\x61\x74\x65\x73\x20\x61\x6E\x64\x20\x72\x65\x74\x75\x72\x6E"
+"\x20\x61\x20\x73\x74\x72\x69\x6E\x67\x20\x66\x72\x6F\x6D\x20\x63\x6F\x6E\x66\x69\x67\x20\x66\x69\x6C\x65"
+"\x20\x72\x65\x6C\x61\x74\x65\x64\x20\x74\x6F\x20\x3C\x55\x3E\x74\x6F\x70\x69\x63\x3C\x2F\x55\x3E\x20\x61"
+"\x6E\x64\x20\x3C\x55\x3E\x6B\x65\x79\x3C\x2F\x55\x3E\x20\x28\x73\x65\x65\x20\x3C\x61\x20\x68\x72\x65\x66"
+"\x3D\x22\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x63\x6F\x6E\x66\x69\x67\x66"
+"\x69\x6C\x65\x22\x3E\x63\x6F\x6E\x66\x69\x67\x20\x66\x69\x6C\x65\x20\x68\x65\x6C\x70\x3C\x2F\x61\x3E\x29"
+"\x20\x54\x68\x69\x73\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x6D\x75\x73\x74\x20\x62\x65\x20\x63\x61\x6C"
+"\x6C\x65\x64\x20\x61\x66\x74\x65\x72\x20\x74\x68\x65\x20\x69\x6E\x69\x74\x20\x6F\x66\x20\x74\x68\x65\x20"
+"\x76\x61\x72\x20\x3C\x55\x3E\x73\x65\x72\x76\x65\x72\x3C\x2F\x55\x3E\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E"
+"\x52\x45\x54\x55\x52\x4E\x20\x56\x41\x4C\x55\x45\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x72\x65\x74\x75\x72"
+"\x6E\x73\x20\x61\x6C\x6C\x6F\x63\x61\x74\x65\x64\x20\x73\x74\x72\x69\x6E\x67\x2C\x20\x28\x79\x6F\x75\x20"
+"\x73\x68\x6F\x75\x6C\x64\x20\x66\x72\x65\x65\x20\x61\x66\x74\x65\x72\x20\x75\x73\x65\x29\x20\x6F\x72\x20"
+"\x6E\x75\x6C\x6C\x20\x69\x66\x20\x6E\x6F\x74\x68\x69\x6E\x67\x20\x72\x65\x6C\x61\x74\x65\x64\x20\x74\x6F"
+"\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x73\x20\x66\x6F\x75\x6E\x64\x3C\x2F\x55\x4C\x3E\xA\x3C\x48\x52\x3E"
+"\x3C\x42\x52\x3E\xA\xA\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x75"
+"\x73\x65\x53\x53\x4C\x63\x65\x72\x74\x3E\x3C\x42\x3E\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27"
+"\x30\x30\x30\x30\x37\x37\x27\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x75\x73\x65\x53\x53\x4C\x63"
+"\x65\x72\x74\x28\x29\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\x3C\x42\x52\x3E\x3C\x42\x52\x3E\xA\x3C"
+"\x42\x3E\x4E\x41\x4D\x45\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F"
+"\x75\x73\x65\x53\x53\x4C\x63\x65\x72\x74\x20\x2D\x20\x75\x73\x65\x20\x63\x65\x72\x74\x69\x66\x69\x63\x61"
+"\x74\x65\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x53\x59\x4E\x4F\x50\x53\x49\x53\x3C\x2F\x42\x3E\xA\x3C\x55"
+"\x4C\x3E\x23\x69\x6E\x63\x6C\x75\x64\x65\x20\x22\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x2E\x68\x22\x3C"
+"\x42\x52\x3E\x3C\x42\x52\x3E\x76\x6F\x69\x64\x20\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x75\x73\x65"
+"\x53\x53\x4C\x63\x65\x72\x74\x28\x73\x74\x72\x75\x63\x74\x20\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x20"
+"\x2A\x3C\x55\x3E\x73\x65\x72\x76\x65\x72\x3C\x2F\x55\x3E\x2C\x20\x63\x6F\x6E\x73\x74\x20\x63\x68\x61\x72"
+"\x20\x2A\x3C\x55\x3E\x66\x69\x6C\x65\x3C\x2F\x55\x3E\x29\x3B\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x44\x45"
+"\x53\x43\x52\x49\x50\x54\x49\x4F\x4E\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x54\x68\x65\x20\x77\x65\x62\x5F"
+"\x73\x65\x72\x76\x65\x72\x5F\x75\x73\x65\x53\x53\x4C\x63\x65\x72\x74\x28\x29\x20\x66\x75\x6E\x63\x74\x69"
+"\x6F\x6E\x20\x74\x65\x6C\x6C\x73\x20\x73\x65\x72\x76\x65\x72\x20\x3C\x55\x3E\x73\x65\x72\x76\x65\x72\x3C"
+"\x2F\x55\x3E\x20\x74\x6F\x20\x75\x73\x65\x20\x63\x65\x72\x74\x69\x66\x69\x63\x61\x74\x65\x20\x66\x69\x6C"
+"\x65\x20\x3C\x55\x3E\x66\x69\x6C\x65\x3C\x2F\x55\x3E\x20\x6F\x6E\x20\x73\x73\x6C\x20\x63\x6F\x6E\x6E\x65"
+"\x63\x74\x69\x6F\x6E\x73\x20\x28\x69\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x65\x64\x20\x77\x2F\x20\x66"
+"\x6C\x61\x67\x20\x57\x53\x5F\x55\x53\x45\x53\x53\x4C\x29\x3C\x2F\x55\x4C\x3E\xA\x3C\x48\x52\x3E\x3C\x42"
+"\x52\x3E\xA\xA\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x75\x73\x65"
+"\x4D\x49\x4D\x45\x66\x69\x6C\x65\x3E\x3C\x42\x3E\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30"
+"\x30\x30\x30\x37\x37\x27\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x75\x73\x65\x4D\x49\x4D\x45\x66"
+"\x69\x6C\x65\x28\x29\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\x3C\x42\x52\x3E\x3C\x42\x52\x3E\xA\x3C"
+"\x42\x3E\x4E\x41\x4D\x45\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F"
+"\x75\x73\x65\x4D\x49\x4D\x45\x66\x69\x6C\x65\x20\x2D\x20\x75\x73\x65\x20\x6D\x69\x6D\x65\x20\x74\x79\x70"
+"\x65\x73\x20\x66\x69\x6C\x65\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x53\x59\x4E\x4F\x50\x53\x49\x53\x3C\x2F"
+"\x42\x3E\xA\x3C\x55\x4C\x3E\x23\x69\x6E\x63\x6C\x75\x64\x65\x20\x22\x77\x65\x62\x5F\x73\x65\x72\x76\x65"
+"\x72\x2E\x68\x22\x3C\x42\x52\x3E\x3C\x42\x52\x3E\x76\x6F\x69\x64\x20\x77\x65\x62\x5F\x73\x65\x72\x76\x65"
+"\x72\x5F\x75\x73\x65\x4D\x49\x4D\x45\x66\x69\x6C\x65\x28\x73\x74\x72\x75\x63\x74\x20\x77\x65\x62\x5F\x73"
+"\x65\x72\x76\x65\x72\x20\x2A\x3C\x55\x3E\x73\x65\x72\x76\x65\x72\x3C\x2F\x55\x3E\x2C\x20\x63\x6F\x6E\x73"
+"\x74\x20\x63\x68\x61\x72\x20\x2A\x3C\x55\x3E\x66\x69\x6C\x65\x3C\x2F\x55\x3E\x29\x3B\x3C\x2F\x55\x4C\x3E"
+"\xA\x3C\x42\x3E\x44\x45\x53\x43\x52\x49\x50\x54\x49\x4F\x4E\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x54\x68"
+"\x65\x20\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x75\x73\x65\x4D\x49\x4D\x45\x66\x69\x6C\x65\x28\x29"
+"\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x65\x6C\x6C\x73\x20\x73\x65\x72\x76\x65\x72\x20\x3C\x55\x3E"
+"\x73\x65\x72\x76\x65\x72\x3C\x2F\x55\x3E\x20\x74\x6F\x20\x75\x73\x65\x20\x6D\x69\x6D\x65\x73\x20\x74\x79"
+"\x70\x65\x20\x66\x69\x6C\x65\x20\x3C\x55\x3E\x66\x69\x6C\x65\x3C\x2F\x55\x3E\x20\x66\x6F\x72\x20\x64\x65"
+"\x74\x65\x72\x6D\x69\x6E\x69\x6E\x67\x20\x6D\x69\x6D\x65\x20\x74\x79\x70\x65\x20\x62\x79\x20\x65\x78\x74"
+"\x65\x6E\x73\x69\x6F\x6E\x20\x75\x73\x65\x64\x20\x62\x79\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x3C\x61"
+"\x20\x68\x72\x65\x66\x3D\x22\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65"
+"\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x63\x6F\x6E\x74\x65\x6E\x74\x74\x79\x70\x65\x22\x3E\x77\x65\x62\x5F"
+"\x63\x6C\x69\x65\x6E\x74\x5F\x63\x6F\x6E\x74\x65\x6E\x74\x74\x79\x70\x65\x28\x29\x3C\x2F\x61\x3E\x3C\x2F"
+"\x55\x4C\x3E\xA\x3C\x48\x52\x3E\x3C\x42\x52\x3E\xA\xA\xA\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x77\x65\x62"
+"\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x61\x64\x64\x73\x74\x72\x65\x61\x6D\x3E\x3C\x42\x3E\x3C\x66\x6F\x6E\x74"
+"\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37\x37\x27\x3E\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74"
+"\x5F\x61\x64\x64\x73\x74\x72\x65\x61\x6D\x28\x29\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\x3C\x42\x52"
+"\x3E\x3C\x42\x52\x3E\xA\x3C\x42\x3E\x4E\x41\x4D\x45\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x77\x65\x62\x5F"
+"\x63\x6C\x69\x65\x6E\x74\x5F\x61\x64\x64\x73\x74\x72\x65\x61\x6D\x20\x2D\x20\x61\x64\x64\x20\x61\x6E\x20"
+"\x6F\x75\x74\x70\x75\x74\x20\x73\x74\x72\x65\x61\x6D\x20\x74\x6F\x20\x74\x68\x65\x20\x63\x6C\x69\x65\x6E"
+"\x74\x20\x73\x74\x72\x75\x63\x74\x20\x6F\x6E\x20\x77\x65\x62\x73\x65\x72\x76\x65\x72\x3C\x2F\x55\x4C\x3E"
+"\xA\x3C\x42\x3E\x53\x59\x4E\x4F\x50\x53\x49\x53\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x23\x69\x6E\x63\x6C"
+"\x75\x64\x65\x20\x22\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x2E\x68\x22\x3C\x42\x52\x3E\x3C\x42\x52\x3E"
+"\x69\x6E\x74\x20\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x61\x64\x64\x73\x74\x72\x65\x61\x6D\x28\x46"
+"\x49\x4C\x45\x20\x2A\x3C\x55\x3E\x73\x74\x72\x65\x61\x6D\x3C\x2F\x55\x3E\x29\x3B\x3C\x2F\x55\x4C\x3E\xA"
+"\x3C\x42\x3E\x44\x45\x53\x43\x52\x49\x50\x54\x49\x4F\x4E\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x54\x68\x65"
+"\x20\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x61\x64\x64\x73\x74\x72\x65\x61\x6D\x28\x29\x20\x66\x75"
+"\x6E\x63\x74\x69\x6F\x6E\x20\x61\x64\x64\x73\x20\x74\x68\x65\x20\x73\x74\x72\x65\x61\x6D\x20\x3C\x55\x3E"
+"\x73\x74\x72\x65\x61\x6D\x3C\x2F\x55\x3E\x20\x74\x6F\x20\x74\x68\x65\x20\x6F\x75\x74\x70\x75\x74\x20\x73"
+"\x74\x72\x65\x61\x6D\x20\x6C\x69\x73\x74\x20\x69\x6E\x20\x74\x68\x65\x20\x63\x75\x72\x72\x65\x6E\x74\x20"
+"\x63\x6C\x69\x65\x6E\x74\x20\x6E\x6F\x64\x65\x3C\x2F\x55\x4C\x3E\xA\x20\x3C\x42\x3E\x4E\x4F\x54\x45\x3C"
+"\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x54\x68\x65\x20\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x61\x64\x64"
+"\x73\x74\x72\x65\x61\x6D\x28\x29\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x63\x61\x6E\x20\x3C\x42\x3E\x6F"
+"\x6E\x6C\x79\x3C\x2F\x42\x3E\x20\x62\x65\x20\x63\x61\x6C\x6C\x65\x64\x20\x66\x72\x6F\x6D\x20\x66\x75\x6E"
+"\x63\x74\x69\x6F\x6E\x73\x20\x63\x61\x6C\x6C\x65\x64\x20\x62\x79\x20\x67\x65\x74\x68\x61\x6E\x64\x6C\x65"
+"\x72\x73\x20\x72\x65\x67\x69\x73\x74\x65\x72\x65\x64\x20\x62\x79\x20\x3C\x61\x20\x68\x72\x65\x66\x3D\x27"
+"\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x73\x65\x72\x76\x65"
+"\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x27\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61"
+"\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x28\x29\x3C\x2F\x61\x3E\x2E\x3C\x2F\x55\x4C\x3E\xA\x3C\x55\x4C\x3E"
+"\x54\x68\x65\x20\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x61\x64\x64\x73\x74\x72\x65\x61\x6D\x28\x29"
+"\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x69\x73\x20\x6F\x62\x73\x6F\x6C\x65\x74\x65\x20\x61\x6E\x64\x20"
+"\x6E\x6F\x20\x6C\x6F\x6E\x67\x65\x72\x20\x69\x6E\x20\x75\x73\x65\x20\x6F\x6E\x20\x30\x2E\x33\x2E\x34\x20"
+"\x76\x65\x72\x73\x69\x6F\x6E\x73\x2C\x20\x75\x73\x65\x20\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x61"
+"\x64\x64\x66\x69\x6C\x65\x20\x69\x6E\x73\x74\x65\x61\x64\x3C\x2F\x75\x6C\x3E\xA\x3C\x42\x3E\x52\x45\x54"
+"\x55\x52\x4E\x20\x56\x41\x4C\x55\x45\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x4F\x6E\x20\x73\x75\x63\x63\x65"
+"\x73\x73\x2C\x20\x31\x20\x69\x73\x20\x72\x65\x74\x75\x72\x6E\x65\x64\x2C\x20\x4F\x6E\x20\x65\x72\x72\x6F"
+"\x72\x2C\x20\x30\x20\x69\x73\x20\x72\x65\x74\x75\x72\x6E\x65\x64\x3C\x2F\x55\x4C\x3E\xA\x3C\x48\x52\x3E"
+"\x3C\x42\x52\x3E\xA\xA\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x61"
+"\x64\x64\x66\x69\x6C\x65\x3E\x3C\x42\x3E\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30"
+"\x30\x37\x37\x27\x3E\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x61\x64\x64\x66\x69\x6C\x65\x28\x29\x3C"
+"\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\x3C\x42\x52\x3E\x3C\x42\x52\x3E\xA\x3C\x42\x3E\x4E\x41\x4D\x45"
+"\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x61\x64\x64\x66\x69\x6C"
+"\x65\x20\x2D\x20\x61\x64\x64\x20\x61\x20\x66\x69\x6C\x65\x20\x74\x6F\x20\x74\x68\x65\x20\x6F\x75\x74\x70"
+"\x75\x74\x20\x73\x74\x72\x65\x61\x6D\x20\x6F\x66\x20\x74\x68\x65\x20\x63\x6C\x69\x65\x6E\x74\x20\x73\x74"
+"\x72\x75\x63\x74\x20\x6F\x6E\x20\x74\x68\x65\x20\x77\x65\x62\x73\x65\x72\x76\x65\x72\x3C\x2F\x55\x4C\x3E"
+"\xA\x3C\x42\x3E\x53\x59\x4E\x4F\x50\x53\x49\x53\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x23\x69\x6E\x63\x6C"
+"\x75\x64\x65\x20\x22\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x2E\x68\x22\x3C\x42\x52\x3E\x3C\x42\x52\x3E"
+"\x69\x6E\x74\x20\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x61\x64\x64\x66\x69\x6C\x65\x28\x63\x6F\x6E"
+"\x73\x74\x20\x63\x68\x61\x72\x20\x2A\x3C\x55\x3E\x66\x69\x6C\x65\x3C\x2F\x55\x3E\x29\x3B\x3C\x2F\x55\x4C"
+"\x3E\xA\x3C\x42\x3E\x44\x45\x53\x43\x52\x49\x50\x54\x49\x4F\x4E\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x54"
+"\x68\x65\x20\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x61\x64\x64\x66\x69\x6C\x65\x28\x29\x20\x66\x75"
+"\x6E\x63\x74\x69\x6F\x6E\x20\x6F\x70\x65\x6E\x73\x20\x74\x68\x65\x20\x66\x69\x6C\x65\x20\x3C\x55\x3E\x66"
+"\x69\x6C\x65\x3C\x2F\x55\x3E\x20\x61\x6E\x64\x20\x61\x64\x64\x73\x20\x69\x74\x20\x61\x73\x20\x73\x74\x72"
+"\x65\x61\x6D\x20\x74\x6F\x20\x74\x68\x65\x20\x6F\x75\x74\x70\x75\x74\x20\x73\x74\x72\x65\x61\x6D\x20\x6C"
+"\x69\x73\x74\x20\x69\x6E\x20\x74\x68\x65\x20\x63\x75\x72\x72\x65\x6E\x74\x20\x63\x6C\x69\x65\x6E\x74\x20"
+"\x6E\x6F\x64\x65\x3C\x2F\x55\x4C\x3E\xA\x20\x3C\x42\x3E\x4E\x4F\x54\x45\x3C\x2F\x42\x3E\xA\x3C\x55\x4C"
+"\x3E\x54\x68\x65\x20\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x61\x64\x64\x66\x69\x6C\x65\x28\x29\x20"
+"\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x63\x61\x6E\x20\x62\x65\x20\x63\x61\x6C\x6C\x65\x64\x20\x3C\x42\x3E"
+"\x6F\x6E\x6C\x79\x3C\x2F\x42\x3E\x20\x66\x72\x6F\x6D\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x20\x63\x61"
+"\x6C\x6C\x65\x64\x20\x62\x79\x20\x67\x65\x74\x68\x61\x6E\x64\x6C\x65\x72\x73\x20\x72\x65\x67\x69\x73\x74"
+"\x65\x72\x65\x64\x20\x76\x69\x61\x20\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66"
+"\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E"
+"\x64\x6C\x65\x72\x27\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65"
+"\x72\x28\x29\x3C\x2F\x61\x3E\x2E\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x52\x45\x54\x55\x52\x4E\x20\x56\x41"
+"\x4C\x55\x45\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x4F\x6E\x20\x53\x75\x63\x63\x65\x73\x73\x2C\x20\x31\x20"
+"\x69\x73\x20\x72\x65\x74\x75\x72\x6E\x65\x64\x2C\x20\x4F\x6E\x20\x65\x72\x72\x6F\x72\x2C\x20\x30\x20\x69"
+"\x73\x20\x72\x65\x74\x75\x72\x6E\x65\x64\x3C\x2F\x55\x4C\x3E\xA\x3C\x48\x52\x3E\x3C\x42\x52\x3E\xA\xA"
+"\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x67\x69\x66\x6F\x75\x74\x70"
+"\x75\x74\x3E\x3C\x42\x3E\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37\x37\x27"
+"\x3E\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x67\x69\x66\x6F\x75\x74\x70\x75\x74\x28\x29\x3C\x2F\x66"
+"\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\x3C\x42\x52\x3E\x3C\x42\x52\x3E\xA\x3C\x42\x3E\x4E\x41\x4D\x45\x3C\x2F"
+"\x42\x3E\xA\x3C\x55\x4C\x3E\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x67\x69\x66\x6F\x75\x74\x70\x75"
+"\x74\x20\x2D\x20\x65\x78\x70\x6F\x72\x74\x20\x64\x61\x74\x61\x20\x61\x73\x20\x67\x69\x66\x3C\x2F\x55\x4C"
+"\x3E\xA\x3C\x42\x3E\x53\x59\x4E\x4F\x50\x53\x49\x53\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x23\x69\x6E\x63"
+"\x6C\x75\x64\x65\x20\x22\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x2E\x68\x22\x3C\x42\x52\x3E\x3C\x42\x52"
+"\x3E\x69\x6E\x74\x20\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x67\x69\x66\x6F\x75\x74\x70\x75\x74\x28"
+"\x63\x68\x61\x72\x20\x2A\x3C\x55\x3E\x64\x61\x74\x61\x3C\x2F\x55\x3E\x2C\x69\x6E\x74\x20\x3C\x55\x3E\x77"
+"\x3C\x2F\x55\x3E\x2C\x69\x6E\x74\x20\x3C\x55\x3E\x68\x3C\x2F\x75\x3E\x29\x3B\x3C\x2F\x55\x4C\x3E\xA\x3C"
+"\x42\x3E\x44\x45\x53\x43\x52\x49\x50\x54\x49\x4F\x4E\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x54\x68\x65\x20"
+"\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x67\x69\x66\x6F\x75\x74\x70\x75\x74\x28\x29\x20\x66\x75\x6E"
+"\x63\x74\x69\x6F\x6E\x20\x70\x72\x69\x6E\x74\x73\x20\x74\x6F\x20\x73\x74\x64\x6F\x75\x74\x20\x61\x20\x67"
+"\x69\x66\x20\x68\x65\x61\x64\x65\x72\x20\x28\x77\x69\x74\x68\x20\x77\x69\x64\x74\x68\x20\x3C\x55\x3E\x77"
+"\x3C\x2F\x55\x3E\x20\x61\x6E\x64\x20\x68\x65\x69\x67\x68\x74\x20\x3C\x55\x3E\x68\x3C\x2F\x55\x3E\x29\x20"
+"\x61\x6E\x64\x20\x74\x68\x65\x20\x69\x6D\x61\x67\x65\x20\x70\x6F\x69\x6E\x74\x65\x64\x20\x62\x79\x20\x3C"
+"\x55\x3E\x64\x61\x74\x61\x3C\x2F\x55\x3E\x2E\x3C\x42\x52\x3E\xA\x54\x68\x65\x20\x61\x6C\x6C\x6F\x63\x61"
+"\x74\x65\x64\x20\x6D\x65\x6D\x6F\x72\x79\x20\x3C\x55\x3E\x64\x61\x74\x61\x3C\x2F\x55\x3E\x20\x70\x6F\x69"
+"\x6E\x74\x73\x20\x74\x6F\x20\x6D\x75\x73\x74\x6E\x27\x74\x20\x62\x65\x20\x73\x6D\x61\x6C\x6C\x65\x72\x20"
+"\x74\x68\x61\x6E\x20\x3C\x55\x3E\x77\x3C\x2F\x55\x3E\x2A\x3C\x55\x3E\x68\x3C\x2F\x55\x3E\x2E\x3C\x42\x52"
+"\x3E\xA\x54\x68\x65\x20\x67\x69\x66\x20\x70\x61\x6C\x65\x74\x74\x65\x20\x69\x73\x20\x64\x65\x73\x63\x72"
+"\x69\x62\x65\x64\x20\x62\x79\x20\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75"
+"\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x67\x69\x66\x73\x65\x74\x70"
+"\x61\x6C\x65\x74\x74\x65\x27\x3E\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x67\x69\x66\x73\x65\x74\x70"
+"\x61\x6C\x65\x74\x74\x65\x3C\x2F\x61\x3E\xA\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x4E\x4F\x54\x45\x3C\x2F"
+"\x42\x3E\xA\x3C\x55\x4C\x3E\x54\x68\x65\x20\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x67\x69\x66\x6F"
+"\x75\x74\x70\x75\x74\x28\x29\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x63\x61\x6E\x20\x62\x65\x20\x63\x61"
+"\x6C\x6C\x65\x64\x20\x3C\x42\x3E\x6F\x6E\x6C\x79\x3C\x2F\x42\x3E\x20\x66\x72\x6F\x6D\x20\x66\x75\x6E\x63"
+"\x74\x69\x6F\x6E\x73\x20\x63\x61\x6C\x6C\x65\x64\x20\x62\x79\x20\x67\x65\x74\x68\x61\x6E\x64\x6C\x65\x72"
+"\x73\x20\x72\x65\x67\x69\x73\x74\x65\x72\x65\x64\x20\x76\x69\x61\x20\x3C\x61\x20\x68\x72\x65\x66\x3D\x27"
+"\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x73\x65\x72\x76\x65"
+"\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x27\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61"
+"\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x28\x29\x3C\x2F\x61\x3E\x2E\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x52"
+"\x45\x54\x55\x52\x4E\x20\x56\x41\x4C\x55\x45\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x4F\x6E\x20\x53\x75\x63"
+"\x63\x65\x73\x73\x2C\x20\x30\x20\x69\x73\x20\x72\x65\x74\x75\x72\x6E\x65\x64\x2C\x20\x4F\x6E\x20\x65\x72"
+"\x72\x6F\x72\x2C\x20\x6E\x6F\x6E\x20\x7A\x65\x72\x6F\x20\x69\x73\x20\x72\x65\x74\x75\x72\x6E\x65\x64\x2E"
+"\x3C\x2F\x55\x4C\x3E\xA\x3C\x48\x52\x3E\x3C\x42\x52\x3E\xA\xA\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x77\x65"
+"\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x67\x69\x66\x73\x65\x74\x70\x61\x6C\x65\x74\x74\x65\x3E\x3C\x42\x3E"
+"\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37\x37\x27\x3E\x77\x65\x62\x5F\x63"
+"\x6C\x69\x65\x6E\x74\x5F\x67\x69\x66\x73\x65\x74\x70\x61\x6C\x65\x74\x74\x65\x28\x29\x3C\x2F\x66\x6F\x6E"
+"\x74\x3E\x3C\x2F\x42\x3E\x3C\x42\x52\x3E\x3C\x42\x52\x3E\xA\x3C\x42\x3E\x4E\x41\x4D\x45\x3C\x2F\x42\x3E"
+"\xA\x3C\x55\x4C\x3E\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x67\x69\x66\x73\x65\x74\x70\x61\x6C\x65"
+"\x74\x74\x65\x20\x2D\x20\x53\x65\x74\x75\x70\x20\x74\x68\x65\x20\x67\x69\x66\x20\x70\x61\x6C\x65\x74\x74"
+"\x65\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x53\x59\x4E\x4F\x50\x53\x49\x53\x3C\x2F\x42\x3E\xA\x3C\x55\x4C"
+"\x3E\x23\x69\x6E\x63\x6C\x75\x64\x65\x20\x22\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x2E\x68\x22\x3C\x42"
+"\x52\x3E\x3C\x42\x52\x3E\x76\x6F\x69\x64\x20\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x67\x69\x66\x73"
+"\x65\x74\x70\x61\x6C\x65\x74\x74\x65\x28\x63\x68\x61\x72\x20\x2A\x3C\x55\x3E\x66\x69\x6C\x65\x3C\x2F\x55"
+"\x3E\x29\x3B\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x44\x45\x53\x43\x52\x49\x50\x54\x49\x4F\x4E\x3C\x2F\x42"
+"\x3E\xA\x3C\x55\x4C\x3E\x54\x68\x65\x20\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x67\x69\x66\x73\x65"
+"\x74\x70\x61\x6C\x65\x74\x74\x65\x28\x29\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x6C\x6F\x61\x64\x73\x20"
+"\x72\x61\x77\x20\x70\x61\x6C\x65\x74\x74\x65\x20\x28\x2E\x61\x63\x74\x29\x20\x66\x72\x6F\x6D\x20\x3C\x55"
+"\x3E\x66\x69\x6C\x65\x3C\x2F\x55\x3E\x20\x6F\x72\x20\x69\x66\x20\x3C\x55\x3E\x66\x69\x6C\x65\x3C\x2F\x55"
+"\x3E\x20\x69\x73\x20\x22\x45\x47\x41\x22\x20\x74\x68\x65\x6E\x20\x74\x68\x69\x73\x20\x66\x75\x6E\x63\x74"
+"\x69\x6F\x6E\x20\x73\x65\x74\x75\x70\x73\x20\x74\x68\x65\x20\x70\x61\x6C\x65\x74\x74\x65\x20\x74\x6F\x20"
+"\x45\x47\x41\x20\x6D\x6F\x64\x65\x3C\x42\x52\x3E\xA\x3C\x2F\x55\x4C\x3E\xA\x3C\x48\x52\x3E\x3C\x42\x52"
+"\x3E\xA\xA\xA\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x73\x65\x74"
+"\x63\x6F\x6F\x6B\x69\x65\x3E\x3C\x42\x3E\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30"
+"\x30\x37\x37\x27\x3E\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x73\x65\x74\x63\x6F\x6F\x6B\x69\x65\x28"
+"\x29\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\x3C\x42\x52\x3E\x3C\x42\x52\x3E\xA\x3C\x42\x3E\x4E\x41"
+"\x4D\x45\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x73\x65\x74\x63"
+"\x6F\x6F\x6B\x69\x65\x20\x2D\x20\x73\x65\x74\x20\x61\x20\x63\x6F\x6F\x6B\x69\x65\x3C\x2F\x55\x4C\x3E\xA"
+"\x3C\x42\x3E\x53\x59\x4E\x4F\x50\x53\x49\x53\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x23\x69\x6E\x63\x6C\x75"
+"\x64\x65\x20\x22\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x2E\x68\x22\x3C\x42\x52\x3E\x3C\x42\x52\x3E\x76"
+"\x6F\x69\x64\x20\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x73\x65\x74\x63\x6F\x6F\x6B\x69\x65\x28\x63"
+"\x68\x61\x72\x20\x2A\x3C\x55\x3E\x6B\x65\x79\x3C\x2F\x55\x3E\x2C\x20\x63\x68\x61\x72\x20\x2A\x3C\x55\x3E"
+"\x76\x61\x6C\x75\x65\x3C\x2F\x55\x3E\x2C\x20\x63\x68\x61\x72\x20\x2A\x3C\x55\x3E\x74\x69\x6D\x65\x6F\x66"
+"\x66\x73\x65\x74\x3C\x2F\x55\x3E\x2C\x20\x63\x68\x61\x72\x20\x2A\x3C\x55\x3E\x70\x61\x74\x68\x3C\x2F\x55"
+"\x3E\x2C\x63\x68\x61\x72\x20\x2A\x3C\x55\x3E\x64\x6F\x6D\x61\x69\x6E\x3C\x2F\x55\x3E\x2C\x69\x6E\x74\x20"
+"\x3C\x55\x3E\x73\x65\x63\x75\x72\x65\x3C\x2F\x55\x3E\x29\x3B\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x44\x45"
+"\x53\x43\x52\x49\x50\x54\x49\x4F\x4E\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x54\x68\x65\x20\x77\x65\x62\x5F"
+"\x63\x6C\x69\x65\x6E\x74\x5F\x73\x65\x74\x63\x6F\x6F\x6B\x69\x65\x28\x29\x20\x66\x75\x6E\x63\x74\x69\x6F"
+"\x6E\x20\x73\x65\x74\x73\x20\x61\x20\x63\x6F\x6F\x6B\x69\x65\x20\x6F\x6E\x20\x63\x6C\x69\x65\x6E\x74\x20"
+"\x62\x72\x6F\x77\x73\x65\x72\x20\x77\x69\x74\x68\x20\x6B\x65\x79\x20\x3C\x55\x3E\x6B\x65\x79\x3C\x2F\x55"
+"\x3E\x2C\x20\x76\x61\x6C\x75\x65\x20\x3C\x55\x3E\x76\x61\x6C\x75\x65\x3C\x2F\x55\x3E\x20\x61\x6E\x64\x20"
+"\x65\x78\x70\x69\x72\x65\x73\x20\x61\x74\x20\x3C\x55\x3E\x74\x69\x6D\x65\x6F\x66\x66\x73\x65\x74\x3C\x2F"
+"\x55\x3E\x2E\x3C\x42\x52\x3E\xA\x74\x69\x6D\x65\x6F\x66\x66\x73\x65\x74\x20\x66\x6F\x72\x6D\x61\x74\x20"
+"\x69\x73\x20\x6F\x6E\x65\x20\x6C\x69\x6B\x65\x20\x3C\x55\x3E\x73\x69\x67\x6E\x3C\x2F\x55\x3E\x2C\x20\x3C"
+"\x55\x3E\x6E\x75\x6D\x62\x65\x72\x20\x6F\x66\x66\x73\x65\x74\x3C\x2F\x55\x3E\x20\x61\x6E\x64\x20\x3C\x55"
+"\x3E\x64\x69\x72\x65\x63\x74\x69\x76\x65\x3C\x2F\x55\x3E\x20\x3C\x73\x6D\x61\x6C\x6C\x3E\x20\x28\x69\x2E"
+"\x65\x20\x2B\x31\x30\x6D\x2C\x20\x31\x30\x20\x6D\x6F\x6E\x74\x68\x73\x29\x3C\x2F\x73\x6D\x61\x6C\x6C\x3E"
+"\xA\x9\x3C\x55\x4C\x3E\x3C\x55\x3E\x73\x69\x67\x6E\x3C\x2F\x55\x3E\x20\x69\x73\x20\x6F\x6E\x20\x6C\x69"
+"\x6B\x65\x20\x27\x2D\x27\x20\x6F\x72\x20\x27\x2B\x27\x3C\x2F\x55\x4C\x3E\xA\x9\x3C\x55\x4C\x3E\x3C\x55"
+"\x3E\x6E\x75\x6D\x62\x65\x72\x20\x6F\x66\x66\x73\x65\x74\x3C\x2F\x55\x3E\x20\x69\x73\x20\x6C\x69\x6B\x65"
+"\x20\x2B\x3C\x55\x3E\x35\x3C\x2F\x55\x3E\x4D\x20\x6D\x65\x61\x6E\x73\x20\x65\x78\x70\x69\x72\x65\x73\x20"
+"\x61\x74\x20\x6E\x65\x78\x74\x20\x35\x20\x6D\x69\x6E\x75\x74\x65\x73\x20\x3C\x2F\x55\x4C\x3E\xA\x9\x3C"
+"\x55\x4C\x3E\x3C\x55\x3E\x64\x69\x72\x65\x63\x74\x69\x76\x65\x3C\x2F\x55\x3E\x20\x69\x73\x3A\xA\x9\x9"
+"\x3C\x55\x4C\x3E\x53\x20\x2D\x20\x73\x65\x63\x6F\x6E\x64\x73\x3C\x2F\x55\x4C\x3E\xA\x9\x9\x3C\x55\x4C"
+"\x3E\x4D\x20\x2D\x20\x6D\x69\x6E\x75\x74\x65\x73\x3C\x2F\x55\x4C\x3E\xA\x9\x9\x3C\x55\x4C\x3E\x48\x20"
+"\x2D\x20\x68\x6F\x75\x72\x73\x3C\x2F\x55\x4C\x3E\xA\x9\x9\x3C\x55\x4C\x3E\x64\x20\x2D\x20\x64\x61\x79"
+"\x73\x3C\x2F\x55\x4C\x3E\xA\x9\x9\x3C\x55\x4C\x3E\x6D\x20\x2D\x20\x6D\x6F\x6E\x74\x68\x73\x3C\x2F\x55"
+"\x4C\x3E\xA\x9\x9\x3C\x55\x4C\x3E\x79\x20\x2D\x20\x79\x65\x61\x72\x73\x3C\x2F\x55\x4C\x3E\xA\x9\x3C"
+"\x2F\x55\x4C\x3E\xA\x9\x70\x61\x74\x68\x20\x2D\x20\x53\x75\x62\x73\x65\x74\x20\x6F\x66\x20\x55\x52\x4C"
+"\x73\x20\x69\x6E\x20\x61\x20\x64\x6F\x6D\x61\x69\x6E\x20\x66\x6F\x72\x20\x77\x68\x69\x63\x68\x20\x74\x68"
+"\x65\x20\x63\x6F\x6F\x6B\x69\x65\x20\x69\x73\x20\x76\x61\x6C\x69\x64\xA\x20\x20\x20\x20\x20\x20\x20\x20"
+"\x20\x20\x20\x28\x49\x66\x20\x74\x68\x65\x20\x70\x61\x74\x68\x20\x69\x73\x20\x6E\x6F\x74\x20\x73\x70\x65"
+"\x63\x69\x66\x69\x65\x64\x20\x28\x70\x61\x74\x68\x20\x3D\x3D\x20\x4E\x55\x4C\x4C\x29\x2C\x20\x69\x74\x20"
+"\x61\x73\x20\x61\x73\x73\x75\x6D\x65\x64\x20\x74\x6F\x20\x62\x65\xA\x20\x20\x20\x20\x20\x20\x20\x20\x20"
+"\x20\x20\x20\x74\x68\x65\x20\x73\x61\x6D\x65\x20\x70\x61\x74\x68\x20\x61\x73\x20\x74\x68\x65\x20\x64\x6F"
+"\x63\x75\x6D\x65\x6E\x74\x20\x62\x65\x69\x6E\x67\x20\x64\x65\x73\x63\x72\x69\x62\x65\x64\x20\x62\x79\x20"
+"\x74\x68\x65\x20\x68\x65\x61\x64\x65\x72\x20\x77\x68\x69\x63\x68\xA\x20\x20\x20\x20\x20\x20\x20\x20\x20"
+"\x20\x20\x20\x63\x6F\x6E\x74\x61\x69\x6E\x73\x20\x74\x68\x65\x20\x63\x6F\x6F\x6B\x69\x65\x2E\x29\x3C\x42"
+"\x52\x3E\xA\x20\x20\x20\x20\x64\x6F\x6D\x61\x69\x6E\x20\x3D\x20\x44\x6F\x6D\x61\x69\x6E\x20\x74\x68\x65"
+"\x20\x63\x6F\x6F\x6B\x69\x65\x20\x69\x73\x20\x76\x61\x6C\x69\x64\x20\x66\x6F\x72\xA\x20\x20\x20\x20\x20"
+"\x20\x20\x20\x20\x20\x20\x20\x20\x28\x49\x66\x20\x74\x68\x65\x20\x64\x6F\x6D\x61\x69\x6E\x20\x69\x73\x20"
+"\x6E\x6F\x74\x20\x73\x65\x74\x20\x28\x64\x6F\x6D\x61\x69\x6E\x20\x3D\x3D\x20\x4E\x55\x4C\x4C\x29\x2C\x20"
+"\x74\x68\x65\x20\x64\x65\x66\x61\x75\x6C\x74\x20\x76\x61\x6C\x75\x65\x20\x6F\x66\xA\x20\x20\x20\x20\x20"
+"\x20\x20\x20\x20\x20\x20\x20\x20\x64\x6F\x6D\x61\x69\x6E\x20\x69\x73\x20\x74\x68\x65\x20\x68\x6F\x73\x74"
+"\x20\x6E\x61\x6D\x65\x20\x6F\x66\x20\x74\x68\x65\x20\x73\x65\x72\x76\x65\x72\x20\x77\x68\x69\x63\x68\x20"
+"\x67\x65\x6E\x65\x72\x61\x74\x65\x64\x20\x74\x68\x65\x20\x63\x6F\x6F\x6B\x69\x65\xA\x20\x20\x20\x20\x20"
+"\x20\x20\x20\x20\x20\x20\x20\x20\x72\x65\x73\x70\x6F\x6E\x73\x65\x2E\x29\x3C\x42\x52\x3E\xA\x9\x73\x65"
+"\x63\x75\x72\x65\x20\x3D\x20\x49\x66\x20\x61\x20\x63\x6F\x6F\x6B\x69\x65\x20\x69\x73\x20\x6D\x61\x72\x6B"
+"\x65\x64\x20\x73\x65\x63\x75\x72\x65\x20\x28\x73\x65\x63\x75\x72\x65\x20\x3D\x3D\x20\x31\x29\x2C\x20\x69"
+"\x74\x20\x77\x69\x6C\x6C\x20\x6F\x6E\x6C\x79\x20\x62\x65\xA\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20"
+"\x20\x20\x74\x72\x61\x6E\x73\x6D\x69\x74\x74\x65\x64\x20\x69\x66\x20\x74\x68\x65\x20\x63\x6F\x6D\x6D\x75"
+"\x6E\x69\x63\x61\x74\x69\x6F\x6E\x73\x20\x63\x68\x61\x6E\x6E\x65\x6C\x20\x77\x69\x74\x68\x20\x74\x68\x65"
+"\x20\x68\x6F\x73\x74\x20\x69\x73\x20\x61\xA\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x65"
+"\x63\x75\x72\x65\x20\x6F\x6E\x65\x2E\x20\x43\x75\x72\x72\x65\x6E\x74\x6C\x79\x20\x74\x68\x69\x73\x20\x6D"
+"\x65\x61\x6E\x73\x20\x74\x68\x61\x74\x20\x73\x65\x63\x75\x72\x65\x20\x63\x6F\x6F\x6B\x69\x65\x73\x20\x77"
+"\x69\x6C\x6C\x20\x6F\x6E\x6C\x79\x20\x62\x65\xA\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73"
+"\x65\x6E\x74\x20\x74\x6F\x20\x48\x54\x54\x50\x53\x20\x28\x48\x54\x54\x50\x20\x6F\x76\x65\x72\x20\x53\x53"
+"\x4C\x29\x20\x73\x65\x72\x76\x65\x72\x73\x2E\xA\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x28"
+"\x49\x66\x20\x73\x65\x63\x75\x72\x65\x20\x69\x73\x20\x6E\x6F\x74\x20\x73\x70\x65\x63\x69\x66\x69\x65\x64"
+"\x20\x28\x73\x65\x63\x75\x72\x65\x20\x3D\x3D\x20\x30\x29\x2C\x20\x61\x20\x63\x6F\x6F\x6B\x69\x65\x20\x69"
+"\x73\x20\x63\x6F\x6E\x73\x69\x64\x65\x72\x65\x64\xA\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20"
+"\x20\x73\x61\x66\x65\x20\x74\x6F\x20\x62\x65\x20\x73\x65\x6E\x74\x20\x69\x6E\x20\x74\x68\x65\x20\x63\x6C"
+"\x65\x61\x72\x20\x6F\x76\x65\x72\x20\x75\x6E\x73\x65\x63\x75\x72\x65\x64\x20\x63\x68\x61\x6E\x6E\x65\x6C"
+"\x73\x2E\x20\x29\x3C\x42\x52\x3E\xA\x20\xA\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x4E\x4F\x54\x45\x3C\x2F"
+"\x42\x3E\xA\x3C\x55\x4C\x3E\x20\x54\x68\x65\x20\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x73\x65\x74"
+"\x63\x6F\x6F\x6B\x69\x65\x28\x29\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x73\x68\x6F\x75\x6C\x64\x20\x62"
+"\x65\x20\x63\x61\x6C\x6C\x65\x64\x20\x3C\x42\x3E\x6F\x6E\x6C\x79\x3C\x2F\x42\x3E\x20\x66\x72\x6F\x6D\x20"
+"\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x20\x63\x61\x6C\x6C\x65\x64\x20\x62\x79\x20\x67\x65\x74\x68\x61\x6E"
+"\x64\x6C\x65\x72\x73\x20\x72\x65\x67\x69\x73\x74\x65\x72\x65\x64\x20\x76\x69\x61\x20\x3C\x61\x20\x68\x72"
+"\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x73"
+"\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x27\x3E\x77\x65\x62\x5F\x73\x65\x72\x76"
+"\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x28\x29\x3C\x2F\x61\x3E\x3C\x42\x52\x3E\x3C\x2F\x55"
+"\x4C\x3E\xA\x3C\x48\x52\x3E\x3C\x42\x52\x3E\xA\xA\xA\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x77\x65\x62\x5F"
+"\x63\x6C\x69\x65\x6E\x74\x5F\x64\x65\x6C\x65\x74\x65\x63\x6F\x6F\x6B\x69\x65\x3E\x3C\x42\x3E\x3C\x66\x6F"
+"\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37\x37\x27\x3E\x77\x65\x62\x5F\x63\x6C\x69\x65"
+"\x6E\x74\x5F\x64\x65\x6C\x65\x74\x65\x63\x6F\x6F\x6B\x69\x65\x28\x29\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F"
+"\x42\x3E\x3C\x42\x52\x3E\x3C\x42\x52\x3E\xA\x3C\x42\x3E\x4E\x41\x4D\x45\x3C\x2F\x42\x3E\xA\x3C\x55\x4C"
+"\x3E\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x64\x65\x6C\x65\x74\x65\x63\x6F\x6F\x6B\x69\x65\x20\x2D"
+"\x20\x64\x65\x6C\x65\x74\x65\x20\x61\x20\x63\x6F\x6F\x6B\x69\x65\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x53"
+"\x59\x4E\x4F\x50\x53\x49\x53\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x23\x69\x6E\x63\x6C\x75\x64\x65\x20\x22"
+"\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x2E\x68\x22\x3C\x42\x52\x3E\x3C\x42\x52\x3E\x76\x6F\x69\x64\x20"
+"\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x64\x65\x6C\x65\x74\x65\x63\x6F\x6F\x6B\x69\x65\x28\x63\x68"
+"\x61\x72\x20\x2A\x3C\x55\x3E\x6B\x65\x79\x3C\x2F\x55\x3E\x29\x3B\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x44"
+"\x45\x53\x43\x52\x49\x50\x54\x49\x4F\x4E\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x54\x68\x65\x20\x77\x65\x62"
+"\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x64\x65\x6C\x65\x74\x65\x63\x6F\x6F\x6B\x69\x65\x28\x29\x20\x66\x75\x6E"
+"\x63\x74\x69\x6F\x6E\x20\x64\x65\x6C\x65\x74\x65\x20\x61\x20\x63\x6F\x6F\x6B\x69\x65\x20\x6F\x6E\x20\x63"
+"\x6C\x69\x65\x6E\x74\x20\x62\x72\x6F\x77\x73\x65\x72\x20\x77\x69\x74\x68\x20\x6B\x65\x79\x20\x3C\x55\x3E"
+"\x6B\x65\x79\x3C\x2F\x55\x3E\x3C\x42\x52\x3E\xA\xA\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x4E\x4F\x54\x45"
+"\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x20\x54\x68\x65\x20\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x64"
+"\x65\x6C\x65\x74\x65\x63\x6F\x6F\x6B\x69\x65\x28\x29\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x73\x68\x6F"
+"\x75\x6C\x64\x20\x62\x65\x20\x63\x61\x6C\x6C\x65\x64\x20\x3C\x42\x3E\x6F\x6E\x6C\x79\x3C\x2F\x42\x3E\x20"
+"\x66\x72\x6F\x6D\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x20\x63\x61\x6C\x6C\x65\x64\x20\x62\x79\x20\x67"
+"\x65\x74\x68\x61\x6E\x64\x6C\x65\x72\x73\x20\x72\x65\x67\x69\x73\x74\x65\x72\x65\x64\x20\x76\x69\x61\x20"
+"\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23"
+"\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x27\x3E\x77\x65\x62"
+"\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x28\x29\x3C\x2F\x61\x3E\x3C\x42"
+"\x52\x3E\x3C\x2F\x55\x4C\x3E\xA\x3C\x48\x52\x3E\x3C\x42\x52\x3E\xA\xA\x3C\x41\x20\x6E\x61\x6D\x65\x3D"
+"\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x73\x65\x74\x76\x61\x72\x3E\x3C\x42\x3E\x3C\x66\x6F\x6E\x74"
+"\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37\x37\x27\x3E\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74"
+"\x5F\x73\x65\x74\x76\x61\x72\x28\x29\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\x3C\x42\x52\x3E\x3C\x42"
+"\x52\x3E\xA\x3C\x42\x3E\x4E\x41\x4D\x45\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x77\x65\x62\x5F\x63\x6C\x69"
+"\x65\x6E\x74\x5F\x73\x65\x74\x76\x61\x72\x20\x2D\x20\x73\x65\x74\x73\x20\x61\x20\x76\x61\x72\x69\x61\x62"
+"\x6C\x65\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x53\x59\x4E\x4F\x50\x53\x49\x53\x3C\x2F\x42\x3E\xA\x3C\x55"
+"\x4C\x3E\x23\x69\x6E\x63\x6C\x75\x64\x65\x20\x22\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x2E\x68\x22\x3C"
+"\x42\x52\x3E\x3C\x42\x52\x3E\x69\x6E\x74\x20\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x73\x65\x74\x76"
+"\x61\x72\x28\x63\x68\x61\x72\x20\x2A\x3C\x55\x3E\x6E\x61\x6D\x65\x3C\x2F\x55\x3E\x2C\x20\x63\x68\x61\x72"
+"\x20\x2A\x3C\x55\x3E\x76\x61\x6C\x75\x65\x3C\x2F\x55\x3E\x29\x3B\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x44"
+"\x45\x53\x43\x52\x49\x50\x54\x49\x4F\x4E\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x54\x68\x65\x20\x77\x65\x62"
+"\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x73\x65\x74\x76\x61\x72\x28\x29\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20"
+"\x73\x65\x74\x73\x20\x61\x6E\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x20\x6E\x61\x6D\x65\x64\x20\x3C\x55\x3E"
+"\x6E\x61\x6D\x65\x3C\x2F\x55\x3E\x20\x77\x69\x74\x68\x20\x76\x61\x6C\x75\x65\x20\x3C\x55\x3E\x76\x61\x6C"
+"\x75\x65\x3C\x2F\x55\x3E\x20\x69\x6E\x20\x61\x20\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x2C\x20\x74\x6F"
+"\x20\x62\x65\x20\x75\x73\x65\x64\x20\x69\x6E\x20\x6F\x75\x74\x70\x75\x74\x20\x28\x6F\x6E\x6C\x79\x20\x61"
+"\x76\x61\x69\x6C\x61\x62\x6C\x65\x20\x69\x66\x20\x57\x53\x5F\x44\x59\x4E\x56\x41\x52\x20\x66\x6C\x61\x67"
+"\x20\x75\x73\x65\x64\x29\x3C\x42\x52\x3E\xA\x9\x20\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x73\x65"
+"\x74\x76\x61\x72\x28\x22\x62\x67\x63\x22\x2C\x22\x23\x66\x66\x30\x30\x64\x64\x22\x29\x3B\x3C\x42\x52\x3E"
+"\xA\x20\x20\x20\x20\x20\x70\x72\x69\x6E\x74\x66\x28\x22\x26\x6C\x74\x3B\x42\x4F\x44\x59\x20\x62\x67\x63"
+"\x6F\x6C\x6F\x72\x3D\x27\x24\x62\x67\x63\x3B\x27\x26\x67\x74\x3B\x22\x29\x3B\x20\x20\x2D\x20\x77\x69\x6C"
+"\x6C\x20\x65\x78\x63\x68\x61\x6E\x67\x65\x20\x74\x68\x65\x20\x73\x74\x72\x69\x6E\x67\x20\x24\x62\x67\x63"
+"\x3B\x20\x74\x6F\x20\x23\x66\x66\x30\x30\x64\x64\x20\x6F\x6E\x20\x6F\x75\x74\x70\x75\x74\x3C\x2F\x55\x4C"
+"\x3E\xA\xA\x3C\x42\x3E\x4E\x4F\x54\x45\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x54\x68\x65\x20\x77\x65\x62"
+"\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x73\x65\x74\x76\x61\x72\x28\x29\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20"
+"\x3C\x42\x3E\x73\x68\x6F\x75\x6C\x64\x3C\x2F\x42\x3E\x20\x62\x65\x20\x63\x61\x6C\x6C\x65\x64\x20\x3C\x42"
+"\x3E\x6F\x6E\x6C\x79\x3C\x2F\x42\x3E\x20\x66\x72\x6F\x6D\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x20\x63"
+"\x61\x6C\x6C\x65\x64\x20\x62\x79\x20\x67\x65\x74\x68\x61\x6E\x64\x6C\x65\x72\x73\x20\x72\x65\x67\x69\x73"
+"\x74\x65\x72\x65\x64\x20\x76\x69\x61\x20\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D"
+"\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61"
+"\x6E\x64\x6C\x65\x72\x27\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C"
+"\x65\x72\x28\x29\x3C\x2F\x61\x3E\x2E\x3C\x2F\x55\x4C\x3E\xA\x3C\x48\x52\x3E\x3C\x42\x52\x3E\xA\xA\x3C"
+"\x41\x20\x6E\x61\x6D\x65\x3D\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x67\x65\x74\x76\x61\x72\x3E\x3C"
+"\x42\x3E\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37\x37\x27\x3E\x77\x65\x62"
+"\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x67\x65\x74\x76\x61\x72\x28\x29\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42"
+"\x3E\x3C\x42\x52\x3E\x3C\x42\x52\x3E\xA\x3C\x42\x3E\x4E\x41\x4D\x45\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E"
+"\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x67\x65\x74\x76\x61\x72\x20\x2D\x20\x67\x65\x74\x73\x20\x61"
+"\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x20\x76\x61\x6C\x75\x65\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x53\x59"
+"\x4E\x4F\x50\x53\x49\x53\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x23\x69\x6E\x63\x6C\x75\x64\x65\x20\x22\x77"
+"\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x2E\x68\x22\x3C\x42\x52\x3E\x3C\x42\x52\x3E\x69\x6E\x74\x20\x77\x65"
+"\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x67\x65\x74\x76\x61\x72\x28\x63\x68\x61\x72\x20\x2A\x3C\x55\x3E\x6E"
+"\x61\x6D\x65\x3C\x2F\x55\x3E\x29\x3B\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x44\x45\x53\x43\x52\x49\x50\x54"
+"\x49\x4F\x4E\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x54\x68\x65\x20\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74"
+"\x5F\x67\x65\x74\x76\x61\x72\x28\x29\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x67\x65\x74\x73\x20\x74\x68"
+"\x65\x20\x76\x61\x6C\x75\x65\x20\x6F\x66\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x20\x3C\x55\x3E\x6E\x61\x6D"
+"\x65\x3C\x2F\x55\x3E\x2C\x20\x28\x73\x65\x65\x20\x61\x6C\x73\x6F\x20\x3C\x61\x20\x68\x72\x65\x66\x3D\x2F"
+"\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74"
+"\x5F\x73\x65\x74\x76\x61\x72\x3E\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x73\x65\x74\x76\x61\x72\x28"
+"\x29\x3C\x2F\x61\x3E\x29\x3C\x42\x52\x3E\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x4E\x4F\x54\x45\x3C\x2F\x42"
+"\x3E\xA\x3C\x55\x4C\x3E\x54\x68\x65\x20\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x67\x65\x74\x76\x61"
+"\x72\x28\x29\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x3C\x42\x3E\x73\x68\x6F\x75\x6C\x64\x3C\x2F\x42\x3E"
+"\x20\x62\x65\x20\x63\x61\x6C\x6C\x65\x64\x20\x3C\x42\x3E\x6F\x6E\x6C\x79\x3C\x2F\x42\x3E\x20\x66\x72\x6F"
+"\x6D\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x20\x63\x61\x6C\x6C\x65\x64\x20\x62\x79\x20\x67\x65\x74\x68"
+"\x61\x6E\x64\x6C\x65\x72\x73\x20\x72\x65\x67\x69\x73\x74\x65\x72\x65\x64\x20\x76\x69\x61\x20\x3C\x61\x20"
+"\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62"
+"\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x27\x3E\x77\x65\x62\x5F\x73\x65"
+"\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x28\x29\x3C\x2F\x61\x3E\x2E\x3C\x2F\x55\x4C"
+"\x3E\xA\x3C\x48\x52\x3E\x3C\x42\x52\x3E\xA\xA\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x77\x65\x62\x5F\x63\x6C"
+"\x69\x65\x6E\x74\x5F\x64\x65\x6C\x76\x61\x72\x3E\x3C\x42\x3E\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72"
+"\x3D\x27\x30\x30\x30\x30\x37\x37\x27\x3E\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x64\x65\x6C\x76\x61"
+"\x72\x28\x29\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\x3C\x42\x52\x3E\x3C\x42\x52\x3E\xA\x3C\x42\x3E"
+"\x4E\x41\x4D\x45\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x64\x65"
+"\x6C\x76\x61\x72\x20\x2D\x20\x64\x65\x6C\x65\x74\x65\x20\x61\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x3C\x2F"
+"\x55\x4C\x3E\xA\x3C\x42\x3E\x53\x59\x4E\x4F\x50\x53\x49\x53\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x23\x69"
+"\x6E\x63\x6C\x75\x64\x65\x20\x22\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x2E\x68\x22\x3C\x42\x52\x3E\x3C"
+"\x42\x52\x3E\x69\x6E\x74\x20\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x64\x65\x6C\x76\x61\x72\x28\x63"
+"\x68\x61\x72\x20\x2A\x3C\x55\x3E\x6E\x61\x6D\x65\x3C\x2F\x55\x3E\x29\x3B\x3C\x2F\x55\x4C\x3E\xA\x3C\x42"
+"\x3E\x44\x45\x53\x43\x52\x49\x50\x54\x49\x4F\x4E\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x54\x68\x65\x20\x77"
+"\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x64\x65\x6C\x76\x61\x72\x28\x29\x20\x66\x75\x6E\x63\x74\x69\x6F"
+"\x6E\x20\x64\x65\x6C\x65\x74\x65\x73\x20\x61\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x20\x77\x69\x74\x68\x20"
+"\x6E\x61\x6D\x65\x20\x3C\x55\x3E\x6E\x61\x6D\x65\x3C\x2F\x55\x3E\x3C\x42\x52\x3E\x3C\x2F\x55\x4C\x3E\xA"
+"\x3C\x42\x3E\x4E\x4F\x54\x45\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x54\x68\x65\x20\x77\x65\x62\x5F\x63\x6C"
+"\x69\x65\x6E\x74\x5F\x64\x65\x6C\x76\x61\x72\x28\x29\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x3C\x42\x3E"
+"\x73\x68\x6F\x75\x6C\x64\x3C\x2F\x42\x3E\x20\x62\x65\x20\x63\x61\x6C\x6C\x65\x64\x20\x3C\x42\x3E\x6F\x6E"
+"\x6C\x79\x3C\x2F\x42\x3E\x20\x66\x72\x6F\x6D\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x20\x63\x61\x6C\x6C"
+"\x65\x64\x20\x62\x79\x20\x67\x65\x74\x68\x61\x6E\x64\x6C\x65\x72\x73\x20\x72\x65\x67\x69\x73\x74\x65\x72"
+"\x65\x64\x20\x76\x69\x61\x20\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E"
+"\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C"
+"\x65\x72\x27\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x28"
+"\x29\x3C\x2F\x61\x3E\x2E\x3C\x2F\x55\x4C\x3E\xA\x3C\x48\x52\x3E\x3C\x42\x52\x3E\xA\xA\xA\x3C\x41\x20"
+"\x6E\x61\x6D\x65\x3D\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x48\x54\x54\x50\x64\x69\x72\x65\x63\x74"
+"\x69\x76\x65\x3E\x3C\x42\x3E\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37\x37"
+"\x27\x3E\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x48\x54\x54\x50\x64\x69\x72\x65\x63\x74\x69\x76\x65"
+"\x28\x29\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\x3C\x42\x52\x3E\x3C\x42\x52\x3E\xA\x3C\x42\x3E\x4E"
+"\x41\x4D\x45\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x48\x54\x54"
+"\x50\x64\x69\x72\x65\x63\x74\x69\x76\x65\x20\x2D\x20\x43\x68\x61\x6E\x67\x65\x20\x74\x68\x65\x20\x48\x54"
+"\x54\x50\x20\x68\x65\x61\x64\x65\x72\x20\x73\x74\x61\x74\x75\x73\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x53"
+"\x59\x4E\x4F\x50\x53\x49\x53\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x23\x69\x6E\x63\x6C\x75\x64\x65\x20\x22"
+"\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x2E\x68\x22\x3C\x42\x52\x3E\x3C\x42\x52\x3E\x76\x6F\x69\x64\x20"
+"\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x48\x54\x54\x50\x64\x69\x72\x65\x63\x74\x69\x76\x65\x28\x63"
+"\x68\x61\x72\x20\x2A\x3C\x55\x3E\x64\x69\x72\x65\x63\x74\x69\x76\x65\x3C\x2F\x55\x3E\x29\x3B\x3C\x2F\x55"
+"\x4C\x3E\xA\x3C\x42\x3E\x44\x45\x53\x43\x52\x49\x50\x54\x49\x4F\x4E\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E"
+"\x54\x68\x65\x20\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x48\x54\x54\x50\x64\x69\x72\x65\x63\x74\x69"
+"\x76\x65\x28\x29\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x63\x68\x61\x6E\x67\x65\x73\x20\x74\x68\x65\x20"
+"\x48\x54\x54\x50\x20\x68\x65\x61\x64\x65\x72\x20\x73\x74\x61\x74\x75\x73\x20\x28\x69\x2E\x65\x2E\x20\x22"
+"\x48\x54\x54\x50\x2F\x31\x2E\x31\x20\x32\x30\x30\x20\x4F\x4B\x22\x29\x20\x74\x6F\x20\x74\x68\x65\x20\x73"
+"\x74\x72\x69\x6E\x67\x20\x3C\x55\x3E\x64\x69\x72\x65\x63\x74\x69\x76\x65\x3C\x2F\x55\x3E\x3C\x42\x52\x3E"
+"\xA\x3C\x73\x6D\x61\x6C\x6C\x3E\x3C\x69\x3E\x75\x73\x65\x66\x75\x6C\x20\x66\x6F\x72\x20\x22\x48\x54\x54"
+"\x50\x2F\x31\x2E\x31\x20\x34\x30\x31\x20\x41\x75\x74\x68\x6F\x72\x69\x7A\x61\x74\x69\x6F\x6E\x20\x52\x65"
+"\x71\x75\x69\x72\x65\x64\x22\x20\x28\x74\x6F\x20\x72\x65\x71\x75\x69\x72\x65\x20\x61\x20\x70\x61\x73\x73"
+"\x77\x6F\x72\x64\x29\x2C\x20\x72\x65\x64\x69\x72\x65\x63\x74\x69\x6F\x6E\x20\x6F\x72\x20\x73\x69\x6D\x69"
+"\x6C\x61\x72\x20\x61\x63\x74\x69\x6F\x6E\x73\x20\x6F\x6E\x20\x74\x68\x65\x20\x63\x6C\x69\x65\x6E\x74\x20"
+"\x73\x69\x64\x65\x3C\x2F\x69\x3E\x3C\x2F\x73\x6D\x61\x6C\x6C\x3E\x2E\x3C\x2F\x55\x4C\x3E\xA\x20\x3C\x42"
+"\x3E\x4E\x4F\x54\x45\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x54\x68\x65\x20\x77\x65\x62\x5F\x63\x6C\x69\x65"
+"\x6E\x74\x5F\x48\x54\x54\x50\x64\x69\x72\x65\x63\x74\x69\x76\x65\x28\x29\x20\x66\x75\x6E\x63\x74\x69\x6F"
+"\x6E\x20\x63\x61\x6E\x20\x62\x65\x20\x63\x61\x6C\x6C\x65\x64\x20\x3C\x42\x3E\x6F\x6E\x6C\x79\x3C\x2F\x42"
+"\x3E\x20\x66\x72\x6F\x6D\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x20\x63\x61\x6C\x6C\x65\x64\x20\x62\x79"
+"\x20\x67\x65\x74\x68\x61\x6E\x64\x6C\x65\x72\x73\x20\x72\x65\x67\x69\x73\x74\x65\x72\x65\x64\x20\x76\x69"
+"\x61\x20\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E"
+"\x73\x23\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x27\x3E\x77"
+"\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x28\x29\x3C\x2F\x61\x3E"
+"\x2E\x3C\x2F\x55\x4C\x3E\xA\x3C\x48\x52\x3E\x3C\x42\x52\x3E\xA\xA\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x77"
+"\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x63\x6F\x6E\x74\x65\x6E\x74\x74\x79\x70\x65\x3E\x3C\x42\x3E\x3C"
+"\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37\x37\x27\x3E\x77\x65\x62\x5F\x63\x6C"
+"\x69\x65\x6E\x74\x5F\x63\x6F\x6E\x74\x65\x6E\x74\x74\x79\x70\x65\x28\x29\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C"
+"\x2F\x42\x3E\x3C\x42\x52\x3E\x3C\x42\x52\x3E\xA\x3C\x42\x3E\x4E\x41\x4D\x45\x3C\x2F\x42\x3E\xA\x3C\x55"
+"\x4C\x3E\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x63\x6F\x6E\x74\x65\x6E\x74\x74\x79\x70\x65\x20\x2D"
+"\x20\x70\x72\x69\x6E\x74\x73\x20\x74\x6F\x20\x73\x74\x64\x6F\x75\x74\x20\x74\x68\x65\x20\x68\x65\x61\x64"
+"\x65\x72\x20\x22\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x74\x79\x70\x65\x3A\x20\x2A\x2F\x2A\x22\x3C\x2F\x55\x4C"
+"\x3E\xA\x3C\x42\x3E\x53\x59\x4E\x4F\x50\x53\x49\x53\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x23\x69\x6E\x63"
+"\x6C\x75\x64\x65\x20\x22\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x2E\x68\x22\x3C\x42\x52\x3E\x3C\x42\x52"
+"\x3E\x76\x6F\x69\x64\x20\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x63\x6F\x6E\x74\x65\x6E\x74\x74\x79"
+"\x70\x65\x28\x63\x68\x61\x72\x20\x2A\x3C\x55\x3E\x65\x78\x74\x65\x6E\x73\x69\x6F\x6E\x3C\x2F\x55\x3E\x29"
+"\x3B\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x44\x45\x53\x43\x52\x49\x50\x54\x49\x4F\x4E\x3C\x2F\x42\x3E\xA"
+"\x3C\x55\x4C\x3E\x54\x68\x65\x20\x77\x65\x62\x5F\x63\x6C\x69\x65\x6E\x74\x5F\x63\x6F\x6E\x74\x65\x6E\x74"
+"\x74\x79\x70\x65\x28\x29\x20\x70\x72\x69\x6E\x74\x73\x20\x74\x6F\x20\x73\x74\x64\x6F\x75\x74\x20\x74\x68"
+"\x65\x20\x68\x65\x61\x64\x65\x72\x20\x22\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x74\x79\x70\x65\x3A\x20\x2A\x2F"
+"\x2A\x22\x2C\x20\x77\x68\x65\x72\x65\x20\x27\x2A\x2F\x2A\x27\x20\x69\x73\x20\x64\x65\x74\x65\x72\x6D\x69"
+"\x6E\x65\x64\x20\x62\x79\x20\x3C\x55\x3E\x65\x78\x74\x65\x6E\x73\x69\x6F\x6E\x3C\x2F\x55\x3E\x20\x28\x69"
+"\x2E\x65\x2E\x20\x22\x68\x74\x6D\x6C\x22\x20\x62\x61\x73\x65\x64\x20\x6F\x6E\x20\x6D\x69\x6D\x65\x66\x69"
+"\x6C\x65\x20\x70\x72\x6F\x64\x75\x63\x65\x73\x20\x22\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x74\x79\x70\x65\x3A"
+"\x20\x74\x65\x78\x74\x2F\x68\x74\x6D\x6C\x5C\x72\x5C\x6E\x5C\x72\x5C\x6E\x22\x20\x61\x6E\x64\x20\x22\x6A"
+"\x70\x67\x22\x20\x70\x72\x6F\x64\x75\x63\x65\x73\x20\x22\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x74\x79\x70\x65"
+"\x3A\x20\x69\x6D\x61\x67\x65\x2F\x6A\x70\x65\x67\x5C\x72\x5C\x6E\x5C\x72\x5C\x6E\x22\x29\x3C\x42\x52\x3E"
+"\xA\x3C\x73\x6D\x61\x6C\x6C\x3E\x74\x68\x69\x73\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x69\x73\x20\x75"
+"\x73\x65\x64\x20\x6F\x6E\x20\x3C\x61\x20\x68\x72\x65\x66\x3D\x22\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E"
+"\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x6C\x69\x61\x73\x64\x69\x72"
+"\x22\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x61\x6C\x69\x61\x73\x64\x69\x72\x28\x29\x3C\x2F\x61"
+"\x3E\x3C\x2F\x73\x6D\x61\x6C\x6C\x3E\x3C\x2F\x55\x4C\x3E\xA\x20\x3C\x42\x3E\x4E\x4F\x54\x45\x3C\x2F\x42"
+"\x3E\xA\x3C\x55\x4C\x3E\x54\x68\x69\x73\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x75\x73\x65\x73\x20\x6D"
+"\x69\x6D\x65\x20\x74\x79\x70\x65\x73\x20\x6C\x6F\x61\x64\x65\x64\x20\x61\x74\x20\x3C\x61\x20\x68\x72\x65"
+"\x66\x3D\x22\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x73\x65"
+"\x72\x76\x65\x72\x5F\x75\x73\x65\x4D\x49\x4D\x45\x66\x69\x6C\x65\x22\x3E\x77\x65\x62\x5F\x73\x65\x72\x76"
+"\x65\x72\x5F\x75\x73\x65\x4D\x49\x4D\x45\x66\x69\x6C\x65\x28\x29\x3C\x2F\x61\x3E\x20\x65\x6C\x73\x65\x20"
+"\x69\x74\x20\x77\x69\x6C\x6C\x20\x70\x72\x69\x6E\x74\x20\x6F\x6E\x6C\x79\x20\x22\x43\x6F\x6E\x74\x65\x6E"
+"\x74\x2D\x74\x79\x70\x65\x3A\x20\x74\x65\x78\x74\x2F\x70\x6C\x61\x69\x6E\x5C\x72\x5C\x6E\x5C\x72\x5C\x6E"
+"\x22\x3C\x2F\x55\x4C\x3E\xA\x3C\x48\x52\x3E\x3C\x42\x52\x3E\xA\xA\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x77"
+"\x65\x62\x5F\x6C\x6F\x67\x3E\x3C\x42\x3E\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30"
+"\x30\x37\x37\x27\x3E\x77\x65\x62\x5F\x6C\x6F\x67\x28\x29\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\x3C"
+"\x42\x52\x3E\x3C\x42\x52\x3E\xA\x3C\x42\x3E\x4E\x41\x4D\x45\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x77\x65"
+"\x62\x5F\x6C\x6F\x67\x20\x2D\x20\x77\x72\x69\x74\x65\x20\x74\x6F\x20\x6C\x6F\x67\x66\x69\x6C\x65\x3C\x2F"
+"\x55\x4C\x3E\xA\x3C\x42\x3E\x53\x59\x4E\x4F\x50\x53\x49\x53\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x23\x69"
+"\x6E\x63\x6C\x75\x64\x65\x20\x22\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x2E\x68\x22\x3C\x42\x52\x3E\x3C"
+"\x42\x52\x3E\x76\x6F\x69\x64\x20\x77\x65\x62\x5F\x6C\x6F\x67\x28\x63\x6F\x6E\x73\x74\x20\x63\x68\x61\x72"
+"\x20\x2A\x3C\x55\x3E\x66\x6F\x72\x6D\x61\x74\x3C\x2F\x55\x3E\x2C\x3C\x55\x3E\x2E\x2E\x2E\x3C\x2F\x55\x3E"
+"\x29\x3B\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x44\x45\x53\x43\x52\x49\x50\x54\x49\x4F\x4E\x3C\x2F\x42\x3E"
+"\xA\x3C\x55\x4C\x3E\x54\x68\x65\x20\x77\x65\x62\x5F\x6C\x6F\x67\x28\x29\x20\x69\x73\x20\x73\x69\x6D\x69"
+"\x6C\x61\x72\x20\x74\x6F\x20\x70\x72\x69\x6E\x74\x66\x2C\x20\x62\x75\x74\x20\x77\x72\x69\x74\x65\x73\x20"
+"\x74\x6F\x20\x61\x20\x6C\x6F\x67\x66\x69\x6C\x65\x20\x28\x73\x70\x65\x63\x69\x66\x69\x65\x64\x20\x69\x6E"
+"\x20\x3C\x61\x20\x68\x72\x65\x66\x3D\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23"
+"\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E\x69\x74\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72"
+"\x5F\x69\x6E\x69\x74\x28\x29\x3C\x2F\x61\x3E\x29\x2E\x20\x4A\x75\x73\x74\x20\x61\x73\x20\x70\x72\x69\x6E"
+"\x74\x66\x2C\x20\x69\x74\x20\x64\x6F\x65\x73\x6E\x27\x74\x20\x61\x64\x64\x20\x61\x20\x6E\x65\x77\x6C\x69"
+"\x6E\x65\x20\x61\x74\x20\x74\x68\x65\x20\x65\x6E\x64\x2E\x3C\x2F\x55\x4C\x3E\xA\x20\x3C\x42\x3E\x4E\x4F"
+"\x54\x45\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x54\x68\x65\x20\x77\x65\x62\x5F\x6C\x6F\x67\x28\x29\x20\x66"
+"\x75\x6E\x63\x74\x69\x6F\x6E\x20\x3C\x42\x3E\x73\x68\x6F\x75\x6C\x64\x3C\x2F\x42\x3E\x20\x62\x65\x20\x63"
+"\x61\x6C\x6C\x65\x64\x20\x3C\x42\x3E\x6F\x6E\x6C\x79\x3C\x2F\x42\x3E\x20\x66\x72\x6F\x6D\x20\x66\x75\x6E"
+"\x63\x74\x69\x6F\x6E\x73\x20\x63\x61\x6C\x6C\x65\x64\x20\x62\x79\x20\x67\x65\x74\x68\x61\x6E\x64\x6C\x65"
+"\x72\x73\x20\x72\x65\x67\x69\x73\x74\x65\x72\x65\x64\x20\x76\x69\x61\x20\x3C\x61\x20\x68\x72\x65\x66\x3D"
+"\x27\x2F\x3F\x68\x65\x6C\x70\x3D\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x23\x77\x65\x62\x5F\x73\x65\x72\x76"
+"\x65\x72\x5F\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x27\x3E\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x5F"
+"\x61\x64\x64\x68\x61\x6E\x64\x6C\x65\x72\x28\x29\x3C\x2F\x61\x3E\x2E\x3C\x2F\x55\x4C\x3E\xA\x3C\x48\x52"
+"\x3E\x3C\x42\x52\x3E\xA\xA\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x3E"
+"\x3C\x42\x3E\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37\x37\x27\x3E\x43\x6C"
+"\x69\x65\x6E\x74\x49\x6E\x66\x6F\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\x3C\x42\x52\x3E\x3C\x42\x52"
+"\x3E\xA\x3C\x42\x3E\x4E\x41\x4D\x45\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x43\x6C\x69\x65\x6E\x74\x49\x6E"
+"\x66\x6F\x20\x2D\x20\x61\x20\x73\x74\x72\x75\x63\x74\x20\x74\x6F\x20\x63\x6F\x6E\x74\x72\x6F\x6C\x20\x63"
+"\x6C\x69\x65\x6E\x74\x20\x48\x65\x61\x64\x65\x72\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x53\x59\x4E\x4F\x50"
+"\x53\x49\x53\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x20\x44\x65\x63\x6C\x61\x72\x65\x64\x20\x69\x6E\x20\x77"
+"\x65\x62\x5F\x73\x65\x72\x76\x65\x72\x2E\x68\x20\x3C\x42\x52\x3E\x3C\x42\x52\x3E\xA\x65\x78\x74\x65\x72"
+"\x6E\x20\x73\x74\x72\x75\x63\x74\x20\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x20\x7B\x3C\x42\x52\x3E\xA"
+"\x3C\x55\x4C\x3E\xA\x20\x20\x20\x20\x20\x20\x20\x20\x69\x6E\x74\x20\x3C\x55\x3E\x6F\x75\x74\x66\x64\x3C"
+"\x2F\x55\x3E\x3B\x3C\x42\x52\x3E\xA\x20\x20\x20\x20\x20\x20\x20\x20\x63\x68\x61\x72\x20\x2A\x3C\x55\x3E"
+"\x69\x6E\x65\x74\x6E\x61\x6D\x65\x3C\x2F\x55\x3E\x3B\x3C\x42\x52\x3E\xA\x20\x20\x20\x20\x20\x20\x20\x20"
+"\x63\x68\x61\x72\x20\x2A\x3C\x55\x3E\x72\x65\x71\x75\x65\x73\x74\x3C\x2F\x55\x3E\x3B\x3C\x42\x52\x3E\xA"
+"\x20\x20\x20\x20\x20\x20\x20\x20\x63\x68\x61\x72\x20\x2A\x3C\x55\x3E\x6D\x65\x74\x68\x6F\x64\x3C\x2F\x55"
+"\x3E\x3B\x3C\x42\x52\x3E\xA\x20\x20\x20\x20\x20\x20\x20\x20\x63\x68\x61\x72\x20\x2A\x3C\x55\x3E\x75\x73"
+"\x65\x72\x3C\x2F\x55\x3E\x3B\x3C\x42\x52\x3E\xA\x20\x20\x20\x20\x20\x20\x20\x20\x63\x68\x61\x72\x20\x2A"
+"\x3C\x55\x3E\x70\x61\x73\x73\x3C\x2F\x55\x3E\x3B\x3C\x42\x52\x3E\xA\x9\x9\x63\x68\x61\x72\x20\x2A\x28"
+"\x2A\x3C\x55\x3E\x48\x65\x61\x64\x65\x72\x3C\x2F\x55\x3E\x29\x28\x63\x68\x61\x72\x20\x2A\x68\x61\x6E\x64"
+"\x6C\x65\x29\x3B\x3C\x42\x52\x3E\xA\x20\x20\x20\x20\x20\x20\x20\x20\x63\x68\x61\x72\x20\x2A\x28\x2A\x3C"
+"\x55\x3E\x51\x75\x65\x72\x79\x3C\x2F\x55\x3E\x29\x28\x63\x68\x61\x72\x20\x2A\x68\x61\x6E\x64\x6C\x65\x29"
+"\x3B\x3C\x42\x52\x3E\xA\x20\x20\x20\x20\x20\x20\x20\x20\x63\x68\x61\x72\x20\x2A\x28\x2A\x3C\x55\x3E\x50"
+"\x6F\x73\x74\x3C\x2F\x55\x3E\x29\x28\x63\x68\x61\x72\x20\x2A\x68\x61\x6E\x64\x6C\x65\x29\x3B\x3C\x42\x52"
+"\x3E\xA\x20\x20\x20\x20\x20\x20\x20\x20\x63\x68\x61\x72\x20\x2A\x28\x2A\x3C\x55\x3E\x43\x6F\x6F\x6B\x69"
+"\x65\x3C\x2F\x55\x3E\x29\x28\x63\x68\x61\x72\x20\x2A\x68\x61\x6E\x64\x6C\x65\x29\x3B\x3C\x42\x52\x3E\xA"
+"\x9\x9\x63\x68\x61\x72\x20\x2A\x28\x2A\x3C\x55\x3E\x43\x6F\x6E\x66\x3C\x2F\x55\x3E\x29\x28\x63\x68\x61"
+"\x72\x20\x2A\x68\x61\x6E\x64\x6C\x65\x29\x3B\x3C\x42\x52\x3E\xA\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74"
+"\x72\x75\x63\x74\x20\x5F\x4D\x75\x6C\x74\x69\x50\x61\x72\x74\x20\x28\x2A\x3C\x55\x3E\x4D\x75\x6C\x74\x69"
+"\x50\x61\x72\x74\x3C\x2F\x55\x3E\x29\x28\x63\x68\x61\x72\x20\x2A\x68\x61\x6E\x64\x6C\x65\x29\x3B\x3C\x42"
+"\x52\x3E\xA\x20\x20\x20\x20\x20\x20\x20\x20\x76\x6F\x69\x64\x20\x2A\x5F\x5F\x70\x61\x64\x5B\x35\x5D\x3B"
+"\x3C\x42\x52\x3E\xA\x3C\x2F\x55\x4C\x3E\xA\x7D\x20\x2A\x3C\x55\x3E\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66"
+"\x6F\x3C\x2F\x55\x3E\x3B\xA\x3C\x2F\x55\x4C\x3E\xA\x3C\x42\x3E\x44\x45\x53\x43\x52\x49\x50\x54\x49\x4F"
+"\x4E\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\xA\x3C\x42\x3E\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x26"
+"\x67\x74\x3B\x3C\x55\x3E\x6F\x75\x74\x66\x64\x3C\x2F\x55\x3E\x3C\x2F\x42\x3E\x20\x3C\x55\x4C\x3E\x69\x73"
+"\x20\x74\x68\x65\x20\x66\x69\x6C\x65\x64\x65\x73\x63\x72\x69\x70\x74\x6F\x72\x20\x6F\x66\x20\x74\x68\x65"
+"\x20\x63\x75\x72\x72\x65\x6E\x74\x20\x6F\x75\x74\x70\x75\x74\x20\x73\x74\x72\x65\x61\x6D\x20\x28\x75\x73"
+"\x65\x66\x75\x6C\x20\x66\x6F\x72\x20\x63\x67\x69\x20\x68\x61\x6E\x64\x6C\x65\x72\x73\x20\x61\x6E\x64\x20"
+"\x66\x72\x69\x65\x6E\x64\x73\x29\x2E\x3C\x2F\x55\x4C\x3E\x3C\x42\x52\x3E\xA\x3C\x42\x3E\x43\x6C\x69\x65"
+"\x6E\x74\x49\x6E\x66\x6F\x2D\x26\x67\x74\x3B\x3C\x55\x3E\x69\x6E\x65\x74\x6E\x61\x6D\x65\x3C\x2F\x55\x3E"
+"\x3C\x2F\x42\x3E\x20\x3C\x55\x4C\x3E\x61\x20\x73\x74\x72\x69\x6E\x67\x20\x74\x6F\x20\x69\x6E\x65\x74\x6E"
+"\x61\x6D\x65\x20\x28\x69\x2E\x65\x2E\x20\x22\x31\x32\x37\x2E\x30\x2E\x30\x2E\x31\x22\x29\x3C\x2F\x55\x4C"
+"\x3E\x20\x3C\x42\x52\x3E\xA\x3C\x42\x3E\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x26\x67\x74\x3B\x3C"
+"\x55\x3E\x72\x65\x71\x75\x65\x73\x74\x3C\x2F\x55\x3E\x3C\x2F\x42\x3E\x20\x3C\x55\x4C\x3E\x69\x73\x20\x74"
+"\x68\x65\x20\x72\x65\x71\x75\x65\x73\x74\x65\x64\x20\x27\x66\x69\x6C\x65\x27\x20\x28\x69\x2E\x65\x2E\x20"
+"\x66\x6F\x72\x20\x22\x47\x45\x54\x20\x2F\x69\x6E\x64\x65\x78\x2E\x68\x74\x6D\x6C\x20\x48\x54\x54\x50\x2F"
+"\x31\x2E\x30\x5C\x72\x5C\x6E\x22\x20\x74\x68\x65\x20\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x26\x67"
+"\x74\x3B\x72\x65\x71\x75\x65\x73\x74\x20\x69\x73\x20\x22\x2F\x69\x6E\x64\x65\x78\x2E\x68\x74\x6D\x6C\x22"
+"\x29\x3C\x2F\x55\x4C\x3E\x3C\x42\x52\x3E\xA\x3C\x42\x3E\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x26"
+"\x67\x74\x3B\x3C\x55\x3E\x6D\x65\x74\x68\x6F\x64\x3C\x2F\x55\x3E\x3C\x2F\x42\x3E\x20\x3C\x55\x4C\x3E\x69"
+"\x73\x20\x74\x68\x65\x20\x72\x65\x71\x75\x65\x73\x74\x20\x6D\x65\x74\x68\x6F\x64\x20\x28\x22\x47\x45\x54"
+"\x22\x20\x6F\x72\x20\x22\x50\x4F\x53\x54\x22\x20\x65\x74\x63\x2E\x2E\x29\x3C\x2F\x55\x4C\x3E\x3C\x42\x52"
+"\x3E\xA\x3C\x42\x3E\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x26\x67\x74\x3B\x3C\x55\x3E\x75\x73\x65"
+"\x72\x3C\x2F\x55\x3E\x3C\x2F\x42\x3E\x20\x3C\x55\x4C\x3E\x41\x75\x74\x68\x52\x65\x61\x6C\x6D\x20\x75\x73"
+"\x65\x72\x6E\x61\x6D\x65\x3C\x2F\x55\x4C\x3E\x3C\x42\x52\x3E\xA\x3C\x42\x3E\x43\x6C\x69\x65\x6E\x74\x49"
+"\x6E\x66\x6F\x2D\x26\x67\x74\x3B\x3C\x55\x3E\x70\x61\x73\x73\x3C\x2F\x55\x3E\x3C\x2F\x42\x3E\x20\x3C\x55"
+"\x4C\x3E\x41\x75\x74\x68\x52\x65\x61\x6C\x6D\x20\x70\x61\x73\x73\x77\x6F\x72\x64\x3C\x2F\x55\x4C\x3E\x3C"
+"\x42\x52\x3E\xA\x3C\x42\x3E\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x26\x67\x74\x3B\x3C\x55\x3E\x48"
+"\x65\x61\x64\x65\x72\x28\x3C\x2F\x55\x3E\x63\x68\x61\x72\x20\x2A\x3C\x55\x3E\x68\x61\x6E\x64\x6C\x65\x3C"
+"\x2F\x55\x3E\x29\x3C\x2F\x42\x3E\x20\x3C\x55\x4C\x3E\x46\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x6F\x20\x70"
+"\x61\x72\x73\x65\x20\x74\x68\x65\x20\x68\x65\x61\x64\x65\x72\x2C\x20\x61\x6E\x64\x20\x72\x65\x74\x75\x72"
+"\x6E\x73\x20\x48\x65\x61\x64\x65\x72\x20\x69\x6E\x66\x6F\x72\x6D\x61\x74\x69\x6F\x6E\x20\x28\x69\x2E\x65"
+"\x2E\x20\x66\x6F\x72\x20\x22\x48\x6F\x73\x74\x3A\x20\x68\x74\x74\x70\x3A\x2F\x2F\x31\x32\x37\x2E\x30\x2E"
+"\x30\x2E\x31\x3A\x38\x31\x22\x20\x74\x68\x65\x20\x72\x65\x73\x75\x6C\x74\x20\x6F\x66\x20\x43\x6C\x69\x65"
+"\x6E\x74\x49\x6E\x66\x6F\x2D\x26\x67\x74\x3B\x48\x65\x61\x64\x65\x72\x28\x22\x48\x6F\x73\x74\x22\x29\x20"
+"\x69\x73\x20\x22\x68\x74\x74\x70\x3A\x2F\x2F\x31\x32\x37\x2E\x30\x2E\x30\x2E\x31\x3A\x38\x31\x22\x29\x20"
+"\x69\x66\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x20\x3C\x55\x3E\x68\x61\x6E\x64\x6C\x65\x3C\x2F\x55\x3E\x20"
+"\x69\x73\x20\x4E\x55\x4C\x4C\x20\x74\x68\x65\x6E\x20\x74\x68\x69\x73\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E"
+"\x20\x72\x65\x74\x75\x72\x6E\x73\x20\x77\x68\x6F\x6C\x65\x20\x48\x65\x61\x64\x65\x72\x20\x66\x72\x6F\x6D"
+"\x20\x63\x6C\x69\x65\x6E\x74\x3C\x2F\x55\x4C\x3E\x3C\x42\x52\x3E\xA\x3C\x42\x3E\x43\x6C\x69\x65\x6E\x74"
+"\x49\x6E\x66\x6F\x2D\x26\x67\x74\x3B\x3C\x55\x3E\x51\x75\x65\x72\x79\x28\x3C\x2F\x55\x3E\x63\x68\x61\x72"
+"\x20\x2A\x3C\x55\x3E\x68\x61\x6E\x64\x6C\x65\x3C\x2F\x55\x3E\x29\x3C\x2F\x42\x3E\x20\x3C\x55\x4C\x3E\x41"
+"\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x72\x65\x74\x75\x72\x6E\x73\x20\x74\x68\x65"
+"\x20\x71\x75\x65\x72\x79\x20\x76\x61\x6C\x75\x65\x20\x66\x72\x6F\x6D\x20\x74\x68\x65\x20\x62\x72\x6F\x77"
+"\x73\x65\x72\x20\x28\x69\x2E\x65\x20\x66\x6F\x72\x20\x74\x68\x65\x20\x72\x65\x71\x75\x65\x73\x74\x20\x22"
+"\x68\x74\x74\x70\x3A\x2F\x2F\x73\x6F\x6D\x65\x68\x6F\x73\x74\x2E\x6E\x65\x74\x2F\x72\x65\x71\x2E\x68\x74"
+"\x6D\x6C\x3F\x69\x64\x3D\x35\x26\x66\x3D\x31\x22\x2C\x20\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x26"
+"\x67\x74\x3B\x51\x75\x65\x72\x79\x28\x22\x69\x64\x22\x29\x20\x69\x73\x20\x22\x35\x22\x2E\x69\x66\x20\x61"
+"\x72\x67\x75\x6D\x65\x6E\x74\x20\x3C\x55\x3E\x68\x61\x6E\x64\x6C\x65\x3C\x2F\x55\x3E\x20\x69\x73\x20\x4E"
+"\x55\x4C\x4C\x20\x74\x68\x65\x6E\x20\x74\x68\x69\x73\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x72\x65\x74"
+"\x75\x72\x6E\x73\x20\x77\x68\x6F\x6C\x65\x20\x51\x75\x65\x72\x79\x20\x73\x74\x72\x69\x6E\x67\x20\x66\x72"
+"\x6F\x6D\x20\x63\x6C\x69\x65\x6E\x74\x3C\x42\x52\x3E\x69\x66\x20\x74\x68\x65\x20\x68\x61\x6E\x64\x6C\x65"
+"\x20\x68\x61\x76\x65\x20\x74\x68\x65\x20\x63\x68\x61\x72\x20\x23\x20\x66\x69\x72\x73\x74\x20\x28\x6C\x69"
+"\x6B\x65\x20\x22\x23\x68\x61\x6E\x64\x6C\x65\x22\x29\x20\x69\x74\x20\x72\x65\x74\x75\x72\x6E\x73\x20\x74"
+"\x68\x65\x20\x6E\x75\x6D\x62\x65\x72\x20\x6F\x66\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x73\x20\x28\x75\x73"
+"\x65\x66\x75\x6C\x6C\x20\x66\x6F\x72\x20\x63\x68\x65\x63\x6B\x62\x6F\x78\x65\x73\x20\x61\x6E\x64\x20\x65"
+"\x74\x63\x2E\x2E\x2E\x29\x20\x43\x68\x65\x63\x6B\x20\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F\x3F\x68\x65"
+"\x6C\x70\x3D\x65\x78\x61\x6D\x70\x6C\x65\x73\x23\x63\x68\x65\x63\x6B\x62\x6F\x78\x27\x3E\x63\x68\x65\x63"
+"\x6B\x62\x6F\x78\x20\x65\x78\x61\x6D\x70\x6C\x65\x3C\x2F\x61\x3E\x3C\x2F\x55\x4C\x3E\x3C\x42\x52\x3E\xA"
+"\x3C\x42\x3E\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x26\x67\x74\x3B\x3C\x55\x3E\x50\x6F\x73\x74\x28"
+"\x3C\x2F\x55\x3E\x63\x68\x61\x72\x20\x2A\x3C\x55\x3E\x68\x61\x6E\x64\x6C\x65\x3C\x2F\x55\x3E\x29\x3C\x2F"
+"\x42\x3E\x20\x3C\x55\x4C\x3E\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x72\x65\x74"
+"\x75\x72\x6E\x73\x20\x74\x68\x65\x20\x50\x6F\x73\x74\x20\x64\x61\x74\x61\x20\x66\x72\x6F\x6D\x20\x74\x68"
+"\x65\x20\x66\x6F\x72\x6D\x73\x20\x77\x69\x74\x68\x20\x6D\x65\x74\x68\x6F\x64\x20\x27\x50\x4F\x53\x54\x27"
+"\x2E\x20\x3C\x55\x3E\x68\x61\x6E\x64\x6C\x65\x3C\x2F\x55\x3E\x20\x69\x73\x20\x74\x68\x65\x20\x6E\x61\x6D"
+"\x65\x20\x6F\x66\x20\x73\x6F\x6D\x65\x20\x26\x6C\x74\x3B\x69\x6E\x70\x75\x74\x26\x67\x74\x3B\x20\x74\x61"
+"\x67\x2E\x69\x66\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x20\x3C\x55\x3E\x68\x61\x6E\x64\x6C\x65\x3C\x2F\x55"
+"\x3E\x20\x69\x73\x20\x4E\x55\x4C\x4C\x20\x74\x68\x65\x6E\x20\x74\x68\x69\x73\x20\x66\x75\x6E\x63\x74\x69"
+"\x6F\x6E\x20\x72\x65\x74\x75\x72\x6E\x73\x20\x77\x68\x6F\x6C\x65\x20\x50\x6F\x73\x74\x20\x64\x61\x74\x61"
+"\x20\x66\x72\x6F\x6D\x20\x63\x6C\x69\x65\x6E\x74\x3C\x42\x52\x3E\x69\x66\x20\x74\x68\x65\x20\x68\x61\x6E"
+"\x64\x6C\x65\x20\x68\x61\x76\x65\x20\x74\x68\x65\x20\x63\x68\x61\x72\x20\x23\x20\x66\x69\x72\x73\x74\x20"
+"\x28\x6C\x69\x6B\x65\x20\x22\x23\x68\x61\x6E\x64\x6C\x65\x22\x29\x20\x69\x74\x20\x72\x65\x74\x75\x72\x6E"
+"\x73\x20\x74\x68\x65\x20\x6E\x75\x6D\x62\x65\x72\x20\x6F\x66\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x73\x20"
+"\x28\x75\x73\x65\x66\x75\x6C\x6C\x20\x66\x6F\x72\x20\x63\x68\x65\x63\x6B\x62\x6F\x78\x65\x73\x20\x61\x6E"
+"\x64\x20\x65\x74\x63\x2E\x2E\x2E\x29\x20\x43\x68\x65\x63\x6B\x20\x3C\x61\x20\x68\x72\x65\x66\x3D\x27\x2F"
+"\x3F\x68\x65\x6C\x70\x3D\x65\x78\x61\x6D\x70\x6C\x65\x73\x23\x63\x68\x65\x63\x6B\x62\x6F\x78\x27\x3E\x63"
+"\x68\x65\x63\x6B\x62\x6F\x78\x20\x65\x78\x61\x6D\x70\x6C\x65\x3C\x2F\x61\x3E\x3C\x2F\x55\x4C\x3E\x3C\x42"
+"\x52\x3E\xA\x3C\x42\x3E\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x26\x67\x74\x3B\x3C\x55\x3E\x43\x6F"
+"\x6F\x6B\x69\x65\x28\x3C\x2F\x55\x3E\x63\x68\x61\x72\x20\x2A\x3C\x55\x3E\x68\x61\x6E\x64\x6C\x65\x3C\x2F"
+"\x55\x3E\x29\x3C\x2F\x42\x3E\x20\x3C\x55\x4C\x3E\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61"
+"\x74\x20\x72\x65\x74\x75\x72\x6E\x73\x20\x74\x68\x65\x20\x43\x6F\x6F\x6B\x69\x65\x20\x64\x61\x74\x61\x20"
+"\x66\x72\x6F\x6D\x20\x62\x72\x6F\x77\x73\x65\x72\x2E\x20\x69\x66\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x20"
+"\x3C\x55\x3E\x68\x61\x6E\x64\x6C\x65\x3C\x2F\x55\x3E\x20\x69\x73\x20\x4E\x55\x4C\x4C\x20\x74\x68\x65\x6E"
+"\x20\x74\x68\x69\x73\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x72\x65\x74\x75\x72\x6E\x73\x20\x77\x68\x6F"
+"\x6C\x65\x20\x43\x6F\x6F\x6B\x69\x65\x73\x74\x72\x69\x6E\x67\x20\x66\x72\x6F\x6D\x20\x63\x6C\x69\x65\x6E"
+"\x74\x3C\x2F\x55\x4C\x3E\x3C\x42\x52\x3E\xA\x3C\x42\x3E\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x26"
+"\x67\x74\x3B\x3C\x55\x3E\x43\x6F\x6E\x66\x28\x3C\x2F\x55\x3E\x63\x68\x61\x72\x20\x2A\x20\x3C\x55\x3E\x74"
+"\x6F\x70\x69\x63\x3C\x2F\x55\x3E\x2C\x63\x68\x61\x72\x20\x2A\x3C\x55\x3E\x68\x61\x6E\x64\x6C\x65\x3C\x2F"
+"\x55\x3E\x29\x3C\x2F\x42\x3E\x20\x3C\x55\x4C\x3E\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61"
+"\x74\x20\x72\x65\x74\x75\x72\x6E\x73\x20\x61\x6E\x20\x76\x61\x6C\x75\x65\x20\x66\x72\x6F\x6D\x20\x61\x20"
+"\x3C\x55\x3E\x6B\x65\x79\x3C\x2F\x55\x3E\x20\x69\x6E\x20\x3C\x55\x3E\x74\x6F\x70\x69\x63\x3C\x2F\x55\x3E"
+"\x20\x69\x6E\x20\x74\x68\x65\x20\x63\x6F\x6E\x66\x69\x67\x20\x66\x69\x6C\x65\x20\x69\x66\x20\x75\x73\x65"
+"\x64\x3C\x2F\x55\x4C\x3E\x3C\x42\x52\x3E\xA\x3C\x42\x3E\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x26"
+"\x67\x74\x3B\x3C\x55\x3E\x4D\x75\x6C\x74\x69\x50\x61\x72\x74\x28\x3C\x2F\x55\x3E\x63\x68\x61\x72\x20\x2A"
+"\x3C\x55\x3E\x68\x61\x6E\x64\x6C\x65\x3C\x2F\x55\x3E\x29\x3C\x2F\x42\x3E\x20\x3C\x55\x4C\x3E\x41\x20\x66"
+"\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x72\x65\x74\x75\x72\x6E\x73\x20\x61\x20\x64\x61\x74"
+"\x61\x20\x73\x74\x72\x75\x63\x74\x75\x72\x65\x20\x66\x72\x6F\x6D\x20\x74\x68\x65\x20\x66\x6F\x72\x6D\x73"
+"\x20\x77\x69\x74\x68\x20\x6D\x65\x74\x68\x6F\x64\x20\x27\x50\x4F\x53\x54\x27\x20\x61\x6E\x64\x20\x65\x6E"
+"\x63\x74\x79\x70\x65\x3D\x27\x6D\x75\x6C\x74\x69\x70\x61\x72\x74\x2F\x66\x6F\x72\x6D\x2D\x64\x61\x74\x61"
+"\x27\x20\x28\x75\x73\x65\x66\x75\x6C\x20\x66\x6F\x72\x20\x75\x70\x6C\x6F\x61\x64\x69\x6E\x67\x20\x66\x69"
+"\x6C\x65\x73\x29\x2E\x20\x3C\x55\x3E\x68\x61\x6E\x64\x6C\x65\x3C\x2F\x55\x3E\x20\x69\x73\x20\x74\x68\x65"
+"\x20\x6E\x61\x6D\x65\x20\x6F\x66\x20\x73\x6F\x6D\x65\x20\x26\x6C\x74\x3B\x69\x6E\x70\x75\x74\x26\x67\x74"
+"\x3B\x20\x74\x61\x67\x2E\x3C\x42\x52\x3E\x3C\x42\x52\x3E\xA\x74\x68\x65\x20\x73\x74\x72\x75\x63\x74\x75"
+"\x72\x65\x20\x69\x73\x3C\x42\x52\x3E\xA\x73\x74\x72\x75\x63\x74\x20\x5F\x4D\x75\x6C\x74\x69\x50\x61\x72"
+"\x74\x20\x7B\xA\x3C\x55\x4C\x3E\xA\x63\x68\x61\x72\x20\x2A\x3C\x55\x3E\x69\x64\x3C\x2F\x75\x3E\x3B\x3C"
+"\x42\x52\x3E\xA\x63\x68\x61\x72\x20\x2A\x3C\x55\x3E\x64\x61\x74\x61\x3C\x2F\x55\x3E\x3B\x3C\x42\x52\x3E"
+"\xA\x75\x6E\x73\x69\x67\x6E\x65\x64\x20\x69\x6E\x74\x20\x3C\x55\x3E\x73\x69\x7A\x65\x3C\x2F\x55\x3E\x3B"
+"\x3C\x42\x52\x3E\xA\x63\x68\x61\x72\x20\x2A\x3C\x55\x3E\x66\x69\x6C\x65\x6E\x61\x6D\x65\x3C\x2F\x55\x3E"
+"\x3B\x3C\x42\x52\x3E\xA\x76\x6F\x69\x64\x20\x2A\x3C\x55\x3E\x70\x61\x64\x3C\x2F\x55\x3E\x3B\x3C\x42\x52"
+"\x3E\xA\x3C\x2F\x55\x4C\x3E\xA\x7D\x3B\x3C\x42\x52\x3E\xA\x74\x6F\x20\x62\x65\x20\x75\x73\x65\x64\x20"
+"\x61\x73\x20\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x26\x67\x74\x3B\x3C\x55\x3E\x4D\x75\x6C\x74\x69"
+"\x50\x61\x72\x74\x3C\x2F\x55\x3E\x28\x22\x66\x69\x6C\x65\x31\x22\x29\x2E\x3C\x55\x3E\x64\x61\x74\x61\x3C"
+"\x2F\x55\x3E\x3B\x20\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x26\x67\x74\x3B\x3C\x55\x3E\x4D\x75\x6C"
+"\x74\x69\x50\x61\x72\x74\x3C\x2F\x55\x3E\x28\x22\x66\x69\x6C\x65\x31\x22\x29\x2E\x3C\x55\x3E\x73\x69\x7A"
+"\x65\x3C\x2F\x55\x3E\x3B\x20\x43\x6C\x69\x65\x6E\x74\x49\x6E\x66\x6F\x2D\x26\x67\x74\x3B\x3C\x55\x3E\x4D"
+"\x75\x6C\x74\x69\x50\x61\x72\x74\x3C\x2F\x55\x3E\x28\x22\x66\x69\x6C\x65\x31\x22\x29\x2E\x3C\x55\x3E\x66"
+"\x69\x6C\x65\x6E\x61\x6D\x65\x3C\x2F\x55\x3E\x3B\xA\x3C\x2F\x55\x4C\x3E\xA\xA\x3C\x2F\x55\x4C\x3E\xA"
+"\x3C\x48\x52\x3E\x3C\x42\x52\x3E\xA\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x63\x6F\x6E\x66\x69\x67\x66\x69\x6C"
+"\x65\x3E\x3C\x42\x3E\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37\x37\x27\x3E"
+"\x54\x68\x65\x20\x63\x6F\x6E\x66\x69\x67\x20\x66\x69\x6C\x65\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E"
+"\x3C\x42\x52\x3E\x3C\x42\x52\x3E\xA\x3C\x55\x4C\x3E\x74\x68\x65\x20\x63\x6F\x6E\x66\x69\x67\x20\x66\x69"
+"\x6C\x65\x20\x69\x73\x20\x75\x73\x65\x64\x20\x61\x73\x3C\x42\x52\x3E\x3C\x42\x52\x3E\xA\x3C\x50\x52\x45"
+"\x3E\xA\x5B\x54\x4F\x50\x49\x43\x5D\xA\x4B\x45\x59\x3D\x56\x41\x4C\x55\x45\xA\xA\x6C\x69\x62\x77\x65"
+"\x62\x73\x65\x72\x76\x65\x72\x20\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73\x20\x6D\x75\x73"
+"\x74\x20\x62\x65\x20\x69\x6E\x20\x74\x6F\x70\x69\x63\x20\x4C\x49\x42\x57\x45\x42\x53\x45\x52\x56\x45\x52"
+"\x20\x61\x73\x3A\xA\x5B\x4C\x49\x42\x57\x45\x42\x53\x45\x52\x56\x45\x52\x5D\xA\x4C\x4F\x47\x3D\x68\x65"
+"\x6C\x70\x2E\x6C\x6F\x67\x20\xA\x50\x4F\x52\x54\x3D\x38\x30\xA\x55\x53\x45\x53\x53\x4C\x3D\x31\xA\x43"
+"\x45\x52\x54\x46\x49\x4C\x45\x3D\x66\x6F\x6F\x63\x65\x72\x74\x2E\x70\x6D\xA\x4D\x49\x4D\x45\x46\x49\x4C"
+"\x45\x3D\x2F\x65\x74\x63\x2F\x6D\x69\x6D\x65\x2E\x74\x79\x70\x65\x73\xA\x4C\x4F\x43\x41\x4C\x3D\x31\xA"
+"\xA\x4C\x4F\x47\x20\x2D\x3E\x20\x74\x68\x65\x20\x6C\x6F\x67\x20\x66\x69\x6C\x65\xA\x50\x4F\x52\x54\x20"
+"\x2D\x3E\x20\x74\x68\x65\x20\x6C\x69\x73\x74\x65\x6E\x20\x70\x6F\x72\x74\x20\x74\x68\x61\x74\x20\x77\x69"
+"\x6C\x6C\x20\x62\x65\x20\x75\x73\x65\x64\x20\x66\x6F\x72\x20\x74\x63\x70\x20\x63\x6F\x6E\x6E\x65\x63\x74"
+"\x69\x6F\x6E\x73\xA\xA\x55\x53\x45\x53\x53\x4C\x20\x2D\x3E\x20\x74\x68\x65\x20\x73\x73\x6C\x20\x66\x6C"
+"\x61\x67\x20\x69\x66\x20\x79\x6F\x75\x20\x77\x61\x6E\x74\x20\x74\x6F\x20\x75\x73\x65\x20\x6F\x70\x65\x6E"
+"\x73\x73\x6C\x20\x66\x6F\x72\x20\x73\x65\x63\x75\x72\x65\x20\x73\x65\x72\x76\x65\x72\x20\x28\x68\x74\x74"
+"\x70\x73\x29\xA\x43\x45\x52\x54\x46\x49\x4C\x45\x20\x2D\x3E\x20\x74\x68\x65\x20\x66\x69\x6C\x65\x20\x74"
+"\x68\x61\x74\x20\x63\x6F\x6E\x74\x61\x69\x6E\x73\x20\x63\x65\x72\x74\x69\x66\x69\x63\x61\x74\x65\x20\x66"
+"\x6F\x72\x20\x73\x73\x6C\x20\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x73\xA\x4D\x49\x4D\x45\x46\x49\x4C"
+"\x45\x20\x2D\x3E\x20\x74\x68\x65\x20\x66\x69\x6C\x65\x20\x74\x68\x61\x74\x20\x63\x6F\x6E\x74\x61\x69\x6E"
+"\x73\x20\x6D\x69\x6D\x65\x2E\x74\x79\x70\x65\x73\x20\x73\x69\x6D\x69\x6C\x65\x72\x20\x74\x6F\x20\x61\x70"
+"\x61\x63\x68\x65\x20\x6D\x69\x6D\x65\x66\x69\x6C\x65\xA\x4C\x4F\x43\x41\x4C\x20\x2D\x3E\x20\x6F\x6E\x6C"
+"\x79\x20\x61\x63\x63\x65\x70\x74\x20\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x73\x20\x66\x72\x6F\x6D\x20"
+"\x31\x32\x37\x2E\x30\x2E\x30\x2E\x31\xA\xA\x3C\x2F\x50\x52\x45\x3E\xA\x3C\x2F\x55\x4C\x3E\xA\xA\x3C"
+"\x2F\x66\x6F\x6E\x74\x3E\xA\xA\xA\xA";
+
+#endif


Property changes on: GNUnet/libwebserver/contrib/help/functions.h
___________________________________________________________________
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/contrib/help/help.c
===================================================================
--- GNUnet/libwebserver/contrib/help/help.c     2006-08-18 20:37:47 UTC (rev 
3245)
+++ GNUnet/libwebserver/contrib/help/help.c     2006-08-18 21:41:52 UTC (rev 
3246)
@@ -0,0 +1,421 @@
+#include "web_server.h"
+
+#include <string.h>
+#include <signal.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include "info.h"
+#include "functions.h"
+#include "examples.h"
+#include "security.h"
+
+struct web_server server;
+
+
+#ifdef WIN32
+#include <windows.h>
+#endif
+
+
+int PORT=81;
+
+
+void teste1() {
+       printf("Content-type: text/html\r\n\r\n");
+       printf("here's location:<BR>\n");
+       printf("%s\r\n",ClientInfo->Header("Location"));
+       
printf("NOTHING=%s\n<BR>",ClientInfo->Conf("[PERSONAL_CONF]","NOTHING"));
+       printf("IP=%s\n<BR>",ClientInfo->Conf("[PERSONAL_CONF]","IP"));
+       printf("MOST=%s\n<BR>",ClientInfo->Conf("[PERSONAL_CONF]","MOST"));
+       printf("IP=%s\n<BR>",ClientInfo->Conf("[LIBWEBSERVER]","IP"));
+       printf("Connection: %s\n",ClientInfo->Header("Connection"));
+};
+
+void varteste() {
+       web_client_setvar("bg",ClientInfo->Conf("PAGE_1","background"));
+       web_client_setvar("pata","#00FF00");
+       printf("Content-type: text/html\r\n\r\n");
+       printf("<HR>\n");
+       printf("$;pata;=\"$pata;\"");
+       printf("<B>&lt;$pata;BODY bgcolor=\"$pata;\"&gt;</B> $ (prototipe 
0.5.1)<BR>\n");
+       printf("Luis Figueiredo$pata;coninhas\r\n");
+       
+};
+       
+void teste() {
+       int i=0;
+       
+       web_client_setcookie("caos","teste da noia",NULL,NULL,NULL,0);
+               
+       printf("content-type: text/html\r\n\r\n");
+       printf("hal is \"%s\" hallo is 
\"%s\"<BR>\n",ClientInfo->Post("hal"),ClientInfo->Post("hallo"));
+       printf("hal is \"%s\" hallo is 
\"%s\"<BR>\n",ClientInfo->Post("hal"),ClientInfo->Post("hallo"));
+       printf("<form method=post>\n");
+       printf("<input type=text name=hal 
value='%s'>\n",ClientInfo->Cookie("stdio"));
+       
web_client_setcookie("teste",ClientInfo->Post("hallo"),"+1m",NULL,NULL,0);
+       printf("<input type=text name=hallo 
value='%s'>\n",ClientInfo->Cookie("teste"));
+       printf("<input type=submit name=send value='POST'>\n");
+       printf("</form>\n");
+       
+       printf("<form method=query>\n");
+       for (i=0;i<5;i++) {
+               printf("<input type=checkbox name=teste 
value='%d'>%d<BR>\n",i,i);
+       };
+       printf("<input type=submit name=send1 value='SEND'>\n");
+       printf("</form>\n");
+       printf("You choose: ");
+       printf("%d numbers: \n",ClientInfo->Query("#teste"));
+       for(i=0;i<(int)ClientInfo->Query("#teste");i++){
+               printf("%s,",ClientInfo->Query("teste"));
+       };
+       web_client_setcookie("quatro","ratata","+1m","/","127.0.0.1",0);
+       printf("...<BR>");
+       printf("<form method=post>\n");
+       for (i=0;i<5;i++) {
+               printf("<input type=checkbox name=teste value='%d'>post 
%d<BR>\n",i,i);
+       };
+       printf("<input type=submit name=send1 value='SEND'>\n");
+       printf("</form>\n");
+       printf("You choose: ");
+       web_client_setcookie("tres","ratata","+1m",NULL,NULL,0);
+       printf("%d numbers: ",ClientInfo->Post("#teste"));
+       for (i=0;i<(int)ClientInfo->Post("#teste");i++) {
+               printf("%s,",ClientInfo->Post("teste"));
+       };
+       printf("...<BR>");
+       web_client_deletecookie("cinco");
+       printf("<form method=query>\n");
+       printf("<input type=submit name=test value='pipi'><BR>\n");
+       printf("</form>\n");
+       printf("The value of test is '%s'<BR>\n",ClientInfo->Query("test"));
+       printf("The value of test is '%s'<BR>\n",ClientInfo->Query("test"));
+       printf("The value of test is '%s'<BR>\n",ClientInfo->Query("test"));
+       
printf("ClientInfo->Cookie(\"teste\")='%s'<BR>\n",ClientInfo->Cookie("teste"));
+       
printf("ClientInfo->Cookie(\"stdio\")='%s'<BR>\n",ClientInfo->Cookie("stdio"));
+       
printf("ClientInfo->Cookie(\"merdinha\")='%s'<BR>\n",ClientInfo->Cookie("merdinha"));
+       
printf("ClientInfo->Cookie(\"activo\")='%s'<BR>\n",ClientInfo->Cookie("activo"));
+       
printf("ClientInfo->Cookie(\"caos\")='%s'<BR>\n",ClientInfo->Cookie("caos"));
+       
printf("ClientInfo->Cookie(\"caos\")='%s'<BR>\n",ClientInfo->Cookie("caos"));
+       printf("Method is %s\n<BR>",ClientInfo->method);
+       printf("Inetaddr=%s\n<BR>",ClientInfo->inetname);
+       
+       for(i=0;i<10;i++) {
+               
printf("<BR>ClientInfo->Post(\"teste\")='%s'\n",ClientInfo->Post("teste"));
+       };
+       
printf("<BR>ClientInfo->Cookie(NULL)=\"%s\"<BR>",ClientInfo->Cookie(NULL));
+       printf("<BR>ClientInfo->Post(NULL)=\"%s\"<BR>",ClientInfo->Post(NULL));
+       
printf("<BR>ClientInfo->Query(NULL)=\"%s\"<BR>",ClientInfo->Query(NULL));
+       printf("<BR>ClientInfo->Query(\"teste 
0\")=\"%s\"<BR>",ClientInfo->Query("teste 0"));
+       
printf("<PRE>ClientInfo->Header(NULL)=\"%s\"</PRE>\r\n",ClientInfo->Header(NULL));
+       
+};
+
+
+void links() {
+       printf("[<a href='/'>main</a>] [<a href='/?help=info'>info</a>] [<a 
href='/?help=functions'>functions</a>] [<a href='/?help=examples'>examples</a>] 
[<a href='/?help=security'>security</a>] [<a href='/?help=Authors'>authors</a>] 
");
+};
+
+void startpage(char *topic) {
+       printf("Content-type: text/html\r\n\r\n");
+       printf("<HTML>\n<body bgcolor='EFEFFF'>\n<CENTER>\n<TABLE><TR><TD 
align=center>\n<a href='http://libwebserver.sourceforge.net'><img border=0 
src='/libwebserver.gif'></a>\n</TD><TR><TR><TD align=center>\n<font 
face='Verdana'><B>HELP<BR>(%s)</B></font>\n</TD></TR></TABLE>\n</CENTER>\n",topic);
+       links();        
+       printf("<HR><BR>\n");
+};
+void endpage() {
+       printf("<HR>");
+       links();        
+       printf("<p align=right> <small> by Luis Figueiredo (<a 
href='mailto:address@hidden'>address@hidden</a>) 
(%s)</BODY></HTML>\n",_libwebserver_version);
+};
+
+
+
+
+
+
+
+
+
+//Johannes E. Schindelin // new on 0.4.0
+void hello_world() {
+       startpage("hello world example");
+       printf("Hello, World!\r\n");
+       endpage();
+}
+//
+
+
+// NEW on 0.4.1
+void checkbox() {
+       int i=0;
+       char *txt[]={"one","two","three","four","five"};
+       startpage("checkbox example");
+       printf("<form method=query>\n");
+       for(i=0;i<5;i++) {
+               printf("<input type=checkbox name=number value='%s'\n> 
%s<BR>",txt[i],txt[i]);
+       };
+       printf("<input type=submit name=send value=' SEND '>\n");
+       printf("</form>\n");
+       printf("You have choosen <font color='FF0000'>%d</font> numbers: 
\n",ClientInfo->Query("#number"));
+       for(i=0;i<(int)ClientInfo->Query("#number");i++) {
+               printf("<b>%s</b>,\n",ClientInfo->Query("number"));
+       };
+       printf("...<BR>");
+       endpage();
+};
+
+       
+
+// NEW on 0.4.0
+void cookie() {
+       if(strlen(ClientInfo->Post("user"))) 
+               
web_client_setcookie("username",ClientInfo->Post("user"),"+15M",NULL,NULL,0);
+       startpage("Cookie example");
+       printf("<form method='POST'>\n");
+       printf("<input type=text name='user' 
value='%s'>\r\n<BR>",ClientInfo->Cookie("username"));
+       printf("<input type=submit name='send' value=' GO! '><BR>\r\n");
+       printf("</form>\n");
+       endpage();
+};
+//
+
+void logfile() {
+       startpage("logfile");
+       printf("<PRE>\n");
+       web_client_addfile(server.logfile);
+       printf("</PRE>\n");
+       endpage();
+};
+
+struct image {
+       char *data;
+       size_t size;
+} image={NULL,0};
+
+
+void imageout() {
+       if(strlen(ClientInfo->Query("img"))) {
+               if(image.data!=NULL) {
+                       printf("Content-type: image/jpeg\r\n\r\n");
+                       fwrite(image.data,image.size,1,stdout);
+               };
+               return;
+       };
+
+       startpage("Image example");
+       printf("<form action='/image' method='POST' 
enctype='multipart/form-data'>\n");
+       printf("<input type=file name=image><BR>\n");
+       printf("<input type=submit name='GOO' value='See'>\n");
+       printf("</form>\n");
+       if(strlen(ClientInfo->MultiPart("image").data)) {
+               printf("%s<BR><img 
src='/image?img=%s.jpg'>\n",ClientInfo->MultiPart("image").filename,ClientInfo->MultiPart("image").filename);
+               free(image.data);
+               image.data=malloc(ClientInfo->MultiPart("image").size+1);
+               
memcpy(image.data,ClientInfo->MultiPart("image").data,ClientInfo->MultiPart("image").size);
+               image.size=ClientInfo->MultiPart("image").size;
+       }else {
+               free(image.data);
+               image.data=NULL;
+       };
+       endpage();
+};
+
+#define GIFSIDE 320
+char gifdata[GIFSIDE*GIFSIDE];
+void outgif() {
+       float i;
+       int x,y,xc,yc;
+       char color;
+       web_client_gifsetpalette("EGA");
+       if(*ClientInfo->Query("img")!=0) {
+               printf("Content-type: image/gif\r\n\r\n");
+               if(!strcmp(ClientInfo->Query("img"),"circle")) {
+                       xc=atoi(ClientInfo->Query("x"))%GIFSIDE;
+                       yc=atoi(ClientInfo->Query("y"))%GIFSIDE;
+                       color=(char)(rand()%15)+1;
+                       for(i=0;i<6.28;i+=(float)0.01) {
+                               x=(int)((GIFSIDE+xc+cos(i)*10))%GIFSIDE; // 
Johannes E. Schindelin bugfix
+                               y=(int)((GIFSIDE+yc+sin(i)*10))%GIFSIDE; // 
Johannes E. Schindelin bugfix
+                               gifdata[x+(y*GIFSIDE)]=color;
+                       };
+               };
+               web_client_gifoutput(gifdata,GIFSIDE,GIFSIDE,0);
+       };
+       startpage("Gif example");
+       printf("<center>Generated a circle (click inside the image)<BR>\n");
+       printf("Pressed 
x=%s,y=%s<BR>\n",ClientInfo->Query("x"),ClientInfo->Query("y"));
+       printf("<form><input type=image border=0 
src='/gif?img=circle&x=%s&y=%s'></form></CENTER>\n",ClientInfo->Query("x"),ClientInfo->Query("y"));
+       endpage();
+};
+
+
+void urlauthenticate() {
+       if(!strlen(ClientInfo->user) || !strlen(ClientInfo->pass) &&
+               strcmp(ClientInfo->user,"username") || 
strcmp(ClientInfo->pass,"password")) { // you can read things from a auth file
+               web_client_HTTPdirective("HTTP/1.1 401 Authorization 
Required\r\n"
+                       "WWW-Authenticate: Basic realm=\"This site info\"");
+               startpage("Authenticate example");
+               printf("<CENTER><font color='FF0000'>Access 
denied</font></CENTER>\n");
+               endpage();
+               return;
+       }
+       startpage("Authenticate example");
+       printf("You entered in your area\n");
+       endpage();
+};
+
+
+void help() {
+       // info
+       // engine  // removed (read the source)
+       // functions help
+       // functionall examples
+       // security
+       // regards
+       // authors
+       if(!strlen(ClientInfo->Query("help"))) {        
+               startpage("Table of contents");
+               printf("<B>\n");
+               printf("<ol>\n");
+               printf("<li><a href='/?help=info'>libwebserver 
info</a></li>\n");
+               printf("<ul><li><a href='/?help=info#what'>What's libwebserver 
for?</a></li></ul>\n");
+               printf("<ul><li><a href='/?help=info#who'>Who's supposed to use 
libwebserver?</a></li></ul>\n"); // Johannes E. Schindelin spellcheck
+               printf("<ul><li><a href='/?help=info#when'>When am i supposed 
to use libwebserver?</a></li></ul>\n"); // Johannes E. Schindelin spellcheck
+               printf("<ul><li><a href='/?help=info#server_scripts'>Is there 
support for server scripts such as .php .cgi .asp?</a></li></ul>\n"); // 
Johannes E. Schindelin spellcheck
+               printf("<li><a href='/?help=functions'>libwebserver 
functions</a></li>\n");     
+               printf("<ul><li><a 
href='/?help=functions#web_server_init'>web_server_init()</a></li></ul>\n"); 
+               printf("<ul><li><a 
href='/?help=functions#web_server_addhandler'>web_server_addhandler()</a></li></ul>\n");
     
+               printf("<ul><li><a 
href='/?help=functions#web_server_aliasdir'>web_server_aliasdir()</a><small>(new)</small></li></ul>\n");
     
+               printf("<ul><li><a 
href='/?help=functions#web_server_run'>web_server_run()</a></li></ul>\n");   
+               printf("<ul><li><a 
href='/?help=functions#web_server_getconf'>web_server_getconf()</a></li></ul>\n");
   
+               printf("<ul><li><a 
href='/?help=functions#web_server_useSSLcert'>web_server_useSSLcert()</a></li></ul>\n");
     
+               printf("<ul><li><a 
href='/?help=functions#web_server_useMIMEfile'>web_server_useMIMEfile()</a><small>(new)</small></li></ul>\n");
       
+               printf("<ul><li><a 
href='/?help=functions#web_client_addstream'>web_client_addstream() 
</a><small><small>(obsolet, no longer in use in 0.3.4) use web_client_addfile 
instead</small></small></li></ul>\n");     
+               printf("<ul><li><a 
href='/?help=functions#web_client_addfile'>web_client_addfile()</a></li></ul>\n");
   
+               printf("<ul><li><a 
href='/?help=functions#web_client_gifoutput'>web_client_gifoutput()</a><small>(changed)</small></li></ul>\n");
       
+               printf("<ul><li><a 
href='/?help=functions#web_client_gifsetpalette'>web_client_gifsetpalette()</a><small>(new)</small></li></ul>\n");
   
+               printf("<ul><li><a 
href='/?help=functions#web_client_setcookie'>web_client_setcookie()</a></li></ul>\n");
       
+               printf("<ul><li><a 
href='/?help=functions#web_client_deletecookie'>web_client_deletecookie()</a></li></ul>\n");
 
+               printf("<ul><li><a 
href='/?help=functions#web_client_setvar'>web_client_setvar()</a></li></ul>\n");
     
+               printf("<ul><li><a 
href='/?help=functions#web_client_getvar'>web_client_getvar()</a></li></ul>\n");
     
+               printf("<ul><li><a 
href='/?help=functions#web_client_delvar'>web_client_delvar()</a></li></ul>\n");
     
+               printf("<ul><li><a 
href='/?help=functions#web_client_HTTPdirective'>web_client_HTTPdirective()</a></li></ul>\n");
       
+               printf("<ul><li><a 
href='/?help=functions#web_client_contenttype'>web_client_contenttype()</a><small>(new)</small></li></ul>\n");
       
+               printf("<ul><li><a 
href='/?help=functions#web_log'>web_log()</a></li></ul>\n"); 
+               printf("<ul><li><a 
href='/?help=functions#ClientInfo'>ClientInfo</a></li></ul>\n");     
+               printf("<ul><li><a href='/?help=functions#configfile'>The 
config file</a></li></ul>\n");        
+               printf("<li><a href='/?help=examples'>libwebserver 
examples</a></li>\n");
+               printf("<ul><li><a href='/?help=examples#helloworld'>Hello, 
World!</a></li></ul>\n");
+               printf("<ul><li><a href='/?help=examples#logfile'>Show's log 
file</a></li></ul>\n");
+               printf("<ul><li><a href='/?help=examples#imageup'>Image 
Uploader</a></li></ul>\n");
+               printf("<ul><li><a 
href='/?help=examples#auth'>Authentication</a></li></ul>\n");
+               printf("<ul><li><a href='/?help=examples#ssl'>Openssl for 
(https)</a></li></ul>\n");
+               printf("<ul><li><a href='/?help=examples#outgif'>Gif 
generator</a><small>Changed</small></li></ul>\n");
+               printf("<ul><li><a 
href='/?help=examples#cookie'>Cookies</a></li></ul>\n");
+               printf("<ul><li><a 
href='/?help=examples#checkbox'>checkbox</a></li></ul>\n");
+               printf("<ul><li><a href='/?help=examples#confexample'>Config 
example</a></li></ul>\n");
+               printf("<ul><li><a href='/brokenlink'>Broken 
link</a></li></ul>\n");
+               printf("<ul><li><a href='/fs/'>aliasdir</a></li></ul>\n");
+               printf("<li><a href='/?help=security'>libwebserver 
security</a></li>\n");
+               printf("<ul><li><a href='/?help=security#safe'>It is safe to 
use?</a></li></ul>\n"); // Johannes E. Schindelin spellcheck
+               printf("<ul><li><a href='/?help=security#certificate'>How do I 
create my own certificate?</a></li></ul>\n"); // Johannes E. Schindelin made
+               printf("<ul><li><a href='/?help=security#racecondition'>Avoid 
race condition problems</a></li></ul>\n"); // Johannes E. Schindelin made
+               
+               printf("<li><a href='/?help=Authors'>Authors</a></li>\n");
+               printf("</ol>\n");
+               printf("</B>\n");
+               endpage();      
+               return; 
+       };
+
+       startpage(ClientInfo->Query("help"));
+       if(!strcmp(ClientInfo->Query("help"),"info")) {
+               fwrite(info,sizeof(info),1,stdout);
+               //web_client_addfile("help.html/info.html");
+       };
+       if(!strcmp(ClientInfo->Query("help"),"security")) {
+               fwrite(security,sizeof(security),1,stdout);
+               //web_client_addfile("help.html/security.html");
+       };
+       if(!strcmp(ClientInfo->Query("help"),"functions")) {
+               fwrite(functions,sizeof(functions),1,stdout);
+               //web_client_addfile("help.html/functions.html");
+       };
+       if(!strcmp(ClientInfo->Query("help"),"examples")) {
+               fwrite(examples,sizeof(examples),1,stdout);
+               //web_client_addfile("help.html/examples.html");
+       };
+       if(!strcmp(ClientInfo->Query("help"),"Authors")) {
+               printf("Luis Figueiredo (<a 
href='mailto:address@hidden'>address@hidden</a>) - Main programmer, 
designer<BR><BR>\n");
+               printf("People who contributed:<BR>\n");
+               printf("<UL>Jo�o Luis Marques (<a 
href='mailto:address@hidden'>address@hidden</a>)<BR>\n");
+               printf("<UL>minor bug reported (redirectors, 
stdout)</UL></UL>\n");
+               printf("<UL>'oddsock' (<a 
href='mailto:address@hidden'>address@hidden</a>)<BR>\n");
+               printf("<UL>Licensing tip, and minor bug reported (segv in 
querystring)</UL></UL>\n");
+               printf("<UL>Rocco Carbone (<a 
href='mailto:address@hidden'>address@hidden</a>)<BR>\n");
+               printf("<UL>Return code for web_server_run tip</UL></UL>\n");
+               printf("<UL>Johannes E. Schindelin (<a 
href='mailto:address@hidden'>address@hidden</a>)<BR>\n");
+               printf("<UL>Spell checking, Makefile portability, and security 
'How do I create my own certificate?'<BR>\n");
+               printf("bugfixes, example 'hello world!'</UL></UL>\n");
+               printf("<UL>Richard Offer (<a 
href='mailto:address@hidden'>address@hidden</a>)<BR>\n");
+               printf("<UL>checkboxes, (multiple variables) tip</UL></UL>\n");
+               printf("<UL>Sven Anders (<a 
href='mailto:address@hidden'>address@hidden</a>)<BR>\n");
+               printf("<UL>Created a new web_client_setcookie()(i made some 
changes)</UL></UL>\n");
+               printf("<UL>Hilobok Andrew (<a 
href='mailto:address@hidden'>address@hidden</a>)<BR>\n");
+               printf("<UL>FreeBSD portability</UL></UL>\n");
+       };
+       endpage();      
+};
+
+
+
+void confexample() {
+       startpage("confexample");
+       printf("<PRE>\n");
+       web_client_addfile(server.conffile);
+       printf("</PRE>\n");
+       
printf("ClientInfo->Conf(\"PERSONAL_CONF\",\"PORT\")->%s<BR>\n",ClientInfo->Conf("PERSONAL_CONF","PORT"));
+       
printf("ClientInfo->Conf(\"PERSONAL_CONF\",\"IP\")->%s<BR>\n",ClientInfo->Conf("PERSONAL_CONF","IP"));
+       
printf("ClientInfo->Conf(\"LIBWEBSERVER\",\"PORT\")->%s<BR>\n",ClientInfo->Conf("LIBWEBSERVER","PORT"));
+       endpage();
+
+};
+
+
+
+
+
+int main() {
+       
+#ifdef DEBUG   
+       //FILE *err=freopen("debug.log","w",stderr);
+#endif // DEBUG
+       
+       memset(gifdata,0,GIFSIDE*GIFSIDE);
+       
while(!web_server_init(&server,PORT,"help.cfg",WS_USEEXTCONF|WS_USELEN))PORT++;
+       web_server_useMIMEfile(&server,"mime.types");
+
+       //web_server_addhandler(&server,"* /",skip,0);
+       web_server_addhandler(&server,"* /",help,0);
+       web_server_addhandler(&server,"* /teste",teste,WS_LOCAL);
+       web_server_addhandler(&server,"* 
/varteste",varteste,WS_DYNVAR|WS_USELEN);
+       web_server_addhandler(&server,"* /teste1",teste1,WS_LOCAL);
+       web_server_addhandler(&server,"* /hello",hello_world,0);
+       web_server_addhandler(&server,"* /log",logfile,WS_USELEN); // turn off 
global flag
+       web_server_addhandler(&server,"* /image",imageout,0);
+       web_server_addhandler(&server,"* /gif",outgif,0);
+       web_server_addhandler(&server,"* /auth",urlauthenticate,0);
+       web_server_addhandler(&server,"* /cookie",cookie,0);
+       web_server_addhandler(&server,"* /checkbox",checkbox,0);
+       web_server_addhandler(&server,"* /confexample",confexample,0);
+       
+       web_server_aliasdir(&server,"fs","/",0); 
+       _tmpnameprefix="lws";
+       printf("http://localhost:%d\n",server.port);
+       //putenv("TEMP=c:\\temp");
+       for(;;) {
+               web_server_run(&server);
+       };
+
+
+};


Property changes on: GNUnet/libwebserver/contrib/help/help.c
___________________________________________________________________
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/contrib/help/help.cfg
===================================================================
--- GNUnet/libwebserver/contrib/help/help.cfg   2006-08-18 20:37:47 UTC (rev 
3245)
+++ GNUnet/libwebserver/contrib/help/help.cfg   2006-08-18 21:41:52 UTC (rev 
3246)
@@ -0,0 +1,13 @@
+[LIBWEBSERVER]
+LOG=help.log
+PORT=81
+USESSL=0
+LOCAL=0
+DYNVAR=0
+
+
+[PERSONAL_CONF]
+PORT=Portability
+MOST=general key guard
+IP=127.0.0.1
+

Added: GNUnet/libwebserver/contrib/help/info.h
===================================================================
--- GNUnet/libwebserver/contrib/help/info.h     2006-08-18 20:37:47 UTC (rev 
3245)
+++ GNUnet/libwebserver/contrib/help/info.h     2006-08-18 21:41:52 UTC (rev 
3246)
@@ -0,0 +1,87 @@
+/*
+ * by data2header by Luis Figueiredo (address@hidden)
+ */
+#ifndef _INFO_H_
+#define _INFO_H_
+
+char 
info[]="\x3C\x63\x65\x6E\x74\x65\x72\x3E\x3C\x48\x33\x3E\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27"
+"\x30\x30\x37\x37\x30\x30\x27\x3E\x6C\x69\x62\x77\x65\x62\x73\x65\x72\x76\x65\x72\x20\x49\x6E\x66\x6F\x3C"
+"\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x48\x33\x3E\x3C\x2F\x63\x65\x6E\x74\x65\x72\x3E\x3C\x42\x52\x3E\x3C\x42"
+"\x52\x3E\xA\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x77\x68\x61\x74\x3E\x3C\x42\x3E\x3C\x66\x6F\x6E\x74\x20\x63"
+"\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37\x37\x27\x3E\x57\x68\x61\x74\x27\x73\x20\x6C\x69\x62\x77\x65"
+"\x62\x73\x65\x72\x76\x65\x72\x20\x66\x6F\x72\x3F\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\x3C\x42\x52"
+"\x3E\xA\x3C\x55\x4C\x3E\x54\x68\x69\x73\x20\x6C\x69\x62\x20\x69\x73\x20\x69\x6E\x74\x65\x6E\x64\x65\x64"
+"\x20\x74\x6F\x20\x61\x64\x64\x20\x77\x65\x62\x73\x65\x72\x76\x65\x72\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E"
+"\x61\x6C\x69\x74\x79\x20\x74\x6F\x20\x70\x72\x6F\x67\x72\x61\x6D\x73\x20\x69\x6E\x73\x74\x65\x61\x64\x20"
+"\x6F\x66\x20\x75\x73\x69\x6E\x67\x20\x61\x6E\x20\x65\x78\x74\x65\x72\x6E\x61\x6C\x20\x77\x65\x62\x73\x65"
+"\x72\x76\x65\x72\x2E\x3C\x42\x52\x3E\xA\x9\x54\x77\x6F\x20\x65\x78\x61\x6D\x70\x6C\x65\x73\x20\x66\x6F"
+"\x72\x20\x65\x6D\x62\x65\x64\x64\x65\x64\x20\x77\x65\x62\x73\x65\x72\x76\x65\x72\x73\x20\x74\x68\x61\x74"
+"\x20\x69\x20\x6B\x6E\x6F\x77\x20\x6F\x66\x20\x61\x72\x65\x20\x73\x69\x6D\x70\x6C\x65\x20\x28\x73\x68\x6F"
+"\x75\x74\x63\x61\x73\x74\x20\x28\x69\x20\x67\x75\x65\x73\x73\x29\x2C\x20\x61\x6E\x64\x20\x77\x65\x62\x54"
+"\x56\x20\x28\x74\x65\x6C\x65\x74\x65\x78\x74\x20\x61\x73\x20\x61\x20\x77\x65\x62\x70\x61\x67\x65\x20\x28"
+"\x66\x72\x6F\x6D\x20\x70\x69\x6E\x6E\x61\x63\x6C\x65\x29\x29\x3B\x20\x61\x6E\x64\x20\x6D\x61\x6E\x79\x20"
+"\x6F\x74\x68\x65\x72\x73\x20\x70\x72\x6F\x62\x61\x62\x6C\x79\x20\x64\x6F\x20\x74\x68\x65\x20\x73\x61\x6D"
+"\x65\x2E\xA\x3C\x2F\x55\x4C\x3E\xA\x3C\x48\x52\x3E\xA\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x77\x68\x6F\x3E"
+"\x3C\x42\x3E\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37\x37\x27\x3E\x57\x68"
+"\x6F\x27\x73\x20\x73\x75\x70\x70\x6F\x73\x65\x64\x20\x74\x6F\x20\x75\x73\x65\x20\x6C\x69\x62\x77\x65\x62"
+"\x73\x65\x72\x76\x65\x72\x3F\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x54\x68\x69"
+"\x73\x20\x69\x73\x20\x6D\x61\x69\x6E\x6C\x79\x20\x64\x65\x76\x65\x6C\x6F\x70\x65\x64\x20\x66\x6F\x72\x20"
+"\x64\x65\x76\x65\x6C\x6F\x70\x65\x72\x73\x20\x74\x6F\x20\x6D\x61\x6B\x65\x20\x69\x74\x20\x65\x61\x73\x69"
+"\x65\x72\x20\x74\x6F\x20\x77\x72\x69\x74\x65\x20\x61\x20\x77\x65\x62\x20\x69\x6E\x74\x65\x72\x66\x61\x63"
+"\x65\x20\x74\x6F\x20\x74\x68\x65\x69\x72\x20\x73\x6F\x66\x74\x77\x61\x72\x65\x2C\x20\x28\x6E\x6F\x74\x65"
+"\x20\x61\x20\x77\x65\x62\x62\x72\x6F\x77\x73\x65\x72\x20\x69\x73\x20\x63\x6F\x6D\x6D\x6F\x6E\x6C\x79\x20"
+"\x61\x76\x61\x69\x6C\x61\x62\x6C\x65\x20\x69\x6E\x20\x6D\x6F\x73\x74\x20\x6F\x70\x65\x72\x61\x74\x69\x6E"
+"\x67\xA\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x79\x73\x74\x65\x6D\x73\x29\x20\x73\x6F"
+"\x20\x69\x74\x20\x69\x73\x20\x6C\x69\x6B\x65\x20\x61\x20\x70\x6F\x72\x74\x61\x62\x6C\x65\x20\x22\x74\x65"
+"\x72\x6D\x69\x6E\x61\x6C\x22\x20\x74\x68\x61\x74\x20\x63\x61\x6E\x20\x62\x65\x20\x61\x63\x63\x65\x73\x73"
+"\x65\x64\x20\x66\x72\x6F\x6D\x20\x61\x6E\x79\x20\x63\x6F\x6D\x70\x75\x74\x65\x72\x20\x28\x77\x69\x74\x68"
+"\x20\x61\x20\x62\x72\x6F\x77\x73\x65\x72\x20\x6F\x66\x20\x63\x6F\x75\x72\x73\x65\x2E\x2E\x2E\x29\x2E\x3C"
+"\x2F\x55\x4C\x3E\xA\x3C\x48\x52\x3E\xA\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x77\x68\x65\x6E\x3E\x3C\x42\x3E"
+"\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37\x37\x27\x3E\x57\x68\x65\x6E\x20"
+"\x61\x6D\x20\x69\x20\x73\x75\x70\x70\x6F\x73\x65\x64\x20\x74\x6F\x20\x75\x73\x65\x20\x6C\x69\x62\x77\x65"
+"\x62\x73\x65\x72\x76\x65\x72\x3F\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x46\x6F"
+"\x72\x20\x65\x78\x61\x6D\x70\x6C\x65\x2C\x20\x69\x6D\x61\x67\x69\x6E\x65\x20\x74\x68\x61\x74\x20\x79\x6F"
+"\x75\x20\x61\x72\x65\x20\x64\x65\x76\x65\x6C\x6F\x70\x69\x6E\x67\x20\x61\x20\x64\x61\x65\x6D\x6F\x6E\x20"
+"\x61\x6E\x64\x20\x77\x61\x6E\x74\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x73\x74\x61\x74\x73\x20\x6F\x72"
+"\x20\x72\x65\x2D\x63\x6F\x6E\x66\x69\x67\x75\x72\x65\x20\x61\x74\x20\x72\x75\x6E\x2D\x74\x69\x6D\x65\x3B"
+"\xA\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x77\x69\x74\x68\x20\x74\x68"
+"\x69\x73\x20\x6C\x69\x62\x72\x61\x72\x79\x20\x79\x6F\x75\x20\x63\x61\x6E\x20\x61\x64\x64\x20\x61\x20\x6C"
+"\x69\x73\x74\x65\x6E\x20\x70\x6F\x72\x74\x20\x66\x6F\x72\x20\x72\x75\x6E\x74\x69\x6D\x65\x2C\x20\x61\x6E"
+"\x64\x20\x63\x6F\x6E\x6E\x65\x63\x74\x20\x77\x69\x74\x68\x20\x77\x68\x61\x74\x65\x76\x65\x72\x20\x62\x72"
+"\x6F\x77\x73\x65\x72\x20\x28\x76\x69\x61\x20\x48\x54\x4D\x4C\x20\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x29"
+"\xA\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x77\x69\x74\x68\x6F\x75\x74"
+"\x20\x64\x65\x70\x65\x6E\x64\x65\x6E\x63\x69\x65\x73\x20\x6F\x66\x20\x61\x6E\x20\x65\x78\x74\x65\x72\x6E"
+"\x61\x6C\x20\x77\x65\x62\x73\x65\x72\x76\x65\x72\x2E\x3C\x42\x52\x3E\xA\x20\x20\x20\x20\x20\x20\x20\x20"
+"\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x59\x6F\x75\x20\x63\x61\x6E\x20\x65\x76\x65\x6E\x20\x64\x6F\x20"
+"\x61\x20\x77\x65\x62\x73\x65\x72\x76\x65\x72\x20\x28\x6F\x66\x20\x63\x6F\x75\x72\x73\x65\x29\x2C\x20\x6A"
+"\x75\x73\x74\x20\x75\x73\x65\x20\x79\x6F\x75\x72\x20\x69\x6D\x61\x67\x69\x6E\x61\x74\x69\x6F\x6E\x2E\x3C"
+"\x42\x52\x3E\xA\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x41\x6E\x6F\x74"
+"\x68\x65\x72\x20\x71\x75\x69\x74\x65\x20\x73\x69\x6D\x70\x6C\x65\x20\x65\x78\x61\x6D\x70\x6C\x65\x2C\x20"
+"\x61\x20\x73\x6F\x75\x6E\x64\x20\x72\x65\x63\x6F\x72\x64\x65\x72\x20\x28\x75\x73\x69\x6E\x67\x20\x6F\x6E"
+"\x6C\x79\x20\x6C\x6F\x63\x61\x6C\x20\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x73\x20\x66\x6F\x72\x20\x73"
+"\x65\x63\x75\x72\x69\x74\x79\x20\x72\x65\x61\x73\x6F\x6E\x73\x29\x20\x75\x73\x65\x73\x20\x61\x20\x77\x65"
+"\x62\x20\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x20\x74\x6F\x20\x63\x6F\x6E\x74\x72\x6F\x6C\xA\x20\x20\x20"
+"\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x2F\x64\x65\x76\x2F\x64\x73\x70\x20\x72\x65"
+"\x61\x64\x69\x6E\x67\x2F\x77\x72\x69\x74\x69\x6E\x67\x20\x28\x76\x69\x61\x20\x48\x54\x4D\x4C\x20\x69\x6E"
+"\x74\x65\x72\x66\x61\x63\x65\x29\x2E\xA\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20"
+"\x20\x20\x74\x68\x65\x72\x65\x20\x61\x72\x65\x20\x6D\x61\x6E\x79\x20\x6F\x74\x68\x65\x72\x20\x74\x68\x69"
+"\x6E\x67\x73\x20\x79\x6F\x75\x20\x63\x61\x6E\x20\x64\x6F\x20\x2E\x2E\x2E\x3C\x2F\x55\x4C\x3E\xA\xA\x3C"
+"\x48\x52\x3E\xA\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x73\x65\x72\x76\x65\x72\x5F\x73\x63\x72\x69\x70\x74\x73"
+"\x3E\x3C\x42\x3E\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37\x37\x27\x3E\x49"
+"\x73\x20\x74\x68\x65\x72\x65\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x66\x6F\x72\x20\x73\x65\x72\x76\x65\x72"
+"\x20\x73\x63\x72\x69\x70\x74\x73\x20\x73\x75\x63\x68\x20\x61\x73\x20\x2E\x70\x68\x70\x20\x2E\x63\x67\x69"
+"\x20\x2E\x61\x73\x70\x3F\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\xA\x3C\x55\x4C\x3E\x20\x57\x65\x6C"
+"\x6C\x2C\x20\x74\x68\x69\x73\x20\x6C\x69\x62\x72\x61\x72\x79\x20\x6F\x6E\x6C\x79\x20\x70\x72\x6F\x76\x69"
+"\x64\x65\x73\x20\x77\x65\x62\x20\x73\x65\x72\x76\x65\x72\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x20\x74"
+"\x68\x61\x74\x20\x6D\x61\x6B\x65\x20\x61\x20\x73\x65\x72\x76\x65\x72\x20\x72\x75\x6E\x6E\x69\x6E\x67\x2C"
+"\x20\x73\x65\x72\x76\x65\x72\x20\x73\x63\x72\x69\x70\x74\x73\x20\x63\x61\x6E\x20\x62\x65\x20\x73\x75\x70"
+"\x70\x6F\x72\x74\x65\x64\x20\x69\x66\x20\x79\x6F\x75\x20\x77\x61\x6E\x74\x20\x74\x6F\x20\x64\x6F\x20\x69"
+"\x74\x3A\xA\x20\x20\x20\x20\x20\x20\x79\x6F\x75\x20\x63\x61\x6E\x20\x64\x65\x76\x65\x6C\x6F\x70\x20\x61"
+"\x20\x68\x61\x6E\x64\x6C\x65\x72\x20\x66\x6F\x72\x20\x74\x79\x70\x65\x20\x22\x2E\x73\x6F\x6D\x65\x74\x68"
+"\x69\x6E\x67\x22\x20\x6F\x72\x20\x77\x68\x61\x74\x65\x76\x65\x72\x2C\x20\x74\x68\x69\x73\x20\x70\x61\x63"
+"\x6B\x61\x67\x65\x20\x70\x72\x6F\x76\x69\x64\x65\x73\x20\x61\x20\x2E\x63\x67\x69\x20\x68\x61\x6E\x64\x6C"
+"\x65\x72\x20\x61\x73\x20\x61\x6E\x20\x65\x78\x61\x6D\x70\x6C\x65\x2C\x20\x28\x75\x73\x65\x20\x61\x74\x20"
+"\x79\x6F\x75\x72\x20\x6F\x77\x6E\x20\x72\x69\x73\x6B\x20\x6F\x72\x20\x6D\x61\x6B\x65\x20\x69\x74\x20\x62"
+"\x65\x74\x74\x65\x72\x29\x2E\x3C\x2F\x55\x4C\x3E\xA\xA\xA";
+
+#endif


Property changes on: GNUnet/libwebserver/contrib/help/info.h
___________________________________________________________________
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/contrib/help/makeheader.bat
===================================================================
--- GNUnet/libwebserver/contrib/help/makeheader.bat     2006-08-18 20:37:47 UTC 
(rev 3245)
+++ GNUnet/libwebserver/contrib/help/makeheader.bat     2006-08-18 21:41:52 UTC 
(rev 3246)
@@ -0,0 +1,4 @@
+type ..\help.html\info.html |..\tools\data2header.exe info >info.h
+type ..\help.html\functions.html |..\tools\data2header.exe functions 
>functions.h
+type ..\help.html\examples.html |..\tools\data2header.exe examples >examples.h
+type ..\help.html\security.html |..\tools\data2header.exe security >security.h
\ No newline at end of file

Added: GNUnet/libwebserver/contrib/help/mime.types
===================================================================
--- GNUnet/libwebserver/contrib/help/mime.types 2006-08-18 20:37:47 UTC (rev 
3245)
+++ GNUnet/libwebserver/contrib/help/mime.types 2006-08-18 21:41:52 UTC (rev 
3246)
@@ -0,0 +1,469 @@
+# This is a comment. I love comments.
+
+# This file controls what Internet media types are sent to the client for
+# given file extension(s).  Sending the correct media type to the client
+# is important so they know how to handle the content of the file.
+# Extra types can either be added here or by using an AddType directive
+# in your config files. For more information about Internet media types,
+# please read RFC 2045, 2046, 2047, 2048, and 2077.  The Internet media type
+# registry is at <ftp://ftp.iana.org/in-notes/iana/assignments/media-types/>.
+
+# MIME type                    Extension
+application/EDI-Consent
+application/EDI-X12
+application/EDIFACT
+application/activemessage
+application/andrew-inset       ez
+application/applefile
+application/atomicmail
+application/batch-SMTP
+application/beep+xml
+application/cals-1840
+application/commonground
+application/cybercash
+application/dca-rft
+application/dec-dx
+application/dvcs
+application/eshop
+application/http
+application/hyperstudio
+application/iges
+application/index
+application/index.cmd
+application/index.obj
+application/index.response
+application/index.vnd
+application/iotp
+application/ipp
+application/isup
+application/font-tdpfr
+application/mac-binhex40       hqx
+application/mac-compactpro     cpt
+application/macwriteii
+application/marc
+application/mathematica
+application/mathematica-old
+application/msword             doc
+application/news-message-id
+application/news-transmission
+application/ocsp-request
+application/ocsp-response
+application/octet-stream       bin dms lha lzh exe class so dll
+application/oda                        oda
+application/parityfec
+application/pdf                        pdf
+application/pgp-encrypted
+application/pgp-keys
+application/pgp-signature
+application/pkcs10
+application/pkcs7-mime
+application/pkcs7-signature
+application/pkix-cert
+application/pkix-crl
+application/pkixcmp
+application/postscript         ai eps ps
+application/prs.alvestrand.titrax-sheet
+application/prs.cww
+application/prs.nprend
+application/qsig
+application/remote-printing
+application/riscos
+application/rtf
+application/sdp
+application/set-payment
+application/set-payment-initiation
+application/set-registration
+application/set-registration-initiation
+application/sgml
+application/sgml-open-catalog
+application/sieve
+application/slate
+application/smil               smi smil
+application/timestamp-query
+application/timestamp-reply
+application/vemmi
+application/vnd.3M.Post-it-Notes
+application/vnd.FloGraphIt
+application/vnd.accpac.simply.aso
+application/vnd.accpac.simply.imp
+application/vnd.acucobol
+application/vnd.aether.imp
+application/vnd.anser-web-certificate-issue-initiation
+application/vnd.anser-web-funds-transfer-initiation
+application/vnd.audiograph
+application/vnd.businessobjects
+application/vnd.bmi
+application/vnd.canon-cpdl
+application/vnd.canon-lips
+application/vnd.claymore
+application/vnd.commerce-battelle
+application/vnd.commonspace
+application/vnd.comsocaller
+application/vnd.contact.cmsg
+application/vnd.cosmocaller
+application/vnd.cups-postscript
+application/vnd.cups-raster
+application/vnd.cups-raw
+application/vnd.ctc-posml
+application/vnd.cybank
+application/vnd.dna
+application/vnd.dpgraph
+application/vnd.dxr
+application/vnd.ecdis-update
+application/vnd.ecowin.chart
+application/vnd.ecowin.filerequest
+application/vnd.ecowin.fileupdate
+application/vnd.ecowin.series
+application/vnd.ecowin.seriesrequest
+application/vnd.ecowin.seriesupdate
+application/vnd.enliven
+application/vnd.epson.esf
+application/vnd.epson.msf
+application/vnd.epson.quickanime
+application/vnd.epson.salt
+application/vnd.epson.ssf
+application/vnd.ericsson.quickcall
+application/vnd.eudora.data
+application/vnd.fdf
+application/vnd.ffsns
+application/vnd.framemaker
+application/vnd.fsc.weblaunch
+application/vnd.fujitsu.oasys
+application/vnd.fujitsu.oasys2
+application/vnd.fujitsu.oasys3
+application/vnd.fujitsu.oasysgp
+application/vnd.fujitsu.oasysprs
+application/vnd.fujixerox.ddd
+application/vnd.fujixerox.docuworks
+application/vnd.fujixerox.docuworks.binder
+application/vnd.fut-misnet
+application/vnd.grafeq
+application/vnd.groove-account
+application/vnd.groove-identity-message
+application/vnd.groove-injector
+application/vnd.groove-tool-message
+application/vnd.groove-tool-template
+application/vnd.groove-vcard
+application/vnd.hhe.lesson-player
+application/vnd.hp-HPGL
+application/vnd.hp-PCL
+application/vnd.hp-PCLXL
+application/vnd.hp-hpid
+application/vnd.hp-hps
+application/vnd.httphone
+application/vnd.hzn-3d-crossword
+application/vnd.ibm.afplinedata
+application/vnd.ibm.MiniPay
+application/vnd.ibm.modcap
+application/vnd.informix-visionary
+application/vnd.intercon.formnet
+application/vnd.intertrust.digibox
+application/vnd.intertrust.nncp
+application/vnd.intu.qbo
+application/vnd.intu.qfx
+application/vnd.irepository.package+xml
+application/vnd.is-xpr
+application/vnd.japannet-directory-service
+application/vnd.japannet-jpnstore-wakeup
+application/vnd.japannet-payment-wakeup
+application/vnd.japannet-registration
+application/vnd.japannet-registration-wakeup
+application/vnd.japannet-setstore-wakeup
+application/vnd.japannet-verification
+application/vnd.japannet-verification-wakeup
+application/vnd.koan
+application/vnd.lotus-1-2-3
+application/vnd.lotus-approach
+application/vnd.lotus-freelance
+application/vnd.lotus-notes
+application/vnd.lotus-organizer
+application/vnd.lotus-screencam
+application/vnd.lotus-wordpro
+application/vnd.mcd
+application/vnd.mediastation.cdkey
+application/vnd.meridian-slingshot
+application/vnd.mif            mif
+application/vnd.minisoft-hp3000-save
+application/vnd.mitsubishi.misty-guard.trustweb
+application/vnd.mobius.daf
+application/vnd.mobius.dis
+application/vnd.mobius.msl
+application/vnd.mobius.plc
+application/vnd.mobius.txf
+application/vnd.motorola.flexsuite
+application/vnd.motorola.flexsuite.adsi
+application/vnd.motorola.flexsuite.fis
+application/vnd.motorola.flexsuite.gotap
+application/vnd.motorola.flexsuite.kmr
+application/vnd.motorola.flexsuite.ttc
+application/vnd.motorola.flexsuite.wem
+application/vnd.mozilla.xul+xml
+application/vnd.ms-artgalry
+application/vnd.ms-asf
+application/vnd.ms-excel       xls
+application/vnd.ms-lrm
+application/vnd.ms-powerpoint  ppt
+application/vnd.ms-project
+application/vnd.ms-tnef
+application/vnd.ms-works
+application/vnd.mseq
+application/vnd.msign
+application/vnd.music-niff
+application/vnd.musician
+application/vnd.netfpx
+application/vnd.noblenet-directory
+application/vnd.noblenet-sealer
+application/vnd.noblenet-web
+application/vnd.novadigm.EDM
+application/vnd.novadigm.EDX
+application/vnd.novadigm.EXT
+application/vnd.osa.netdeploy
+application/vnd.palm
+application/vnd.pg.format
+application/vnd.pg.osasli
+application/vnd.powerbuilder6
+application/vnd.powerbuilder6-s
+application/vnd.powerbuilder7
+application/vnd.powerbuilder7-s
+application/vnd.powerbuilder75
+application/vnd.powerbuilder75-s
+application/vnd.previewsystems.box
+application/vnd.publishare-delta-tree
+application/vnd.pvi.ptid1
+application/vnd.pwg-xhtml-print+xml
+application/vnd.rapid
+application/vnd.s3sms
+application/vnd.seemail
+application/vnd.shana.informed.formdata
+application/vnd.shana.informed.formtemplate
+application/vnd.shana.informed.interchange
+application/vnd.shana.informed.package
+application/vnd.sss-cod
+application/vnd.sss-dtf
+application/vnd.sss-ntf
+application/vnd.street-stream
+application/vnd.svd
+application/vnd.swiftview-ics
+application/vnd.triscape.mxs
+application/vnd.trueapp
+application/vnd.truedoc
+application/vnd.tve-trigger
+application/vnd.ufdl
+application/vnd.uplanet.alert
+application/vnd.uplanet.alert-wbxml
+application/vnd.uplanet.bearer-choice-wbxml
+application/vnd.uplanet.bearer-choice
+application/vnd.uplanet.cacheop
+application/vnd.uplanet.cacheop-wbxml
+application/vnd.uplanet.channel
+application/vnd.uplanet.channel-wbxml
+application/vnd.uplanet.list
+application/vnd.uplanet.list-wbxml
+application/vnd.uplanet.listcmd
+application/vnd.uplanet.listcmd-wbxml
+application/vnd.uplanet.signal
+application/vnd.vcx
+application/vnd.vectorworks
+application/vnd.vidsoft.vidconference
+application/vnd.visio
+application/vnd.vividence.scriptfile
+application/vnd.wap.sic
+application/vnd.wap.slc
+application/vnd.wap.wbxml      wbxml
+application/vnd.wap.wmlc       wmlc
+application/vnd.wap.wmlscriptc wmlsc
+application/vnd.webturbo
+application/vnd.wrq-hp3000-labelled
+application/vnd.wt.stf
+application/vnd.xara
+application/vnd.xfdl
+application/vnd.yellowriver-custom-menu
+application/whoispp-query
+application/whoispp-response
+application/wita
+application/wordperfect5.1
+application/x-bcpio            bcpio
+application/x-cdlink           vcd
+application/x-chess-pgn                pgn
+application/x-compress
+application/x-cpio             cpio
+application/x-csh              csh
+application/x-director         dcr dir dxr
+application/x-dvi              dvi
+application/x-futuresplash     spl
+application/x-gtar             gtar
+application/x-gzip
+application/x-hdf              hdf
+application/x-javascript       js
+application/x-koan             skp skd skt skm
+application/x-latex            latex
+application/x-netcdf           nc cdf
+application/x-sh               sh
+application/x-shar             shar
+application/x-shockwave-flash  swf
+application/x-stuffit          sit
+application/x-sv4cpio          sv4cpio
+application/x-sv4crc           sv4crc
+application/x-tar              tar
+application/x-tcl              tcl
+application/x-tex              tex
+application/x-texinfo          texinfo texi
+application/x-troff            t tr roff
+application/x-troff-man                man
+application/x-troff-me         me
+application/x-troff-ms         ms
+application/x-ustar            ustar
+application/x-wais-source      src
+application/x400-bp
+application/xml
+application/xml-dtd
+application/xml-external-parsed-entity
+application/zip                        zip
+audio/32kadpcm
+audio/basic                    au snd
+audio/g.722.1
+audio/l16
+audio/midi                     mid midi kar
+audio/mp4a-latm
+audio/mpa-robust
+audio/mpeg                     mpga mp2 mp3
+audio/parityfec
+audio/prs.sid
+audio/telephone-event
+audio/tone
+audio/vnd.cisco.nse
+audio/vnd.cns.anp1
+audio/vnd.cns.inf1
+audio/vnd.digital-winds
+audio/vnd.everad.plj
+audio/vnd.lucent.voice
+audio/vnd.nortel.vbk
+audio/vnd.nuera.ecelp4800
+audio/vnd.nuera.ecelp7470
+audio/vnd.nuera.ecelp9600
+audio/vnd.octel.sbc
+audio/vnd.qcelp
+audio/vnd.rhetorex.32kadpcm
+audio/vnd.vmx.cvsd
+audio/x-aiff                   aif aiff aifc
+audio/x-mpegurl                        m3u
+audio/x-pn-realaudio           ram rm
+audio/x-pn-realaudio-plugin    rpm
+audio/x-realaudio              ra
+audio/x-wav                    wav
+chemical/x-pdb                 pdb
+chemical/x-xyz                 xyz
+image/bmp                      bmp
+image/cgm
+image/g3fax
+image/gif                      gif
+image/ief                      ief
+image/jpeg                     jpeg jpg jpe
+image/naplps
+image/png                      png
+image/prs.btif
+image/prs.pti
+image/tiff                     tiff tif
+image/vnd.cns.inf2
+image/vnd.dwg
+image/vnd.dxf
+image/vnd.fastbidsheet
+image/vnd.fpx
+image/vnd.fst
+image/vnd.fujixerox.edmics-mmr
+image/vnd.fujixerox.edmics-rlc
+image/vnd.mix
+image/vnd.net-fpx
+image/vnd.svf
+image/vnd.wap.wbmp             wbmp
+image/vnd.xiff
+image/x-cmu-raster             ras
+image/x-portable-anymap                pnm
+image/x-portable-bitmap                pbm
+image/x-portable-graymap       pgm
+image/x-portable-pixmap                ppm
+image/x-rgb                    rgb
+image/x-xbitmap                        xbm
+image/x-xpixmap                        xpm
+image/x-xwindowdump            xwd
+message/delivery-status
+message/disposition-notification
+message/external-body
+message/http
+message/news
+message/partial
+message/rfc822
+message/s-http
+model/iges                     igs iges
+model/mesh                     msh mesh silo
+model/vnd.dwf
+model/vnd.flatland.3dml
+model/vnd.gdl
+model/vnd.gs-gdl
+model/vnd.gtw
+model/vnd.mts
+model/vnd.vtu
+model/vrml                     wrl vrml
+multipart/alternative
+multipart/appledouble
+multipart/byteranges
+multipart/digest
+multipart/encrypted
+multipart/form-data
+multipart/header-set
+multipart/mixed
+multipart/parallel
+multipart/related
+multipart/report
+multipart/signed
+multipart/voice-message
+text/calendar
+text/css                       css
+text/directory
+text/enriched
+text/html                      html htm
+text/parityfec
+text/plain                     asc txt
+text/prs.lines.tag
+text/rfc822-headers
+text/richtext                  rtx
+text/rtf                       rtf
+text/sgml                      sgml sgm
+text/tab-separated-values      tsv
+text/t140
+text/uri-list
+text/vnd.DMClientScript
+text/vnd.IPTC.NITF
+text/vnd.IPTC.NewsML
+text/vnd.abc
+text/vnd.curl
+text/vnd.flatland.3dml
+text/vnd.fly
+text/vnd.fmi.flexstor
+text/vnd.in3d.3dml
+text/vnd.in3d.spot
+text/vnd.latex-z
+text/vnd.motorola.reflex
+text/vnd.ms-mediapackage
+text/vnd.wap.si
+text/vnd.wap.sl
+text/vnd.wap.wml               wml
+text/vnd.wap.wmlscript         wmls
+text/x-setext                  etx
+text/xml                       xml xsl
+text/xml-external-parsed-entity
+video/mp4v-es
+video/mpeg                     mpeg mpg mpe
+video/parityfec
+video/pointer
+video/quicktime                        qt mov
+video/vnd.fvt
+video/vnd.motorola.video
+video/vnd.motorola.videop
+video/vnd.mpegurl              mxu
+video/vnd.mts
+video/vnd.nokia.interleaved-multimedia
+video/vnd.vivo
+video/x-msvideo                        avi
+video/x-sgi-movie              movie
+x-conference/x-cooltalk                ice

Added: GNUnet/libwebserver/contrib/help/security.h
===================================================================
--- GNUnet/libwebserver/contrib/help/security.h 2006-08-18 20:37:47 UTC (rev 
3245)
+++ GNUnet/libwebserver/contrib/help/security.h 2006-08-18 21:41:52 UTC (rev 
3246)
@@ -0,0 +1,143 @@
+/*
+ * by data2header by Luis Figueiredo (address@hidden)
+ */
+#ifndef _SECURITY_H_
+#define _SECURITY_H_
+
+char 
security[]="\x3C\x63\x65\x6E\x74\x65\x72\x3E\x3C\x48\x33\x3E\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27"
+"\x30\x30\x37\x37\x30\x30\x27\x3E\x6C\x69\x62\x77\x65\x62\x73\x65\x72\x76\x65\x72\x20\x53\x65\x63\x75\x72"
+"\x69\x74\x79\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x48\x33\x3E\x3C\x2F\x63\x65\x6E\x74\x65\x72\x3E\x3C\x42"
+"\x52\x3E\x3C\x42\x52\x3E\xA\xA\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x77\x68\x61\x74\x3E\x3C\x42\x3E\x3C\x66"
+"\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37\x37\x27\x3E\x49\x73\x20\x69\x74\x20\x73"
+"\x61\x66\x65\x20\x74\x6F\x20\x75\x73\x65\x3F\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\x3C\x42\x52\x3E"
+"\xA\x3C\x55\x4C\x3E\x57\x65\x6C\x6C\x2C\x20\x49\x20\x63\x61\x6E\x27\x74\x20\x70\x72\x6F\x6D\x69\x73\x65"
+"\x20\x74\x68\x61\x74\x20\x69\x74\x27\x73\x20\x61\x20\x73\x65\x63\x75\x72\x65\x20\x73\x6F\x66\x74\x77\x61"
+"\x72\x65\x20\x73\x69\x6E\x63\x65\x20\x74\x68\x61\x74\x20\x6E\x6F\x74\x20\x6F\x6E\x6C\x79\x20\x64\x65\x70"
+"\x65\x6E\x64\x73\x20\x6F\x6E\x20\x74\x68\x65\x20\x73\x6F\x66\x74\x77\x61\x72\x65\x2C\x20\xA\x20\x20\x20"
+"\x20\x20\x20\x20\x20\x20\x62\x75\x74\x20\x61\x6C\x6C\x20\x69\x20\x63\x61\x6E\x20\x73\x61\x79\x20\x69\x73"
+"\x20\x74\x68\x61\x74\x20\x77\x61\x73\x6E\x27\x74\x20\x66\x6F\x75\x6E\x64\x20\x61\x6E\x79\x20\x73\x65\x63"
+"\x75\x72\x69\x74\x79\x20\x62\x75\x67\x20\x79\x65\x74\x2C\x20\x74\x68\x69\x73\x20\x77\x61\x73\x20\x64\x65"
+"\x76\x65\x6C\x6F\x70\x65\x64\x20\x69\x6E\x74\x65\x6E\x64\x65\x64\x20\x74\x6F\x20\x62\x65\x20\x73\x65\x63"
+"\x75\x72\x65\x2C\x20\x20\xA\x9\x9\x20\x79\x6F\x75\x20\x63\x61\x6E\x20\x75\x73\x65\x20\x6F\x70\x65\x6E"
+"\x73\x73\x6C\x20\x28\x65\x6E\x63\x72\x79\x70\x74\x65\x64\x20\x73\x74\x72\x65\x61\x6D\x73\x29\x20\x74\x6F"
+"\x20\x70\x72\x6F\x74\x65\x63\x74\x20\x69\x6E\x66\x6F\x72\x6D\x61\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20"
+"\x70\x61\x73\x73\x65\x73\x20\x66\x72\x6F\x6D\x20\x77\x65\x62\x73\x65\x72\x76\x65\x72\x28\x6C\x69\x62\x29"
+"\x20\x74\x6F\x20\x63\x6C\x69\x65\x6E\x74\x3C\x2F\x55\x4C\x3E\xA\x9\xA\x3C\x41\x20\x6E\x61\x6D\x65\x3D"
+"\x63\x65\x72\x74\x69\x66\x69\x63\x61\x74\x65\x3E\x3C\x42\x3E\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72"
+"\x3D\x27\x30\x30\x30\x30\x37\x37\x27\x3E\x48\x6F\x77\x20\x64\x6F\x20\x49\x20\x63\x72\x65\x61\x74\x65\x20"
+"\x6D\x79\x20\x6F\x77\x6E\x20\x63\x65\x72\x74\x69\x66\x69\x63\x61\x74\x65\x3F\x3C\x2F\x66\x6F\x6E\x74\x3E"
+"\x3C\x2F\x42\x3E\x3C\x42\x52\x3E\xA\x3C\x55\x4C\x3E\x59\x6F\x75\x20\x63\x61\x6E\x20\x65\x69\x74\x68\x65"
+"\x72\x20\x62\x75\x79\x20\x6F\x6E\x65\x20\x66\x72\x6F\x6D\x20\x6F\x6E\x65\x20\x6F\x66\x20\x74\x68\x65\x20"
+"\x62\x69\x67\x20\x76\x65\x6E\x64\x6F\x72\x73\x20\x28\x73\x65\x65\x20\x79\x6F\x75\x72\x20\x62\x72\x6F\x77"
+"\x73\x65\x72\x27\x73\x20\x73\x74\x6F\x72\x65\x64\x20\x63\x65\x72\x74\x69\x66\x69\x63\x61\x74\x65\x73\xA"
+"\x9\x66\x6F\x72\x20\x74\x68\x65\x69\x72\x20\x61\x64\x64\x72\x65\x73\x73\x65\x73\x29\x20\x6F\x72\x20\x73"
+"\x65\x6C\x66\x2D\x73\x69\x67\x6E\x20\x61\x20\x73\x65\x6C\x66\x2D\x63\x72\x65\x61\x74\x65\x64\x20\x6F\x6E"
+"\x65\x2E\x20\x54\x68\x65\x20\x75\x70\x73\x69\x64\x65\x20\x6F\x66\x20\x74\x68\x65\x20\x62\x6F\x75\x67\x68"
+"\x74\xA\x9\x63\x65\x72\x74\x69\x66\x69\x63\x61\x74\x65\x73\x20\x69\x73\x2C\x20\x74\x68\x61\x74\x20\x74"
+"\x68\x65\x20\x77\x65\x62\x62\x72\x6F\x77\x73\x65\x72\x20\x64\x6F\x65\x73\x6E\x27\x74\x20\x61\x73\x6B\x20"
+"\x69\x66\x20\x74\x68\x65\x20\x75\x73\x65\x72\x20\x77\x61\x6E\x74\x73\x20\x74\x6F\xA\x9\x61\x63\x63\x65"
+"\x70\x74\x20\x74\x68\x61\x74\x20\x63\x65\x72\x74\x69\x66\x69\x63\x61\x74\x65\x2C\x20\x62\x75\x74\x20\x69"
+"\x6E\x73\x74\x65\x61\x64\x20\x63\x68\x65\x63\x6B\x73\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x63\x65\x72"
+"\x74\x69\x66\x69\x63\x61\x74\x69\x6F\x6E\x20\x61\x75\x74\x68\x6F\x72\x69\x74\x79\xA\x9\x79\x6F\x75\x20"
+"\x62\x6F\x75\x67\x68\x74\x20\x79\x6F\x75\x72\x20\x63\x65\x72\x74\x69\x66\x69\x63\x61\x74\x65\x20\x66\x72"
+"\x6F\x6D\x2E\x3C\x62\x72\x3E\xA\x9\x54\x68\x65\x20\x64\x6F\x77\x6E\x73\x69\x64\x65\x20\x69\x73\x20\x74"
+"\x68\x61\x74\x20\x69\x74\x20\x63\x6F\x73\x74\x73\x20\x71\x75\x69\x74\x65\x20\x61\x20\x6C\x6F\x74\x20\x6F"
+"\x66\x20\x6D\x6F\x6E\x65\x79\x2E\x3C\x62\x72\x3E\xA\x9\x54\x6F\x20\x63\x72\x65\x61\x74\x65\x20\x79\x6F"
+"\x75\x72\x20\x6F\x77\x6E\x20\x63\x65\x72\x74\x69\x66\x69\x63\x61\x74\x65\x20\x75\x73\x65\x20\x6F\x70\x65"
+"\x6E\x73\x73\x6C\x20\x6C\x69\x6B\x65\x20\x74\x68\x61\x74\x3A\xA\x9\x3C\x75\x6C\x3E\x3C\x6C\x69\x3E\x63"
+"\x72\x65\x61\x74\x65\x20\x61\x20\x6B\x65\x79\x20\x61\x6E\x64\x20\x72\x65\x71\x75\x65\x73\x74\x3A\x3C\x62"
+"\x72\x3E\xA\x9\x9\x3C\x70\x72\x65\x3E\x3C\x62\x3E\x6F\x70\x65\x6E\x73\x73\x6C\x20\x72\x65\x71\x20\x2D"
+"\x6E\x65\x77\x20\x3E\x20\x66\x6F\x6F\x2D\x63\x65\x72\x74\x2E\x63\x73\x72\x3C\x2F\x62\x3E\x3C\x2F\x70\x72"
+"\x65\x3E\x3C\x62\x72\x3E\xA\x9\x9\x41\x73\x20\x22\x43\x6F\x6D\x6D\x6F\x6E\x20\x4E\x61\x6D\x65\x22\x20"
+"\x79\x6F\x75\x20\x68\x61\x76\x65\x20\x74\x6F\x20\x74\x79\x70\x65\x20\x69\x6E\x20\x74\x68\x65\x20\x6E\x61"
+"\x6D\x65\x20\x70\x61\x72\x74\x20\x6F\x66\xA\x9\x9\x79\x6F\x75\x72\x20\x55\x52\x4C\x2C\x20\x69\x2E\x65"
+"\x2E\x20\x69\x66\x20\x79\x6F\x75\x72\x20\x77\x65\x62\x20\x73\x69\x74\x65\x20\x77\x69\x6C\x6C\x20\x62\x65"
+"\xA\x9\x9\x22\x68\x74\x74\x70\x73\x3A\x2F\x2F\x77\x77\x77\x2E\x6C\x69\x62\x77\x65\x62\x73\x65\x72\x76"
+"\x65\x72\x2E\x72\x75\x6C\x65\x73\x3A\x34\x34\x33\x2F\x22\x20\x74\x68\x65\x20\x43\x6F\x6D\x6D\x6F\x6E\x20"
+"\x4E\x61\x6D\x65\x20\x69\x73\xA\x9\x9\x22\x77\x77\x77\x2E\x6C\x69\x62\x77\x65\x62\x73\x65\x72\x76\x65"
+"\x72\x2E\x72\x75\x6C\x65\x73\x22\x2E\xA\x9\x3C\x6C\x69\x3E\x20\x72\x65\x6D\x6F\x76\x65\x20\x74\x68\x65"
+"\x20\x70\x61\x73\x73\x70\x68\x72\x61\x73\x65\x20\x66\x72\x6F\x6D\x20\x74\x68\x65\x20\x6B\x65\x79\x3A\x3C"
+"\x62\x72\x3E\xA\x9\x9\x3C\x70\x72\x65\x3E\x3C\x62\x3E\x6F\x70\x65\x6E\x73\x73\x6C\x20\x72\x73\x61\x20"
+"\x2D\x69\x6E\x20\x70\x72\x69\x76\x6B\x65\x79\x2E\x70\x65\x6D\x20\x2D\x6F\x75\x74\x20\x66\x6F\x6F\x2D\x63"
+"\x65\x72\x74\x2E\x6B\x65\x79\x3C\x2F\x62\x3E\x3C\x2F\x70\x72\x65\x3E\x3C\x62\x72\x3E\xA\x9\x3C\x6C\x69"
+"\x3E\x63\x6F\x6E\x76\x65\x72\x74\x20\x72\x65\x71\x75\x65\x73\x74\x20\x69\x6E\x74\x6F\x20\x61\x20\x73\x69"
+"\x67\x6E\x65\x64\x20\x63\x65\x72\x74\x69\x66\x69\x63\x61\x74\x65\x3A\x3C\x62\x72\x3E\xA\x9\x9\x3C\x70"
+"\x72\x65\x3E\x3C\x62\x3E\x6F\x70\x65\x6E\x73\x73\x6C\x20\x78\x35\x30\x39\x20\x2D\x69\x6E\x20\x66\x6F\x6F"
+"\x2D\x63\x65\x72\x74\x2E\x63\x73\x72\x20\x2D\x6F\x75\x74\x20\x66\x6F\x6F\x2D\x63\x65\x72\x74\x2E\x63\x65"
+"\x72\x74\x20\x2D\x72\x65\x71\x20\x2D\x73\x69\x67\x6E\x6B\x65\x79\x20\x66\x6F\x6F\x2D\x63\x65\x72\x74\x2E"
+"\x6B\x65\x79\x20\x2D\x64\x61\x79\x73\x20\x33\x35\x36\x3C\x2F\x62\x3E\x3C\x2F\x70\x72\x65\x3E\x3C\x62\x72"
+"\x3E\xA\x9\x3C\x6C\x69\x3E\x63\x72\x65\x61\x74\x65\x20\x2E\x70\x65\x6D\x20\x66\x69\x6C\x65\x3A\x3C\x62"
+"\x72\x3E\xA\x9\x9\x3C\x70\x72\x65\x3E\x3C\x62\x3E\x63\x61\x74\x20\x66\x6F\x6F\x2D\x63\x65\x72\x74\x2E"
+"\x63\x65\x72\x74\x20\x66\x6F\x6F\x2D\x63\x65\x72\x74\x2E\x6B\x65\x79\x20\x3E\x66\x6F\x6F\x2D\x63\x65\x72"
+"\x74\x2E\x70\x65\x6D\x3C\x2F\x62\x3E\x3C\x2F\x70\x72\x65\x3E\x3C\x62\x72\x3E\xA\x9\x3C\x2F\x75\x6C\x3E"
+"\xA\x3C\x2F\x75\x6C\x3E\xA\xA\xA\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x74\x69\x70\x73\x3E\x3C\x42\x3E\x3C"
+"\x66\x6F\x6E\x74\x20\x73\x69\x7A\x65\x3D\x34\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x37\x37\x30\x30\x37\x37\x27"
+"\x3E\x53\x65\x63\x75\x72\x69\x74\x79\x20\x74\x69\x70\x73\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\x3C"
+"\x42\x52\x3E\x3C\x48\x52\x3E\xA\xA\x3C\x41\x20\x6E\x61\x6D\x65\x3D\x72\x61\x63\x65\x63\x6F\x6E\x64\x69"
+"\x74\x69\x6F\x6E\x3E\x3C\x42\x3E\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x27\x30\x30\x30\x30\x37"
+"\x37\x27\x3E\x41\x76\x6F\x69\x64\x20\x72\x61\x63\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x70\x72"
+"\x6F\x62\x6C\x65\x6D\x73\x3C\x2F\x66\x6F\x6E\x74\x3E\x3C\x2F\x42\x3E\x3C\x42\x52\x3E\xA\x3C\x55\x4C\x3E"
+"\xA\x9\x3C\x42\x3E\x20\x57\x68\x61\x74\x20\x69\x73\x20\x72\x61\x63\x65\x20\x63\x6F\x6E\x64\x69\x74\x69"
+"\x6F\x6E\x3F\x3C\x2F\x42\x3E\xA\x9\x9\x3C\x55\x4C\x3E\x41\x20\x72\x61\x63\x65\x20\x63\x6F\x6E\x64\x69"
+"\x74\x69\x6F\x6E\x20\x6F\x63\x63\x75\x72\x73\x20\x77\x68\x65\x6E\x20\x74\x77\x6F\x20\x6F\x72\x20\x6D\x6F"
+"\x72\x65\x20\x6F\x70\x65\x72\x61\x74\x69\x6F\x6E\x73\x20\x6F\x63\x63\x75\x72\x20\x69\x6E\x20\x61\x6E\x20"
+"\xA\x20\x20\x20\x20\x20\x20\x75\x6E\x64\x65\x66\x69\x6E\x65\x64\x20\x6D\x61\x6E\x6E\x65\x72\x20\x28\x4D"
+"\x63\x4B\x75\x73\x69\x63\x6B\x20\x65\x74\x20\x61\x6C\x2E\x20\x31\x39\x39\x36\x29\x2E\x20\x53\x70\x65\x63"
+"\x69\x66\x69\x63\x61\x6C\x6C\x79\x20\x69\x6E\x20\x66\x69\x6C\x65\x20\xA\x20\x20\x20\x20\x20\x20\x73\x79"
+"\x73\x74\x65\x6D\x20\x72\x61\x63\x65\x73\x20\x74\x68\x65\x20\x61\x74\x74\x61\x63\x6B\x65\x72\x20\x61\x74"
+"\x74\x65\x6D\x70\x74\x73\x20\x74\x6F\x20\x63\x68\x61\x6E\x67\x65\x20\x74\x68\x65\x20\x73\x74\x61\x74\x65"
+"\x20\x6F\x66\x20\x74\x68\x65\x20\xA\x20\x20\x20\x20\x20\x20\x66\x69\x6C\x65\x20\x73\x79\x73\x74\x65\x6D"
+"\x20\x69\x6E\x20\x62\x65\x74\x77\x65\x65\x6E\x20\x74\x77\x6F\x20\x66\x69\x6C\x65\x20\x73\x79\x73\x74\x65"
+"\x6D\x20\x6F\x70\x65\x72\x61\x74\x69\x6F\x6E\x73\x20\x6F\x6E\x20\x74\x68\x65\x20\x70\x61\x72\x74\x20\xA"
+"\x20\x20\x20\x20\x20\x20\x6F\x66\x20\x74\x68\x65\x20\x70\x72\x6F\x67\x72\x61\x6D\x2E\x3C\x2F\x55\x4C\x3E"
+"\x3C\x42\x52\x3E\x20\xA\x9\x3C\x42\x3E\x20\x48\x6F\x77\x20\x74\x68\x65\x20\x6C\x69\x62\x20\x64\x65\x74"
+"\x65\x72\x6D\x69\x6E\x65\x20\x74\x65\x6D\x70\x6F\x72\x61\x72\x79\x20\x66\x69\x6C\x65\x20\x6E\x61\x6D\x65"
+"\x3F\x3C\x2F\x42\x3E\xA\x9\x3C\x55\x4C\x3E\x20\xA\x9\x3C\x6C\x69\x3E\x67\x65\x6E\x65\x72\x61\x74\x65"
+"\x20\x66\x69\x6C\x65\x20\x6E\x61\x6D\x65\x20\x28\x6E\x6F\x74\x65\x3A\x20\x6B\x65\x65\x70\x20\x67\x65\x6E"
+"\x65\x72\x61\x74\x69\x6E\x67\x20\x75\x6E\x74\x69\x6C\x20\x69\x74\x20\x64\x6F\x65\x73\x6E\x27\x74\x20\x65"
+"\x78\x69\x73\x74\x73\x29\x3C\x42\x52\x3E\x3C\x2F\x6C\x69\x3E\xA\x9\x3C\x6C\x69\x3E\x63\x68\x65\x63\x6B"
+"\x20\x69\x66\x20\x66\x69\x6C\x65\x20\x65\x78\x69\x73\x74\x73\x3C\x42\x52\x3E\xA\x9\x2D\x3C\x73\x6D\x61"
+"\x6C\x6C\x3E\x61\x74\x74\x61\x63\x6B\x65\x72\x20\x63\x61\x6E\x20\x63\x72\x65\x61\x74\x65\x20\x74\x68\x65"
+"\x20\x66\x69\x6C\x65\x20\x6E\x6F\x77\x2C\x20\x69\x66\x20\x68\x65\x20\x6B\x6E\x6F\x77\x73\x20\x74\x68\x65"
+"\x20\x72\x69\x67\x68\x74\x20\x66\x69\x6C\x65\x6E\x61\x6D\x65\x3C\x2F\x73\x6D\x61\x6C\x6C\x3E\x3C\x42\x52"
+"\x3E\x3C\x2F\x6C\x69\x3E\xA\x9\x3C\x6C\x69\x3E\x63\x68\x65\x63\x6B\x20\x69\x66\x20\x73\x79\x6D\x6C\x69"
+"\x6E\x6B\x20\x65\x78\x69\x73\x74\x73\x3C\x42\x52\x3E\xA\x9\x2D\x3C\x73\x6D\x61\x6C\x6C\x3E\x61\x74\x74"
+"\x61\x63\x6B\x65\x72\x20\x63\x61\x6E\x20\x63\x72\x65\x61\x74\x65\x20\x74\x68\x65\x20\x73\x79\x6D\x6C\x69"
+"\x6E\x6B\x20\x6E\x6F\x77\x2C\x20\x69\x66\x20\x68\x65\x20\x6B\x6E\x6F\x77\x73\x20\x74\x68\x65\x20\x72\x69"
+"\x67\x68\x74\x20\x66\x69\x6C\x65\x6E\x61\x6D\x65\x3C\x2F\x73\x6D\x61\x6C\x6C\x3E\x3C\x42\x52\x3E\x3C\x2F"
+"\x6C\x69\x3E\xA\x9\x3C\x6C\x69\x3E\x63\x72\x65\x61\x74\x65\x20\x74\x68\x65\x20\x66\x69\x6C\x65\x20\x61"
+"\x6E\x64\x20\x72\x65\x64\x69\x72\x65\x63\x74\x20\x73\x74\x64\x6F\x75\x74\x20\x74\x6F\x20\x69\x74\x20\x3C"
+"\x42\x52\x3E\xA\x9\x2D\x3C\x73\x6D\x61\x6C\x6C\x3E\x61\x74\x74\x61\x63\x6B\x65\x72\x20\x63\x61\x6E\x20"
+"\x6F\x70\x65\x6E\x20\x74\x68\x65\x20\x66\x69\x6C\x65\x20\x61\x6E\x64\x20\x77\x72\x69\x74\x65\x20\x74\x6F"
+"\x20\x69\x74\x3C\x2F\x73\x6D\x61\x6C\x6C\x3E\x3C\x42\x52\x3E\x3C\x2F\x6C\x69\x3E\xA\x9\x3C\x6C\x69\x3E"
+"\x70\x6C\x61\x63\x65\x73\x20\x61\x20\x6C\x6F\x63\x6B\x20\x69\x6E\x74\x6F\x20\x66\x69\x6C\x65\x20\x28\x6E"
+"\x6F\x74\x65\x3A\x20\x6E\x6F\x74\x20\x69\x6E\x20\x77\x69\x6E\x39\x38\x29\x3C\x42\x52\x3E\x20\x3C\x2F\x6C"
+"\x69\x3E\xA\x9\x3C\x6C\x69\x3E\x75\x73\x65\x72\x73\x20\x6F\x70\x65\x72\x61\x74\x69\x6F\x6E\x73\x2C\x20"
+"\x77\x72\x69\x74\x65\x2C\x20\x66\x6C\x75\x73\x68\x2C\x20\x72\x65\x61\x64\x3C\x42\x52\x3E\x3C\x2F\x6C\x69"
+"\x3E\xA\x9\x3C\x6C\x69\x3E\x75\x6E\x6C\x69\x6E\x6B\x20\x74\x68\x65\x20\x66\x69\x6C\x65\x6E\x61\x6D\x65"
+"\x20\x66\x72\x6F\x6D\x20\x74\x68\x65\x20\x4F\x53\x3C\x42\x52\x3E\x3C\x2F\x6C\x69\x3E\xA\x9\x3C\x2F\x55"
+"\x4C\x3E\x3C\x42\x52\x3E\xA\x9\xA\x9\xA\x9\x6C\x69\x62\x77\x65\x62\x73\x65\x72\x76\x65\x72\x20\x75"
+"\x73\x65\x73\x20\x74\x65\x6D\x70\x6F\x72\x61\x72\x79\x20\x66\x69\x6C\x65\x6E\x61\x6D\x65\x73\x20\x74\x6F"
+"\x20\x68\x6F\x6C\x64\x20\x61\x6E\x64\x20\x70\x72\x6F\x63\x65\x73\x73\x20\x64\x61\x74\x61\x20\x62\x65\x66"
+"\x6F\x72\x65\x20\x73\x65\x6E\x64\x20\x69\x74\x20\x74\x6F\x20\x63\x6C\x69\x65\x6E\x74\x2C\x20\x69\x74\x20"
+"\x75\x73\x65\x73\x20\x74\x68\x65\x20\x61\x6D\x62\x69\x65\x6E\x74\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x73"
+"\x20\x74\x6F\x20\xA\x9\x64\x65\x74\x65\x72\x6D\x69\x6E\x65\x20\x74\x65\x6D\x70\x6F\x72\x61\x72\x79\x20"
+"\x64\x69\x72\x65\x63\x74\x6F\x72\x79\x20\x62\x79\x20\x66\x6F\x6C\x6C\x6F\x77\x69\x6E\x67\x20\x6F\x72\x64"
+"\x65\x72\x20\x22\x24\x54\x45\x4D\x50\x2C\x24\x54\x4D\x50\x2C\x24\x54\x4D\x50\x44\x49\x52\x20\x61\x6E\x64"
+"\x20\x74\x68\x65\x20\x73\x74\x64\x69\x6F\x2E\x68\x20\x50\x5F\x74\x6D\x70\x64\x69\x72\x22\x2C\x20\x6C\x69"
+"\x62\x77\x65\x62\x73\x65\x72\x76\x65\x72\x20\x68\x61\x76\x65\x20\x73\x65\x76\x65\x72\x61\x6C\x20\x63\x68"
+"\x65\x63\x6B\x73\xA\x9\x61\x6E\x64\x20\x69\x74\x20\x6C\x6F\x63\x6B\x73\x20\x66\x69\x6C\x65\x20\x66\x6F"
+"\x72\x20\x61\x76\x6F\x69\x64\x20\x61\x74\x74\x61\x63\x6B\x65\x72\x73\x20\x66\x72\x6F\x6D\x20\x6D\x65\x73"
+"\x73\x69\x6E\x67\x20\x77\x69\x74\x68\x20\x74\x65\x6D\x70\x6F\x72\x61\x72\x79\x20\x66\x69\x6C\x65\x73\x2C"
+"\x20\x6D\x65\x61\x6E\x77\x68\x69\x6C\x65\x20\x69\x73\x20\x73\x61\x66\x65\x6C\x79\x20\x74\x6F\x20\x63\x68"
+"\x61\x6E\x67\x65\x20\x74\x68\x65\x20\x74\x65\x6D\x70\x64\x69\x72\x20\x28\x73\x65\x74\x74\x69\x6E\x67\x20"
+"\x74\x68\x65\x20\x61\x6D\x62\x69\x65\x6E\x74\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x29\xA\x9\x74\x6F\x20"
+"\x61\x6E\x20\x64\x69\x72\x65\x63\x74\x6F\x72\x79\x20\x74\x68\x61\x74\x20\x69\x73\x20\x6E\x6F\x74\x20\x77"
+"\x72\x69\x74\x61\x62\x6C\x65\x20\x66\x6F\x72\x20\x65\x76\x65\x72\x79\x6F\x6E\x65\x20\x61\x6E\x64\x20\x77"
+"\x72\x69\x74\x61\x62\x6C\x65\x20\x74\x6F\x20\x6C\x69\x62\x20\x28\x73\x65\x74\x65\x6E\x76\x28\x22\x54\x45"
+"\x4D\x50\x22\x2C\x22\x2F\x73\x61\x66\x65\x64\x69\x72\x22\x29\x3B\x20\x79\x6F\x75\x20\x63\x61\x6E\x20\x64"
+"\x6F\x20\x69\x74\x20\x62\x65\x66\x6F\x72\x65\x20\x74\x68\x65\x20\x77\x65\x62\x5F\x73\x65\x72\x76\x65\x72"
+"\x5F\x72\x75\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\xA\xA\x9\xA\xA\x3C\x2F\x55\x4C\x3E\xA\xA\xA"
+"\xA";
+
+#endif


Property changes on: GNUnet/libwebserver/contrib/help/security.h
___________________________________________________________________
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/contrib/tools/checkpid
===================================================================
--- GNUnet/libwebserver/contrib/tools/checkpid  2006-08-18 20:37:47 UTC (rev 
3245)
+++ GNUnet/libwebserver/contrib/tools/checkpid  2006-08-18 21:41:52 UTC (rev 
3246)
@@ -0,0 +1,4 @@
+
+echo "checking pid $1";
+
+while true; do echo -e "\33[2J\33[0;0H";cat /proc/$1/status ;done

Added: GNUnet/libwebserver/contrib/tools/data2header.c
===================================================================
--- GNUnet/libwebserver/contrib/tools/data2header.c     2006-08-18 20:37:47 UTC 
(rev 3245)
+++ GNUnet/libwebserver/contrib/tools/data2header.c     2006-08-18 21:41:52 UTC 
(rev 3246)
@@ -0,0 +1,41 @@
+/*
+ * by Luis Figueiredo (address@hidden)
+ */
+#include <stdio.h>
+#include <fcntl.h>
+#include <stdlib.h>
+#include <string.h>
+#ifdef WIN32
+#include <io.h>
+#endif
+
+
+
+int main(int argc, char *argv[]) { // Johannes E. Schindelin
+       unsigned char ch;
+       char *vn;
+       unsigned int i=0;
+       if(argc<2) {
+               fprintf(stderr,"Need a name for VAR\n");
+               exit(1);  // Johannes E. Schindelin
+       };
+       vn=malloc(strlen(argv[1])+1);
+       for(i=0;i<strlen(argv[1]);i++)vn[i]=toupper(argv[1][i]);
+       vn[i]='\0';
+       printf("/*\n * by data2header by Luis Figueiredo (address@hidden)\n 
*/\n");
+       printf("#ifndef _%s_H_\n",vn);
+       printf("#define _%s_H_\n\n",vn);
+       free(vn);
+       i=0;
+       printf("char %s[]=\"",argv[1]);
+       while(read(0,&ch,1)) {
+               i++;if(i>25){i=0;printf("\"\n\"");};
+               printf("\\x%X",ch);
+       };
+       printf("\";\n\n");
+       printf("#endif\n");
+       return 0; // Johannes E. Schindelin
+};
+
+                
+


Property changes on: GNUnet/libwebserver/contrib/tools/data2header.c
___________________________________________________________________
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/contrib/tools/httptest.pl
===================================================================
--- GNUnet/libwebserver/contrib/tools/httptest.pl       2006-08-18 20:37:47 UTC 
(rev 3245)
+++ GNUnet/libwebserver/contrib/tools/httptest.pl       2006-08-18 21:41:52 UTC 
(rev 3246)
@@ -0,0 +1,195 @@
+#!/usr/bin/perl
+
+
+
+use Socket;
+sub newdata {
+                #my $self = shift;
+                my ($nfound,$timeout,$rin,$rout)=(0,0.2,"");
+                vec($rin,fileno(shift()),1)=1;
+                $nfound=select($rout=$rin,undef,undef,$timeout);
+                return $nfound;
+};
+
+
+my $host = shift;
+my $port = shift || 80;
+print "\n\tWARNING: If program exit before msg that's mean that the server 
crashed or something happened to server\n\n";
+$saddr=sockaddr_in($port,inet_aton($host));
+$SIG{PIPE}=NULL;
+
+
+socket(SOCK,AF_INET,SOCK_STREAM,6) or print "Died";
+print "a normal connection\n";
+<STDIN>;
+connect(SOCK,$saddr) or exit;
+print "Connected\n";
+$header="GET / HTTP/1.0\r\nConnection: Keep-Alive\r\nUser-Agent: Mozilla/4.73 
[en] (X11; U; Linux 2.4.12 i686)\r\nHost: localhost:81\r\nAccept: image/gif, 
image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */*\r\nAccept-Encoding: 
gzip\r\nAccept-Language: en\r\nAccept-Charset: iso-8859-1,*,utf-8\r\n\r\n";
+syswrite(SOCK,"$header");
+$keep=1;
+while($keep) {
+        if(newdata(SOCK)) {
+                if(($data=<SOCK>)) {
+                        print "Read: ".$data;
+                }else {
+                       $keep=0;
+                };
+        };
+};
+close(SOCK);
+
+
+
+socket(SOCK,AF_INET,SOCK_STREAM,6) or exit;
+print "Trying to send (nothing) press (enter) to continue\n";
+<STDIN>;
+connect(SOCK,$saddr) or exit;
+print "Connected\n";
+$header="";
+syswrite(SOCK,"$header");
+$keep=1;
+while($keep) {
+        if(newdata(SOCK)) {
+                if(($data=<SOCK>)) {
+                        print "Read: ".$data;
+                }else {
+                       $keep=0;
+                };
+        };
+};
+close(SOCK);
+
+
+socket(SOCK,AF_INET,SOCK_STREAM,6) or print "Died";
+print "a post (foo)value with 10000000 bytes press (enter) to continue\n";
+<STDIN>;
+connect(SOCK,$saddr) or exit;
+print "Connected\n";
+$header="POST / HTTP/1.0\r\nConnection: Keep-Alive\r\nUser-Agent: Mozilla/4.73 
[en] (X11; U; Linux 2.4.12 i686)\r\nHost: localhost:81\r\nAccept: image/gif, 
image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */*\r\nAccept-Encoding: 
gzip\r\nAccept-Language: en\r\nAccept-Charset: 
iso-8859-1,*,utf-8\r\n\r\ndev=".("a"x1000000)."&teste=1\r\n\r\n"; #big values
+syswrite(SOCK,"$header");
+$keep=1;
+while($keep) {
+        if(newdata(SOCK)) {
+                if(($data=<SOCK>)) {
+                        print "Read: ".$data;
+                }else {
+                       $keep=0;
+                };
+        };
+};
+close(SOCK);
+
+socket(SOCK,AF_INET,SOCK_STREAM,6) or exit;
+print "Trying to send a big data for ClientInfo\n";
+<STDIN>;
+connect(SOCK,$saddr) or exit;
+print "Connected\n";
+$header="GET / HTTP/1.0\r\nConnection: Keep-Alive\r\nUser-Agent: Mozilla/4.73 
[en] (X11; U; Linux 2.4.12 i686)\r\nHost: localhost:81\r\nAccept: 
".("a"x1000000)."\r\nAccept-Encoding: gzip\r\nAccept-Language: 
en\r\nAccept-Charset: iso-8859-1,*,utf-8\r\n\r\n"; 
+syswrite(SOCK,"$header");
+$keep=1;
+while($keep) {
+        if(newdata(SOCK)) {
+                if(($data=<SOCK>)) {
+                        print "Read: ".$data;
+                }else {
+                       $keep=0;
+                };
+        };
+};
+close(SOCK);
+
+socket(SOCK,AF_INET,SOCK_STREAM,6) or exit;
+print "Change method by a big name\n";
+<STDIN>;
+connect(SOCK,$saddr) or exit;
+print "Connected\n";
+$header=("a"x1000000)." / HTTP/1.0\r\nConnection: Keep-Alive\r\nUser-Agent: 
Mozilla/4.73 [en] (X11; U; Linux 2.4.12 i686)\r\nAccept: image/gif, 
image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */*\r\nAccept-Encoding: 
gzip\r\nAccept-Language: en\r\nAccept-Charset: iso-8859-1,*,utf-8\r\n\r\n"; 
+syswrite(SOCK,"$header");
+$keep=1;
+while($keep) {
+        if(newdata(SOCK)) {
+                if(($data=<SOCK>)) {
+                        print "Read: ".$data;
+                }else {
+                       $keep=0;
+                };
+        };
+};
+close(SOCK);
+
+socket(SOCK,AF_INET,SOCK_STREAM,6) or exit;
+print "big query value\n";
+<STDIN>;
+connect(SOCK,$saddr) or exit;
+print "Connected\n";
+$header="GET /?teste=".("a"x1000000)." / HTTP/1.0\r\nConnection: 
Keep-Alive\r\nUser-Agent: Mozilla/4.73 [en] (X11; U; Linux 2.4.12 
i686)\r\nAccept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, 
image/png, */*\r\nAccept-Encoding: gzip\r\nAccept-Language: 
en\r\nAccept-Charset: iso-8859-1,*,utf-8\r\n\r\n"; 
+syswrite(SOCK,"$header");
+$keep=1;
+while($keep) {
+        if(newdata(SOCK)) {
+                if(($data=<SOCK>)) {
+                        print "Read: ".$data;
+                }else {
+                       $keep=0;
+                };
+        };
+};
+close(SOCK);
+
+socket(SOCK,AF_INET,SOCK_STREAM,6) or exit;
+print "requestname filled w 0's\n";
+<STDIN>;
+connect(SOCK,$saddr) or exit;
+print "Connected\n";
+$header="GET /".("\0"x1000000)." HTTP/1.0\r\nConnection: 
Keep-Alive\r\nUser-Agent: Mozilla/4.73 [en] (X11; U; Linux 2.4.12 
i686)\r\nAccept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, 
image/png, */*\r\nAccept-Encoding: gzip\r\nAccept-Language: 
en\r\nAccept-Charset: iso-8859-1,*,utf-8\r\n\r\n"; 
+syswrite(SOCK,"$header");
+$keep=1;
+while($keep) {
+        if(newdata(SOCK)) {
+                if(($data=<SOCK>)) {
+                        print "Read: ".$data;
+                }else {
+                       $keep=0;
+                };
+        };
+};
+close(SOCK);
+
+socket(SOCK,AF_INET,SOCK_STREAM,6) or exit;
+print "query filled w 0's\n";
+<STDIN>;
+connect(SOCK,$saddr) or exit;
+print "Connected\n";
+$header="GET /teste?teste=".("\0"x1000000)." HTTP/1.0\r\nConnection: 
Keep-Alive\r\nUser-Agent: Mozilla/4.73 [en] (X11; U; Linux 2.4.12 
i686)\r\nAccept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, 
image/png, */*\r\nAccept-Encoding: gzip\r\nAccept-Language: 
en\r\nAccept-Charset: iso-8859-1,*,utf-8\r\n\r\n"; 
+syswrite(SOCK,"$header");
+$keep=1;
+while($keep) {
+        if(newdata(SOCK)) {
+                if(($data=<SOCK>)) {
+                        print "Read: ".$data;
+                }else {
+                       $keep=0;
+                };
+        };
+};
+close(SOCK);
+
+socket(SOCK,AF_INET,SOCK_STREAM,6) or print "Died";
+print "a post (foo)value with 10000000 bytes press (enter) to continue\n";
+<STDIN>;
+connect(SOCK,$saddr) or exit;
+print "Connected\n";
+$header="POST / HTTP/1.0\r\nConnection: Keep-Alive\r\nUser-Agent: Mozilla/4.73 
[en] (X11; U; Linux 2.4.12 i686)\r\nHost: localhost:81\r\nAccept: image/gif, 
image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */*\r\nAccept-Encoding: 
gzip\r\nAccept-Language: en\r\nAccept-Charset: 
iso-8859-1,*,utf-8\r\n\r\ndev=teste".("\0"x1000000)."&teste=1\r\n\r\n"; #big 
values
+syswrite(SOCK,"$header");
+$keep=1;
+while($keep) {
+        if(newdata(SOCK)) {
+                if(($data=<SOCK>)) {
+                        print "Read: ".$data;
+                }else {
+                       $keep=0;
+                };
+        };
+};
+
+print "--------- END --------\n"

Added: GNUnet/libwebserver/contrib/tools/myvc_install.bat
===================================================================
--- GNUnet/libwebserver/contrib/tools/myvc_install.bat  2006-08-18 20:37:47 UTC 
(rev 3245)
+++ GNUnet/libwebserver/contrib/tools/myvc_install.bat  2006-08-18 21:41:52 UTC 
(rev 3246)
@@ -0,0 +1 @@
+copy ..\bin\libwebserver.lib "C:\Programas\Microsoft Visual 
Studio\VC98\Lib\libwebserver.lib"

Added: GNUnet/libwebserver/contrib/tools/win2unix.sh
===================================================================
--- GNUnet/libwebserver/contrib/tools/win2unix.sh       2006-08-18 20:37:47 UTC 
(rev 3245)
+++ GNUnet/libwebserver/contrib/tools/win2unix.sh       2006-08-18 21:41:52 UTC 
(rev 3246)
@@ -0,0 +1,2 @@
+#!/bin/sh
+for i in `find . -name "*" -xtype f`; do echo "Messing with $i";cat $i |tr -d 
\\r >.1; mv .1 $i ; done


Property changes on: GNUnet/libwebserver/contrib/tools/win2unix.sh
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/doc/examples/SoundRecorder/include/debug.h
===================================================================
--- GNUnet/libwebserver/doc/examples/SoundRecorder/include/debug.h      
2006-08-18 20:37:47 UTC (rev 3245)
+++ GNUnet/libwebserver/doc/examples/SoundRecorder/include/debug.h      
2006-08-18 21:41:52 UTC (rev 3246)
@@ -0,0 +1,24 @@
+/* by Luis Figueiredo (address@hidden)
+ *
+ *
+ * date: Sat Mar 30 14:16:05 GMT 2002
+ *
+ *     DEBUG macros
+ *
+ */
+
+#ifndef _DEBUG_H_
+#define _DEBUG_H_
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif         
+
+#ifdef DEBUG
+       #define IFDEBUG(x) x
+#else
+       #define IFDEBUG(x)
+#endif
+
+
+#endif


Property changes on: 
GNUnet/libwebserver/doc/examples/SoundRecorder/include/debug.h
___________________________________________________________________
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/doc/examples/SoundRecorder/include/soundbuffers.h
===================================================================
--- GNUnet/libwebserver/doc/examples/SoundRecorder/include/soundbuffers.h       
2006-08-18 20:37:47 UTC (rev 3245)
+++ GNUnet/libwebserver/doc/examples/SoundRecorder/include/soundbuffers.h       
2006-08-18 21:41:52 UTC (rev 3246)
@@ -0,0 +1,39 @@
+/* by Luis Figueiredo (address@hidden)
+ *
+ * file: sound_buffers.h
+ *
+ * description: Holds sound data structures and functions
+ *
+ * date: 13:14,29-14-2002
+ */
+
+#ifndef _SOUND_BUFFERS_H_ 
+#define _SOUND_BUFFERS_H_
+
+#include <stdio.h>
+#include <fcntl.h>
+#include <stdlib.h>
+#include <string.h>
+
+struct sound_buf {
+       char *id;
+       unsigned char *data;
+       unsigned int data_i;
+       unsigned int play_i;
+       unsigned int startloop,endloop;
+       unsigned char volume;
+       unsigned char channels;
+       int mode;
+       struct sound_buf *next;
+};
+
+
+struct sound_buf *sbuf_init();
+struct sound_buf *sbuf_add(struct sound_buf *list,char *id);
+struct sound_buf *sbuf_select(struct sound_buf *list,char *id);
+int sbuf_delete(struct sound_buf *list,char *id);
+
+
+       
+
+#endif


Property changes on: 
GNUnet/libwebserver/doc/examples/SoundRecorder/include/soundbuffers.h
___________________________________________________________________
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/doc/examples/SoundRecorder/include/soundcard.h
===================================================================
--- GNUnet/libwebserver/doc/examples/SoundRecorder/include/soundcard.h  
2006-08-18 20:37:47 UTC (rev 3245)
+++ GNUnet/libwebserver/doc/examples/SoundRecorder/include/soundcard.h  
2006-08-18 21:41:52 UTC (rev 3246)
@@ -0,0 +1,31 @@
+/* by Luis Figueiredo (address@hidden)
+ *
+ * file: soundcard.h
+ *
+ * description: handlers soundcard setup
+ *
+ * date: 17:00,13-00-2002
+ */
+
+#ifndef _SOUNDCARD_H_ 
+#define _SOUNDCARD_H_
+
+#include <fcntl.h>
+#include <sys/soundcard.h>
+#include <stdio.h>
+#include <sys/ioctl.h>
+
+#include "debug.h"
+
+struct soundcard_setup {
+        int rate;
+        char channels;
+        int fmt;
+};
+
+int soundcard_init(const char *, struct soundcard_setup *);
+
+
+
+
+#endif


Property changes on: 
GNUnet/libwebserver/doc/examples/SoundRecorder/include/soundcard.h
___________________________________________________________________
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/doc/examples/SoundRecorder/include/soundmixer.h
===================================================================
--- GNUnet/libwebserver/doc/examples/SoundRecorder/include/soundmixer.h 
2006-08-18 20:37:47 UTC (rev 3245)
+++ GNUnet/libwebserver/doc/examples/SoundRecorder/include/soundmixer.h 
2006-08-18 21:41:52 UTC (rev 3246)
@@ -0,0 +1,23 @@
+/* by Luis Figueiredo (address@hidden)
+ *
+ * file: soundmixer.h
+ *
+ * description: Sound mixer using (soundbuffers.c)
+ *
+ * date: 17:13,13-13-2002
+ */
+
+#ifndef _SOUNDMIXER_H_ 
+#define _SOUNDMIXER_H_
+
+#include <stdio.h>
+#include <unistd.h>
+
+
+#include "soundbuffers.h"
+
+#define _SDMAX 44100 // quarter second *2 *2
+
+void sound_process(int soundfd,struct sound_buf *list);
+
+#endif


Property changes on: 
GNUnet/libwebserver/doc/examples/SoundRecorder/include/soundmixer.h
___________________________________________________________________
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/doc/examples/SoundRecorder/src/main.c
===================================================================
--- GNUnet/libwebserver/doc/examples/SoundRecorder/src/main.c   2006-08-18 
20:37:47 UTC (rev 3245)
+++ GNUnet/libwebserver/doc/examples/SoundRecorder/src/main.c   2006-08-18 
21:41:52 UTC (rev 3246)
@@ -0,0 +1,296 @@
+/* by Luis Figueiredo (address@hidden)
+ *
+ * file: main.c
+ *
+ * description: Programa main
+ *
+ * date: 16:47,13-47-2002
+ */
+
+
+#include "soundcard.h"
+#include "soundbuffers.h"
+#include "soundmixer.h"
+#include "web_server.h"
+#include <signal.h>
+
+#define ADJUST_VOLUME(s, v)     (s = (s*v)/128)
+
+int PORT=80;
+struct sound_buf *SoundBuf;
+
+void outgif() {
+       char *nam;
+       struct sound_buf *sbuf=NULL;
+       char gif[640*40+1];
+       int x=0,y=0;
+       int i,h=20;
+       short d;
+       nam=malloc(strlen(ClientInfo->request)-3);
+       memcpy(nam,ClientInfo->request+1,strlen(ClientInfo->request)-4);
+       nam[strlen(ClientInfo->request)-5]=0;
+       sbuf=sbuf_select(SoundBuf,nam);
+       if(sbuf!=NULL) {
+               if(sbuf->data_i>_SDMAX) {
+                       if(gif!=NULL) {
+                               memset(gif,0,640*40);
+                               for(i=0;i<1280;i++) {
+                                       x=i/2;
+                                       //y=(*((unsigned short 
*)sbuf->data+((i*4)%640))%20)+10;
+                                       
d=((sbuf->data[((i*((sbuf->data_i-1280)/2560))*2)+1]<<8)|sbuf->data[((i*((sbuf->data_i-1280)/2560))*2)]);
+                                       y=d/(32767/20)+20;
+                                       //fprintf(stderr,"y=%d\n",y);
+                                       //gif[x+y*640]=10;
+                                       if(h>y) {
+                                               for(h=20;h>y;h--) 
gif[x+h*640]=10;
+                                       } else {
+                                               for(h=20;h<=y;h++) 
gif[x+h*640]=10;
+                                       };
+
+                               };
+                               printf("Cache-control: no-cache\r\n");
+                               printf("Content-type: image/gif\r\n\r\n");
+                               web_client_gifoutput(gif,640,40,0);
+                       };
+               };
+       };
+       free(nam);
+       return;
+};
+void dlbuf() {
+       char *nam;
+       struct sound_buf *sbuf=NULL;
+       nam=malloc(strlen(ClientInfo->request)-3);
+       memcpy(nam,ClientInfo->request+1,strlen(ClientInfo->request)-4);
+       nam[strlen(ClientInfo->request)-5]=0;
+       sbuf=sbuf_select(SoundBuf,nam);
+       printf("Content-type: x-form/application\r\n\r\n");
+       if(sbuf!=NULL) {
+               fwrite(sbuf->data,sbuf->data_i,1,stdout);
+       };
+
+};
+
+void index_html() {
+       struct sound_buf *sbuf=NULL;
+       char *id;
+       char *tmp;
+       int i;
+       unsigned char *soundout=NULL;
+       short src1,src2;
+       int dst_sample;
+       const int max_audioval =((1<<(16-1))-1);
+       const int min_audioval =-(1<<(16-1));
+       int bigger=0;
+                                       
+       printf("Cache-control: no-cache\r\n");
+       printf("Content-type: text/html\r\n\r\n");
+       printf("<HTML>\n");
+       printf("<BODY>\n");
+       printf("<center>Sound Recorder (webgui)</center>\n");
+       if(*ClientInfo->Post("sbufnew")!=0) {
+               if(*ClientInfo->Post("sbufname")!=0) {
+                       if(!sbuf_select(SoundBuf,ClientInfo->Post("sbufname"))) 
{
+                               
sbuf=sbuf_add(SoundBuf,ClientInfo->Post("sbufname"));
+                               if(ClientInfo->MultiPart("sbufdata").size>0) {
+                                       
sbuf->data=malloc(ClientInfo->MultiPart("sbufdata").size);
+                                       
memcpy(sbuf->data,ClientInfo->MultiPart("sbufdata").data,ClientInfo->MultiPart("sbufdata").size);
+                                       
sbuf->data_i=ClientInfo->MultiPart("sbufdata").size;
+                               };
+                       } else {
+                               printf("<FONT color='FF0000'>Sound buffer 
exists</font>\n");
+                       };
+
+               }else {
+                       printf("<FONT color='FF0000'>Sound buffer name is 
empty</font>\n");
+               };
+       };
+       if(*ClientInfo->Post("sbufvol")!=0) {
+               sbuf=SoundBuf->next;
+               while(sbuf!=NULL) {
+                       tmp=malloc(strlen(sbuf->id)+5);
+                       snprintf(tmp,strlen(sbuf->id)+5,"%s.vol",sbuf->id);
+                       sbuf->volume=atoi(ClientInfo->Post(tmp))%129;
+                       free(tmp);
+                       sbuf=sbuf->next;
+               }
+       };
+       if(*ClientInfo->Post("sbufch")!=0) {
+               sbuf=SoundBuf->next;
+               while(sbuf!=NULL) {
+                       tmp=malloc(strlen(sbuf->id)+4);
+                       snprintf(tmp,strlen(sbuf->id)+4,"%s.ch",sbuf->id);
+                       sbuf->channels=atoi(ClientInfo->Post(tmp))%3;
+                       free(tmp);
+                       sbuf=sbuf->next;
+               }
+       };
+
+       printf("<form method='POST' enctype='multipart/form-data'>\n");
+
+       printf("Sound Buffer:<BR>\n");
+       printf("Name:<input type=text name='sbufname' size=5 
maxlength=10><BR>\n");
+       printf("Data:<input type=file name='sbufdata'><BR>\n");
+       printf("<input type=submit name='sbufnew' value=' New '><BR>\n");
+
+       printf("<table width=100%% cellpadding=2 cellspacing=0 
bgcolor='AAAAAA'>\n");
+       printf("<TR><TD colspan=7 align=center><font face='Helvetica' size=6 
color='FFFFFF'> Sound Buffers </font></TD></TR>\n");
+       sbuf=SoundBuf->next;
+       i=0;
+       while(sbuf!=NULL) {
+               if(*ClientInfo->Post("sbufprocess")!=0) {
+                       if(atoi(ClientInfo->Post(sbuf->id))==5) {
+                               sbuf->mode=0;
+                               sbuf->play_i=0;
+                               if(sbuf->data_i>bigger) {
+                                       bigger=sbuf->data_i;
+                                        soundout=realloc(soundout,bigger);
+                               };
+                               for(i=0;i<sbuf->data_i;i+=4) {
+                                       // LEFT
+                                       src1=((sbuf->data[i+1]<<8) | 
sbuf->data[i]);
+                                       ADJUST_VOLUME(src1,sbuf->volume);
+                                       src2=((soundout[i+1]<<8) | soundout[i]);
+                                       dst_sample=src1+src2;
+                                       if ( dst_sample > max_audioval ) {
+                                               dst_sample = max_audioval;
+                                       } else if ( dst_sample < min_audioval ) 
{
+                                               dst_sample = min_audioval;
+                                       }
+                                       soundout[i]=dst_sample &0xFF;
+                                       dst_sample>>=8;
+                                       soundout[i+1]=dst_sample & 0xFF;
+                                       // RIGHT
+                                       src1=((sbuf->data[i+1+2]<<8) | 
sbuf->data[i+2]);
+                                       ADJUST_VOLUME(src1,sbuf->volume);
+                                       if(sbuf->channels==2) {
+                                               src2=((soundout[i+1+2]<<8) | 
soundout[i+2]); // join left to right
+                                       } else {
+                                               src2=((soundout[i+1]<<8) | 
soundout[i]); // separate
+                                       };
+                                       dst_sample=src1+src2;
+                                       if ( dst_sample > max_audioval ) {
+                                               dst_sample = max_audioval;
+                                       } else if ( dst_sample < min_audioval ) 
{
+                                               dst_sample = min_audioval;
+                                       }
+                                       soundout[i+2]=dst_sample &0xFF;
+                                       dst_sample>>=8;
+                                       soundout[i+2+1]=dst_sample & 0xFF;
+                               };
+
+                       } else {
+                               sbuf->mode=atoi(ClientInfo->Post(sbuf->id));
+                               tmp=malloc(strlen(sbuf->id)+5);
+                               
snprintf(tmp,strlen(sbuf->id)+5,"%s.vol",sbuf->id);
+                               sbuf->volume=atoi(ClientInfo->Post(tmp))%129;
+                               free(tmp);
+                               sbuf->play_i=0;
+                       };
+               };
+               if(sbuf->mode!=4) {
+                       printf("<TR><TD bgcolor='EFEFEF'><font 
face='Verdana'>%s</font></TD><TD>",sbuf->id);
+                       printf("<select name='%s'>",sbuf->id);
+                       printf("<option value='0' 
%s>none</option>\n",(atoi(ClientInfo->Post(sbuf->id))==0)?"selected":"");
+                       printf("<option value='1' 
%s>play</option>\n",(atoi(ClientInfo->Post(sbuf->id))==1)?"selected":"");
+                       printf("<option value='2' 
%s>record</option>\n",(atoi(ClientInfo->Post(sbuf->id))==2)?"selected":"");
+                       printf("<option value='3'>reset</option>\n");
+                       printf("<option value='4'>delete</option>\n");
+                       printf("<option value='5'>mixfrom</option>\n");
+                       printf("<option value='6'>mixto</option>\n");
+                       printf("</select>\n");
+                       
printf("</TD><TD>%dm:%ds</TD>",(sbuf->data_i/44100/2/2)/60,(sbuf->data_i/44100/2/2%60));
+                       printf("</TD><TD>\n");
+                       printf("<select name='%s.ch'>\n",sbuf->id);
+                       printf("<option value='1' 
%s>Mono</option>\n",(sbuf->channels==1)?"selected":"");
+                       printf("<option value='2' 
%s>Stereo</option>\n",(sbuf->channels==2)?"selected":"");
+                       printf("</select></TD>");
+                       
+                       printf("</TD><TD>Volume:<BR>\n");
+                       printf("<input type=text name=%s.vol size=3 maxlength=3 
value='%d'></TD>",sbuf->id,sbuf->volume);
+                       printf("<TD width=100%%> <input type=image width=100%% 
height=40 src='/%s.gif' border=0></TD>\n",sbuf->id);
+                       printf("<TD><a 
href='/%s.raw'>Download</a></TD></TR>\n",sbuf->id);
+               }
+               if(sbuf->mode==3) {
+                       sbuf->data_i=0;
+                       sbuf->play_i=0;
+                       free(sbuf->data);
+                       sbuf->data=NULL;
+                       sbuf->mode=0;
+               };
+
+               id=sbuf->id;    
+               sbuf=sbuf->next;
+               if(atoi(ClientInfo->Post(id))==4) {
+                       sbuf_delete(SoundBuf,id);
+               }
+               i++;
+       };
+       // mix to (6)
+       sbuf=SoundBuf->next;
+       while(sbuf!=NULL) {
+               if(atoi(ClientInfo->Post(sbuf->id))==6) {
+                       free(sbuf->data); // free previous
+                       sbuf->data=malloc(bigger+1);
+                       memcpy(sbuf->data,soundout,bigger);
+                       sbuf->data_i=bigger;
+                       sbuf->mode=0;
+                       sbuf->play_i=0;
+                       sbuf->volume=128;
+               };
+               sbuf=sbuf->next;
+       };
+       if(i) printf("<TR><TD align=center valign=center>.</TD><TD><input 
type=submit name='sbufprocess' value=' Process '></TD><TD align=center 
valign=center>.</TD><TD><input type=submit name='sbufch' 
value='Set'></TD><TD><input type=submit name='sbufvol' 
value='Set'></TD><TD>.</TD><TD>.</TD></TR>\n");
+
+       printf("</TABLE>\n");
+       printf("</form>\n");
+
+
+
+
+
+
+};
+
+
+
+
+
+
+
+
+
+
+int main() {
+       struct web_server server;
+       int soundfd;
+       struct soundcard_setup SoundSetup;
+       signal(SIGPIPE,SIG_IGN);        
+       
+       SoundBuf=sbuf_init();   
+       
+       
+       SoundSetup.rate=44100;
+       SoundSetup.channels=2;
+       SoundSetup.fmt=16;      
+       
+       soundfd=soundcard_init("/dev/dsp",&SoundSetup);
+       if(soundfd<1) {
+               return 0;
+       };
+       
+       
+       while(!web_server_init(&server,PORT,NULL,0))PORT++;
+       printf("http://localhost:%d\n",PORT);
+
+       web_server_addhandler(&server,"* /*.gif",outgif,WS_LOCAL);
+       web_server_addhandler(&server,"* /*.raw",dlbuf,WS_LOCAL);
+       web_server_addhandler(&server,"* /*",index_html,WS_LOCAL);
+
+       while(1) {
+               sound_process(soundfd,SoundBuf);
+               web_server_run(&server);
+       };
+
+
+};


Property changes on: GNUnet/libwebserver/doc/examples/SoundRecorder/src/main.c
___________________________________________________________________
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/doc/examples/SoundRecorder/src/soundbuffers.c
===================================================================
--- GNUnet/libwebserver/doc/examples/SoundRecorder/src/soundbuffers.c   
2006-08-18 20:37:47 UTC (rev 3245)
+++ GNUnet/libwebserver/doc/examples/SoundRecorder/src/soundbuffers.c   
2006-08-18 21:41:52 UTC (rev 3246)
@@ -0,0 +1,86 @@
+/* by Luis Figueiredo (address@hidden)
+ *
+ * file: sound_buffers.c
+ *
+ * description: Sounddata procedures
+ *
+ * date: 13:23,29-23-2002
+ */
+
+#include "soundbuffers.h"
+
+
+/*
+ * init list
+ */
+struct sound_buf *sbuf_init() {
+       struct sound_buf *head;
+       head=malloc(sizeof(struct sound_buf));
+       head->next=NULL;
+       head->data_i=0;
+       head->data=NULL;
+       head->id=NULL;
+       return head;
+};
+
+struct sound_buf *sbuf_select(struct sound_buf *list,char *id) {
+       struct sound_buf *temp=list;
+       while(temp->next!=NULL) {
+               if(temp->next->id!=NULL) {
+                       if(!strcmp(temp->next->id,id)) {
+                               return temp->next;
+                       };
+               };
+               temp=temp->next;
+       };
+       return NULL;
+};
+
+
+/*
+ * next prototipe go to select_buffer
+ */
+struct sound_buf *sbuf_add(struct sound_buf *list,char *id) {
+       struct sound_buf *temp=list;
+       while(temp->next!=NULL) {
+               if(temp->next->id!=NULL) {
+                       if(!strcmp(temp->next->id,id)) {
+                               return NULL;
+                       };
+                       temp=temp->next; // Next buffer
+               };
+       };
+       // id is new lets create this buffer
+       temp->next=malloc(sizeof(struct sound_buf));
+       // lets copy the new id 
+       temp->next->id=malloc(strlen(id)+1);
+       strncpy(temp->next->id,id,strlen(id));
+       temp->next->id[strlen(id)]=0;
+       // zero the rest;
+       temp->next->data=NULL;
+       temp->next->data_i=0;
+       temp->next->play_i=0;
+       temp->next->mode=0;
+       temp->next->volume=128;
+       temp->next->next=NULL;
+       return temp->next;
+};
+
+int sbuf_delete(struct sound_buf *list,char *id) {
+       struct sound_buf *temp=list;
+       struct sound_buf *t;
+       while(temp->next!=NULL) {
+               if(temp->next->id!=NULL) {
+                       if(!strcmp(temp->next->id,id)) {
+                               t=temp->next;
+                               temp->next=temp->next->next;
+                               free(t->data);
+                               free(t->id);
+                               free(t);
+                               return 1;
+                       };
+               };
+               temp=temp->next;
+       };
+       return 0;
+};


Property changes on: 
GNUnet/libwebserver/doc/examples/SoundRecorder/src/soundbuffers.c
___________________________________________________________________
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/doc/examples/SoundRecorder/src/soundcard.c
===================================================================
--- GNUnet/libwebserver/doc/examples/SoundRecorder/src/soundcard.c      
2006-08-18 20:37:47 UTC (rev 3245)
+++ GNUnet/libwebserver/doc/examples/SoundRecorder/src/soundcard.c      
2006-08-18 21:41:52 UTC (rev 3246)
@@ -0,0 +1,49 @@
+/* by Luis Figueiredo (address@hidden)
+ *
+ * file: soundcard.c
+ *
+ * description: handlers soundcard setup
+ *
+ * date: 17:00,13-00-2002
+ */
+
+#include "soundcard.h"
+
+
+
+
+
+
+int soundcard_init(const char *dev, struct soundcard_setup *ss) {
+        int ret;
+       int soundfd;
+       soundfd=open(dev,O_RDWR|O_NONBLOCK);
+       if(soundfd <1) {
+               perror("open");
+               return -1;
+       }
+        IFDEBUG(fprintf(stderr,"soundcard.c: Setting soundcard:\n"));
+        IFDEBUG(fprintf(stderr,"soundcard.c: rate: %d\n",ss->rate));
+        ret=ioctl(soundfd,SNDCTL_DSP_SPEED,&ss->rate);
+        if(ret==-1) {
+                perror("ioctl");
+                return-1 ;
+        };
+        IFDEBUG(fprintf(stderr,"soundcard.c: channels: %d\n",ss->channels));
+        ret=ioctl(soundfd,SNDCTL_DSP_CHANNELS,&ss->channels);
+        if(ret==-1) {
+                perror("ioctl");
+                return -1;
+        };
+        IFDEBUG(fprintf(stderr,"soundcard.c: fmt %d\n",ss->fmt));
+        ret=ioctl(soundfd,SNDCTL_DSP_SETFMT,&ss->fmt);
+        if(ret==-1) {
+                perror("ioctl");
+                return -1;
+        };
+        IFDEBUG(fprintf(stderr,"Sound card setup sucessfull\n"));
+       return soundfd;
+};
+
+
+


Property changes on: 
GNUnet/libwebserver/doc/examples/SoundRecorder/src/soundcard.c
___________________________________________________________________
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/doc/examples/SoundRecorder/src/soundmixer.c
===================================================================
--- GNUnet/libwebserver/doc/examples/SoundRecorder/src/soundmixer.c     
2006-08-18 20:37:47 UTC (rev 3245)
+++ GNUnet/libwebserver/doc/examples/SoundRecorder/src/soundmixer.c     
2006-08-18 21:41:52 UTC (rev 3246)
@@ -0,0 +1,104 @@
+/* by Luis Figueiredo (address@hidden)
+ *
+ * file: soundmixer.c
+ *
+ * description: Sound mixer using (soundbuffers.c)
+ *
+ * date: 17:13,13-13-2002
+ */
+
+
+#include "soundmixer.h"
+
+
+int SDMAX=_SDMAX;
+#define ADJUST_VOLUME(s, v)     (s = (s*v)/128)
+
+int soundout_i=-1;
+void sound_process(int soundfd,struct sound_buf *list) {
+       int soundin_i;
+       struct sound_buf *sbuf;
+       unsigned char soundin[_SDMAX+1];
+       unsigned char soundout[_SDMAX+1];
+       int playit=0;
+       int i;  
+       short src1,src2;
+       int dst_sample;
+       const int max_audioval =((1<<(16-1))-1);
+       const int min_audioval =-(1<<(16-1));
+       soundin_i=read(soundfd,soundin,_SDMAX);
+       sbuf=list->next;
+       while(sbuf!=NULL) {
+               if(soundin_i>0) {
+                       if(sbuf->mode==2) {
+                                       
sbuf->data=realloc(sbuf->data,sbuf->data_i+soundin_i);
+                                       
memcpy(sbuf->data+sbuf->data_i,soundin,soundin_i);
+                                       sbuf->data_i+=soundin_i;
+                       };
+               };
+               if(sbuf->mode==1 && soundout_i==-1) {
+                       for(i=0;i<SDMAX && (sbuf->play_i+i)<sbuf->data_i;i+=4) {
+                               // LEFT
+                               src1=((sbuf->data[sbuf->play_i+i+1]<<8) | 
sbuf->data[sbuf->play_i+i]);
+                               ADJUST_VOLUME(src1,sbuf->volume);
+                               src2=((soundout[i+1]<<8) | soundout[i]);
+                               dst_sample=src1+src2;
+                               if ( dst_sample > max_audioval ) {
+                                       dst_sample = max_audioval;
+                               } else if ( dst_sample < min_audioval ) {
+                                       dst_sample = min_audioval;
+                               }
+                               soundout[i]=dst_sample &0xFF;
+                               dst_sample>>=8;
+                               soundout[i+1]=dst_sample & 0xFF;
+                               // RIGHT
+                               src1=((sbuf->data[sbuf->play_i+i+1+2]<<8) | 
sbuf->data[sbuf->play_i+i+2]);
+                               ADJUST_VOLUME(src1,sbuf->volume);
+                               if(sbuf->channels==2) { 
+                                       src2=((soundout[i+1+2]<<8) | 
soundout[i+2]); // join left to right
+                               } else {
+                                       src2=((soundout[i+1]<<8) | 
soundout[i]); // separate
+                               };
+                               dst_sample=src1+src2;
+                               if ( dst_sample > max_audioval ) {
+                                       dst_sample = max_audioval;
+                               } else if ( dst_sample < min_audioval ) {
+                                       dst_sample = min_audioval;
+                               }
+                               soundout[i+2]=dst_sample &0xFF;
+                               dst_sample>>=8;
+                               soundout[i+2+1]=dst_sample & 0xFF;
+
+                       };
+                       sbuf->play_i+=SDMAX;
+                       if(sbuf->play_i>sbuf->data_i){ 
+                               if(sbuf->mode==1) {
+                                       sbuf->mode=0; // end,stop it
+                               }
+                               if(sbuf->mode==3) {
+                                       sbuf->play_i=0;
+                               };
+                       }
+                       playit=1;
+               };
+               sbuf=sbuf->next;// next buffer
+       };
+       if(playit) {
+               soundout_i=0;
+               playit=0;
+       };
+       if(soundout_i<SDMAX && soundout_i!=-1) {
+               i=write(soundfd,soundout+soundout_i,SDMAX-soundout_i);
+               if(i>0) {
+                       soundout_i+=i;
+               };
+       } else {
+               memset(soundout,0,SDMAX);
+               soundout_i=-1;
+       };
+
+}
+
+
+
+


Property changes on: 
GNUnet/libwebserver/doc/examples/SoundRecorder/src/soundmixer.c
___________________________________________________________________
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/doc/examples/cgi-bin/index.cgi
===================================================================
--- GNUnet/libwebserver/doc/examples/cgi-bin/index.cgi  2006-08-18 20:37:47 UTC 
(rev 3245)
+++ GNUnet/libwebserver/doc/examples/cgi-bin/index.cgi  2006-08-18 21:41:52 UTC 
(rev 3246)
@@ -0,0 +1,1137 @@
+#!/usr/bin/perl
+# Footnet software experimental de football para a net (cgi)... por Luis 
Figueiredo (address@hidden)
+#
+#
+#
+
+#use strict;
+my %POST;
+my %QUERY_STRING;
+my %COOKIE;
+my %img;
+my $stdindata;
+my $softversion="Foot ball net V0.5 (alpha)\n";
+
+
+## CONFIG DATABASE
+$dbname="footaid";
+$dbdriver="mysql";
+$dbuser="footaid";
+$dbpass="sqlpass";
+
+
+# convert images to hex strings 'unpack("h*",..);'
+$f1=shift;
+if($f1 eq "--conv") {
+       $file1 = shift;
+       open($ff,"< $file1") or die "Cannot find file $file1\n";
+       while(<$ff>) {
+               $data.=$_;
+       };
+       $newdata=unpack("h*",$data);
+       print $newdata;
+       exit;
+};
+if($f1 eq "--initdb") {
+       print "Will create on database $dbname\n";
+       $db=DBI->connect("dbi:$dbdriver:dbname=$dbname","$dbuser","$dbpass");
+       $db->do("create table userinfo (userid varchar(14) unique not 
null,password varchar(14),nome varchar(32),email varchar(160),phone 
varchar(13),lid integer,lldate integer default '0')");
+       $db->do("create table msg (id integer unique not null,useridto 
varchar(14) not null,useridfrom varchar(14) not null,data integer,subject 
varchar(40),mensagem text,lida varchar(1) default '0')");      
+       $db->do("create table forum (id integer unique not null,useridfrom 
varchar(14) not null, subject varchar(40),message text,date integer,replyto 
integer default '-1')");
+       $db->do("create table noticia (id integer unique not null,useridto 
varchar(14) not null,noticia text,date integer,rdate integer,lida varchar(1) 
default '0')");
+       $db->do("create table equipa (equipaid varchar(60) unique not 
null,userid varchar(14) unique,jogdisp integer default '12')");
+       $db->do("create table jogador (nome varchar(32) unique not 
null,equipaid varchar(60) not null,vel integer default '0',forc integer default 
'0',agi integer default '0',efi integer default '0',exp integer default 
'0',golosm integer default '0',fel integer default '500',tipo integer default 
'2',doing integer default '0',ordenado integer default '10')");
+       $db->do("create table conta (id integer unique not null,userid 
varchar(14) unique not null,value integer)");
+       $db->do("create table treino (jogid varchar(160) unique not null,treino 
varchar(5),date integer,fdate integer)");       
+       $db->do("create table pos (id integer unique not null,namepos 
varchar(60))");
+       $db->do("insert into pos values('0','Guarda Redes');");
+       $db->do("insert into pos values('1','Defesa');");
+       $db->do("insert into pos values('2','M�dio');");
+       $db->do("insert into pos values('3','Avan�ado');");
+       $db->do("create table doing (id integer not null,dowhat varchar(60))");
+       $db->do("insert into doing values('0','Nada');");
+       $db->do("insert into doing values('1','Treino');");
+       $db->do("insert into doing values('2','Jogar');");
+       $db->do("insert into doing values('3','Lesionado');");
+       exit;
+};
+
+
+
+while(<STDIN>) {
+       $stdindata.=$_;
+};
+#print STDERR "stdindata is $stdindata\n";
+if($ENV{QUERY_STRING}) {
+        my (@varsdata)=split(/&/,$ENV{QUERY_STRING});
+        foreach (@varsdata) {
+                my ($name,$value)=split(/=/,$_);
+                $value =~ s/\+/ /g;
+                $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
+                $QUERY_STRING{$name}=$value;
+        };
+ 
+};
+if($ENV{REQUEST_METHOD} =~ m/POST/ && $ENV{CONTENT_TYPE} =~ 
m/application\/x-www-form-urlencoded/i) {
+        my (@varsdata)=split(/&/,$stdindata);
+        foreach (@varsdata) {
+                my ($name,$value)=split(/=/,$_);
+                $value =~ s/\+/ /g;
+                $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
+                $POST{$name}=$value;
+        };
+ 
+};                              
+if($ENV{HTTP_COOKIE} || $ENV{COOKIE}) {
+       #print STDERR "$ENV{HTTP_COOKIE}\n";
+       my $cookie=$ENV{HTTP_COOKIE} || $ENV{COOKIE};
+       my(@cookiedata)=split(/; /,$cookie);
+       foreach(@cookiedata) {
+               $_ =~ /(.*?)=(.*)/;     
+               $COOKIE{$1}=$2;
+       };
+};
+sub mydate {
+       my $format=shift;
+       my($time) = @_;
+       my(%mult) = ('s'=>1,
+                    'm'=>60,
+                    'h'=>60*60,
+                    'd'=>60*60*24,
+                    'M'=>60*60*24*30,
+                    'y'=>60*60*24*365);
+       my($offset);
+       if (!$time || (lc($time) eq 'now')) {
+           $offset = 0;
+       } elsif ($time=~/^\d+/) {
+           $offset=($time-time);
+       } elsif ($time=~/^([+-]?(?:\d+|\d*\.\d*))([smhdMy]?)/) {
+           $offset = ($mult{$2} || 1)*$1;
+       } else {
+           $offset=($time-time);
+       }
+       my(@MON)=qw/Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec/;
+       my(@LMON)=qw/January February March April May June July August 
September October November December/;
+       my(@WDAY) = qw/Sun Mon Tue Wed Thu Fri Sat/;    
+       my(@LWDAY) = qw/Sunday Monday Tuesday Wednesday Thursday Friday 
Saturdat/;      
+       my($sec,$min,$hour,$mday,$mon,$year,$wday) = gmtime(time+$offset);      
+       $year+=1900;
+       $format =~ s/\%Y/$year/eg;
+       $format =~ s/\%a/$WDAY[$wday]/eg;
+       $format =~ s/\%A/$LWDAY[$wday]/eg;
+       $format =~ s/\%m/sprintf("%02d",$mon+1)/eg;
+       $format =~ s/\%d/sprintf("%02d",$mday)/eg;
+       $format =~ s/\%H/sprintf("%02d",$hour)/eg;
+       $format =~ s/\%M/sprintf("%02d",$min)/eg;
+       $format =~ s/\%S/sprintf("%02d",$sec)/eg;
+       $format =~ s/\%b/$MON[$mon]/eg;
+       $format =~ s/\%B/$LMON[$mon]/eg;
+       $format =~ s/\%Z/GMT/g;
+       $format =~ s/\%g/time()+$offset/eg;
+       return $format;
+}                     
+sub cookie {
+       my $name=shift;
+       my $value=shift;
+       my $expire=shift;
+       if($value eq "") {
+               print "Set-Cookie: $name; path=$ENV{SCRIPT_NAME}; ";
+       } else {
+               print "Set-Cookie: $name=$value; path=$ENV{SCRIPT_NAME}; ";
+       };
+       if($expire) {
+               print "expires=".mydate("%a, %d-%b-%Y %H:%M:%S %Z",$expire);
+       };
+       #print " secure";
+       print "\n"; # end cookie
+};
+
+
+
+
+
+
+#Inside images ;)
+# packed imgs 'h*';
+$img{title}=<<'EOL';
+7494648393164f108c007e00002020401478c5789042788461ac80946c8492658cd58c82336c4644fa88119a7ae07e32b56ea0958c74478e96b2e896f1cd98238882724494649c7297cd7a33ac31244b7c718e94888e87148e7414aa54035e91d5ae83b4cd99337c77837b46f10680e18ab2a34b8e117a85d28e753835a2037a90032c48c59d7b03ac83775c7303ca89f06c75948c9197da8752ac60478e86d88d7ca3ababcb346aa6da7b41d356a41f48f38ca697be71298e72688e7398bea0e82f79539c87968e57a7a5be36aa65950f75aa7aa1549aa3a38e8524d553d07c75178893915faa237f5078f541127f76c88a84f47f91a89d82d77f94388d81158c84558d83247c49236d40a7ddddcd8d82746c4823265441ca87f47d7d138d93e76c4a12fd8806ea76068f95084f4b339d75347f62d89d81d77f93689b45d58881329d7065678ab27778120e79d57d76b3ab84e52e7a75ececcc2b8de04c8b027f77a49d74e73772018656128da6288f76e3abb5e5187c43ba80f58d74159d87c68d87336a83858fd0688dc0c7efefcf030313d87e33276972f37976158b85e9e9c96697d1d34725a77b730d5e62d395743655b1687571488d33d957631988720689a3292949478380194f43e55813264ac4515151e56745ac4c12fa5fb1578131ec8d4215a6e1282848856d16a3a3837a82d5a96b01b4a57155a7d3ba81267f7c739f6db3cc0f12d95444f853734f88960a8cb16780a1979401e986407982432554c1a99513fe79466f82858f74f38f73c48f7514776542f4b6653a88433a69c2c463e3ee6ac5e8aa426879f177c7e1d98d029970146fb1458f8727a96183d4a815269270d49a35e4b9f5fd7b056529c69b8582ab72d6a766808994819d9473ab90749b71148d856769d3c09b8076bb83866fa0858b77f0ab8765ab86e5d455354cc9923cc8233cca32e5d84306ca55a7a787997e82e59bd5db84b24b9273bc82357e76f59c83456db2f9bf8685c98673a484846bc6e1e5d1c1e9c793ecdc82f3e69524c7e40bbac0bb71078bb383bf95fa9993043b58743b69533fc8b34fcb538cc6048ec2a4acc194ffffff12efe0d41646560277964786027494d40500129f4010a000ff00c2000000004f108c000080ef00ff90c1840b0a1c388031a2c58c0b1a3c780132a4c9841b2a5cb88133a6cd8c1b3a7cf80234a8c1942b4a9c398235aac59c2b5abc790336acc9943b6adcb98337aecd9c3b7afcf90438a0d1a44b8a1d3a8439a2d5ac4b9a3d7a053aa4d9a45baa5dba853ba6ddac5bba7dfa063ca8d1b46bca9d3b863daad5bc6bdabd7b073eacd9b47beaddbb873faeddbc7bfafdfb0830b0e1c48b0b1e3c8831b2e5cc8b1b3e7c0932b4e9c49b2b5ebc8933b6edcc9b3b7efc0a34b8e1d4ab4b9e3d8a35bae5dcab5bbe7d0b36bce9d4bb6bdebd8b37beeddcbb7bfefd0c38b0f1e4cb8b1f3e8c39b2f5eccb9b3f7e0d3ab4f9e4dbab5fbe8d3bb6fdecdbbb7ffe0e3cefb8f1f4ebcb9f3f8e3dbaf5fcebdbbf7f0f3ebcf0beb441b2651c2898bdf288fbe7742840820a32e80e18742286c0296452470d1c806154c1321e133745811440aa0c270110f7c9136c603c8814b09191c5042ca1b704035814908e2e2cb395c32e5ca3e5031c44821a0d35dce8d2c409e4a3b5c50714016f8d3140c0424d173cd0ad871e5001c44f11a0c22c45966c58748b28bc141b4c2cb4c221489b8c89534c3888c31001248c8493881e6a81d40c9d40e0472e0b38d9b34e9b3421b7621e7ef9e7230c7230b3c9145c1af242a982a42e0082060840a1880e02388541d453c1a7802a8842a9882240501739f4b8f26c8336d8736e8b3653d3ef814e09ef54e1994e29d4e3915e495562485ceabb679f568921c89b8499766a948cc08c212104002f4e29bc82bd0611bc427cc54e66c9d4cc957ed9a76e9c720a0ea0ab301a6822aa8eb0bae246f1e7bf152a9052bf5cb2fa02490db5fa0229e4a96438f064821a5839068aacd3605b005c60b14b96b0914609044c9357c51dd073605e3ab0e303e3295ca3056f16d4925a4538e6bab5cba44ad3034aca4239e42319a8495c4592c891aa8a2308b2eac145249054490cbcfc0a8893c6c31f40052db984b8157e2d872e997af1e7c5305b4de7c8b3eef185b1aa8a8c72dcb5f2527f6eb815b06032ca033ce034c75814a04e3bbc5c91f6cd1f7c12f8ce369c24e9c923efc0b27dae23cc9b224398fb7ccecd3ffccb40d1ce0d547a9338a9bc4008983bc8c3839c5e37891a93549433dbd27ba7e4d2a75d482308577845c9b8e653b01b2f6403228622bb6222880fafbe8f5e7af50806fdbe8422af2fb85c4841a58110c2aac14e4831df4f3c07d2f4c713dce1b747180de2f6be2fec322367c1a48c974534fc40310ed24619642fdb4ed0958da2569213b035c0c281e0074c11909b3528efb372e14f63b804947e0e4930d613dee405b40a201a6972c10300707abf34ae415921dd983877063140184326e85e53fe97f4842d93412e63d586f8b7eebfe5532c73eb2fdbae208eb32dac8d79248f50e2127c0778e0578bfbd99fc041efffb1a1a969133846c23c815989c938071ea8bcd58cc01f331844cd483020a1079680c50e20b18f0c80e40546ba358cb1a673b311883ed0809bf4eece530248c0f478b903e568012b50d1c500a7f58f2c93c70c7051124650624ded6f6d1f73484a0c46542599290125c8c38cf866aa8bf540a2480101080490a40e16ff8d1ce849c5b8a8a4ba3d44ee4f78badf1e5031c541a44d8b6ced902832784e0cd13a7a74e3e24209fe814efd2413116f5bfcb71fb26434c294c4c42f0322470c5031de7740850c2a815c0318902a11d888082d37b3815a9ee499a447df18e1264236de812430a1cab2f3df975e246e0ee052cc163171a93e142304b4578f0c70d5ef8e28a1012a005006fc48f88578c2812278cb9d369082ba34d18123fb84aa2e98b9848013d296ccd9da42e4554a35e0449619802a292892150493fc9bbbe88e1e205fcd3ee1812ff4d54045617ba25854cb71a8c38327e7c0998ae459041964c008a191a270c24a14dcb4110ca9a15fc574528dd4a708331236c17634650dfc97882ce3ab378c626ba75a3e124ec17e0578a38818fce20508b0801f58f3f71adb57834a0a72b520fd619d09b7c3453720865424490a35a8ab38521a45a664cc502d39ca08aadfcba6eea3206522885981ba855ce395a09877ca3836f2bfe564241248a25134809cb58c62040b90eb2f5989611a68a6bc15e0128434a14088efd251022e93a3dd9432a8a61c73512220450442109083c255dc98f9788218ba660d0d146f809d55cc24d0d68630a00123f0f506f021f80880ca2d7a0de1044cc02080fa00412a34c4e96f29c21c1c51d6bc197106d8c69210e607f0b225bf4746d0e302643752b39d58cbde5a9a8b70e846aa19b922fa1251ac1697139711d0860240ca5f7450a204083381ae128d4e6d64eb9d20f7c40a91901fd2440b14269f226960119d486e220f55c04467613b8638234910f8380b2441ef4d58442804429b2c06f0730fe2444812ed88a0e6e041a3e6b269c9edd693da3246be15a484c5260e2557e1d1996c93c5cecde58c8b1259518ac2ee103bc3074a81352762ef346e039063329b24646b8093ae1a2830c10cf1058a0cf181076842834c6ba72c10f92b9c112fd78732cc8f0c70ad152e3ce4445cb933848512b3b8e5cc8360a58380d0caba3ed13af6ead38b1844400d5d48c5e037076dbea4670553f69e9c32d3a904b00529865433a1b1908d5ca02bc065a47f2c2dd01bc26650c5a0b967406135216e24a98d4c357b9332500a3ba0ca065048130eade09e657bcf40b62fd64a005006688b71d8b6a809adc070903c932e0ebe917d89d68d3a84f855614ec2c44a4d801c993bb248ee55f7bcb5c7af809de9a6210778bb006be273742c0ae667779591d09748c2461106c1532dcc7ce89134076c1f66f420ad0d092841efca0df0b2c206818388a534eb5c2fd311ab324f8e0b64450437514108c198e674542cb9ee968a32e0f2691f47b26d9e984ca4d71aec60542298fb388f4d7accc320b875de27d350c50ef20494dc5505f02748b71dd1982c43c1b047817b1a1289de302bb8d1ebf886c712d888bbcdb11ea8108640a10d0d3841830df0a5c9c781d486886bbaee70094cc532676b33dcbbecc0b8c87d02a7803836981638950f0820347e842219e950b73542516777afcdf7a7f369c0eb18129caf9421fa87ea78bb328e08684e7ca638550f0a1232845c01ed75ced1184e688099bf8e53216086460230c10e08d286122a0c334e4f927c1084c7f91990b43cf12d86db744aef0a70228d186f3b0a0050c32cdd5f563cb0f1970c30e51d8095432e91fc0a64a7fe4b4bc692562c316ceb2ebe10b7eeb7ff7e6b7d01a10bb7240240635c24d21ae7a08be7de7a11e004404400d35b0460b034b04b0d01c439d28d2c311b5d187d7676bd7ef77b0170170630d103e7d11e36a42d30fb49e7f00795fa0317320fc09e5b15a15260d62a41d18d185109d7700d117008e0250910440f50f37630d013401201a02d01e3b324f0026c21f00f80358ae7be0f28e086706707b07b00d36b0f40c03818554d62468e62c18b381b5510ef0e11148c109107b02655287b7d11234be3e42040f11cd3105795320320c40c21930188a30838930a30930a38ef868968b68c11ef0700227448fd7848c015e0fa51d0c24d24d21a78a98795a11428a58c587b0f405b0c10460d011887a8260a30c035a8b31d88ef02164161b5e11d88f887b0a588100a2d110303d0b23de3560d70f11bd3fe0e20be04c8cc0320c21a30ac8ac8ba8ca8841fa87760b8d18d11fa5650b77f68a58d012d0b245d01d0e45dc03109209989b44e8f804c8911630630e982657b0f507b0710e01bc8dc8c03f40c316e06e06506762d8e11316700df0c105b06b8670e00e11a05b42950770560c606d0f118f0d97d97ad0de0e508009c82f8242825a11158d217f89f8af8316745c112d0df87d86b8d014d4f205104f0ef0d147849113403114e89efb4f09e97711c30af09e8428ae0d854201f8710674242f401495f8811c091218e07498e05766765103b8a684d60096b87b0509b42e50ad0fb86d0cb4e118f0b599d09509d09d0800ad0c21242420719124f50911920549d218492488e0987c49c117763164270095b0d011b54f05104e3784b50270811a100c8211d97b59c598f0a47711af0c30b89739630810e30065324d01669710974699911c60221849150250248700650bd77009765795b05a9e11be3909b094f0406d11950789720f599d0cf0419b213d04207b9420f509b98697116d0c60560f21d69c99e990a9c112503d6876050ff8779c01603ef09206e0523e790f8611340c40f29389e0958ef9789889611a89b89c30010d50630b70810b25e018b99b99b9b40ae0b40811fb92211502f93f9500250f38d11910250dc3650ac96b0d777a9730e50b098594f0817d1172080a720e10d301a62a6b219420307e0b73e30ee9611c60fb9878e213f9b1a5f97f9b116c7af9527ac9c10d01d14e405235056224d9411c405607d9311ea9fa990add9411670630a89410d60d10d10a602e9011b7321a41ab40af571156004091a021c60150c20c20b1a8e0e114407c79c7dc33c055a7a9770d00c60dc04f07925d4e1190ad307204d3b70b05b21570013b749f59f561a64a7708e7e2171ab4ad4a3f9f4ac1101825ac77df03c0d01df0b50c10725469140cb9311efa10e2aa10cf72110b990a80ab70720511018b56810d50c30d10d60410b3a111b74030a6aba0af54c0511040e6ae50770221560560c4ac4aa70150500e11b58d585a9c773c07d0e11d00d006d0b5ad5a2d0f11c0ad50d3036a76ac21b70e30b704654c0d5019541171a5603aa909f21fb96aa8aa1500d0150d11f98faa009df0d015226227b9974b4051a1115f0c602e656078a3119d0c0a7209ea4d3411460710440a56c70d500107282e72117f4ba0e30195bfaf9a211560e6a909a095aa6aa7701daa70daa6da5a96b02bae116d0920d204165d05105e0b69c11aea36a3cae30030c219f4d1b7ca3b0195af5ae0974710460c10930b10360682f70d206efe03106d095a640cca64099907a0da50bc4a2f9d11e98eaaa0b399910bb9fda24ba84a05640640d000d93101d0f20ed87006d05f0ffaf10770cc0c6088a111c0aeba26ad50cea4b5b10df0a307253d08222fa350d10411d1bba07ca12b4c032bf5052b72b92bb2bd2bf2baca3aa6aa5bad0030b770b7b1dae11ae8a58f985b0b0be116e0d20400829dc06e08e04e0f1136a4d3e30570a1bc1ba6049b03669bd9ac6bae01a8c10a30b00b102147600503108e0920d00ffa77074b87bf21d2a7ab8aad4a5f9327050616c00b00df07c7e00810630c30840cbb060bf06a06a07a06a0bf0fb6639ae81706da6b0d01f50b4064824b34a7f47f4a053d02704ab58efb510f20400ef05e08e05f0c20770de0ad02e6376db4ebae8b2ca09b923801a43ed2360830bc3b50a703d026bd30c70611a60d50fc579b22bb40b9bd9bf9b4501ab3ab5ab6408ab8ab87b9202e8121c40040cc0b7b83b4dad11d89810e00f083a8718d117a4400d168e02f9c20f111db1db24bc2149b49b1d5db003689b32b420f4072be9bc00450f70e168e095a56064056087bb50a0cd21632d6ac7b37aa201bb2bbc003c0ff8c5863abbb840060ebb0cb7a02cbbf0840db06cbe8941c7b0910d01265fdae9a7f4b733fb270523e40ef0a1c4f0a8b2f98008009d0e10cf0f105604e0c8b211570b60a0546a22c24a9746f0149c03188372b30450b30360ef788d110d572c92c22bee8d2c930f2c13c33c53c63c93c920bc322163274acc00daf6cc11b3a01045cf080d09dad117605107f8d1cc20800cf0f11570b73fda030805c2193aac01d5fac03621185a93cb509e0e40f219a0632320d0c0dacaac11a3a010a9c010c70f08bcbccbdcbfda642211cf0750750a6cf10800e6c311cb821ac7392341ab01b15360d7cb30f700fb8e070b9111d523682c02b44a11184b5237bc360360221fc039c59cd6c11cc1179a99c4ccc070d0e11050e40cd7c07cf0e10b63e11923fcbaccc2107033690dd602bc4112d9bc32d7e219a00fcc403206aa3fcd112e77fc4ccb60d010d3149f50249349311a6c76cc20fbc1110fa6efb940d32ce01782d203601e85abb4a81190d1bc02bba0ae0d0dbc36382217f09a0abcc4058a4e053b5fcc50d10cd0010dd0c70c705c7bd7a702fbcf02fadd066be11ab9f508e31b2c21ac0990130130336d60a603b0611e4082bb15f2130304d14d34d79ca1182076574dd10b1dd01bc73f84602607113b9160d8721162265d77c6f038ad01fe53106e0920150d00fdb6ac511d5df5d82c89b6116b5e76121aa04d0f3dabc78a65bb11070ed0ed0cd0c503500108d0b604b9c11feab60c70922b3a45dd11f4008d699140149c21d5d3bdfac82c711b1597276d194f3d632e0699d911070070820c50cd0cd0350dd0e10d01b10727618260087ec76113ad16ef03117104f414928a75d140211d32a69d00b4a770ad0a8d3114bdac0fc5f8d611d722212037f0340ded5f0120e11b9ded0c504cd3507508d0f10e11b56922a602e764df1106812df40242c21c90a50a50c8d1d5df551105329dd211f4533ded3405f051b9119902fd4fd6cd20db017607d6b304537d0e0e1ddc1d211ba897c12d3114e303bfb94ace5043a01180ee5d1d53b0af0e3093d711940587121a267c39121200161fd1cdc9d4cddd07fde1129ac3069afac79af113f8bc8a30c21a80a8070e13082033e911cd6e21b557128c30b0f3e5e0d1171e24e91edd0d01c767d686e053911b6042e6d4322260dc8aa8411dc06d0eb9c60b7bcf0f5931113eeffac06d739e309110ddf11da0096ec40b05081fd4303f0b8e3f0c50b2064ed11c303b0840ac0bf08208406fae11e62f4eac89e0c218a035e80e336410b0e611a3ed21b46a939c578e88ec11610070a8ea8eb8ebb6c01cf9803bcdb00618a116fb2119d2843bc8e9e311a6971a77e0ebad0e20f2ed0135e55efac8fb4c017018e221b46da01e56606201d4e11fae430070b8eed0a00cd0900e11db0fbb6a0ac006079e840f11072830b159e0930f32f9ea8060e55e89e5ae5416949ae1e50d4254eaefaecdecdeed04beb016d86e0df0250a30c9b75cd21453554372e621ce31167effaad0ad0f59b5911170e0f079e79af7ec31a403de1e5552cfec115e45efe4c8ea00e8ee110cb0cbbf0d2f060828d114f7c43eecb218a08a060e0f013091da41ee002002f1e52d4d1143061062fc8e856c01150f4da77f4de03e21f72d04b43511b2e7abe2ede071f01183f55e06da9c299a31934b554de2000d498eb8e2be3f0a0020fb112cbb2fd2fd2ff11e7c78213c7a3f9e0aec90a1f65ebad741212ee006f2e5ac6b1152f1bec8ed01c200d0c20c077e0f03d5fb21e43d7c17ff70c6a31f51f9d0b5956ef012fe55ee6da60af08100deb315401126c3e5524f66f76fb8ea00e11e4cb6fc2fbf0f1101485317f78250ec904bf93fe6d97f6411b00af5c37123af08f28f64fd0176c800c6eb70cf06e9e21930eebcdc7a32bf51ef1fca559e2e49f8f09f085f67f8207bfd10810810c313a01b0bb27937f32f724fa0076f5ef55574fc11aafb6fbf00609eee119e0dec360ab5ab509fb21f600f067f77fc4e9411b0edf0ef00139e8c11a6ffc0e14489051e2cf7436edc350115223c48e18f870b8c7020405341d3e74098057c6947e42d5ab1392ff484f856ee863d69d462eb319f85a14e40f0e5624141a3040c081e6e052a0274d1564c8c59ba6430a828488215aecb7af1f4d5535bf09021e1c3aae7429723dd486146fb684f6ed816626bd6b76783b175e624908439e2d6a37116459a1134e510cdd02c4153d1828edaa274ec616c267c6c579f236663a98fc62b47bd3920f80a88d372efc15d9443d1a3ecc9d38fcff65ca66db262e7e35951cc6dea6325ff393d025cee4792624abbd603f5e3e2c01e0c1e98249bfc0e80394296e7071d1d1d5af4f7ec7a0a5bbe5112bb90e92cd8b150a0822af148bb07ada75cab777a88bc68d8b48933f447bb99c97afce0d9fcf3f3b6abe484934e01062d00625bc76795181cde25b814bae587855c68832e8bdc8896c8860a3ce01ebbdeebe6e23582d231db12f2db6ee938eec390619a160c34a2930314fc68360d1c5d2421f8b0e28c38349981ecbf7a03688f953018d07a1f0b109ba109fac0af62bc68523192041f7280c183fcf8b6ea90036425a29f660914e794d210537dc4085b4d4996387895a24cef0c7837e6bb1e60324f4e0b3cbd62b318221f6c3a0e74e245cbde93f3cf022b608111913bcc33f33639dcee042e2c4483058c4260872a3d8c8c58e48e16f0e72fcb1634324e2b6a5582d8061ee040262698281fc0df9c601aa9b54b988b019a1011978cc140d0432537129d77a2db4d3be54d053ab8a3fc937848bda70c63f43283401d33955b1e74b1a86a0279cde0ec544f3354b90f5fc3970858498536f3b46bed40471531d2f64936b0e1d24b86e6d8d343a9281ae0ee3253b5d35ea9062841ca9418d8828d061265402423712047732e3283f38dd164c88b4e9775e136eb9840d844219fcad9670b171e51b7318fcad086d60f1ce4212c0b635b92abef1c65b1e012efc2a882ac0b89120cea0808966a73abda9054f3622ff12484616f4e49956fcc5679d5867aed09e834ea3df751145e6b966d0e7a78e2a0e588b8638b127f4025118555ea61aca66e1ee09266124a6afa01c6320a67dfca75134c0a52e22420800c4e84221b445efc899f0037791b1891b9fc0ade26f8a3ec9968405ce63e6ceeb10f6dda914ccc9660d147c8e82822b8032e3ea0e327fe8f3367f9367546227687c3273662facf3bf0ee8f0a9f75e56fc14a3eaf5e483154eaffca10d3c8040ae0f0ea0a80e03135fe1e60d6c949be58dbdf968dc19db103a14ac887780432e25d567961138c0d12e2460997c91329159b59d5eac0cc066c80efa97f1879d7e247b702dd434f0b894d8738b1043d6cd1a100133b8edac26e8908ce0d1411400208d6c63e70f1c10bb34c0914c0d40f3421e36b8baadff887093ac9528b6881274918c13204026e818f19d45fbcf5ffaf71260d192047430065800e740a812a311fd503b1cf8b34de2d7f28f3cb00a0c737f9ce042cf0e78706d0a2cdd9300307fb9b4c07684b0d10702e2580a3223887190468e03118704c4d3cf84e004293037cc867c76ab01ab534d16a1a816c831e33c5892c90c3087b82853048d283b4719a045833ceda506e005234850160614903c0b6045ea1c10b689b091e90e2481621670d48e745def147c248d1508690074105f2f7ca740238ef8f10222a0093130f41213981796893ca98150ee1f3aa4b0111cb10e12eb846638296d89b862f50f28a0c81e386e8f8c92f499a4704a33d9271712e0268b38c14e064227c3b412c00608c5223608db4c30f15f28e0378a040a18c20020989a7986de1028be990e61250e844c0c1029750d60202a0d00086b0eb9f202a831c9031059cf1639768f3cf16c0ef068410a000d069681c5af2522011aa2b10138c3d59a30130e0469838c1044fc347cb76d13918c8e5ee05e200d270a3450f74042b089128af19274aa8c4aae09e925692b43ccf674b79054051f60b0844329cf0400b04c827909a8490052df2293922c2086c82f5ae2570011c107b8aa8e08c07ef10234e047ab30c1c204e9b50934d3d00f904c2d11c1b8d17422c71eb89b8f342bdc83049320aa20592438911839b08e447b6854ac1250b5866ae5c2061cc7c908ca15047c40cf1a15e2695822a8164236470521f8684fc0c94688514a0250474104a0b25692112c013d892b4810c00c1c60a901f4d18e0e20a30fb251810368c1c61aa66f44c60591bb233ae7542b3ed3049750aa2d20054ec54829aa276f124256823852dc4caeed620dc8bf6ba6e303168880440c983da519f1c206da93039179d24e67c052d33cb084a51082034e7b0d0510b41a17c5864c4f61448a5cd4630b108eee5570b00c1857170e48d2841a0b55107077f70f38ee61261b59beff5cf2021171204e8b20b36f7c10cc170051c07b004ac3b0c92a51aba3822373e0d1b095e0cf5973462860cd8b2c4290cdada0438d4ae156c0d67a1718964012cc71021401e2071093c477b0a30f8a3124ab01828f3cc1650a3ff6dec910924604fc5b8b54d2c616b850c608107602431a79bc08d0437bf1930e08477abb08d10516bcbdd3ceb8f31ed5e5e990d47612438377c518e1ff8fcb9e558c3d0d54e145b230501f583919f092a35463044b4ad474d7b50dc0ebd40ca1052af824c200f87340b1e035ee6859b0cef0e86c52abe1d508a467b32d59024ca0a20fdad9f7ba7ed33f9ffc18e1471ad0d88e6e6e00e8c1043f8832df70820a85e0a787aef4b87c159e713c8d003e0b4c022d096084042e11fa87545584ad0e3301020e016f7851e00fbd59681aa2d6068bdce400b632c297734f5a7c399826180ba501f1de040410ae10ac71072b50c562c2995cc140810ac16092f4979994076e9ee2bd90dc658094910050c9b510a047ee74f34a0df0e04608305b02a7d28614b81647b70db4fd0c81630285413706dde15196b5984feef44cb5ed0e8a7bdb1210c8d7bfbff0486a283850e40fa3b410a14aef78a2532a19371f0c03db0a04b1a30d68ab73cd1e2a3525e662ed4e2b45c9e1dc8664baca1bfd211d0860fbe7388f2f1dd8c6c6610aef8e2e916c0769b0ca979d93866f606ce58e380ec37eb00b200efd5a0c104d760a8e6474ab2dfc07d83380a7c018ee92366b0a70aa351252ee38fd352910e8b766dd2d3f6b44428640c870c30461328118d2ba21da32f30519117ed4339e1d142a0d00e0610a1071ab1758107414a06e8c23512dde40d14a994016e593c0c70eef59fbf75e82f02090e5e03f8e6ff012f78e6f9169e058d00c9b508e9be78f33b50f33f3be70143ff360c0040042dbd28e78e2b5c8138a0094b61811a8e04680eb87bb43a7b840c400604e3e7b9928281301dbc2b083243803828308a6b38835a512c08dd1b10800d70b14530e10869d1ce288e35825426211d2fd02b0c532c332c2cb9f8230f205802e84b85c38389789200f36182000828ef202003fbbcb3b8af3cf3d18e70728c18f03d2cf7824b5e21db50043ce93304404b5050c5a360cb9b704b2880cd209ab5c0ac3a28a086106224f17e3f3cf3404c04414c14424c24434c34444c44454c54464c64474c74484c84494c944a4ca44b4cb44c4cc44d4cd44e4ce44f4cf4405c05415c15425c25435c35445c45455c55465c65475c75485c85495c954a5ca54b5cb54c5cc54d5cd54e5ce54f5cf5406c06416c16426c26436c36446c46456c56466c66476c76486c86496c964a6ca64b6cb64c6c264048d64e6ce6ce6cc6407c07c554f6427c27427417447c47cc4437467c674f6457487c87c444774a7ca7cd64974c7cc7caa1b74e7ca74d7cf7ef40849b8e7c184f7c08438c384f80a74340678b40008b4067034028c284484a8c384774730050000d8cd8400005073098477ca84194d74a74738684e84e8cb48f8409c67c19479c47ca7cc8449449405069c09c794c9cb6ca7434899ce9c884b9467cc941a4964b74678e9c9946700ac69c1a46ac564e7c39c3acd8cb405ac5ac6a4ba426ce7c8ac994aacaacba4face5c1848a4dac9a4eac0acfac3bcc542843a4da4d8c4ac2b43b44bc8b4954984e946b4008f9c7b43749bcdbc75409499c8aca947749100508acb40050910284eb45c455469439c8a459477c0488ac0484cc5c4bc4254b94c8ce94f8c6747cc1bc594b7cbc41d4054aac58c68c784cb4ef6741b4dac18c1d47dcd4ccb4b749c4bb4d84acc67cb402b40487dcdd4b4c8dca74910ad4e844c4674d8cf64edc3e4844fd4a7cfbc0ec0c437c2e4e644e49ec64ce6ca206849a4678a288dc5d4bbccd427c5b47b4ddc9ec1fc34ce6cd688acd68cbc0e44942ecd843e42f48fc044e6c9dc9cc7bc5f4e8c6f48ecb7c8f4ef4f3cd64af4da4bd4aacbf47fc7ec20ddfcefc40d3f00480785fc070ea4205df4274cfc8e4505b0d0e0040205ea46e4ad4908cf40087fcb05115db860dbf4f40aa40ecbfc1ec274a0540d11d71d3b0005ad41050a491d00d67c6151f481dd1d7a880501580d0e477cc15e152252a0f1d2b4738ee40d430590d22572d09832d7b4bef1dd84a1df0d01d725c2d48882d7bc1c4a9c51512d30dc25135588d255e428c61d13d43538880da25335e7443553d43520d7057355bc6b471d83dc25d0da35984dfcc35935705e3de3df1df3553d0ec63514da74cd4c3d245c25ee449444d445e7c64d835e05e8c0f4945984a4d835bec2c4900decc4509cd4dc35ea4f4804874db4804831d7bc15df35b94940205940aac65d24509c74dee40a4a5d64528cb55ad4fec6d4d5dd5dca4f1d30506d065165b7ce55c5dacc365a4de7456d7c4d4d66d655e7485dbf495536d965a6de7435d9cc555665d65d5d05d77c075d6d17d27547df7844d4756753805ec67587d4805ac875a7d48c98ca75c7dc75d7dd7925e7de75f7df7508d08518d18528d28538d38548d48558d58568d68578d78588d88598d985a8d84c08000b3
+EOL
+$img{redball}=<<'EOL';
+749464839316020002007e0000dcf6572eb90a9e1b4bae8babbe9bdbbe9bcb9e3b6b6e7aaa0e39799da7f72df5567cf465bdd829fe9cbc2f4d6d2f3d5d1ffc1d0fbcdcfe5c8cdefb2c9e2b5b7ebafa6e4a8a3ed91a0e49995dc6179c94151f0d2d5fdded6fedfd5fadcd3f6d8d2f1d3dee4c6ccedb0cbe6b9b8efa2b6e7aba4e0a4a2e89c90e1959ed98d81dd5369da8e85fddfd6f1e2e7f5e6e8f6e7e5fcded0f8cacde1c3c7eaada5e2a6a3eb9e91e3979edb8f8cd38885da6f67c24a4adb8f88f8e9eafcedeafeefececbebae4b7b8ecafa3ec90a1e4989fdc819dd4898adc7185db6177c1484bc2767bf3f4fcf6f7f3f5d7d1fdcfcae5b8b8eda0b6e5a9a4ed91a1e5999fdd819dd58a8bdd7288d57a73d26760c3494ffffff1fec0dfe6c8cdeeb0cae6b9b8eea1b6e6a9a4ee91a1e59a9fdd8296dd637ec25851e69a96dd6274d56b69ce364beabcb8d47a76dc6274d46a6fc25857d87d7adb7088d37876db6173d36961db5168ca3141e79b9cd1868ad97e77d17773d26861da506ac24944e1a5afde829dd68b8bdf7489d77c77df6575d86d63d06660d85e5cc84f46e6aaaceabdb2e99d91e29692de5460d65c5dcb4256e8aba7e9acafde839dd78c8cd08589d97e75da6073d2696fc35a5ccb4254e2a6a5e3a7a2e79b9eda8e87de6474d76d62df566ec0575bc84f40e2969fdc8099d87d72dc526fc55b5dcd445ac44b4bd1868ada7f78d37974d66c60d85f5ec1585dca4159ce3545db6077df6475d86e6fc45b5bc64d47c83f3cc15859d57b77d07574d36962dd5360d65d5ec0565cc94055c53c3bc44c48ca3241d95f5fc3595dcd435cc64d4ac04746c43c3cc74e4ac14947c73f33ca405fbf3648c54b44d86e66ca3248c34a42dd5468c93046ce344dcc4357c63e38ce3541dc5269c14847c83046cd3541c24949cd354bc54d4dcb415bc74e48cb3342c44b41cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab2312ef4137474696f60457e63756365727964797e2f6277600129f4010a000ff00c200000000020002000080ef00ff90c1840b0a1c388031a2c58801040010308041030700142050b081a1460d0c1c30801142c482041a2858b08123860d82073078e0c1c3c700111248881142a48983182258a068b2854b071f2c54b081f1024c09142760d8a163e60e8c1a321ee0f0d2874f0f1d3874b0f0f0a6ef00214c28091244a88193284e062970c1c54f052b4494f071c1894319022c9c3182154ac41a255cac51c26034c78e0f2c7c29c2b4c7cb8e0f14bc61e2d5cbc7103164c016b2368c41c23d4894cd9b57fe6eddbd7ff60e1c58dcc9143403d44870855b275fa065c2953b865daa953c6adc04732326048f0036861d3a947963d7a1517cb183174ecc1a320be888011104efc70f0f236ecca97337eece967ee0e9c1974fce118c7a0c40901102c3062f189c7c093259472581d78f1f70021880238012588046800178c40124c011431a5431114c012c4078001e5c106202298845648a12b922b80322053242001508802348021c61214802388050001428324380125c3209442290e139052374526980479832e505032410f3880c5880f341032050e583289441990a0a90e064851b9072d9012e9c7220d0143c105109041001e4471e40014109051c1043441720821a051f788244ac13a0925a89220d92248906149033401f4871f44013349061890244620a011e74428a4a2668a2a0ca2ca4b2ea804fa84188c50620d061041f5041ef610d062c508884182482e78d1f68510b4c297cc12b4923b0d2205d2f842216c9053801150811580153c9016422f886245442f68d27b4e08b4e2abce2cbce1dbc0465cd0d70a063c012548125c01630a0d7cd0090e0f70a265cd2390b1a8012d6032ebcf240972838f192cd044c4126c4144cd0928f183442648829a0c2930b1a00031c8033c0135c41427cf1670e05405142711838d1f781129851878911b0e2a8003594926cc138c8149ccb277cb164451e3b11f6cd1088a187c62398a2974e2484035a412b70d1acc14bc033078a165c5da60c18740266c42c98c1a0cc1ab4b12c813b7cf2dc424ecc33b689136891b64c19380276052d9c82ba8c2bb0c4323cc130d443c094376c0ec68c197c02a8cc148092ca492cb8f24cc43c2df34d0325dc82378e148c22598725a4b23b8537d06339f049d863bd0735a492694737c8734bc735afce4b7de4050400b3
+EOL
+$img{yellowball}=<<'EOL';
+749464839316020002007e0000cccbf61e4da98eed1b9e2e8bae0e9bae1e9b8efd3b5ead6afd1d298d7c971ddbe56c1bf4adccd8ee8e9c1fce4d1fce2d0faefcfe8eacee6e5cce4efb6ecdba5ead4a2e6dd9fd2d494d1cb68c2b944f1fdd5f2fed4ffe9d2fde5d1fbe0dde6e4cbe3ecbae1e5b7eddea3e7d0a1e4d89fd1d09dd0d880dcbd58dac984f0fdd5f1f0e6f3f5e7f4f6e4ffebdfe8e8cce6e1c6ebd9a4e8d1a2e7db90e3d39ddeca8bdbc284d4c966cea149dbca87f4f8e9f7fce9f7feebe4ecb9e0e4b7eddca2e5db90e2d39edfcb8cdcc389d9cc76cfa14accb17af8f3fbfaf6f0faedc7ecdca5e9d4a3e6dc90e3d59ed0dd8cddc58adacd77d5c472d1c16fb9a24ffffffee7e5cce5edb9e0e6b5ebd6a3e8de95d2cc6dc7b253dfb468cfad3ae2e9b7d6c475d3cc6ec8b156d5c779d8ca77d5c275d2ca62dfb360dbbb57ceaa30e3d79bdbc089d8c876d4c172deb160dbb959c1b24adacf78d7c776d4cf64d3c762debf5fcab85bc4b84be2eab0e2d19fcab65cc5bb45ead8acddc784d1c96ec8b35bc4ba43e8d2a4e9d3a1e4d696d3cd63d0c66dc7b05ac3b74fd2d291dcbc5ec9b55cc6bd49c1b44adac18cc5b944d1c76ac2b546cda73bc5b058d7c573dfb264cba53ac2b34cc9bd4bc4b649c1b045cba43bc3b642cca94eb8af37c3b443d0c865cdaa37cfa247cea835c0be36cca537cfae38c0b145cdac30c9a14cc8bb41cba441cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab2312ef4137474696f60457e63756365727964797e2f6277600129f4010a000ff00c200000000020002000080ef00ff90c1840b0a1c388031a2c58801040010308041030700142050b081a1460d0c1c30801142c48202082450b07103460d82012868d0a183470f011e30880122e0c802152c4c906882258a851c2658a861d1028b87142164c09133864d0b173212e0e0a2278e8d1a3278a0e0f0a62f8e1e3a2cf0021448c01c044e061970a1658e03274c88e851a1a30219002a742152b48943172f40a4419260f3478d0c267c199274670b8d0a79a451b222ea0611c481a461d25099029e0177e6ddbb977f6fdfb187071ec2b58b01ce211e1065dac5db2851b46dc2a55be5ebc6103303ccb07101a34b81a54f862d5ad4f964da1266c0992366ec8044302e3440f0d183efcbc8933b6edcc9b3b76a153b6c60b963e640e8820314244080f0a38eff8127469c39c9db1074c127cc1474d120d10d38d131c70e244084448118b0f1c40674f08e19077845348710b920874e1209e1224f050080f2c702105121c70f208050068e4df028de196420b60f1c6891d78f120df10388020480500f002451020f0504802088003002b44025207805802388204701258804044c070050246f0d38512663941c1013c214281214831206e856c1288422a8804b8cf032450700c0e342122421e30c07045032cf0180b9e44a15d56175669c88c6ff060c409061c8013450a4c51a445013c8061090c4490d6a2a054c1d8ce8d7422e8c3220142d4cd1ef39ac0f3c2185c21f38c00aed1d40d098a81194c163842780e1484d1e6c42301414343152cc0040310d20133490bbee153cb12649ac7c618528197052add04484d0e489043401d44ab140d062831534a1340c13600bcd6b1d745269c528941456cb1964d02483120b01feeb13442005ca195432298206f62299c52ca614a9060a688134c31a1f01268a107871b6802c7c02c6c12474aa6ce91b9c14c947236871054cce5c81b64c195c8c56820660e106452998b17687290d7278c7195c1df5091638c1b50b1a089cd7012974eb0a482c05e1b546db5491c6cc1a33d188012984d149c522a0b4ffc829789178891d60d18744d98032e8092f849286f046a05171e8c9298422e741279c91f80a297f1e8872e4050400b3
+EOL
+$img{greenball}=<<'EOL';
+749464839316020002007e0000574c95699de76afd29aa0e99ea1ea9ca1ea97afd49e9cd98f87d67d71d0696ac74e5dbc3c82d378b4e9a0c7e2beb7e0bcb6eda9b5eaa6b5e4a0b3ee92aedd8d9dd6879adf7197d8727cc35b5eb936caebb6cbeab5cae7b1c8e3bdb7eea4b4e3afa2ed99a1e694aedf899ad38499dc7e87d47685de6869c64880df68caebb9caedbdcbe2cdcde2c7cae9b7b6e7a0b3e0a1addc8a9bd4849adf7098d77a85d07483d86f6dc25856b73980d17fcce5c3dfe8c5deebcda2ed98a0e59a86df6584d96f71d2627dc25757b63471cc59deefcddee3dbb7ecad9cd7869adf7298d97b86d17684db6f73d26970db586bca485daa37e7e7e5b5e4ada3ec9aa0e793aedf8c9dd8869bd0837ec35067cc3e6ccd4657b43ba1ea9068cb3c7ecf5e72d16870d9517ec15d6ccb4669c44455b23398db7283d66d72df577fc85b6bca4569c2485cb53183d46c71de557fc65d6dc05a6bc84b53c63e9dd88da2eb9f88d57369c04b54c730acdb81aedb8784dd6168cd3b52c73b9bd48c9cd58399da747fc45f6ccf4f57ca3a50c7376ac54268cf3c55c8395db63382d7607dc0595fb63353b23e54cb3a71dc5c6ccb4151b0385eb53955c83a52c5375bb43152bf2a51c63b55bc375ca9365ab7317cc15452b33858b73354b53253b0375ab53552b5375ea93658b33854c73454b33951ba31cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab231cab2312ef4137474696f60457e63756365727964797e2f6277600129f4010a000ff00c200000000020002000080ef00ff90c1840b0a1c388031a2c58801040010308041030700142050b081a1460d0c1c30801142c48202082450b07103460d82012868d0a183470f011e30880122e0c802152c4c906882258a851c2658a861d1028b87142164c09133864d0b173212e0e0a2278e8d1a3278a0e0f0a62f8e162d2cc0f1f308401127078c30d0b247019224447ca0d0d1c88400146f802942a46903962e4e981cf0d1630b8d1540a419d1c26342d82256a059a26500b0e62750b41c4264a30c59b47de2e5dbc7928f5dc38fa461d2407b44870855b275fa065c29d39763d27ec2c56067971e2024786134b8e1d4ab4b9e3d8a53cbc7103164cc81184604c7880e1a3078791376ef6dcb993776fc2366ec8d043964d80c1150628488001e1478bff134e8c297253fa163d68b1f64a107804174f027c40f18b01181101811118b0f1c40274f0458e442cc125101fb920474d1209d1224f050080f2c702144121c70f2080504f022cd113850081e1564207640186881978e120de17705120480500f002841020f05048020051770f1844f152c68d48f1f78209600218804334c07005022800d34f035c892088041c101302142020e3c21ff5e81680238012588046885032450700c04105045cf903c1051c80614f1e6e215684775c59952c10bdf314421428e91345074451744501381a4242152cb9b8631d6c12b36e14802298804a88213705aef23850848518485023c7a378214382ae5c22d68d0c880247002a78a1d8c04d40d0a449033cc094c3bdc690ab2e153ca1e509a1446185271578327dd04084d0b4890438f0a4c9be30d062c2153491040b1f5cfaad6a197c32094422941416ca1564d0f3c2100ff0deea104420d4c9175c12c80698ae4219caa5015214891e5001c4c5c04871660b170bf114cf1868024f212078a1364527095279c71d44bcd2f71764b175c7c16820260d1c5c323989c89424998027540d14381638b1950a1a088c9700257cdb98862c05d195c4d9548186cb1637a138002488e1e8442b90b4ff8615788128881964a147c2d42322c9422d988d30972f90220a012d5b3c1a4a0222a8cde7ffd0831410100b3
+EOL
+$img{blackball}=<<'EOL';
+749464839316020002006c0000747474545454646464848484b4b4b4d4d4d4c4c4c4a4a4a4e4e4e4f4f4f4050505151515252525353535454545555555656565757575858585949494959595a5a5a5b5b5b5c5c5c5d5d5d5e5e5e5f5f5f5060606161616444444262626363636464646666666565656868686969696a6a6a6b6b6b6c6c6c6767676e6e6e6f6f6f6070707171717272727373737474747676767777777d6d6d6575757979797a7a7a7c7c7c7d7d7d7b7b7b7f7f7f7080808181818282828383838484848585858686868787878989898d8d8d8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff12ef4137474696f60457e63756365727964797e2f6277600129f4010a000f700c200000000020002000070ef08f72838485868788898a8b8880132b2e219c2722271d040c868f143636353431333e2b292724212118999f753a3ea9373830af2d2a272523202e1c0c8c1a3b3c3d3c3b30bf9033a92627af1b1113098c193b3e3f304f3e34c633bc25abcb181ec780163a3c3f3142414f3c3a3735313f2cd6a12f1c19161e020681373a3d304246880102d3addb3a56b699d3b0210141a0153af99347ae8d9b3872f41ed390f00001271c94a153b68d27863c8dd8ed7368f0c1a02b00386444961c68513a17c849235981a244870b04fdf141f2260d0c173278b2d10b461cba57b27970d0718244070b06280a21e26681da163e6885f40a4419a975f2345580d0618aa31efc2e5875a123b6c7a2b1fc61e211cc030bc60a0c080291a2858b87103268265c03e58b061a229924aa651b6205562258a851d2e0fb8fce8b5ca88cac05088ebc09de2040aa2489831a9750b061d266f8e25ac640f5b755f72305050e0802d042a4c908d924372f257b840a8dda1a7a405dcad3ef980126441f7d7cf8b982142644883dc12ab50a001c270f0028a0c70119d948cf9f1e340fda76edae38fdca724781461c70f10801241860e8720270b1460e79e7d612060c102490280c60c18702066820a70a064771450e0e209041040c00ff112f0460a1c6061270a0e60a103871c973dd30d6d88522b758c4011c508106091409f3e5033250214409e130602229831800a3ee80145061c49352886422963e20a0020c4a3998c00c084026a8911069e0430a4620016e83162260c30072c9766b5a527940c1030c39c800060c20a4e20a5aa9422e9104b9ba80000c106041042698e4a57ba44a29e4aa8402000b3
+EOL
+$img{msg}=<<'EOL';
+749464839316410041005a0000000000ffffffcfcfcf6f6f6f0f0f0fdfdfdf7f7f7faeaeae4e4e4eefefef1f1f1fbebebeededed8d8d8d8f8f8f2f2f2fcecece5e5e5efdfdfd9d9d9d2d2d2dcccccc9f9f9f3f3f3f6e6e6e0e0e0e3d3d3ddcdcdc6c6c6ccbcbcbafafafdedede7e7e7eadadad4d4d4d7c7c7cdbdbdbababab9999994f4f4feeeeee1e1e1ebdbdbdececec8c8c8cbbbbbbbfbfbf5f5f5f8e8e8e2e2e2e5d5d5dfcfcfc9e9e9ecdcdcd6d6d6d9c9c9cdddddd0d0d0dacacacffffffffffffffffffffffffffffff12ef4137474696f60457e63756365727964797e2f6277600129f4010a000f300c2000000004100410000609a0cf907834000888c4a010180c159a466350f4861b9101c080558a43050301e088e22fb903826180643ccb4c60c1f08444231a45ccfd085e201819131a1b1c1d155d7e171f102911222b132425264b462d4e172820292a222b2c252d289f4c462e2f2820313a22333c2d2d189e417106262431353633373d13b856a2762836393a3d1424bd43c4c8b0d275bf3d7cc856dec7b2d7d2c6b6dbd4b3cfdbdad553e4e7b4464becede69f31400b3
+EOL
+$img{sair}=<<'EOL';
+749464839316410041005a000093590253c8d163d8e12348b1f2a7a1b21781e1f4013358c1f2c7a1c22781829661420641127521e1e40103d7a1c2378192a661521641228521c194f022b531a164e071d3c04143b0545b624153b011d29024da42e04270e33a22d04270a0b150b3b912a0c150703130e29791b0d15070414040b0202328b1a2e671b0e16080514040c020b20771727651b0e15042f541026521d1c4012113a0f08280b0f160a154e061b3c03113a0f09280c0026080714000000000000000000000000000000012ef4137474696f60457e63756365727964797e2f6277600129f4010a000f300c200000000410041000060660cf90784c2a1f88c4a2796404089641c08050304587044241b06430ae87042221b247241163a275265c2712260a91d017305d0788d16a6c3f14402c4e112225432b44252625472829492a2b274c2d274e2c894f203132423334339c45363738393a3d6bad61400b3
+EOL
+$img{forum}=<<'EOL';
+749464839316410041003e0000ffffff000000efefef4c4c4cdfdfdf151515dbabdbffafff0000ffb70000ff0000b797b70000b7ffffffffffffffffff12ef4137474696f60457e63756365727964797e2f6277600129f4010a000f000c200000000410041000040370f9c94bad702beb55bfdc160404699582e7027a5914624979a0f0e2b0b0441e6f4d9f23c8a7739c9e1f20c1882b90042104462060303f74d3c100653c1ca54a404bbd8a7d759ce2baf5039e25a5e7fb161763b7e73cdb784490cc110a090d7e787b01890a8a887c0e8820580c060c08069c01100b3
+EOL
+$img{home}=<<'EOL';
+749464839316410041006c0000000000acacac989898cececededede8e8e8e4e4e4e9e9e9e0e0e0ecdcdcdeeeeee5e5e5e1e1e1e8d8d8d4d4d4daeaeae6e6e6edddddd0d0d0dbcbcbcfefefe2e2e2e9d9d9d5d5d5dcccccc8c8c8c3c3c3cbebebe7e7e7eedededadadad1d1d1d4c4c4cfbfbfbbbbbbb0f0f0f3e3e3e6d6d6ddcdcdc9c9c9c0c0c0c7b7b7bfdfdfdbdbdbd5c5c5ccbcbcb8b8b8b3b3b3b7d7d7d9b9b9b2b2b2bdbdbdb4b4b4bfafafa3d3d3d0b0b0bcacacafcfcfc7f7f7f5b5b5b1b1b1b8a8a8adadada4a4a4a9a9a9a5a5a5a0a0a0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012ef4137474696f60457e63756365727964797e2f6277600129f4010a000f700c2000000004100410000708c08f7283848586878f7000038a8b88828001010e819e88859599839f859203089b978d9405060591a583a706080908968d9a070b0c090d0e099481bf001c0117b21319ba9002041cb51116171218191a199d941b1c151d1e171f1ec021222895c3230c1427d52f1627202822292d809305042a2b2d800c282d2e2f269985a80b203004c0915c668b0a1538f1006590068d000d0489088143e60e0585be65e000a3a141bd1c3074f058fbc14038821978f8e1f341e2b66914021410e30840112a0be9ecd9f8a7e0a0400b3
+EOL
+$img{equipa}=<<'EOL';
+749464839316410041002c0000000000dbabdbffafff0000ff0000b7ffffffffffffffffff12ef4137474696f60457e63756365727964797e2f6277600129f401046007000c2000000004100410000300687abcdef0d18941c9a4b1e977bb02409d10a8c5330836a2c8b0016bc1cae9c4932e6fb51fe230001168a80a068407c0801818351bc6e318e9d858a89e46b1abb67595bb2be779856862bbed24936fea8d3839b8242e5ae94413d9308ee7a709000b3
+EOL
+$img{conta}=<<'EOL';
+749464839316410041003e0000656565750a30867a3074893097fa20a86b20b9eb10ba5c10cbcc10dc4d00edbd00fe2e0074994074994074994074994012ef4137474696f60457e63756365727964797e2f6277600129f40104600f000c200000000410041000040a70f9c94100a83b5014ceb9d40c03474416c1808a196d961290b59bf008e50824b85ae9205f423ae8e453ca89a01b958a27a49c87697215a905c24198595f63dd67f0684a8c2c5409b0403b8ab616b743515fb4018e10c9442b50f30a7c32260c4c11881b3b5f1c6788898b7a658400855f4f10087b1f551b9911100b3
+EOL
+$img{jog}=<<'EOL';
+749464839316410041002c0000000000dbabdbffafff0000ff37573700003774994074994012ef4137474696f60457e63756365727964797e2f6277600129f401046007000c200000000410041000030e487abcdef032894964553bccc1cbecd70401083933196a7f50280568fd04a0d1a3ab0ba51e5fe13bc767b3d4be5abe14648c7927941ed561924216a78cdea0cd2c54b4aea77930e608b384797190000b3
+EOL
+$img{bg}=<<'EOL';
+749464839316410041003e0000935902651902c4290237e802243902d7d80219b81296f80268c802934902f50902a3490264390200000000000000000012ef4137474696f60457e63756365727964797e2f6277600c20000000041004100004066018c94badb83bedc17802c51a51c0400241320581385702490640211e654f15512b493ac0c0b29c0d6080e40160bc0f59c7526268665e9049e4a5e43822b089a4e04cba1e41da0101c3a8238b8901a0860820a823cf4da8f40eb31703030c0d168788898711100b3
+EOL
+$img{logo}=<<'EOL';
+749464839316091005007e0000ffffffffffccffff99ffff66ffff33ffff00ffccffffccccffcc99ffcc66ffcc33ffcc00ff99ffff99ccff9999ff9966ff9933ff9900ff66ffff66ccff6699ff6666ff6633ff6600ff33ffff33ccff3399ff3366ff3333ff3300ff00ffff00ccff0099ff0066ff0033ff0000ccffffccffccccff99ccff66ccff33ccff00ccccffcccccccccc99cccc66cccc33cccc00cc99ffcc99cccc9999cc9966cc9933cc9900cc66ffcc66cccc6699cc6666cc6633cc6600cc33ffcc33cccc3399cc3366cc3333cc3300cc00ffcc00cccc0099cc0066cc0033cc000099ffff99ffcc99ff9999ff6699ff3399ff0099ccff99cccc99cc9999cc6699cc3399cc009999ff9999cc9999999999669999339999009966ff9966cc9966999966669966339966009933ff9933cc9933999933669933339933009900ff9900cc99009999006699003399000066ffff66ffcc66ff9966ff6666ff3366ff0066ccff66cccc66cc9966cc6666cc3366cc006699ff6699cc6699996699666699336699006666ff6666cc6666996666666666336666006633ff6633cc6633996633666633336633006600ff6600cc66009966006666003366000033ffff33ffcc33ff9933ff6633ff3333ff0033ccff33cccc33cc9933cc6633cc3333cc003399ff3399cc3399993399663399333399003366ff3366cc3366993366663366333366003333ff3333cc3333993333663333333333003300ff3300cc33009933006633003333000000ffff00ffcc00ff9900ff6600ff3300ff0000ccff00cccc00cc9900cc6600cc3300cc000099ff0099cc0099990099660099330099000066ff0066cc0066990066660066330066000033ff0033cc0033990033660033330033000000ff0000cc000099000066000033000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff12ffb0e45445353414055423e203301000000012ef4137474696f60457e63756365727964797e2f6277600129f4010a000ff00c200000000091005000080ef0059d2318ac80e04385070e1458909022c78c012a3c884172a5c5871b126cd8a1b3a44e8f1d365409325466c0982b46ac39a2b52bc794216a9c894376adc595317adc564c4021b18f35951b283497af40a3078a05f974595055a54b72f44ab479a1d9ae4392156a85f9e6dba14dba559a165be8d6a263a2a53ba6bb2b5ea56ba6bd8b051e25dab06fee752ba7fcab59b673b20ecb281f2fd2cb77de0e3c96307362cf891fb58c395277468891166edca9b337efce93438e1d2ab439e3d6a353ae5daab53be7dea363ce9d2bb63d60d5c4befcddb478ee63a34d7f4de91c3b2fe2efb98f2d4edbd830f5e3cb93374e1d9af178e7d587677eac5bf37fedd9befb4fae8dfbb87be6e7a79f0fae1cf8fdedefcfaf7f9e9cbb74fcedebcfbf3f1f3dfcf25514a3d08e25e450ed4702182392860e2890e38e0648d0e4880a4851258c0e58a166841975a5d78655885498840d88626988228872aa892298c2eb8e26c8b2ac8d2ec8636d8832c873ae8932d8c3ef8e3609b3a09d3e09646198420933265f7954126057555585d39a0508a4d49322496562414159c5949d5669552a8d497915e5916214a529985aa936a95d62557627970989f52a957ab9772d9f59063769967ef917af9b520aa7a0a96ac958e0ab62c99821ac6e3ad8289976e9805e6e1e6801268b9a6a616680a67a1ae7a2a69a4ae9ac92aae96aa93d8855e14efa9978e5545a51da361655c1ea7beda3b6359bacaabadafbe78fb5371cafa745fa7caea3c5da8ca0b9ca3bbc20bac65b4ce4b2d25b9de6bcb27b3c67b6ca5b0ee7b4e64b1ea7b6e69bea637f01f681141784026a40218c123fe122849218802788eb284025a0224fa921f2dbcaeaae9eb405c8a7033cd0da0b283c21b9ad035c80f4caaea4752d905a145ce2318c5322f8c188515585162b51234ac2885332fbc008e697d57db69708527841f5ee6faf1b23ca4ec49d57fc997761570d9dce51371d502c28377373b6c54b4694d089a52c51de4f5d83b0683f4d4ba27cbe1d5c9dc57d6db374733f371ea8dc497774b9d15aeae13550158cf2bc05650864defa0650b2f2b5179534d956481d0ec151e4a9b965c5391b5cc03007d85188b446870e48b0e99d5ea9f1e8935e9937eb9b5e0af8e2a79e59f9e995798950837b3db2cbc7dc31b957c4050067ffca5ef80ce9be2eeea575a659a0223980de5bbb69b6c34b5cfeabc8fd2b3feb2afe7c7a82df2f5cb8b1d72f3db6f8d6feadb5f8c67f9df4f6ba1f891391ba230bbc0e717c0be2e7d0c978aede9e6cc9fcefa214528fd1fb49911deb92af928644801bb551e37c7205110b35004909001246f3d49aee35b04b0530d04d041b8e92e2bc08d10ee250190b4fd2266eb6849026697bb6927812e6b510d56b2619f9000661323f852bc052c951041ca08240a1df496ef14951490ad6efb1f8ddea1d4b6e8da6c3bb2026e9ea668167989ec688926da96c63791ad69ca8f618227ccf292c3c0313a885473151f13c5a01164a81d1bccc05c3857123dab602013721d17f0cfbb60ff85118851454248401ebd119f73b804c2c0f718486cbccf4799a2c51622d738dd53af8029a0e23650188d3ee1bf8da368062f560582942ee636b925292f496ac452a237563465211b880b3212b9c125c916d35650b7495a232000f36584e4a7301bdd8c00757aa24b2446b78899a1f7274c19dfba41650f3213650ffa54e05af6eb4b24c0401a8429d011a6c4221ce1989201c5a8c851e24b4d230a097c372dbc09079d357dcc8d71dfc51303ffef1411a13e373cfb4d72d41549990dc96261b7e892b8b517fc49a254fbbf12bc38d4921ad130974c7e1afe00dd465090449ac08fd42bc7501bbdc2e9755984a42f562802849206730911e24d3a7d0b6400e324c0918331d2501f8602eb9201004b3f4ac83ec4407d8821b4634228809b0620742f04a5eb409ac015a69989a54d7aad44aa5113a2162c78018dd2ce05d09cd51dc001d8191bf2a4659008bc4468739993540142b812340ea22b040b0b120b32c5b3591cec885207507cc37a9be72558191b2037a51f82a334420966e7050a02a14db98a8022006a0919392686bf405a72f264a632a3b9ae3a4e8389e395618689d9ce0d8a717b95a35792be34eff183f72e7dcc89354629be4a08e57323b8a14609775019fcc99a7b0a4e5df9dcc30c5322637418416789c1182cbca40dc2af5e156a92a66682b1a283c3526643b5a21a05374d6cecce8acbe642f296ecbbe55f6966941ba58674ea69e2dc0ce84a34d480621d6d390cae111359a184b376a75966e0191b592896e69587cd4a28ce56188d38d09944c8c3e1699409b8ba97d7203d3ce44a99138cf56aa04f2c09086513d0a08a38a4c90248ae40d8831bc452fb458bf6d0ece8cb18dd107e67818c9d553303d346853aac39e033423c57d880847020bbd82be06730d70fbc66abe2929369a2dec51c6ca18074ba433ba0a5ddb8a05431ad4b586eb6a24cd4efd71c9b168a1a9fccb6ee95a7ddc6e2cf92ba5911dd0384798c018d53d2cc6582b602eb4ac0ff605bcb55ebfa24c1bc8c580f5a99f36ca438922dc4f03a67eaf2390b2487b7eccf1a6b8109ef0ffd4ccb2cd90674d85a122abba37393a95c4c94ad14077e6229f995f4e26db1b98a3a103abe3c4d81689b6743865750b3650f19e5ffad712b15a37b7ea8c25a82ad2b65ad98b35fdbc2f7ca4680c4fa140628438d85dccd3ccea921a63a45ada0058810ab360058595514609e639e8c894dc461020f85564ec4f35868e5e1bf032bb1ee5d29d226b46611ea855b4a1be99a62b501af353232e8fa1b21a629263db8f8ba014ca2a99175a7ffd8e6e9628ce1ef06713be03be88a651e43e63950569fa238ea22ba28ca13203fb604b70268e36ffbce5fecc71eb09d30b14335a6e23fbadba932d8a90ebade49fdc803db2772626d5e68d8263572a49a993bad4db85b07cb40e2dbdc188aeb591550bb5a49a2e55983854021308824a38b5e5f634813239627fbccf84178a14ab824288529e47d409b274b71322e735beac799244b895138a62cf2eb5b273fe2a92d760fc4550565d9d38346f8ac4c398da457cd5584ad7de1c94a8100a1737f94c2f5978326c6b71653f14325fb50bbf1715e8b5eda973e92df2b34c146bdc97ddec9b1b77f9a3da5dcda57a27ecbe45ffc9fa90edbec3faee27ccfee25f7aa01fe0db5c3eff08f1f5be55b35b1d34d591bfde85dd1bd12ad630ea99eb53a77ea6f36a607c5a99e89f0533fce53dcbadfa366815723abc8633a95694a33445ba52c6743b14d070e28e7dc5973e075a60772b59438833181813e5d61ca50349c7257645e910b3126ba6008877651ba7818fb6c20be3f27f23d50ef3a713c15b7d55f23df6ab7af6b015e6c75d06363097c97a515372464a1c57a468a6ba35385a6d66e91ba6418593ee73c78478659a32a42766261532f54487918e5b24cd54f4763d310153b4c24021e55827025ec6223113f67cc31835b7e51c250c61257d61646f7825141568bc5707c07d11c86b61995387157c14ac1258197b58558e87af1f01df7ef444a38da3f78d978e73d31772572182725a5067c760572e7587202cf5dc3f23704df6a722d57d6ac07382c64542672775343742563c39a6ba8394522e14265514e13244d01537f76221d13992115d45e05182512682538183ed5f745214c8ea1314a31bc32752043b7d72076708a619674f5891dc5301dc47655538a6868a27925bb8511a27df3ac1d68b67ea8ce2481ea81963c5423e278e7b866503222876c3976e47e065d21927c72e2416248571b440f5807cc31e5964a57152cf77348e1544248c66796576e456d1e09f57928118d315f7a27216057461dc42b4ef5f33e071e2035180f31d76b84383438c72bb61b7fb5f23696009ad72c35b5a28defb5a078e3866314098758748393ac79d76c78d73984318587f6c39398da8878ec73e51f5d331a1d11b336d6db5f39901249be87d0da0108d05b29851035e75ed5a91dc4335822af7bb24f7172d137f75511000b31008045053a8d19a41ad54a5a72c212b88c2bc4a821e3bb8818bb3326c88288865a79cd30a7a09265607024e95a54b88a39ea2c143486017a8ba5408e12a272b40c33221a8668801ef5180556d42016436fd6891369358929c01dc4080ad89e5869499139c655f8fa2f24a390a39f5c15446d39a899a1b481a3131b13c992812b63928b9687d94d64727682163e774b35415c89640c52d7034974b99034a27f599d6741a85bf7e493c340ef9dc4481643f67353306383ee7ca0ed8851e85533488508d53af1591a447a63e38f15d5692a571f94795d59f49f3253957cb8658333c55ec2a079b6ea42491e89b58a65a69075527444e4608ac0828575183a85788c51420434a74424ba60b3706cb75342493011b79915202b03230d0e28611a175733a6a21409a476b93e72317471b1f2a1b9ca66c74043b8b55f74647db86d76d8743c66ca5243c17716c38d225b9b86323066d933417b56b7709ec68f73216732b0c35ba3de4e4a2967774431526690221000d9d127412e415a651035559dd963ab72687954d294925f7f130a7908c444896f9b53679fc8be2489497258918f66fb6b18f080b2421799ef0a4436639e489016250838186e4eb4358f5a01aa71100ba019a482a01bd632879a5c6939520294420fa53a8685cc5046193721d9a377211fb24869f9cb9f21e193329b9976dc5076cb8a133b47c84c9fa9ec9ee8b264f8c0853a607322bd6016406ca3b89b09102194ca01a44155759e48815624e7123eb4c35c73e73b856725517b5ed40413ca394335314341a20f35459a56da32c4ee49e6b34123180b152541875c681a08a448d2ab050c45c9711b53b381737810d23e7afa714c3a2d20cae68cc8095fc7f44d28ee34586d7941c73ce6ad4b34ce62305508772c583a9ba501100567ac69c6f85848572891650d37717c346c8922723ff2550944bc0bef1bde6f40650c20723823d22201de6923c73923ac4111901f40fe4880af2523358b9632b523050f59319ba5d78609eaa1899aaaf4398d04ea9dfa211005d72aaa3b80d21881179a15d7aa58b983a3159952895ba7c816acf11244214199669fafb66b64196090b273a316229739f5b5182835793935f4275c36fc2b49b6af572c7d29ba6593a7ae051a1c5bbf9148c38264628279db9174698f97cd2cfa1c5eb90e5e05fd78065faf48346d28a87607bc02c9be237b435e961a7d6bbb7c556d8236a0b2e91535d9397ef97088a3ff1df945be57fb360b80b9f82f3a09c975abb0bd475521c6ab9486a5545be6ae54595c45ee85c55897754f437969bdf4c8ef45393f38e7cf6376fd8c9b4493d7fbae5b024df672bbf6cb3804a8808bf58787b9378b7c7317c69f3a493539f48be9353f076fa2152c855b0c3a43a072c7019daaae9053e19466e9370c5499c8ad7e6a949d07d2ad91962ff3ab2bb3ca1a6a9fa163273e8837489737b451ddb466884117531e1ab497ca331e087d30070e531ad6249854a6980d70621c87a54220d3c53fa983c6336837d10842cb064127fd2f02128fd5265444b386265c9395ffac15f7b81c8f4ad7e083f8757933ee90c34e1bfaaeba95f717ca85774816b5764ebc2c1cbb4a6a60587cbe65307e82df995ceba9648f6e433161a3d89fd3c4400a345e53976009d5c7b6e116363e5b64ef0076bb9dab2ab81df133aa183cbe683bb85321805bd8137b114ef8f7b0b99f806c70c65870abb6fb387b88832cf874d206c3916b6758a6616cbbab4be8762cdb95911570171acd6cf22a494b96f855c91b6cb42c88b055087a2cd866a32c8e63cfbf7b563da7e190a15497f929561243a90bb76a18acb77541ccb616648ce7874c93c0eb31a4e65a09c6b7008075062308a579a381026acb0cf08ee949b0b94790f9ecc599cd13d29973b9ff956ce4c2c5bf8acbdf75fa5ba49146387930b3363a4b95836aebc6a75cf5412cd429721eadbc7016c6ca004b4f2d50b70823823ce3009e3ac326c9ea496c3acaeb80c3dcfebf77f7c4ac2e1389779e9b3eb9ef0b3396c75bb02d8a127c18b9c9fa42ebb5c56b0e234b6e24a5a9b117b1c971180da0e0d9174f2080523823050b2bba9e1cf0796bd72dc7d7b73285bee9bd336c795c0565cd49daaf8b368a97689d09f2de63f09bf83db207405ccc988de32cbe2de6cafcd4bc72d81e39ec9533ee7da3fc89917dae0d1802034f2650d50823ce60133aa95cc54d89aaa705ffb9ccc6c718c2ddf6c59f91d4543daf936cbc9c9ce2cb7b819b2112116ba9b57d5f5907514907d6abc3a661c8f8728bc69b0c5712231d06d0e0d7c64f231d51d1d408d997bb25a1c8b74a3f507da5c582f09114b79a9cdbcbd34c9ec9b9cb7b8fabc879b0244c375bfd514ac32dab91c7fb75ef7315836fbbf57c3a709b2dd1cfeb80565825bc01e733b06d004dca040314bc5054d650f40f7db20100fcabb9417c89f3cf7b45709d8e360c7fdc113ba5d926bc91afc1d877af9891cc555ccb399e5abcb72e452bc64a6a141c16c29788c1b686335bab57bd9b833763c7aa7d01d02b0dadcdcd50a7064d13008d520600f6cabc6cc80496bdb887cf9de6cc0ddd2b82177ac3c8590a2ecd6c339d2e5f8cbb811fd8088389d0900c5f7ee3566c2efeb34c32de1a5185bb9fdf3c2bc67a68361aa74a74f0d5a0503edcc5041db20f40013600520039afdbfcbdb454d9c76d7a39d647a45c69d8f8d4ec4dd7bb47cab7acec295db3cefd0a1d5cde3cf94bae9cef907ef628b2dc9db897bf938213299dbaaeac753d77b29e1efe49eda2308d700eea88726c88b92ef2e65814c60e83d92c98b37ed4d43213ed0217ca0c8a63ec3f97dbe6a366d07dcbfa586efcb81e298d4469e4cba3d7dd12719dafc6988917d5da00d087d14ba70d7d823b2b51b01334484bccd4527f416306d50cbc9a827ae064ec931af8b8fd0653e7b9800684ea7e90937c47d9f969eafad0bf4bae457ec0bdde9e39f65c5879d0c89b8936488845d994126d294d1e6c6ba0a7dddcfdc623c2008d600e742fac2d27e28b50852de0e5a41fcc84cebf47ab58c200923a66c488b4654e827abaa63cfd6665bc06529b27e1ab15628bbacc729f5507e19cef89fb6d52f2e5c0f233b00d04ed4e9d8ec5012e823b5e013100f9ad6249b54488867267a10d01ce61f3e48bb6e81826c38714e8eb1fdfc128ed0444f68748c7221b116cfce50ea3af9e3170bb67cebb018eac9e9f9b0f5a54bae1770b3c2fdadb171162ce51d08d5b869ee4dc7caf6c2a76d3cc20fdb6032cdb65df21073d8998dd3a42ddaa35d457191f3987c1092ac9dd2fe8085a82ba02f53a7ebe6d62a47f1d76fad410b30d03b06c63f29c6180a70bfef40230efefd42dd5bc5a804a30e8bcfe5c559b3efb0cbae1deb86c90c26d9631e1298f8df7ecac89d61faebafcc6d68d2173ba9fb1bb3c9bc9c1d94b88fddbbb6248294dadca0503d509ed74efd09e55ae1dd4e0cd3c67958e945b00dfabc188deceee2d4ecffc0926af5eb2bb0cf4cb19947630c55ce8c64ff5f5a5a3d46bf6f90442f9dc643b3d058776cc3f233edcad6c600334d750001c5ca85191f485ca851a22082b564ca123478ac4951388bc81a44a8617265cb8b192674b812f2a6419915229456e055e840911732a419a2d2a9cc8e216264e81132ec40971f3a84f90138a54d9f0d42b4292319e8c2ab395e350a62156f4e922dae2dd8c1f52352a04b467cf8251be5d69f0b1295d8413c6a4fac6dded48a24fadc5abcacead514184f60a1830ba0244852491497a263d285aab5976dccaa6b1f9ca8a41523e3b833464c5bd6d624ea955796cefc9c24ba26ee962d9ed47cf27332eea17b866dac4177ac42d6af0fc6e9aa9cad67bc2b63764a4c632de1dc1d07e4fcf958b3eba9bb33e469ca8ee53653bee60a34a75f471d33095cf54800658231c59f2f0ffa793738efc17fbab77ade5d7263b7a947afb8b2b3b356e097a6afdc872cdcf3aae7b3caba10b931e0eaffcfb3d89a4c8b25c69aefad23b45b1b02b6f03cb96eb7e8247be8b1a0d32f6abb60a9bb859db4faeb850b200b512086be726986c3ac9b6944b50704a94438d03c4d25bafeca5038b2da7b6dad26d2fb1d61342d14898fb7c48c321d27a84b707f3f0d7462fda8c40c60784bfebc90b345c8834f20430b84b0d52a139af2d5a235999ef56ea864694130135854eecfa380123065021c320e6dbf152390b9bc13cc0a4b24b4e3207d2cd8d4e86e3223936090cfae343fe4a225ebd1d3bbf69c82b238ae145fe1cf159bb49252553cbda83b190c6f6d27f8da5ec743f64564db2d9650ab2a1aeeeace6faebca00fa488138b3fc2d903236d245445bcc5515ac805d1d4d3e41d42375d5b055ac1317d3d1beacd5b8b42965dc4b53e434ac633df225bc47b0116d1ae5b6d4bcb5b9de298ce7b031a6bd64b1c53b53c65429e661b6ee244a49cb209deafa284604845830aeda27ed8d4edc47ebe9c7bac20cdaa258217294b5b8f8bd055d56974ccc21cd7b255aee3e57f545315d4925e6b04e731bb9b6ef43953624d0615b9cc936590f9333176035919e68dbe65c36f900ca4891d15b9e35475735ae7cd8d3be0bb60b93c89fa2d73330a9edf906eb5bbc79d8269f1d3511c477d29da9d403edbb375ad6443a5c2bbfb5b29e329f153a72cbbbc5c17860e6929e2fc554f2e26f098f9881012bc05ddca7435d24971ad8ac3572f64fa57ec69ed15f3eba0f52c97b1abfee4b3e6491bdbf25c556755d372a3e684392dddb6b71e6245aa28172c2fb6d418f437c654bbcda89b040a665e1661702910a0484941ed9d9b1bd023974eb147bd1480317fc792a91cccd983f6b9ffd3f5231ded9dccd2d6713355bf3d79974c7c20624ddcbd1dbc07e52645bde04b3a9d568ef096af3325b5c41ca868de5001758ee02b850deae419ccb7133011d8e84fc1115ef8559baad110977172af127e97f695947ece500b4c1f60e67129ddab4571126791c406febd0dfd4477a3df9ef8473fb22d7fcd7c912d4954e41885505f001d58715101c65d2a5d37488043d75beae5d6a3018fc843e25b5266d6ffa0d9482e23e2bdd01bf592b0a0cee5353bb718e4460aa6a1bbe57ef3f0afee583049b1ef0187da7354ba556a2c26592b66593ed4be8694cd95f48d81a3f75029d3a4300ea7e5326150ecb4a454b612ffeb69b3f91edea65f1306da208dbbd0afbe24d0c76dcfe57b9241ab178470be12888e583c194ab636cc227d11507e5af22ea8bac62a47bcdc6290cce5da03e25691edcbe82a64fcdd804971a79da0fa629c44df6ef766adf08ea698f331e69e13bac0d04a807abb61a4b0e73d45168c2a4264d8949ca925aef42177873422af8af304b4366ea041fb195a09f7fea625111465d238e11f037d25f5ddcb8cbc74682944064501ace7794b32198466832a8e7334933b8dd39ce7de44c091d48974f2e6dcd9c1a6a4994b681c31e139f8005ea13de683733dde6e4786bc4eae2437f31a1cded610550ef1907fb9e8283b2ac52de50d2b5d490f9ab6568cb080000129f4010a000ff00c2e0000000281005000080ef00ff90c1840b0a1c388031a2c58c0b1a3c780132a4c9841b2a5cb88133a6cd8c1b3a7cf80234a8c1942b4a9c398235aac59c2b5abc790336acc9943b6adcb98337aecd9c3b7afcf90438a0d1a44b8a1d3a8439a2d5ac4b9a3d7a053aa4d9a45baa5dba853ba6ddac5bba7dfa063ca8d1b46bca9d3b863daad5bc6bdabd7b073eacd9b47beaddbb873faeddbc7bfafdfb0830b0e1c48b0b1e3c8831b2e5cc8b1b3e7c0932b4e9c49b2b5ebc8933b6edcc9b3b7efc0a34b8e1d4ab4b9e3d8a35bae5dcab5bbe7d0b36bce9d4bb6bdebd8b37beeddcbb7bfefd0c38b0788ca401ba048cda402b26568fc6650d7512f4ebc997377edadad538e0d50d47becc75ef859518d55f5b65cdf8b4ffe1e7cfa02f5ed4f5b9f9ef8357be2efdfbf8f4a7ef53b68e517ba8777f587558e70f1f70adc7dacf79ed479c957c28e700428a0676efd67f0ad7ac957550b070eb751e58e95684f1770165765c78af9a01000042276626d718ca7d12e7af500a2c881366662a68cd118180027508780eb8036f889dc8a1a02be502750028f9b7b2ce8b2429a4a56f36d724249ded19000699525633a5382ad8252e822ee826e8929df8102b2302480e159226b9e6246566776f14944237c2a88f2aa09729933e384720a45aa07560058e46916b2002a8c1aa8026e865e3a09af72922ace9a9b2cb8a9e6a3fd4a0d148f768779e59c8e8a4a20905822279a60afe93aeaeb9ff57a7ae471528712e5961edaf89f7c524854a51c28d92c299ca4c953aca654a94be2b599381d9097ca2a1c25b291f98ae1b0227ba99c9d5a572ee9b8e6abaeeabce6bbb650400129f4010a000ff00c2d1000000371005000080ef00ff90c1840b0a1c388031a2c58c0b1a3c780132a4c9841b2a5cb88133a6cd8c1b3a7cf80234a8c1942b4a9c398235aac59c2b5abc790336acc9943b6adcb98337aecd9c3b7afcf90438a0d1a44b8a1d3a8439a2d5ac4b9a3d7a053aa4d9a45baa5dba853ba6ddac5bba7dfa063ca8d1b46bca9d3b863daad5bc6bdabd7b073eacd9b47beaddbb873faeddbc7bfafdfb0830b0e1c48b0b1e3c8831b2e5cc8b1b3e7c0932b4e9c49b2b5ebc8933b6edcc9b3b7efc0a34b8e1d4ab4b9e3d8a35bae5dcab5bbe7d0b36bce9d4bb6bdebd8b37beeddcbb7bfe99ca401ba044cda402b265e73a665cc7511f2e7c197275e2adad536ecc50d379e8c75859514df3eff5b658d78b3fdeddfbfa00f1e73f5b7f5e783479eed7dfaf6f99fdf53b64e38fa2de3f577558d7ce1e759db7dace75ed375c947c28d70041860a46afd57b0ac76c947550b030ea711e48395580f167c064765c686f9a01000002646226c718c97912d76f500a2c78d2a3622a588d108180027507740ea8c26e8d8db861a027e502750024f9a7b2cd8b241964e26b36c7e32399ed090005955626f2a5342ac8e42d8e1ed8e5e7978de8df1b2ff138cd149e16a9a6616166672f1390422782a78b2aa057289f2e28072f905aa03560018226516b2cf19881a98c16d825e2ac8ae7e821a8e999b2ca869e5afed3acc138b767739e4988e7a0a2f8422175a6f9b4be92aaaea9bf56a3ae37d4277d1e4921eca489e78523814a51c28c9eb289ca4b913aba654990be1ba8928dc9f83ca1adb24b781e94ae0bc126bf89b995a47ede8b4e69b6ee9b8e6ab0450400129f4010a000ff00c2c2000000461005000080ef00ff90c1840b0a1c388031a2c58c0b1a3c780132a4c9841b2a5cb88133a6cd8c1b3a7cf80234a8c1942b4a9c398235aac59c2b5abc790336acc9943b6adcb98337aecd9c3b7afcf90438a0d1a44b8a1d3a8439a2d5ac4b9a3d7a053aa4d9a45baa5dba853ba6ddac5bba7dfa063ca8d1b46bca9d3b863daad5bc6bdabd7b073eacd9b47beaddbb873faeddbc7bfafdfb0830b0e1c48b0b1e3c8831b2e5cc8b1b3e7c0932b4e9c49b2b5ebc8933b6edcc9b3b7efc0a34b8e1d4ab4b9e3d8a35bae5dcab5bbe7d0b36bce9d4bb6bdebd8b37be63aca401ba040cda402b26567776658c7510f0e3c987173e79dad534e8c50d277e4c75859510d92f5b654df7efb2fbe9d7bfa0eedd12f5b5f1ef73377eadfcf9f4fe87df53b60eb7fa2befe3b7519f8e1d7a8da7dacd71ed271c937c28c70040820e166fd4770ab72c937550b0ffd97d0e3888548ce1578063765c582f9a010000c1a16e16b718c87512c72f500a2c6892e06e1a484d1f7180027506700e98826d828da821a023e502750020f997b2cc8b240924206736b7a32295edf80004915af5b2a5302ab8a42c8a1ec8a5e69c7dd89f1b2bf1288d139a169966ae5d5657ee129c321742a6872aa017279b2e18c62e9c4aa0f4600d76f5116b28f18841a88816c8e4e1a88ad7a820a4e989b2c9829e4abed2a8c12877667f8e3948e6ac92e8022071a6e97e91a6ae99647f55af9e279426791e39e0eba979d745228d3a51c28b9ab279ca4a9d2aaa65489cae0bf79189c9e8fba0a9b23bc71d90aefa8125b489a955a37ade7b0e68b2ee8b4e69b5150400129f4010a000ff00c2b3000000551005000080ef00ff90c1840b0a1c388031a2c58c0b1a3c780132a4c9841b2a5cb88133a6cd8c1b3a7cf80234a8c1942b4a9c398235aac59c2b5abc790336acc9943b6adcb98337aecd9c3b7afcf90438a0d1a44b8a1d3a8439a2d5ac4b9a3d7a053aa4d9a45baa5dba853ba6ddac5bba7dfa063ca8d1b46bca9d3b863daad5bc6bdabd7b073eacd9b47beaddbb873faeddbc7bfafdfb0830b0e1c48b0b1e3c8831b2e5cc8b1b3e7c0932b4e9c49b2b5ebc8933b6edcc9b3b7efc0a34b8e1d4ab4b9e3d8a35bae5dcab5bbe7d0b36bce9d4bb6bde4aca401ba04cbda402b265e6b46654c751feedfb187071ec8dad532e4c50d175e0c7585951cc31f5b650d77b1f9e5dfaeffa0ce9db0f5b3fdd773275e6d7cf8f2f38fcf53b6cd37fa29ebeba7517f4e1effd3fdacc7ddd17db927c28b7004f7ef1f52fd3730aa7eb927550b0bfd8790e28d75388e1474062765c48ee9a01000081ee5a16a718c77112b7ee500a2c58522e5a1a380d1e71800275057cfd88426c877d98e0a02fd50275002ce987b2cb8b24f8e36d5336a7632191ede800039d4ec572a53c1aa8642b861eb865e5917dc85f1b27f1184d1296168926eb595647ae1198320702a5832aa0d626972e08862d984aa0b460097ac5d06b24f17801a78416b8a4e0a48ac7682f90e979b2c88e8e3a7ed1a4c11837657b8e2908e5a892d8c12f6d96d93e90a2ae893f54ab9e17045425751e29a0eaae69c70521893a51c28a96b269ca49992a9a654798aefa479085c9d8bbaf95b22b171c9c9eea4124b9799915a276de6bcd67bede7b0eaf810100129f4010a000ff00c294000000741005000080ef00ff90c1840b0a1c388031a2c58c0b1a3c780132a4c9841b2a5cb88133a6cd8c1b3a7cf80234a8c1942b4a9c398235aac59c2b5abc790336acc9943b6adcb98337aecd9c3b7afcf90438a0d1a44b8a1d3a8439a2d5ac4b9a3d7a053aa4d9a45baa5dba853ba6ddac5bba7dfa063ca8d1b46bca9d3b863daad5bc6bdabd7b073eacd9b47beaddbb873faeddbc7bfafdfb0830b0e1c48b0b1e3c8831b2e5cc8b1b3e7c0932b4e9c49b2b5ebc8933b6edcc9b3b7efc0a34b8e1d4ab4b9e3d8a35bae5dcab5bbe7d0b36bce6bca401ba048bda402b26566326650c751eecdbb977f6fd28dad530e0c50d073ecb75859518cffe5b65ccf6b0f7e1d7afa0ae5d7fefe5b1f9df63173e2dfbf7f0f977cf53b68db6fa27e7e3a7515f0e9d7dd1fdaed76f1e9b917c28a7004e7af9c5eed27ff997ab917550b07fd7750e18375284e1370061765c38ae9a010000416c56169718c67d02a7ae500a2c4812ab561a28cc1d718002750478fd78026b8d6d88a0a02bd502750028e977b2ca8b24e8a3ea5f269723209dddd800029946a532a5381a98242a821ea825e4976db81f1b23f1080d11921679e5695556376e109432f6c1a48f1aa09625932ef7462c944aa074600572a5906b20f168c0a68016a864ef908ab7282e9cd969b2c78a8e2a3ed0a0c108f664778e19c7e4a492c8812e6996c9fd9f9e9e79fe53a79e071424711e19b360e9a469b7c420853a51c28992b259ca48952a8a654694aeeaa69f71c9c87bae91b21b761b989eda0123bf6989d4a172de5b8d66bade6bcd26610100129f4010a000ff00c245000000c31005000080ef00ff90c1840b0a1c388031a2c58c0b1a3c780132a4c9841b2a5cb88133a6cd8c1b3a7cf80234a8c1942b4a9c398235aac59c2b5abc790336acc9943b6adcb98337aecd9c3b7afcf90438a0d1a44b8a1d3a8439a2d5ac4b9a3d7a053aa4d9a45baa5dba853ba6ddac5bba7dfa063ca8d1b46bca9d3b863daad5bc6bdabd7b073eacd9b47beaddbb873faeddbc7bfafdfb0830b0e1c48b0b1e3c8831b2e5cc8b1b3e7c0932b4e9c49b2b5ebc8933b6edcc9b3b7efc0a34b8e1d4ab4b9e3d8a35bae5dcab5bbe7d56959026518a6b590465ca0c60ccaa7faaad6b177e6ddbb5fa5bb6dbb7b020e3c37fa0b2b2a8fddb6da293defdccd934f511d5afcdb60edaef3de0e3cf9377eeed3e28fb66daabce55bc9cb3fa27ebb7af6b0eb51b7be0cd6f07617e1006fdd7a6da78c1f73edd63c551c20d7cd90840ea5606879c5f72c951c0e97a24000044896d482e5028d9285ed97108a001a7866d48706271f50208c51dc5d7c1678a269502e182806718c5108497bdda082ea063ed8361b82edb8d3a674320054a19161886d45832ef852e3882e3905e75c2ab7ca0c7df53714e38a5e69d5949acd87d36c89b568f0278a289915288cf589d6609a2019108c906918da4b7516287163862e09c76f9bedf95766775ea0c1e1a88287086f6df1b9ec11a446e90964ad26585b95ae6277b7e6ac52b7a825a0c9f8dc93844e084a27573be529df9c8650b036eba152b2e5a88f9a516568a8ba85bf9f6f22da77aba1ce759665a4b6389ce95f5a293cd3b4d65b6de5b8d66b6750400129f4010a000ff00c246000000c21005000080ef00ff90c1840b0a1c388031a2c58c0b1a3c780132a4c9841b2a5cb88133a6cd8c1b3a7cf80234a8c1942b4a9c398235aac59c2b5abc790336acc9943b6adcb98337aecd9c3b7afcf90438a0d1a44b8a1d3a8439a2d5ac4b9a3d7a053aa4d9a45baa5dba853ba6ddac5bba7dfa063ca8d1b46bca9d3b863daad5bc6bdabd7b073eacd9b47beaddbb873faeddbc7bfafdfb0830b0e1c48b0b1e3c8831b2e5cc8b1b3e7c0932b4e9c49b2b5ebc8933b6edcc9b3b7efc0a34b8e1d4ab4b9e3d8a35bae5db095902651826b590465ca0b6abca27faa8d2b967d6bd7bdda5bb69b37b02edfbb6fa0b2b228fadb6daa83cedd8c5933f51dcd9f9db6cd5a3ceedfb79ef367ceadbc27fb66d2abbe557c1cb2fa23e3b79f0bcdb51a79ecb56ff6613e108cf9fe5d974c1e7fddc6fb551c20c78d9f700e75206775c5e7eb95180e87a240000438d5d38ed5024d9181ed87108a0c0a68a5d3830617de50208c519c5c78166862665c1e082805718c51084877dda042ea023ec8751a8edda893a570320014a09551786d448f1ee812e2842e29c4e4582aa7ca0b79f527d3e2865e59159396cd77936b85b558b0268a2889d42788f579966f8a2009108b945908da4a7116183162822ef8876e97ede91765735ea081e0a48277c76e69f1a9ac10a046d9c863a926481b94aa626777e5a852a76824acb9e89c92804ef70a2457e5199f9b823650b0f5eaad42b2a5a78b9a512567a4ba557f9e6b22ca37aaadbe455664a0b6285ce65b5a19fbd2b0d64b2de4b4d65b2450400129f4010a000ff00c267000000a11005000080ef00ff90c1840b0a1c388031a2c58c0b1a3c780132a4c9841b2a5cb88133a6cd8c1b3a7cf80234a8c1942b4a9c398235aac59c2b5abc790336acc9943b6adcb98337aecd9c3b7afcf90438a0d1a44b8a1d3a8439a2d5ac4b9a3d7a053aa4d9a45baa5dba853ba6ddac5bba7dfa063ca8d1b46bca9d3b863daad5bc6bdabd7b073eacd9b47beaddbb873faeddbc7bfafdfb0830b0e1c48b0b1e3c8831b2e5cc8b1b3e7c0932b4e9c49b2b5ebc8933b6edcc9b3b7efc0a34b8e1d4ab433665288550a5d6520951b26a1d2ba9dba653b67dfa167c61b6deadce9d28c67ee7db2caca8ddf5fa5bafdaab6b072e6c75c174eb5fa9576eaaf67ee2e2d5a35fca6dfaef95b5e8a75507de4cba47f9efdbaa5f652e99bd66d9b9547700cebdb4d0feb5e76f6d9b551c28a72d1e7afd45cfd57fbdc78b95120677a240000c18155288d502ec108bd577108a060258e4528dfdf67e50208c513cda721e4802635616f72883718c5108c671dda0e1ea0c26b8b49888d59833247a2200b32f8949586dc28916d8b1618e161964e1522297ca8973fd077361805649541290c56733e98fad3850a48a207974a582fd5936ed8a28e8100a9841f7dac87b0ef7d0e08c16e827ec91e5d9b6e37d4ea0216f9e7a5767ec63f9894c9e9a3eb968e1a32e28ba13a46a471764a25a8708a2a6b1d83c118a36e7a92151edf83f1a8650b09569a742b2b24526859a51c4e5aeaa251f1d652aaad629a7be15f5e2aaae08fbe35552099b51bace2bcc63bece3b21504000129f4010a000ff00c2880000008010f4000080ef00ff90c1840b0a1c388031a2c58c0b1a3c780132a4c9841b2a5cb88133a6cd8c1b3a7cf80234a8c1942b4a9c398235aac59c2b5abc790336acc9943b6adcb98337aecd9c3b7afcf90438a0d1a44b8a1d3a8439a2d5ac4b9a3d7a053aa4d9a45baa5dba853ba6ddac5bba7dfa063ca8d1b46bca9d3b863daad5bc6bdabd7b073eacd9b47beaddbb873faeddbc7bfafdfb0830b0e1c48b0b1e3c8831b2e5cc8b1b3e7c0932b4e9c49b2b5ebc8933b6edcc9b3b760cca8550a1d18ca496b2f9bb686652844396b20b167a6ca7d653ba55faf4b59a2c2654599d45fa95badca759022dab16fa85e0c3ae5bb6dac6bbe0408ea4c6fddb9973f6afcf9b53bd8c57ef3b8a2bcbcf676add9554f0d18c5f59ae7d3b308517e5967f7e2d9430a4e4ebcfcfaf845776d4b2fd5177cd86650020bd87efda00000864dd78f1873ad512e9515e938ff14834948ca0172a1e680a57bb567b2400a2000f0278249480268670ee7a02c6dfd98a2400b22b80497850a02222281b16881ea073aa8a3605e2ea70322714668a286874ee8dd1180e988fe198816f782a1915af4e2618ce9e714a98822e8d5a797f9a7ba50270a581b1f691aa84fd99c39b82d9886adb934af7932d9a35a9062b9fa198c0e2727af9d3948a4ed68cdc8c2ce9e0ec988ee49e5f8d826907af73962a9e9d6702094366829e6af7218a4ef8976c76e19ac9289ca13932f6eaaca6f4a62b787a8707eca14158fadb9ab2152a9b7332a6fb61b6ce1b8c62b0060400129f4010a000ff00c2b90000005f00f4000080ef00ff90c1840b0a1c388031a2c58c0b1a3c780132a4c9841b2a5cb88133a6cd8c1b3a7cf80234a8c1942b4a9c398235aac59c2b5abc790336acc9943b6adcb98337aecd9c3b7afcf90438a0d1a44b8a1d3a8439a2d5ac4b9a3d7a053aa4d9a45baa5dba853ba6ddac5bba7dfa063ca8d1b46bca9d3b863daad5bc6bdabd7b073eacd9b47beaddbb873faeddbc7bfafdfb0830b0e1c48b0b1e3c8831b2e5cc8b1b3e7c0932b4e9c49b2b5ebc89b23b26518a3702b2f9da4668ab995902ece9da8a65d3a79e5b2dca655ae0d65aa0b85155a5f1db66de5b9e5528c33d65db2a8be62a7dea5b28d8a3010ab2ba17fd63e7c1862f4e6d06b07adc2aa41ffe5df7efe5765bc737024d75e974f9e006548fe97d39337fc0868b7ffedefdfecbe6da556ffd1c57665002aa5778fda0008e7935c72f967d9d51cd951fd1289f92863138ca8f6c99c6202475bd47b2400a200090a5853138a1e66106d740aa67f588a240052a9833168ff902c1a08ba94821ea013298432d482697a2a07b3e48a2058146d87d9f7ad1789e97821ed722209b46c482ef76e1d7b328822ac8752691f1975a50210248ba9d631298ee589f21a8cc1780a5a9d32e733ab9d2d89a5a999a97860617c62e903138446c62c5b8c24d9806b928ab43edd878a49a62e7d8e0a3e1c610ae8e2e48c865a97af7446e837ea70e97a69a696a9199669a6a2c446a97c127277a66ba439389a5a94bed4c91a7d2a869befa0c60b2ce0bc6504000129f4010a000ff00c2fa0000001e00a4000080ef00ff90c1840b0a1c388031a2c58c0b1a3c780132a4c9841b2a5cb88133a6cd8c1b3a7cf80234a8c1942b4a9c398235aac59c2b5abc790336acc9943b6adcb98337aecd9c3b7afcf90438a0d1a44b8a1d3a8439a2d5ac4b9a3d7a053aa4d9a45baa5dba853ba6ddac5bba7dfa063ca8d1b46bca9d3b863daad5bc6bdabd7b073eacd9b47beaddbb873faeddbc7bfafdfb0830b0e1c48b0b1e3c8831b2e2bca401ba0409da402b26561b2565897514e8c3992756bc44dad53cc8950d66fc4975859510a38e5b654af1b6e3d9a75fa06ddab7e5bdd1bf1376fcaaf6fdecdb377f53b60bb1fa23dfb357511e8b98fdcdddae87cedc19d33b01e002ab47a96c74eff57fd29d375161fcf677ffe533c3f62d8db3b593f2c5540000ce76abfed18667970e2c500a2ca79f1c4ee9874a13718002750a60ddd78f518f2de72e9023b502750020c9d6b2c08b2448216b4706f6a02685bd380008812ea4bf9530f9f7a1208aed08a2ea892d189c1b2bc1678a178ae5d863e94d2696eb168c02564f9a77f9a0142b8bfd57c3229c1aa0f1600d4aa41e5b28c1c74e9c78e508e1e5985a17a52494b9c8b2cd726e89bbd6989167746a6f5e7845ea9c62280f146176297b95967ed87c599f6e66912a69ed78eddf96291742267d0a51c28f8a82b8ca4e8df9e9654c8c7e4ac295799928f8a499827a9211907e3a8e19a139e852a76aaeba800b6ca2becad5504000129f4010a000ff00c2fb0000001d0024000080ef00ff90c1840b0a1c388031a2c58c0b1a3c780132a4c9841b2a5cb88133a6cd8c1b3a7cf80234a8c1942b4a9c398235aac59c2b5abc790336acc9943b6adcb98337aecd9c3b7afcf90438a0d1a44b8a1d3a8439a2d5ac4b9a3d7a053aa4d9a45baa5dba853ba6ddac5bba7dfa063ca8d1b46bca9d3b863daad5bc6bdabd7b073eacd9b47beaddbb87192b214ca209f5b218ca859cbc49591e55e7ff6061c3890b15b67dc0b16149891b0e51656583e1a7da594eeb88b2f5eccb243f6ef97d25f7eeba89136e2d5af47fc4d7dca97edbba827bebc5506b969d93357baadf931ff56cc206308fd0cd62de8c5c953066c55854fe2dbcb9fdc7eaa52b1f5c65aafe3c651100086fa9cd7570a0d3dd53ce00a22bf9799cd1ab46dd1800d51bcebbcb9f9f135a70d9021a50275002ea196b24c7b2cf700eb45fda68f9183a5f700838f06b49e953ed1b780ab78d5c781668b25d77b1b29b917699288dd88426a4b1e46ca918af9062e1675e9a0f2a689e517a2ad8a0aa0d0600b32b4fc5b26b9772d1876ddb7c0619642d684af82a188b2497056499a5296891753e56d463824669a5ad7ed9f5f5ed85a119466985bd49d562670a567d538cc5b9821d621a17bf951c20b887a68cac98be1a965c78a660ae2117781e7d720977a2ab29c8e56f96d94a331a8312368967ae9e7a0a68a9750400129f4010a000ff00c28c0000008c0003000080ef00ff90c1840b0a1c388031a2c58c0b1a3c780132a4c9841b2a5cb88133a6cd8c1b3a7cf80234a8c1942b4a9c398235aac59c2b5abc790336acc9943b6adcb98337aecd9c3b7afcf90438a0d1a44b8a1d3a8439a2d5ac4b9a3d7a053aa4578ca401ba0485da402b2656aa7da8ca2cea2ca957b27deaf53d234b67d2c6851446fc27d5165658adbb60fa5b27b757c6cd9b57758d5cb87fa916eb75bce95ab28503165b68fa95bdb55751c55c37ba43e1cf87aa1e65299f29dca769543600c9b334d8cd654726da76ba0b0dc2815bae8acaf0bbd1d66da8ce6ca220008bdf43732e04e716f2e6c10458d62ec4377b67b793010ab22773b0f1e0d79a1f6d28cf6c60ab2086170e51ec7507fee945a32eae3e10b6700be9df153e6d6772f2fbcb6b3faf6f5152d156ca8563a9c57e5d600608341e7f65263ed57c5df65b907a20387f9172ad1831e97a28a710068641b6dac46bbdb6dbdc6cc5a722e8819598b1ef5dfda02c5b8e2a16626853a948379a8aed7863ed83dde6851f841a061260920a4603ae846197271d6ae5a6a4a0519db73a167650b0906597f1b24022754a51cfd19e52251a9855d969d125976615f0ee8a5ec6f6635502c7765d9a7ee9c76f9e7ef9086c410100129f4010a000ff00c29c0000007c00d1000080ef00ff90c184070e5365809590a5518a1a5978f0758595150b2a5cb88133a6cd8c1b3a7cf80234a8c387011ea214d0d124ca2b2a5a8c790336acc994376e5bb9909550249e0fac346121b525ca944b8a1d3a8490ed4c99335602040172a057994baa5dba85592ec29a39163cb205f12bc69006866d3b863d68c5ac4312f4b218022b09a46dcaadbb873f2b5656d01e247a15ba00dab002fa1e3c959dedc65e6dbe751b47750082b88b2b562aa89f62c39d01018df936754005139f2b9e3db633bf5d9e03eef4ab10447164d4bb6f546bdaca13639c33eab61c2494796bd4c98b2eb6d7dfa3e8a652439d9d5c3af9eccbb9517e491575c0600a2200479e0e11e9f1f4ea0db2cd0c2474f0f0fce5fe25ddd4b7f76b2c2c93081dde3ffdd1f93dba766e1c946108e7402a5b45e65dde492585311c6cd51801265aa927f5502e35383515611e6894d25a91f6d9951c0e452917862e158bda6e49b60119872eb889d144ed5706d5814905036e8435b55e1060a1e8a3609135e6905026e1b83110524e29135e4db1295503925639e497616d4985669a5e69c5679e5e7906a4910100129f4010a000ff00c2fe0000007900f0000080ef00ff90c1840b0a1c388031a2c58c0b1a3c7801b1e53187d6264cb8813361c985153a2ce8a1b2a541941d2a7c398211a9c49a2f428cf7f2f2ea4692391ec469b2f664c791390a9429e3f6e8438325720dd84173ae45a70f763d189336ec41a057aefc2a559966dda523b20de9253a27d48065ce8d0be3166058aa5bbab5e9569b6f48954da215cab6dde7c6bb57e2cdcb089fef5ab365fe0ecb745f6f5ba877f60e29c1582844bc7bde0e3c27fae749c779ee255cd2baa15193a5179e5ca9fd6a60c89b37562c98d5b368cd4947d63d7b903be4dda57bfe9bf8d7b750e58f960729e7727ecbd9c33b16ecfc73bce5c2d71ad5dadcd437e2bba59717cc4c58b2386dd1e5cb1ffed8d97165e15bb7dd1fda987c6ee9655e7efef8dc64f5ebefdf87497f564102d4402a410100129f4010a000ff00c2fe0000007900f0000080ef00ff90c1840b0a1c388031a2c58c0b1a3c7801b1e53187d6264cb8813361c985153a2ce8a1b2a541941d2a7c398211a9c49a2f428cf7f2f2ea4692391ec469b2f664c791390a9429e3f6e8438325720dd84173ae45a70f763d189336ec41a057aefc2a559966dda523b20de9253a27d48065ce8d0be3166058aa5bbab5e9569b6f48954da215cab6dde7c6bb57e2cdcb089fef5ab365fe0ecb745f6f5ba877f60e29c1582844bc7bde0e3c27fae749c779ee255cd2baa15193a5179e5ca9fd6a60c89b37562c98d5b368cd4947d63d7b903be4dda57bfe9bf8d7b750e58f960729e7727ecbd9c33b16ecfc73bce5c2d71ad5dadcd437e2bba59717cc4c58b2386dd1e5cb1ffed8d97165e15bb7dd1fda987c6ee9655e7efef8dc64f5ebefdf87497f564102d4402a410100129f4010a000ff00c2fe0000007900f0000080ef00ff90c1840b0a1c388031a2c58c0b1a3c7801b1e53187d6264cb8813361c985153a2ce8a1b2a541941d2a7c398211a9c49a2f428cf7f2f2ea4692391ec469b2f664c791390a9429e3f6e8438325720dd84173ae45a70f763d189336ec41a057aefc2a559966dda523b20de9253a27d48065ce8d0be3166058aa5bbab5e9569b6f48954da215cab6dde7c6bb57e2cdcb089fef5ab365fe0ecb745f6f5ba877f60e29c1582844bc7bde0e3c27fae749c779ee255cd2baa15193a5179e5ca9fd6a60c89b37562c98d5b368cd4947d63d7b903be4dda57bfe9bf8d7b750e58f960729e7727ecbd9c33b16ecfc73bce5c2d71ad5dadcd437e2bba59717cc4c58b2386dd1e5cb1ffed8d97165e15bb7dd1fda987c6ee9655e7efef8dc64f5ebefdf87497f564102d4402a410100129f4010a000ff00c2fe0000007900f0000080ef00ff90c1840b0a1c388031a2c58c0b1a3c7801b1e53187d6264cb8813361c985153a2ce8a1b2a541941d2a7c398211a9c49a2f428cf7f2f2ea4692391ec469b2f664c791390a9429e3f6e8438325720dd84173ae45a70f763d189336ec41a057aefc2a559966dda523b20de9253a27d48065ce8d0be3166058aa5bbab5e9569b6f48954da215cab6dde7c6bb57e2cdcb089fef5ab365fe0ecb745f6f5ba877f60e29c1582844bc7bde0e3c27fae749c779ee255cd2baa15193a5179e5ca9fd6a60c89b37562c98d5b368cd4947d63d7b903be4dda57bfe9bf8d7b750e58f960729e7727ecbd9c33b16ecfc73bce5c2d71ad5dadcd437e2bba59717cc4c58b2386dd1e5cb1ffed8d97165e15bb7dd1fda987c6ee9655e7efef8dc64f5ebefdf87497f564102d4402a410100129f4010a000ff00c2000000009100f4000080ef0059d2318ac80e04385070e1458209853c184c6061b283179934b8017122468c17363456317264c1902b4e84b8525322c59c095a44285135e7c79813125c4871566d43872d3e2c886315a6c9892d121d7913516ec69a4b369c3aac846540a913a235aae379e349903f622c8940fb60df813b7e4df9433ca3d1aa6172dcb87218edc0936d7605d8a4f9aed2a86576b569c5f069568765eaedebb399a042c521031d3b50bd26c8bb6142dda987dd6f4b9167070ebb04d3b6c0db552775ccf712f66e84a1cea59a361f256bbf8b47b5aa0710b54cd97b3e461ae6732c6bbc9546661a07b7b0f4beb39396598c18ffd7b595163d6cc655b0e6b471aa7c26551afc6f53e68b324d4aabd423e695b313fcf9e7957de3da61829ccc061231f4c27faf5eef73d5785946d3555e451640e676f926ce5c6fddc400a677f97402108ab1c6eadc6af138bf5d720e1427d45c7508fed767c536eadc5b591757d57eb9d4589b7b0a1508d7585537539761c1e66a1a6bc8c652e485a146eeda71c566fc5e479508a5178416e5226d44a16773a38f2a47132d84e1758ed396713435266cb955505592621400207395f826d67d6e28655a9545a72b147469e5b128493a79fe59703e1907ea447d09f0619f4627cd504000129f4010a000ff00c2000000003400f4000080ef0059d2318ac80e04385070e1458909022c78c012a3c884179113184c60664565ca0674b88153e0ce8c11368456b194e7cb8615469c2902b56346843116dcb963372ecd9f0b3af449d2f2efcc844b46742a02786053a04b8a257a03b1a4c5831ba25dba333be45daa091e7c8af53c2141b327ca9d2b863aac49942f5abc8ab136abdd807512bc9b70fb6c50a313eee5cab530354baa5fbe95f876736a4eba2d4ea489c2b8acc5cb834ef59a8597a66d9c973794abf338e2d5aa4f37954ac8b96c49c0ad6e5caa48507ce1c0832aed4b569ce2e4bb21de2eed06f4e7da993dca442923563063c6bd1f94ab9c727957d94d4a476d97d4316ca5c61e56a9243befe6e1fbb32b8e2872ba7360f67992a66a097b217a94b5c347eb5bfef5d0f5d1aa474cb61a6da134e7dd4fb5a7d9166361557f9e4b71371edc6d0556c6956709a5095e6259161a5262c168806d77a1e466dd693d77a0ea6ed957a85661e15872ab4dedf41add5e552832567c91276e14479d67addc8d4545a65464d5f57e9571cd86409e75cd23675d474537ccd16c325560d3891208d065840ec730a8788d0790579729340c16946ee644e36b653994649871199ddb97e1d682688331a6995160b9c586e8956a84fed49766b7ff596526198b109d7ac947e39805136622707e69d26c7d85e4db587e62d59897723a893e93727dc735199d8ac9352b6c263aef95a290c107889b5aa1f529298572a81d175791994ddd5f85ba77e0af2eeaae50ab42c8789ea1a29ac99c6481dae299808a8af160999e69d926867e0a2be696b217aaed52fdb46921b262e8c71b9be1790f5f969ed8a22b8f16d72157620e9ae7de81d26bbe12530a0b902f8076489d145966ea78ada8ea295aaaa1b5ba1f10a46a4c956db3c60acb108ce67579a96207d6266fb3ae79fc55b8e94c9f9684b659452e78b2aaf9608576065e21a87a49c41ccb1e1699ebb5d1e426995b7d177fa3a13af8a423a9599c0a254cf5b8147ca5c6a5d624c63adbfd29cac29b5717c39a782f226bf2a6ab5eb27a093e1d80d69a73ecad79b66fa1a55d7a9e54841fef9ae3eb93faeb0ee3ab5b769ce8d32aede172753e8ab9e6c75b17f8efb8a2ddece06373bae1797762ad0f9e6e56f8e6f47bc92de3f4e8529cd27fc1ae1b8edf7c4d7eebd975916c8f2cd66e9ec59eba33cb77e6be6668e9aaea9e3c9a7ebf7777be2cdc037b68bbb7665c99ac5dadbb1a316747def1fc9dbae8dc9b7f5e8cf0bddf455eb524aa9df88d384b437e7d78bd9edc1eebec6eb5c35ca6826f57518bc355f314fbdfba4c3e5124aa62e22f1db816bf933ddf4937199e14f615a931dc6dcb56e919946236f725bdfb03854306d66c250c35196e8851db4159941872c8e4e905519b10658cb565a329c9648fa2a0dcf8352cb6e85c6669dbbb9f0f16f191c1a52f23664ad89cd8f74a27e9b0546b2261a90194a52e31294f44ea080000129f4010a000ff00c2000000000a0005000080ef0059d2318ac80e04385070e1458909022c78c012a3c884172a5c5871b126cd8a1b3a44e8f1d3654e8bc88904263015a2b26509569c3992702bc597216a235933d5a9c2913962dc79c3f6acc6953382e42a0455e1df9b359e056a6379aec8af47aa15298091a6dcac57ba7dea06fba8d0b467ca9d2b86fc61b1a82bd2d469d6f52b48bc3d4ec51ae6fe6c5bb437feb5cb27bf6ddfbe75fe063c9750726abb8103f56c1891b3c094974a8cc85913b5ecc0273b76dc0ab3764a87478a9ef98ad56a628aab53be7d7ad57c68dba76bdead8b567e6adaa38e5d68e055ba40ae3382ae1eb3b8bac3ea039fc43e2cb9fb6b9ccb8a2f381ddaf3f5e9d98f67ce1cb3efead2d7954b9f2f8e937affc7e5dbbfdcdb9a76d2d7457e05bfc438ed5df9f3f7d7b9bf1d7cf1e710a9617df53020803df79023477dc75c586be948fe158ced48ded5851e3790d1880146c754684d3624906a85f402e28a2a55d8df54855572206e81559850622ab86026465958c3668d326804658e3e09bc965bc9148c5373b1180b90880297c463805a2825ad6e46185bd59df15531d230d1143c5786e52734634c16994d968119a62469886af6846d49ede8939f41d9b5fb146e629805d16ad9c825998fd588d45c48727728e886318776a045251a236b929aa9f3e4a59aa9e1a298729585ad7e46d50a629f9ee50ae2893a9a4aa9adf58a5a69a8f1baef702b90367568e9676975162ea665ea3fdeaeb685cba19fbe954bd65b4944672e59ca980628761935d45876d53bac217acd3b68e4bbd16b5d6277da88b0138a11138f50b86d186cdd75612a60eaba4615cb6fab8297065293a1ab0c9ab70175e411513a563858b0f285d554b6d2651e6bb81954f12cbb5129f41741be74576c707e3c072d52fe75513d83697a822a6c518cef5db9063cb365431b84b41f7d764812b47685eba919a462dcf01268133c5bab9c27a9017982ba99cf165f1ddc1f63ab5d3833f0d823aa04396ef51dd192c1660d54acbbf51480dac85a38ba1a69e24a7bee9113a5ea98d3a539037fa7538da1b9bc5e2c6956a7f60dc05fbfd9ef9d3e6f4cea372ed88eca2d30f38233e850b3c183baf26870ea9909bad9075da827c53f9da3a6db824495f64886bd207ab7953c361286d18d6ab28f679867f451f97cefa3dc8225d4ebb71f47b570d2b589b7327cf2cd49bda18b5ce872e4cb1df575d7335b31d4cf170e6153a17ebbcb74f59f98d97f72aa9e4df9ab53967a287913decd6d919f0a99fba157484ed9739748c59449db864d6bc8d67e94f6e4219beeeae2eb8954ab9dcee94ffb8f418af54c9ba4166553232a85c635aa2c88dc446e22e053f654004fc57f8c24b90a1fc847afb0e5fd8f24032cd0d817c1cdf15dc866cad95e9ea7fb9ef0b8ed713b21dbce96572575486742f2e2159827effa2475884172d31b800906f0363d1fce506b3b5a07a32ca3d18e697fb1cf56e2a8abafb8462d6e92ce17f2c4981809770480daf12b5ef789b12efb4e5ce2139d052347311eece98904375e03e76329c9cf218d5b13e90398a2a2dd90b061ebfc57c47316372677ca797c5859b4f5c6c2d9bc63771124d96af4eb30810e429b94ad5f6ea6772722aee5736a5f9201851e94e5c1f87b72d2afcaf8b9225a8ca22cdb090e7069aea0017ea45e6bc6d4e6592830360c6d68bc75a474f508be897ec369d35f1e1947babd212c4227bcab5548465d332ade866003ca573b65454c42eea295c28c51d6939aa4811a0483dc1b5fc0a84f955190596e71e366ead7d0efb7a9705362b337e4fcc5d4470e0ccd9e113cd315f87aa216935287645014c6e7e83b9deba72b6a7d04070908c7711f2e69411e50a237353736747698c215ac0f9971152257c480dc4655faf80abac8ff486493f06c1bd5c4af4a0f25920d48e73ba3eb4e4d9f819782f31af4f8eab3dd4cc28f91926d4aa9d0c4f162fb486c186bfe88b3df9a76688adc0ed25988ff47124aca8c5bfa46445a294ad50c2084521662a8e51894698fc06b63bc5b0564691d81c435547adb2ca868dcb6a2641c2cacaa6643a58890ca9b814204c7d7077648bf0eed288b6d885c3ba897b68ed924a66d5a1cfc99321bfda4ec9ebcc45a33b9fccb9e14bb933542e055e976d2eff1d4709385e4686b38c43789dba8a42acdaafe0841dbc2a45739d49bd4ee48dfaa119d08a1854f0065bafcc6d2ae09740464e4be89e4a6eec48e8ccbf2d5516596afae9d4b48dda124d8798ba0fe34dd79a357656d59bdcd95433b80cce06c136a0e37d625ad6a3d5cd150289bc9c0b01839d982df9a1a37db62f4fe2604f2e72b6780d791a5d89155caaeea7a425a52543195cb66996b3b6fdbb99434611e9718f6e962b73213349e89b897b64971ecfa3b6657b94956092c0e140ee210a1b3f994702c015d0bef47c7c4a6637137b2dee248b2c2c3d4d35da766cc998de5c32c2de605f888b8be6d6b65d36a65273cb4eb924a41a36c266ee2a8c0eabaefa5f77a6c651a4526866eca26f4caea7b527b9cfbb296fb48a32559a9f63abb46dd296373fdb0a33978f51bf95eeda99d80fb489519dff9e79c43663bac2546c4a21b8e274bcd62681d5849c25d6ac3b8a21e571bb8d860e9d81f991e84ec21f5d99599a0ff344553b9f48c3d3537c7bd626c93f34364b369a19696660e8de9936cdc431f9675356472fbb0ebf4e56ad6de655db799432ab1ea822a7c512c1464554cd0963e199d6d05cdc51d76423dba645a9c93a6976345c0bb576210c435713e93d603af516a9639947e219dd6c0cce4cb45887c07ab95569e5aaa35b3a47da86f480b18cf7f0ec7c0db447fc0aa54546fd39a6275cc4f7569e9688f6b5fb49b2c2e91478d96d264163b79adeb1c49468462fabc74d09b4a23e43c46b713db32aab5e6d8a33e0471d5119b584ef0a36d8412c697c888787ba93bbdc2ca42c11bc0a023ea2abb4d0bea7f26199a0fcba0e2ac3b6fbd3545510cc61aade821a3315912bb6e0f0dc5ccfce995949bdd3bcad3313ac36098e27088f6922b80a883c41b07f79db46c693f2c966959e8b3ef922634c129727cbde91ec5bc483b5789aad3ce52febb5d773bca094265de83b5da9294f5115ce9796ff75ce01580bbce6e28618a2af1b6e417924b360240d6cf4dd72d2b9a3395fab1a93da0b287fe1e7f6c9666b3f1179826047cabeeea2e0ed19c310100129f4010a000ff00c200000000fe0005000080ef0059d2318ac80e04385070e1458909022c78c012a3c884172a5c5871b126cd8a1b3a44e8f1d365409325466c0982b46ac3911b890426f27021b18e2599bc560317ac4a950f66ec99ac086d4f913382f4b9f2b8a0de99457a154a8417a2d3a44d9e2d8af37724daa04fa275da34b9675aa261c2359a659c2ad1bb5bc245e8c03e6749b529e664bb07116d5db779f6e5bbe79f6069b38342ed9b18b0fe50c4851ecc7ca316ab47909b2325ac1933b464a5932f563ad9f1f7e0d2572386dc5a933aedc89943be3d69d4bbe4dda53f8e5d4b16b769d8bf5fc61d8195a164c97507363e3c19f1fdbac39f2feb5cf9ff54cdc7a75f68e718a354bf6186777c405bef7ec8af49bb8f3853d929f4fed9d387dacdf669f1f7e9961d5f90bd7ef7f3f90ac71f1e9368ede776d776fd674fd085417780ed71f9f7012f421ec7cf9c76164860aa771e48b1258d41e7c1248b0ae712698e1e3862e5832e08922685f12820e285e118b89942dda46dd1683e07a25d858de8532940d1178d13764a5480967816b5b6165b31b5b4d8595d96f458565e95b9da5f4e695567985d79f5d49152f4e513995d99351b575e76e46999a56606e45c6e58a4a047850777ef897e47246e998509c3a07e723634ed82192663a3712146c4956e4996a5a86449f407e89c8e5a0725afad766bd3aab159d95791a24ab9a6ae955a8aaa6c829a99625da9baef0b685f916637268cf1f978e19a86f8d75ea18eea2825751d57d72292422a08e0a7f55543a4ad8a485fd7513d258225b86a7a5415ad658503a39d5a6bee5791924bc2e496ae794ea99a5a180ee3bd69c99e916c2219b1d876c9778729734a442f5ebf7e356cafa31efa819293cafb3120a311eb982c5c03343966b50d2c0e585c8248cd2ebb496b3b269c319a10eaa96a7af1b7bb1339d1fab3a68c42f9cc17d6fea96ad67a56a968f9dc1d9f774d67585fb919c74ca0c4422b5460d7c2faac6fa68a2b9fee99295b3d2772894b71f5960bb9c6dd655b7b476a6af96bf5baa81b4cb568aaa98bd133a9a1aba5f77a6248ec2b766efbd47b95c22a0c90bb42efd5576071f2fdb79fca7d879fafc41d3c80dfdf091e983db8834cf7a1c387a54a97b54f9b113ac1793a22bb85f69cc378b60d8933eb81027a48728d8faddfe87a8fa9dabda3230ca1e2e3da387d934ca60b0817cfc988dd23c015d7c6706f2e49f79be1121e3530f75d164cbcabc1986971bc65a5c9a74027bc07afdc2b6e3428d9ca9c48e4e823273abc993ac929f472d6ecbc39b29fb5d7d5fa7329bb3386c34b0b6069976e0298897ae17e13371978324ab39def04546a4e54deb58eb5802f8c74bb3d1f64467322b83a0155b16e947a274ca8b92a2a6a63d396d89696b5ad3b6562710a1e58a5bfa602ab2b48c98816a61549329dd52b4c9b8c97a677eff110e83b4d3d81c4160b86f046160ca17c0be0aeb404af11b40aac5b7b6e44b268702bf50c8f303cd2a3f4b2ec100111fe7b1220e0f26449b5d1e8ce5dda22e39aa7232ea4cfe3445cad57b6479e2d1ab05c52645edae06808c61a4c8c670487950f475848cd08068eb39114e46647b771c7cc79d1746346f887c44222932333b803e2641f2532f58b537163267849783341eca123fb9469c47770a2219e895a8ccf0b926452c7f4ed42628b629fc4353a46a482508a112d5cfc382aadc18e8264522bc9b6c628b99df4c399d143e0d699903a6a442f608bb79627e5719dc8ffae7c33146948653296fde7af60bc80e733b7b7252d605e92348951c414d1efab29c5ca53028953e05659bdc9c92586b3086e6c678d2fa1fce095e4126633a821492ee6626303eb542dc20d3e399e2853222a9401c9a3aa5a2e2744c37ad78a79dfbeddf3bc97d926c849d62daff411f639e3b99cd81222396eda057035a1ddee4526c915ba47a47c3bdd0bd842c176909e7a841163922abac6e4623737ec0a5b25b71ecab9a117a48aa527579811da79907c806ce62a395903aca1ea474deae81da493525e1a60579cf322602768b3b7a4f19c66f22566c2f8ed2cedf59045f188a844d99ec90dbdceae4bcb8e43572b3f8e53faa74af4efb467beb4f9f8cd8c1c93ef2dd507475e5e0da0a11bdec897c451ae52746acb0d4ac4fa5238ef424213ab911124a8b672cd0a8fe5371c690ca8b978a55a7575b5854d8f4fe47cb8362921ae5c79e4119880b7ee1ca865ca3e8457f914217201beabecc62cfe370b591516a98cfa85d9e2644e92ee7a247bc33f288c340c499222ffa74c4e241f4b5eba5a82359d6a936a6fbac359edf4f189cbfa6b8e742f51daa42c536c6e52c01b3a503aa8a221e2c02b13456697260350a513b468f8f288bbba2750666bd3e4270bd9c6a9e6bcb22241f533399b4a7562d22cec47d5f6a93f2fe59113aaa5ce164a57a025bc3fe49363e9156b89c7da428e02bfb312ba50ba2eb2ded6bd866bf173cce4504fd2fa0e6afbbf218cc78c5b6294ae4bd30e653b04579ba1ef7f4d902e4751a01a33acaed27e663b4da1b87b1a5e23b33c53c41b9b0bf8234b66fce48ba53429793adbd81b5972abe2c1612778125cf8dd02c066466067c9e0431357f3422b3ae165f73c17f849a1d48a1535ad7bcaa6fdb66d557de2a3d2a84cc30af1f3a3dc55ac7d67afc12739fcb5364d17f42bbc22013ee47e233905312c7fc71f23ad56f3bc2a7b14e6e9e9ce25c47bcb5b5b34ebe441d8dc3a516465198a3ddeed9ccac53b24eba0b5b96303c65da404372c0dd8e14135e66f81a4241a450bab19c93b9522cb02f111f4f8be5f2032d09c15f97f76ff493a2e069a04d5e8095dcfc331e3b8a12575b11767cb4f55ace0d1fadd9d498bcfbbd676ef79cc9eea2e15ea144bbcc6d4774a077b9d1a502a66dde58703e7a6878bcf10b20fcb833693abc509b17a8f27b9948d9e2980a670d67d0071cc0d0bd059a4c754a11bb3c02a17fbb58d8bdf236717bd84c510ad1cf035e5e7f2a6c61922ae2b5c1c467816613e3bb57bf973f8076c7bc5e2ce16815b0acd6fb7fd45c689b17b38a8de074a2e48b5e635c08b732b9f9b937bc4dcebd43d7c664bba9ce9b11ed0b39d47f0626193a25ff0a79d2a57f0fefcfdcfce1b2551996f67bc6ded9f859f969dfe00a792ce79cecc2cfc2fc6521ae19538910597b96997113895d4242906c1b91599ccc8bb71dbcb043731d5bc75ebbd1dcd28e4ddf0150e1653a1d09eefe4c8b22c705fd2ee8d1238d4bd756dbbcd4819dbb93c4bda3465ee6b7fe1f69a9ac20d762a2de39fc72a92b29f17e5deb5fbf37746374864877236781695d712a6677c52c54dd37257c58550d7047c25bc0d45b47721913895eb7f73e05d07de7cc2cc4c02217de7ae2003fe3562243c812671e4821918dd21b37a25053c73d5a644d68e5765366943bb71c4227837a733a71040965574334183b6157624a774168663a3876a344f37271773f69d37634b2eb3775b760b2093172f344246616581866b4e27197e84ce4ce3da22e64843171f7007f84545406a17ed5982db4293db6146848268985911ed6ed7ab6446273d389b39f57571c52c44f3808bb7ef3b78b39b6138c08314f170465b5934d182877d25282425f65a4cc79661b54126045c6ed38d3fe4d08863187d661c6b075837d17c70e78b23553655c4e369940949123b33d7975d97447b166c4bf6306f95f869e77481f2616ec7ca6e12693516265df7723107c88a82ae43b8445058c589a5bb57012485b2ac77b8c560f4f66a67383ff5232b158458d45676e38982346b7f55a960a7376532be8711e37c321171e7ec5e58fb7812cb1d365c33781783977543b8253408237eb2ce40862e4c94dd56c70367a79969172d5ba55c8337c26a273066b2352b03676a74236712e332e81989b4029cf6bb7f25c167d56c74075043b30978f6475cd8cd54d40383ef93a66057a26527dc3fc82a8358f62d35d68da4328498287f96256a432c1d580e80a6783f122b84885f41d7956a94b75083836de4109019386cc13b58f3176b35c98381bc8ea7796e03dc89f8f94b45d49933d596386b38c65c30c89d4316819b39aa29360b8757cd51a8907168449967be4a490545345a57f46641359193683442d81980b80e30934d36f47640762a3a482a5c83d12286489717599b162493257570237888464b7343d576e8e59f64627a583a9cf85479e5cf5123459736418e499c6d847e1883808429c23604822d11fe32373148199f8ab88755148c7a428a4c66ac4a13871d278f79d67b5388077515306ec2557e61b659550e7847bdef44e8d83028829a05fd8b57b84934a898f68523731b99b2478e08511679e67248315b586a4206e039d6cf51a8b866a66945f75798a6ff24a4cf6295b63c29d799493e2238dd16848d8bb7ee36949a6fb8586043f253a9e045b32d86b4b29d780779598b50526e4f89265627887ea80c6127458b488b7a73d658c7779058a47877c69499925b49a94867a464663761691176651b4ba19e8ca8db2c834a3c0a3845659627d50b409890af1acb7859ba91472c5a79f93d73bb4de9975494a555732d3f595a3394b252528079776a80456c59d75b44d9fb6535c63ad87e8276d53984719f79638ea51a9c589f3b375a9f74ad8259253a96e757f3b8612884a574605e5683ed110100129f4010a000ff00c2000000000910f4000080ef0059d2318ac80e04385070e1458909022c78c012a3c884172a5c5871b126cd8a1b3a44e8f1d365409325466c0982b46ac39a2b52bc794216a9c894376adc595317adc564c4021b18f35951b283497af40a3078a05f974595055a54b72f44ab479a1d9ae4392156a85f9e6dba14dba559a165be8d6a263a2a53ba6bb2b5ea56ba6bd8b051e25dab06fee752ba7fcab59b673b20ecb281f2fd2cb77de0e3c96307362cf891fb58c395277468891166edca9b337efce93438e1d2ab439e3d6a353ae5daab53be7dea363ce9d2bb63d60d5c4befcddb478ee63a34d7f4de91c3b2fe2efb98f2d4edbd830f5e3cb93374e1d9af178e7d587677eac5bf37fedd9befb4fae8dfbb87be6e7a79f0fae1cf8fdedefcfaf7f9e9cbb74fcedebcfbf3f1f3dfcf25514a3d08e25e450ed4702182392860e2890e38e0648d0e4880a4851258c0e58a166841975a5d78655885498840d88626988228872aa892298c2eb8e26c8b2ac8d2ec8636d8832c873ae8932d8c3ef8e3609b3a09d3e09646198420933265f7954126057555585d39a0508a4d49322496562414159c5949d5669552a8d497915e5916214a529985aa936a95d62557627970989f52a957ab9772d9f59063769967ef917af9b520aa7a0a96ac958e0ab62c99821ac6e3ad8289976e9805e6e1e6801268b9a6a616680a67a1ae7a2a69a4ae9ac92aae96aa93d8855e14efa9978e5545a51da361655c1ea7beda3b6359bacaabadafbe78fb5371cafa745fa7caea3c5da8ca0b9ca3bbc20bac65b4ce4b2d25b9de6bcb27b3c67b6ca5b0ee7b4e64b1ea7b6e69bea6371ba49aae8acaeaa2f2cb3fa9a1f2db8fadb5febbaf6ebf2d5947679c01f76ed954d1475e126cc5474e5e51e1bb707d5ed9372e9b57dd3750ba511b2cf79b7c0f5cc7d3c5cd8708d4c5ce2c5618c60f2642b0790b7582b3ce7d670132c2135c72f7c849aca179cd09da926087f6fb443fb64f0d74feb84f2da473def23d0fa0c6057935fba8c2ab7deea5e66d0d24bc5f3b75b6d0633b2636be220b7ee9df5b7d56b8bb22adb57bd85bcd96fbdb678de5bbd14fefdd467edcda26b0d23c86784390de920cc9a4d81e8891249baa1ea022ea9a2eb123ed9a3ec024e01a4e4025e30a5e6126ef0a3ef66f4735b5e3359cb57c83f8932fc581f6993bfc2653c29dae96abc685dcb3356f2bbec2bde82ece737dea2b5c485bc98dbee62eea7dce91bd5acdc94cf65ab70c337fe7892f9db3432366c3dde0571d3e72df4b3d4e3af6e7af7e7bfce73ba1d2c5ad6d5cadadc627fa2ad7f3cf0fbdf8f71bdfb6acef0085f310eff89450440e003f795b50a69895f0c306abc08b0c90a2052810cb0eefc2811cd0660b388f3e0230348f1c11660f76b51fc4fe2443b12d5ca643e24cc4c0ba62a991a5de3363410a76278c4ad12c0f78ef534022e0588e3c02a1178874c22221798a4c62e66878619571344c22110cc57ca881943954256f5203d61776d5443d71d83164e2d81177ed3336611c8152f2ea19c8d6413eb11d869a632558e8924b3a060f8e6c680713e8a64f32b1304d74d31f15e8284832121196840b4a11e26c2e35ea2e76b28227680881994221fc66a970606a42a0c0b586c3946bcc0e82c6b9c7b572f68781052923353a465288c49c224561193924c649b0f5841c015c2578f241d1a0917d998b061779234b3295eb44bc679321321a9ba1121a9c118d5519a97810d53312915a66ac09b9d0986240d944dc0a9e0bc9319c6664a22cd43c182bd94ecec8433e9911b6e84e720aef892da13f90b458cdc29980935082241c72ddc311736db5b4e0965471f566681a7d2776a1b488c44696b243ffc491241e7dba57a75af035892c20a00500e3473f1201507dd3d0aa2dec464992254e3084f50d703792be233ea465c2db21a0e3c412b0508504d4f340a00920558a9e43b044c879493a2259d4a72755e72c9d29ffd53d328e95943f036835e8c57489c110e9bcc1465567685138ac80583538ab0850c4d8462ec7be1ca622651cca3f58c78710b538ad70fc5442bae29daaf9a121a871c84f0b508a9605a0bd6d0a2f570b275066548f0e8d504a0e4abb49cd3496702aa767b6b74bc9e5805b93ccda4205e9a33c32768977db27ea0b83871aefaa91d0b35056892af042d924f0ba9b74e8655d16fc4f822fc893092c656d4ab550de25f3bd9d59a0807bd851a2431abe8d1aed4fb886be3447b0082a311b0506dac4d013e4140d62196cbb25ceaaadeea99cdb5c5da6bb24d405a6a6fb2dca7d8bf206ac92e500a87b63015b93ac12f2b49011354979d5ad57c2143db303235a713a1da5d905e020dd196f7b7890e192143e9bc8afab614168d0aeb0cca79241ef531339156c4109bcbc44d2ac1c682a45cf095436d3eee25c25b0ed06c7232ee8813df7ce4dbe2047be090582a8d95715c83457c0430d506492358e34859f078d7a6c9e5c591b417e833601ace165aca72f27b51cc0d2f1b3bad202e500eff7944fdb28226ee982535c2061cbb2a1a440570d4603a879a16da17413425fd217987918b5fb80a19cd4905436b6b35298c96f685c483df9f420bd0982abfb67ac072639a621c37835a817174ada43dc707862838a5ae666e602bd7eb4ea4d179953719d4fa8cd73eab25ade5ef924b22d3b58864b3292ddb903b7d6865608264a7053cd57912e4dade15695ec4cc11bd7db24ba96239a171db299dd47ce3c2f1ead8b631362dd52963b67b9fa97a1a47b74aa853fc640d619992eb9cfb0350075354af4d70f941bd13108503d59a29633f2d1dafc09cba6fb32d48e0ad3bad11960598c0b2ed29bddcffef5694ef8a91c77aabf44dd9337a9fce752766aefcf6ac8a0710e2c801cda28ded317bf25bd08ccc5c6f12419f44ccac49174d4cacb329fc9eb2fa7fc0e1edaeaabb559054f168a3332a300502fd6962b1d8d24e204b75576e548447f50db2f4f5ba6e214e476ac8247661a0a1ac5dddd69c7fa8c5c312c6ae594da48286e1319847c5ac171dea7b10aa491e95c21664fa9374e8ed49e3816bda78d92c181421a078b5879c36209636f5024e82f1e5dbd78c24dc79202d204e773230da9214e4135012f1635095035079733e3d3c24ef1ed7049b762dcc651b3d579cac8aca3bdb9c79bde418da24e71449f3d055c883e54c58f6dbc94330a0c770515e579c03255120a8c244d5dcb2e95e34ede09f6be41a6ef012d19afe9f9af92932673ec01397bb7a9241b4a04a8a1aff2f1529fa879a7144bbf2099af47af358354203fa1d55376124a477451287325697b014564084760b57f77772016a02a7c864c0335b86e310459506f71f7985ec3577197797bc07085009505e5171a87325500cd7b26476cf34c58f4747ec7435747c70405f57501bb7366311cf7028e774a39c13089856a07529c7ed7228081d38aa71258500663017c65d5501585f20b16bc01d7595847ad1527387500850977fc5aa7847b917e62d58030a0358e257643475c5126c08401868145241287454a96f206a7485126b75595907801a87d58cb1978611a65595500b06266f85a488f7201350850ef7d7b65950607538fc7922978243838556f78c86396d06a01f78885556397db15165b5b47bc0e07435984601b48c68c916770288c7b68df7e85b51a964052874e7401c85425cf5991a86226a38283a419b83255983b22888275e78853480a3334676276867394b68ac0975058801026e85b97936428e97924341a87ec6c93868350893ac07588459a8ed7e72b48ad70e8ed80f33f7885108261a872505922020e8587463a988d4682d344535011d55988d8e01ac7df8064837e85017806487f20af7081401f187b80931f7e97991ec7da7e17c25501868f48d72ed76a7fd8416c65b00770277ce8a713e85b6103f277362019d8b989644287a05002781b5eef181d5e372041f7625ba6c01a87b97ee55c05565b55413413770e8a97de7d582016b7ad5e95a268856a0711a398f8eb1e390c7b75e65096131e83ba6341b759504c1705f496d7a51dd8d914d5f291344619371787346d8533a962876d5f24e08aa7c294199053523d72381116273b8c47b756d5f37ce5ee2937b00625e83289f352153223d70c7309ee7824d175374a5c898a61172889977d8965ce27577b84340d7cf89f3f18479dc4f09d34f78e52d53676c016b7de5752850885af75922431181d50295473689f3d91b758570d4f09911f58097093be2f09e83287d72005377b24eb8fc75c2eb8b96ee51167c7035cb9b33ca8a47972ac7245b381e890ef8501e29f87236c38885cd5839456c65da95b6ad44c03984d83728988853116a04254e8fc1b47ec7cd5811a980898255a5301b59ee25a8df9f11484f787a06011e8317cf3b694b21e8099271627b00bb8964341a86556c51305ef5ee4f585985e7e850884552b9c651671852f68934285293017d9f204a5939885950296639234950c2a562ce4556845b851e9d2ad525b35b7556847e42a414590a05c113ac657b7776bf8358e51bd5eb52238a9281885d36fd244ace6363d41b65f396c68850171a6924d172f7ff83e7c914e9d85726e46f78967824d26301a986722668d902236a5259562942b7601e20d85d1a2031f7b88422e831f764a0563394552a7ef028d70235d2878a68a337a9634652236a778a01b95bc01e9c0a5a4678d58920cf8038b9ac9a647459a1ac3a785c27fd41f8de91452501f49e9595d27e82d17f0a72a556b17801e240f9ce8122b69992d17f98ec50ba587c995c6552df75c97a6e88b01249834006571141d88e88a41b65458336341e45d8a1c9d79dc16e8f07f35788125350250cdaf20edabd7cda019767587a61c5aac053ab56924bd58478dab00250ff7adaddacda950e20bdaf202fa8c51415a96815a3096946e195983a6595be96378915baf56cf91d50e7b476b21e89f55512d9a6491a4340033f5398dd48e72d2c3ae85b37be627a781f58439558a5633a9175285ca241250556eef77d22701478d8a59242839762711b721e012f85623e8c7aea6f31678fc9222a980e763b0b2f01e116267491d56172b5a95d1b4dad917d90aa8779014982e7baaf799941f7b00891b682283036e770a0b6c8aa38522647ba739896bcd5792d17397c31f89da66f6504b49d85e371021f7db51f3dba226d34b49e85bfa0bacb7ab6b915417988dad70fb22679ea409702398c26428ab9507283863462398905b38ec26e4b0b226d8429923b51396adf75b5078422553d527d9b6b18ac65c26c83f8a529e23d341a045962a527e20849c26b6ab75ae817a489152a7937a4642078113d7e2b301868c5b367601d88aa8f52b68649b6864ab3671bfd5ec72ba29efa1aa0282b3f6179aa6823a11ae41016eb66f87113d379149339ae85b886a45c07d9de6f760035c065bec70c87b9b113d72f7a01c2b528649f31486368bea5515f9eeb5f96976e404bb11219e1190caa68446b2289e97322ac7cd50a8924689e9452a451428018b95f2b675e187c5347a67aa9054dea14175a0699722160225a94a4b717c799bb75bba5c2a26b597267db2ab95a5950652864282f7bcae19d474c48da96ae1617ae88bcb8cb5211e9347cc994865178b2a5d86382e55deb379c6556a9e41e80aa6885c88788f93f6f2b89b2e7785e6b21155611bf61571678bfa428b001b97823ba7253eb29b2b5f47601aa98350dba34f82a4b9eb48653aef53633cb7bd65e5cb27553f7ce1b57aeb2f8ab965c028931cad3de948715417a896a11e56145706f21ab4c03e7b325dbb40187be4635209ba09debba3c8c385394253f31529d4cef8bb232c607f4b27ac7992b7468f8401e798dbe6cfdb015e246b276cd9b35ad8ad326613985358daf5a0f51f8538f075c2b69d64ec86daa710a32bbea995a339c5604a5282e91225165ca81bee7014d02801ecb6117cb2c6891b7ad913d7649cc94199367984016f9d3116b7a1df9fa5d41df770631a46c7553326f955b556dc527be86cf8a8b5c08da446c938830fca68b757e4df4dea1e47ecfa23015dbbd4ea2da911d1a8f786a0b3aa019c95591e44ca4f5f332885ef29154427e0c04cec2289a93462f7a99b7ac6611e88bb49ba514c9a01f8a72d6d1551a5a7a7d0176a989d791b3a7489760b1e9468b67adb12287c5f59ec1957b90a985a289d188e7a6176c65355cc8321ac2aac13279515889ea91bc96a410a9257e1202b5b61027dcf85d573bc954e0799c4551f75d6683a5c2b51f7d18d6850ba8c99bbc0918abcc1ad7d1a1595e20ca34b2a98019f1a2f9544c83b96b01e195fc70a7e4468edb9765ea57d0a6311e1dd855a880d25532189c389dd4eccfaad72b9da6624d4b8cfcd7c2aadf4e7dee9f75a27a1601117a56c17cae11948f6ce6723b65c966928ad9f57223dabbc619595706817d5655925126848786a29ef614125942670145988be017cb1a0bc4d7ba3de6532392b8fb436672b620037571e63f8f07b374c284a408003f59675fd287b462fca386288faad0532217ad3647bea89c4d527cbb6b352d3dbb242963c2c49a18ad649bc077a1b7483e7a48750030b90113b4ea5418dab39705b412bb649d69c998592ad1e2bfcb75cc796505a2f4a942684eac3121eecd7025aadb12591d6cc902dced6014d586c05286843942631a57d2347ec2930fcaeb0162a7b6681d8dde1c1ad7cb88388cf9cf776dab47e31fa40e4c8da721f7596c9604554ae366fd2933e8ab515cfe95f7653abaef90f550b17b4fcd3a0d4e6a85ab46f31e08bbccf952e9b671507c5babeddddef80136a15a764aa7fa91e40b7479722aab6ad803efdac9661916eb7918f13abc229cb1b68a1e9d69972aaa61a8edbbcb1f0cd06e05f82f0527606d8016785cbf9ea5ccc25ad42dd61298a2d4c2e69d544cca3e6e54ab774cc276a60e1576493a63a8f277cbb882cbe95b375f9307c3deba2b6c5ca6662e3226c5aceeb692702a1a1eaa4ebac7b882d7d49f4493edf58015b8fbdc11125ec88dcd5b595029b1199af7b69d2832212f3e0ab99149a98a3eb07998d7dbc0ac85281095a8dd8f5b9016a01a7cdd6aba98d1aba59cd3b9c27deec91179ad728e601dfe81928c75bbfba7b7c3d1c7fb8cd5966cbf07e2517931e1a50b244a809b3875be0f152141aefcc85a3f5acde4104572d7517083467a0b376b581cf41dfe54ecf8dd18fd819d2fae92784e1e2c86e2415ad3d8b16e0af07706365f3e757cf4db17d9a6692824348e15698a097d3b986da8638b361a8bd5366504a41c8af07716781dce31e78a23545f6eb941e0849d9501cede59b3d4ff859cad488f6da7c1e975a97d49c37462a65a7550894da975a63069cef8740a81d7579fe435df576bed7bde26c158c5ea66a8aeb7b1981fd85aeb6a0f8ced7345258b5f920c0ecc483554160668ad35d354afac07a01386f76476f7f91aafda7a8a68a03f93bd35008138f173017b5250728748ffed952050bf5452cf6c7f845af235545baf57c1188cf6af545e4efca456a0e35cbfdda8798eac3d025a8a30641cc017cf4af6f7337a33b45c70ff7728ff7967a9d5ab501ce72eaf357bf4aa462965e356180776c66cf6c7e837b5ff7afa19a2b6893d356ef001d74911b56ac49513565031624280aaf834e3f0bf444057a49582e3817268a98f0f4114388051224280294e84385055e2c2822712bc18827911389b2916dc79f2d523c6993d02c448b0d5ea42a70d8adc2a44d46a4c9a0362d458bc68efc4a03b4eccc9b2796140982f824d6af317a1d3a039a66ddaa358ad41bb211e050bd35567d0bb0796b53a06f564d8b1656aedaa37baa9d99157c65d0a68b03355a2891f36e973fd236ab27b62147b0499ed519027fe5ef52b857173e89497951d4c96db60d9ad3b85160c097ae168a43f53845d67d5fd48d84d86be09c371fc679725733dfacbb272cecc2783fcac52327f6dc3adaadc6e283a3f59b5bb13e6de97513472f393079de9475af2efd92bfec6fdd9d03b4ab297fa0d2b5a183df9e7990f95ae4e3cf2044feeb8fa04fbe8b4c4da207e3eaa7a0ba8bcf20bade13cac043dafa3e0f340d835f29a8d2abbf6c20e6c3da2db3fc7bf091ccca8affe4c3e04b9caa30f283be0abb1da3ee2934d8cb9beb27c6031d02b9f4041d6dbdc67302b4bccafbee07cafe746d093815e34255a709eaceee24a04bf1d7b60f838052c1d09c6f66c91f8c8caba5e8fb5c6b20d2f33f8742efbca452d5a5ec44fc2543d24b42bca396fc7cc83c07142daec7aebb707943c2f4dfe5c0ecd4947ac3ccd3bc0446fc5c1f62b823ccfc673ce8eb7eefabc63522f4da458cd0745d01c47c223847cb85b9283973f1d6b8c805c474c3072b6d83b10b6c405c3c013511574449ab02985fd4a404d0ca0335c1315fc67a61bad0ec7d26d64629ac907a5cfc05fe69485dc30deaacdc051556c53b5c67b6c5a0d45e2bc54dfaeb43d259adfbc23b6feba11f5957b4b7bcb7acfc12f0508bb538bdb15fe3c35ade2be5c7f16b5d4c8059b033e5dcaf5ae44dab8f5c012594fd488dbd66bb5e3d2e39d36471dba17a453555d43e2e2bd4a7395c511b4471e48dab693befcc59b5f21659571d29773d6b742051b51504a478cb83c4ca4dd8399e053058afa5cf8d4a33bee31dd9ad74503bd6f6940b79cdf24d95dfb4d6cc74d866a82e93314763de06704445c4b0765713dc5a8d580946457f5e57c6cbffbf47ade4fbcb7395b45ceaaf3eb77b3a5515e935d3c1fd16b8efc6ab365a3d67ec0c7fe1c44fa47acf9bd489ff5cb3f4ac3ceddecd32f46dc556a39c4f67579c1540b71fbee7ebe876d29e6f35856c56a7cb6e3f4044b9c682d869df151f047729947475e56396c5184147d3feea79d6f6a5d65f877a93be3bb14cb53cd9616ec7bc267f54ae93ed676fd9f463dfeef2325241e23654e291bd2831521416ea95ebb3f02eefcd7d828d0ed614b0af812e6958f20650dee4fe2c903f0975ca5c1c90e6bba80e2aea4124ee909c386b2b99a5ac4c0c4b0ede25e1ba813c2e6dc3dec374a66320b859a97e8b1b50ac28c821069c253c124a9b78b7234b6dcf8e6504ad9582278cb0254f2c6014d398034513b1a5f8e56fcbff06bc55fc2a71be646d9aef4c03d5cf1a220036859a9719e4c76bbcf520588263b818fc23a2c9590a4d56896e89e6b4cb31c19a0e21a96558ca88ab22c020b37184cc9a52d238ced031765c9281d6c6d5a49e2eefea5bfac953d6766a305d8bce456bcec8d6156c1da938417e33291af072ff214db0bd6e7a44ed09f40ebd3278ef823455642b18544bfd9cefef6fb4635fca179837f960dc221a1a1d2f794c2e89427474b1932bc0b7583cc1101f75a90e92359644ac9df03a8aca076fb4b55db6f87fc498342a12aa442f370a405d8829edd53738e89b2d9d095fa2ee4e0328502afdcc207cead35da2352c2fbd23f972ac4e86fc13d63e21bf656202d3a83755ce4ec14aa58cfc179dbca612b8325b8161b4f2ebda486f105259e19564a4660db50fb0bd52df3e6bee83ba6afd3e3d6e838f1d5654e6b5a3de5ac3f0646b69a9a4d5262a9d1d06953549dc0dd580342592759dd4532bf4d8dfa81a5c07744c4c5fd0565c473e43919c4b64a5c4d2492375b1de79c4fc557ac7773971857a4bb4b317da98714dc8a68666ef9c1aa7d4b877417d70369e4c5e19e29a61520945d845e2bf8d5f677f3be9757744d1d850d8fa5156454f63a60458adea07e51819bb6985f397acfa16fda2a8d1d58a0b3e9537b7295ea20d6c956326abc054da3035a1ba8e03f89cc84b1a5db8239e724d7bee43391657da9d6a876d28d2d4fae2341e045696f99ed2dc4a98cd158ec192b5c3e929448c57a9e6cf950a51995dba58adb9e3f8863405911b5b41d05ae2d5af75c820e4a8d72cad005740e94d11faca42c11117887964b5a121d9bbc67aa2fd97b582238cf7fa5236ac034e94a1e0fa49d7cfe6059ba3daf0a9cc0938d7a59645bf542be339f632bfcac7767e523e17d47894b061d3dbb991e36e917c84c055175ecaa77c729f595c95d403361673e2f0661d152fc08a7876961c726481b554625a09b170c9ac6879eaa36901a5da7e9b8d5fcef4e6908000129f4010a000ff00c2000000000910f4000080ef0059d2318ac80e04385070e1458909022c78c012a3c884172a5c5871b126cd8a1b3a44e8f1d365409325466c0982b46ac39a2b52bc794216a9c894376adc595317adc564c4021b18f35951b283497af40a3078a05f974595055a54b72f44ab479a1d9ae4392156a85f9e6dba14dba559a165be8d6a263a2a53ba6bb2b5ea56ba6bd8b051e25dab06fee752ba7fcab59b673b20ecb281f2fd2cb77de0e3c96307362cf891fb58c395277468891166edca9b337efce93438e1d2ab439e3d6a353ae5daab53be7dea363ce9d2bb63d60d5c4befcddb478ee63a34d7f4de91c3b2fe2efb98f2d4edbd830f5e3cb93374e1d9af178e7d587677eac5bf37fedd9befb4fae8dfbb87be6e7a79f0fae1cf8fdedefcfaf7f9e9cbb74fcedebcfbf3f1f3dfcf25514a3d08e25e450ed4702182392860e2890e38e0648d0e4880a4851258c0e58a166841975a5d78655885498840d88626988228872aa892298c2eb8e26c8b2ac8d2ec8636d8832c873ae8932d8c3ef8e3609b3a09d3e09646198420933265f7954126057555585d39a0508a4d49322496562414159c5949d5669552a8d497915e5916214a529985aa936a95d62557627970989f52a957ab9772d9f59063769967ef917af9b520aa7a0a96ac958e0ab62c99821ac6e3ad8289976e9805e6e1e6801268b9a6a616680a67a1ae7a2a69a4ae9ac92aae96aa93d8855e14efa9978e5545a51da361655c1ea7beda3b6359bacaabadafbe78fb5371cafa745fa7caea3c5da8ca0b9ca3bbc20bac65b4ce4b2d25b9de6bcb27b3c67b6ca5b0ee7b4e64b1ea7b6e69bea6371ba49aae8acaeaa2f2cb3fa9a1f2db8fadb5febbaf6ebf2d5947679c01f76ed954d1475e126cc5474e5e51e1bb707d5ed9372e9b57dd3750ba511b2cf79b7c0f5cc7d3c5cd8708d4c5ce2c5618c60f2642b0790b7582b3ce7d670132c2135c72f7c849aca179cd09da926087f6fb443fb64f0d74feb84f2da473def23d0fa0c6057935fba8c2ab7deea5e66d0d24bc5f3b75b6d0633b2636be220b7ee9df5b7d56b8bb22adb57bd85bcd96fbdb678de5bbd14fefdd467edcda26b0d23c86784390de920cc9a4d81e8891249baa1ea022ea9a2eb123ed9a3ec024e01a4e4025e30a5e6126ef0a3ef66f4735b5e3359cb57c83f8932fc581f6993bfc2653c29dae96abc685dcb3356f2bbec2bde82ece737dea2b5c485bc98dbee62eea7dce91bd5acdc94cf65ab70c337fe7892f9db3432366c3dde0571d3e72df4b3d4e3af6e7af7e7bfce73ba1d2c5ad6d5cadadc627fa2ad7f3cf0fbdf8f71bdfb6acef0085f310eff89450440e003f795b50a69895f0c306abc08b0c90a2052810cb0eefc2811cd0660b388f3e0230348f1c11660f76b51fc4fe2443b12d5ca643e24cc4c0ba62a991a5de3363410a76278c4ad12c0f78ef534022e0588e3c02a1178874c22221798a4c62e66878619571344c22110cc57ca881943954256f5203d61776d5443d71d83164e2d81177ed3336611c8152f2ea19c8d6413eb11d869a632558e8924b3a060f8e6c680713e8a64f32b1304d74d31f15e8284832121196840b4a11e26c2e35ea2e76b28227680881994221fc66a970606a42a0c0b586c3946bcc0e82c6b9c7b572f68781052923353a465288c49c224561193924c649b0f5841c015c2578f241d1a0917d998b061779234b3295eb44bc679321321a9ba1121a9c118d5519a97810d53312915a66ac09b9d0986240d944dc0a9e0bc9319c6664a22cd43c182bd94ecec8433e9911b6e84e720aef892da13f90b458cdc29980935082241c72ddc311736db5b4e0965471f566681a7d2776a1b488c44696b243ffc491241e7dba57a75af035892c20a00500e3473f1201507dd3d0aa2dec464992254e3084f50d703792be233ea465c2db21a0e3c412b0508504d4f340a00920558a9e43b044c879493a2259d4a72755e72c9d29ffd53d328e95943f036835e8c57489c110e9bcc1465567685138ac80583538ab0850c4d8462ec7be1ca622651cca3f58c78710b538ad70fc5442bae29daaf9a121a871c84f0b508a9605a0bd6d0a2f570b275066548f0e8d504a0e4abb49cd3496702aa767b6b74bc9e5805b93ccda4205e9a33c32768977db27ea0b83871aefaa91d0b35056892af042d924f0ba9b74e8655d16fc4f822fc893092c656d4ab550de25f3bd9d59a0807bd851a2431abe8d1aed4fb886be3447b0082a311b0506dac4d013e4140d62196cbb25ceaaadeea99cdb5c5da6bb24d405a6a6fb2dca7d8bf206ac92e500a87b63015b93ac12f2b49011354979d5ad57c2143db303235a713a1da5d905e020dd196f7b7890e192143e9bc8afab614168d0aeb0cca79241ef531339156c4109bcbc44d2ac1c682a45cf095436d3eee25c25b0ed06c7232ee8813df7ce4dbe2047be090582a8d95715c83457c0430d506492358e34859f078d7a6c9e5c591b417e833601ace165aca72f27b51cc0d2f1b3bad202e500eff7944fdb28226ee982535c2061cbb2a1a440570d4603a879a16da17413425fd217987918b5fb80a19cd4905436b6b35298c96f685c483df9f420bd0982abfb67ac072639a621c37835a817174ada43dc707862838a5ae666e602bd7eb4ea4d179953719d4fa8cd73eab25ade5ef924b22d3b58864b3292ddb903b7d6865608264a7053cd57912e4dade15695ec4cc11bd7db24ba96239a171db299dd47ce3c2f1ead8b631362dd52963b67b9fa97a1a47b74aa853fc640d619992eb9cfb0350075354af4d70f941bd13108503d59a29633f2d1dafc09cba6fb32d48e0ad3bad11960598c0b2ed29bddcffef5694ef8a91c77aabf44dd9337a9fce752766aefcf6ac8a0710e2c801cda28ded317bf25bd08ccc5c6f12419f44ccac49174d4cacb329fc9eb2fa7fc0e1edaeaabb559054f168a3332a300502fd6962b1d8d24e204b75576e548447f50db2f4f5ba6e214e476ac8247661a0a1ac5dddd69c7fa8c5c312c6ae594da48286e1319847c5ac171dea7b10aa491e95c21664fa9374e8ed49e3816bda78d92c181421a078b5879c36209636f5024e82f1e5dbd78c24dc79202d204e773230da9214e4135012f1635095035079733e3d3c24ef1ed7049b762dcc651b3d579cac8aca3bdb9c79bde418da24e71449f3d055c883e54c58f6dbc94330a0c770515e579c03255120a8c244d5dcb2e95e34ede09f6be41a6ef012d19afe9f9af92932673ec01397bb7a9241b4a04a8a1aff2f1529fa879a7144bbf2099af47af358354203fa1d55376124a477451287325697b014564084760b57f77772016a02a7c864c0335b86e310459506f71f7985ec3577197797bc07085009505e5171a87325500cd7b26476cf34c58f4747ec7435747c70405f57501bb7366311cf7028e774a39c13089856a07529c7ed7228081d38aa71258500663017c65d5501585f20b16bc01d7595847ad1527387500850977fc5aa7847b917e62d58030a0358e257643475c5126c08401868145241287454a96f206a7485126b75595907801a87d58cb1978611a65595500b06266f85a488f7201350850ef7d7b65950607538fc7922978243838556f78c86396d06a01f78885556397db15165b5b47bc0e07435984601b48c68c916770288c7b68df7e85b51a964052874e7401c85425cf5991a86226a38283a419b83255983b22888275e78853480a3334676276867394b68ac0975058801026e85b97936428e97924341a87ec6c93868350893ac07588459a8ed7e72b48ad70e8ed80f33f7885108261a872505922020e8587463a988d4682d344535011d55988d8e01ac7df8064837e85017806487f20af7081401f187b80931f7e97991ec7da7e17c25501868f48d72ed76a7fd8416c65b00770277ce8a713e85b6103f277362019d8b989644287a05002781b5eef181d5e372041f7625ba6c01a87b97ee55c05565b55413413770e8a97de7d582016b7ad5e95a268856a0711a398f8eb1e390c7b75e65096131e83ba6341b759504c1705f496d7a51dd8d914d5f291344619371787346d8533a962876d5f24e08aa7c294199053523d72381116273b8c47b756d5f37ce5ee2937b00625e83289f352153223d70c7309ee7824d175374a5c898a61172889977d8965ce27577b84340d7cf89f3f18479dc4f09d34f78e52d53676c016b7de5752850885af75922431181d50295473689f3d91b758570d4f09911f58097093be2f09e83287d72005377b24eb8fc75c2eb8b96ee51167c7035cb9b33ca8a47972ac7245b381e890ef8501e29f87236c38885cd5839456c65da95b6ad44c03984d83728988853116a04254e8fc1b47ec7cd5811a980898255a5301b59ee25a8df9f11484f787a06011e8317cf3b694b21e8099271627b00bb8964341a86556c51305ef5ee4f585985e7e850884552b9c651671852f68934285293017d9f204a5939885950296639234950c2a562ce4556845b851e9d2ad525b35b7556847e42a414590a05c113ac657b7776bf8358e51bd5eb52238a9281885d36fd244ace6363d41b65f396c68850171a6924d172f7ff83e7c914e9d85726e46f78967824d26301a986722668d902236a5259562942b7601e20d85d1a2031f7b88422e831f764a0563394552a7ef028d70235d2878a68a337a9634652236a778a01b95bc01e9c0a5a4678d58920cf8038b9ac9a647459a1ac3a785c27fd41f8de91452501f49e9595d27e82d17f0a72a556b17801e240f9ce8122b69992d17f98ec50ba587c995c6552df75c97a6e88b01249834006571141d88e88a41b65458336341e45d8a1c9d79dc16e8f07f35788125350250cdaf20edabd7cda019767587a61c5aac053ab56924bd58478dab00250ff7adaddacda950e20bdaf202fa8c51415a96815a3096946e195983a6595be96378915baf56cf91d50e7b476b21e89f55512d9a6491a4340033f5398dd48e72d2c3ae85b37be627a781f58439558a5633a9175285ca241250556eef77d22701478d8a59242839762711b721e012f85623e8c7aea6f31678fc9222a980e763b0b2f01e116267491d56172b5a95d1b4dad917d90aa8779014982e7baaf799941f7b00891b682283036e770a0b6c8aa38522647ba739896bcd5792d17397c31f89da66f6504b49d85e371021f7db51f3dba226d34b49e85bfa0bacb7ab6b915417988dad70fb22679ea409702398c26428ab9507283863462398905b38ec26e4b0b226d8429923b51396adf75b5078422553d527d9b6b18ac65c26c83f8a529e23d341a045962a527e20849c26b6ab75ae817a489152a7937a4642078113d7e2b301868c5b367601d88aa8f52b68649b6864ab3671bfd5ec72ba29efa1aa0282b3f6179aa6823a11ae41016eb66f87113d379149339ae85b886a45c07d9de6f760035c065bec70c87b9b113d72f7a01c2b528649f31486368bea5515f9eeb5f96976e404bb11219e1190caa68446b2289e97322ac7cd50a8924689e9452a451428018b95f2b675e187c5347a67aa9054dea14175a0699722160225a94a4b717c799bb75bba5c2a26b597267db2ab95a5950652864282f7bcae19d474c48da96ae1617ae88bcb8cb5211e9347cc994865178b2a5d86382e55deb379c6556a9e41e80aa6885c88788f93f6f2b89b2e7785e6b21155611bf61571678bfa428b001b97823ba7253eb29b2b5f47601aa98350dba34f82a4b9eb48653aef53633cb7bd65e5cb27553f7ce1b57aeb2f8ab965c028931cad3de948715417a896a11e56145706f21ab4c03e7b325dbb40187be4635209ba09debba3c8c385394253f31529d4cef8bb232c607f4b27ac7992b7468f8401e798dbe6cfdb015e246b276cd9b35ad8ad326613985358daf5a0f51f8538f075c2b69d64ec86daa710a32bbea995a339c5604a5282e91225165ca81bee7014d02801ecb6117cb2c6891b7ad913d7649cc94199367984016f9d3116b7a1df9fa5d41df770631a46c7553326f955b556dc527be86cf8a8b5c08da446c938830fca68b757e4df4dea1e47ecfa23015dbbd4ea2da911d1a8f786a0b3aa019c95591e44ca4f5f332885ef29154427e0c04cec2289a93462f7a99b7ac6611e88bb49ba514c9a01f8a72d6d1551a5a7a7d0176a989d791b3a7489760b1e9468b67adb12287c5f59ec1957b90a985a289d188e7a6176c65355cc8321ac2aac13279515889ea91bc96a410a9257e1202b5b61027dcf85d573bc954e0799c4551f75d6683a5c2b51f7d18d6850ba8c99bbc0918abcc1ad7d1a1595e20ca34b2a98019f1a2f9544c83b96b01e195fc70a7e4468edb9765ea57d0a6311e1dd855a880d25532189c389dd4eccfaad72b9da6624d4b8cfcd7c2aadf4e7dee9f75a27a1601117a56c17cae11948f6ce6723b65c966928ad9f57223dabbc619595706817d5655925126848786a29ef614125942670145988be017cb1a0bc4d7ba3de6532392b8fb436672b620037571e63f8f07b374c284a408003f59675fd287b462fca386288faad0532217ad3647bea89c4d527cbb6b352d3dbb242963c2c49a18ad649bc077a1b7483e7a48750030b90113b4ea5418dab39705b412bb649d69c998592ad1e2bfcb75cc796505a2f4a942684eac3121eecd7025aadb12591d6cc902dced6014d586c05286843942631a57d2347ec2930fcaeb0162a7b6681d8dde1c1ad7cb88388cf9cf776dab47e31fa40e4c8da721f7596c9604554ae366fd2933e8ab515cfe95f7653abaef90f550b17b4fcd3a0d4e6a85ab46f31e08bbccf952e9b671507c5babeddddef80136a15a764aa7fa91e40b7479722aab6ad803efdac9661916eb7918f13abc229cb1b68a1e9d69972aaa61a8edbbcb1f0cd06e05f82f0527606d8016785cbf9ea5ccc25ad42dd61298a2d4c2e69d544cca3e6e54ab774cc276a60e1576493a63a8f277cbb882cbe95b375f9307c3deba2b6c5ca6662e3226c5aceeb692702a1a1eaa4ebac7b882d7d49f4493edf58015b8fbdc11125ec88dcd5b595029b1199af7b69d2832212f3e0ab99149a98a3eb07998d7dbc0ac85281095a8dd8f5b9016a01a7cdd6aba98d1aba59cd3b9c27deec91179ad728e601dfe81928c75bbfba7b7c3d1c7fb8cd5966cbf07e2517931e1a50b244a809b3875be0f152141aefcc85a3f5acde4104572d7517083467a0b376b581cf41dfe54ecf8dd18fd819d2fae92784e1e2c86e2415ad3d8b16e0af07706365f3e757cf4db17d9a6692824348e15698a097d3b986da8638b361a8bd5366504a41c8af07716781dce31e78a23545f6eb941e0849d9501cede59b3d4ff859cad488f6da7c1e975a97d49c37462a65a7550894da975a63069cef8740a81d7579fe435df576bed7bde26c158c5ea66a8aeb7b1981fd85aeb6a0f8ced7345258b5f920c0ecc483554160668ad35d354afac07a01386f76476f7f91aafda7a8a68a03f93bd35008138f173017b5250728748ffed952050bf5452cf6c7f845af235545baf57c1188cf6af545e4efca456a0e35cbfdda8798eac3d025a8a30641cc017cf4af6f7337a33b45c70ff7728ff7967a9d5ab501ce72eaf357bf4aa462965e356180776c66cf6c7e837b5ff7afa19a2b6893d356ef001d74911b56ac49513565031624280aaf834e3f0bf444057a49582e3817268a98f0f4114388051224280294e84385055e2c2822712bc18827911389b2916dc79f2d523c6993d02c448b0d5ea42a70d8adc2a44d46a4c9a0362d458bc68efc4a03b4eccc9b2796140982f824d6af317a1d3a039a66ddaa358ad41bb211e050bd35567d0bb0796b53a06f564d8b1656aedaa37baa9d99157c65d0a68b03355a2891f36e973fd236ab27b62147b0499ed519027fe5ef52b857173e89497951d4c96db60d9ad3b85160c097ae168a43f53845d67d5fd48d84d86be09c371fc679725733dfacbb272cecc2783fcac52327f6dc3adaadc6e283a3f59b5bb13e6de97513472f393079de9475af2efd92bfec6fdd9d03b4ab297fa0d2b5a183df9e7990f95ae4e3cf2044feeb8fa04fbe8b4c4da207e3eaa7a0ba8bcf20bade13cac043dafa3e0f340d835f29a8d2abbf6c20e6c3da2db3fc7bf091ccca8affe4c3e04b9caa30f283be0abb1da3ee2934d8cb9beb27c6031d02b9f4041d6dbdc67302b4bccafbee07cafe746d093815e34255a709eaceee24a04bf1d7b60f838052c1d09c6f66c91f8c8caba5e8fb5c6b20d2f33f8742efbca452d5a5ec44fc2543d24b42bca396fc7cc83c07142daec7aebb707943c2f4dfe5c0ecd4947ac3ccd3bc0446fc5c1f62b823ccfc673ce8eb7eefabc63522f4da458cd0745d01c47c223847cb85b9283973f1d6b8c805c474c3072b6d83b10b6c405c3c013511574449ab02985fd4a404d0ca0335c1315fc67a61bad0ec7d26d64629ac907a5cfc05fe69485dc30deaacdc051556c53b5c67b6c5a0d45e2bc54dfaeb43d259adfbc23b6feba11f5957b4b7bcb7acfc12f0508bb538bdb15fe3c35ade2be5c7f16b5d4c8059b033e5dcaf5ae44dab8f5c012594fd488dbd66bb5e3d2e39d36471dba17a453555d43e2e2bd4a7395c511b4471e48dab693befcc59b5f21659571d29773d6b742051b51504a478cb83c4ca4dd8399e053058afa5cf8d4a33bee31dd9ad74503bd6f6940b79cdf24d95dfb4d6cc74d866a82e93314763de06704445c4b0765713dc5a8d580946457f5e57c6cbffbf47ade4fbcb7395b45ceaaf3eb77b3a5515e935d3c1fd16b8efc6ab365a3d67ec0c7fe1c44fa47acf9bd489ff5cb3f4ac3ceddecd32f46dc556a39c4f67579c1540b71fbee7ebe876d29e6f35856c56a7cb6e3f4044b9c682d869df151f047729947475e56396c5184147d3feea79d6f6a5d65f877a93be3bb14cb53cd9616ec7bc267f54ae93ed676fd9f463dfeef2325241e23654e291bd2831521416ea95ebb3f02eefcd7d828d0ed614b0af812e6958f20650dee4fe2c903f0975ca5c1c90e6bba80e2aea4124ee909c386b2b99a5ac4c0c4b0ede25e1ba813c2e6dc3dec374a66320b859a97e8b1b50ac28c821069c253c124a9b78b7234b6dcf8e6504ad9582278cb0254f2c6014d398034513b1a5f8e56fcbff06bc55fc2a71be646d9aef4c03d5cf1a220036859a9719e4c76bbcf520588263b818fc23a2c9590a4d56896e89e6b4cb31c19a0e21a96558ca88ab22c020b37184cc9a52d238ced031765c9281d6c6d5a49e2eefea5bfac953d6766a305d8bce456bcec8d6156c1da938417e33291af072ff214db0bd6e7a44ed09f40ebd3278ef823455642b18544bfd9cefef6fb4635fca179837f960dc221a1a1d2f794c2e89427474b1932bc0b7583cc1101f75a90e92359644ac9df03a8aca076fb4b55db6f87fc498342a12aa442f370a405d8829edd53738e89b2d9d095fa2ee4e0328502afdcc207cead35da2352c2fbd23f972ac4e86fc13d63e21bf656202d3a83755ce4ec14aa58cfc179dbca612b8325b8161b4f2ebda486f105259e19564a4660db50fb0bd52df3e6bee83ba6afd3e3d6e838f1d5654e6b5a3de5ac3f0646b69a9a4d5262a9d1d06953549dc0dd580342592759dd4532bf4d8dfa81a5c07744c4c5fd0565c473e43919c4b64a5c4d2492375b1de79c4fc557ac7773971857a4bb4b317da98714dc8a68666ef9c1aa7d4b877417d70369e4c5e19e29a61520945d845e2bf8d5f677f3be9757744d1d850d8fa5156454f63a60458adea07e51819bb6985f397acfa16fda2a8d1d58a0b3e9537b7295ea20d6c956326abc054da3035a1ba8e03f89cc84b1a5db8239e724d7bee43391657da9d6a876d28d2d4fae2341e045696f99ed2dc4a98cd158ec192b5c3e929448c57a9e6cf950a51995dba58adb9e3f8863405911b5b41d05ae2d5af75c820e4a8d72cad005740e94d11faca42c11117887964b5a121d9bbc67aa2fd97b582238cf7fa5236ac034e94a1e0fa49d7cfe6059ba3daf0a9cc0938d7a59645bf542be339f632bfcac7767e523e17d47894b061d3dbb991e36e917c84c055175ecaa77c729f595c95d403361673e2f0661d152fc08a7876961c726481b554625a09b170c9ac6879eaa36901a5da7e9b8d5fcef4e6908000129f4010a000ff00c2000000000910f4000080ef0059d2318ac80e04385070e1458909022c78c012a3c884172a5c5871b126cd8a1b3a44e8f1d365409325466c0982b46ac39a2b52bc794216a9c894376adc595317adc564c4021b18f35951b283497af40a3078a05f974595055a54b72f44ab479a1d9ae4392156a85f9e6dba14dba559a165be8d6a263a2a53ba6bb2b5ea56ba6bd8b051e25dab06fee752ba7fcab59b673b20ecb281f2fd2cb77de0e3c96307362cf891fb58c395277468891166edca9b337efce93438e1d2ab439e3d6a353ae5daab53be7dea363ce9d2bb63d60d5c4befcddb478ee63a34d7f4de91c3b2fe2efb98f2d4edbd830f5e3cb93374e1d9af178e7d587677eac5bf37fedd9befb4fae8dfbb87be6e7a79f0fae1cf8fdedefcfaf7f9e9cbb74fcedebcfbf3f1f3dfcf25514a3d08e25e450ed4702182392860e2890e38e0648d0e4880a4851258c0e58a166841975a5d78655885498840d88626988228872aa892298c2eb8e26c8b2ac8d2ec8636d8832c873ae8932d8c3ef8e3609b3a09d3e09646198420933265f7954126057555585d39a0508a4d49322496562414159c5949d5669552a8d497915e5916214a529985aa936a95d62557627970989f52a957ab9772d9f59063769967ef917af9b520aa7a0a96ac958e0ab62c99821ac6e3ad8289976e9805e6e1e6801268b9a6a616680a67a1ae7a2a69a4ae9ac92aae96aa93d8855e14efa9978e5545a51da361655c1ea7beda3b6359bacaabadafbe78fb5371cafa745fa7caea3c5da8ca0b9ca3bbc20bac65b4ce4b2d25b9de6bcb27b3c67b6ca5b0ee7b4e64b1ea7b6e69bea6371ba49aae8acaeaa2f2cb3fa9a1f2db8fadb5febbaf6ebf2d5947679c01f76ed954d1475e126cc5474e5e51e1bb707d5ed9372e9b57dd3750ba511b2cf79b7c0f5cc7d3c5cd8708d4c5ce2c5618c60f2642b0790b7582b3ce7d670132c2135c72f7c849aca179cd09da926087f6fb443fb64f0d74feb84f2da473def23d0fa0c6057935fba8c2ab7deea5e66d0d24bc5f3b75b6d0633b2636be220b7ee9df5b7d56b8bb22adb57bd85bcd96fbdb678de5bbd14fefdd467edcda26b0d23c86784390de920cc9a4d81e8891249baa1ea022ea9a2eb123ed9a3ec024e01a4e4025e30a5e6126ef0a3ef66f4735b5e3359cb57c83f8932fc581f6993bfc2653c29dae96abc685dcb3356f2bbec2bde82ece737dea2b5c485bc98dbee62eea7dce91bd5acdc94cf65ab70c337fe7892f9db3432366c3dde0571d3e72df4b3d4e3af6e7af7e7bfce73ba1d2c5ad6d5cadadc627fa2ad7f3cf0fbdf8f71bdfb6acef0085f310eff89450440e003f795b50a69895f0c306abc08b0c90a2052810cb0eefc2811cd0660b388f3e0230348f1c11660f76b51fc4fe2443b12d5ca643e24cc4c0ba62a991a5de3363410a76278c4ad12c0f78ef534022e0588e3c02a1178874c22221798a4c62e66878619571344c22110cc57ca881943954256f5203d61776d5443d71d83164e2d81177ed3336611c8152f2ea19c8d6413eb11d869a632558e8924b3a060f8e6c680713e8a64f32b1304d74d31f15e8284832121196840b4a11e26c2e35ea2e76b28227680881994221fc66a970606a42a0c0b586c3946bcc0e82c6b9c7b572f68781052923353a465288c49c224561193924c649b0f5841c015c2578f241d1a0917d998b061779234b3295eb44bc679321321a9ba1121a9c118d5519a97810d53312915a66ac09b9d0986240d944dc0a9e0bc9319c6664a22cd43c182bd94ecec8433e9911b6e84e720aef892da13f90b458cdc29980935082241c72ddc311736db5b4e0965471f566681a7d2776a1b488c44696b243ffc491241e7dba57a75af035892c20a00500e3473f1201507dd3d0aa2dec464992254e3084f50d703792be233ea465c2db21a0e3c412b0508504d4f340a00920558a9e43b044c879493a2259d4a72755e72c9d29ffd53d328e95943f036835e8c57489c110e9bcc1465567685138ac80583538ab0850c4d8462ec7be1ca622651cca3f58c78710b538ad70fc5442bae29daaf9a121a871c84f0b508a9605a0bd6d0a2f570b275066548f0e8d504a0e4abb49cd3496702aa767b6b74bc9e5805b93ccda4205e9a33c32768977db27ea0b83871aefaa91d0b35056892af042d924f0ba9b74e8655d16fc4f822fc893092c656d4ab550de25f3bd9d59a0807bd851a2431abe8d1aed4fb886be3447b0082a311b0506dac4d013e4140d62196cbb25ceaaadeea99cdb5c5da6bb24d405a6a6fb2dca7d8bf206ac92e500a87b63015b93ac12f2b49011354979d5ad57c2143db303235a713a1da5d905e020dd196f7b7890e192143e9bc8afab614168d0aeb0cca79241ef531339156c4109bcbc44d2ac1c682a45cf095436d3eee25c25b0ed06c7232ee8813df7ce4dbe2047be090582a8d95715c83457c0430d506492358e34859f078d7a6c9e5c591b417e833601ace165aca72f27b51cc0d2f1b3bad202e500eff7944fdb28226ee982535c2061cbb2a1a440570d4603a879a16da17413425fd217987918b5fb80a19cd4905436b6b35298c96f685c483df9f420bd0982abfb67ac072639a621c37835a817174ada43dc707862838a5ae666e602bd7eb4ea4d179953719d4fa8cd73eab25ade5ef924b22d3b58864b3292ddb903b7d6865608264a7053cd57912e4dade15695ec4cc11bd7db24ba96239a171db299dd47ce3c2f1ead8b631362dd52963b67b9fa97a1a47b74aa853fc640d619992eb9cfb0350075354af4d70f941bd13108503d59a29633f2d1dafc09cba6fb32d48e0ad3bad11960598c0b2ed29bddcffef5694ef8a91c77aabf44dd9337a9fce752766aefcf6ac8a0710e2c801cda28ded317bf25bd08ccc5c6f12419f44ccac49174d4cacb329fc9eb2fa7fc0e1edaeaabb559054f168a3332a300502fd6962b1d8d24e204b75576e548447f50db2f4f5ba6e214e476ac8247661a0a1ac5dddd69c7fa8c5c312c6ae594da48286e1319847c5ac171dea7b10aa491e95c21664fa9374e8ed49e3816bda78d92c181421a078b5879c36209636f5024e82f1e5dbd78c24dc79202d204e773230da9214e4135012f1635095035079733e3d3c24ef1ed7049b762dcc651b3d579cac8aca3bdb9c79bde418da24e71449f3d055c883e54c58f6dbc94330a0c770515e579c03255120a8c244d5dcb2e95e34ede09f6be41a6ef012d19afe9f9af92932673ec01397bb7a9241b4a04a8a1aff2f1529fa879a7144bbf2099af47af358354203fa1d55376124a477451287325697b014564084760b57f77772016a02a7c864c0335b86e310459506f71f7985ec3577197797bc07085009505e5171a87325500cd7b26476cf34c58f4747ec7435747c70405f57501bb7366311cf7028e774a39c13089856a07529c7ed7228081d38aa71258500663017c65d5501585f20b16bc01d7595847ad1527387500850977fc5aa7847b917e62d58030a0358e257643475c5126c08401868145241287454a96f206a7485126b75595907801a87d58cb1978611a65595500b06266f85a488f7201350850ef7d7b65950607538fc7922978243838556f78c86396d06a01f78885556397db15165b5b47bc0e07435984601b48c68c916770288c7b68df7e85b51a964052874e7401c85425cf5991a86226a38283a419b83255983b22888275e78853480a3334676276867394b68ac0975058801026e85b97936428e97924341a87ec6c93868350893ac07588459a8ed7e72b48ad70e8ed80f33f7885108261a872505922020e8587463a988d4682d344535011d55988d8e01ac7df8064837e85017806487f20af7081401f187b80931f7e97991ec7da7e17c25501868f48d72ed76a7fd8416c65b00770277ce8a713e85b6103f277362019d8b989644287a05002781b5eef181d5e372041f7625ba6c01a87b97ee55c05565b55413413770e8a97de7d582016b7ad5e95a268856a0711a398f8eb1e390c7b75e65096131e83ba6341b759504c1705f496d7a51dd8d914d5f291344619371787346d8533a962876d5f24e08aa7c294199053523d72381116273b8c47b756d5f37ce5ee2937b00625e83289f352153223d70c7309ee7824d175374a5c898a61172889977d8965ce27577b84340d7cf89f3f18479dc4f09d34f78e52d53676c016b7de5752850885af75922431181d50295473689f3d91b758570d4f09911f58097093be2f09e83287d72005377b24eb8fc75c2eb8b96ee51167c7035cb9b33ca8a47972ac7245b381e890ef8501e29f87236c38885cd5839456c65da95b6ad44c03984d83728988853116a04254e8fc1b47ec7cd5811a980898255a5301b59ee25a8df9f11484f787a06011e8317cf3b694b21e8099271627b00bb8964341a86556c51305ef5ee4f585985e7e850884552b9c651671852f68934285293017d9f204a5939885950296639234950c2a562ce4556845b851e9d2ad525b35b7556847e42a414590a05c113ac657b7776bf8358e51bd5eb52238a9281885d36fd244ace6363d41b65f396c68850171a6924d172f7ff83e7c914e9d85726e46f78967824d26301a986722668d902236a5259562942b7601e20d85d1a2031f7b88422e831f764a0563394552a7ef028d70235d2878a68a337a9634652236a778a01b95bc01e9c0a5a4678d58920cf8038b9ac9a647459a1ac3a785c27fd41f8de91452501f49e9595d27e82d17f0a72a556b17801e240f9ce8122b69992d17f98ec50ba587c995c6552df75c97a6e88b01249834006571141d88e88a41b65458336341e45d8a1c9d79dc16e8f07f35788125350250cdaf20edabd7cda019767587a61c5aac053ab56924bd58478dab00250ff7adaddacda950e20bdaf202fa8c51415a96815a3096946e195983a6595be96378915baf56cf91d50e7b476b21e89f55512d9a6491a4340033f5398dd48e72d2c3ae85b37be627a781f58439558a5633a9175285ca241250556eef77d22701478d8a59242839762711b721e012f85623e8c7aea6f31678fc9222a980e763b0b2f01e116267491d56172b5a95d1b4dad917d90aa8779014982e7baaf799941f7b00891b682283036e770a0b6c8aa38522647ba739896bcd5792d17397c31f89da66f6504b49d85e371021f7db51f3dba226d34b49e85bfa0bacb7ab6b915417988dad70fb22679ea409702398c26428ab9507283863462398905b38ec26e4b0b226d8429923b51396adf75b5078422553d527d9b6b18ac65c26c83f8a529e23d341a045962a527e20849c26b6ab75ae817a489152a7937a4642078113d7e2b301868c5b367601d88aa8f52b68649b6864ab3671bfd5ec72ba29efa1aa0282b3f6179aa6823a11ae41016eb66f87113d379149339ae85b886a45c07d9de6f760035c065bec70c87b9b113d72f7a01c2b528649f31486368bea5515f9eeb5f96976e404bb11219e1190caa68446b2289e97322ac7cd50a8924689e9452a451428018b95f2b675e187c5347a67aa9054dea14175a0699722160225a94a4b717c799bb75bba5c2a26b597267db2ab95a5950652864282f7bcae19d474c48da96ae1617ae88bcb8cb5211e9347cc994865178b2a5d86382e55deb379c6556a9e41e80aa6885c88788f93f6f2b89b2e7785e6b21155611bf61571678bfa428b001b97823ba7253eb29b2b5f47601aa98350dba34f82a4b9eb48653aef53633cb7bd65e5cb27553f7ce1b57aeb2f8ab965c028931cad3de948715417a896a11e56145706f21ab4c03e7b325dbb40187be4635209ba09debba3c8c385394253f31529d4cef8bb232c607f4b27ac7992b7468f8401e798dbe6cfdb015e246b276cd9b35ad8ad326613985358daf5a0f51f8538f075c2b69d64ec86daa710a32bbea995a339c5604a5282e91225165ca81bee7014d02801ecb6117cb2c6891b7ad913d7649cc94199367984016f9d3116b7a1df9fa5d41df770631a46c7553326f955b556dc527be86cf8a8b5c08da446c938830fca68b757e4df4dea1e47ecfa23015dbbd4ea2da911d1a8f786a0b3aa019c95591e44ca4f5f332885ef29154427e0c04cec2289a93462f7a99b7ac6611e88bb49ba514c9a01f8a72d6d1551a5a7a7d0176a989d791b3a7489760b1e9468b67adb12287c5f59ec1957b90a985a289d188e7a6176c65355cc8321ac2aac13279515889ea91bc96a410a9257e1202b5b61027dcf85d573bc954e0799c4551f75d6683a5c2b51f7d18d6850ba8c99bbc0918abcc1ad7d1a1595e20ca34b2a98019f1a2f9544c83b96b01e195fc70a7e4468edb9765ea57d0a6311e1dd855a880d25532189c389dd4eccfaad72b9da6624d4b8cfcd7c2aadf4e7dee9f75a27a1601117a56c17cae11948f6ce6723b65c966928ad9f57223dabbc619595706817d5655925126848786a29ef614125942670145988be017cb1a0bc4d7ba3de6532392b8fb436672b620037571e63f8f07b374c284a408003f59675fd287b462fca386288faad0532217ad3647bea89c4d527cbb6b352d3dbb242963c2c49a18ad649bc077a1b7483e7a48750030b90113b4ea5418dab39705b412bb649d69c998592ad1e2bfcb75cc796505a2f4a942684eac3121eecd7025aadb12591d6cc902dced6014d586c05286843942631a57d2347ec2930fcaeb0162a7b6681d8dde1c1ad7cb88388cf9cf776dab47e31fa40e4c8da721f7596c9604554ae366fd2933e8ab515cfe95f7653abaef90f550b17b4fcd3a0d4e6a85ab46f31e08bbccf952e9b671507c5babeddddef80136a15a764aa7fa91e40b7479722aab6ad803efdac9661916eb7918f13abc229cb1b68a1e9d69972aaa61a8edbbcb1f0cd06e05f82f0527606d8016785cbf9ea5ccc25ad42dd61298a2d4c2e69d544cca3e6e54ab774cc276a60e1576493a63a8f277cbb882cbe95b375f9307c3deba2b6c5ca6662e3226c5aceeb692702a1a1eaa4ebac7b882d7d49f4493edf58015b8fbdc11125ec88dcd5b595029b1199af7b69d2832212f3e0ab99149a98a3eb07998d7dbc0ac85281095a8dd8f5b9016a01a7cdd6aba98d1aba59cd3b9c27deec91179ad728e601dfe81928c75bbfba7b7c3d1c7fb8cd5966cbf07e2517931e1a50b244a809b3875be0f152141aefcc85a3f5acde4104572d7517083467a0b376b581cf41dfe54ecf8dd18fd819d2fae92784e1e2c86e2415ad3d8b16e0af07706365f3e757cf4db17d9a6692824348e15698a097d3b986da8638b361a8bd5366504a41c8af07716781dce31e78a23545f6eb941e0849d9501cede59b3d4ff859cad488f6da7c1e975a97d49c37462a65a7550894da975a63069cef8740a81d7579fe435df576bed7bde26c158c5ea66a8aeb7b1981fd85aeb6a0f8ced7345258b5f920c0ecc483554160668ad35d354afac07a01386f76476f7f91aafda7a8a68a03f93bd35008138f173017b5250728748ffed952050bf5452cf6c7f845af235545baf57c1188cf6af545e4efca456a0e35cbfdda8798eac3d025a8a30641cc017cf4af6f7337a33b45c70ff7728ff7967a9d5ab501ce72eaf357bf4aa462965e356180776c66cf6c7e837b5ff7afa19a2b6893d356ef001d74911b56ac49513565031624280aaf834e3f0bf444057a49582e3817268a98f0f4114388051224280294e84385055e2c2822712bc18827911389b2916dc79f2d523c6993d02c448b0d5ea42a70d8adc2a44d46a4c9a0362d458bc68efc4a03b4eccc9b2796140982f824d6af317a1d3a039a66ddaa358ad41bb211e050bd35567d0bb0796b53a06f564d8b1656aedaa37baa9d99157c65d0a68b03355a2891f36e973fd236ab27b62147b0499ed519027fe5ef52b857173e89497951d4c96db60d9ad3b85160c097ae168a43f53845d67d5fd48d84d86be09c371fc679725733dfacbb272cecc2783fcac52327f6dc3adaadc6e283a3f59b5bb13e6de97513472f393079de9475af2efd92bfec6fdd9d03b4ab297fa0d2b5a183df9e7990f95ae4e3cf2044feeb8fa04fbe8b4c4da207e3eaa7a0ba8bcf20bade13cac043dafa3e0f340d835f29a8d2abbf6c20e6c3da2db3fc7bf091ccca8affe4c3e04b9caa30f283be0abb1da3ee2934d8cb9beb27c6031d02b9f4041d6dbdc67302b4bccafbee07cafe746d093815e34255a709eaceee24a04bf1d7b60f838052c1d09c6f66c91f8c8caba5e8fb5c6b20d2f33f8742efbca452d5a5ec44fc2543d24b42bca396fc7cc83c07142daec7aebb707943c2f4dfe5c0ecd4947ac3ccd3bc0446fc5c1f62b823ccfc673ce8eb7eefabc63522f4da458cd0745d01c47c223847cb85b9283973f1d6b8c805c474c3072b6d83b10b6c405c3c013511574449ab02985fd4a404d0ca0335c1315fc67a61bad0ec7d26d64629ac907a5cfc05fe69485dc30deaacdc051556c53b5c67b6c5a0d45e2bc54dfaeb43d259adfbc23b6feba11f5957b4b7bcb7acfc12f0508bb538bdb15fe3c35ade2be5c7f16b5d4c8059b033e5dcaf5ae44dab8f5c012594fd488dbd66bb5e3d2e39d36471dba17a453555d43e2e2bd4a7395c511b4471e48dab693befcc59b5f21659571d29773d6b742051b51504a478cb83c4ca4dd8399e053058afa5cf8d4a33bee31dd9ad74503bd6f6940b79cdf24d95dfb4d6cc74d866a82e93314763de06704445c4b0765713dc5a8d580946457f5e57c6cbffbf47ade4fbcb7395b45ceaaf3eb77b3a5515e935d3c1fd16b8efc6ab365a3d67ec0c7fe1c44fa47acf9bd489ff5cb3f4ac3ceddecd32f46dc556a39c4f67579c1540b71fbee7ebe876d29e6f35856c56a7cb6e3f4044b9c682d869df151f047729947475e56396c5184147d3feea79d6f6a5d65f877a93be3bb14cb53cd9616ec7bc267f54ae93ed676fd9f463dfeef2325241e23654e291bd2831521416ea95ebb3f02eefcd7d828d0ed614b0af812e6958f20650dee4fe2c903f0975ca5c1c90e6bba80e2aea4124ee909c386b2b99a5ac4c0c4b0ede25e1ba813c2e6dc3dec374a66320b859a97e8b1b50ac28c821069c253c124a9b78b7234b6dcf8e6504ad9582278cb0254f2c6014d398034513b1a5f8e56fcbff06bc55fc2a71be646d9aef4c03d5cf1a220036859a9719e4c76bbcf520588263b818fc23a2c9590a4d56896e89e6b4cb31c19a0e21a96558ca88ab22c020b37184cc9a52d238ced031765c9281d6c6d5a49e2eefea5bfac953d6766a305d8bce456bcec8d6156c1da938417e33291af072ff214db0bd6e7a44ed09f40ebd3278ef823455642b18544bfd9cefef6fb4635fca179837f960dc221a1a1d2f794c2e89427474b1932bc0b7583cc1101f75a90e92359644ac9df03a8aca076fb4b55db6f87fc498342a12aa442f370a405d8829edd53738e89b2d9d095fa2ee4e0328502afdcc207cead35da2352c2fbd23f972ac4e86fc13d63e21bf656202d3a83755ce4ec14aa58cfc179dbca612b8325b8161b4f2ebda486f105259e19564a4660db50fb0bd52df3e6bee83ba6afd3e3d6e838f1d5654e6b5a3de5ac3f0646b69a9a4d5262a9d1d06953549dc0dd580342592759dd4532bf4d8dfa81a5c07744c4c5fd0565c473e43919c4b64a5c4d2492375b1de79c4fc557ac7773971857a4bb4b317da98714dc8a68666ef9c1aa7d4b877417d70369e4c5e19e29a61520945d845e2bf8d5f677f3be9757744d1d850d8fa5156454f63a60458adea07e51819bb6985f397acfa16fda2a8d1d58a0b3e9537b7295ea20d6c956326abc054da3035a1ba8e03f89cc84b1a5db8239e724d7bee43391657da9d6a876d28d2d4fae2341e045696f99ed2dc4a98cd158ec192b5c3e929448c57a9e6cf950a51995dba58adb9e3f8863405911b5b41d05ae2d5af75c820e4a8d72cad005740e94d11faca42c11117887964b5a121d9bbc67aa2fd97b582238cf7fa5236ac034e94a1e0fa49d7cfe6059ba3daf0a9cc0938d7a59645bf542be339f632bfcac7767e523e17d47894b061d3dbb991e36e917c84c055175ecaa77c729f595c95d403361673e2f0661d152fc08a7876961c726481b554625a09b170c9ac6879eaa36901a5da7e9b8d5fcef4e6908000129f4010a000ff00c2000000000910f4000080ef0059d2318ac80e04385070e1458909022c78c012a3c884172a5c5871b126cd8a1b3a44e8f1d365409325466c0982b46ac39a2b52bc794216a9c894376adc595317adc564c4021b18f35951b283497af40a3078a05f974595055a54b72f44ab479a1d9ae4392156a85f9e6dba14dba559a165be8d6a263a2a53ba6bb2b5ea56ba6bd8b051e25dab06fee752ba7fcab59b673b20ecb281f2fd2cb77de0e3c96307362cf891fb58c395277468891166edca9b337efce93438e1d2ab439e3d6a353ae5daab53be7dea363ce9d2bb63d60d5c4befcddb478ee63a34d7f4de91c3b2fe2efb98f2d4edbd830f5e3cb93374e1d9af178e7d587677eac5bf37fedd9befb4fae8dfbb87be6e7a79f0fae1cf8fdedefcfaf7f9e9cbb74fcedebcfbf3f1f3dfcf25514a3d08e25e450ed4702182392860e2890e38e0648d0e4880a4851258c0e58a166841975a5d78655885498840d88626988228872aa892298c2eb8e26c8b2ac8d2ec8636d8832c873ae8932d8c3ef8e3609b3a09d3e09646198420933265f7954126057555585d39a0508a4d49322496562414159c5949d5669552a8d497915e5916214a529985aa936a95d62557627970989f52a957ab9772d9f59063769967ef917af9b520aa7a0a96ac958e0ab62c99821ac6e3ad8289976e9805e6e1e6801268b9a6a616680a67a1ae7a2a69a4ae9ac92aae96aa93d8855e14efa9978e5545a51da361655c1ea7beda3b6359bacaabadafbe78fb5371cafa745fa7caea3c5da8ca0b9ca3bbc20bac65b4ce4b2d25b9de6bcb27b3c67b6ca5b0ee7b4e64b1ea7b6e69bea6371ba49aae8acaeaa2f2cb3fa9a1f2db8fadb5febbaf6ebf2d5947679c01f76ed954d1475e126cc5474e5e51e1bb707d5ed9372e9b57dd3750ba511b2cf79b7c0f5cc7d3c5cd8708d4c5ce2c5618c60f2642b0790b7582b3ce7d670132c2135c72f7c849aca179cd09da926087f6fb443fb64f0d74feb84f2da473def23d0fa0c6057935fba8c2ab7deea5e66d0d24bc5f3b75b6d0633b2636be220b7ee9df5b7d56b8bb22adb57bd85bcd96fbdb678de5bbd14fefdd467edcda26b0d23c86784390de920cc9a4d81e8891249baa1ea022ea9a2eb123ed9a3ec024e01a4e4025e30a5e6126ef0a3ef66f4735b5e3359cb57c83f8932fc581f6993bfc2653c29dae96abc685dcb3356f2bbec2bde82ece737dea2b5c485bc98dbee62eea7dce91bd5acdc94cf65ab70c337fe7892f9db3432366c3dde0571d3e72df4b3d4e3af6e7af7e7bfce73ba1d2c5ad6d5cadadc627fa2ad7f3cf0fbdf8f71bdfb6acef0085f310eff89450440e003f795b50a69895f0c306abc08b0c90a2052810cb0eefc2811cd0660b388f3e0230348f1c11660f76b51fc4fe2443b12d5ca643e24cc4c0ba62a991a5de3363410a76278c4ad12c0f78ef534022e0588e3c02a1178874c22221798a4c62e66878619571344c22110cc57ca881943954256f5203d61776d5443d71d83164e2d81177ed3336611c8152f2ea19c8d6413eb11d869a632558e8924b3a060f8e6c680713e8a64f32b1304d74d31f15e8284832121196840b4a11e26c2e35ea2e76b28227680881994221fc66a970606a42a0c0b586c3946bcc0e82c6b9c7b572f68781052923353a465288c49c224561193924c649b0f5841c015c2578f241d1a0917d998b061779234b3295eb44bc679321321a9ba1121a9c118d5519a97810d53312915a66ac09b9d0986240d944dc0a9e0bc9319c6664a22cd43c182bd94ecec8433e9911b6e84e720aef892da13f90b458cdc29980935082241c72ddc311736db5b4e0965471f566681a7d2776a1b488c44696b243ffc491241e7dba57a75af035892c20a00500e3473f1201507dd3d0aa2dec464992254e3084f50d703792be233ea465c2db21a0e3c412b0508504d4f340a00920558a9e43b044c879493a2259d4a72755e72c9d29ffd53d328e95943f036835e8c57489c110e9bcc1465567685138ac80583538ab0850c4d8462ec7be1ca622651cca3f58c78710b538ad70fc5442bae29daaf9a121a871c84f0b508a9605a0bd6d0a2f570b275066548f0e8d504a0e4abb49cd3496702aa767b6b74bc9e5805b93ccda4205e9a33c32768977db27ea0b83871aefaa91d0b35056892af042d924f0ba9b74e8655d16fc4f822fc893092c656d4ab550de25f3bd9d59a0807bd851a2431abe8d1aed4fb886be3447b0082a311b0506dac4d013e4140d62196cbb25ceaaadeea99cdb5c5da6bb24d405a6a6fb2dca7d8bf206ac92e500a87b63015b93ac12f2b49011354979d5ad57c2143db303235a713a1da5d905e020dd196f7b7890e192143e9bc8afab614168d0aeb0cca79241ef531339156c4109bcbc44d2ac1c682a45cf095436d3eee25c25b0ed06c7232ee8813df7ce4dbe2047be090582a8d95715c83457c0430d506492358e34859f078d7a6c9e5c591b417e833601ace165aca72f27b51cc0d2f1b3bad202e500eff7944fdb28226ee982535c2061cbb2a1a440570d4603a879a16da17413425fd217987918b5fb80a19cd4905436b6b35298c96f685c483df9f420bd0982abfb67ac072639a621c37835a817174ada43dc707862838a5ae666e602bd7eb4ea4d179953719d4fa8cd73eab25ade5ef924b22d3b58864b3292ddb903b7d6865608264a7053cd57912e4dade15695ec4cc11bd7db24ba96239a171db299dd47ce3c2f1ead8b631362dd52963b67b9fa97a1a47b74aa853fc640d619992eb9cfb0350075354af4d70f941bd13108503d59a29633f2d1dafc09cba6fb32d48e0ad3bad11960598c0b2ed29bddcffef5694ef8a91c77aabf44dd9337a9fce752766aefcf6ac8a0710e2c801cda28ded317bf25bd08ccc5c6f12419f44ccac49174d4cacb329fc9eb2fa7fc0e1edaeaabb559054f168a3332a300502fd6962b1d8d24e204b75576e548447f50db2f4f5ba6e214e476ac8247661a0a1ac5dddd69c7fa8c5c312c6ae594da48286e1319847c5ac171dea7b10aa491e95c21664fa9374e8ed49e3816bda78d92c181421a078b5879c36209636f5024e82f1e5dbd78c24dc79202d204e773230da9214e4135012f1635095035079733e3d3c24ef1ed7049b762dcc651b3d579cac8aca3bdb9c79bde418da24e71449f3d055c883e54c58f6dbc94330a0c770515e579c03255120a8c244d5dcb2e95e34ede09f6be41a6ef012d19afe9f9af92932673ec01397bb7a9241b4a04a8a1aff2f1529fa879a7144bbf2099af47af358354203fa1d55376124a477451287325697b014564084760b57f77772016a02a7c864c0335b86e310459506f71f7985ec3577197797bc07085009505e5171a87325500cd7b26476cf34c58f4747ec7435747c70405f57501bb7366311cf7028e774a39c13089856a07529c7ed7228081d38aa71258500663017c65d5501585f20b16bc01d7595847ad1527387500850977fc5aa7847b917e62d58030a0358e257643475c5126c08401868145241287454a96f206a7485126b75595907801a87d58cb1978611a65595500b06266f85a488f7201350850ef7d7b65950607538fc7922978243838556f78c86396d06a01f78885556397db15165b5b47bc0e07435984601b48c68c916770288c7b68df7e85b51a964052874e7401c85425cf5991a86226a38283a419b83255983b22888275e78853480a3334676276867394b68ac0975058801026e85b97936428e97924341a87ec6c93868350893ac07588459a8ed7e72b48ad70e8ed80f33f7885108261a872505922020e8587463a988d4682d344535011d55988d8e01ac7df8064837e85017806487f20af7081401f187b80931f7e97991ec7da7e17c25501868f48d72ed76a7fd8416c65b00770277ce8a713e85b6103f277362019d8b989644287a05002781b5eef181d5e372041f7625ba6c01a87b97ee55c05565b55413413770e8a97de7d582016b7ad5e95a268856a0711a398f8eb1e390c7b75e65096131e83ba6341b759504c1705f496d7a51dd8d914d5f291344619371787346d8533a962876d5f24e08aa7c294199053523d72381116273b8c47b756d5f37ce5ee2937b00625e83289f352153223d70c7309ee7824d175374a5c898a61172889977d8965ce27577b84340d7cf89f3f18479dc4f09d34f78e52d53676c016b7de5752850885af75922431181d50295473689f3d91b758570d4f09911f58097093be2f09e83287d72005377b24eb8fc75c2eb8b96ee51167c7035cb9b33ca8a47972ac7245b381e890ef8501e29f87236c38885cd5839456c65da95b6ad44c03984d83728988853116a04254e8fc1b47ec7cd5811a980898255a5301b59ee25a8df9f11484f787a06011e8317cf3b694b21e8099271627b00bb8964341a86556c51305ef5ee4f585985e7e850884552b9c651671852f68934285293017d9f204a5939885950296639234950c2a562ce4556845b851e9d2ad525b35b7556847e42a414590a05c113ac657b7776bf8358e51bd5eb52238a9281885d36fd244ace6363d41b65f396c68850171a6924d172f7ff83e7c914e9d85726e46f78967824d26301a986722668d902236a5259562942b7601e20d85d1a2031f7b88422e831f764a0563394552a7ef028d70235d2878a68a337a9634652236a778a01b95bc01e9c0a5a4678d58920cf8038b9ac9a647459a1ac3a785c27fd41f8de91452501f49e9595d27e82d17f0a72a556b17801e240f9ce8122b69992d17f98ec50ba587c995c6552df75c97a6e88b01249834006571141d88e88a41b65458336341e45d8a1c9d79dc16e8f07f35788125350250cdaf20edabd7cda019767587a61c5aac053ab56924bd58478dab00250ff7adaddacda950e20bdaf202fa8c51415a96815a3096946e195983a6595be96378915baf56cf91d50e7b476b21e89f55512d9a6491a4340033f5398dd48e72d2c3ae85b37be627a781f58439558a5633a9175285ca241250556eef77d22701478d8a59242839762711b721e012f85623e8c7aea6f31678fc9222a980e763b0b2f01e116267491d56172b5a95d1b4dad917d90aa8779014982e7baaf799941f7b00891b682283036e770a0b6c8aa38522647ba739896bcd5792d17397c31f89da66f6504b49d85e371021f7db51f3dba226d34b49e85bfa0bacb7ab6b915417988dad70fb22679ea409702398c26428ab9507283863462398905b38ec26e4b0b226d8429923b51396adf75b5078422553d527d9b6b18ac65c26c83f8a529e23d341a045962a527e20849c26b6ab75ae817a489152a7937a4642078113d7e2b301868c5b367601d88aa8f52b68649b6864ab3671bfd5ec72ba29efa1aa0282b3f6179aa6823a11ae41016eb66f87113d379149339ae85b886a45c07d9de6f760035c065bec70c87b9b113d72f7a01c2b528649f31486368bea5515f9eeb5f96976e404bb11219e1190caa68446b2289e97322ac7cd50a8924689e9452a451428018b95f2b675e187c5347a67aa9054dea14175a0699722160225a94a4b717c799bb75bba5c2a26b597267db2ab95a5950652864282f7bcae19d474c48da96ae1617ae88bcb8cb5211e9347cc994865178b2a5d86382e55deb379c6556a9e41e80aa6885c88788f93f6f2b89b2e7785e6b21155611bf61571678bfa428b001b97823ba7253eb29b2b5f47601aa98350dba34f82a4b9eb48653aef53633cb7bd65e5cb27553f7ce1b57aeb2f8ab965c028931cad3de948715417a896a11e56145706f21ab4c03e7b325dbb40187be4635209ba09debba3c8c385394253f31529d4cef8bb232c607f4b27ac7992b7468f8401e798dbe6cfdb015e246b276cd9b35ad8ad326613985358daf5a0f51f8538f075c2b69d64ec86daa710a32bbea995a339c5604a5282e91225165ca81bee7014d02801ecb6117cb2c6891b7ad913d7649cc94199367984016f9d3116b7a1df9fa5d41df770631a46c7553326f955b556dc527be86cf8a8b5c08da446c938830fca68b757e4df4dea1e47ecfa23015dbbd4ea2da911d1a8f786a0b3aa019c95591e44ca4f5f332885ef29154427e0c04cec2289a93462f7a99b7ac6611e88bb49ba514c9a01f8a72d6d1551a5a7a7d0176a989d791b3a7489760b1e9468b67adb12287c5f59ec1957b90a985a289d188e7a6176c65355cc8321ac2aac13279515889ea91bc96a410a9257e1202b5b61027dcf85d573bc954e0799c4551f75d6683a5c2b51f7d18d6850ba8c99bbc0918abcc1ad7d1a1595e20ca34b2a98019f1a2f9544c83b96b01e195fc70a7e4468edb9765ea57d0a6311e1dd855a880d25532189c389dd4eccfaad72b9da6624d4b8cfcd7c2aadf4e7dee9f75a27a1601117a56c17cae11948f6ce6723b65c966928ad9f57223dabbc619595706817d5655925126848786a29ef614125942670145988be017cb1a0bc4d7ba3de6532392b8fb436672b620037571e63f8f07b374c284a408003f59675fd287b462fca386288faad0532217ad3647bea89c4d527cbb6b352d3dbb242963c2c49a18ad649bc077a1b7483e7a48750030b90113b4ea5418dab39705b412bb649d69c998592ad1e2bfcb75cc796505a2f4a942684eac3121eecd7025aadb12591d6cc902dced6014d586c05286843942631a57d2347ec2930fcaeb0162a7b6681d8dde1c1ad7cb88388cf9cf776dab47e31fa40e4c8da721f7596c9604554ae366fd2933e8ab515cfe95f7653abaef90f550b17b4fcd3a0d4e6a85ab46f31e08bbccf952e9b671507c5babeddddef80136a15a764aa7fa91e40b7479722aab6ad803efdac9661916eb7918f13abc229cb1b68a1e9d69972aaa61a8edbbcb1f0cd06e05f82f0527606d8016785cbf9ea5ccc25ad42dd61298a2d4c2e69d544cca3e6e54ab774cc276a60e1576493a63a8f277cbb882cbe95b375f9307c3deba2b6c5ca6662e3226c5aceeb692702a1a1eaa4ebac7b882d7d49f4493edf58015b8fbdc11125ec88dcd5b595029b1199af7b69d2832212f3e0ab99149a98a3eb07998d7dbc0ac85281095a8dd8f5b9016a01a7cdd6aba98d1aba59cd3b9c27deec91179ad728e601dfe81928c75bbfba7b7c3d1c7fb8cd5966cbf07e2517931e1a50b244a809b3875be0f152141aefcc85a3f5acde4104572d7517083467a0b376b581cf41dfe54ecf8dd18fd819d2fae92784e1e2c86e2415ad3d8b16e0af07706365f3e757cf4db17d9a6692824348e15698a097d3b986da8638b361a8bd5366504a41c8af07716781dce31e78a23545f6eb941e0849d9501cede59b3d4ff859cad488f6da7c1e975a97d49c37462a65a7550894da975a63069cef8740a81d7579fe435df576bed7bde26c158c5ea66a8aeb7b1981fd85aeb6a0f8ced7345258b5f920c0ecc483554160668ad35d354afac07a01386f76476f7f91aafda7a8a68a03f93bd35008138f173017b5250728748ffed952050bf5452cf6c7f845af235545baf57c1188cf6af545e4efca456a0e35cbfdda8798eac3d025a8a30641cc017cf4af6f7337a33b45c70ff7728ff7967a9d5ab501ce72eaf357bf4aa462965e356180776c66cf6c7e837b5ff7afa19a2b6893d356ef001d74911b56ac49513565031624280aaf834e3f0bf444057a49582e3817268a98f0f4114388051224280294e84385055e2c2822712bc18827911389b2916dc79f2d523c6993d02c448b0d5ea42a70d8adc2a44d46a4c9a0362d458bc68efc4a03b4eccc9b2796140982f824d6af317a1d3a039a66ddaa358ad41bb211e050bd35567d0bb0796b53a06f564d8b1656aedaa37baa9d99157c65d0a68b03355a2891f36e973fd236ab27b62147b0499ed519027fe5ef52b857173e89497951d4c96db60d9ad3b85160c097ae168a43f53845d67d5fd48d84d86be09c371fc679725733dfacbb272cecc2783fcac52327f6dc3adaadc6e283a3f59b5bb13e6de97513472f393079de9475af2efd92bfec6fdd9d03b4ab297fa0d2b5a183df9e7990f95ae4e3cf2044feeb8fa04fbe8b4c4da207e3eaa7a0ba8bcf20bade13cac043dafa3e0f340d835f29a8d2abbf6c20e6c3da2db3fc7bf091ccca8affe4c3e04b9caa30f283be0abb1da3ee2934d8cb9beb27c6031d02b9f4041d6dbdc67302b4bccafbee07cafe746d093815e34255a709eaceee24a04bf1d7b60f838052c1d09c6f66c91f8c8caba5e8fb5c6b20d2f33f8742efbca452d5a5ec44fc2543d24b42bca396fc7cc83c07142daec7aebb707943c2f4dfe5c0ecd4947ac3ccd3bc0446fc5c1f62b823ccfc673ce8eb7eefabc63522f4da458cd0745d01c47c223847cb85b9283973f1d6b8c805c474c3072b6d83b10b6c405c3c013511574449ab02985fd4a404d0ca0335c1315fc67a61bad0ec7d26d64629ac907a5cfc05fe69485dc30deaacdc051556c53b5c67b6c5a0d45e2bc54dfaeb43d259adfbc23b6feba11f5957b4b7bcb7acfc12f0508bb538bdb15fe3c35ade2be5c7f16b5d4c8059b033e5dcaf5ae44dab8f5c012594fd488dbd66bb5e3d2e39d36471dba17a453555d43e2e2bd4a7395c511b4471e48dab693befcc59b5f21659571d29773d6b742051b51504a478cb83c4ca4dd8399e053058afa5cf8d4a33bee31dd9ad74503bd6f6940b79cdf24d95dfb4d6cc74d866a82e93314763de06704445c4b0765713dc5a8d580946457f5e57c6cbffbf47ade4fbcb7395b45ceaaf3eb77b3a5515e935d3c1fd16b8efc6ab365a3d67ec0c7fe1c44fa47acf9bd489ff5cb3f4ac3ceddecd32f46dc556a39c4f67579c1540b71fbee7ebe876d29e6f35856c56a7cb6e3f4044b9c682d869df151f047729947475e56396c5184147d3feea79d6f6a5d65f877a93be3bb14cb53cd9616ec7bc267f54ae93ed676fd9f463dfeef2325241e23654e291bd2831521416ea95ebb3f02eefcd7d828d0ed614b0af812e6958f20650dee4fe2c903f0975ca5c1c90e6bba80e2aea4124ee909c386b2b99a5ac4c0c4b0ede25e1ba813c2e6dc3dec374a66320b859a97e8b1b50ac28c821069c253c124a9b78b7234b6dcf8e6504ad9582278cb0254f2c6014d398034513b1a5f8e56fcbff06bc55fc2a71be646d9aef4c03d5cf1a220036859a9719e4c76bbcf520588263b818fc23a2c9590a4d56896e89e6b4cb31c19a0e21a96558ca88ab22c020b37184cc9a52d238ced031765c9281d6c6d5a49e2eefea5bfac953d6766a305d8bce456bcec8d6156c1da938417e33291af072ff214db0bd6e7a44ed09f40ebd3278ef823455642b18544bfd9cefef6fb4635fca179837f960dc221a1a1d2f794c2e89427474b1932bc0b7583cc1101f75a90e92359644ac9df03a8aca076fb4b55db6f87fc498342a12aa442f370a405d8829edd53738e89b2d9d095fa2ee4e0328502afdcc207cead35da2352c2fbd23f972ac4e86fc13d63e21bf656202d3a83755ce4ec14aa58cfc179dbca612b8325b8161b4f2ebda486f105259e19564a4660db50fb0bd52df3e6bee83ba6afd3e3d6e838f1d5654e6b5a3de5ac3f0646b69a9a4d5262a9d1d06953549dc0dd580342592759dd4532bf4d8dfa81a5c07744c4c5fd0565c473e43919c4b64a5c4d2492375b1de79c4fc557ac7773971857a4bb4b317da98714dc8a68666ef9c1aa7d4b877417d70369e4c5e19e29a61520945d845e2bf8d5f677f3be9757744d1d850d8fa5156454f63a60458adea07e51819bb6985f397acfa16fda2a8d1d58a0b3e9537b7295ea20d6c956326abc054da3035a1ba8e03f89cc84b1a5db8239e724d7bee43391657da9d6a876d28d2d4fae2341e045696f99ed2dc4a98cd158ec192b5c3e929448c57a9e6cf950a51995dba58adb9e3f8863405911b5b41d05ae2d5af75c820e4a8d72cad005740e94d11faca42c11117887964b5a121d9bbc67aa2fd97b582238cf7fa5236ac034e94a1e0fa49d7cfe6059ba3daf0a9cc0938d7a59645bf542be339f632bfcac7767e523e17d47894b061d3dbb991e36e917c84c055175ecaa77c729f595c95d403361673e2f0661d152fc08a7876961c726481b554625a09b170c9ac6879eaa36901a5da7e9b8d5fcef4e6908000129f4010a000ff00c2000000000910f4000080ef0059d2318ac80e04385070e1458909022c78c012a3c884172a5c5871b126cd8a1b3a44e8f1d365409325466c0982b46ac39a2b52bc794216a9c894376adc595317adc564c4021b18f35951b283497af40a3078a05f974595055a54b72f44ab479a1d9ae4392156a85f9e6dba14dba559a165be8d6a263a2a53ba6bb2b5ea56ba6bd8b051e25dab06fee752ba7fcab59b673b20ecb281f2fd2cb77de0e3c96307362cf891fb58c395277468891166edca9b337efce93438e1d2ab439e3d6a353ae5daab53be7dea363ce9d2bb63d60d5c4befcddb478ee63a34d7f4de91c3b2fe2efb98f2d4edbd830f5e3cb93374e1d9af178e7d587677eac5bf37fedd9befb4fae8dfbb87be6e7a79f0fae1cf8fdedefcfaf7f9e9cbb74fcedebcfbf3f1f3dfcf25514a3d08e25e450ed4702182392860e2890e38e0648d0e4880a4851258c0e58a166841975a5d78655885498840d88626988228872aa892298c2eb8e26c8b2ac8d2ec8636d8832c873ae8932d8c3ef8e3609b3a09d3e09646198420933265f7954126057555585d39a0508a4d49322496562414159c5949d5669552a8d497915e5916214a529985aa936a95d62557627970989f52a957ab9772d9f59063769967ef917af9b520aa7a0a96ac958e0ab62c99821ac6e3ad8289976e9805e6e1e6801268b9a6a616680a67a1ae7a2a69a4ae9ac92aae96aa93d8855e14efa9978e5545a51da361655c1ea7beda3b6359bacaabadafbe78fb5371cafa745fa7caea3c5da8ca0b9ca3bbc20bac65b4ce4b2d25b9de6bcb27b3c67b6ca5b0ee7b4e64b1ea7b6e69bea6371ba49aae8acaeaa2f2cb3fa9a1f2db8fadb5febbaf6ebf2d5947679c01f76ed954d1475e126cc5474e5e51e1bb707d5ed9372e9b57dd3750ba511b2cf79b7c0f5cc7d3c5cd8708d4c5ce2c5618c60f2642b0790b7582b3ce7d670132c2135c72f7c849aca179cd09da926087f6fb443fb64f0d74feb84f2da473def23d0fa0c6057935fba8c2ab7deea5e66d0d24bc5f3b75b6d0633b2636be220b7ee9df5b7d56b8bb22adb57bd85bcd96fbdb678de5bbd14fefdd467edcda26b0d23c86784390de920cc9a4d81e8891249baa1ea022ea9a2eb123ed9a3ec024e01a4e4025e30a5e6126ef0a3ef66f4735b5e3359cb57c83f8932fc581f6993bfc2653c29dae96abc685dcb3356f2bbec2bde82ece737dea2b5c485bc98dbee62eea7dce91bd5acdc94cf65ab70c337fe7892f9db3432366c3dde0571d3e72df4b3d4e3af6e7af7e7bfce73ba1d2c5ad6d5cadadc627fa2ad7f3cf0fbdf8f71bdfb6acef0085f310eff89450440e003f795b50a69895f0c306abc08b0c90a2052810cb0eefc2811cd0660b388f3e0230348f1c11660f76b51fc4fe2443b12d5ca643e24cc4c0ba62a991a5de3363410a76278c4ad12c0f78ef534022e0588e3c02a1178874c22221798a4c62e66878619571344c22110cc57ca881943954256f5203d61776d5443d71d83164e2d81177ed3336611c8152f2ea19c8d6413eb11d869a632558e8924b3a060f8e6c680713e8a64f32b1304d74d31f15e8284832121196840b4a11e26c2e35ea2e76b28227680881994221fc66a970606a42a0c0b586c3946bcc0e82c6b9c7b572f68781052923353a465288c49c224561193924c649b0f5841c015c2578f241d1a0917d998b061779234b3295eb44bc679321321a9ba1121a9c118d5519a97810d53312915a66ac09b9d0986240d944dc0a9e0bc9319c6664a22cd43c182bd94ecec8433e9911b6e84e720aef892da13f90b458cdc29980935082241c72ddc311736db5b4e0965471f566681a7d2776a1b488c44696b243ffc491241e7dba57a75af035892c20a00500e3473f1201507dd3d0aa2dec464992254e3084f50d703792be233ea465c2db21a0e3c412b0508504d4f340a00920558a9e43b044c879493a2259d4a72755e72c9d29ffd53d328e95943f036835e8c57489c110e9bcc1465567685138ac80583538ab0850c4d8462ec7be1ca622651cca3f58c78710b538ad70fc5442bae29daaf9a121a871c84f0b508a9605a0bd6d0a2f570b275066548f0e8d504a0e4abb49cd3496702aa767b6b74bc9e5805b93ccda4205e9a33c32768977db27ea0b83871aefaa91d0b35056892af042d924f0ba9b74e8655d16fc4f822fc893092c656d4ab550de25f3bd9d59a0807bd851a2431abe8d1aed4fb886be3447b0082a311b0506dac4d013e4140d62196cbb25ceaaadeea99cdb5c5da6bb24d405a6a6fb2dca7d8bf206ac92e500a87b63015b93ac12f2b49011354979d5ad57c2143db303235a713a1da5d905e020dd196f7b7890e192143e9bc8afab614168d0aeb0cca79241ef531339156c4109bcbc44d2ac1c682a45cf095436d3eee25c25b0ed06c7232ee8813df7ce4dbe2047be090582a8d95715c83457c0430d506492358e34859f078d7a6c9e5c591b417e833601ace165aca72f27b51cc0d2f1b3bad202e500eff7944fdb28226ee982535c2061cbb2a1a440570d4603a879a16da17413425fd217987918b5fb80a19cd4905436b6b35298c96f685c483df9f420bd0982abfb67ac072639a621c37835a817174ada43dc707862838a5ae666e602bd7eb4ea4d179953719d4fa8cd73eab25ade5ef924b22d3b58864b3292ddb903b7d6865608264a7053cd57912e4dade15695ec4cc11bd7db24ba96239a171db299dd47ce3c2f1ead8b631362dd52963b67b9fa97a1a47b74aa853fc640d619992eb9cfb0350075354af4d70f941bd13108503d59a29633f2d1dafc09cba6fb32d48e0ad3bad11960598c0b2ed29bddcffef5694ef8a91c77aabf44dd9337a9fce752766aefcf6ac8a0710e2c801cda28ded317bf25bd08ccc5c6f12419f44ccac49174d4cacb329fc9eb2fa7fc0e1edaeaabb559054f168a3332a300502fd6962b1d8d24e204b75576e548447f50db2f4f5ba6e214e476ac8247661a0a1ac5dddd69c7fa8c5c312c6ae594da48286e1319847c5ac171dea7b10aa491e95c21664fa9374e8ed49e3816bda78d92c181421a078b5879c36209636f5024e82f1e5dbd78c24dc79202d204e773230da9214e4135012f1635095035079733e3d3c24ef1ed7049b762dcc651b3d579cac8aca3bdb9c79bde418da24e71449f3d055c883e54c58f6dbc94330a0c770515e579c03255120a8c244d5dcb2e95e34ede09f6be41a6ef012d19afe9f9af92932673ec01397bb7a9241b4a04a8a1aff2f1529fa879a7144bbf2099af47af358354203fa1d55376124a477451287325697b014564084760b57f77772016a02a7c864c0335b86e310459506f71f7985ec3577197797bc07085009505e5171a87325500cd7b26476cf34c58f4747ec7435747c70405f57501bb7366311cf7028e774a39c13089856a07529c7ed7228081d38aa71258500663017c65d5501585f20b16bc01d7595847ad1527387500850977fc5aa7847b917e62d58030a0358e257643475c5126c08401868145241287454a96f206a7485126b75595907801a87d58cb1978611a65595500b06266f85a488f7201350850ef7d7b65950607538fc7922978243838556f78c86396d06a01f78885556397db15165b5b47bc0e07435984601b48c68c916770288c7b68df7e85b51a964052874e7401c85425cf5991a86226a38283a419b83255983b22888275e78853480a3334676276867394b68ac0975058801026e85b97936428e97924341a87ec6c93868350893ac07588459a8ed7e72b48ad70e8ed80f33f7885108261a872505922020e8587463a988d4682d344535011d55988d8e01ac7df8064837e85017806487f20af7081401f187b80931f7e97991ec7da7e17c25501868f48d72ed76a7fd8416c65b00770277ce8a713e85b6103f277362019d8b989644287a05002781b5eef181d5e372041f7625ba6c01a87b97ee55c05565b55413413770e8a97de7d582016b7ad5e95a268856a0711a398f8eb1e390c7b75e65096131e83ba6341b759504c1705f496d7a51dd8d914d5f291344619371787346d8533a962876d5f24e08aa7c294199053523d72381116273b8c47b756d5f37ce5ee2937b00625e83289f352153223d70c7309ee7824d175374a5c898a61172889977d8965ce27577b84340d7cf89f3f18479dc4f09d34f78e52d53676c016b7de5752850885af75922431181d50295473689f3d91b758570d4f09911f58097093be2f09e83287d72005377b24eb8fc75c2eb8b96ee51167c7035cb9b33ca8a47972ac7245b381e890ef8501e29f87236c38885cd5839456c65da95b6ad44c03984d83728988853116a04254e8fc1b47ec7cd5811a980898255a5301b59ee25a8df9f11484f787a06011e8317cf3b694b21e8099271627b00bb8964341a86556c51305ef5ee4f585985e7e850884552b9c651671852f68934285293017d9f204a5939885950296639234950c2a562ce4556845b851e9d2ad525b35b7556847e42a414590a05c113ac657b7776bf8358e51bd5eb52238a9281885d36fd244ace6363d41b65f396c68850171a6924d172f7ff83e7c914e9d85726e46f78967824d26301a986722668d902236a5259562942b7601e20d85d1a2031f7b88422e831f764a0563394552a7ef028d70235d2878a68a337a9634652236a778a01b95bc01e9c0a5a4678d58920cf8038b9ac9a647459a1ac3a785c27fd41f8de91452501f49e9595d27e82d17f0a72a556b17801e240f9ce8122b69992d17f98ec50ba587c995c6552df75c97a6e88b01249834006571141d88e88a41b65458336341e45d8a1c9d79dc16e8f07f35788125350250cdaf20edabd7cda019767587a61c5aac053ab56924bd58478dab00250ff7adaddacda950e20bdaf202fa8c51415a96815a3096946e195983a6595be96378915baf56cf91d50e7b476b21e89f55512d9a6491a4340033f5398dd48e72d2c3ae85b37be627a781f58439558a5633a9175285ca241250556eef77d22701478d8a59242839762711b721e012f85623e8c7aea6f31678fc9222a980e763b0b2f01e116267491d56172b5a95d1b4dad917d90aa8779014982e7baaf799941f7b00891b682283036e770a0b6c8aa38522647ba739896bcd5792d17397c31f89da66f6504b49d85e371021f7db51f3dba226d34b49e85bfa0bacb7ab6b915417988dad70fb22679ea409702398c26428ab9507283863462398905b38ec26e4b0b226d8429923b51396adf75b5078422553d527d9b6b18ac65c26c83f8a529e23d341a045962a527e20849c26b6ab75ae817a489152a7937a4642078113d7e2b301868c5b367601d88aa8f52b68649b6864ab3671bfd5ec72ba29efa1aa0282b3f6179aa6823a11ae41016eb66f87113d379149339ae85b886a45c07d9de6f760035c065bec70c87b9b113d72f7a01c2b528649f31486368bea5515f9eeb5f96976e404bb11219e1190caa68446b2289e97322ac7cd50a8924689e9452a451428018b95f2b675e187c5347a67aa9054dea14175a0699722160225a94a4b717c799bb75bba5c2a26b597267db2ab95a5950652864282f7bcae19d474c48da96ae1617ae88bcb8cb5211e9347cc994865178b2a5d86382e55deb379c6556a9e41e80aa6885c88788f93f6f2b89b2e7785e6b21155611bf61571678bfa428b001b97823ba7253eb29b2b5f47601aa98350dba34f82a4b9eb48653aef53633cb7bd65e5cb27553f7ce1b57aeb2f8ab965c028931cad3de948715417a896a11e56145706f21ab4c03e7b325dbb40187be4635209ba09debba3c8c385394253f31529d4cef8bb232c607f4b27ac7992b7468f8401e798dbe6cfdb015e246b276cd9b35ad8ad326613985358daf5a0f51f8538f075c2b69d64ec86daa710a32bbea995a339c5604a5282e91225165ca81bee7014d02801ecb6117cb2c6891b7ad913d7649cc94199367984016f9d3116b7a1df9fa5d41df770631a46c7553326f955b556dc527be86cf8a8b5c08da446c938830fca68b757e4df4dea1e47ecfa23015dbbd4ea2da911d1a8f786a0b3aa019c95591e44ca4f5f332885ef29154427e0c04cec2289a93462f7a99b7ac6611e88bb49ba514c9a01f8a72d6d1551a5a7a7d0176a989d791b3a7489760b1e9468b67adb12287c5f59ec1957b90a985a289d188e7a6176c65355cc8321ac2aac13279515889ea91bc96a410a9257e1202b5b61027dcf85d573bc954e0799c4551f75d6683a5c2b51f7d18d6850ba8c99bbc0918abcc1ad7d1a1595e20ca34b2a98019f1a2f9544c83b96b01e195fc70a7e4468edb9765ea57d0a6311e1dd855a880d25532189c389dd4eccfaad72b9da6624d4b8cfcd7c2aadf4e7dee9f75a27a1601117a56c17cae11948f6ce6723b65c966928ad9f57223dabbc619595706817d5655925126848786a29ef614125942670145988be017cb1a0bc4d7ba3de6532392b8fb436672b620037571e63f8f07b374c284a408003f59675fd287b462fca386288faad0532217ad3647bea89c4d527cbb6b352d3dbb242963c2c49a18ad649bc077a1b7483e7a48750030b90113b4ea5418dab39705b412bb649d69c998592ad1e2bfcb75cc796505a2f4a942684eac3121eecd7025aadb12591d6cc902dced6014d586c05286843942631a57d2347ec2930fcaeb0162a7b6681d8dde1c1ad7cb88388cf9cf776dab47e31fa40e4c8da721f7596c9604554ae366fd2933e8ab515cfe95f7653abaef90f550b17b4fcd3a0d4e6a85ab46f31e08bbccf952e9b671507c5babeddddef80136a15a764aa7fa91e40b7479722aab6ad803efdac9661916eb7918f13abc229cb1b68a1e9d69972aaa61a8edbbcb1f0cd06e05f82f0527606d8016785cbf9ea5ccc25ad42dd61298a2d4c2e69d544cca3e6e54ab774cc276a60e1576493a63a8f277cbb882cbe95b375f9307c3deba2b6c5ca6662e3226c5aceeb692702a1a1eaa4ebac7b882d7d49f4493edf58015b8fbdc11125ec88dcd5b595029b1199af7b69d2832212f3e0ab99149a98a3eb07998d7dbc0ac85281095a8dd8f5b9016a01a7cdd6aba98d1aba59cd3b9c27deec91179ad728e601dfe81928c75bbfba7b7c3d1c7fb8cd5966cbf07e2517931e1a50b244a809b3875be0f152141aefcc85a3f5acde4104572d7517083467a0b376b581cf41dfe54ecf8dd18fd819d2fae92784e1e2c86e2415ad3d8b16e0af07706365f3e757cf4db17d9a6692824348e15698a097d3b986da8638b361a8bd5366504a41c8af07716781dce31e78a23545f6eb941e0849d9501cede59b3d4ff859cad488f6da7c1e975a97d49c37462a65a7550894da975a63069cef8740a81d7579fe435df576bed7bde26c158c5ea66a8aeb7b1981fd85aeb6a0f8ced7345258b5f920c0ecc483554160668ad35d354afac07a01386f76476f7f91aafda7a8a68a03f93bd35008138f173017b5250728748ffed952050bf5452cf6c7f845af235545baf57c1188cf6af545e4efca456a0e35cbfdda8798eac3d025a8a30641cc017cf4af6f7337a33b45c70ff7728ff7967a9d5ab501ce72eaf357bf4aa462965e356180776c66cf6c7e837b5ff7afa19a2b6893d356ef001d74911b56ac49513565031624280aaf834e3f0bf444057a49582e3817268a98f0f4114388051224280294e84385055e2c2822712bc18827911389b2916dc79f2d523c6993d02c448b0d5ea42a70d8adc2a44d46a4c9a0362d458bc68efc4a03b4eccc9b2796140982f824d6af317a1d3a039a66ddaa358ad41bb211e050bd35567d0bb0796b53a06f564d8b1656aedaa37baa9d99157c65d0a68b03355a2891f36e973fd236ab27b62147b0499ed519027fe5ef52b857173e89497951d4c96db60d9ad3b85160c097ae168a43f53845d67d5fd48d84d86be09c371fc679725733dfacbb272cecc2783fcac52327f6dc3adaadc6e283a3f59b5bb13e6de97513472f393079de9475af2efd92bfec6fdd9d03b4ab297fa0d2b5a183df9e7990f95ae4e3cf2044feeb8fa04fbe8b4c4da207e3eaa7a0ba8bcf20bade13cac043dafa3e0f340d835f29a8d2abbf6c20e6c3da2db3fc7bf091ccca8affe4c3e04b9caa30f283be0abb1da3ee2934d8cb9beb27c6031d02b9f4041d6dbdc67302b4bccafbee07cafe746d093815e34255a709eaceee24a04bf1d7b60f838052c1d09c6f66c91f8c8caba5e8fb5c6b20d2f33f8742efbca452d5a5ec44fc2543d24b42bca396fc7cc83c07142daec7aebb707943c2f4dfe5c0ecd4947ac3ccd3bc0446fc5c1f62b823ccfc673ce8eb7eefabc63522f4da458cd0745d01c47c223847cb85b9283973f1d6b8c805c474c3072b6d83b10b6c405c3c013511574449ab02985fd4a404d0ca0335c1315fc67a61bad0ec7d26d64629ac907a5cfc05fe69485dc30deaacdc051556c53b5c67b6c5a0d45e2bc54dfaeb43d259adfbc23b6feba11f5957b4b7bcb7acfc12f0508bb538bdb15fe3c35ade2be5c7f16b5d4c8059b033e5dcaf5ae44dab8f5c012594fd488dbd66bb5e3d2e39d36471dba17a453555d43e2e2bd4a7395c511b4471e48dab693befcc59b5f21659571d29773d6b742051b51504a478cb83c4ca4dd8399e053058afa5cf8d4a33bee31dd9ad74503bd6f6940b79cdf24d95dfb4d6cc74d866a82e93314763de06704445c4b0765713dc5a8d580946457f5e57c6cbffbf47ade4fbcb7395b45ceaaf3eb77b3a5515e935d3c1fd16b8efc6ab365a3d67ec0c7fe1c44fa47acf9bd489ff5cb3f4ac3ceddecd32f46dc556a39c4f67579c1540b71fbee7ebe876d29e6f35856c56a7cb6e3f4044b9c682d869df151f047729947475e56396c5184147d3feea79d6f6a5d65f877a93be3bb14cb53cd9616ec7bc267f54ae93ed676fd9f463dfeef2325241e23654e291bd2831521416ea95ebb3f02eefcd7d828d0ed614b0af812e6958f20650dee4fe2c903f0975ca5c1c90e6bba80e2aea4124ee909c386b2b99a5ac4c0c4b0ede25e1ba813c2e6dc3dec374a66320b859a97e8b1b50ac28c821069c253c124a9b78b7234b6dcf8e6504ad9582278cb0254f2c6014d398034513b1a5f8e56fcbff06bc55fc2a71be646d9aef4c03d5cf1a220036859a9719e4c76bbcf520588263b818fc23a2c9590a4d56896e89e6b4cb31c19a0e21a96558ca88ab22c020b37184cc9a52d238ced031765c9281d6c6d5a49e2eefea5bfac953d6766a305d8bce456bcec8d6156c1da938417e33291af072ff214db0bd6e7a44ed09f40ebd3278ef823455642b18544bfd9cefef6fb4635fca179837f960dc221a1a1d2f794c2e89427474b1932bc0b7583cc1101f75a90e92359644ac9df03a8aca076fb4b55db6f87fc498342a12aa442f370a405d8829edd53738e89b2d9d095fa2ee4e0328502afdcc207cead35da2352c2fbd23f972ac4e86fc13d63e21bf656202d3a83755ce4ec14aa58cfc179dbca612b8325b8161b4f2ebda486f105259e19564a4660db50fb0bd52df3e6bee83ba6afd3e3d6e838f1d5654e6b5a3de5ac3f0646b69a9a4d5262a9d1d06953549dc0dd580342592759dd4532bf4d8dfa81a5c07744c4c5fd0565c473e43919c4b64a5c4d2492375b1de79c4fc557ac7773971857a4bb4b317da98714dc8a68666ef9c1aa7d4b877417d70369e4c5e19e29a61520945d845e2bf8d5f677f3be9757744d1d850d8fa5156454f63a60458adea07e51819bb6985f397acfa16fda2a8d1d58a0b3e9537b7295ea20d6c956326abc054da3035a1ba8e03f89cc84b1a5db8239e724d7bee43391657da9d6a876d28d2d4fae2341e045696f99ed2dc4a98cd158ec192b5c3e929448c57a9e6cf950a51995dba58adb9e3f8863405911b5b41d05ae2d5af75c820e4a8d72cad005740e94d11faca42c11117887964b5a121d9bbc67aa2fd97b582238cf7fa5236ac034e94a1e0fa49d7cfe6059ba3daf0a9cc0938d7a59645bf542be339f632bfcac7767e523e17d47894b061d3dbb991e36e917c84c055175ecaa77c729f595c95d403361673e2f0661d152fc08a7876961c726481b554625a09b170c9ac6879eaa36901a5da7e9b8d5fcef4e6908000129f4010a000ff00c2000000000910f4000080ef0059d2318ac80e04385070e1458909022c78c012a3c884172a5c5871b126cd8a1b3a44e8f1d365409325466c0982b46ac39a2b52bc794216a9c894376adc595317adc564c4021b18f35951b283497af40a3078a05f974595055a54b72f44ab479a1d9ae4392156a85f9e6dba14dba559a165be8d6a263a2a53ba6bb2b5ea56ba6bd8b051e25dab06fee752ba7fcab59b673b20ecb281f2fd2cb77de0e3c96307362cf891fb58c395277468891166edca9b337efce93438e1d2ab439e3d6a353ae5daab53be7dea363ce9d2bb63d60d5c4befcddb478ee63a34d7f4de91c3b2fe2efb98f2d4edbd830f5e3cb93374e1d9af178e7d587677eac5bf37fedd9befb4fae8dfbb87be6e7a79f0fae1cf8fdedefcfaf7f9e9cbb74fcedebcfbf3f1f3dfcf25514a3d08e25e450ed4702182392860e2890e38e0648d0e4880a4851258c0e58a166841975a5d78655885498840d88626988228872aa892298c2eb8e26c8b2ac8d2ec8636d8832c873ae8932d8c3ef8e3609b3a09d3e09646198420933265f7954126057555585d39a0508a4d49322496562414159c5949d5669552a8d497915e5916214a529985aa936a95d62557627970989f52a957ab9772d9f59063769967ef917af9b520aa7a0a96ac958e0ab62c99821ac6e3ad8289976e9805e6e1e6801268b9a6a616680a67a1ae7a2a69a4ae9ac92aae96aa93d8855e14efa9978e5545a51da361655c1ea7beda3b6359bacaabadafbe78fb5371cafa745fa7caea3c5da8ca0b9ca3bbc20bac65b4ce4b2d25b9de6bcb27b3c67b6ca5b0ee7b4e64b1ea7b6e69bea6371ba49aae8acaeaa2f2cb3fa9a1f2db8fadb5febbaf6ebf2d5947679c01f76ed954d1475e126cc5474e5e51e1bb707d5ed9372e9b57dd3750ba511b2cf79b7c0f5cc7d3c5cd8708d4c5ce2c5618c60f2642b0790b7582b3ce7d670132c2135c72f7c849aca179cd09da926087f6fb443fb64f0d74feb84f2da473def23d0fa0c6057935fba8c2ab7deea5e66d0d24bc5f3b75b6d0633b2636be220b7ee9df5b7d56b8bb22adb57bd85bcd96fbdb678de5bbd14fefdd467edcda26b0d23c86784390de920cc9a4d81e8891249baa1ea022ea9a2eb123ed9a3ec024e01a4e4025e30a5e6126ef0a3ef66f4735b5e3359cb57c83f8932fc581f6993bfc2653c29dae96abc685dcb3356f2bbec2bde82ece737dea2b5c485bc98dbee62eea7dce91bd5acdc94cf65ab70c337fe7892f9db3432366c3dde0571d3e72df4b3d4e3af6e7af7e7bfce73ba1d2c5ad6d5cadadc627fa2ad7f3cf0fbdf8f71bdfb6acef0085f310eff89450440e003f795b50a69895f0c306abc08b0c90a2052810cb0eefc2811cd0660b388f3e0230348f1c11660f76b51fc4fe2443b12d5ca643e24cc4c0ba62a991a5de3363410a76278c4ad12c0f78ef534022e0588e3c02a1178874c22221798a4c62e66878619571344c22110cc57ca881943954256f5203d61776d5443d71d83164e2d81177ed3336611c8152f2ea19c8d6413eb11d869a632558e8924b3a060f8e6c680713e8a64f32b1304d74d31f15e8284832121196840b4a11e26c2e35ea2e76b28227680881994221fc66a970606a42a0c0b586c3946bcc0e82c6b9c7b572f68781052923353a465288c49c224561193924c649b0f5841c015c2578f241d1a0917d998b061779234b3295eb44bc679321321a9ba1121a9c118d5519a97810d53312915a66ac09b9d0986240d944dc0a9e0bc9319c6664a22cd43c182bd94ecec8433e9911b6e84e720aef892da13f90b458cdc29980935082241c72ddc311736db5b4e0965471f566681a7d2776a1b488c44696b243ffc491241e7dba57a75af035892c20a00500e3473f1201507dd3d0aa2dec464992254e3084f50d703792be233ea465c2db21a0e3c412b0508504d4f340a00920558a9e43b044c879493a2259d4a72755e72c9d29ffd53d328e95943f036835e8c57489c110e9bcc1465567685138ac80583538ab0850c4d8462ec7be1ca622651cca3f58c78710b538ad70fc5442bae29daaf9a121a871c84f0b508a9605a0bd6d0a2f570b275066548f0e8d504a0e4abb49cd3496702aa767b6b74bc9e5805b93ccda4205e9a33c32768977db27ea0b83871aefaa91d0b35056892af042d924f0ba9b74e8655d16fc4f822fc893092c656d4ab550de25f3bd9d59a0807bd851a2431abe8d1aed4fb886be3447b0082a311b0506dac4d013e4140d62196cbb25ceaaadeea99cdb5c5da6bb24d405a6a6fb2dca7d8bf206ac92e500a87b63015b93ac12f2b49011354979d5ad57c2143db303235a713a1da5d905e020dd196f7b7890e192143e9bc8afab614168d0aeb0cca79241ef531339156c4109bcbc44d2ac1c682a45cf095436d3eee25c25b0ed06c7232ee8813df7ce4dbe2047be090582a8d95715c83457c0430d506492358e34859f078d7a6c9e5c591b417e833601ace165aca72f27b51cc0d2f1b3bad202e500eff7944fdb28226ee982535c2061cbb2a1a440570d4603a879a16da17413425fd217987918b5fb80a19cd4905436b6b35298c96f685c483df9f420bd0982abfb67ac072639a621c37835a817174ada43dc707862838a5ae666e602bd7eb4ea4d179953719d4fa8cd73eab25ade5ef924b22d3b58864b3292ddb903b7d6865608264a7053cd57912e4dade15695ec4cc11bd7db24ba96239a171db299dd47ce3c2f1ead8b631362dd52963b67b9fa97a1a47b74aa853fc640d619992eb9cfb0350075354af4d70f941bd13108503d59a29633f2d1dafc09cba6fb32d48e0ad3bad11960598c0b2ed29bddcffef5694ef8a91c77aabf44dd9337a9fce752766aefcf6ac8a0710e2c801cda28ded317bf25bd08ccc5c6f12419f44ccac49174d4cacb329fc9eb2fa7fc0e1edaeaabb559054f168a3332a300502fd6962b1d8d24e204b75576e548447f50db2f4f5ba6e214e476ac8247661a0a1ac5dddd69c7fa8c5c312c6ae594da48286e1319847c5ac171dea7b10aa491e95c21664fa9374e8ed49e3816bda78d92c181421a078b5879c36209636f5024e82f1e5dbd78c24dc79202d204e773230da9214e4135012f1635095035079733e3d3c24ef1ed7049b762dcc651b3d579cac8aca3bdb9c79bde418da24e71449f3d055c883e54c58f6dbc94330a0c770515e579c03255120a8c244d5dcb2e95e34ede09f6be41a6ef012d19afe9f9af92932673ec01397bb7a9241b4a04a8a1aff2f1529fa879a7144bbf2099af47af358354203fa1d55376124a477451287325697b014564084760b57f77772016a02a7c864c0335b86e310459506f71f7985ec3577197797bc07085009505e5171a87325500cd7b26476cf34c58f4747ec7435747c70405f57501bb7366311cf7028e774a39c13089856a07529c7ed7228081d38aa71258500663017c65d5501585f20b16bc01d7595847ad1527387500850977fc5aa7847b917e62d58030a0358e257643475c5126c08401868145241287454a96f206a7485126b75595907801a87d58cb1978611a65595500b06266f85a488f7201350850ef7d7b65950607538fc7922978243838556f78c86396d06a01f78885556397db15165b5b47bc0e07435984601b48c68c916770288c7b68df7e85b51a964052874e7401c85425cf5991a86226a38283a419b83255983b22888275e78853480a3334676276867394b68ac0975058801026e85b97936428e97924341a87ec6c93868350893ac07588459a8ed7e72b48ad70e8ed80f33f7885108261a872505922020e8587463a988d4682d344535011d55988d8e01ac7df8064837e85017806487f20af7081401f187b80931f7e97991ec7da7e17c25501868f48d72ed76a7fd8416c65b00770277ce8a713e85b6103f277362019d8b989644287a05002781b5eef181d5e372041f7625ba6c01a87b97ee55c05565b55413413770e8a97de7d582016b7ad5e95a268856a0711a398f8eb1e390c7b75e65096131e83ba6341b759504c1705f496d7a51dd8d914d5f291344619371787346d8533a962876d5f24e08aa7c294199053523d72381116273b8c47b756d5f37ce5ee2937b00625e83289f352153223d70c7309ee7824d175374a5c898a61172889977d8965ce27577b84340d7cf89f3f18479dc4f09d34f78e52d53676c016b7de5752850885af75922431181d50295473689f3d91b758570d4f09911f58097093be2f09e83287d72005377b24eb8fc75c2eb8b96ee51167c7035cb9b33ca8a47972ac7245b381e890ef8501e29f87236c38885cd5839456c65da95b6ad44c03984d83728988853116a04254e8fc1b47ec7cd5811a980898255a5301b59ee25a8df9f11484f787a06011e8317cf3b694b21e8099271627b00bb8964341a86556c51305ef5ee4f585985e7e850884552b9c651671852f68934285293017d9f204a5939885950296639234950c2a562ce4556845b851e9d2ad525b35b7556847e42a414590a05c113ac657b7776bf8358e51bd5eb52238a9281885d36fd244ace6363d41b65f396c68850171a6924d172f7ff83e7c914e9d85726e46f78967824d26301a986722668d902236a5259562942b7601e20d85d1a2031f7b88422e831f764a0563394552a7ef028d70235d2878a68a337a9634652236a778a01b95bc01e9c0a5a4678d58920cf8038b9ac9a647459a1ac3a785c27fd41f8de91452501f49e9595d27e82d17f0a72a556b17801e240f9ce8122b69992d17f98ec50ba587c995c6552df75c97a6e88b01249834006571141d88e88a41b65458336341e45d8a1c9d79dc16e8f07f35788125350250cdaf20edabd7cda019767587a61c5aac053ab56924bd58478dab00250ff7adaddacda950e20bdaf202fa8c51415a96815a3096946e195983a6595be96378915baf56cf91d50e7b476b21e89f55512d9a6491a4340033f5398dd48e72d2c3ae85b37be627a781f58439558a5633a9175285ca241250556eef77d22701478d8a59242839762711b721e012f85623e8c7aea6f31678fc9222a980e763b0b2f01e116267491d56172b5a95d1b4dad917d90aa8779014982e7baaf799941f7b00891b682283036e770a0b6c8aa38522647ba739896bcd5792d17397c31f89da66f6504b49d85e371021f7db51f3dba226d34b49e85bfa0bacb7ab6b915417988dad70fb22679ea409702398c26428ab9507283863462398905b38ec26e4b0b226d8429923b51396adf75b5078422553d527d9b6b18ac65c26c83f8a529e23d341a045962a527e20849c26b6ab75ae817a489152a7937a4642078113d7e2b301868c5b367601d88aa8f52b68649b6864ab3671bfd5ec72ba29efa1aa0282b3f6179aa6823a11ae41016eb66f87113d379149339ae85b886a45c07d9de6f760035c065bec70c87b9b113d72f7a01c2b528649f31486368bea5515f9eeb5f96976e404bb11219e1190caa68446b2289e97322ac7cd50a8924689e9452a451428018b95f2b675e187c5347a67aa9054dea14175a0699722160225a94a4b717c799bb75bba5c2a26b597267db2ab95a5950652864282f7bcae19d474c48da96ae1617ae88bcb8cb5211e9347cc994865178b2a5d86382e55deb379c6556a9e41e80aa6885c88788f93f6f2b89b2e7785e6b21155611bf61571678bfa428b001b97823ba7253eb29b2b5f47601aa98350dba34f82a4b9eb48653aef53633cb7bd65e5cb27553f7ce1b57aeb2f8ab965c028931cad3de948715417a896a11e56145706f21ab4c03e7b325dbb40187be4635209ba09debba3c8c385394253f31529d4cef8bb232c607f4b27ac7992b7468f8401e798dbe6cfdb015e246b276cd9b35ad8ad326613985358daf5a0f51f8538f075c2b69d64ec86daa710a32bbea995a339c5604a5282e91225165ca81bee7014d02801ecb6117cb2c6891b7ad913d7649cc94199367984016f9d3116b7a1df9fa5d41df770631a46c7553326f955b556dc527be86cf8a8b5c08da446c938830fca68b757e4df4dea1e47ecfa23015dbbd4ea2da911d1a8f786a0b3aa019c95591e44ca4f5f332885ef29154427e0c04cec2289a93462f7a99b7ac6611e88bb49ba514c9a01f8a72d6d1551a5a7a7d0176a989d791b3a7489760b1e9468b67adb12287c5f59ec1957b90a985a289d188e7a6176c65355cc8321ac2aac13279515889ea91bc96a410a9257e1202b5b61027dcf85d573bc954e0799c4551f75d6683a5c2b51f7d18d6850ba8c99bbc0918abcc1ad7d1a1595e20ca34b2a98019f1a2f9544c83b96b01e195fc70a7e4468edb9765ea57d0a6311e1dd855a880d25532189c389dd4eccfaad72b9da6624d4b8cfcd7c2aadf4e7dee9f75a27a1601117a56c17cae11948f6ce6723b65c966928ad9f57223dabbc619595706817d5655925126848786a29ef614125942670145988be017cb1a0bc4d7ba3de6532392b8fb436672b620037571e63f8f07b374c284a408003f59675fd287b462fca386288faad0532217ad3647bea89c4d527cbb6b352d3dbb242963c2c49a18ad649bc077a1b7483e7a48750030b90113b4ea5418dab39705b412bb649d69c998592ad1e2bfcb75cc796505a2f4a942684eac3121eecd7025aadb12591d6cc902dced6014d586c05286843942631a57d2347ec2930fcaeb0162a7b6681d8dde1c1ad7cb88388cf9cf776dab47e31fa40e4c8da721f7596c9604554ae366fd2933e8ab515cfe95f7653abaef90f550b17b4fcd3a0d4e6a85ab46f31e08bbccf952e9b671507c5babeddddef80136a15a764aa7fa91e40b7479722aab6ad803efdac9661916eb7918f13abc229cb1b68a1e9d69972aaa61a8edbbcb1f0cd06e05f82f0527606d8016785cbf9ea5ccc25ad42dd61298a2d4c2e69d544cca3e6e54ab774cc276a60e1576493a63a8f277cbb882cbe95b375f9307c3deba2b6c5ca6662e3226c5aceeb692702a1a1eaa4ebac7b882d7d49f4493edf58015b8fbdc11125ec88dcd5b595029b1199af7b69d2832212f3e0ab99149a98a3eb07998d7dbc0ac85281095a8dd8f5b9016a01a7cdd6aba98d1aba59cd3b9c27deec91179ad728e601dfe81928c75bbfba7b7c3d1c7fb8cd5966cbf07e2517931e1a50b244a809b3875be0f152141aefcc85a3f5acde4104572d7517083467a0b376b581cf41dfe54ecf8dd18fd819d2fae92784e1e2c86e2415ad3d8b16e0af07706365f3e757cf4db17d9a6692824348e15698a097d3b986da8638b361a8bd5366504a41c8af07716781dce31e78a23545f6eb941e0849d9501cede59b3d4ff859cad488f6da7c1e975a97d49c37462a65a7550894da975a63069cef8740a81d7579fe435df576bed7bde26c158c5ea66a8aeb7b1981fd85aeb6a0f8ced7345258b5f920c0ecc483554160668ad35d354afac07a01386f76476f7f91aafda7a8a68a03f93bd35008138f173017b5250728748ffed952050bf5452cf6c7f845af235545baf57c1188cf6af545e4efca456a0e35cbfdda8798eac3d025a8a30641cc017cf4af6f7337a33b45c70ff7728ff7967a9d5ab501ce72eaf357bf4aa462965e356180776c66cf6c7e837b5ff7afa19a2b6893d356ef001d74911b56ac49513565031624280aaf834e3f0bf444057a49582e3817268a98f0f4114388051224280294e84385055e2c2822712bc18827911389b2916dc79f2d523c6993d02c448b0d5ea42a70d8adc2a44d46a4c9a0362d458bc68efc4a03b4eccc9b2796140982f824d6af317a1d3a039a66ddaa358ad41bb211e050bd35567d0bb0796b53a06f564d8b1656aedaa37baa9d99157c65d0a68b03355a2891f36e973fd236ab27b62147b0499ed519027fe5ef52b857173e89497951d4c96db60d9ad3b85160c097ae168a43f53845d67d5fd48d84d86be09c371fc679725733dfacbb272cecc2783fcac52327f6dc3adaadc6e283a3f59b5bb13e6de97513472f393079de9475af2efd92bfec6fdd9d03b4ab297fa0d2b5a183df9e7990f95ae4e3cf2044feeb8fa04fbe8b4c4da207e3eaa7a0ba8bcf20bade13cac043dafa3e0f340d835f29a8d2abbf6c20e6c3da2db3fc7bf091ccca8affe4c3e04b9caa30f283be0abb1da3ee2934d8cb9beb27c6031d02b9f4041d6dbdc67302b4bccafbee07cafe746d093815e34255a709eaceee24a04bf1d7b60f838052c1d09c6f66c91f8c8caba5e8fb5c6b20d2f33f8742efbca452d5a5ec44fc2543d24b42bca396fc7cc83c07142daec7aebb707943c2f4dfe5c0ecd4947ac3ccd3bc0446fc5c1f62b823ccfc673ce8eb7eefabc63522f4da458cd0745d01c47c223847cb85b9283973f1d6b8c805c474c3072b6d83b10b6c405c3c013511574449ab02985fd4a404d0ca0335c1315fc67a61bad0ec7d26d64629ac907a5cfc05fe69485dc30deaacdc051556c53b5c67b6c5a0d45e2bc54dfaeb43d259adfbc23b6feba11f5957b4b7bcb7acfc12f0508bb538bdb15fe3c35ade2be5c7f16b5d4c8059b033e5dcaf5ae44dab8f5c012594fd488dbd66bb5e3d2e39d36471dba17a453555d43e2e2bd4a7395c511b4471e48dab693befcc59b5f21659571d29773d6b742051b51504a478cb83c4ca4dd8399e053058afa5cf8d4a33bee31dd9ad74503bd6f6940b79cdf24d95dfb4d6cc74d866a82e93314763de06704445c4b0765713dc5a8d580946457f5e57c6cbffbf47ade4fbcb7395b45ceaaf3eb77b3a5515e935d3c1fd16b8efc6ab365a3d67ec0c7fe1c44fa47acf9bd489ff5cb3f4ac3ceddecd32f46dc556a39c4f67579c1540b71fbee7ebe876d29e6f35856c56a7cb6e3f4044b9c682d869df151f047729947475e56396c5184147d3feea79d6f6a5d65f877a93be3bb14cb53cd9616ec7bc267f54ae93ed676fd9f463dfeef2325241e23654e291bd2831521416ea95ebb3f02eefcd7d828d0ed614b0af812e6958f20650dee4fe2c903f0975ca5c1c90e6bba80e2aea4124ee909c386b2b99a5ac4c0c4b0ede25e1ba813c2e6dc3dec374a66320b859a97e8b1b50ac28c821069c253c124a9b78b7234b6dcf8e6504ad9582278cb0254f2c6014d398034513b1a5f8e56fcbff06bc55fc2a71be646d9aef4c03d5cf1a220036859a9719e4c76bbcf520588263b818fc23a2c9590a4d56896e89e6b4cb31c19a0e21a96558ca88ab22c020b37184cc9a52d238ced031765c9281d6c6d5a49e2eefea5bfac953d6766a305d8bce456bcec8d6156c1da938417e33291af072ff214db0bd6e7a44ed09f40ebd3278ef823455642b18544bfd9cefef6fb4635fca179837f960dc221a1a1d2f794c2e89427474b1932bc0b7583cc1101f75a90e92359644ac9df03a8aca076fb4b55db6f87fc498342a12aa442f370a405d8829edd53738e89b2d9d095fa2ee4e0328502afdcc207cead35da2352c2fbd23f972ac4e86fc13d63e21bf656202d3a83755ce4ec14aa58cfc179dbca612b8325b8161b4f2ebda486f105259e19564a4660db50fb0bd52df3e6bee83ba6afd3e3d6e838f1d5654e6b5a3de5ac3f0646b69a9a4d5262a9d1d06953549dc0dd580342592759dd4532bf4d8dfa81a5c07744c4c5fd0565c473e43919c4b64a5c4d2492375b1de79c4fc557ac7773971857a4bb4b317da98714dc8a68666ef9c1aa7d4b877417d70369e4c5e19e29a61520945d845e2bf8d5f677f3be9757744d1d850d8fa5156454f63a60458adea07e51819bb6985f397acfa16fda2a8d1d58a0b3e9537b7295ea20d6c956326abc054da3035a1ba8e03f89cc84b1a5db8239e724d7bee43391657da9d6a876d28d2d4fae2341e045696f99ed2dc4a98cd158ec192b5c3e929448c57a9e6cf950a51995dba58adb9e3f8863405911b5b41d05ae2d5af75c820e4a8d72cad005740e94d11faca42c11117887964b5a121d9bbc67aa2fd97b582238cf7fa5236ac034e94a1e0fa49d7cfe6059ba3daf0a9cc0938d7a59645bf542be339f632bfcac7767e523e17d47894b061d3dbb991e36e917c84c055175ecaa77c729f595c95d403361673e2f0661d152fc08a7876961c726481b554625a09b170c9ac6879eaa36901a5da7e9b8d5fcef4e6908000b3
+EOL
+
+
+
+use DBI;
+
+
+
+
+
+
+
+
+
+
+$way="";
+#######
+## se houver cookie login ent�o verifica se o cookie lid( login id) consta na 
base de dados e se o tempo de login
+## � inferior ao tempo-300s (caso tenham passado 5 minutos o login deixa de 
ser valido
+## se tudo estiver correcto ent�o actualiza a data do ultimo acesso na table 
de utilizadores e activa a variavel $way
+## para logged
+if($COOKIE{login}) {
+       $db=DBI->connect("dbi:$dbdriver:dbname=$dbname","$dbuser","$dbpass");
+       $sth=$db->prepare("select * from userinfo where 
userid='\Q$COOKIE{login}\E' and lid='$COOKIE{lid}'");
+       $sth->execute;
+       if($sth->rows>0) {
+               $db->do("update userinfo set lldate='".time."' where 
userid='\Q$COOKIE{login}\E'");
+               if($QUERY_STRING{sair} eq $COOKIE{lid}) {
+                       $db->do("update userinfo set lid='0' where 
userid='\Q$COOKIE{login}\E'");
+                       cookie("login",$POST{username},"now");
+                       cookie("lid","$lid","now");
+               } else {
+                       $way="logged";
+                       cookie("login",$COOKIE{username},"+5m");
+                       cookie("lid","$COOKIE{lid}","+5m");
+               };
+
+       };
+       $sth->finish;
+       $db->disconnect;
+};
+if($QUERY_STRING{adduser}) {
+       $way="adduser";
+};
+
+
+
+########
+## metodo login se for enviado o pedido de login ent�o vai verificar se a 
entrada username & password consta na
+## base de dados se constar ent�o actualiza a base de dados com o novo login 
id (lid) e activa o cookie login e loginid
+## Se o login tiver activo manda uma resposta ao utilizador indicando que n�o 
pode refazer o login at� estar 
+## desactivo, excepto se o login id for diferente (problema do refresh)
+##
+if($POST{login} and $way ne "logged") {
+       $lid=int(rand()*100)+1;
+       $db=DBI->connect("dbi:$dbdriver:dbname=$dbname","$dbuser","$dbpass");
+       $sth=$db->prepare("select * from userinfo where 
userid='\Q$POST{username}\E' and password='\Q$POST{passwd}\E'");
+       $sth->execute;
+       if($sth->rows>0) {
+               $res=$sth->fetchrow_hashref;
+               if(time>($res->{lldate}+300) or $res->{lid} eq "0") {
+                       cookie("login",$POST{username},"+5m");
+                       cookie("lid","$lid","+5m");
+                       $db->do("update userinfo set lid='$lid', 
lldate='".time."' where userid='\Q$POST{username}\E'");
+                       $COOKIE{login}=$POST{username};
+                       $COOKIE{lid}=$lid;
+                       $way="logged";  
+               } else {
+                       $errorway="norelogin";  
+               };
+
+       }else {
+               $errorway="invalidlog"; 
+       };
+       $sth->finish;   
+       $db->disconnect;
+
+};
+cookie("teste1",$POST{username},"+5m");
+cookie("teste4","conas","+10m");
+if($POST{adduser}) {
+       $way="adduser";
+       if($POST{passwd} ne $POST{repasswd}) {
+               $errorway="nomatch";
+       } else {
+               if($POST{username} eq "") {
+                       $errorway="emptylogin";
+               } else {
+                       
$db=DBI->connect("dbi:$dbdriver:dbname=$dbname","$dbuser","$dbpass");
+                       $sth=$db->prepare("select * from userinfo where 
userid='\Q$POST{username}\E'");
+                       $sth->execute;
+                       if($sth->rows>0) {
+                               $errorway="exists";
+                       } else {
+                               $db->do("insert into userinfo 
(userid,password,nome,email,phone) 
values('\Q$POST{username}\E','\Q$POST{passwd}\E','\Q$POST{name}\E','\Q$POST{email}\E','\Q$POST{phone}\E')");
+                               enviarnoticia("Bem vindo ao $softversion, Est� 
a iniciar como novo utilizador e provavelmente precisa de ajuda, o sistema ir� 
mandar dicas atrav�s das noticias, por agora tente criar a sua equipe pelo menu 
equipe e depois escolha os jogadores..., foram debitados 2000cts na sua conta 
principal(nota: AS NOTICIAS SERAO AUTO-REMOVIDAS DEPOIS DE 10Minutos DA SUA 
DATA DE LEITURA)",$POST{username});
+                               do {
+                                       $id=int(rand()*200000);
+                                       $sth=$db->prepare("select * from conta 
where id='$id'");
+                                       $sth->execute;
+                               }while($sth->rows);
+                               $db->do("insert into conta (id,userid,value) 
values('\Q$id\E','\Q$POST{username}\E','2000')");
+                               $way="";
+                       };
+               };
+       };
+};
+
+
+
+
+#COOKIES
+#print "Date: ".mydate("%a, %d %b %Y %H:%M:%S %Z",0)."\n";     
+#print "Cona: ".mydate("%a, %d %b %Y %H:%M:%S %Z",0)."\n";     
+
+## este metedo apenas indica para o carregamento de imagens se o parametro img 
tiver ligado ent�o uploada 
+## a imagem escolhida
+##
+if($QUERY_STRING{img}) {
+       #print "Accept-ranges: bytes\n";        
+       #print "Content-length: ".length($img{$QUERY_STRING{img}})."\n";        
+       print "Content-type: image/gif\r\n\r\n";
+       print pack("h*",$img{$QUERY_STRING{img}});
+       exit;
+};
+
+
+
+## ---------------------------------------------- FUNCOES 
----------------------------------------##
+## funcoes especificas
+## imprime a p�gina do login
+##
+sub printlogin {
+       print "<HTML>\n<HEAD>\n<TITLE> footaid login</title>\n</HEAD>\n";
+       print "<BODY background='$ENV{SCRIPT_NAME}?img=bg'>\n";
+       print "<FORM METHOD='POST' ACTION='$ENV{SCRIPT_NAME}'>\n";
+       print "<TABLE width=100% cellspacing=0 height='100%' border=0>\n";
+       print "<TR><TD bgcolor='bb8800' height=90 align=center 
valign='center'>\n";
+       print "<table width=400 height=80 border=0 
bgcolor='efefef'><TR><TD><img 
src='$ENV{SCRIPT_NAME}?img=logo'></TD></TR></TABLE>\n";        
+       print "</TD></TR>\n";
+       print "<TR><TD valign='center' align='center' height=100% 
bgcolor='008800'>\n";
+               print "<font color='FF0000'>Ter� de terminar a outra sess�o ou 
esperar 5 minutos</font><BR><BR>" if ($errorway eq "norelogin");
+               print "<font color='FF0000'>Login inv�lido</font><BR><BR>" if 
($errorway eq "invalidlog");
+               print "<TABLE bgcolor='000000' cellspacing=2 
cellpadding=0><TR><TD>\n";
+               print "<TABLE border=0 cellspacing=0 cellpadding=3 
bgcolor='EFEFEF'>\n";
+               print "<TR><TD> Login:</TD><TD><input type=text name='username' 
size=14 maxlength=14 value='$COOKIE{username}'></TD></TR>\n";
+               print "<TR><TD> Password:</TD><TD><input type=password 
name='passwd' size=14 maxlength=14></TD></TR>\n";
+               print "<TR><TD colspan=2 align=left><table border=0 
cellpadding=0 cellspacing=0><TR><TD><input type=submit name='login' 
value='Entrar'></TD><TD><input type=button 
onclick='parent.location=\"$ENV{SCRIPT_NAME}?adduser=1\"' value='Adicionar 
utilizador'></TD></TR></TABLE></TD></TR>\n";      
+               print "</TABLE>\n";
+               print "</TD></TR></TABLE>\n";
+       print "</TD></TR>\n";
+       print "</TABLE>\n";
+       print "</FORM>\n";
+       print "</BODY>\n</HTML>";
+};
+## pagina adicionar utilizador
+##
+##
+sub printadduser {
+       print "<HTML>\n<HEAD>\n<TITLE> footaid login</title>\n</HEAD>\n";
+       print "<BODY background='$ENV{SCRIPT_NAME}?img=bg'>\n";
+       print "<TABLE width=100% cellspacing=0 height='100%' border=0>\n";
+       print "<TR><TD bgcolor='bb8800' height=90 align=center 
valign='center'>\n";
+       print "<table width=400 height=80 border=0 
bgcolor='efefef'><TR><TD><img 
src='$ENV{SCRIPT_NAME}?img=logo'></TD></TR></TABLE>\n";        
+       print "</TD></TR>\n";
+       print "<TR><TD valign='center' align='center' height=100% 
bgcolor='008800'>\n";
+       print "<FORM METHOD='POST' ACTION='$ENV{SCRIPT_NAME}'>\n";
+               print "<font color='ff0000'>Login j� existente por favor 
escolha outro</font>" if ($errorway eq "exists");
+               print "<font color='ff0000'>Password n�o � igual</font>" if 
($errorway eq "nomatch");
+               print "<font color='ff0000'>O campo login n�o pode estar 
vazio</font>" if ($errorway eq "emptylogin");
+               print "<TABLE bgcolor='000000' cellspacing=2 
cellpadding=0><TR><TD>\n";
+               print "<TABLE border=0 cellspacing=0 cellpadding=3 
bgcolor='EFEFEF'>\n";
+               print "<TR><TD> ";
+               print ."<font color='FF0000'>*</font>" if ($errorway eq 
"exists");
+               print "Login: </TD><TD><input type=text name='username' size=14 
maxlength=13 value='$POST{username}'></TD></TR>\n";     
+               print "<TR><TD> Nome de utilizador:</TD><TD><input type=text 
name='name' value='$POST{name}'></TD></TR>\n";
+               print "<TR><TD> E-mail:</TD><TD><input type=text name='email' 
maxlength=160 value='$POST{email}'></TD></TR>\n";
+               print "<TR><TD> Telefone:</TD><TD><input type=text name='phone' 
maxlenght=13 value='$POST{phone}'></TD></TR>\n";        
+               print "<TR><TD> Password:</TD><TD><input type=password 
name='passwd' size=14 maxlength=14></TD></TR>\n";
+               print "<TR><TD> Re-Password:</TD><TD><input type=password 
name='repasswd' size=14 maxlength=14></TD></TR>\n";
+               print "<TR><TD colspan=2 align=left><table border=0 
cellspacing=0 cellpadding=0><TR><TD><input type=button 
onclick='parent.location=\"$ENV{SCRIPT_NAME}?\&rid=".int(rand()*100)."\"' 
value='<- Voltar'></TD><TD><input type=submit name='adduser' 
value='adicionar'></TD></TR></TABLE></TD></TR>\n";    
+               print "</TABLE>\n";
+               print "</TD></TR></TABLE>\n";
+       print "</FORM>\n";
+       print "</TD></TR>\n";
+       print "</TABLE>\n";
+
+};
+
+
+## enviar noticia
+## func��o enviar noticia;
+sub enviarnoticia {
+       $noticia=shift;
+       $useridto=shift;        
+       if(!$useridto) {
+               $sth=$db->prepare("select * from userinfo");
+               $sth->execute;
+               while($res=$sth->fetchrow_hashref) {
+                       $useridto=$res->{userid};
+                       do {
+                               $id=int(rand()*200000);
+                               $sth1=$db->prepare("select * from noticia where 
id='$id'");
+                               $sth1->execute;
+                       }while($sth1->rows);
+                       $db->do("insert into noticia (id,useridto,noticia,date) 
values('\Q$id\E','\Q$useridto\E','\Q$noticia\E','".time()."')");
+               };
+       }else {
+               do {
+                       $id=int(rand()*200000);
+                       $sth1=$db->prepare("select * from noticia where 
id='$id'");
+                       $sth1->execute;
+               }while($sth1->rows);
+               $db->do("insert into noticia (id,useridto,noticia,date) 
values('\Q$id\E','\Q$useridto\E','\Q$noticia\E','".time()."')");
+       };
+
+};
+
+## subfunc��o game (pagina inicial)
+## � aqui que decorre a 'ac��o' do jogo
+##
+sub game {
+## Menu de cima com os icons   
+##
+       $db=DBI->connect("dbi:$dbdriver:dbname=$dbname","$dbuser","$dbpass");
+       $sth=$db->prepare("select * from userinfo where 
userid='\Q$COOKIE{login}\E'");
+       $sth->execute;
+       $res=$sth->fetchrow_hashref;
+       print "<HTML><HEAD><TITLE>$softversion\n</TITLE></HEAD>\n";
+       print "<BODY background='$ENV{SCRIPT_NAME}?img=bg' bgcolor=111111>\n";
+       print "<font face='Verdana' color='FFFF00'>\n"; 
+       print "<TABLE width=100% border=0 bgcolor='008800'>\n";
+       print "<TR><TD bgcolor='bb8800' height=90 align=center 
valign='center'>\n";
+       print "<table width=400 height=80 border=0 
bgcolor='efefef'><TR><TD><img 
src='$ENV{SCRIPT_NAME}?img=logo'></TD></TR></TABLE>\n";        
+       print "</TD></TR>\n";
+       print "<TR><TD height='20px' bgcolor='EFEFEF' valign='center'>\n";
+       print   "<TABLE border=0 height='20px' cellspacing=1 
cellpadding=0><TR>";
+       print           "<TD>Football menu:\&nbsp;\&nbsp;</TD>\n";
+       print           "<TD>[</TD>\n"; 
+       print           "<TD bgcolor='CFCFDF'><a 
href='$ENV{SCRIPT_NAME}?rid=".int(rand()*100)."'><img width=20 height=20 
border=0 alt='Inicio' src='$ENV{SCRIPT_NAME}?img=home'></a></TD>\n";
+       print           "<TD bgcolor='CFCFDF'><a 
href='$ENV{SCRIPT_NAME}?subway=msg'><img width=20 height=20 border=0 
alt='mensagens' src='$ENV{SCRIPT_NAME}?img=msg'></a></TD>\n";
+       print           "<TD bgcolor='CFCFDF'><a 
href='$ENV{SCRIPT_NAME}?subway=forum'><img width=20 height=20 border=0 
alt='forum' src='$ENV{SCRIPT_NAME}?img=forum'></a></TD>\n";
+       print           "<TD bgcolor='CFCFDF'><a 
href='$ENV{SCRIPT_NAME}?sair=$COOKIE{lid}'><img width=20 height=20 border=0 
alt='sair' src='$ENV{SCRIPT_NAME}?img=sair'></a></TD>\n";
+       print           "<TD>][</TD>\n";
+       print           "<TD bgcolor='CFCFDF'><a 
href='$ENV{SCRIPT_NAME}?subway=conta'><img width=20 height=20 border=0 
alt='conta' src='$ENV{SCRIPT_NAME}?img=conta'></a></TD>\n";
+       print           "<TD bgcolor='CFCFDF'><a 
href='$ENV{SCRIPT_NAME}?subway=team'><img width=20 height=20 border=0 
alt='equipa' src='$ENV{SCRIPT_NAME}?img=equipa'></a></TD>\n";
+       print           "<TD bgcolor='CFCFDF'><a 
href='$ENV{SCRIPT_NAME}?subway=jogador'><img width=20 height=20 border=0 
alt='jogadores' src='$ENV{SCRIPT_NAME}?img=jog'></a></TD>\n";
+       print           "<TD>]</TD>\n";
+       print "<TD>\&nbsp;\&nbsp;".mydate("%a, %d %b %Y %H:%M").", <font 
color='444444'>$COOKIE{login}</font>";
+       print   "</TR></table>\n";
+       print "</TD></TR><TR><TD valign='top'><font face='Verdana' 
color='FFFF00'>\n";
+       $sth->finish;
+## conforme a escolha
+##
+
+### ecran conta
+##
+#
+       if($QUERY_STRING{subway} eq "conta") {
+               print "<CENTER><font size=6 
face='Verdana'><B>Conta</B></font><hr></CENTER><BR><BR>\n";
+               $sth=$db->prepare("select * from conta where 
userid='$COOKIE{login}'");
+               $sth->execute;
+               if($sth->rows) {
+                       $res=$sth->fetchrow_hashref;
+                       print "Conta id: <B>$res->{id}</B> Contem um saldo de 
<B>$res->{value}cts</B><BR><BR>\n";
+               };
+       };
+       if($QUERY_STRING{subway} eq "jogador") {
+               if($POST{treino}) {
+                       print "Treino<BR>\n";
+                       $sth=$db->prepare("select * from treino where 
jogid='\Q$POST{nome}\E'");
+                       $sth->execute;
+                       if($sth->rows) {
+                               print "Jogador j� se encontra em treino\n";
+                       } else {
+                               $db->do("insert into treino 
(jogid,treino,fdate,date) 
values('\Q$POST{nome}\E','\Q$POST{what}\E','".mydate("%g","+$POST{days}d")."','".time()."')");
+                               $db->do("update jogador set doing='1' where 
nome='\Q$POST{nome}\E'");   
+                       };
+
+               };
+               print "<CENTER><font size=6 
face='Verdana'><B>Jogadores</B></font><hr></CENTER><BR><BR>\n";
+               if($QUERY_STRING{mostrar}) {
+                       $sth=$db->prepare("select * from jogador where 
nome='$QUERY_STRING{mostrar}'");
+                       $sth->execute;  
+                       if($sth->rows) {        
+                               $res1=$sth->fetchrow_hashref;
+                               print "<FORM method='POST'>\n"; 
+                               print "Equipa: <B>$res1->{equipaid}</B>\n";     
+                               print "<TABLE border=0 bgcolor='000000' 
cellspacing=0 cellpadding=1><TR><TD>\n";        
+                               print "<TABLE border=0 bgcolor='FFFFEE' 
cellspacing=0 cellpadding=0>\n";        
+                               print "<TR 
bgcolor='EEEEFF'><TD>Nome:</TD><TD><B>$res1->{nome}</B></TD></TR>\n";
+                               print "<TR><TD>Velocidade:</TD><TD>\n";
+                               for $i (0 .. 10) {
+                                       if($i<($res1->{vel}/100)) {
+                                               print "<img width=15 height=15 
src='$ENV{SCRIPT_NAME}?img=redball'>\n";
+                                       } else {
+                                               print "<img width=15 height=15 
src='$ENV{SCRIPT_NAME}?img=blackball'>\n";
+                                       };
+                               };
+                               print "</TD></TR>\n";
+                               print "<TR><TD>For�a:</TD><TD>\n";
+                               for $i (0 .. 10) {
+                                       if($i<($res1->{forc}/100)) {
+                                               print "<img width=15 height=15 
src='$ENV{SCRIPT_NAME}?img=redball'>\n";
+                                       } else {
+                                               print "<img width=15 height=15 
src='$ENV{SCRIPT_NAME}?img=blackball'>\n";
+                                       };
+                               };
+                               print "</TD></TR>\n";
+                               print "<TR><TD>Agilidade:</TD><TD>\n";
+                               for $i (0 .. 10) {
+                                       if($i<($res1->{agi}/100)) {
+                                               print "<img width=15 height=15 
src='$ENV{SCRIPT_NAME}?img=redball'>\n";
+                                       } else {
+                                               print "<img width=15 height=15 
src='$ENV{SCRIPT_NAME}?img=blackball'>\n";
+                                       };
+                               };
+                               print "</TD></TR>\n";
+                               print "<TR><TD>Eficacia:</TD><TD>\n";
+                               for $i (0 .. 10) {
+                                       if($i<($res1->{efi}/100)) {
+                                               print "<img width=15 height=15 
src='$ENV{SCRIPT_NAME}?img=redball'>\n";
+                                       } else {
+                                               print "<img width=15 height=15 
src='$ENV{SCRIPT_NAME}?img=blackball'>\n";
+                                       };
+                               };
+                               print "</TD></TR>\n";
+                               print "<TR><TD>Expriencia:</TD><TD>\n";
+                               for $i (0 .. 10) {
+                                       if($i<($res1->{exp}/100)) {
+                                               print "<img width=15 height=15 
src='$ENV{SCRIPT_NAME}?img=redball'>\n";
+                                       } else {
+                                               print "<img width=15 height=15 
src='$ENV{SCRIPT_NAME}?img=blackball'>\n";
+                                       };
+                               };
+                               print "</TD></TR>\n";
+                               print "<TR><TD>Adapta��o:</TD><TD>\n";
+                               for $i (0 .. 10) {
+                                       if($i<($res1->{fel}/100)) {
+                                               print "<img width=15 height=15 
src='$ENV{SCRIPT_NAME}?img=redball'>\n";
+                                       } else {
+                                               print "<img width=15 height=15 
src='$ENV{SCRIPT_NAME}?img=blackball'>\n";
+                                       };
+                               };
+                               print "</TD></TR>\n";
+                               print "<TR><TD>Posi��o</TD><TD>\n";
+                               $sth1=$db->prepare("select * from pos where 
id='$res1->{tipo}'");
+                               $sth1->execute;
+                               $res2=$sth1->fetchrow_hashref;
+                               print "<B>$res2->{namepos}</B>\n";
+                               print "</TD></TR>\n";
+                               print "<TR><TD>Fazer:</TD><TD>\n";
+                               $sth1->finish;
+                               $sth1=$db->prepare("select * from doing where 
id='$res1->{doing}'");
+                               $sth1->execute;
+                               $res2=$sth1->fetchrow_hashref;
+                               print "<B>$res2->{dowhat}</B>\n";
+                               print "</TD></TR>\n";
+                               $sth1->finish;
+                               $sth1=$db->prepare("select * from equipa where 
userid='$COOKIE{login}'");
+                               $sth1->execute;
+                               $res=$sth1->fetchrow_hashref;
+                               $sth1->finish;
+                               print 
"<TR><TD>Ordenado:</TD><TD><B>$res1->{ordenado}cts/m�s</B></TD></TR>\n";
+                               print "<input type=hidden name='nome' 
value='$res1->{nome}'>\n";
+                               if(($res1->{equipaid} eq $res->{equipaid}) and 
($res1->{doing} ne "1")) {
+                                       print "<TR><TD colspan=2>\n";
+                                       print "<select name=what>\n";
+                                       print "<option 
value='vel'>Velocidade\n";
+                                       print "<option value='forc'>For�a\n";
+                                       print "<option value='agi'>Agilidade\n";
+                                       print "<option value='efi'>Eficacia\n";
+                                       print "</select>\n";
+                                       print "Dias: <input type=text size=2 
maxlength=2 name='days' value='01'>\n";
+                                       print "<input type=submit name='treino' 
value='Treinar'></TD></TR>\n"; 
+                               } 
+                               if($res1->{equipaid} ne $res->{equipaid}){
+                                       print "<TR><TD colspan=2>Valor: <input 
type=text size=4 maxlength=4 name=valor value='0000'>cts <input type=submit 
name='comprar' value='comprar'>\n";
+                               };
+                               print "</TABLE>\n";
+                               print "</TD></TR></TABLE><BR>\n";
+                       };
+               }else {
+                       print "<BR>\n";
+                       $sth=$db->prepare("select * from jogador");
+                       $sth->execute;
+                       while($res=$sth->fetchrow_hashref) {
+                               $urlname=$res->{nome};
+                               $urlname =~ s/ /%20/g;
+                               print "Nome: <a 
href='$ENV{SCRIPT_NAME}?subway=jogador\&mostrar=$urlname'><B>$res->{nome}</B></a>
 equipa: <B>$res->{equipaid}</B><BR>\n";
+                       };
+                       print "<BR>\n";
+               };
+       };
+
+### ecran equipa
+##
+#
+       if($QUERY_STRING{subway} eq "team") {
+               print "<CENTER><font size=6 
face='Verdana'><B>Equipa</B></font><hr></CENTER><BR><BR>\n";
+               if($POST{criar}) {
+                       $sth=$db->prepare("select * from equipa where 
lower(equipaid)=lower('\Q$POST{equipa}\E')");
+                       $sth->execute;
+                       if($sth->rows) {
+                               print "<font color='FF0000'>Nome de equipa 
existente</font><BR>\n";
+                       } else {
+                               $db->do("insert into equipa (equipaid,userid) 
values('\Q$POST{equipa}\E','\Q$COOKIE{login}\E')");
+                       };
+               };
+               if($POST{simcria}) {
+                       $sth=$db->prepare("select * from jogador where 
lower(nome)=lower('$POST{nome}')");
+                       $sth->execute;
+                       if($sth->rows) {
+                               print "<font color='FF0000'>Nome de jogador 
existente</font><BR>";
+                       }else {
+                               $sth=$db->prepare("select * from conta where 
userid='$COOKIE{login}'");
+                               $sth->execute;
+                               if($sth->rows) {
+                                       $res=$sth->fetchrow_hashref;
+                                       $contaval=$res->{value};        
+                               };
+                               $val=100;
+                               $val+=($POST{vel}*150);
+                               $val+=($POST{for}*150);
+                               $val+=($POST{agi}*150);
+                               $val+=($POST{efi}*150);
+                               $contaval-=$val;
+                               if($contaval>0) {
+                                       $sth=$db->prepare("select * from equipa 
where userid='$COOKIE{login}'");
+                                       $sth->execute;
+                                       $res=$sth->fetchrow_hashref;
+                                       $db->do("insert into jogador 
(nome,equipaid,vel,forc,agi,efi,tipo) 
values('\Q$POST{nome}\E','\Q$res->{equipaid}\E','".($POST{vel}*100)."','".($POST{for}*100)."','".($POST{agi}*100)."','".($POST{efi}*100)."','$POST{pos}')");
+                                       $db->do("update conta set 
value='$contaval' where userid='$COOKIE{login}'");
+                                       $db->do("update equipa set 
jogdisp='".($res->{jogdisp}-1)."' where userid='$COOKIE{login}'");
+                                       enviarnoticia("$COOKIE{login} Criou o 
jogador $POST{nome}");
+                               } else {
+                                       print "<font color='FF0000'>N�o contem 
fundos suficientes para criar este jogador</font><BR>\n";
+                               };
+                       };
+
+               };
+               if($POST{criarjog}) {
+                       if($POST{nome} ne "") {
+                               $sth=$db->prepare("select * from jogador where 
lower(nome)=lower('$POST{nome}')");
+                               $sth->execute;
+                               if($sth->rows) {
+                                       print "<font color='FF0000'>Nome de 
jogador existente</font><BR>";
+                                       print "<form><input type=button 
onclick='parent.location=\"javascript:history.go(-1)\"' value='<- 
Voltar'><HR>\n";
+                               }else {
+                                       $val=100;
+                                       $val+=($POST{vel}*150);
+                                       $val+=($POST{for}*150);
+                                       $val+=($POST{agi}*150);
+                                       $val+=($POST{efi}*150);
+                                       print "Vai gastar $val cts ao criar o 
jogador <B>$POST{nome}</B> deseja continuar?<BR>";
+                                       print "Velocidade:<B>$POST{vel}</B> 
For�a: <B>$POST{for}</B> Agilidade: <B>$POST{agi}</B> Eficacia: 
<B>$POST{efi}</B><BR>\n";
+                                       print "<form method='POST'>\n";
+                                       print "<input type=hidden name=nome 
value='$POST{nome}'>\n";
+                                       print "<input type=hidden name=vel 
value='$POST{vel}'>\n";
+                                       print "<input type=hidden name=for 
value='$POST{for}'>\n";
+                                       print "<input type=hidden name=agi 
value='$POST{agi}'>\n";
+                                       print "<input type=hidden name=efi 
value='$POST{efi}'>\n";
+                                       print "<input type=hidden name=pos 
value='$POST{pos}'>\n";
+                                       print "<input type=submit 
name='simcria' value='sim'>";
+                                       print "<input type=button 
onclick='parent.location=\"$ENV{SCRIPT_NAME}?subway=team\&rid=".int(rand()*100)."\"'
 value='nao'>";
+                                       print "</form><HR>\n";
+                               };
+                               $sth->finish;
+                       } else {
+                               print "<font color='FF0000'>Tem que dar nome ao 
jogador</font><BR>";
+                               print "<form><input type=button 
onclick='parent.location=\"javascript:history.go(-1)\"' value='<- 
Voltar'><HR>\n";
+                       };
+               };
+               $sth=$db->prepare("select * from equipa where 
userid='$COOKIE{login}'");
+               $sth->execute;
+               if($sth->rows) {
+                       $res=$sth->fetchrow_hashref;
+                       $sth->finish;
+                       print "<B>Equipa $res->{equipaid}</B><BR>\n";
+                       $sth=$db->prepare("select * from jogador where 
equipaid='$res->{equipaid}' order by tipo ASC");
+                       $sth->execute;
+                       ## Mostrar jogador
+                       if($sth->rows) {        
+                               while($res1=$sth->fetchrow_hashref) {
+                                       $sth1=$db->prepare("select * from pos 
where id='$res1->{tipo}'");
+                                       $sth1->execute;
+                                       $res2=$sth1->fetchrow_hashref;
+                                       $urlname=$res1->{nome};
+                                       $urlname=~s/ /%20/g;
+                                       print "\&nbsp;\&nbsp;Nome: <a 
href='$ENV{SCRIPT_NAME}?subway=jogador\&mostrar=$urlname'><B>$res1->{nome}</B></a>
 ($res2->{namepos})<BR>\n";                             
+                                       $sth1->finish;
+                               };
+                               $sth->finish;
+                               print "<HR>\n";
+                       } else {
+                               print "N�o se encontram jogadores na sua 
equipa<BR><BR>\n";
+                       };
+                       if($res->{jogdisp}>0) { 
+                               if($QUERY_STRING{criarjog}) {
+                                       print "<HR><B>Criar jogador</B><BR>\n"; 
+                                       print "<FORM method=post 
action='$ENV{SCRIPT_NAME}?subway=team'>\n";
+                                       print "<table bgcolor=000000 
cellspacing=0 cellpadding=1><TR><TD>\n";   
+                                       print "<TABLE bgcolor='EFEFEF' 
cellspacing=0 cellpadding=0>\n";
+                                       print "<TR><TD>Nome:</TD><TD><input 
type=text name='nome'></TD></TR>\n";
+                                       print "<TR><TD>Velocidade</TD><TD>\n";
+                                       for $i (0 .. 10) {
+                                               print "<input type=radio 
name='vel' value='$i'>\n";
+                                       };
+                                       print "</TD></TR>\n";   
+                                       print "<TR><TD>For�a</TD><TD>\n";
+                                       for $i (0 .. 10) {
+                                               print "<input type=radio 
name='for' value='$i'>\n";
+                                       };
+                                       print "</TD></TR>\n";   
+                                       print "<TR><TD>Agilidade</TD><TD>\n";
+                                       for $i (0 .. 10) {
+                                               print "<input type=radio 
name='agi' value='$i'>\n";
+                                       };
+                                       print "</TD></TR>\n";   
+                                       print "<TR><TD>Eficacia</TD><TD>\n";
+                                       for $i (0 .. 10) {
+                                               print "<input type=radio 
name='efi' value='$i'>\n";
+                                       };
+                                       print "</TD></TR>\n";   
+                                       print "<TR><TD>Posi��o</TD><TD>\n";
+                                       $sth=$db->prepare("select * from pos");
+                                       $sth->execute;
+                                       print "<select name=pos>\n";
+                                       while($res=$sth->fetchrow_hashref) {
+                                               print "<option 
value='$res->{id}'>$res->{namepos}</option>\n";
+                                       };
+                                       print "</select>\n";
+                                       print "</TD></TR>\n";
+                                       print "<TR><TD colspan=2 
align='left'><input type=button 
onclick='parent.location=\"$ENV{SCRIPT_NAME}?subway=team\&rid=".int(rand()*100)."\"'
 value='<- Voltar'><input type=submit name=criarjog value='Criar'></TD></TR>\n";
+                                       print "</TABLE>\n";
+                                       print "</TD></TR></TABLE>\n";   
+                                       print "</form>\n";
+                                       print "<HR>";
+                               } else {
+                                       print "<form><input type=button 
onclick='parent.location=\"$ENV{SCRIPT_NAME}?subway=team\&criarjog=1\&rid=".int(rand()*100)."\"'
 value='Criar jogador'></form>\n";
+                               };
+                       };
+               } else {
+                       print "Ainda n�o tem ainda uma equipa, escreva os dados 
para cria-la<BR>\n";    
+                       print "<FORM method='POST' 
action='$ENV{SCRIPT_NAME}?subway=team'>\n";
+                       print "<table border=0 cellspacing=0 cellpading=1 
bgcolor='000000'><TR><TD>";
+                       print "<table bgcolor='EFEFEF' cellspacing=0 
cellpadding=0 border=0>\n";
+                       print "<TR><TD> Nome de equipa: </TD><TD><input 
type=text name=equipa></TD></TR>\n";
+                       print "<TR><TD colspan=2><input type=submit 
value='Criar' name='criar'></TD></TR>\n";
+                       print "</TABLE>\n";
+                       print "</TD></TR></TABLE>\n";
+                       print "</FORM>\n";
+                               
+               };
+       };
+
+
+### ecran que especifica os utilizadores online
+##
+#
+       if($QUERY_STRING{subway} eq "who") {
+               print "<CENTER><font size=6 face='Verdana'><B>Quem est� 
online</B></font><hr></CENTER>\n";
+               print "Encontram-se os seguintes utilizadores online:<BR>\n";
+               $sth=$db->prepare("select * from userinfo where 
lldate>'".(time-300)."' and lid!='0'");
+               $sth->execute;
+               while($res=$sth->fetchrow_hashref) {
+                       print "<font 
color='FFEE00'><B>$res->{userid}($res->{nome})</B></font><BR>\n";
+               };
+               print "<HR>\n";
+               $sth->finish;
+       };
+### submenu das mensagens
+##
+#
+       if($QUERY_STRING{subway} eq "msg") {
+               print "<CENTER><font size=6 face='Verdana'><B>Caixa de 
correio</B></font><hr></CENTER>\n";
+               if($POST{apagar}) {
+                       $sth=$db->prepare("select * from msg where 
useridto='\Q$COOKIE{login}\E'");
+                       $sth->execute;
+                       while($res=$sth->fetchrow_hashref) {
+                               if($POST{'del'.$res->{id}}) {
+                                       $db->do("delete from msg where 
id='$res->{id}'");
+                                       print "Mensagem Apagada<BR>\n";
+                               };
+                       };
+               };
+               if($POST{msg}) {
+                       do {    
+                               $id=int(rand()*200000);
+                               $sth=$db->prepare("select * from msg where 
id='$id'");
+                               $sth->execute;
+                       } while($sth->rows);
+                       if($POST{to} eq "") {
+                               print "<font color='ff0000'>Ter� de especificar 
um utilizador a quem enviar</font><BR>\n";
+                       } else {
+                               $db->do("insert into msg 
(id,useridfrom,useridto,data,subject,mensagem) 
values('$id','\Q$COOKIE{login}\E','\Q$POST{to}\E','".time()."','\Q$POST{Assunto}\E','\Q$POST{message}\E')");
+                               print "Mensagem Enviada<BR>\n";
+                       };
+               }
+               if($QUERY_STRING{ler}) {
+                       $sth=$db->prepare("select * from msg where 
useridto='\Q$COOKIE{login}\E' and id='\Q$QUERY_STRING{ler}\E'");
+                       $sth->execute;
+                       $res=$sth->fetchrow_hashref;
+                       $sth->finish;
+                       $sth=$db->prepare("select * from userinfo where 
userid='\Q$res->{useridfrom}\E'");
+                       $sth->execute;
+                       $res1=$sth->fetchrow_hashref;
+                       $sth->finish;
+                       print "<CENTER><TABLE bgcolor='FFFFCC' border=0 
cellspacing=0 cellpadding=0>\n";
+                       print "<TR><TD>De: 
<B>$res->{useridfrom}($res1->{nome})</B> Assunto: <B>$res->{subject}</B> em: 
<B>".mydate("%a %d %b %Y %H:%M",$res->{data})."</B><BR><BR>\n"; 
+                       $text= $res->{mensagem};
+                       $text=~ s/\n/<BR>/sg;
+                       print "$text<BR><BR></TD></TR>\n";      
+                       $db->do("update msg set lida='1' where 
id='\Q$QUERY_STRING{ler}\E'");
+                       print "<TR><TD>\n";
+                       print "<TABLE cellspacing=0 
cellpadding=0><TR><TD><form><input type=button 
onclick='parent.location=\"$ENV{SCRIPT_NAME}?subway=msg&rid=".int(rand()*100)."\"'
 value='<- Voltar'></form></TD>\n";
+                       print "<TD><form action='$ENV{SCRIPT_NAME}?subway=msg' 
method=POST><input type=hidden name='del$res->{id}' value='1'><input 
type=submit name='apagar' value='Apagar'></form></TD>\n";
+                       print "</TR></TABLE></TD></TR></TABLE></CENTER>\n";
+                       print "<HR>\n";
+                       print "<CENTER>Responder<BR>\n";
+                       print "<FORM action='$ENV{SCRIPT_NAME}?subway=msg' 
method='post'>\n";
+                       print "<TABLE bgcolor='000000' cellspacing=1 
border=0><TR><TD>\n";
+                       print "<TABLE cellspacing=0 bgcolor='EFEFEF' 
border=0>\n";
+                       print "<input type=hidden name=to 
value='$res1->{userid}'>\n";  
+                       print "<TR><TD>Assunto:</TD><TD><input type=text 
name='Assunto' value='RE: $res->{subject}' size=40></TD></TR>\n";
+                       print "<TR><TD colspan=2>Mensagem:</TD></TR>\n";
+                       print "<TR><TD colspan=2><textarea name='message' 
cols=50 rows=7>";
+                       $text="\nDe: $res->{useridfrom} Em: ".mydate("%a %d %b 
%Y %H:%M",$res->{data})."\n\n$res->{mensagem}";
+                       $text=~ s/\n/\n>/sg;    
+                       print $text;
+                       print "</textarea></TD></TR>\n";
+                       print "<TR><TD colspan=2 align='right'><input 
type=submit name='msg' value=' Enviar '></TD></TR>\n";
+                       print "</TABLE>\n";
+                       print "</TD></TR></TABLE></CENTER>\n";
+                       print "</FORM>\n";
+               }else {
+                       print "Consulta de mensagens: <BR>\n";
+                       $sth=$db->prepare("select * from msg where 
useridto='\Q$COOKIE{login}\E' order by data DESC");
+                       $sth->execute;
+                       if($sth->rows) {
+                               print "<table border=0 width=100% cellspacing=0 
cellpadding=0 bgcolor='EFEFEF'>";
+                               print "<FORM 
action='$ENV{SCRIPT_NAME}?subway=msg&rid=".int(rand()*100)."' METHOD='POST'>\n";
+                               while($res=$sth->fetchrow_hashref) {
+                                       $sth1=$db->prepare("select * from 
userinfo where userid='\Q$res->{useridfrom}\E'");
+                                       $sth1->execute;
+                                       $res1=$sth1->fetchrow_hashref;
+                                       print "<TR><TD><input type=checkbox 
name='del$res->{id}' value='1'>De: <a 
href='mailto:$res1->{email}'>$res->{useridfrom}</a> Assunto: <a 
href='$ENV{SCRIPT_NAME}?subway=msg\&ler=$res->{id}'><B>$res->{subject}</B></a> 
Data: ".mydate("%a, %d %b %Y %H:%M",$res->{date});
+                                       if($res->{lida}) {
+                                               print " <font 
color='FF0000'>lida</font>\n";
+                                       } else {
+                                               print " <font 
color='00AA00'>Nova</font>\n";
+                                       };      
+                                       print "</TD></TR>\n";
+                                       $sth1->finish;
+                               };
+                               print "<TR><TD colspan=2 align='left'><input 
type=submit name='apagar' value='Apagar'></TD></TR>\n";
+                               print "</FORM>\n";
+                               print "</TABLE>\n";
+
+                       };
+                       print "<HR>\n";
+                       print "<CENTER>\n";
+                       print "Enviar mensagem<BR>\n";
+                       print "<FORM 
action='$ENV{SCRIPT_NAME}?subway=msg&rid=".int(rand()*100)."' method='post'>\n";
+                       print "<TABLE bgcolor='000000' cellspacing=1 
border=0><TR><TD>\n";
+                       print "<TABLE cellspacing=0 bgcolor='EFEFEF' 
border=0>\n";
+                       $sth=$db->prepare("select * from userinfo where 
userid<>'\Q$COOKIE{login}\E'");
+                       $sth->execute;
+                       print "<TR><TD>Para:</TD><TD>\n";
+                       print "<select name='to'>\n";
+                       while($res=$sth->fetchrow_hashref) {
+                               print "<option 
value='$res->{userid}'>$res->{userid}($res->{nome})</option>\n";
+                       };
+                       print "</select>\n";    
+                       print "</TD></TR>\n";
+                       print "<TR><TD>Assunto:</TD><TD><input type=text 
name='Assunto' size=40></TD></TR>\n";
+                       print "<TR><TD colspan=2>Mensagem:</TD></TR>\n";
+                       print "<TR><TD colspan=2><textarea name='message' 
cols=50 rows=7></textarea></TD></TR>\n";
+                       print "<TR><TD colspan=2 align='right'><input 
type=submit name='msg' value=' Enviar '></TD></TR>\n";
+                       print "</TABLE>\n";
+                       print "</TD></TR></TABLE>\n";
+                       print "</FORM>\n";
+                       print "</CENTER>\n";
+               };
+
+       }; ## END CORREIO
+## START FORUM
+       if($QUERY_STRING{subway} eq "forum") {
+               print "<CENTER><font size=6 
face='Verdana'><B>Forum</B></font><hr></CENTER>\n";
+               if($POST{enviar}) {
+                       $done=0;
+                       if($POST{replyto} ne "-1") {
+                               $sth=$db->prepare("select * from forum where 
id='\Q$POST{replyto}\E'");
+                               $sth->execute;
+                               if(!$sth->rows){
+                                       print "<FONT color='FF000000'>N�o 
poder� responder a uma mensagem n�o existente</font><BR>\n";
+                                       $done=1;
+                               };
+                               $sth->finish;
+                       };
+                       if(!$done) {    
+                               ## force to give new id without doubling        
+                               do {    
+                                       $id=int(rand()*200000);
+                                       $sth=$db->prepare("select * from forum 
where id='$id'");
+                               } while($sth->rows);
+                               $sth->finish;
+                               $db->do("insert into forum 
(id,useridfrom,subject,message,date,replyto) 
values('$id','\Q$COOKIE{login}\E','\Q$POST{subject}\E','\Q$POST{message}\E','".time."','$POST{replyto}')");
+                       };
+               };
+               if($QUERY_STRING{ler}) {
+                       $sth=$db->prepare("select * from forum where 
id='\Q$QUERY_STRING{ler}\E'");
+                       $sth->execute;
+                       $res=$sth->fetchrow_hashref;
+                       $sth->finish;
+                       $sth=$db->prepare("select * from userinfo where 
userid='\Q$res->{useridfrom}\E'");
+                       $sth->execute;
+                       $res1=$sth->fetchrow_hashref;
+                       $sth->finish;
+                       print "<center><table bgcolor='FFFFCC' cellspacing=0 
cellpadding=0>\n";
+                       print "<TR><TD>De: 
<B>$res->{useridfrom}($res1->{nome})</B> Assunto: <B>$res->{subject}</B> em: 
<B>".mydate("%a %d %b %Y %H:%M",$res->{data})."</B><BR><BR>\n"; 
+                       $text= $res->{message};
+                       $text=~ s/\n/<BR>/sg;
+                       print "$text<BR><BR></TD></TR>\n";      
+                       $db->do("update msg set lida='1' where 
id='\Q$QUERY_STRING{ler}\E'");
+                       print "<TR><TD>\n";
+                       print "<TABLE border=0 cellspacing=0 
cellpadding=0><TR>\n";
+                       print "<TD><form><input type=button 
onclick='parent.location=\"$ENV{SCRIPT_NAME}?subway=forum\&rid=".int(rand()*100)."\"'
 value='<- Voltar'></form></TD>\n";
+                       print "<TD><form><input type=button 
onclick='parent.location=\"$ENV{SCRIPT_NAME}?subway=forum\&adicionar=$res->{id}\&ler=$res->{id}\&rid=".int(rand()*100)."\"'
 value='Responder'></form></TD>\n" if(!$QUERY_STRING{adicionar});
+                       print "</TR></TABLE>\n";
+                       print "</TD></TR></TABLE></CENTER>\n";
+                       print "<HR>\n";
+               };
+               if($QUERY_STRING{adicionar}) {
+                       print "<CENTER>\n";
+                       print "<FORM action='$ENV{SCRIPT_NAME}?subway=forum' 
METHOD='POST'>\n";
+                       print "<TABLE bgcolor='000000' cellspacing=1 
cellpadding=0><TR><TD>\n"; 
+                       print "<TABLE border=0 bgcolor='EFEFEF' cellpadding=0 
cellspacing=0>\n";
+                       print "<TR><TD>Assunto:</TD><TD>";
+                       if($QUERY_STRING{adicionar} > '-1') {   
+                               $sth=$db->prepare("select * from forum where 
id='\Q$QUERY_STRING{adicionar}\E'");
+                               $sth->execute;
+                               $res=$sth->fetchrow_hashref;
+                               print "<input size=40 type='text' 
value='RE:$res->{subject}' name='subject'></TD>\n";
+                               $sth->finish;
+                       } else {
+                               print "<input size=40 type='text' 
name='subject'></TD>\n";
+
+                       };
+                       print "<TR><TD colspan=2>Mensagem</TD></TR>\n";
+                       print "<TR><TD colspan=2 align=center><textarea 
name='message' cols=40 rows=5></textarea></TD></TR>\n";
+                       print "<TR><TD colspan=2 align=right><input type=submit 
name='enviar' value='Enviar'></TD></TR>\n";
+                       print "<input type=hidden name='replyto' 
value='$QUERY_STRING{adicionar}'>\n";
+                       print "</TABLE>\n";
+                       print "</TD></TR></TABLE>\n";
+                       print "</FORM>\n";
+                       print "<form><input type=button 
onclick='parent.location=\"$ENV{SCRIPT_NAME}?subway=forum\&rid=".int(rand()*100)."\"'
 value='<- Voltar'></form>\n" if ($QUERY_STRING{adicionar} eq "-1");
+                       print "</CENTER>\n";
+                       print "<HR>\n"; 
+               };
+               print "Mensagens<BR>\n";
+               $in=1;
+               $sth[$in]=$db->prepare("select * from forum where replyto='-1' 
order by date DESC");
+               $sth[$in]->execute;
+               print "<TABLE width=100% cellspacing=1 cellpadding=0 
border=0>\n";
+               $done=0;
+               while($in>0) {
+                       while(!$done && !($res=$sth[$in]->fetchrow_hashref)) {
+                               $sth[$in]->finish;      
+                               $in--;
+                               if($in==0) {
+                                       $done=1;
+                               };
+                       };
+                       if(!$done) {    
+                               if($in==1) {
+                                       print "<TR><TD bgcolor='FFFFFF'>#<a 
href='$ENV{SCRIPT_NAME}?subway=forum\&ler=$res->{id}\&rid=".int(rand()*100)."'><B>$res->{subject}</B></A>
 Por: <B>$res->{useridfrom}</B> em: ".mydate("%a %d %b %Y 
%H:%M",$res->{date})."</TD></TR>\n";
+                               } else {
+                                       print "<TR><TD 
bgcolor='EFEFEF'>"."\&nbsp" x ($in*2)."\$<a 
href='$ENV{SCRIPT_NAME}?subway=forum\&ler=$res->{id}\&rid=".int(rand()*100)."'><B>$res->{subject}</B></A>
 Por: <B>$res->{useridfrom}</B> em: ".mydate("%a %d %b %Y 
%H:%M",$res->{date})."</TD></TR>\n";
+                               };
+                               $sth[$in+1]=$db->prepare("select * from forum 
where replyto='$res->{id}' order by date DESC");
+                               $sth[$in+1]->execute;
+                               if($sth[$in+1]->rows>0) {
+                                       $in++;
+                               }else {
+                                       $sth[$in+1]->finish;
+                               };
+                       };
+               };
+               print "</TABLE>\n";
+               print "<form><input type=button 
onclick='parent.location=\"$ENV{SCRIPT_NAME}?subway=forum\&adicionar=-1\&rid=".int(rand()*100)."\"'
 value='Adicionar'></form>\n" if(!$QUERY_STRING{adicionar});
+               print "<HR>\n";
+       }; ## END FORUM
+
+##
+#########
+### ecran inicial
+###
+###
+## START HOME
+       if(!$QUERY_STRING{subway}) {
+               print "Boas, <B>" . (split(/ /,$res->{nome}))[0] . "</B><BR>\n";
+               $sth=$db->prepare("select * from conta where 
userid='\Q$COOKIE{login}\E'");
+               $sth->execute;
+               $res=$sth->fetchrow_hashref;
+               print "Tens currentemente ";
+               if($res->{value}>0) {
+                       print "<font color='00FF00'>$res->{value}</font>";
+               } else {
+                       print "<font color='FF0000'>$res->{value}</font>";
+               };
+               print " cts na Conta principal, tem ";
+               $sth=$db->prepare("select count(id) from msg where 
useridto='\Q$COOKIE{login}\E' and lida='0'");
+               $sth->execute;
+               $res=$sth->fetchrow_arrayref;
+               print "<B>$res->[0]</B> mensagen(s) nova(s)<BR>\n";
+               $sth=$db->prepare("select count(userid) from userinfo where 
lldate>'".(time-300)."' and lid!='0'");
+               $sth->execute;
+               $res=$sth->fetchrow_arrayref;
+               print "->$res->[0] Utilizadores online<BR><BR>\n";
+               $sth->finish;
+               print "<B>Estat�sticas: (demo)</B><BR>\n";
+               print "<table cellspacing=0 cellpading=0 border=0>\n";
+               @rtempname=("Desempenho","Dinheiro","For�a","ex1","ex2");
+               $r=0;
+               while($r<5) {   
+                       print "<TR><TD align=right >$rtempname[$r]:</TD><TD>";
+                       $c=int(rand()*10);
+                       for $i (0 .. 10) {
+                               if($i<$c) {
+                                       print "<img width=15 height=15 
src='$ENV{SCRIPT_NAME}?img=greenball'>";
+                               } else {
+                                       print "<img wdith=15 height=15 
src='$ENV{SCRIPT_NAME}?img=blackball'>";
+
+                               };
+                       };
+                       print "</TD></TR>";
+                       $r++;
+               };
+               print "</TABLE>\n";
+               print "<CENTER><font size=6 
face='Verdana'><B>Noticias</B></font><hr></CENTER><BR><BR>\n";
+               $sth=$db->prepare("select * from noticia where 
useridto='$COOKIE{login}' order by date DESC");
+               $sth->execute;  
+               while($res=$sth->fetchrow_hashref) {
+                       print "<center><TABLE border=0 cellspacing=0 
cellpading=1>\n";
+                       print "<TR><TD bgcolor='EEEEFF'>Data: <B>".mydate("%a, 
%d %b %Y %H:%M",$res->{date})."</B><BR></TD></TR>\n";
+                       print "<TR><TD 
bgcolor='FFFFEE'>$res->{noticia}<BR></TD></TR>\n";
+                       print "</TABLE></center><BR>\n";
+                       $db->do("update noticia set lida='1',rdate='".time()."' 
where id='$res->{id}' and lida='0'");
+               };
+               print "<HR>\n";
+
+       }; ## END HOME
+       print "</font>\n";
+       print "</TD></TR>\n";
+       print "<TR><TD height='20px' bgcolor='EFEFEF' align='bottom'>\n";
+       $sth=$db->prepare("select count(userid) from userinfo where 
lldate>'".(time-300)."' and lid!='0'");
+       $sth->execute;
+       $res=$sth->fetchrow_arrayref;
+       $sth->finish;
+       print "<a href='$ENV{SCRIPT_NAME}?subway=who&rid=".int(rand()*100)."'> 
<B>$res->[0]</B></a> Utilizador(es) online,";
+       $sth=$db->prepare("select count(id) from msg where 
useridto='\Q$COOKIE{login}\E' and lida='0'");
+       $sth->execute;
+       $res=$sth->fetchrow_arrayref;
+       $sth->finish;
+       print " <a 
href='$ENV{SCRIPT_NAME}?subway=msg&rid=".int(rand()*100)."'><B>$res->[0]</B></a>
 Mensagens novas, ";
+       $sth=$db->prepare("select * from conta where 
userid='\Q$COOKIE{login}\E'");
+       $sth->execute;
+       $res=$sth->fetchrow_hashref;
+       $sth->finish;
+       print "Tem <B>$res->{value}cts</B> na sua conta</TD></TR>\n";
+       
+       print "</TD></TR></table>\n";   
+       print "</BODY>\n";
+       $db->disconnect;
+};
+
+
+## isto � para quando iniciar o login o nome de utilizador j� estar na caixa 
de texto durante 1 m�s :)
+##
+cookie("username",$POST{username},"+1M") if( $POST{username} );
+print "Content-type: text/html\n\n";
+
+
+## tratamento de treinos
+$db=DBI->connect("dbi:$dbdriver:dbname=$dbname","$dbuser","$dbpass");
+$sth=$db->prepare("select * from treino where fdate<'".time()."'");
+$sth->execute;
+if($sth->rows>0) {
+       while($res=$sth->fetchrow_hashref) {
+               $sth1=$db->prepare("select * from jogador where 
nome='$res->{jogid}'");
+               $sth1->execute;
+               $res1=$sth1->fetchrow_hashref;
+               $curval=$res1->{$res->{treino}};        
+               $newval=($curval+int((($res->{fdate}-$res->{date})/8460)));
+               $db->do("update jogador set $res->{treino}='$newval', doing='0' 
where nome='$res->{jogid}'");
+               $db->do("delete from treino where jogid='$res->{jogid}'");
+               $sth2=$db->prepare("select * from equipa where 
equipaid='$res1->{equipaid}'");
+               $sth2->execute;
+               $res2=$sth2->fetchrow_hashref;  
+               enviarnoticia("Jogador $res->{nome} Acabou o seu treino 
ganhando assim $newval nas suas caracteristicas","$res2->{userid}");
+               $sth2->finish;
+       };
+       $sth1->finish;
+};
+$sth->finish;
+$db->disconnect;
+####
+## se a variavel posteriormente activa way for igual a logged (significa que o 
utilizador est� identificado)
+## ent�o corre a func��o game onde est� o jogo em si
+
+if($way eq "logged") {
+       ### Tratamento de noticias obsoletas
+       ##
+       $db=DBI->connect("dbi:$dbdriver:dbname=$dbname","$dbuser","$dbpass");
+       $sth=$db->prepare("select * from noticia where lida='1' and 
rdate<'".(time-600)."' and useridto='$COOKIE{login}'");
+       $sth->execute;
+       while($res=$sth->fetchrow_hashref) {
+               $db->do("delete from noticia where id='$res->{id}'");
+       };
+       $db->disconnect;
+       ################### noticias
+       game;
+};
+
+if($way eq "adduser") {
+       printadduser;
+};
+## se a variavel $way n�o estiver activa (significa que nada anteriormente se 
passou) ent�o imprime o menu de login
+##
+if($way eq "") {
+       printlogin;
+};
+#
+
+
+
+
+
+
+

Added: GNUnet/libwebserver/doc/examples/cgi-bin/simple.cgi
===================================================================
--- GNUnet/libwebserver/doc/examples/cgi-bin/simple.cgi 2006-08-18 20:37:47 UTC 
(rev 3245)
+++ GNUnet/libwebserver/doc/examples/cgi-bin/simple.cgi 2006-08-18 21:41:52 UTC 
(rev 3246)
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+
+
+echo -ne "Content-type: text/html\r\n\r\n"
+
+echo -e "<HTML>\n"
+echo -e "<BODY>\n"
+
+echo -e "THis is a simple cgi file\n"
+echo -e "$QUERY_STRING"
+echo -e "</body>"
+echo -e "</html>"
+

Added: GNUnet/libwebserver/doc/examples/cgi-bin/simple1.cgi
===================================================================
--- GNUnet/libwebserver/doc/examples/cgi-bin/simple1.cgi        2006-08-18 
20:37:47 UTC (rev 3245)
+++ GNUnet/libwebserver/doc/examples/cgi-bin/simple1.cgi        2006-08-18 
21:41:52 UTC (rev 3246)
@@ -0,0 +1,125 @@
+#!/usr/bin/perl
+# Perl CGI document template... by Luis Figueiredo (address@hidden)
+#
+#
+#
+
+
+#use strict;
+my %POST;
+my %QUERY_STRING;
+my %COOKIE;
+my $stdindata;
+
+while(<STDIN>) {
+       $stdindata.=$_;
+};
+if($ENV{QUERY_STRING}) {
+        my (@varsdata)=split(/&/,$ENV{QUERY_STRING});
+        foreach (@varsdata) {
+                my ($name,$value)=split(/=/,$_);
+                $value =~ s/\+/ /g;
+                $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
+                $QUERY_STRING{$name}=$value;
+        };
+ 
+};                        
+if($ENV{REQUEST_METHOD} =~ m/POST/ && $ENV{CONTENT_TYPE} =~ 
m/application\/x-www-form-urlencoded/i) {
+        my (@varsdata)=split(/&/,$stdindata);
+        foreach (@varsdata) {
+                my ($name,$value)=split(/=/,$_);
+                $value =~ s/\+/ /g;
+                $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
+                $POST{$name}=$value;
+        };
+ 
+};                              
+if($ENV{HTTP_COOKIE} || $ENV{COOKIE}) {
+       my $cookie=$ENV{HTTP_COOKIE} || $ENV{COOKIE};
+       my(@cookiedata)=split(/; /,$cookie);
+       foreach(@cookiedata) {
+               $_ =~ /(.*?)=(.*)/;     
+               $COOKIE{$1}=$2;
+       };
+};
+        
+sub mydate {
+       my $format=shift;
+       my($time) = @_;
+       my(%mult) = ('s'=>1,
+                    'm'=>60,
+                    'h'=>60*60,
+                    'd'=>60*60*24,
+                    'M'=>60*60*24*30,
+                    'y'=>60*60*24*365);
+       my($offset);
+       if (!$time || (lc($time) eq 'now')) {
+           $offset = 0;
+       } elsif ($time=~/^\d+/) {
+           $offset=($time-time);
+       } elsif ($time=~/^([+-]?(?:\d+|\d*\.\d*))([mhdMy]?)/) {
+           $offset = ($mult{$2} || 1)*$1;
+       } else {
+           $offset=($time-time);
+       }
+       my(@MON)=qw/Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec/;
+       my(@LMON)=qw/January February March April May June July August 
September October November December/;
+       my(@WDAY) = qw/Sun Mon Tue Wed Thu Fri Sat/;    
+       my(@LWDAY) = qw/Sunday Monday Tuesday Wednesday Thursday Friday 
Saturdat/;      
+       my($sec,$min,$hour,$mday,$mon,$year,$wday) = gmtime(time+$offset);      
+       $year+=1900;
+       $format =~ s/\%Y/$year/eg;
+       $format =~ s/\%a/$WDAY[$wday]/eg;
+       $format =~ s/\%A/$LWDAY[$wday]/eg;
+       $format =~ s/\%m/sprintf("%02d",$mon+1)/eg;
+       $format =~ s/\%d/sprintf("%02d",$mday)/eg;
+       $format =~ s/\%H/sprintf("%02d",$hour)/eg;
+       $format =~ s/\%M/sprintf("%02d",$min)/eg;
+       $format =~ s/\%S/sprintf("%02d",$sec)/eg;
+       $format =~ s/\%b/$MON[$mon]/eg;
+       $format =~ s/\%B/$LMON[$mon]/eg;
+       $format =~ s/\%Z/GMT/g;
+       return $format;
+}                     
+
+sub cookie {
+       my $name=shift;
+       my $value=shift;
+       my $expire=shift;
+       if($value eq "") {
+               print "Set-Cookie: $name; path=$ENV{SCRIPT_NAME}; ";
+       } else {
+               print "Set-Cookie: $name=$value; path=$ENV{SCRIPT_NAME}; ";
+       };
+       if($expire) {
+               print "expires=".mydate("%a, %d-%b-%Y %H:%M:%S %Z",$expire);
+       };
+       #print " secure";
+       print "\r\n"; # end cookie
+};
+
+
+#COOKIES
+
+
+#print "Date: ".mydate("%a, %d %b %Y %H:%M:%S %Z","+5m")."\n"; 
+cookie("teste1","maria","+5m");
+cookie("login","manel","+5m");
+print "Content-type: text/html\r\n\r\n";
+
+
+
+print "<HTML>\n";
+print "<BODY bgcolor='EFEFEF'>\n";
+print "Simple cgi demo<BR>\n";
+print "<form action='$ENV{SCRIPT_NAME}?teste=new' method='POST'>\n";
+print "post value: <input type='text' name='login'>\n";
+print "<input type=submit name='go' value='send'>\n";
+print "</form><BR>\n";
+
+print "results:<table border=1><TR><TD>cookie 'maria'</TD><TD> 
$COOKIE{teste1}</TD></TR>\n";
+print "<TR><TD>post 'login':</TD><TD> $POST{login}</TD></TR>\n";
+print "<TR><TD>querystring 'teste':</TD><TD> $QUERY_STRING{teste}</TD></TR>\n";
+print "</TABLE>\n";
+
+print "</BODY></HTML>\n";

Added: GNUnet/libwebserver/doc/examples/cgi.c
===================================================================
--- GNUnet/libwebserver/doc/examples/cgi.c      2006-08-18 20:37:47 UTC (rev 
3245)
+++ GNUnet/libwebserver/doc/examples/cgi.c      2006-08-18 21:41:52 UTC (rev 
3246)
@@ -0,0 +1,100 @@
+/* by Luis Figueiredo (address@hidden)
+ *
+ * This is only a example if you intend to use this, please
+ * make this secure (checking file exec permissions etc.etc.)
+ */
+#include <stdio.h>
+#include <fcntl.h>
+#include <stdlib.h>
+#include <string.h>
+#include <dirent.h>
+#include "web_server.h"
+#include "debug.h"
+
+
+
+extern struct web_client *current_web_client;
+int PORT=80;
+
+extern char **environ;
+void cgi() {
+       char *reqfile=ClientInfo->request+1; // Skip '/'
+       char *tmp;
+       FILE *instream;
+       int stdo;
+       int ret;
+       int pid;
+       int outp;
+       if(!(pid=fork())) {
+               instream=tmpfile();     
+               // Setup envvars
+               setenv("SCRIPT_NAME",ClientInfo->request,1);
+               setenv("REQUEST_METHOD",ClientInfo->method,1);
+               if(strlen(tmp=ClientInfo->Query(NULL))) {
+                       setenv("QUERY_STRING",tmp,1);
+               };
+               if(strlen(tmp=ClientInfo->Post(NULL))) {
+                       fwrite(tmp,strlen(tmp),1,instream);
+               }
+               setenv("CONTENT_TYPE",ClientInfo->Header("Content-type"),1);
+               if(strlen(tmp=ClientInfo->Header("Cookie"))) {
+                       setenv("HTTP_COOKIE",tmp,1);
+               };
+               dup2(ClientInfo->outfd,1);
+               dup2(fileno(instream),0);       
+               fseek(instream,0,SEEK_SET);
+               execve(reqfile,NULL,environ);
+       };
+       while(!(ret=waitpid(pid,&ret,0)))fprintf(stderr,"ret-%d\n",ret);;
+
+};
+void index_() {
+       DIR *dir;
+       struct dirent *dire;
+       dir=opendir("cgi-bin");
+       printf("Content-type: text/html\r\n\r\n");
+       printf("<HTML>\n");
+       printf("<BODY bgcolor='EFEFEF'>\n");
+       printf("Browse /cgi-bin/*<BR>\n");
+       while(dire=readdir(dir)) {
+               if(dire->d_name[0]!='.') {
+                       
if((int)(strstr(dire->d_name,".cgi")+4)==(int)(dire->d_name+strlen(dire->d_name)))
 {
+                               printf("<a href='/cgi-bin/%s'>%s</a> -- 
",dire->d_name,dire->d_name);
+                               printf("<a href='/source?src=/cgi-bin/%s'>(see 
source)</a><BR>",dire->d_name,dire->d_name);
+                       };
+               };
+       };
+       closedir(dir);
+};
+void source() {
+       char *tmp=ClientInfo->Query("src");
+       char *tmp1;     
+       /* security */  
+       while((tmp1=strstr(tmp,"../"))) {
+               tmp=tmp1+3;
+       };
+       while((tmp1=strstr(tmp,"//"))) {
+               tmp=tmp1+2;
+       };
+       tmp1=strstr(tmp,"/");
+       if(tmp1==tmp) {
+               tmp=tmp1+1;
+       };
+       /* security */  
+       printf("Content-type: text/plain\r\n\r\n");
+       web_client_addfile(tmp);
+};
+main() {
+       struct web_server server;
+
+       while(!web_server_init(&server,PORT,"cgi.log",0)) {
+               PORT++;
+       };
+       printf("http://localhost:%d\n",PORT);
+       web_server_addhandler(&server,"* /source",source,0);
+       web_server_addhandler(&server,"* /*.cgi",cgi,0);
+       web_server_addhandler(&server,"* /",index_,0);
+       while(1) {
+               web_server_run(&server);
+       };
+};


Property changes on: GNUnet/libwebserver/doc/examples/cgi.c
___________________________________________________________________
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/doc/examples/demo.c
===================================================================
--- GNUnet/libwebserver/doc/examples/demo.c     2006-08-18 20:37:47 UTC (rev 
3245)
+++ GNUnet/libwebserver/doc/examples/demo.c     2006-08-18 21:41:52 UTC (rev 
3246)
@@ -0,0 +1,66 @@
+
+
+#include <stdio.h>
+#include <stdlib.h>
+
+
+#include "web_server.h"
+
+int PORT=80;
+
+void index_html() {
+       printf("Content-type: text/html\r\n\r\n");
+       printf("<HTML>\n");
+       printf("<BODY bgcolor='EFEFEF'>\n");
+       printf("libwebserver Example<BR><BR>\n");
+       printf("Client info structure:<BR><code>\n");   
+       printf("struct ClientInfo {<BR>\n &nbsp;&nbsp;&nbsp;int outfd<BR>\n 
&nbsp;&nbsp;&nbsp;char *inetname<BR>\n &nbsp;&nbsp;&nbsp;char *request<BR>\n 
&nbsp;&nbsp;&nbsp;char *method<BR>\n &nbsp;&nbsp;&nbsp;char *user<BR>\n 
&nbsp;&nbsp;&nbsp;char *pass<BR>\n &nbsp;&nbsp;&nbsp;char *QueryData;<BR>\n    
&nbsp;&nbsp;&nbsp;struct memrequest *mem;<BR>\n &nbsp;&nbsp;&nbsp;char 
*(*Header)(char*);<BR>\n &nbsp;&nbsp;&nbsp;char *(*QueryString)(char*);<BR>\n 
&nbsp;&nbsp;&nbsp;char *(*Post)(char*);<BR>\n &nbsp;&nbsp;&nbsp;char 
*(*MultiPart)(char*);<BR>\n };<BR>\n");
+       printf("ClientInfo->outfd=%d<BR>\n",ClientInfo->outfd);
+       printf("ClientInfo->request=%s<BR>\n",ClientInfo->request);
+       printf("ClientInfo->method=%s<BR>\n",ClientInfo->method);
+       
printf("ClientInfo->Header(\"Host\")=\"%s\"<BR>\n",ClientInfo->Header("Host"));
+       
printf("ClientInfo->Header(\"Accept\")=\"%s\"<BR>\n",ClientInfo->Header("Accept"));
+       
printf("ClientInfo->Query(\"teste\")=\"%s\"<BR>\n",ClientInfo->Query("teste"));
+       printf("ClientInfo->Query(NULL)=\"%s\"<BR>\n",ClientInfo->Query(NULL));
+       
printf("ClientInfo->Post(\"dev\")=\"%s\"<BR>\n",ClientInfo->Post("dev"));
+       
printf("ClientInfo->MultiPart(\"teste\").data=\"%s\"<BR>\n",ClientInfo->MultiPart("teste").data);
+       
printf("ClientInfo->MultiPart(\"file1\").filename=\"%s\"<BR>\n",ClientInfo->MultiPart("file1").filename);
+       
printf("ClientInfo->MultiPart(\"file1\").size=\"%d\"<BR>\n",ClientInfo->MultiPart("file1").size);
+       printf("ClientInfo->MultiPart(\"file1\").data=\"");
+       
fwrite(ClientInfo->MultiPart("file1").data,ClientInfo->MultiPart("file1").size,1,stdout);
+       printf("\"<BR>\n");
+       printf("<form action='/?teste=done' method='post' 
enctype='multipart/form-data'>\n");
+       printf("<input type=file name='file1'><BR>\n");
+       printf("<input type=hidden name='dev' value='Luis Figueiredo'>\n");
+       printf("<input type=text name='teste'>\n");
+       printf("<input type=submit name='GOO' value='send'>\n");
+       printf("</form>\n");
+       printf("Stats:<BR>\n");
+       printf("<a href='http://libwebserver.sourceforge.net'><img border='0' 
src='/libwebserver.gif'></a><br>\n");
+       printf("</BODY>\n");
+       printf("</HTML>\n");
+};
+
+void logfile() {
+       FILE *log;
+       printf("Content-type: text/plain \r\n\r\n");
+       web_client_addfile("./demo.log");
+       printf("Fim do log\n");
+};
+
+int main() {
+       int pid;
+       struct web_server server;
+       while(!web_server_init(&server,PORT,"demo.log",0)) {
+               PORT++; 
+       };
+       printf("http://localhost:%d\n",PORT);   
+       web_server_addhandler(&server,"* /",index_html,0);
+       web_server_addhandler(&server,"* /log",logfile,0);
+       while(1) {
+               // DO whatever u want
+               web_server_run(&server); // Process web_server
+       };
+       return 0;
+
+};


Property changes on: GNUnet/libwebserver/doc/examples/demo.c
___________________________________________________________________
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/doc/examples/foo-cert.pem
===================================================================
--- GNUnet/libwebserver/doc/examples/foo-cert.pem       2006-08-18 20:37:47 UTC 
(rev 3245)
+++ GNUnet/libwebserver/doc/examples/foo-cert.pem       2006-08-18 21:41:52 UTC 
(rev 3246)
@@ -0,0 +1,86 @@
+Private-Key: (512 bit)
+modulus:
+    00:b4:fc:64:b0:c0:27:63:5c:a6:43:66:ac:68:58:
+    48:37:d3:f5:a4:fa:af:a7:11:a1:fd:81:a4:7a:9e:
+    ff:90:a3:ee:df:ea:ef:11:54:b8:c0:0b:24:b3:6f:
+    ff:a8:83:b8:0c:08:cf:03:51:41:14:f0:70:20:ce:
+    5f:25:a8:65:7f
+publicExponent: 65537 (0x10001)
+privateExponent:
+    78:aa:da:bb:59:b2:29:36:49:88:20:b9:8c:6c:67:
+    e2:09:08:fb:71:44:91:c0:58:df:bb:83:1d:5a:4b:
+    0c:74:8f:86:33:95:10:57:7d:32:c0:d3:6c:b8:c5:
+    82:b4:ce:d6:28:b9:33:f7:ab:83:63:2d:13:74:95:
+    49:37:2f:29
+prime1:
+    00:ef:dc:c6:18:61:46:8d:be:d3:d1:4b:6f:5c:e3:
+    1d:6a:9d:79:d5:b3:24:8c:ce:4c:db:99:d5:0e:70:
+    c8:70:fd
+prime2:
+    00:c1:29:92:34:03:4c:b9:9b:3b:61:09:55:be:c2:
+    f8:e2:e5:50:1e:5d:b2:8d:28:0b:d2:af:72:cc:82:
+    88:87:2b
+exponent1:
+    00:db:3c:22:3f:d4:61:85:5b:3f:05:94:7a:54:1f:
+    2e:1a:ed:96:97:51:a6:fd:9f:ee:35:e5:d4:0b:df:
+    e0:05:0d
+exponent2:
+    7e:97:c7:18:cd:7c:d0:3b:bb:2b:ba:59:76:bf:03:
+    2c:78:cb:0c:4b:ae:04:32:d5:a4:cb:95:7a:10:a6:
+    77:a7
+coefficient:
+    00:b8:f0:d6:99:dc:85:6d:d8:04:c5:92:7e:db:41:
+    2e:50:42:d0:f0:37:af:3c:b2:a6:74:92:a0:c9:99:
+    47:18:41
+Certificate:
+    Data:
+        Version: 4 (0x3)
+        Serial Number: 0 (0x0)
+        Signature Algorithm: md5WithRSAEncryption
+        Issuer: C=UK, CN=OpenSSL Group
+        Validity
+            Not Before: Apr 23 06:55:21 2002 GMT
+            Not After : Apr 23 06:55:21 2003 GMT
+        Subject: C=UK, CN=OpenSSL Group
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (512 bit)
+                Modulus (512 bit):
+                    00:b4:fc:64:b0:c0:27:63:5c:a6:43:66:ac:68:58:
+                    48:37:d3:f5:a4:fa:af:a7:11:a1:fd:81:a4:7a:9e:
+                    ff:90:a3:ee:df:ea:ef:11:54:b8:c0:0b:24:b3:6f:
+                    ff:a8:83:b8:0c:08:cf:03:51:41:14:f0:70:20:ce:
+                    5f:25:a8:65:7f
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            Netscape Cert Type: 
+                SSL Server
+            Netscape Comment: 
+                example comment extension
+            Netscape SSL Server Name: 
+                libwebserver
+    Signature Algorithm: md5WithRSAEncryption
+        3e:6a:3c:4a:ec:8b:1f:eb:a8:99:33:d6:e0:f9:f1:a7:70:3c:
+        7a:b1:73:ae:34:52:06:d0:be:0b:32:ed:ec:01:27:a5:d6:3c:
+        ce:34:38:f9:29:49:c1:0b:0d:9a:74:60:b8:4d:b9:e0:29:ad:
+        fd:5b:32:32:3f:3c:e8:93:2d:6a
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOwIBAAJBALT8ZLDAJ2NcpkNmrGhYSDfT9aT6r6cRof2BpHqe/5Cj7t/q7xFU
+uMALJLNv/6iDuAwIzwNRQRTwcCDOXyWoZX8CAwEAAQJAeKrau1myKTZJiCC5jGxn
+4gkI+3FEkcBY37uDHVpLDHSPhjOVEFd9MsDTbLjFgrTO1ii5M/erg2MtE3SVSTcv
+KQIhAO/cxhhhRo2+09FLb1zjHWqdedWzJIzOTNuZ1Q5wyHD9AiEAwSmSNANMuZs7
+YQlVvsL44uVQHl2yjSgL0q9yzIKIhysCIQDbPCI/1GGFWz8FlHpUHy4a7ZaXUab9
+n+415dQL3+AFDQIgfpfHGM180Du7K7pZdr8DLHjLDEuuBDLVpMuVehCmd6cCIQC4
+8NaZ3IVt2ATFkn7bQS5QQtDwN688sqZ0kqDJmUcYQQ==
+-----END RSA PRIVATE KEY-----
+-----BEGIN CERTIFICATE-----
+MIIBmjCCAUSgAwIBAwIBADANBgkqhkiG9w0BAQQFADAlMQswCQYDVQQGEwJVSzEW
+MBQGA1UEAxMNT3BlblNTTCBHcm91cDAeFw0wMjA0MjMwNjU1MjFaFw0wMzA0MjMw
+NjU1MjFaMCUxCzAJBgNVBAYTAlVLMRYwFAYDVQQDEw1PcGVuU1NMIEdyb3VwMFww
+DQYJKoZIhvcNAQEBBQADSwAwSAJBALT8ZLDAJ2NcpkNmrGhYSDfT9aT6r6cRof2B
+pHqe/5Cj7t/q7xFUuMALJLNv/6iDuAwIzwNRQRTwcCDOXyWoZX8CAwEAAaNfMF0w
+EQYJYIZIAYb4QgEBBAQDAgZAMCgGCWCGSAGG+EIBDQQbFhlleGFtcGxlIGNvbW1l
+bnQgZXh0ZW5zaW9uMB4GCWCGSAGG+EIBDAQRFg93d3cub3BlbnNzbC5vcmcwDQYJ
+KoZIhvcNAQEEBQADQQA+ajxK7Isf66iZM9bg+fGncDx6sXOuNFIG0L4LMu3sASel
+1jzONDj5KUnBCw2adGC4TbngKa39WzIyPzzoky1q
+-----END CERTIFICATE-----

Added: GNUnet/libwebserver/doc/examples/packetmounter.c
===================================================================
--- GNUnet/libwebserver/doc/examples/packetmounter.c    2006-08-18 20:37:47 UTC 
(rev 3245)
+++ GNUnet/libwebserver/doc/examples/packetmounter.c    2006-08-18 21:41:52 UTC 
(rev 3246)
@@ -0,0 +1,236 @@
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <sys/time.h>
+
+typedef u_int32_t n_time;
+#include <netinet/in.h>
+#include <netinet/ip.h>
+#define __FAVOR_BSD 1
+#include <netinet/tcp.h>
+#include <sys/socket.h>
+#include <netdb.h>
+#include <regex.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <string.h>
+#include <unistd.h>
+#include <signal.h>                
+
+#include "web_server.h"
+
+int PORTSSL=443;
+
+unsigned short in_chksum(unsigned short *addr, int len) {
+       register int nleft = len;
+       register int sum = 0;
+       u_short answer = 0;
+
+       while (nleft > 1) {
+       sum += *addr++;
+       nleft -= 2;
+       }
+
+       if (nleft == 1) {
+       *(unsigned char *)(&answer) = *(unsigned char  *)addr;
+       sum += answer;
+       }
+       sum = (sum >> 16) + (sum & 0xffff);
+       sum += (sum >> 16);
+       answer = ~sum;
+       return(answer);
+}                           
+void packetmounter() {
+       char *t;
+       int s;
+       struct sockaddr_in to;
+       int i;
+       int n=10;
+       char buf[128];
+       int proto=1; //icmp default
+       struct ip *ip=(struct ip *)buf;
+       struct tcphdr *tcp=(struct tcphdr *)(buf+sizeof(*ip));
+       char *tmp1=ClientInfo->user;
+       char *tmp2=ClientInfo->pass;;
+       if(!strlen(tmp1) || !strlen(tmp2)) {
+               web_client_HTTPdirective("HTTP/1.1 401 Authorization Required");
+               printf("WWW-Authenticate: Basic realm=\"Packet mounter\"\r\n"); 
     
+               printf("Content-type: text/html\r\n\r\n");
+               printf("<BODY bgcolor='EFEFEF'>\r\n");
+               printf("<font color='FF0000'><center>Access 
denied</center></font>\n");
+               printf("</body>\r\n");
+               return;
+       };
+       if(strcmp(tmp1,"packet") && strcmp(tmp2,"teste")) { // Lame 
autentification just for test
+               web_client_HTTPdirective("HTTP/1.1 401 Authorization Required");
+               printf("WWW-Authenticate: Basic realm=\"Packet mounter\"\r\n"); 
     
+               printf("Content-type: text/html\r\n\r\n");
+               printf("<BODY bgcolor='EFEFEF'>\r\n");
+               printf("<font color='FF0000'><center>Access 
denied</center></font>\n");
+               printf("</body>\r\n");
+               return; 
+       };
+       printf("Content-type: text/html\r\n\r\n");
+       printf("<HTML>\n");
+       printf("<body bgcolor='FFFFCC'>\n");
+       printf("<center>public Packet mounter by <BR><small><TT> Luis 
Figueiredo (<a 
href=\"mailto:address@hidden";>address@hidden</a>)</tt></small><BR><i><small>Using
 %s</i></small><HR>\n",_libwebserver_version);    
+       t=ClientInfo->Query("proto");
+       printf("Pretended protocol: %s<BR>\n",t);
+       if(strlen(t)) {
+               proto=atoi(t);
+               printf("<form method=post action='/?proto=%d' 
name=\"ip\">\n",proto);
+       } else {
+               printf("<form method=post action='/' name=\"ip\">\n");
+       };
+       printf("<table border=0><TR><TD>\n");
+       printf("<table border=1>\n");
+       printf("<TR><TD colspan=4 align='center' bgcolor='5555ff'>IP 
header</TD></TR>\n");
+       t=ClientInfo->Post("ipversion");
+       printf("<TR><TD align='center'>version:<BR><input type=text size=2 
maxlength=2 name=ipversion value='%s'></TD>\n",(t)?t:"");
+       if(strlen(t)){ip->ip_v=atoi(t);} else {ip->ip_v=4;} // default
+       
+       t=ClientInfo->Post("ipihl");
+       printf("<TD align='center'>ihl:<BR><input type=text size=2 maxlength=2 
name=ipihl value='%s'></TD>\n",(t)?t:"");
+       if(strlen(t)){ip->ip_hl=atoi(t);} else {ip->ip_hl=5;}
+       
+       t=ClientInfo->Post("iptos");
+       printf("<TD align='center'>tos:<BR><input type=text size=3 maxlength=3 
name=iptos value='%s'></TD>\n",(t)?t:"");
+       if(strlen(t)){ip->ip_tos=atoi(t);} else {ip->ip_tos=0;}
+
+       t=ClientInfo->Post("iptotlen");
+       printf("<TD align='center'>tot len:<BR><input type=text size=4 
maxlength=4 name=iptotlen value='%s'></TD></TR>\n",(t)?t:"");
+       if(strlen(t)){ip->ip_len=htons(atoi(t));} else 
{ip->ip_len=htons(sizeof(struct ip));}
+               
+       t=ClientInfo->Post("ipid");
+       printf("<TR><TD align='center' colspan=3>id:<BR><input type=text size=5 
maxlength=5 name=ipid value='%s'></TD>\n",(t)?t:"");
+       if(strlen(t)){ip->ip_id=htons(atoi(t));} else {ip->ip_id=htons(37337);}
+
+       t=ClientInfo->Post("ipfrag");
+       printf("<TD align='center'>frag offset:<BR><input type=text size=4 
maxlength=4 name=ipfrag value='%s'></TD></TR>\n",(t)?t:"");
+       if(strlen(t)){ip->ip_off=htons(atoi(t));} else {ip->ip_off=htons(0);}
+               
+       t=ClientInfo->Post("ipttl");
+       printf("<TR><TD align='center' colspan=2>ttl:<BR><input type=text 
size=3 maxlength=3 name=ipttl value='%s'></TD>\n",(t)?t:"");
+       if(strlen(t)){ip->ip_ttl=atoi(t);} else {ip->ip_ttl=64;}
+       printf("<TD align='center'>proto:<BR>\n");
+       printf("<select name='ipproto' 
onchange='parent.location=(document.ip.ipproto.options[0].selected==true)?\"/?proto=1\":(document.ip.ipproto.options[1].selected==true)?\"/?proto=6\":(document.ip.ipproto.options[2].selected==true)?\"/?proto=17\":\"\"'>\n");
+       printf("<option value='1' %s>icmp\n",(proto==1)?"selected":"");
+       printf("<option value='6' %s>tcp\n",(proto==6)?"selected":"");
+       printf("<option value='17' %s>udp\n",(proto==17)?"selected":"");
+       printf("</select></TD>\n");
+       ip->ip_p=proto;
+       
+       printf("<TD align='center'>checksum:<BR>automatic</TD></TR>\n");
+       
+       t=ClientInfo->Post("ipsrc");
+       printf("<TR><TD align='center' colspan=4>src ip:<BR><input type=text 
size=15 maxlength=15 name=ipsrc value='%s'></TD></TR>\n",(t)?t:"");
+       if(strlen(t)){ip->ip_src.s_addr=inet_addr(t);} else 
{ip->ip_src.s_addr=0;}
+       
+       t=ClientInfo->Post("ipdst");
+       printf("<TR><TD align='center' colspan=4>dst ip:<BR><input type=text 
size=15 maxlength=15 name=ipdst value='%s'></TD></TR></TABLE>\n",(t)?t:"");
+       if(strlen(t)){ip->ip_dst.s_addr=inet_addr(t);} else 
{ip->ip_dst.s_addr=0;}
+       
+       printf("</TD><TD>\n");
+       
+       if(proto==6) {   // print tcp header input
+               printf("<TABLE border=1>\n");
+               printf("<TR><TD colspan=4 align='center' bgcolor='5555FF'>tcp 
header</TD></TR>\n");     
+               t=ClientInfo->Post("tcpsrcport");
+               printf("<TR><TD colspan=2 align='center'>src port:<BR><input 
type=text size=5 maxlength=5 name=tcpsrcport value='%s'></TD>\n",(t)?t:"");     
   
+               if(strlen(t)){tcp->th_sport=htons(atoi(t));}
+               t=ClientInfo->Post("tcpdstport");
+               printf("<TD colspan=2 align='center'>dst port:<BR><input 
type=text size=5 maxlength=5 name=tcpdstport 
value='%s'></TD></TR>\n",(t)?t:"");       
+               if(strlen(t)){tcp->th_dport=htons(atoi(t)); }
+               t=ClientInfo->Post("tcpseq");
+               printf("<TR><TD colspan=4 align='center'>Seq number:<BR><input 
type=text size=10 maxlength=10 name=tcpseq value='%s'></TD></TR>\n",(t)?t:"");  
 
+               if(strlen(t)){tcp->th_seq=htonl(strtoul(t,NULL,10));}
+               t=ClientInfo->Post("tcpack");
+               printf("<TR><TD colspan=4 align='center'>ack:<BR><input 
type=text size=10 maxlength=10 name=tcpack value='%s'></TD></TR>\n",(t)?t:"");  
+               if(strlen(t)){tcp->th_ack=htonl(strtoul(t,NULL,10)); }else 
{tcp->th_ack=0;}
+               
+               printf("<TR><TD align='center'><small><small>data 
offset:<BR>(computed)</small></small></TD>\n");       
+               printf("<TD 
align='center'><small><small>reserved:<BR>(computed)</small></small></TD>\n");  
    
+               printf("<TD align='center'>flags:<BR>\n");
+               printf("<TABLE border=0 cellspacing=0 cellpadding=0><TR>\n");
+               printf("<TD><small><small>URG </small></small></TD>\n");
+               printf("<TD><small><small>ACK </small></small></TD>\n");
+               printf("<TD><small><small>PSH </small></small></TD>\n");
+               printf("<TD><small><small>RST </small></small></TD>\n");
+               printf("<TD><small><small>SYN </small></small></TD>\n");
+               printf("<TD><small><small>FIN</small></small></TD></TR>\n");
+               t=ClientInfo->Post("tcpfURG");
+               if(strlen(t)){tcp->th_flags |= TH_URG;}else {tcp->th_flags &= 
~TH_URG;}
+               t=ClientInfo->Post("tcpfACK");
+               if(strlen(t)){tcp->th_flags |= TH_ACK;}else {tcp->th_flags &= 
~TH_ACK;}
+               t=ClientInfo->Post("tcpfPSH");
+               if(strlen(t)){tcp->th_flags |= TH_PUSH;}else {tcp->th_flags &= 
~TH_PUSH;}
+               t=ClientInfo->Post("tcpfRST");
+               if(strlen(t)){tcp->th_flags |= TH_RST;}else {tcp->th_flags &= 
~TH_RST;}
+               t=ClientInfo->Post("tcpfSYN");
+               if(strlen(t)){tcp->th_flags |= TH_SYN;}else {tcp->th_flags &= 
~TH_SYN;}
+               t=ClientInfo->Post("tcpfFIN");
+               if(strlen(t)){tcp->th_flags |= TH_FIN;}else {tcp->th_flags &= 
~TH_FIN;}
+               printf("<TD><input type=checkbox name=tcpfURG 
%s></TD>\n",((tcp->th_flags & TH_URG)==TH_URG)?"checked":"");
+               printf("<TD><input type=checkbox name=tcpfACK 
%s></TD>\n",((tcp->th_flags & TH_ACK)==TH_ACK)?"checked":"");
+               printf("<TD><input type=checkbox name=tcpfPSH 
%s></TD>\n",((tcp->th_flags & TH_PUSH)==TH_PUSH)?"checked":"");
+               printf("<TD><input type=checkbox name=tcpfRST 
%s></TD>\n",((tcp->th_flags & TH_RST)==TH_RST)?"checked":"");
+               printf("<TD><input type=checkbox name=tcpfSYN 
%s></TD>\n",((tcp->th_flags & TH_SYN)==TH_SYN)?"checked":"");
+               printf("<TD><input type=checkbox name=tcpfFIN 
%s></TD>\n",((tcp->th_flags & TH_FIN)==TH_FIN)?"checked":"");
+               printf("</TR></TABLE></TD>\n"); 
+               t=ClientInfo->Post("tcpwin");   
+               printf("<TD align='center'>window:<BR><input type=text size=7 
maxlength=7 name=tcpwin value='%s'></TD></TR>\n",(t)?t:"");       
+               if(strlen(t)) {tcp->th_win=htons(atoi(t)); } else 
{tcp->th_win=htons(1500);}
+               printf("<TR><TD colspan=2 
align='center'>checksum:<BR>automatic</TD>\n");       
+               t=ClientInfo->Post("tcpurg");   
+               printf("<TD colspan=2 align='center'>urgent:<BR><input 
type=text size=7 maxlength=7 name=tcpurg value='%s'></TD></TR>\n",(t)?t:"");    
 
+               printf("<TR><TD align='center' colspan=4>Tcp data<BR><textarea 
name=data cols='30' 
rows='4'>%s</textarea></TD></TR>\n",ClientInfo->Post("data"));
+               if(strlen(t)) {tcp->th_urp=htons(atoi(t)); } else 
{tcp->th_urp=0;}
+               printf("</TABLE>\n");
+               printf("</TABLE>\n");
+               tcp->th_x2=0;
+       };
+       printf("</TD></TR></TABLE>\n");
+       t=ClientInfo->Post("n_packets");
+       printf("<input type=text size=4 maxlength=4 value='10' name=n_packets 
value='%s'>\n",(t)?t:"");
+       if(strlen(t)){n=atoi(t); } 
+       printf("<input type=submit value='send packet' name=ipsend>\n");
+       t=ClientInfo->Post("data");     
+       memcpy(buf+sizeof(*ip)+sizeof(*tcp),t,(strlen(t)>128)?128:strlen(t));
+       
+       t=ClientInfo->Post("ipsend");
+       if(strlen(t)) {
+               s=socket(AF_INET,SOCK_RAW,IPPROTO_RAW);
+               to.sin_family=AF_INET;
+               to.sin_addr.s_addr=ip->ip_dst.s_addr;
+               to.sin_port=htons(tcp->th_dport);
+               ip->ip_sum=in_chksum((void *)&ip,sizeof(*ip));
+               tcp->th_sum=in_chksum((void *)&ip,sizeof(*ip)+sizeof(*tcp));
+               for(i=0;i<n;i++) {
+                       sendto(s,&buf,128,0,(struct sockaddr *)&to,sizeof(to));
+               };
+       };
+       printf("<br><a href='http://libwebserver.sourceforge.net'><img 
src='/libwebserver.gif' border='0'></a><BR>\n");
+       printf("</body>\n");
+       printf("</HTML>\n");
+
+};
+
+int main() {
+       int pid;
+       struct web_server serverSSL;
+       web_server_useSSLcert(&serverSSL,"./foo-cert.pem"); // Must be here 
couse of initalization of openssl
+       
while(!web_server_init(&serverSSL,PORTSSL,"packetmounter.log",WS_USESSL)) {
+               PORTSSL++;      
+       };
+       printf("https://localhost:%d\n",PORTSSL);
+       web_server_addhandler(&serverSSL,"* /*",packetmounter,0);
+       while(1) {
+               // DO whatever u want
+               web_server_run(&serverSSL); // Process web_server w/ SSL
+       };
+       return 0;
+
+};


Property changes on: GNUnet/libwebserver/doc/examples/packetmounter.c
___________________________________________________________________
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/doc/examples.html
===================================================================
--- GNUnet/libwebserver/doc/examples.html       2006-08-18 20:37:47 UTC (rev 
3245)
+++ GNUnet/libwebserver/doc/examples.html       2006-08-18 21:41:52 UTC (rev 
3246)
@@ -0,0 +1,445 @@
+<center><H3><font color='007700'>libwebserver 
examples</font></H3></center><BR><BR>
+
+<!-- Johannes E. Schindelin -->
+<center><A name=helloworld><B><font color='000077'><a href=/hello><H3>Hello 
World</H3></a></font></B></center>
+<small> <B>used functions:</B><BR>
+<a href='/?help=functions#web_server_init'>web_server_init</a><BR>
+<a href='/?help=functions#web_server_addhandler'>web_server_addhandler</a><BR>
+<a href='/?help=functions#web_server_run'>web_server_run</a><BR>
+</small><BR>
+
+This example starts the server with one handler for all requests pointing to 
hello_world()
+that prints the content-type with the end of the header "\r\n\r\n" and one 
simple printf with Hello world<BR><BR>
+
+<TABLE width='100%' bgcolor='CFCFCF' border=0><TR><TD>
+<CODE><PRE>
+#include "web_server.h"
+#include &lt;stdio.h&gt;
+
+
+void hello_world() {
+       printf("Content-type: text/plain\r\n\r\n");
+       printf("Hello, World!\r\n");
+}
+
+int main(int argc,char** argv) {
+        struct web_server server; // server handler
+        if(!web_server_init(&server,80,"help.log",0)) { // initialize and 
start the server at port 80, logging to help.log
+                fprintf(stderr,"can't open listen socket\n");
+               return 1;
+        };
+
+        web_server_addhandler(&server,"* *",hello_world,0); // add handler for 
all requests
+        while(1) {
+                web_server_run(&server);   // run server
+        };
+}
+</PRE></CODE>
+</TD></TR></TABLE>
+<HR><BR>
+
+<center><A name=logfile><B><font color='000077'><a 
href='/log'><H3>logfile</H3></a></font></B></center>
+<small> <B>used functions:</B><BR>
+<a href='/?help=functions#web_server_init'>web_server_init</a><BR>
+<a href='/?help=functions#web_server_addhandler'>web_server_addhandler</a><BR>
+<a href='/?help=functions#web_server_run'>web_server_run</a><BR>
+<a href='/?help=functions#web_client_addfile'>web_client_addfile</a><BR>
+</small><BR>
+
+This example uses the function <a 
href='/?help=functions#web_client_addfile'>web_client_addfile</a> to send a 
file to client
+<BR><BR>
+<TABLE width='100%' bgcolor='CFCFCF' border=0><TR><TD>
+<CODE><PRE>
+#include "web_server.h"
+#include &lt;stdio.h&gt;
+
+void logfile() {
+        printf("Content-type: text/plain\r\n\r\n");
+        web_client_addfile(server.logfile); // add help.log file to output
+        printf("End of log\n");
+};
+        
+
+main() {
+        struct web_server server; // server handler
+        if(!web_server_init(&server,82,"help.log",0)) { // initializate
+                fprintf(stderr,"can't open listen socket\n");
+        };
+
+        web_server_addhandler(&server,"* /log",logfile,0); // add handler for 
http://host/log requests
+        while(1) {
+                web_server_run(&server);   // run server
+        };
+};
+</PRE></CODE>
+</TD></TR></TABLE>
+<HR><BR>
+
+
+<center><A name=imageup><B><font color='000077'><a href='/image'><H3>Image 
Uploader</H3></a></font></B></center>
+<small> <B>used functions:</B><BR>
+<a href='/?help=functions#web_server_init'>web_server_init</a><BR>
+<a href='/?help=functions#web_server_addhandler'>web_server_addhandler</a><BR>
+<a href='/?help=functions#web_server_run'>web_server_run</a><BR>
+<a href='/?help=functions#clientinfo'>ClientInfo</a><BR>
+</small><BR>
+
+
+This example uses the struct <a 
href='/?help=functions#clientinfo'>ClientInfo</a> for fetching the input from 
the client
+using the Query("img") to send the image <BR>
+and multipart for fetching the uploaded file<BR>
+
+
+<BR><BR>
+<TABLE width='100%' bgcolor='CFCFCF' border=0><TR><TD>
+<CODE><PRE>
+#include "web_server.h"
+                
+#include &lt;stdlib.h&gt;
+        
+struct image {
+       char *data;
+       size_t size;
+} image={NULL,0};
+
+void imageout() {
+       if(strlen(ClientInfo->Query("img"))) {
+               if(image.data!=NULL) {
+                       printf("Content-type: image/jpeg\r\n\r\n");
+                       fwrite(image.data,image.size,1,stdout);
+               };
+               return;
+       };
+       printf("Content-type: text/html\r\n\r\n");
+       printf("&lt;HTML&gt;\n");
+       printf("&lt;BODY bgcolor='EFEFEF'&gt;\n");        
+       printf("&lt;form action='/' enctype='multipart/form-data'&gt;\n");
+       printf("&lt;input type=file name=image&gt;&lt;BR&gt;\n");
+       printf("&lt;/form&gt;\n");
+       if(strlen(ClientInfo->MultiPart("image").data)) {
+               printf("%s&lt;BR&gt;&lt;img 
src='/?img=%s.jpg'&gt;\n",ClientInfo->MultiPart("image").filename,ClientInfo->MultiPart("image").filename);
+               free(image.data);
+               image.data=malloc(ClientInfo->MultiPart("image").size+1);
+               
memcpy(image.data,ClientInfo->MultiPart("image").data,ClientInfo->MultiPart("image").size);
+               image.size=ClientInfo->MultiPart("image").size;
+       }else {
+               free(image.data);
+               image.data=NULL;
+       };
+       printf("&lt;/BODY&gt;\n");
+       printf("&lt;/HTML&gt;\n");
+};
+
+
+
+main() {
+       struct web_server server;
+       if(!web_server_init(&server,80,"teste.log",0)) {
+               fprintf(stderr,"can't open listen socket\n");
+       };
+       web_server_addhandler(&server,"* /",imageout,0);
+       while(1) {
+               web_server_run(&server);
+       };
+};
+</PRE></CODE>
+</TD></TR></TABLE>
+<HR><BR>
+
+
+<center><A name=auth><B><font color='000077'><a 
href='/auth'><H3>Authentication</H3></a> </font></B></center>
+<small> <B>used functions:</B><BR>
+<a href='/?help=functions#web_server_init'>web_server_init</a><BR>
+<a href='/?help=functions#web_server_addhandler'>web_server_addhandler</a><BR>
+<a href='/?help=functions#web_server_run'>web_server_run</a><BR>
+<a 
href='/?help=functions#web_client_HTTPdirective'>web_client_HTTPdirective</a><BR>
+</small><BR>
+
+Here we're using the <a 
href='/?help=functions#web_client_HTTPdirective'>web_client_HTTPdirective</a> 
to set up the server response
+
+<BR><BR>
+user: "username", pass: "password"
+<BR>
+<TABLE width='100%' bgcolor='CFCFCF' border=0><TR><TD>
+<CODE><PRE>
+#include "web_server.h"
+#include &lt;stdio.h&gt;
+#include &lt;string.h&gt;
+
+
+void urlauthenticate() {
+        if(!strlen(ClientInfo->user) || !strlen(ClientInfo->pass) &&
+            strcmp(ClientInfo->user,"username") || 
strcmp(ClientInfo->pass,"password")) { // you can read things from a auth file
+                web_client_HTTPdirective("HTTP/1.1 401 Authorization 
Required");
+                printf("WWW-Authenticate: Basic realm=\"This site info\"\r\n");
+                printf("Content-type: text/html\r\n\r\n");
+                printf("&lt;BODY&gt;\n");
+                printf("&lt;font color='FF0000'&gt;Access 
denied&lt;/font&gt;\n");
+                printf("&lt;/BODY&gt;\n");
+                return;
+        }
+        printf("Content-type: text/html\r\n\r\n");         
+        printf("&lt;BODY bgcolor='EFEFEF'&gt;\n");        
+        printf("You entered in your area\n");
+        printf("&lt;/BODY&gt;&lt;/HTML&gt;\n");
+};
+
+
+main() {
+        struct web_server server; // server handler
+        if(!web_server_init(&server,83,"help.log",0)) { // initialize
+                fprintf(stderr,"can't open listen socket\n");
+        };
+
+        web_server_addhandler(&server,"* /auth",urlauthenticate,0);
+        while(1) {
+                web_server_run(&server);   // run server
+        };
+};
+</PRE></CODE>
+</TD></TR></TABLE>
+<HR><BR>
+
+
+<CENTER><A name=ssl><B><font color='000077'><H3>openssl for 
(https)</H3></font></B></CENTER>
+<small> <B>used functions:</B><BR>
+<a 
href='/?help=functions#web_server_HTTPdirective'>web_server_useSSLcert</a><BR>
+<a href='/?help=functions#web_server_init'>web_server_init</a><BR>
+<a href='/?help=functions#web_server_run'>web_server_run</a><BR>
+</small><BR>
+
+Here we setup a server and we use the <a 
href='/?help=functions#web_server_useSSLcert'>web_server_useSSLcert</a> to use 
specific certificate file
+and we start the server with the flag WS_USESSL for secure connections 
(libwebserver compiled w/ openssl)<BR><BR>
+
+See also the packetmounter example in the example directory. 
+<BR>
+<TABLE width='100%' bgcolor='CFCFCF' border=0><TR><TD>
+<CODE><PRE>
+
+  
+#include "web_server.h"
+
+int main()
+        struct web_server serverssl;
+        web_server_useSSLcert(&serverssl,"foo-cert.pem"); // Certificate file  
  
+        if(!web_server_init(&serverssl,443,"help.log",WS_USESSL)) {
+                fprintf(stderr,"Cannot open port\n");
+        };
+        while(1) {
+                web_server_run(&serverssl);
+        };
+};
+</PRE></CODE>
+</TD></TR></TABLE>
+All the rest is the same as without SSL. 
+<HR><BR>
+
+
+<center><A name=outgif><B><font color='000077'><a href='/gif'><H3>Gif 
generator</H3></a></font></B></center>
+<small> <B>used functions;</B><BR>
+<a href='/?help=functions#web_server_init'>web_server_init</a><BR>
+<a href='/?help=functions#web_server_addhandler'>web_server_addhandler</a><BR>
+<a href='/?help=functions#web_server_run'>web_server_run</a><BR>
+<a 
href='/?help=functions#web_client_gifsetpalette'>web_client_gifsetpalette</a><BR>
+<a href='/?help=functions#web_client_gifoutput'>web_client_gifoutput</a><BR>
+<a href='/?help=functions#clientinfo'>ClientInfo</a><BR>
+</small><BR>
+
+This example draws an circle at x,y requested by client, and outputs with 
function <a 
href='/?help=functions#web_client_gifoutput'>web_client_gifoutput</a>
+
+
+<BR><BR>
+<TABLE width='100%' bgcolor='CFCFCF' border=0><TR><TD>
+<CODE><PRE>
+#include "web_server.h"
+#include &lt;stdio.h&gt;
+#include &lt;math.h&gt;
+
+
+#define GIFSIDE 320
+char gifdata[GIFSIDE*GIFSIDE];
+void outgif() {
+       float i;
+       int x,y,xc,yc;
+       int color;
+       web_client_gifsetpalette("EGA");
+       if(*ClientInfo->Query("img")!=0) {
+               printf("Content-type: image/gif\r\n\r\n");
+               if(!strcmp(ClientInfo->Query("img"),"circle")) {
+                       xc=atoi(ClientInfo->Query("x"))%GIFSIDE;
+                       yc=atoi(ClientInfo->Query("y"))%GIFSIDE;
+                       color=(rand()%15)+1;
+                       for(i=0;i<6.28;i+=0.01) {
+                               x=(int)(GIFSIDE+(xc+cos(i)*10))%GIFSIDE;
+                               y=(int)(GIFSIDE+(yc+sin(i)*10))%GIFSIDE;
+                               gifdata[x+(y*GIFSIDE)]=color;
+                       };
+               };
+               web_client_gifoutput(gifdata,GIFSIDE,GIFSIDE);
+       };
+       printf("&lt;center&gt;Generated a circle (click inside the 
image)&lt;BR&gt;\n");
+       printf("Pressed 
x=%s,y=%s&lt;BR&gt;\n",ClientInfo->Query("x"),ClientInfo->Query("y"));
+       printf("&lt;form&gt;&lt;input type=image border=0 
src='/gif?img=circle&x=%s&y=%s'&gt;&lt;/form&gt;&lt;/CENTER&gt;\n",ClientInfo->Query("x"),ClientInfo->Query("y"));
+};
+
+
+main() {
+       struct web_server server; // server handler
+       memset(gifdata,0,GIFSIDE*GIFSIDE);
+       if(!web_server_init(&server,83,"help.log",0)) { // initialize
+               fprintf(stderr,"can't open listen socket\n");
+       };
+
+       web_server_addhandler(&server,"* /gif",outgif,0);
+       while(1) {
+               web_server_run(&server);   // run server
+       };
+};
+</PRE></CODE>
+</TD></TR></TABLE>
+<HR><BR>
+
+
+
+<CENTER><A name=cookie><B><font color='000077'><a 
href=/cookie><H3>Cookies</H3></a></font></B></CENTER>
+<small> <B>used functions;</B><BR>
+<a href='/?help=functions#web_server_init'>web_server_init</a><BR>
+<a href='/?help=functions#web_server_addhandler'>web_server_addhandler</a><BR>
+<a href='/?help=functions#web_server_run'>web_server_run</a><BR>
+<a href='/?help=functions#clientinfo'>ClientInfo</a><BR>
+<a href='/?help=functions#web_client_setcookie'>web_client_setcookie</a><BR>
+</small><BR>
+
+This example fetchs an client input and set's an cookie for 15 minutes "+15M" 
using function <a 
href='/?help=functions#web_client_setcookie'>web_client_setcookie</a>
+
+<BR><BR>
+<TABLE width='100%' bgcolor='CFCFCF' border=0><TR><TD>
+<CODE><PRE>
+#include "web_server.h"
+#include &lt;stdio.h&gt;
+
+
+void cookie() {
+       if(strlen(ClientInfo->Post("user")))
+               
web_client_setcookie("username",ClientInfo->Post("user"),"+15M");
+       printf("Content-type: text/html\r\n\r\n");
+       printf("&lt;form method='POST'&gt;\r\n");
+       printf("&lt;input type='text' name='user' 
value='%s'&gt;\r\n&lt;BR&gt;",ClientInfo->Cookie("username"));
+       printf("&lt;input type='submit' name='send' value=' GO! 
'&gt;\r\n&lt;BR&gt;");
+       printf("&lt;/form&gt;\r\n");
+}
+
+int main(int argc,char** argv) {
+        struct web_server server; // server handler
+        if(!web_server_init(&server,80,"help.log",0)) { // initialize
+                fprintf(stderr,"can't open listen socket\n");
+               return 1;
+        };
+
+        web_server_addhandler(&server,"* /*",cookie,0); // add handler for all 
requests
+        while(1) {
+                web_server_run(&server);   // run server
+        };
+}
+
+</PRE></CODE>
+</TD></TR></TABLE>
+<HR><BR>
+
+<center><A name=checkbox><B><font color='000077'><a 
href=/checkbox><H3>Checkbox</H3></a></font></B></center>
+<small> <B>used functions;</B><BR>
+<a href='/?help=functions#web_server_init'>web_server_init</a><BR>
+<a href='/?help=functions#web_server_addhandler'>web_server_addhandler</a><BR>
+<a href='/?help=functions#web_server_run'>web_server_run</a><BR>
+<a href='/?help=functions#clientinfo'>ClientInfo</a><BR>
+</small><BR>
+
+This example uses a especific case from <a 
href='/?help=functions#clientinfo'>ClientInfo</a> query and post, using the '#' 
as prefix of varname returning the number of occurences
+
+
+<BR><BR>
+<TABLE width='100%' bgcolor='CFCFCF' border=0><TR><TD>
+<CODE><PRE>
+
+#include "web_server.h"
+#include &lt;stdio.h&gt;
+
+
+void checkbox() {
+       int i=0;
+       char *txt[]={"one","two","three","four","five"};
+       printf("Content-type: text/html\r\n\r\n");
+       printf("&lt;form method='QUERY'&gt;\r\n");
+       
+       for(i=0;i<5;i++) {      
+               printf("&lt;input type='checkbox' name='number' 
value='%s'&gt;\r\n&lt;BR&gt;",txt[i]);  
+       };
+       printf("&lt;input type='submit' name='send' value=' SEND 
'&gt;\r\n&lt;BR&gt;");
+       printf("&lt;/form&gt;\r\n");
+       
+       printf("You have choosen &lt;font color='FF0000'&gt;%d&lt;/font&gt; 
numbers: \r\n",ClientInfo->Query("#number"));
+       for(i=0;i&lt;ClientInfo->Query("#number");i++) {        
+               
printf("&lt;b>%s&lt;/b&gt;,\r\n\r\n",ClientInfo->Query("number"));
+       };
+       printf("...&lt;BR&gt;\r\n\r\n");
+       
+}
+int main(int argc,char** argv) {
+        struct web_server server; // server handler
+        if(!web_server_init(&server,80,"help.log",0)) { // initialize
+                fprintf(stderr,"can't open listen socket\n");
+               return 1;
+        };
+
+        web_server_addhandler(&server,"* /*",checkbox,0); // add handler for 
all requests
+        while(1) {
+                web_server_run(&server);   // run server
+        };
+}
+
+</PRE></CODE>
+</TD></TR></TABLE>
+<HR><BR>
+
+<center><A name=confexample><B><font color='000077'><a 
href=/confexample><H3>Config example</H3></a></font></B></center>
+<small> <B>used functions;</B><BR>
+<a href='/?help=functions#web_server_init'>web_server_init</a><BR>
+<a href='/?help=functions#web_server_addhandler'>web_server_addhandler</a><BR>
+<a href='/?help=functions#web_server_run'>web_server_run</a><BR>
+<a href='/?help=functions#web_client_addfile'>web_client_addfile</a><BR>
+<a href='/?help=functions#clientinfo'>ClientInfo</a><BR>
+</small><BR>
+
+
+<BR><BR>
+<TABLE width='100%' bgcolor='CFCFCF' border=0><TR><TD>
+<CODE><PRE>
+#include "web_server.h"
+#include &lt;stdio.h&gt;
+
+
+void confexample() {
+       printf("Content-type: text/html\r\n\r\n");
+       printf("&lt;PRE&gt;");
+       web_client_addfile(server.conffile); // add help.cfg file to output     
+       printf("&lt;/PRE&gt;");
+       
printf("ClientInfo->Conf(\"PERSONAL_CONF\",\"PORT\")=%s&lt;BR&gt;\n",ClientInfo->Conf("PERSONAL_CONF","PORT"));
+       
printf("ClientInfo->Conf(\"PERSONAL_CONF\",\"IP\")=%s&lt;BR&gt;\n",ClientInfo->Conf("PERSONAL_CONF","IP"));
+       
printf("ClientInfo->Conf(\"LIBWEBSERVER\",\"PORT\")=%s&lt;BR&gt;\n",ClientInfo->Conf("LIBWEBSERVER","PORT"));
+       
+}
+
+int main(int argc,char** argv) {
+        struct web_server server; // server handler
+        if(!web_server_init(&server,80,"help.cfg",WS_USEEXTCONF)) { // 
initialize
+                fprintf(stderr,"can't open listen socket\n");
+               return 1;
+        };
+
+        web_server_addhandler(&server,"* *",confexample,0); // add handler for 
all requests
+        while(1) {
+                web_server_run(&server);   // run server
+        };
+}
+</PRE></CODE>
+</TD></TR></TABLE>
\ No newline at end of file

Added: GNUnet/libwebserver/doc/functions.html
===================================================================
--- GNUnet/libwebserver/doc/functions.html      2006-08-18 20:37:47 UTC (rev 
3245)
+++ GNUnet/libwebserver/doc/functions.html      2006-08-18 21:41:52 UTC (rev 
3246)
@@ -0,0 +1,355 @@
+<center><H3><font color='007700'>libwebserver 
Functions</font></H3></center><BR><BR>
+<font face='Verdana'>
+
+<A name=web_server_init><B><font 
color='000077'>web_server_init()</font></B><BR><BR>
+<B>NAME</B>
+<UL>web_server_init - Initialize webserver</UL>
+<B>SYNOPSIS</B>
+<UL>#include "web_server.h"<BR><BR>int web_server_init(struct web_server 
*<U>server</U>, int <U>port</U>, const char *<U>logfile</U>, int 
<U>flags</U>);</UL>
+<B>DESCRIPTION</B>
+<UL>The web_server_init() function initializes the server handler 
<U>server</U>, start a listen socket at port <U>port</U>, with the logfile 
<U>logfile</U> to produce the webserver log<BR> if WS_USEEXTCONF flag is used, 
the <U>logfile</U> will be the config file <BR>
+<U>flags</U> <BR>
+WS_USESSL for openssl connections (https support)<BR>
+WS_USEEXTCONF for using a external config file<BR>
+WS_LOCAL only accepts 127.0.0.1 (local) connections
+</UL>
+
+<B>RETURN VALUE</B>
+<UL>On success, 1 is returned, On error, 0 is returned</UL>
+<HR><BR>
+ 
+
+<A name=web_server_addhandler><B><font 
color='000077'>web_server_addhandler()</font></B><BR><BR>
+<B>NAME</B>
+<UL>web_server_addhandler - adds a request handler</UL>
+<B>SYNOPSIS</B>
+<UL>#include "web_server.h"<BR><BR>int web_server_addhandler(struct web_server 
*<U>server</U>, const char *<U>mstr</U>, void (*<U>func</U>)(), int 
<U>flags</U>);</UL>
+<B>DESCRIPTION</B>
+<UL>The web_server_addhandler() function adds a request handler <U>mstr</U> to 
the server handler <U>server</U> through the function <U>func</U>.<BR>
+<U>mstr</U> is a string containing expressions (as matching files) to match 
with the client request (GET /<B>blah.html</B>?id=1 HTTP/1.0, will be matched 
by <U>mstr</U>="* /blah.html")<BR>
+<U>flags:</U> <BR>
+WS_LOCAL - only local connections are handled<BR>
+WS_DYNVAR - treat dynamic variables on output (Atention: this disables 
"Content-range" and "Content-length" header, responding "501 not 
implemented")<BR>
+WS_USELEN - With this flag, library calculate the header "Content-length" and 
"Content-range" it self, useful for resuming, content-length can be 
miscalculated if the file added by (web_client_addfile) changes the size of 
contents, between calculating and output<BR>
+</UL>
+<B>RETURN VALUE</B>
+<UL>On success, 1 is returned, On error, 0 is returned</UL>
+<HR><BR>
+
+<A name=web_server_aliasdir><B><font 
color='000077'>web_server_aliasdir()</font></B><BR><BR>
+<B>NAME</B>
+<UL>web_server_aliasdir - Generates a directory list, and use file based 
server</UL>
+<B>SYNOPSIS</B>
+<UL>#include "web_server.h"<BR><BR>int web_server_aliasdir(struct web_server 
*<U>server</U>, const char *<U>alias</U>, char *<U>path</U>, int 
<U>flags</U>);</UL>
+<B>DESCRIPTION</B>
+<UL>The web_server_aliasdir() function adds an alias <U>alias</U> to the 
server handler <U>server</U> and use files from <U>path</U>.<BR>
+<U>flags:</U> <BR>
+WS_LOCAL - only local connections are handled<BR>
+WS_DYNVAR - treat dynamic variables on output (Atention: this disables 
"Content-range" and "Content-length" header, responding "501 not 
implemented")<BR>
+WS_USELEN - With this flag, library calculate the header "Content-length" and 
"Content-range" it self, useful for resuming, content-length can be 
miscalculated if the file added by (web_client_addfile) changes the size of 
contents, between calculating and output<BR>
+</UL>
+<B>RETURN VALUE</B>
+<UL>On success, 1 is returned, On error, 0 is returned</UL>
+<HR><BR>
+
+<A name=web_server_run><B><font 
color='000077'>web_server_run()</font></B><BR><BR>
+<B>NAME</B>
+<UL>web_server_run - run the server</UL>
+<B>SYNOPSIS</B>
+<UL>#include "web_server.h"<BR><BR>int web_server_run(struct web_server 
*<U>server</U>);</UL>
+<B>DESCRIPTION</B>
+<UL>The web_server_run() function processes requests to the server 
<U>server</U>. This function must be called from the main application loop (the 
functions doesn't loop it self)</UL>
+<B>RETURN VALUE</B>
+<UL>On success, greater than 0, is returned (2 if there wasn't client, 1 if 
some request was processed), On error, 0 is returned</UL>
+<HR><BR>
+
+<A name=web_server_getconf><B><font 
color='000077'>web_server_getconf()</font></B><BR><BR>
+<B>NAME</B>
+<UL>web_server_getconf - get data from config filer</UL>
+<B>SYNOPSIS</B>
+<UL>#include "web_server.h"<BR><BR>char *web_server_getconf(struct web_server 
*<U>server</U>,char *<U>topic</U>,char *<U>key</U>);</UL>
+<B>DESCRIPTION</B>
+<UL>The web_server_getconf() function allocates and return a string from 
config file related to <U>topic</U> and <U>key</U> (see <a 
href="/?help=functions#configfile">config file help</a>) This function must be 
called after the init of the var <U>server</U></UL>
+<B>RETURN VALUE</B>
+<UL>returns allocated string, (you should free after use) or null if nothing 
related to arguments found</UL>
+<HR><BR>
+
+<A name=web_server_useSSLcert><B><font 
color='000077'>web_server_useSSLcert()</font></B><BR><BR>
+<B>NAME</B>
+<UL>web_server_useSSLcert - use certificate</UL>
+<B>SYNOPSIS</B>
+<UL>#include "web_server.h"<BR><BR>void web_server_useSSLcert(struct 
web_server *<U>server</U>, const char *<U>file</U>);</UL>
+<B>DESCRIPTION</B>
+<UL>The web_server_useSSLcert() function tells server <U>server</U> to use 
certificate file <U>file</U> on ssl connections (initializated w/ flag 
WS_USESSL)</UL>
+<HR><BR>
+
+<A name=web_server_useMIMEfile><B><font 
color='000077'>web_server_useMIMEfile()</font></B><BR><BR>
+<B>NAME</B>
+<UL>web_server_useMIMEfile - use mime types file</UL>
+<B>SYNOPSIS</B>
+<UL>#include "web_server.h"<BR><BR>void web_server_useMIMEfile(struct 
web_server *<U>server</U>, const char *<U>file</U>);</UL>
+<B>DESCRIPTION</B>
+<UL>The web_server_useMIMEfile() function tells server <U>server</U> to use 
mimes type file <U>file</U> for determining mime type by extension used by 
function <a 
href="/?help=functions#web_client_contenttype">web_client_contenttype()</a></UL>
+<HR><BR>
+
+
+<A name=web_client_addstream><B><font 
color='000077'>web_client_addstream()</font></B><BR><BR>
+<B>NAME</B>
+<UL>web_client_addstream - add an output stream to the client struct on 
webserver</UL>
+<B>SYNOPSIS</B>
+<UL>#include "web_server.h"<BR><BR>int web_client_addstream(FILE 
*<U>stream</U>);</UL>
+<B>DESCRIPTION</B>
+<UL>The web_client_addstream() function adds the stream <U>stream</U> to the 
output stream list in the current client node</UL>
+ <B>NOTE</B>
+<UL>The web_client_addstream() function can <B>only</B> be called from 
functions called by gethandlers registered by <a 
href='/?help=functions#web_server_addhandler'>web_server_addhandler()</a>.</UL>
+<UL>The web_client_addstream() function is obsolete and no longer in use on 
0.3.4 versions, use web_client_addfile instead</ul>
+<B>RETURN VALUE</B>
+<UL>On success, 1 is returned, On error, 0 is returned</UL>
+<HR><BR>
+
+<A name=web_client_addfile><B><font 
color='000077'>web_client_addfile()</font></B><BR><BR>
+<B>NAME</B>
+<UL>web_client_addfile - add a file to the output stream of the client struct 
on the webserver</UL>
+<B>SYNOPSIS</B>
+<UL>#include "web_server.h"<BR><BR>int web_client_addfile(const char 
*<U>file</U>);</UL>
+<B>DESCRIPTION</B>
+<UL>The web_client_addfile() function opens the file <U>file</U> and adds it 
as stream to the output stream list in the current client node</UL>
+ <B>NOTE</B>
+<UL>The web_client_addfile() function can be called <B>only</B> from functions 
called by gethandlers registered via <a 
href='/?help=functions#web_server_addhandler'>web_server_addhandler()</a>.</UL>
+<B>RETURN VALUE</B>
+<UL>On Success, 1 is returned, On error, 0 is returned</UL>
+<HR><BR>
+
+<A name=web_client_gifoutput><B><font 
color='000077'>web_client_gifoutput()</font></B><BR><BR>
+<B>NAME</B>
+<UL>web_client_gifoutput - export data as gif</UL>
+<B>SYNOPSIS</B>
+<UL>#include "web_server.h"<BR><BR>int web_client_gifoutput(char 
*<U>data</U>,int <U>w</U>,int <U>h</u>);</UL>
+<B>DESCRIPTION</B>
+<UL>The web_client_gifoutput() function prints to stdout a gif header (with 
width <U>w</U> and height <U>h</U>) and the image pointed by <U>data</U>.<BR>
+The allocated memory <U>data</U> points to mustn't be smaller than 
<U>w</U>*<U>h</U>.<BR>
+The gif palette is described by <a 
href='/?help=functions#web_client_gifsetpalette'>web_client_gifsetpalette</a>
+</UL>
+<B>NOTE</B>
+<UL>The web_client_gifoutput() function can be called <B>only</B> from 
functions called by gethandlers registered via <a 
href='/?help=functions#web_server_addhandler'>web_server_addhandler()</a>.</UL>
+<B>RETURN VALUE</B>
+<UL>On Success, 0 is returned, On error, non zero is returned.</UL>
+<HR><BR>
+
+<A name=web_client_gifsetpalette><B><font 
color='000077'>web_client_gifsetpalette()</font></B><BR><BR>
+<B>NAME</B>
+<UL>web_client_gifsetpalette - Setup the gif palette</UL>
+<B>SYNOPSIS</B>
+<UL>#include "web_server.h"<BR><BR>void web_client_gifsetpalette(char 
*<U>file</U>);</UL>
+<B>DESCRIPTION</B>
+<UL>The web_client_gifsetpalette() function loads raw palette (.act) from 
<U>file</U> or if <U>file</U> is "EGA" then this function setups the palette to 
EGA mode<BR>
+</UL>
+<HR><BR>
+
+
+<A name=web_client_setcookie><B><font 
color='000077'>web_client_setcookie()</font></B><BR><BR>
+<B>NAME</B>
+<UL>web_client_setcookie - set a cookie</UL>
+<B>SYNOPSIS</B>
+<UL>#include "web_server.h"<BR><BR>void web_client_setcookie(char *<U>key</U>, 
char *<U>value</U>, char *<U>timeoffset</U>, char *<U>path</U>,char 
*<U>domain</U>,int <U>secure</U>);</UL>
+<B>DESCRIPTION</B>
+<UL>The web_client_setcookie() function sets a cookie on client browser with 
key <U>key</U>, value <U>value</U> and expires at <U>timeoffset</U>.<BR>
+timeoffset format is one like <U>sign</U>, <U>number offset</U> and 
<U>directive</U> <small> (i.e +10m, 10 months)</small>
+       <UL><U>sign</U> is on like '-' or '+'</UL>
+       <UL><U>number offset</U> is like +<U>5</U>M means expires at next 5 
minutes </UL>
+       <UL><U>directive</U> is:
+               <UL>S - seconds</UL>
+               <UL>M - minutes</UL>
+               <UL>H - hours</UL>
+               <UL>d - days</UL>
+               <UL>m - months</UL>
+               <UL>y - years</UL>
+       </UL>
+       path - Subset of URLs in a domain for which the cookie is valid
+           (If the path is not specified (path == NULL), it as assumed to be
+            the same path as the document being described by the header which
+            contains the cookie.)<BR>
+    domain = Domain the cookie is valid for
+             (If the domain is not set (domain == NULL), the default value of
+             domain is the host name of the server which generated the cookie
+             response.)<BR>
+       secure = If a cookie is marked secure (secure == 1), it will only be
+             transmitted if the communications channel with the host is a
+             secure one. Currently this means that secure cookies will only be
+             sent to HTTPS (HTTP over SSL) servers.
+             (If secure is not specified (secure == 0), a cookie is considered
+              safe to be sent in the clear over unsecured channels. )<BR>
+ 
+</UL>
+<B>NOTE</B>
+<UL> The web_client_setcookie() function should be called <B>only</B> from 
functions called by gethandlers registered via <a 
href='/?help=functions#web_server_addhandler'>web_server_addhandler()</a><BR></UL>
+<HR><BR>
+
+
+<A name=web_client_deletecookie><B><font 
color='000077'>web_client_deletecookie()</font></B><BR><BR>
+<B>NAME</B>
+<UL>web_client_deletecookie - delete a cookie</UL>
+<B>SYNOPSIS</B>
+<UL>#include "web_server.h"<BR><BR>void web_client_deletecookie(char 
*<U>key</U>);</UL>
+<B>DESCRIPTION</B>
+<UL>The web_client_deletecookie() function delete a cookie on client browser 
with key <U>key</U><BR>
+
+</UL>
+<B>NOTE</B>
+<UL> The web_client_deletecookie() function should be called <B>only</B> from 
functions called by gethandlers registered via <a 
href='/?help=functions#web_server_addhandler'>web_server_addhandler()</a><BR></UL>
+<HR><BR>
+
+<A name=web_client_setvar><B><font 
color='000077'>web_client_setvar()</font></B><BR><BR>
+<B>NAME</B>
+<UL>web_client_setvar - sets a variable</UL>
+<B>SYNOPSIS</B>
+<UL>#include "web_server.h"<BR><BR>int web_client_setvar(char *<U>name</U>, 
char *<U>value</U>);</UL>
+<B>DESCRIPTION</B>
+<UL>The web_client_setvar() function sets an variable named <U>name</U> with 
value <U>value</U> in a connection, to be used in output (only available if 
WS_DYNVAR flag used)<BR>
+        web_client_setvar("bgc","#ff00dd");<BR>
+     printf("&lt;BODY bgcolor='$bgc;'&gt;");  - will exchange the string $bgc; 
to #ff00dd on output</UL>
+
+<B>NOTE</B>
+<UL>The web_client_setvar() function <B>should</B> be called <B>only</B> from 
functions called by gethandlers registered via <a 
href='/?help=functions#web_server_addhandler'>web_server_addhandler()</a>.</UL>
+<HR><BR>
+
+<A name=web_client_getvar><B><font 
color='000077'>web_client_getvar()</font></B><BR><BR>
+<B>NAME</B>
+<UL>web_client_getvar - gets a variable value</UL>
+<B>SYNOPSIS</B>
+<UL>#include "web_server.h"<BR><BR>int web_client_getvar(char 
*<U>name</U>);</UL>
+<B>DESCRIPTION</B>
+<UL>The web_client_getvar() function gets the value of variable <U>name</U>, 
(see also <a 
href=/?help=functions#web_client_setvar>web_client_setvar()</a>)<BR></UL>
+<B>NOTE</B>
+<UL>The web_client_getvar() function <B>should</B> be called <B>only</B> from 
functions called by gethandlers registered via <a 
href='/?help=functions#web_server_addhandler'>web_server_addhandler()</a>.</UL>
+<HR><BR>
+
+<A name=web_client_delvar><B><font 
color='000077'>web_client_delvar()</font></B><BR><BR>
+<B>NAME</B>
+<UL>web_client_delvar - delete a variable</UL>
+<B>SYNOPSIS</B>
+<UL>#include "web_server.h"<BR><BR>int web_client_delvar(char 
*<U>name</U>);</UL>
+<B>DESCRIPTION</B>
+<UL>The web_client_delvar() function deletes a variable with name 
<U>name</U><BR></UL>
+<B>NOTE</B>
+<UL>The web_client_delvar() function <B>should</B> be called <B>only</B> from 
functions called by gethandlers registered via <a 
href='/?help=functions#web_server_addhandler'>web_server_addhandler()</a>.</UL>
+<HR><BR>
+
+
+<A name=web_client_HTTPdirective><B><font 
color='000077'>web_client_HTTPdirective()</font></B><BR><BR>
+<B>NAME</B>
+<UL>web_client_HTTPdirective - Change the HTTP header status</UL>
+<B>SYNOPSIS</B>
+<UL>#include "web_server.h"<BR><BR>void web_client_HTTPdirective(char 
*<U>directive</U>);</UL>
+<B>DESCRIPTION</B>
+<UL>The web_client_HTTPdirective() function changes the HTTP header status 
(i.e. "HTTP/1.1 200 OK") to the string <U>directive</U><BR>
+<small><i>useful for "HTTP/1.1 401 Authorization Required" (to require a 
password), redirection or similar actions on the client side</i></small>.</UL>
+ <B>NOTE</B>
+<UL>The web_client_HTTPdirective() function can be called <B>only</B> from 
functions called by gethandlers registered via <a 
href='/?help=functions#web_server_addhandler'>web_server_addhandler()</a>.</UL>
+<HR><BR>
+
+<A name=web_client_contenttype><B><font 
color='000077'>web_client_contenttype()</font></B><BR><BR>
+<B>NAME</B>
+<UL>web_client_contenttype - prints to stdout the header "Content-type: 
*/*"</UL>
+<B>SYNOPSIS</B>
+<UL>#include "web_server.h"<BR><BR>void web_client_contenttype(char 
*<U>extension</U>);</UL>
+<B>DESCRIPTION</B>
+<UL>The web_client_contenttype() prints to stdout the header "Content-type: 
*/*", where '*/*' is determined by <U>extension</U> (i.e. "html" based on 
mimefile produces "Content-type: text/html\r\n\r\n" and "jpg" produces 
"Content-type: image/jpeg\r\n\r\n")<BR>
+<small>this function is used on <a 
href="/?help=functions#web_server_aliasdir">web_server_aliasdir()</a></small></UL>
+ <B>NOTE</B>
+<UL>This function uses mime types loaded at <a 
href="/?help=functions#web_server_useMIMEfile">web_server_useMIMEfile()</a> 
else it will print only "Content-type: text/plain\r\n\r\n"</UL>
+<HR><BR>
+
+<A name=web_log><B><font color='000077'>web_log()</font></B><BR><BR>
+<B>NAME</B>
+<UL>web_log - write to logfile</UL>
+<B>SYNOPSIS</B>
+<UL>#include "web_server.h"<BR><BR>void web_log(const char 
*<U>format</U>,<U>...</U>);</UL>
+<B>DESCRIPTION</B>
+<UL>The web_log() is similar to printf, but writes to a logfile (specified in 
<a href=/?help=functions#web_server_init>web_server_init()</a>). Just as 
printf, it doesn't add a newline at the end.</UL>
+ <B>NOTE</B>
+<UL>The web_log() function <B>should</B> be called <B>only</B> from functions 
called by gethandlers registered via <a 
href='/?help=functions#web_server_addhandler'>web_server_addhandler()</a>.</UL>
+<HR><BR>
+
+<A name=ClientInfo><B><font color='000077'>ClientInfo</font></B><BR><BR>
+<B>NAME</B>
+<UL>ClientInfo - a struct to control client Header</UL>
+<B>SYNOPSIS</B>
+<UL> Declared in web_server.h <BR><BR>
+extern struct ClientInfo {<BR>
+<UL>
+        int <U>outfd</U>;<BR>
+        char *<U>inetname</U>;<BR>
+        char *<U>request</U>;<BR>
+        char *<U>method</U>;<BR>
+        char *<U>user</U>;<BR>
+        char *<U>pass</U>;<BR>
+               char *(*<U>Header</U>)(char *handle);<BR>
+        char *(*<U>Query</U>)(char *handle);<BR>
+        char *(*<U>Post</U>)(char *handle);<BR>
+        char *(*<U>Cookie</U>)(char *handle);<BR>
+               char *(*<U>Conf</U>)(char *handle);<BR>
+        struct _MultiPart (*<U>MultiPart</U>)(char *handle);<BR>
+        void *__pad[5];<BR>
+</UL>
+} *<U>ClientInfo</U>;
+</UL>
+<B>DESCRIPTION</B>
+<UL>
+<B>ClientInfo-&gt;<U>outfd</U></B> <UL>is the filedescriptor of the current 
output stream (useful for cgi handlers and friends).</UL><BR>
+<B>ClientInfo-&gt;<U>inetname</U></B> <UL>a string to inetname (i.e. 
"127.0.0.1")</UL> <BR>
+<B>ClientInfo-&gt;<U>request</U></B> <UL>is the requested 'file' (i.e. for 
"GET /index.html HTTP/1.0\r\n" the ClientInfo-&gt;request is 
"/index.html")</UL><BR>
+<B>ClientInfo-&gt;<U>method</U></B> <UL>is the request method ("GET" or "POST" 
etc..)</UL><BR>
+<B>ClientInfo-&gt;<U>user</U></B> <UL>AuthRealm username</UL><BR>
+<B>ClientInfo-&gt;<U>pass</U></B> <UL>AuthRealm password</UL><BR>
+<B>ClientInfo-&gt;<U>Header(</U>char *<U>handle</U>)</B> <UL>Function to parse 
the header, and returns Header information (i.e. for "Host: 
http://127.0.0.1:81"; the result of ClientInfo-&gt;Header("Host") is 
"http://127.0.0.1:81";) if argument <U>handle</U> is NULL then this function 
returns whole Header from client</UL><BR>
+<B>ClientInfo-&gt;<U>Query(</U>char *<U>handle</U>)</B> <UL>A function that 
returns the query value from the browser (i.e for the request 
"http://somehost.net/req.html?id=5&f=1";, ClientInfo-&gt;Query("id") is "5".if 
argument <U>handle</U> is NULL then this function returns whole Query string 
from client<BR>if the handle have the char # first (like "#handle") it returns 
the number of variables (usefull for checkboxes and etc...) Check <a 
href='/?help=examples#checkbox'>checkbox example</a></UL><BR>
+<B>ClientInfo-&gt;<U>Post(</U>char *<U>handle</U>)</B> <UL>A function that 
returns the Post data from the forms with method 'POST'. <U>handle</U> is the 
name of some &lt;input&gt; tag.if argument <U>handle</U> is NULL then this 
function returns whole Post data from client<BR>if the handle have the char # 
first (like "#handle") it returns the number of variables (usefull for 
checkboxes and etc...) Check <a href='/?help=examples#checkbox'>checkbox 
example</a></UL><BR>
+<B>ClientInfo-&gt;<U>Cookie(</U>char *<U>handle</U>)</B> <UL>A function that 
returns the Cookie data from browser. if argument <U>handle</U> is NULL then 
this function returns whole Cookiestring from client</UL><BR>
+<B>ClientInfo-&gt;<U>Conf(</U>char * <U>topic</U>,char *<U>handle</U>)</B> 
<UL>A function that returns an value from a <U>key</U> in <U>topic</U> in the 
config file if used</UL><BR>
+<B>ClientInfo-&gt;<U>MultiPart(</U>char *<U>handle</U>)</B> <UL>A function 
that returns a data structure from the forms with method 'POST' and 
enctype='multipart/form-data' (useful for uploading files). <U>handle</U> is 
the name of some &lt;input&gt; tag.<BR><BR>
+the structure is<BR>
+struct _MultiPart {
+<UL>
+char *<U>id</u>;<BR>
+char *<U>data</U>;<BR>
+unsigned int <U>size</U>;<BR>
+char *<U>filename</U>;<BR>
+void *<U>pad</U>;<BR>
+</UL>
+};<BR>
+to be used as ClientInfo-&gt;<U>MultiPart</U>("file1").<U>data</U>; 
ClientInfo-&gt;<U>MultiPart</U>("file1").<U>size</U>; 
ClientInfo-&gt;<U>MultiPart</U>("file1").<U>filename</U>;
+</UL>
+
+</UL>
+<HR><BR>
+<A name=configfile><B><font color='000077'>The config file</font></B><BR><BR>
+<UL>the config file is used as<BR><BR>
+<PRE>
+[TOPIC]
+KEY=VALUE
+
+libwebserver configurations must be in topic LIBWEBSERVER as:
+[LIBWEBSERVER]
+LOG=help.log 
+PORT=80
+USESSL=1
+CERTFILE=foocert.pm
+MIMEFILE=/etc/mime.types
+LOCAL=1
+
+LOG -> the log file
+PORT -> the listen port that will be used for tcp connections
+
+USESSL -> the ssl flag if you want to use openssl for secure server (https)
+CERTFILE -> the file that contains certificate for ssl connections
+MIMEFILE -> the file that contains mime.types similer to apache mimefile
+LOCAL -> only accept connections from 127.0.0.1
+
+</PRE>
+</UL>
+
+</font>
+
+
+

Added: GNUnet/libwebserver/doc/info.html
===================================================================
--- GNUnet/libwebserver/doc/info.html   2006-08-18 20:37:47 UTC (rev 3245)
+++ GNUnet/libwebserver/doc/info.html   2006-08-18 21:41:52 UTC (rev 3246)
@@ -0,0 +1,25 @@
+<center><H3><font color='007700'>libwebserver Info</font></H3></center><BR><BR>
+<A name=what><B><font color='000077'>What's libwebserver for?</font></B><BR>
+<UL>This lib is intended to add webserver functionality to programs instead of 
using an external webserver.<BR>
+       Two examples for embedded webservers that i know of are simple 
(shoutcast (i guess), and webTV (teletext as a webpage (from pinnacle)); and 
many others probably do the same.
+</UL>
+<HR>
+<A name=who><B><font color='000077'>Who's supposed to use 
libwebserver?</font></B>
+<UL>This is mainly developed for developers to make it easier to write a web 
interface to their software, (note a webbrowser is commonly available in most 
operating
+             systems) so it is like a portable "terminal" that can be accessed 
from any computer (with a browser of course...).</UL>
+<HR>
+<A name=when><B><font color='000077'>When am i supposed to use 
libwebserver?</font></B>
+<UL>For example, imagine that you are developing a daemon and want to check 
stats or re-configure at run-time;
+                  with this library you can add a listen port for runtime, and 
connect with whatever browser (via HTML interface)
+                  without dependencies of an external webserver.<BR>
+                  You can even do a webserver (of course), just use your 
imagination.<BR>
+                  Another quite simple example, a sound recorder (using only 
local connections for security reasons) uses a web interface to control
+                  /dev/dsp reading/writing (via HTML interface).
+                  there are many other things you can do ...</UL>
+
+<HR>
+<A name=server_scripts><B><font color='000077'>Is there support for server 
scripts such as .php .cgi .asp?</font></B>
+<UL> Well, this library only provides web server functions that make a server 
running, server scripts can be supported if you want to do it:
+      you can develop a handler for type ".something" or whatever, this 
package provides a .cgi handler as an example, (use at your own risk or make it 
better).</UL>
+
+

Added: GNUnet/libwebserver/doc/security.html
===================================================================
--- GNUnet/libwebserver/doc/security.html       2006-08-18 20:37:47 UTC (rev 
3245)
+++ GNUnet/libwebserver/doc/security.html       2006-08-18 21:41:52 UTC (rev 
3246)
@@ -0,0 +1,67 @@
+<center><H3><font color='007700'>libwebserver 
Security</font></H3></center><BR><BR>
+
+<A name=what><B><font color='000077'>Is it safe to use?</font></B><BR>
+<UL>Well, I can't promise that it's a secure software since that not only 
depends on the software, 
+         but all i can say is that wasn't found any security bug yet, this was 
developed intended to be secure,  
+                you can use openssl (encrypted streams) to protect information 
that passes from webserver(lib) to client</UL>
+       
+<A name=certificate><B><font color='000077'>How do I create my own 
certificate?</font></B><BR>
+<UL>You can either buy one from one of the big vendors (see your browser's 
stored certificates
+       for their addresses) or self-sign a self-created one. The upside of the 
bought
+       certificates is, that the webbrowser doesn't ask if the user wants to
+       accept that certificate, but instead checks with the certification 
authority
+       you bought your certificate from.<br>
+       The downside is that it costs quite a lot of money.<br>
+       To create your own certificate use openssl like that:
+       <ul><li>create a key and request:<br>
+               <pre><b>openssl req -new > foo-cert.csr</b></pre><br>
+               As "Common Name" you have to type in the name part of
+               your URL, i.e. if your web site will be
+               "https://www.libwebserver.rules:443/"; the Common Name is
+               "www.libwebserver.rules".
+       <li> remove the passphrase from the key:<br>
+               <pre><b>openssl rsa -in privkey.pem -out 
foo-cert.key</b></pre><br>
+       <li>convert request into a signed certificate:<br>
+               <pre><b>openssl x509 -in foo-cert.csr -out foo-cert.cert -req 
-signkey foo-cert.key -days 356</b></pre><br>
+       <li>create .pem file:<br>
+               <pre><b>cat foo-cert.cert foo-cert.key 
>foo-cert.pem</b></pre><br>
+       </ul>
+</ul>
+
+
+<A name=tips><B><font size=4 color='770077'>Security tips</font></B><BR><HR>
+
+<A name=racecondition><B><font color='000077'>Avoid race condition 
problems</font></B><BR>
+<UL>
+       <B> What is race condition?</B>
+               <UL>A race condition occurs when two or more operations occur 
in an 
+      undefined manner (McKusick et al. 1996). Specifically in file 
+      system races the attacker attempts to change the state of the 
+      file system in between two file system operations on the part 
+      of the program.</UL><BR> 
+       <B> How the lib determine temporary file name?</B>
+       <UL> 
+       <li>generate file name (note: keep generating until it doesn't 
exists)<BR></li>
+       <li>check if file exists<BR>
+       -<small>attacker can create the file now, if he knows the right 
filename</small><BR></li>
+       <li>check if symlink exists<BR>
+       -<small>attacker can create the symlink now, if he knows the right 
filename</small><BR></li>
+       <li>create the file and redirect stdout to it <BR>
+       -<small>attacker can open the file and write to it</small><BR></li>
+       <li>places a lock into file (note: not in win98)<BR> </li>
+       <li>users operations, write, flush, read<BR></li>
+       <li>unlink the filename from the OS<BR></li>
+       </UL><BR>
+       
+       
+       libwebserver uses temporary filenames to hold and process data before 
send it to client, it uses the ambient variables to 
+       determine temporary directory by following order "$TEMP,$TMP,$TMPDIR 
and the stdio.h P_tmpdir", libwebserver have several checks
+       and it locks file for avoid attackers from messing with temporary 
files, meanwhile is safely to change the tempdir (setting the ambient variable)
+       to an directory that is not writable for everyone and writable to lib 
(setenv("TEMP","/safedir"); you can do it before the web_server_run function
+
+       
+
+</UL>
+
+
+

Added: GNUnet/libwebserver/include/Makefile.am
===================================================================
--- GNUnet/libwebserver/include/Makefile.am     2006-08-18 20:37:47 UTC (rev 
3245)
+++ GNUnet/libwebserver/include/Makefile.am     2006-08-18 21:41:52 UTC (rev 
3246)
@@ -0,0 +1,7 @@
+SUBDIRS = .
+
+webserverincludedir = $(includedir)/GNUnet
+
+webserverinclude_HEADERS = \
+  webserver_gnunet.h
+

Added: GNUnet/libwebserver/include/webserver_gnunet.h
===================================================================


Property changes on: GNUnet/libwebserver/include/webserver_gnunet.h
___________________________________________________________________
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/ltmain.sh
===================================================================
--- GNUnet/libwebserver/ltmain.sh       2006-08-18 20:37:47 UTC (rev 3245)
+++ GNUnet/libwebserver/ltmain.sh       2006-08-18 21:41:52 UTC (rev 3246)
@@ -0,0 +1,6871 @@
+# ltmain.sh - Provide generalized library-building support services.
+# NOTE: Changing this file will not affect anything until you rerun configure.
+#
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+# Originally by Gordon Matzigkeit <address@hidden>, 1996
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 
USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+basename="s,^.*/,,g"
+
+# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
+# is ksh but when the shell is invoked as "sh" and the current value of
+# the _XPG environment variable is not equal to 1 (one), the special
+# positional parameter $0, within a function call, is the name of the
+# function.
+progpath="$0"
+
+# The name of this program:
+progname=`echo "$progpath" | $SED $basename`
+modename="$progname"
+
+# Global variables:
+EXIT_SUCCESS=0
+EXIT_FAILURE=1
+
+PROGRAM=ltmain.sh
+PACKAGE=libtool
+VERSION="1.5.22 Debian 1.5.22-4"
+TIMESTAMP=" (1.1220.2.365 2005/12/18 22:14:06)"
+
+# 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
+
+# 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 <<EOF
+$*
+EOF
+  exit $EXIT_SUCCESS
+fi
+
+default_mode=
+help="Try \`$progname --help' for more information."
+magic="%%%MAGIC variable%%%"
+mkdir="mkdir"
+mv="mv -f"
+rm="rm -f"
+
+# 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='s/\([\\`\\"$\\\\]\)/\\\1/g'
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+  SP2NL='tr \040 \012'
+  NL2SP='tr \015\012 \040\040'
+  ;;
+ *) # EBCDIC based system
+  SP2NL='tr \100 \n'
+  NL2SP='tr \r\n \100\100'
+  ;;
+esac
+
+# NLS nuisances.
+# Only set LANG and LC_ALL to C if already set.
+# These must not be set unconditionally because not all systems understand
+# e.g. LANG=C (notably SCO).
+# We save the old values to restore during execute mode.
+if test "${LC_ALL+set}" = set; then
+  save_LC_ALL="$LC_ALL"; LC_ALL=C; export LC_ALL
+fi
+if test "${LANG+set}" = set; then
+  save_LANG="$LANG"; LANG=C; export LANG
+fi
+
+# Make sure IFS has a sensible default
+lt_nl='
+'
+IFS="  $lt_nl"
+
+if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
+  $echo "$modename: not configured to build any kind of library" 1>&2
+  $echo "Fatal configuration error.  See the $PACKAGE docs for more 
information." 1>&2
+  exit $EXIT_FAILURE
+fi
+
+# Global variables.
+mode=$default_mode
+nonopt=
+prev=
+prevopt=
+run=
+show="$echo"
+show_help=
+execute_dlfiles=
+duplicate_deps=no
+preserve_args=
+lo2o="s/\\.lo\$/.${objext}/"
+o2lo="s/\\.${objext}\$/.lo/"
+
+#####################################
+# Shell function definitions:
+# This seems to be the best place for them
+
+# func_mktempdir [string]
+# Make a temporary directory that won't clash with other running
+# libtool processes, and avoids race conditions if possible.  If
+# given, STRING is the basename for that directory.
+func_mktempdir ()
+{
+    my_template="${TMPDIR-/tmp}/${1-$progname}"
+
+    if test "$run" = ":"; then
+      # Return a directory name, but don't create it in dry-run mode
+      my_tmpdir="${my_template}-$$"
+    else
+
+      # If mktemp works, use that first and foremost
+      my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
+
+      if test ! -d "$my_tmpdir"; then
+       # Failing that, at least try and use $RANDOM to avoid a race
+       my_tmpdir="${my_template}-${RANDOM-0}$$"
+
+       save_mktempdir_umask=`umask`
+       umask 0077
+       $mkdir "$my_tmpdir"
+       umask $save_mktempdir_umask
+      fi
+
+      # If we're not in dry-run mode, bomb out on failure
+      test -d "$my_tmpdir" || {
+        $echo "cannot create temporary directory \`$my_tmpdir'" 1>&2
+       exit $EXIT_FAILURE
+      }
+    fi
+
+    $echo "X$my_tmpdir" | $Xsed
+}
+
+
+# func_win32_libid arg
+# return the library type of file 'arg'
+#
+# Need a lot of goo to handle *both* DLLs and import libs
+# Has to be a shell function in order to 'eat' the argument
+# that is supplied when $file_magic_command is called.
+func_win32_libid ()
+{
+  win32_libid_type="unknown"
+  win32_fileres=`file -L $1 2>/dev/null`
+  case $win32_fileres in
+  *ar\ archive\ import\ library*) # definitely import
+    win32_libid_type="x86 archive import"
+    ;;
+  *ar\ archive*) # could be an import, or static
+    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \
+      $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then
+      win32_nmres=`eval $NM -f posix -A $1 | \
+       $SED -n -e '1,100{/ I /{s,.*,import,;p;q;};}'`
+      case $win32_nmres in
+      import*)  win32_libid_type="x86 archive import";;
+      *)        win32_libid_type="x86 archive static";;
+      esac
+    fi
+    ;;
+  *DLL*)
+    win32_libid_type="x86 DLL"
+    ;;
+  *executable*) # but shell scripts are "executable" too...
+    case $win32_fileres in
+    *MS\ Windows\ PE\ Intel*)
+      win32_libid_type="x86 DLL"
+      ;;
+    esac
+    ;;
+  esac
+  $echo $win32_libid_type
+}
+
+
+# func_infer_tag arg
+# Infer tagged configuration to use if any are available and
+# if one wasn't chosen via the "--tag" command line option.
+# Only attempt this if the compiler in the base compile
+# command doesn't match the default compiler.
+# arg is usually of the form 'gcc ...'
+func_infer_tag ()
+{
+    if test -n "$available_tags" && test -z "$tagname"; then
+      CC_quoted=
+      for arg in $CC; do
+       case $arg in
+         *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+         arg="\"$arg\""
+         ;;
+       esac
+       CC_quoted="$CC_quoted $arg"
+      done
+      case $@ in
+      # Blanks in the command may have been stripped by the calling shell,
+      # but not from the CC environment variable when configure was run.
+      " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* 
| "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) ;;
+      # Blanks at the start of $base_compile will cause this to fail
+      # if we don't check for them as well.
+      *)
+       for z in $available_tags; do
+         if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > 
/dev/null; then
+           # Evaluate the configuration.
+           eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# 
### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
+           CC_quoted=
+           for arg in $CC; do
+           # Double-quote args containing other shell metacharacters.
+           case $arg in
+             *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \     ]*|*]*|"")
+             arg="\"$arg\""
+             ;;
+           esac
+           CC_quoted="$CC_quoted $arg"
+         done
+           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
+}
+
+
+# func_extract_an_archive dir oldlib
+func_extract_an_archive ()
+{
+    f_ex_an_ar_dir="$1"; shift
+    f_ex_an_ar_oldlib="$1"
+
+    $show "(cd $f_ex_an_ar_dir && $AR x $f_ex_an_ar_oldlib)"
+    $run eval "(cd \$f_ex_an_ar_dir && $AR x \$f_ex_an_ar_oldlib)" || exit $?
+    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
+     :
+    else
+      $echo "$modename: ERROR: object name conflicts: 
$f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 1>&2
+      exit $EXIT_FAILURE
+    fi
+}
+
+# func_extract_archives gentop oldlib ...
+func_extract_archives ()
+{
+    my_gentop="$1"; shift
+    my_oldlibs=${1+"$@"}
+    my_oldobjs=""
+    my_xlib=""
+    my_xabs=""
+    my_xdir=""
+    my_status=""
+
+    $show "${rm}r $my_gentop"
+    $run ${rm}r "$my_gentop"
+    $show "$mkdir $my_gentop"
+    $run $mkdir "$my_gentop"
+    my_status=$?
+    if test "$my_status" -ne 0 && test ! -d "$my_gentop"; then
+      exit $my_status
+    fi
+
+    for my_xlib in $my_oldlibs; do
+      # Extract the objects.
+      case $my_xlib in
+       [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
+       *) my_xabs=`pwd`"/$my_xlib" ;;
+      esac
+      my_xlib=`$echo "X$my_xlib" | $Xsed -e 's%^.*/%%'`
+      my_xdir="$my_gentop/$my_xlib"
+
+      $show "${rm}r $my_xdir"
+      $run ${rm}r "$my_xdir"
+      $show "$mkdir $my_xdir"
+      $run $mkdir "$my_xdir"
+      exit_status=$?
+      if test "$exit_status" -ne 0 && test ! -d "$my_xdir"; then
+       exit $exit_status
+      fi
+      case $host in
+      *-darwin*)
+       $show "Extracting $my_xabs"
+       # Do not bother doing anything if just a dry run
+       if test -z "$run"; then
+         darwin_orig_dir=`pwd`
+         cd $my_xdir || exit $?
+         darwin_archive=$my_xabs
+         darwin_curdir=`pwd`
+         darwin_base_archive=`$echo "X$darwin_archive" | $Xsed -e 's%^.*/%%'`
+         darwin_arches=`lipo -info "$darwin_archive" 2>/dev/null | $EGREP 
Architectures 2>/dev/null`
+         if test -n "$darwin_arches"; then 
+           darwin_arches=`echo "$darwin_arches" | $SED -e 's/.*are://'`
+           darwin_arch=
+           $show "$darwin_base_archive has multiple architectures 
$darwin_arches"
+           for darwin_arch in  $darwin_arches ; do
+             mkdir -p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
+             lipo -thin $darwin_arch -output 
"unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" 
"${darwin_archive}"
+             cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
+             func_extract_an_archive "`pwd`" "${darwin_base_archive}"
+             cd "$darwin_curdir"
+             $rm 
"unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
+           done # $darwin_arches
+      ## Okay now we have a bunch of thin objects, gotta fatten them up :)
+           darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name 
\*.lo -print| xargs basename | sort -u | $NL2SP`
+           darwin_file=
+           darwin_files=
+           for darwin_file in $darwin_filelist; do
+             darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP`
+             lipo -create -output "$darwin_file" $darwin_files
+           done # $darwin_filelist
+           ${rm}r unfat-$$
+           cd "$darwin_orig_dir"
+         else
+           cd "$darwin_orig_dir"
+           func_extract_an_archive "$my_xdir" "$my_xabs"
+         fi # $darwin_arches
+       fi # $run
+       ;;
+      *)
+        func_extract_an_archive "$my_xdir" "$my_xabs"
+        ;;
+      esac
+      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name 
\*.lo -print | $NL2SP`
+    done
+    func_extract_archives_result="$my_oldobjs"
+}
+# End of Shell function definitions
+#####################################
+
+# Darwin sucks
+eval std_shrext=\"$shrext_cmds\"
+
+disable_libs=no
+
+# Parse our command line options once, thoroughly.
+while test "$#" -gt 0
+do
+  arg="$1"
+  shift
+
+  case $arg in
+  -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;;
+  *) optarg= ;;
+  esac
+
+  # If the previous option needs an argument, assign it.
+  if test -n "$prev"; then
+    case $prev in
+    execute_dlfiles)
+      execute_dlfiles="$execute_dlfiles $arg"
+      ;;
+    tag)
+      tagname="$arg"
+      preserve_args="${preserve_args}=$arg"
+
+      # Check whether tagname contains only valid characters
+      case $tagname in
+      *[!-_A-Za-z0-9,/]*)
+       $echo "$progname: invalid tag name: $tagname" 1>&2
+       exit $EXIT_FAILURE
+       ;;
+      esac
+
+      case $tagname in
+      CC)
+       # Don't test for the "default" C tag, as we know, it's there, but
+       # not specially marked.
+       ;;
+      *)
+       if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$progpath" > 
/dev/null; then
+         taglist="$taglist $tagname"
+         # Evaluate the configuration.
+         eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: 
'$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $progpath`"
+       else
+         $echo "$progname: ignoring unknown tag $tagname" 1>&2
+       fi
+       ;;
+      esac
+      ;;
+    *)
+      eval "$prev=\$arg"
+      ;;
+    esac
+
+    prev=
+    prevopt=
+    continue
+  fi
+
+  # Have we seen a non-optional argument yet?
+  case $arg in
+  --help)
+    show_help=yes
+    ;;
+
+  --version)
+    $echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP"
+    $echo
+    $echo "Copyright (C) 2005  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 $?
+    ;;
+
+  --config)
+    ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL 
CONFIG/,$d' $progpath
+    # Now print the configurations for the tags.
+    for tagname in $taglist; do
+      ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END 
LIBTOOL TAG CONFIG: $tagname$/p" < "$progpath"
+    done
+    exit $?
+    ;;
+
+  --debug)
+    $echo "$progname: enabling shell trace mode"
+    set -x
+    preserve_args="$preserve_args $arg"
+    ;;
+
+  --dry-run | -n)
+    run=:
+    ;;
+
+  --features)
+    $echo "host: $host"
+    if test "$build_libtool_libs" = yes; then
+      $echo "enable shared libraries"
+    else
+      $echo "disable shared libraries"
+    fi
+    if test "$build_old_libs" = yes; then
+      $echo "enable static libraries"
+    else
+      $echo "disable static libraries"
+    fi
+    exit $?
+    ;;
+
+  --finish) mode="finish" ;;
+
+  --mode) prevopt="--mode" prev=mode ;;
+  --mode=*) mode="$optarg" ;;
+
+  --preserve-dup-deps) duplicate_deps="yes" ;;
+
+  --quiet | --silent)
+    show=:
+    preserve_args="$preserve_args $arg"
+    ;;
+
+  --tag)
+    prevopt="--tag"
+    prev=tag
+    preserve_args="$preserve_args --tag"
+    ;;
+  --tag=*)
+    set tag "$optarg" ${1+"$@"}
+    shift
+    prev=tag
+    preserve_args="$preserve_args --tag"
+    ;;
+
+  -dlopen)
+    prevopt="-dlopen"
+    prev=execute_dlfiles
+    ;;
+
+  -*)
+    $echo "$modename: unrecognized option \`$arg'" 1>&2
+    $echo "$help" 1>&2
+    exit $EXIT_FAILURE
+    ;;
+
+  *)
+    nonopt="$arg"
+    break
+    ;;
+  esac
+done
+
+if test -n "$prevopt"; then
+  $echo "$modename: option \`$prevopt' requires an argument" 1>&2
+  $echo "$help" 1>&2
+  exit $EXIT_FAILURE
+fi
+
+case $disable_libs in
+no) 
+  ;;
+shared)
+  build_libtool_libs=no
+  build_old_libs=yes
+  ;;
+static)
+  build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; 
esac`
+  ;;
+esac
+
+# If this variable is set in any of the actions, the command in it
+# will be execed at the end.  This prevents here-documents from being
+# left over by shells.
+exec_cmd=
+
+if test -z "$show_help"; then
+
+  # Infer the operation mode.
+  if test -z "$mode"; then
+    $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2
+    $echo "*** Future versions of Libtool will require --mode=MODE be 
specified." 1>&2
+    case $nonopt in
+    *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*)
+      mode=link
+      for arg
+      do
+       case $arg in
+       -c)
+          mode=compile
+          break
+          ;;
+       esac
+      done
+      ;;
+    *db | *dbx | *strace | *truss)
+      mode=execute
+      ;;
+    *install*|cp|mv)
+      mode=install
+      ;;
+    *rm)
+      mode=uninstall
+      ;;
+    *)
+      # If we have no mode, but dlfiles were specified, then do execute mode.
+      test -n "$execute_dlfiles" && mode=execute
+
+      # Just use the default operation mode.
+      if test -z "$mode"; then
+       if test -n "$nonopt"; then
+         $echo "$modename: warning: cannot infer operation mode from 
\`$nonopt'" 1>&2
+       else
+         $echo "$modename: warning: cannot infer operation mode without 
MODE-ARGS" 1>&2
+       fi
+      fi
+      ;;
+    esac
+  fi
+
+  # Only execute mode is allowed to have -dlopen flags.
+  if test -n "$execute_dlfiles" && test "$mode" != execute; then
+    $echo "$modename: unrecognized option \`-dlopen'" 1>&2
+    $echo "$help" 1>&2
+    exit $EXIT_FAILURE
+  fi
+
+  # Change the help message to a mode-specific one.
+  generic_help="$help"
+  help="Try \`$modename --help --mode=$mode' for more information."
+
+  # These modes are in order of execution frequency so that they run quickly.
+  case $mode in
+  # libtool compile mode
+  compile)
+    modename="$modename: compile"
+    # Get the compilation command and the source file.
+    base_compile=
+    srcfile="$nonopt"  #  always keep a non-empty value in "srcfile"
+    suppress_opt=yes
+    suppress_output=
+    arg_mode=normal
+    libobj=
+    later=
+
+    for arg
+    do
+      case $arg_mode in
+      arg  )
+       # do not "continue".  Instead, add this to base_compile
+       lastarg="$arg"
+       arg_mode=normal
+       ;;
+
+      target )
+       libobj="$arg"
+       arg_mode=normal
+       continue
+       ;;
+
+      normal )
+       # Accept any command-line options.
+       case $arg in
+       -o)
+         if test -n "$libobj" ; then
+           $echo "$modename: you cannot specify \`-o' more than once" 1>&2
+           exit $EXIT_FAILURE
+         fi
+         arg_mode=target
+         continue
+         ;;
+
+       -static | -prefer-pic | -prefer-non-pic)
+         later="$later $arg"
+         continue
+         ;;
+
+       -no-suppress)
+         suppress_opt=no
+         continue
+         ;;
+
+       -Xcompiler)
+         arg_mode=arg  #  the next one goes into the "base_compile" arg list
+         continue      #  The current "srcfile" will either be retained or
+         ;;            #  replaced later.  I would guess that would be a bug.
+
+       -Wc,*)
+         args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"`
+         lastarg=
+         save_ifs="$IFS"; IFS=','
+         for arg in $args; do
+           IFS="$save_ifs"
+
+           # Double-quote args containing other shell metacharacters.
+           # Many Bourne shells cannot handle close brackets correctly
+           # in scan sets, so we specify it separately.
+           case $arg in
+             *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \     ]*|*]*|"")
+             arg="\"$arg\""
+             ;;
+           esac
+           lastarg="$lastarg $arg"
+         done
+         IFS="$save_ifs"
+         lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"`
+
+         # Add the arguments to base_compile.
+         base_compile="$base_compile $lastarg"
+         continue
+         ;;
+
+       * )
+         # Accept the current argument as the source file.
+         # The previous "srcfile" becomes the current argument.
+         #
+         lastarg="$srcfile"
+         srcfile="$arg"
+         ;;
+       esac  #  case $arg
+       ;;
+      esac    #  case $arg_mode
+
+      # Aesthetically quote the previous argument.
+      lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"`
+
+      case $lastarg in
+      # Double-quote args containing other shell metacharacters.
+      # Many Bourne shells cannot handle close brackets correctly
+      # in scan sets, and some SunOS ksh mistreat backslash-escaping
+      # in scan sets (worked around with variable expansion),
+      # and furthermore cannot handle '|' '&' '(' ')' in scan sets 
+      # at all, so we specify them separately.
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \    ]*|*]*|"")
+       lastarg="\"$lastarg\""
+       ;;
+      esac
+
+      base_compile="$base_compile $lastarg"
+    done # for arg
+
+    case $arg_mode in
+    arg)
+      $echo "$modename: you must specify an argument for -Xcompile"
+      exit $EXIT_FAILURE
+      ;;
+    target)
+      $echo "$modename: you must specify a target with \`-o'" 1>&2
+      exit $EXIT_FAILURE
+      ;;
+    *)
+      # Get the name of the library object.
+      [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'`
+      ;;
+    esac
+
+    # Recognize several different file suffixes.
+    # If the user specifies -o file.o, it is replaced with file.lo
+    xform='[cCFSifmso]'
+    case $libobj in
+    *.ada) xform=ada ;;
+    *.adb) xform=adb ;;
+    *.ads) xform=ads ;;
+    *.asm) xform=asm ;;
+    *.c++) xform=c++ ;;
+    *.cc) xform=cc ;;
+    *.ii) xform=ii ;;
+    *.class) xform=class ;;
+    *.cpp) xform=cpp ;;
+    *.cxx) xform=cxx ;;
+    *.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
+
+    qlibobj=`$echo "X$libobj" | $Xsed -e "$sed_quote_subst"`
+    case $qlibobj in
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \    ]*|*]*|"")
+       qlibobj="\"$qlibobj\"" ;;
+    esac
+    test "X$libobj" != "X$qlibobj" \
+       && $echo "X$libobj" | grep '[]~#^*{};<>?"'"'"'  &()|`$[]' \
+       && $echo "$modename: libobj name \`$libobj' may not contain shell 
special characters."
+    objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'`
+    xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'`
+    if test "X$xdir" = "X$obj"; then
+      xdir=
+    else
+      xdir=$xdir/
+    fi
+    lobj=${xdir}$objdir/$objname
+
+    if test -z "$base_compile"; then
+      $echo "$modename: you must specify a compilation command" 1>&2
+      $echo "$help" 1>&2
+      exit $EXIT_FAILURE
+    fi
+
+    # Delete any leftover library objects.
+    if test "$build_old_libs" = yes; then
+      removelist="$obj $lobj $libobj ${libobj}T"
+    else
+      removelist="$lobj $libobj ${libobj}T"
+    fi
+
+    $run $rm $removelist
+    trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15
+
+    # On Cygwin there's no "real" PIC flag so we must build both object types
+    case $host_os in
+    cygwin* | mingw* | pw32* | os2*)
+      pic_mode=default
+      ;;
+    esac
+    if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
+      # non-PIC code in shared libraries is not supported
+      pic_mode=default
+    fi
+
+    # Calculate the filename of the output object if compiler does
+    # not support -o with -c
+    if test "$compiler_c_o" = no; then
+      output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 
's%\.[^.]*$%%'`.${objext}
+      lockfile="$output_obj.lock"
+      removelist="$removelist $output_obj $lockfile"
+      trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15
+    else
+      output_obj=
+      need_locks=no
+      lockfile=
+    fi
+
+    # Lock this critical section if it is needed
+    # We use this script file to make the link, it avoids creating a new file
+    if test "$need_locks" = yes; then
+      until $run ln "$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
+    qsrcfile=`$echo "X$srcfile" | $Xsed -e "$sed_quote_subst"`
+    case $qsrcfile in
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \    ]*|*]*|"")
+      qsrcfile="\"$qsrcfile\"" ;;
+    esac
+
+    $run $rm "$libobj" "${libobj}T"
+
+    # Create a libtool object file (analogous to a ".la" file),
+    # but don't create it if we're doing a dry run.
+    test -z "$run" && cat > ${libobj}T <<EOF
+# $libobj - a libtool object file
+# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# Name of the PIC object.
+EOF
+
+    # Only build a PIC object if we are building libtool libraries.
+    if test "$build_libtool_libs" = yes; then
+      # Without this assignment, base_compile gets emptied.
+      fbsd_hideous_sh_bug=$base_compile
+
+      if test "$pic_mode" != no; then
+       command="$base_compile $qsrcfile $pic_flag"
+      else
+       # Don't build PIC code
+       command="$base_compile $qsrcfile"
+      fi
+
+      if test ! -d "${xdir}$objdir"; then
+       $show "$mkdir ${xdir}$objdir"
+       $run $mkdir ${xdir}$objdir
+       exit_status=$?
+       if test "$exit_status" -ne 0 && test ! -d "${xdir}$objdir"; then
+         exit $exit_status
+       fi
+      fi
+
+      if test -z "$output_obj"; then
+       # Place PIC objects in $objdir
+       command="$command -o $lobj"
+      fi
+
+      $run $rm "$lobj" "$output_obj"
+
+      $show "$command"
+      if $run eval "$command"; then :
+      else
+       test -n "$output_obj" && $run $rm $removelist
+       exit $EXIT_FAILURE
+      fi
+
+      if test "$need_locks" = warn &&
+        test "X`cat $lockfile 2>/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 <<EOF
+pic_object='$objdir/$objname'
+
+EOF
+
+      # Allow error messages only from the first compilation.
+      if test "$suppress_opt" = yes; then
+        suppress_output=' >/dev/null 2>&1'
+      fi
+    else
+      # No PIC object so indicate it doesn't exist in the libtool
+      # object file.
+      test -z "$run" && cat >> ${libobj}T <<EOF
+pic_object=none
+
+EOF
+    fi
+
+    # Only build a position-dependent object if we build old libraries.
+    if test "$build_old_libs" = yes; then
+      if test "$pic_mode" != yes; then
+       # Don't build PIC code
+       command="$base_compile $qsrcfile"
+      else
+       command="$base_compile $qsrcfile $pic_flag"
+      fi
+      if test "$compiler_c_o" = yes; then
+       command="$command -o $obj"
+      fi
+
+      # Suppress compiler output if we already did a PIC compilation.
+      command="$command$suppress_output"
+      $run $rm "$obj" "$output_obj"
+      $show "$command"
+      if $run eval "$command"; then :
+      else
+       $run $rm $removelist
+       exit $EXIT_FAILURE
+      fi
+
+      if test "$need_locks" = warn &&
+        test "X`cat $lockfile 2>/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 <<EOF
+# Name of the non-PIC object.
+non_pic_object='$objname'
+
+EOF
+    else
+      # 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 <<EOF
+# Name of the non-PIC object.
+non_pic_object=none
+
+EOF
+    fi
+
+    $run $mv "${libobj}T" "${libobj}"
+
+    # Unlock the critical section if it was locked
+    if test "$need_locks" != no; then
+      $run $rm "$lockfile"
+    fi
+
+    exit $EXIT_SUCCESS
+    ;;
+
+  # libtool link mode
+  link | relink)
+    modename="$modename: link"
+    case $host in
+    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+      # It is impossible to link a dll without this setting, and
+      # we shouldn't force the makefile maintainer to figure out
+      # which system we are compiling for in order to pass an extra
+      # flag for every libtool invocation.
+      # allow_undefined=no
+
+      # FIXME: Unfortunately, there are problems with the above when trying
+      # to make a dll which has undefined symbols, in which case not
+      # even a static library is built.  For now, we need to specify
+      # -no-undefined on the libtool link line when we can be certain
+      # that all symbols are satisfied, otherwise we get a static library.
+      allow_undefined=yes
+      ;;
+    *)
+      allow_undefined=yes
+      ;;
+    esac
+    libtool_args="$nonopt"
+    base_compile="$nonopt $@"
+    compile_command="$nonopt"
+    finalize_command="$nonopt"
+
+    compile_rpath=
+    finalize_rpath=
+    compile_shlibpath=
+    finalize_shlibpath=
+    convenience=
+    old_convenience=
+    deplibs=
+    old_deplibs=
+    compiler_flags=
+    linker_flags=
+    dllsearchpath=
+    lib_search_path=`pwd`
+    inst_prefix_dir=
+
+    avoid_version=no
+    dlfiles=
+    dlprefiles=
+    dlself=no
+    export_dynamic=no
+    export_symbols=
+    export_symbols_regex=
+    generated=
+    libobjs=
+    ltlibs=
+    module=no
+    no_install=no
+    objs=
+    non_pic_objects=
+    notinst_path= # paths that contain not-installed libtool libraries
+    precious_files_regex=
+    prefer_static_libs=no
+    preload=no
+    prev=
+    prevarg=
+    release=
+    rpath=
+    xrpath=
+    perm_rpath=
+    temp_rpath=
+    thread_safe=no
+    vinfo=
+    vinfo_number=no
+
+    func_infer_tag $base_compile
+
+    # We need to know -static, to get the right output filenames.
+    for arg
+    do
+      case $arg in
+      -all-static | -static)
+       if test "X$arg" = "X-all-static"; then
+         if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; 
then
+           $echo "$modename: warning: complete static linking is impossible in 
this configuration" 1>&2
+         fi
+         if test -n "$link_static_flag"; then
+           dlopen_self=$dlopen_self_static
+         fi
+         prefer_static_libs=yes
+       else
+         if test -z "$pic_flag" && test -n "$link_static_flag"; then
+           dlopen_self=$dlopen_self_static
+         fi
+         prefer_static_libs=built
+       fi
+       build_libtool_libs=no
+       build_old_libs=yes
+       break
+       ;;
+      esac
+    done
+
+    # See if our shared archives depend on static archives.
+    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
+
+    # Go through the arguments, transforming them on the way.
+    while test "$#" -gt 0; do
+      arg="$1"
+      shift
+      case $arg in
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \    ]*|*]*|"")
+       qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: 
skip nested quoting test
+       ;;
+      *) qarg=$arg ;;
+      esac
+      libtool_args="$libtool_args $qarg"
+
+      # If the previous option needs an argument, assign it.
+      if test -n "$prev"; then
+       case $prev in
+       output)
+         compile_command="$compile_command @OUTPUT@"
+         finalize_command="$finalize_command @OUTPUT@"
+         ;;
+       esac
+
+       case $prev in
+       dlfiles|dlprefiles)
+         if test "$preload" = no; then
+           # Add the symbol object into the linking commands.
+           compile_command="$compile_command @SYMFILE@"
+           finalize_command="$finalize_command @SYMFILE@"
+           preload=yes
+         fi
+         case $arg in
+         *.la | *.lo) ;;  # We handle these cases below.
+         force)
+           if test "$dlself" = no; then
+             dlself=needless
+             export_dynamic=yes
+           fi
+           prev=
+           continue
+           ;;
+         self)
+           if test "$prev" = dlprefiles; then
+             dlself=yes
+           elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
+             dlself=yes
+           else
+             dlself=needless
+             export_dynamic=yes
+           fi
+           prev=
+           continue
+           ;;
+         *)
+           if test "$prev" = dlfiles; then
+             dlfiles="$dlfiles $arg"
+           else
+             dlprefiles="$dlprefiles $arg"
+           fi
+           prev=
+           continue
+           ;;
+         esac
+         ;;
+       expsyms)
+         export_symbols="$arg"
+         if test ! -f "$arg"; then
+           $echo "$modename: symbol file \`$arg' does not exist"
+           exit $EXIT_FAILURE
+         fi
+         prev=
+         continue
+         ;;
+       expsyms_regex)
+         export_symbols_regex="$arg"
+         prev=
+         continue
+         ;;
+       inst_prefix)
+         inst_prefix_dir="$arg"
+         prev=
+         continue
+         ;;
+       precious_regex)
+         precious_files_regex="$arg"
+         prev=
+         continue
+         ;;
+       release)
+         release="-$arg"
+         prev=
+         continue
+         ;;
+       objectlist)
+         if test -f "$arg"; then
+           save_arg=$arg
+           moreargs=
+           for fil in `cat $save_arg`
+           do
+#            moreargs="$moreargs $fil"
+             arg=$fil
+             # A libtool-controlled object.
+
+             # Check to see that this really is a libtool object.
+             if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") 
>/dev/null 2>&1; then
+               pic_object=
+               non_pic_object=
+
+               # Read the .lo file
+               # If there is no directory component, then add one.
+               case $arg in
+               */* | *\\*) . $arg ;;
+               *) . ./$arg ;;
+               esac
+
+               if test -z "$pic_object" || \
+                  test -z "$non_pic_object" ||
+                  test "$pic_object" = none && \
+                  test "$non_pic_object" = none; then
+                 $echo "$modename: cannot find name of object for \`$arg'" 1>&2
+                 exit $EXIT_FAILURE
+               fi
+
+               # Extract subdirectory from the argument.
+               xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
+               if test "X$xdir" = "X$arg"; then
+                 xdir=
+               else
+                 xdir="$xdir/"
+               fi
+
+               if test "$pic_object" != none; then
+                 # Prepend the subdirectory the object is found in.
+                 pic_object="$xdir$pic_object"
+
+                 if test "$prev" = dlfiles; then
+                   if test "$build_libtool_libs" = yes && test 
"$dlopen_support" = yes; then
+                     dlfiles="$dlfiles $pic_object"
+                     prev=
+                     continue
+                   else
+                     # If libtool objects are unsupported, then we need to 
preload.
+                     prev=dlprefiles
+                   fi
+                 fi
+
+                 # CHECK ME:  I think I busted this.  -Ossama
+                 if test "$prev" = dlprefiles; then
+                   # Preload the old-style object.
+                   dlprefiles="$dlprefiles $pic_object"
+                   prev=
+                 fi
+
+                 # A PIC object.
+                 libobjs="$libobjs $pic_object"
+                 arg="$pic_object"
+               fi
+
+               # Non-PIC object.
+               if test "$non_pic_object" != none; then
+                 # Prepend the subdirectory the object is found in.
+                 non_pic_object="$xdir$non_pic_object"
+
+                 # A standard non-PIC object
+                 non_pic_objects="$non_pic_objects $non_pic_object"
+                 if test -z "$pic_object" || test "$pic_object" = none ; then
+                   arg="$non_pic_object"
+                 fi
+               else
+                 # If the PIC object exists, use it instead.
+                 # $xdir was prepended to $pic_object above.
+                 non_pic_object="$pic_object"
+                 non_pic_objects="$non_pic_objects $non_pic_object"
+               fi
+             else
+               # Only an error if not doing a dry-run.
+               if test -z "$run"; then
+                 $echo "$modename: \`$arg' is not a valid libtool object" 1>&2
+                 exit $EXIT_FAILURE
+               else
+                 # Dry-run case.
+
+                 # Extract subdirectory from the argument.
+                 xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
+                 if test "X$xdir" = "X$arg"; then
+                   xdir=
+                 else
+                   xdir="$xdir/"
+                 fi
+
+                 pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e 
"$lo2o"`
+                 non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"`
+                 libobjs="$libobjs $pic_object"
+                 non_pic_objects="$non_pic_objects $non_pic_object"
+               fi
+             fi
+           done
+         else
+           $echo "$modename: link input file \`$save_arg' does not exist"
+           exit $EXIT_FAILURE
+         fi
+         arg=$save_arg
+         prev=
+         continue
+         ;;
+       rpath | xrpath)
+         # We need an absolute path.
+         case $arg in
+         [\\/]* | [A-Za-z]:[\\/]*) ;;
+         *)
+           $echo "$modename: only absolute run-paths are allowed" 1>&2
+           exit $EXIT_FAILURE
+           ;;
+         esac
+         if test "$prev" = rpath; then
+           case "$rpath " in
+           *" $arg "*) ;;
+           *) rpath="$rpath $arg" ;;
+           esac
+         else
+           case "$xrpath " in
+           *" $arg "*) ;;
+           *) xrpath="$xrpath $arg" ;;
+           esac
+         fi
+         prev=
+         continue
+         ;;
+       xcompiler)
+         compiler_flags="$compiler_flags $qarg"
+         prev=
+         compile_command="$compile_command $qarg"
+         finalize_command="$finalize_command $qarg"
+         continue
+         ;;
+       xlinker)
+         linker_flags="$linker_flags $qarg"
+         compiler_flags="$compiler_flags $wl$qarg"
+         prev=
+         compile_command="$compile_command $wl$qarg"
+         finalize_command="$finalize_command $wl$qarg"
+         continue
+         ;;
+       xcclinker)
+         linker_flags="$linker_flags $qarg"
+         compiler_flags="$compiler_flags $qarg"
+         prev=
+         compile_command="$compile_command $qarg"
+         finalize_command="$finalize_command $qarg"
+         continue
+         ;;
+       shrext)
+         shrext_cmds="$arg"
+         prev=
+         continue
+         ;;
+       darwin_framework|darwin_framework_skip)
+         test "$prev" = "darwin_framework" && compiler_flags="$compiler_flags 
$arg"
+         compile_command="$compile_command $arg"
+         finalize_command="$finalize_command $arg"
+         prev=
+         continue
+         ;;
+       *)
+         eval "$prev=\"\$arg\""
+         prev=
+         continue
+         ;;
+       esac
+      fi # test -n "$prev"
+
+      prevarg="$arg"
+
+      case $arg in
+      -all-static)
+       if test -n "$link_static_flag"; then
+         compile_command="$compile_command $link_static_flag"
+         finalize_command="$finalize_command $link_static_flag"
+       fi
+       continue
+       ;;
+
+      -allow-undefined)
+       # FIXME: remove this flag sometime in the future.
+       $echo "$modename: \`-allow-undefined' is deprecated because it is the 
default" 1>&2
+       continue
+       ;;
+
+      -avoid-version)
+       avoid_version=yes
+       continue
+       ;;
+
+      -dlopen)
+       prev=dlfiles
+       continue
+       ;;
+
+      -dlpreopen)
+       prev=dlprefiles
+       continue
+       ;;
+
+      -export-dynamic)
+       export_dynamic=yes
+       continue
+       ;;
+
+      -export-symbols | -export-symbols-regex)
+       if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
+         $echo "$modename: more than one -exported-symbols argument is not 
allowed"
+         exit $EXIT_FAILURE
+       fi
+       if test "X$arg" = "X-export-symbols"; then
+         prev=expsyms
+       else
+         prev=expsyms_regex
+       fi
+       continue
+       ;;
+
+      -framework|-arch|-isysroot)
+       case " $CC " in
+         *" ${arg} ${1} "* | *" ${arg} ${1} "*) 
+               prev=darwin_framework_skip ;;
+         *) compiler_flags="$compiler_flags $arg"
+            prev=darwin_framework ;;
+       esac
+       compile_command="$compile_command $arg"
+       finalize_command="$finalize_command $arg"
+       continue
+       ;;
+
+      -inst-prefix-dir)
+       prev=inst_prefix
+       continue
+       ;;
+
+      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
+      # so, if we see these flags be careful not to treat them like -L
+      -L[A-Z][A-Z]*:*)
+       case $with_gcc/$host in
+       no/*-*-irix* | /*-*-irix*)
+         compile_command="$compile_command $arg"
+         finalize_command="$finalize_command $arg"
+         ;;
+       esac
+       continue
+       ;;
+
+      -L*)
+       dir=`$echo "X$arg" | $Xsed -e 's/^-L//'`
+       # We need an absolute path.
+       case $dir in
+       [\\/]* | [A-Za-z]:[\\/]*) ;;
+       *)
+         absdir=`cd "$dir" && pwd`
+         if test -z "$absdir"; then
+           $echo "$modename: cannot determine absolute directory name of 
\`$dir'" 1>&2
+           absdir="$dir"
+           notinst_path="$notinst_path $dir"
+         fi
+         dir="$absdir"
+         ;;
+       esac
+       case "$deplibs " in
+       *" -L$dir "*) ;;
+       *)
+         deplibs="$deplibs -L$dir"
+         lib_search_path="$lib_search_path $dir"
+         ;;
+       esac
+       case $host in
+       *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+         testbindir=`$echo "X$dir" | $Xsed -e 's*/lib$*/bin*'`
+         case :$dllsearchpath: in
+         *":$dir:"*) ;;
+         *) dllsearchpath="$dllsearchpath:$dir";;
+         esac
+         case :$dllsearchpath: in
+         *":$testbindir:"*) ;;
+         *) dllsearchpath="$dllsearchpath:$testbindir";;
+         esac
+         ;;
+       esac
+       continue
+       ;;
+
+      -l*)
+       if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
+         case $host in
+         *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos*)
+           # These systems don't actually have a C or math library (as such)
+           continue
+           ;;
+         *-*-os2*)
+           # These systems don't actually have a C library (as such)
+           test "X$arg" = "X-lc" && continue
+           ;;
+         *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+           # Do not include libc due to us having libc/libc_r.
+           test "X$arg" = "X-lc" && continue
+           ;;
+         *-*-rhapsody* | *-*-darwin1.[012])
+           # Rhapsody C and math libraries are in the System framework
+           deplibs="$deplibs -framework System"
+           continue
+           ;;
+         *-*-sco3.2v5* | *-*-sco5v6*)
+           # Causes problems with __ctype
+           test "X$arg" = "X-lc" && continue
+           ;;
+         *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+           # Compiler inserts libc in the correct place for threads to work
+           test "X$arg" = "X-lc" && continue
+           ;;
+         esac
+       elif test "X$arg" = "X-lc_r"; then
+        case $host in
+        *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+          # Do not include libc_r directly, use -pthread flag.
+          continue
+          ;;
+        esac
+       fi
+       deplibs="$deplibs $arg"
+       continue
+       ;;
+
+      # Tru64 UNIX uses -model [arg] to determine the layout of C++
+      # classes, name mangling, and exception handling.
+      -model)
+       compile_command="$compile_command $arg"
+       compiler_flags="$compiler_flags $arg"
+       finalize_command="$finalize_command $arg"
+       prev=xcompiler
+       continue
+       ;;
+
+     -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe)
+       compiler_flags="$compiler_flags $arg"
+       compile_command="$compile_command $arg"
+       finalize_command="$finalize_command $arg"
+       continue
+       ;;
+
+      -module)
+       module=yes
+       continue
+       ;;
+
+      # -64, -mips[0-9] enable 64-bit mode on the SGI compiler
+      # -r[0-9][0-9]* specifies the processor on the SGI compiler
+      # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler
+      # +DA*, +DD* enable 64-bit mode on the HP compiler
+      # -q* pass through compiler args for the IBM compiler
+      # -m* pass through architecture-specific compiler args for GCC
+      # -m*, -t[45]*, -txscale* pass through architecture-specific
+      # compiler args for GCC
+      # -pg pass through profiling flag for GCC
+      # @file GCC response files
+      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*|-pg| \
+      -t[45]*|-txscale*|@*)
+
+       # Unknown arguments in both finalize_command and compile_command need
+       # to be aesthetically quoted because they are evaled later.
+       arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+       case $arg in
+       *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \   ]*|*]*|"")
+         arg="\"$arg\""
+         ;;
+       esac
+        compile_command="$compile_command $arg"
+        finalize_command="$finalize_command $arg"
+        compiler_flags="$compiler_flags $arg"
+        continue
+        ;;
+
+      -shrext)
+       prev=shrext
+       continue
+       ;;
+
+      -no-fast-install)
+       fast_install=no
+       continue
+       ;;
+
+      -no-install)
+       case $host in
+       *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+         # 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
+         else
+           # If the PIC object exists, use it instead.
+           # $xdir was prepended to $pic_object above.
+           non_pic_object="$pic_object"
+           non_pic_objects="$non_pic_objects $non_pic_object"
+         fi
+       else
+         # Only an error if not doing a dry-run.
+         if test -z "$run"; then
+           $echo "$modename: \`$arg' is not a valid libtool object" 1>&2
+           exit $EXIT_FAILURE
+         else
+           # Dry-run case.
+
+           # Extract subdirectory from the argument.
+           xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
+           if test "X$xdir" = "X$arg"; then
+             xdir=
+           else
+             xdir="$xdir/"
+           fi
+
+           pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"`
+           non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"`
+           libobjs="$libobjs $pic_object"
+           non_pic_objects="$non_pic_objects $non_pic_object"
+         fi
+       fi
+       ;;
+
+      *.$libext)
+       # An archive.
+       deplibs="$deplibs $arg"
+       old_deplibs="$old_deplibs $arg"
+       continue
+       ;;
+
+      *.la)
+       # A libtool-controlled library.
+
+       if test "$prev" = dlfiles; then
+         # This library was specified with -dlopen.
+         dlfiles="$dlfiles $arg"
+         prev=
+       elif test "$prev" = dlprefiles; then
+         # The library was specified with -dlpreopen.
+         dlprefiles="$dlprefiles $arg"
+         prev=
+       else
+         deplibs="$deplibs $arg"
+       fi
+       continue
+       ;;
+
+      # Some other compiler argument.
+      *)
+       # Unknown arguments in both finalize_command and compile_command need
+       # to be aesthetically quoted because they are evaled later.
+       arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+       case $arg in
+       *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \   ]*|*]*|"")
+         arg="\"$arg\""
+         ;;
+       esac
+       ;;
+      esac # arg
+
+      # Now actually substitute the argument into the commands.
+      if test -n "$arg"; then
+       compile_command="$compile_command $arg"
+       finalize_command="$finalize_command $arg"
+      fi
+    done # argument parsing loop
+
+    if test -n "$prev"; then
+      $echo "$modename: the \`$prevarg' option requires an argument" 1>&2
+      $echo "$help" 1>&2
+      exit $EXIT_FAILURE
+    fi
+
+    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; 
then
+      eval arg=\"$export_dynamic_flag_spec\"
+      compile_command="$compile_command $arg"
+      finalize_command="$finalize_command $arg"
+    fi
+
+    oldlibs=
+    # calculate the name of the file, without its directory
+    outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'`
+    libobjs_save="$libobjs"
+
+    if test -n "$shlibpath_var"; then
+      # get the directories listed in $shlibpath_var
+      eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e 
\'s/:/ /g\'\`
+    else
+      shlib_search_path=
+    fi
+    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
+    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
+
+    output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'`
+    if test "X$output_objdir" = "X$output"; then
+      output_objdir="$objdir"
+    else
+      output_objdir="$output_objdir/$objdir"
+    fi
+    # Create the object directory.
+    if test ! -d "$output_objdir"; then
+      $show "$mkdir $output_objdir"
+      $run $mkdir $output_objdir
+      exit_status=$?
+      if test "$exit_status" -ne 0 && test ! -d "$output_objdir"; then
+       exit $exit_status
+      fi
+    fi
+
+    # Determine the type of output
+    case $output in
+    "")
+      $echo "$modename: you must specify an output file" 1>&2
+      $echo "$help" 1>&2
+      exit $EXIT_FAILURE
+      ;;
+    *.$libext) linkmode=oldlib ;;
+    *.lo | *.$objext) linkmode=obj ;;
+    *.la) linkmode=lib ;;
+    *) linkmode=prog ;; # Anything else should be a program.
+    esac
+
+    case $host in
+    *cygwin* | *mingw* | *pw32*)
+      # don't eliminate duplications in $postdeps and $predeps
+      duplicate_compiler_generated_deps=yes
+      ;;
+    *)
+      duplicate_compiler_generated_deps=$duplicate_deps
+      ;;
+    esac
+    specialdeplibs=
+
+    libs=
+    # Find all interdependent deplibs by searching for libraries
+    # that are linked more than once (e.g. -la -lb -la)
+    for deplib in $deplibs; do
+      if test "X$duplicate_deps" = "Xyes" ; then
+       case "$libs " in
+       *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+       esac
+      fi
+      libs="$libs $deplib"
+    done
+
+    if test "$linkmode" = lib; then
+      libs="$predeps $libs $compiler_lib_search_path $postdeps"
+
+      # Compute libraries that are listed more than once in $predeps
+      # $postdeps and mark them as special (i.e., whose duplicates are
+      # not to be eliminated).
+      pre_post_deps=
+      if test "X$duplicate_compiler_generated_deps" = "Xyes" ; then
+       for pre_post_dep in $predeps $postdeps; do
+         case "$pre_post_deps " in
+         *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" 
;;
+         esac
+         pre_post_deps="$pre_post_deps $pre_post_dep"
+       done
+      fi
+      pre_post_deps=
+    fi
+
+    deplibs=
+    newdependency_libs=
+    newlib_search_path=
+    need_relink=no # whether we're linking any uninstalled libtool libraries
+    notinst_deplibs= # not-installed libtool libraries
+    case $linkmode in
+    lib)
+       passes="conv link"
+       for file in $dlfiles $dlprefiles; do
+         case $file in
+         *.la) ;;
+         *)
+           $echo "$modename: libraries can \`-dlopen' only libtool libraries: 
$file" 1>&2
+           exit $EXIT_FAILURE
+           ;;
+         esac
+       done
+       ;;
+    prog)
+       compile_deplibs=
+       finalize_deplibs=
+       alldeplibs=no
+       newdlfiles=
+       newdlprefiles=
+       passes="conv scan dlopen dlpreopen link"
+       ;;
+    *)  passes="conv"
+       ;;
+    esac
+    for pass in $passes; do
+      if test "$linkmode,$pass" = "lib,link" ||
+        test "$linkmode,$pass" = "prog,scan"; then
+       libs="$deplibs"
+       deplibs=
+      fi
+      if test "$linkmode" = prog; then
+       case $pass in
+       dlopen) libs="$dlfiles" ;;
+       dlpreopen) libs="$dlprefiles" ;;
+       link)
+         libs="$deplibs %DEPLIBS%"
+         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
+           compiler_flags="$compiler_flags $deplib"
+         fi
+         continue
+         ;;
+       -l*)
+         if test "$linkmode" != lib && test "$linkmode" != prog; then
+           $echo "$modename: warning: \`-l' is ignored for archives/objects" 
1>&2
+           continue
+         fi
+         name=`$echo "X$deplib" | $Xsed -e 's/^-l//'`
+         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)
+           valid_a_lib=no
+           case $deplibs_check_method in
+             match_pattern*)
+               set dummy $deplibs_check_method
+               match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
+               if eval $echo \"$deplib\" 2>/dev/null \
+                   | $SED 10q \
+                   | $EGREP "$match_pattern_regex" > /dev/null; then
+                 valid_a_lib=yes
+               fi
+               ;;
+             pass_all)
+               valid_a_lib=yes
+               ;;
+            esac
+           if test "$valid_a_lib" != yes; then
+             $echo
+             $echo "*** Warning: Trying to link with static lib archive 
$deplib."
+             $echo "*** I have the capability to make that library 
automatically link in when"
+             $echo "*** you link to this library.  But I can only do this if 
you have a"
+             $echo "*** shared version of the library, which you do not appear 
to have"
+             $echo "*** because the file extensions .$libext of this argument 
makes me believe"
+             $echo "*** that it is just a static archive that I should not 
used here."
+           else
+             $echo
+             $echo "*** Warning: Linking the shared library $output against 
the"
+             $echo "*** static library $deplib is not portable!"
+             deplibs="$deplib $deplibs"
+           fi
+           continue
+           ;;
+         prog)
+           if test "$pass" != link; then
+             deplibs="$deplib $deplibs"
+           else
+             compile_deplibs="$deplib $compile_deplibs"
+             finalize_deplibs="$deplib $finalize_deplibs"
+           fi
+           continue
+           ;;
+         esac # linkmode
+         ;; # *.$libext
+       *.lo | *.$objext)
+         if test "$pass" = conv; then
+           deplibs="$deplib $deplibs"
+         elif test "$linkmode" = prog; then
+           if test "$pass" = dlpreopen || test "$dlopen_support" != yes || 
test "$build_libtool_libs" = no; then
+             # If there is no dlopen support or we're linking statically,
+             # we need to preload.
+             newdlprefiles="$newdlprefiles $deplib"
+             compile_deplibs="$deplib $compile_deplibs"
+             finalize_deplibs="$deplib $finalize_deplibs"
+           else
+             newdlfiles="$newdlfiles $deplib"
+           fi
+         fi
+         continue
+         ;;
+       %DEPLIBS%)
+         alldeplibs=yes
+         continue
+         ;;
+       esac # case $deplib
+       if test "$found" = yes || test -f "$lib"; then :
+       else
+         $echo "$modename: cannot find the library \`$lib' or unhandled 
argument \`$deplib'" 1>&2
+         exit $EXIT_FAILURE
+       fi
+
+       # Check to see that this really is a libtool archive.
+       if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 
2>&1; then :
+       else
+         $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
+         exit $EXIT_FAILURE
+       fi
+
+       ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'`
+       test "X$ladir" = "X$lib" && ladir="."
+
+       dlname=
+       dlopen=
+       dlpreopen=
+       libdir=
+       library_names=
+       old_library=
+       # If the library was installed with an old release of libtool,
+       # it will not redefine variables installed, or shouldnotlink
+       installed=yes
+       shouldnotlink=no
+       avoidtemprpath=
+
+
+       # Read the .la file
+       case $lib in
+       */* | *\\*) . $lib ;;
+       *) . ./$lib ;;
+       esac
+
+       if test "$linkmode,$pass" = "lib,link" ||
+          test "$linkmode,$pass" = "prog,scan" ||
+          { test "$linkmode" != prog && test "$linkmode" != lib; }; then
+         test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
+         test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
+       fi
+
+       if test "$pass" = conv; then
+         # Only check for convenience libraries
+         deplibs="$lib $deplibs"
+         if test -z "$libdir"; then
+           if test -z "$old_library"; then
+             $echo "$modename: cannot find name of link library for \`$lib'" 
1>&2
+             exit $EXIT_FAILURE
+           fi
+           # It is a libtool convenience library, so add in its objects.
+           convenience="$convenience $ladir/$objdir/$old_library"
+           old_convenience="$old_convenience $ladir/$objdir/$old_library"
+           tmp_libs=
+           for deplib in $dependency_libs; do
+             deplibs="$deplib $deplibs"
+              if test "X$duplicate_deps" = "Xyes" ; then
+               case "$tmp_libs " in
+               *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+               esac
+              fi
+             tmp_libs="$tmp_libs $deplib"
+           done
+         elif test "$linkmode" != prog && test "$linkmode" != lib; then
+           $echo "$modename: \`$lib' is not a convenience library" 1>&2
+           exit $EXIT_FAILURE
+         fi
+         continue
+       fi # $pass = conv
+
+
+       # Get the name of the library we link against.
+       linklib=
+       for l in $old_library $library_names; do
+         linklib="$l"
+       done
+       if test -z "$linklib"; then
+         $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
+         exit $EXIT_FAILURE
+       fi
+
+       # This library was specified with -dlopen.
+       if test "$pass" = dlopen; then
+         if test -z "$libdir"; then
+           $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 
1>&2
+           exit $EXIT_FAILURE
+         fi
+         if test -z "$dlname" ||
+            test "$dlopen_support" != yes ||
+            test "$build_libtool_libs" = no; then
+           # If there is no dlname, no dlopen support or we're linking
+           # statically, we need to preload.  We also need to preload any
+           # dependent libraries so libltdl's deplib preloader doesn't
+           # bomb out in the load deplibs phase.
+           dlprefiles="$dlprefiles $lib $dependency_libs"
+         else
+           newdlfiles="$newdlfiles $lib"
+         fi
+         continue
+       fi # $pass = dlopen
+
+       # We need an absolute path.
+       case $ladir in
+       [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
+       *)
+         abs_ladir=`cd "$ladir" && pwd`
+         if test -z "$abs_ladir"; then
+           $echo "$modename: warning: cannot determine absolute directory name 
of \`$ladir'" 1>&2
+           $echo "$modename: passing it literally to the linker, although it 
might fail" 1>&2
+           abs_ladir="$ladir"
+         fi
+         ;;
+       esac
+       laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
+
+       # Find the relevant object directory and library name.
+       if test "X$installed" = Xyes; then
+         if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+           $echo "$modename: warning: library \`$lib' was moved." 1>&2
+           dir="$ladir"
+           absdir="$abs_ladir"
+           libdir="$abs_ladir"
+         else
+           dir="$libdir"
+           absdir="$libdir"
+         fi
+         test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
+       else
+         if test ! -f "$ladir/$objdir/$linklib" && test -f 
"$abs_ladir/$linklib"; then
+           dir="$ladir"
+           absdir="$abs_ladir"
+           # Remove this search path later
+           notinst_path="$notinst_path $abs_ladir"
+         else
+           dir="$ladir/$objdir"
+           absdir="$abs_ladir/$objdir"
+           # Remove this search path later
+           notinst_path="$notinst_path $abs_ladir"
+         fi
+       fi # $installed = yes
+       name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
+
+       # This library was specified with -dlpreopen.
+       if test "$pass" = dlpreopen; then
+         if test -z "$libdir"; then
+           $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 
1>&2
+           exit $EXIT_FAILURE
+         fi
+         # Prefer using a static library (so that no silly _DYNAMIC symbols
+         # are required to link).
+         if test -n "$old_library"; then
+           newdlprefiles="$newdlprefiles $dir/$old_library"
+         # Otherwise, use the dlname, so that lt_dlopen finds it.
+         elif test -n "$dlname"; then
+           newdlprefiles="$newdlprefiles $dir/$dlname"
+         else
+           newdlprefiles="$newdlprefiles $dir/$linklib"
+         fi
+       fi # $pass = dlpreopen
+
+       if test -z "$libdir"; then
+         # Link the convenience library
+         if test "$linkmode" = lib; then
+           deplibs="$dir/$old_library $deplibs"
+         elif test "$linkmode,$pass" = "prog,link"; then
+           compile_deplibs="$dir/$old_library $compile_deplibs"
+           finalize_deplibs="$dir/$old_library $finalize_deplibs"
+         else
+           deplibs="$lib $deplibs" # used for prog,scan pass
+         fi
+         continue
+       fi
+
+
+       if test "$linkmode" = prog && test "$pass" != link; then
+         newlib_search_path="$newlib_search_path $ladir"
+         deplibs="$lib $deplibs"
+
+         linkalldeplibs=no
+         if test "$link_all_deplibs" != no || test -z "$library_names" ||
+            test "$build_libtool_libs" = no; then
+           linkalldeplibs=yes
+         fi
+
+         tmp_libs=
+         for deplib in $dependency_libs; do
+           case $deplib in
+           -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | 
$Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test
+           esac
+           # Need to link against all dependency_libs?
+           if test "$linkalldeplibs" = yes; then
+             deplibs="$deplib $deplibs"
+           else
+             # Need to hardcode shared library paths
+             # or/and link against static libraries
+             newdependency_libs="$deplib $newdependency_libs"
+           fi
+           if test "X$duplicate_deps" = "Xyes" ; then
+             case "$tmp_libs " in
+             *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+             esac
+           fi
+           tmp_libs="$tmp_libs $deplib"
+         done # for deplib
+         continue
+       fi # $linkmode = prog...
+
+       if test "$linkmode,$pass" = "prog,link"; then
+         if test -n "$library_names" &&
+            { test "$prefer_static_libs" = no || test -z "$old_library"; }; 
then
+           # We need to hardcode the library path
+           if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
+             # Make sure the rpath contains only unique directories.
+             case "$temp_rpath " in
+             *" $dir "*) ;;
+             *" $absdir "*) ;;
+             *) temp_rpath="$temp_rpath $absdir" ;;
+             esac
+           fi
+
+           # Hardcode the library path.
+           # Skip directories that are in the system default run-time
+           # search path.
+           case " $sys_lib_dlsearch_path " in
+           *" $absdir "*) ;;
+           *)
+             case "$compile_rpath " in
+             *" $absdir "*) ;;
+             *) compile_rpath="$compile_rpath $absdir"
+             esac
+             ;;
+           esac
+           case " $sys_lib_dlsearch_path " in
+           *" $libdir "*) ;;
+           *)
+             case "$finalize_rpath " in
+             *" $libdir "*) ;;
+             *) finalize_rpath="$finalize_rpath $libdir"
+             esac
+             ;;
+           esac
+         fi # $linkmode,$pass = prog,link...
+
+         if test "$alldeplibs" = yes &&
+            { test "$deplibs_check_method" = pass_all ||
+              { test "$build_libtool_libs" = yes &&
+                test -n "$library_names"; }; }; then
+           # We only need to search for static libraries
+           continue
+         fi
+       fi
+
+       link_static=no # Whether the deplib will be linked statically
+       use_static_libs=$prefer_static_libs
+       if test "$use_static_libs" = built && test "$installed" = yes ; then
+         use_static_libs=no
+       fi
+       if test -n "$library_names" &&
+          { test "$use_static_libs" = no || test -z "$old_library"; }; then
+         if test "$installed" = no; then
+           notinst_deplibs="$notinst_deplibs $lib"
+           need_relink=yes
+         fi
+         # This is a shared library
+
+         # Warn about portability, can't link against -module's on
+         # some systems (darwin)
+         if test "$shouldnotlink" = yes && test "$pass" = link ; then
+           $echo
+           if test "$linkmode" = prog; then
+             $echo "*** Warning: Linking the executable $output against the 
loadable module"
+           else
+             $echo "*** Warning: Linking the shared library $output against 
the loadable module"
+           fi
+           $echo "*** $linklib is not portable!"
+         fi
+         if test "$linkmode" = lib &&
+            test "$hardcode_into_libs" = yes; then
+           # Hardcode the library path.
+           # Skip directories that are in the system default run-time
+           # search path.
+           case " $sys_lib_dlsearch_path " in
+           *" $absdir "*) ;;
+           *)
+             case "$compile_rpath " in
+             *" $absdir "*) ;;
+             *) compile_rpath="$compile_rpath $absdir"
+             esac
+             ;;
+           esac
+           case " $sys_lib_dlsearch_path " in
+           *" $libdir "*) ;;
+           *)
+             case "$finalize_rpath " in
+             *" $libdir "*) ;;
+             *) finalize_rpath="$finalize_rpath $libdir"
+             esac
+             ;;
+           esac
+         fi
+
+         if test -n "$old_archive_from_expsyms_cmds"; then
+           # figure out the soname
+           set dummy $library_names
+           realname="$2"
+           shift; shift
+           libname=`eval \\$echo \"$libname_spec\"`
+           # use dlname if we got it. it's perfectly good, no?
+           if test -n "$dlname"; then
+             soname="$dlname"
+           elif test -n "$soname_spec"; then
+             # bleh windows
+             case $host in
+             *cygwin* | mingw*)
+               major=`expr $current - $age`
+               versuffix="-$major"
+               ;;
+             esac
+             eval soname=\"$soname_spec\"
+           else
+             soname="$realname"
+           fi
+
+           # Make a new name for the extract_expsyms_cmds to use
+           soroot="$soname"
+           soname=`$echo $soroot | ${SED} -e 's/^.*\///'`
+           newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a"
+
+           # If the library has no export list, then create one now
+           if test -f "$output_objdir/$soname-def"; then :
+           else
+             $show "extracting exported symbol list from \`$soname'"
+             save_ifs="$IFS"; IFS='~'
+             cmds=$extract_expsyms_cmds
+             for cmd in $cmds; do
+               IFS="$save_ifs"
+               eval cmd=\"$cmd\"
+               $show "$cmd"
+               $run eval "$cmd" || exit $?
+             done
+             IFS="$save_ifs"
+           fi
+
+           # Create $newlib
+           if test -f "$output_objdir/$newlib"; then :; else
+             $show "generating import library for \`$soname'"
+             save_ifs="$IFS"; IFS='~'
+             cmds=$old_archive_from_expsyms_cmds
+             for cmd in $cmds; do
+               IFS="$save_ifs"
+               eval cmd=\"$cmd\"
+               $show "$cmd"
+               $run eval "$cmd" || exit $?
+             done
+             IFS="$save_ifs"
+           fi
+           # make sure the library variables are pointing to the new library
+           dir=$output_objdir
+           linklib=$newlib
+         fi # test -n "$old_archive_from_expsyms_cmds"
+
+         if test "$linkmode" = prog || test "$mode" != relink; then
+           add_shlibpath=
+           add_dir=
+           add=
+           lib_linked=yes
+           case $hardcode_action in
+           immediate | unsupported)
+             if test "$hardcode_direct" = no; then
+               add="$dir/$linklib"
+               case $host in
+                 *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
+                 *-*-sysv4*uw2*) add_dir="-L$dir" ;;
+                 *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
+                   *-*-unixware7*) add_dir="-L$dir" ;;
+                 *-*-darwin* )
+                   # if the lib is a module then we can not link against
+                   # it, someone is ignoring the new warnings I added
+                   if /usr/bin/file -L $add 2> /dev/null |
+                      $EGREP ": [^:]* bundle" >/dev/null ; then
+                     $echo "** Warning, lib $linklib is a module, not a shared 
library"
+                     if test -z "$old_library" ; then
+                       $echo
+                       $echo "** And there doesn't seem to be a static archive 
available"
+                       $echo "** The link will probably fail, sorry"
+                     else
+                       add="$dir/$old_library"
+                     fi
+                   fi
+               esac
+             elif test "$hardcode_minus_L" = no; then
+               case $host in
+               *-*-sunos*) add_shlibpath="$dir" ;;
+               esac
+               add_dir="-L$dir"
+               add="-l$name"
+             elif test "$hardcode_shlibpath_var" = no; then
+               add_shlibpath="$dir"
+               add="-l$name"
+             else
+               lib_linked=no
+             fi
+             ;;
+           relink)
+             if test "$hardcode_direct" = yes; then
+               add="$dir/$linklib"
+             elif test "$hardcode_minus_L" = yes; then
+               add_dir="-L$dir"
+               # Try looking first in the location we're being installed to.
+               if test -n "$inst_prefix_dir"; then
+                 case $libdir in
+                   [\\/]*)
+                     add_dir="$add_dir -L$inst_prefix_dir$libdir"
+                     ;;
+                 esac
+               fi
+               add="-l$name"
+             elif test "$hardcode_shlibpath_var" = yes; then
+               add_shlibpath="$dir"
+               add="-l$name"
+             else
+               lib_linked=no
+             fi
+             ;;
+           *) lib_linked=no ;;
+           esac
+
+           if test "$lib_linked" != yes; then
+             $echo "$modename: configuration error: unsupported hardcode 
properties"
+             exit $EXIT_FAILURE
+           fi
+
+           if test -n "$add_shlibpath"; then
+             case :$compile_shlibpath: in
+             *":$add_shlibpath:"*) ;;
+             *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
+             esac
+           fi
+           if test "$linkmode" = prog; then
+             test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
+             test -n "$add" && compile_deplibs="$add $compile_deplibs"
+           else
+             test -n "$add_dir" && deplibs="$add_dir $deplibs"
+             test -n "$add" && deplibs="$add $deplibs"
+             if test "$hardcode_direct" != yes && \
+                test "$hardcode_minus_L" != yes && \
+                test "$hardcode_shlibpath_var" = yes; then
+               case :$finalize_shlibpath: in
+               *":$libdir:"*) ;;
+               *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+               esac
+             fi
+           fi
+         fi
+
+         if test "$linkmode" = prog || test "$mode" = relink; then
+           add_shlibpath=
+           add_dir=
+           add=
+           # Finalize command for both is simple: just hardcode it.
+           if test "$hardcode_direct" = yes; then
+             add="$libdir/$linklib"
+           elif test "$hardcode_minus_L" = yes; then
+             add_dir="-L$libdir"
+             add="-l$name"
+           elif test "$hardcode_shlibpath_var" = yes; then
+             case :$finalize_shlibpath: in
+             *":$libdir:"*) ;;
+             *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+             esac
+             add="-l$name"
+           elif test "$hardcode_automatic" = yes; then
+             if test -n "$inst_prefix_dir" &&
+                test -f "$inst_prefix_dir$libdir/$linklib" ; then
+               add="$inst_prefix_dir$libdir/$linklib"
+             else
+               add="$libdir/$linklib"
+             fi
+           else
+             # We cannot seem to hardcode it, guess we'll fake it.
+             add_dir="-L$libdir"
+             # Try looking first in the location we're being installed to.
+             if test -n "$inst_prefix_dir"; then
+               case $libdir in
+                 [\\/]*)
+                   add_dir="$add_dir -L$inst_prefix_dir$libdir"
+                   ;;
+               esac
+             fi
+             add="-l$name"
+           fi
+
+           if test "$linkmode" = prog; then
+             test -n "$add_dir" && finalize_deplibs="$add_dir 
$finalize_deplibs"
+             test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
+           else
+             test -n "$add_dir" && deplibs="$add_dir $deplibs"
+             test -n "$add" && deplibs="$add $deplibs"
+           fi
+         fi
+       elif test "$linkmode" = prog; then
+         # Here we assume that one of hardcode_direct or hardcode_minus_L
+         # is not unsupported.  This is valid on all known static and
+         # shared platforms.
+         if test "$hardcode_direct" != unsupported; then
+           test -n "$old_library" && linklib="$old_library"
+           compile_deplibs="$dir/$linklib $compile_deplibs"
+           finalize_deplibs="$dir/$linklib $finalize_deplibs"
+         else
+           compile_deplibs="-l$name -L$dir $compile_deplibs"
+           finalize_deplibs="-l$name -L$dir $finalize_deplibs"
+         fi
+       elif test "$build_libtool_libs" = yes; then
+         # Not a shared library
+         if test "$deplibs_check_method" != pass_all; then
+           # We're trying link a shared library against a static one
+           # but the system doesn't support it.
+
+           # Just print a warning and add the library to dependency_libs so
+           # that the program can be linked against the static library.
+           $echo
+           $echo "*** Warning: This system can not link to static lib archive 
$lib."
+           $echo "*** I have the capability to make that library automatically 
link in when"
+           $echo "*** you link to this library.  But I can only do this if you 
have a"
+           $echo "*** shared version of the library, which you do not appear 
to have."
+           if test "$module" = yes; then
+             $echo "*** But as you try to build a module library, libtool will 
still create "
+             $echo "*** a static module, that should work as long as the 
dlopening application"
+             $echo "*** is linked with the -dlopen flag to resolve symbols at 
runtime."
+             if test -z "$global_symbol_pipe"; then
+               $echo
+               $echo "*** However, this would only work if libtool was able to 
extract symbol"
+               $echo "*** lists from a program, using \`nm' or equivalent, but 
libtool could"
+               $echo "*** not find such a program.  So, this module is 
probably useless."
+               $echo "*** \`nm' from GNU binutils and a full rebuild may help."
+             fi
+             if test "$build_old_libs" = no; then
+               build_libtool_libs=module
+               build_old_libs=yes
+             else
+               build_libtool_libs=no
+             fi
+           fi
+         else
+           deplibs="$dir/$old_library $deplibs"
+           link_static=yes
+         fi
+       fi # link shared/static library?
+
+       if test "$linkmode" = lib; then
+         if test -n "$dependency_libs" &&
+            { test "$hardcode_into_libs" != yes ||
+              test "$build_old_libs" = yes ||
+              test "$link_static" = yes; }; then
+           # Extract -R from dependency_libs
+           temp_deplibs=
+           for libdir in $dependency_libs; do
+             case $libdir in
+             -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'`
+                  case " $xrpath " in
+                  *" $temp_xrpath "*) ;;
+                  *) xrpath="$xrpath $temp_xrpath";;
+                  esac;;
+             *) temp_deplibs="$temp_deplibs $libdir";;
+             esac
+           done
+           dependency_libs="$temp_deplibs"
+         fi
+
+         newlib_search_path="$newlib_search_path $absdir"
+         # Link against this library
+         test "$link_static" = no && newdependency_libs="$abs_ladir/$laname 
$newdependency_libs"
+         # ... and its dependency_libs
+         tmp_libs=
+         for deplib in $dependency_libs; do
+           newdependency_libs="$deplib $newdependency_libs"
+           if test "X$duplicate_deps" = "Xyes" ; then
+             case "$tmp_libs " in
+             *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+             esac
+           fi
+           tmp_libs="$tmp_libs $deplib"
+         done
+
+         if test "$link_all_deplibs" != no; then
+           # Add the search paths of all dependency libraries
+           for deplib in $dependency_libs; do
+             case $deplib in
+             -L*) path="$deplib" ;;
+             *.la)
+               dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'`
+               test "X$dir" = "X$deplib" && dir="."
+               # We need an absolute path.
+               case $dir in
+               [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
+               *)
+                 absdir=`cd "$dir" && pwd`
+                 if test -z "$absdir"; then
+                   $echo "$modename: warning: cannot determine absolute 
directory name of \`$dir'" 1>&2
+                   absdir="$dir"
+                 fi
+                 ;;
+               esac
+               if grep "^installed=no" $deplib > /dev/null; then
+                 path="$absdir/$objdir"
+               else
+                 eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+                 if test -z "$libdir"; then
+                   $echo "$modename: \`$deplib' is not a valid libtool 
archive" 1>&2
+                   exit $EXIT_FAILURE
+                 fi
+                 if test "$absdir" != "$libdir"; then
+                   $echo "$modename: warning: \`$deplib' seems to be moved" 
1>&2
+                 fi
+                 path="$absdir"
+               fi
+               depdepl=
+               case $host in
+               *-*-darwin*)
+                 # we do not want to link against static libs,
+                 # but need to link against shared
+                 eval deplibrary_names=`${SED} -n -e 
's/^library_names=\(.*\)$/\1/p' $deplib`
+                 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
+             *" $path "*) ;;
+             *) deplibs="$path $deplibs" ;;
+             esac
+             case " $deplibs " in
+             *" $depdepl "*) ;;
+             *) deplibs="$depdepl $deplibs" ;;
+             esac
+           done
+         fi # link_all_deplibs != no
+       fi # linkmode = lib
+      done # for deplib in $libs
+      dependency_libs="$newdependency_libs"
+      if test "$pass" = dlpreopen; then
+       # Link the dlpreopened libraries before other libraries
+       for deplib in $save_deplibs; do
+         deplibs="$deplib $deplibs"
+       done
+      fi
+      if test "$pass" != dlopen; then
+       if test "$pass" != conv; then
+         # Make sure lib_search_path contains only unique directories.
+         lib_search_path=
+         for dir in $newlib_search_path; do
+           case "$lib_search_path " in
+           *" $dir "*) ;;
+           *) lib_search_path="$lib_search_path $dir" ;;
+           esac
+         done
+         newlib_search_path=
+       fi
+
+       if test "$linkmode,$pass" != "prog,link"; then
+         vars="deplibs"
+       else
+         vars="compile_deplibs finalize_deplibs"
+       fi
+       for var in $vars dependency_libs; do
+         # Add libraries to $var in reverse order
+         eval tmp_libs=\"\$$var\"
+         new_libs=
+         for deplib in $tmp_libs; do
+           # FIXME: Pedantically, this is the right thing to do, so
+           #        that some nasty dependency loop isn't accidentally
+           #        broken:
+           #new_libs="$deplib $new_libs"
+           # Pragmatically, this seems to cause very few problems in
+           # practice:
+           case $deplib in
+           -L*) new_libs="$deplib $new_libs" ;;
+           -R*) ;;
+           *)
+             # And here is the reason: when a library appears more
+             # than once as an explicit dependence of a library, or
+             # is implicitly linked in more than once by the
+             # compiler, it is considered special, and multiple
+             # occurrences thereof are not removed.  Compare this
+             # with having the same library being listed as a
+             # dependency of multiple other libraries: in this case,
+             # we know (pedantically, we assume) the library does not
+             # need to be listed more than once, so we keep only the
+             # last copy.  This is not always right, but it is rare
+             # enough that we require users that really mean to play
+             # such unportable linking tricks to link the library
+             # using -Wl,-lname, so that libtool does not consider it
+             # for duplicate removal.
+             case " $specialdeplibs " in
+             *" $deplib "*) new_libs="$deplib $new_libs" ;;
+             *)
+               case " $new_libs " in
+               *" $deplib "*) ;;
+               *) new_libs="$deplib $new_libs" ;;
+               esac
+               ;;
+             esac
+             ;;
+           esac
+         done
+         tmp_libs=
+         for deplib in $new_libs; do
+           case $deplib in
+           -L*)
+             case " $tmp_libs " in
+             *" $deplib "*) ;;
+             *) tmp_libs="$tmp_libs $deplib" ;;
+             esac
+             ;;
+           *) tmp_libs="$tmp_libs $deplib" ;;
+           esac
+         done
+         eval $var=\"$tmp_libs\"
+       done # for var
+      fi
+      # Last step: remove runtime libs from dependency_libs
+      # (they stay in deplibs)
+      tmp_libs=
+      for i in $dependency_libs ; do
+       case " $predeps $postdeps $compiler_lib_search_path " in
+       *" $i "*)
+         i=""
+         ;;
+       esac
+       if test -n "$i" ; then
+         tmp_libs="$tmp_libs $i"
+       fi
+      done
+      dependency_libs=$tmp_libs
+    done # for pass
+    if test "$linkmode" = prog; then
+      dlfiles="$newdlfiles"
+      dlprefiles="$newdlprefiles"
+    fi
+
+    case $linkmode in
+    oldlib)
+      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"
+           ;;
+         *)
+           $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
+         ;;
+       no)
+         current="$2"
+         revision="$3"
+         age="$4"
+         ;;
+       esac
+
+       # Check that each of the things are valid numbers.
+       case $current in
+       
0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9])
 ;;
+       *)
+         $echo "$modename: CURRENT \`$current' must be a nonnegative integer" 
1>&2
+         $echo "$modename: \`$vinfo' is not valid version information" 1>&2
+         exit $EXIT_FAILURE
+         ;;
+       esac
+
+       case $revision in
+       
0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9])
 ;;
+       *)
+         $echo "$modename: REVISION \`$revision' must be a nonnegative 
integer" 1>&2
+         $echo "$modename: \`$vinfo' is not valid version information" 1>&2
+         exit $EXIT_FAILURE
+         ;;
+       esac
+
+       case $age in
+       
0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9])
 ;;
+       *)
+         $echo "$modename: AGE \`$age' must be a nonnegative integer" 1>&2
+         $echo "$modename: \`$vinfo' is not valid version information" 1>&2
+         exit $EXIT_FAILURE
+         ;;
+       esac
+
+       if test "$age" -gt "$current"; then
+         $echo "$modename: AGE \`$age' is greater than the current interface 
number \`$current'" 1>&2
+         $echo "$modename: \`$vinfo' is not valid version information" 1>&2
+         exit $EXIT_FAILURE
+       fi
+
+       # Calculate the version variables.
+       major=
+       versuffix=
+       verstring=
+       case $version_type in
+       none) ;;
+
+       darwin)
+         # Like Linux, but with the current version available in
+         # verstring for coding it into the library header
+         major=.`expr $current - $age`
+         versuffix="$major.$age.$revision"
+         # Darwin ld doesn't like 0 for these options...
+         minor_current=`expr $current + 1`
+         verstring="${wl}-compatibility_version ${wl}$minor_current 
${wl}-current_version ${wl}$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* | *-*-dragonfly*)
+           # Do not include libc due to us having libc/libc_r.
+           ;;
+         *-*-sco3.2v5* | *-*-sco5v6*)
+           # Causes problems with __ctype
+           ;;
+         *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+           # Compiler inserts libc in the correct place for threads to work
+           ;;
+         *)
+           # Add libc to deplibs on all other systems if necessary.
+           if test "$build_libtool_need_lc" = "yes"; then
+             deplibs="$deplibs -lc"
+           fi
+           ;;
+         esac
+       fi
+
+       # Transform deplibs into only deplibs that can be linked in shared.
+       name_save=$name
+       libname_save=$libname
+       release_save=$release
+       versuffix_save=$versuffix
+       major_save=$major
+       # I'm not sure if I'm treating the release correctly.  I think
+       # release should show up in the -l (ie -lgmp5) so we don't want to
+       # add it in twice.  Is that correct?
+       release=""
+       versuffix=""
+       major=""
+       newdeplibs=
+       droppeddeps=no
+       case $deplibs_check_method in
+       pass_all)
+         # Don't check for shared/static.  Everything works.
+         # This might be a little naive.  We might want to check
+         # whether the library exists or not.  But this is on
+         # osf3 & osf4 and I'm not really sure... Just
+         # implementing what was already the behavior.
+         newdeplibs=$deplibs
+         ;;
+       test_compile)
+         # This code stresses the "libraries are programs" paradigm to its
+         # limits. Maybe even breaks it.  We compile a program, linking it
+         # against the deplibs as a proxy for the library.  Then we can check
+         # whether they linked in statically or dynamically with ldd.
+         $rm conftest.c
+         cat > conftest.c <<EOF
+         int main() { return 0; }
+EOF
+         $rm conftest
+         $LTCC $LTCFLAGS -o conftest conftest.c $deplibs
+         if test "$?" -eq 0 ; then
+           ldd_output=`ldd conftest`
+           for i in $deplibs; do
+             name=`expr $i : '-l\(.*\)'`
+             # If $name is empty we are operating on a -L argument.
+              if test "$name" != "" && test "$name" -ne "0"; then
+               if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; 
then
+                 case " $predeps $postdeps " in
+                 *" $i "*)
+                   newdeplibs="$newdeplibs $i"
+                   i=""
+                   ;;
+                 esac
+               fi
+               if test -n "$i" ; then
+                 libname=`eval \\$echo \"$libname_spec\"`
+                 deplib_matches=`eval \\$echo \"$library_names_spec\"`
+                 set dummy $deplib_matches
+                 deplib_match=$2
+                 if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+                   newdeplibs="$newdeplibs $i"
+                 else
+                   droppeddeps=yes
+                   $echo
+                   $echo "*** Warning: dynamic linker does not accept needed 
library $i."
+                   $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 I believe 
you do not have"
+                   $echo "*** because a test_compile did reveal that the 
linker did not use it for"
+                   $echo "*** its dynamic dependency list that programs get 
resolved with at runtime."
+                 fi
+               fi
+             else
+               newdeplibs="$newdeplibs $i"
+             fi
+           done
+         else
+           # Error occurred in the first compile.  Let's try to salvage
+           # the situation: Compile a separate program for each library.
+           for i in $deplibs; do
+             name=`expr $i : '-l\(.*\)'`
+             # If $name is empty we are operating on a -L argument.
+              if test "$name" != "" && test "$name" != "0"; then
+               $rm conftest
+               $LTCC $LTCFLAGS -o conftest conftest.c $i
+               # Did it work?
+               if test "$?" -eq 0 ; then
+                 ldd_output=`ldd conftest`
+                 if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" 
; then
+                   case " $predeps $postdeps " in
+                   *" $i "*)
+                     newdeplibs="$newdeplibs $i"
+                     i=""
+                     ;;
+                   esac
+                 fi
+                 if test -n "$i" ; then
+                   libname=`eval \\$echo \"$libname_spec\"`
+                   deplib_matches=`eval \\$echo \"$library_names_spec\"`
+                   set dummy $deplib_matches
+                   deplib_match=$2
+                   if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; 
then
+                     newdeplibs="$newdeplibs $i"
+                   else
+                     droppeddeps=yes
+                     $echo
+                     $echo "*** Warning: dynamic linker does not accept needed 
library $i."
+                     $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 a test_compile did reveal that the 
linker did not use this one"
+                     $echo "*** as a dynamic dependency that programs can get 
resolved with at runtime."
+                   fi
+                 fi
+               else
+                 droppeddeps=yes
+                 $echo
+                 $echo "*** Warning!  Library $i is needed by this library but 
I was not able to"
+                 $echo "***  make it link in!  You will probably need to 
install it or some"
+                 $echo "*** library that it depends on before this library 
will be fully"
+                 $echo "*** functional.  Installing it before continuing would 
be even better."
+               fi
+             else
+               newdeplibs="$newdeplibs $i"
+             fi
+           done
+         fi
+         ;;
+       file_magic*)
+         set dummy $deplibs_check_method
+         file_magic_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 "$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
+                     # Follow soft links.
+                     if ls -lLd "$potent_lib" 2>/dev/null \
+                        | grep " -> " >/dev/null; then
+                       continue
+                     fi
+                     # The statement above tries to avoid entering an
+                     # endless loop below, in case of cyclic links.
+                     # We might still enter an endless loop, since a link
+                     # loop can be closed while we follow links,
+                     # but so what?
+                     potlib="$potent_lib"
+                     while test -h "$potlib" 2>/dev/null; do
+                       potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
+                       case $potliblink in
+                       [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
+                       *) potlib=`$echo "X$potlib" | $Xsed -e 
's,[^/]*$,,'`"$potliblink";;
+                       esac
+                     done
+                     if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \
+                        | ${SED} 10q \
+                        | $EGREP "$file_magic_regex" > /dev/null; then
+                       newdeplibs="$newdeplibs $a_deplib"
+                       a_deplib=""
+                       break 2
+                     fi
+                 done
+               done
+             fi
+             if test -n "$a_deplib" ; then
+               droppeddeps=yes
+               $echo
+               $echo "*** Warning: linker path does not have real file for 
library $a_deplib."
+               $echo "*** I have the capability to make that library 
automatically link in when"
+               $echo "*** you link to this library.  But I can only do this if 
you have a"
+               $echo "*** shared version of the library, which you do not 
appear to have"
+               $echo "*** because I did check the linker path looking for a 
file starting"
+               if test -z "$potlib" ; then
+                 $echo "*** with $libname but no candidates were found. 
(...for file magic test)"
+               else
+                 $echo "*** with $libname and none of the candidates passed a 
file format test"
+                 $echo "*** using a file magic. Last file checked: $potlib"
+               fi
+             fi
+           else
+             # Add a -L argument.
+             newdeplibs="$newdeplibs $a_deplib"
+           fi
+         done # Gone through all deplibs.
+         ;;
+       match_pattern*)
+         set dummy $deplibs_check_method
+         match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
+         for a_deplib in $deplibs; do
+           name=`expr $a_deplib : '-l\(.*\)'`
+           # If $name is empty we are operating on a -L argument.
+           if test -n "$name" && test "$name" != "0"; then
+             if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; 
then
+               case " $predeps $postdeps " in
+               *" $a_deplib "*)
+                 newdeplibs="$newdeplibs $a_deplib"
+                 a_deplib=""
+                 ;;
+               esac
+             fi
+             if test -n "$a_deplib" ; then
+               libname=`eval \\$echo \"$libname_spec\"`
+               for i in $lib_search_path $sys_lib_search_path 
$shlib_search_path; do
+                 potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+                 for potent_lib in $potential_libs; do
+                   potlib="$potent_lib" # see symlink-check above in 
file_magic test
+                   if eval $echo \"$potent_lib\" 2>/dev/null \
+                       | ${SED} 10q \
+                       | $EGREP "$match_pattern_regex" > /dev/null; then
+                     newdeplibs="$newdeplibs $a_deplib"
+                     a_deplib=""
+                     break 2
+                   fi
+                 done
+               done
+             fi
+             if test -n "$a_deplib" ; then
+               droppeddeps=yes
+               $echo
+               $echo "*** Warning: linker path does not have real file for 
library $a_deplib."
+               $echo "*** I have the capability to make that library 
automatically link in when"
+               $echo "*** you link to this library.  But I can only do this if 
you have a"
+               $echo "*** shared version of the library, which you do not 
appear to have"
+               $echo "*** because I did check the linker path looking for a 
file starting"
+               if test -z "$potlib" ; then
+                 $echo "*** with $libname but no candidates were found. 
(...for regex pattern test)"
+               else
+                 $echo "*** with $libname and none of the candidates passed a 
file format test"
+                 $echo "*** using a regex pattern. Last file checked: $potlib"
+               fi
+             fi
+           else
+             # Add a -L argument.
+             newdeplibs="$newdeplibs $a_deplib"
+           fi
+         done # Gone through all deplibs.
+         ;;
+       none | unknown | *)
+         newdeplibs=""
+         tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \
+           -e 's/ -[LR][^ ]*//g'`
+         if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+           for i in $predeps $postdeps ; do
+             # can't use Xsed below, because $i might contain '/'
+             tmp_deplibs=`$echo "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e 
"s,$i,,"`
+           done
+         fi
+         if $echo "X $tmp_deplibs" | $Xsed -e 's/[     ]//g' \
+           | grep . >/dev/null; then
+           $echo
+           if test "X$deplibs_check_method" = "Xnone"; then
+             $echo "*** Warning: inter-library dependencies are not supported 
in this platform."
+           else
+             $echo "*** Warning: inter-library dependencies are not known to 
be supported."
+           fi
+           $echo "*** All declared inter-library dependencies are being 
dropped."
+           droppeddeps=yes
+         fi
+         ;;
+       esac
+       versuffix=$versuffix_save
+       major=$major_save
+       release=$release_save
+       libname=$libname_save
+       name=$name_save
+
+       case $host in
+       *-*-rhapsody* | *-*-darwin1.[012])
+         # On Rhapsody replace the C library is the System framework
+         newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework 
System /'`
+         ;;
+       esac
+
+       if test "$droppeddeps" = yes; then
+         if test "$module" = yes; then
+           $echo
+           $echo "*** Warning: libtool could not satisfy all declared 
inter-library"
+           $echo "*** dependencies of module $libname.  Therefore, libtool 
will create"
+           $echo "*** a static module, that should work as long as the 
dlopening"
+           $echo "*** application is linked with the -dlopen flag."
+           if test -z "$global_symbol_pipe"; then
+             $echo
+             $echo "*** However, this would only work if libtool was able to 
extract symbol"
+             $echo "*** lists from a program, using \`nm' or equivalent, but 
libtool could"
+             $echo "*** not find such a program.  So, this module is probably 
useless."
+             $echo "*** \`nm' from GNU binutils and a full rebuild may help."
+           fi
+           if test "$build_old_libs" = no; then
+             oldlibs="$output_objdir/$libname.$libext"
+             build_libtool_libs=module
+             build_old_libs=yes
+           else
+             build_libtool_libs=no
+           fi
+         else
+           $echo "*** The inter-library dependencies that have been dropped 
here will be"
+           $echo "*** automatically added whenever a program is linked with 
this library"
+           $echo "*** or is declared to -dlopen it."
+
+           if test "$allow_undefined" = no; then
+             $echo
+             $echo "*** Since this library must not contain undefined symbols,"
+             $echo "*** because either the platform does not support them or"
+             $echo "*** it was explicitly requested with -no-undefined,"
+             $echo "*** libtool will only create a static version of it."
+             if test "$build_old_libs" = no; then
+               oldlibs="$output_objdir/$libname.$libext"
+               build_libtool_libs=module
+               build_old_libs=yes
+             else
+               build_libtool_libs=no
+             fi
+           fi
+         fi
+       fi
+       # Done checking deplibs!
+       deplibs=$newdeplibs
+      fi
+
+
+      # move library search paths that coincide with paths to not yet
+      # installed libraries to the beginning of the library search list
+      new_libs=
+      for path in $notinst_path; do
+       case " $new_libs " in
+       *" -L$path/$objdir "*) ;;
+       *)
+         case " $deplibs " in
+         *" -L$path/$objdir "*)
+           new_libs="$new_libs -L$path/$objdir" ;;
+         esac
+         ;;
+       esac
+      done
+      for deplib in $deplibs; do
+       case $deplib in
+       -L*)
+         case " $new_libs " in
+         *" $deplib "*) ;;
+         *) new_libs="$new_libs $deplib" ;;
+         esac
+         ;;
+       *) new_libs="$new_libs $deplib" ;;
+       esac
+      done
+      deplibs="$new_libs"
+
+
+      # All the library-specific variables (install_libdir is set above).
+      library_names=
+      old_library=
+      dlname=
+
+      # Test again, we may have decided not to build it any more
+      if test "$build_libtool_libs" = yes; then
+       if test "$hardcode_into_libs" = yes; then
+         # Hardcode the library paths
+         hardcode_libdirs=
+         dep_rpath=
+         rpath="$finalize_rpath"
+         test "$mode" != relink && rpath="$compile_rpath$rpath"
+         for libdir in $rpath; do
+           if test -n "$hardcode_libdir_flag_spec"; then
+             if test -n "$hardcode_libdir_separator"; then
+               if test -z "$hardcode_libdirs"; then
+                 hardcode_libdirs="$libdir"
+               else
+                 # Just accumulate the unique libdirs.
+                 case 
$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+                 
*"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+                   ;;
+                 *)
+                   
hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+                   ;;
+                 esac
+               fi
+             else
+               eval flag=\"$hardcode_libdir_flag_spec\"
+               dep_rpath="$dep_rpath $flag"
+             fi
+           elif test -n "$runpath_var"; then
+             case "$perm_rpath " in
+             *" $libdir "*) ;;
+             *) perm_rpath="$perm_rpath $libdir" ;;
+             esac
+           fi
+         done
+         # Substitute the hardcoded libdirs into the rpath.
+         if test -n "$hardcode_libdir_separator" &&
+            test -n "$hardcode_libdirs"; then
+           libdir="$hardcode_libdirs"
+           if test -n "$hardcode_libdir_flag_spec_ld"; then
+             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"
+       linknames=
+       for link
+       do
+         linknames="$linknames $link"
+       done
+
+       # Use standard objects if they are pic
+       test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e 
"$lo2o" | $NL2SP`
+
+       # Prepare the list of exported symbols
+       if test -z "$export_symbols"; then
+         if test "$always_export_symbols" = yes || test -n 
"$export_symbols_regex"; then
+           $show "generating symbol list for \`$libname.la'"
+           export_symbols="$output_objdir/$libname.exp"
+           $run $rm $export_symbols
+           cmds=$export_symbols_cmds
+           save_ifs="$IFS"; IFS='~'
+           for cmd in $cmds; do
+             IFS="$save_ifs"
+             eval cmd=\"$cmd\"
+             if len=`expr "X$cmd" : ".*"` &&
+              test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; 
then
+               $show "$cmd"
+               $run eval "$cmd" || exit $?
+               skipped_export=false
+             else
+               # The command line is too long to execute in one step.
+               $show "using reloadable object file for export list..."
+               skipped_export=:
+               # Break out early, otherwise skipped_export may be
+               # set to false by a later but shorter cmd.
+               break
+             fi
+           done
+           IFS="$save_ifs"
+           if test -n "$export_symbols_regex"; then
+             $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > 
\"${export_symbols}T\""
+             $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > 
"${export_symbols}T"'
+             $show "$mv \"${export_symbols}T\" \"$export_symbols\""
+             $run eval '$mv "${export_symbols}T" "$export_symbols"'
+           fi
+         fi
+       fi
+
+       if test -n "$export_symbols" && test -n "$include_expsyms"; then
+         $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"'
+       fi
+
+       tmp_deplibs=
+       for test_deplib in $deplibs; do
+               case " $convenience " in
+               *" $test_deplib "*) ;;
+               *)
+                       tmp_deplibs="$tmp_deplibs $test_deplib"
+                       ;;
+               esac
+       done
+       deplibs="$tmp_deplibs"
+
+       if test -n "$convenience"; then
+         if test -n "$whole_archive_flag_spec"; then
+           save_libobjs=$libobjs
+           eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+         else
+           gentop="$output_objdir/${outputname}x"
+           generated="$generated $gentop"
+
+           func_extract_archives $gentop $convenience
+           libobjs="$libobjs $func_extract_archives_result"
+         fi
+       fi
+       
+       if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
+         eval flag=\"$thread_safe_flag_spec\"
+         linker_flags="$linker_flags $flag"
+       fi
+
+       # Make a backup of the uninstalled library when relinking
+       if test "$mode" = relink; then
+         $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname 
${realname}U)' || exit $?
+       fi
+
+       # Do each of the archive commands.
+       if test "$module" = yes && test -n "$module_cmds" ; then
+         if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+           eval test_cmds=\"$module_expsym_cmds\"
+           cmds=$module_expsym_cmds
+         else
+           eval test_cmds=\"$module_cmds\"
+           cmds=$module_cmds
+         fi
+       else
+       if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+         eval test_cmds=\"$archive_expsym_cmds\"
+         cmds=$archive_expsym_cmds
+       else
+         eval test_cmds=\"$archive_cmds\"
+         cmds=$archive_cmds
+         fi
+       fi
+
+       if test "X$skipped_export" != "X:" &&
+          len=`expr "X$test_cmds" : ".*" 2>/dev/null` &&
+          test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+         :
+       else
+         # The command line is too long to link in one step, link piecewise.
+         $echo "creating reloadable object files..."
+
+         # Save the value of $output and $libobjs because we want to
+         # use them later.  If we have whole_archive_flag_spec, we
+         # want to use save_libobjs as it was before
+         # whole_archive_flag_spec was expanded, because we can't
+         # assume the linker understands whole_archive_flag_spec.
+         # This may have to be revisited, in case too many
+         # convenience libraries get linked in and end up exceeding
+         # the spec.
+         if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
+           save_libobjs=$libobjs
+         fi
+         save_output=$output
+         output_la=`$echo "X$output" | $Xsed -e "$basename"`
+
+         # Clear the reloadable object creation command queue and
+         # initialize k to one.
+         test_cmds=
+         concat_cmds=
+         objlist=
+         delfiles=
+         last_robj=
+         k=1
+         output=$output_objdir/$output_la-${k}.$objext
+         # Loop over the list of objects to be linked.
+         for obj in $save_libobjs
+         do
+           eval test_cmds=\"$reload_cmds $objlist $last_robj\"
+           if test "X$objlist" = X ||
+              { len=`expr "X$test_cmds" : ".*" 2>/dev/null` &&
+                test "$len" -le "$max_cmd_len"; }; then
+             objlist="$objlist $obj"
+           else
+             # The command $test_cmds is almost too long, add a
+             # command to the queue.
+             if test "$k" -eq 1 ; then
+               # The first file doesn't have a previous command to add.
+               eval concat_cmds=\"$reload_cmds $objlist $last_robj\"
+             else
+               # All subsequent reloadable object files will link in
+               # the last one created.
+               eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist 
$last_robj\"
+             fi
+             last_robj=$output_objdir/$output_la-${k}.$objext
+             k=`expr $k + 1`
+             output=$output_objdir/$output_la-${k}.$objext
+             objlist=$obj
+             len=1
+           fi
+         done
+         # Handle the remaining objects by creating one last
+         # reloadable object file.  All subsequent reloadable object
+         # files will link in the last one created.
+         test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+         eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\"
+
+         if ${skipped_export-false}; then
+           $show "generating symbol list for \`$libname.la'"
+           export_symbols="$output_objdir/$libname.exp"
+           $run $rm $export_symbols
+           libobjs=$output
+           # Append the command to create the export file.
+           eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\"
+          fi
+
+         # Set up a command to remove the reloadable object files
+         # after they are used.
+         i=0
+         while test "$i" -lt "$k"
+         do
+           i=`expr $i + 1`
+           delfiles="$delfiles $output_objdir/$output_la-${i}.$objext"
+         done
+
+         $echo "creating a temporary reloadable object file: $output"
+
+         # Loop through the commands generated above and execute them.
+         save_ifs="$IFS"; IFS='~'
+         for cmd in $concat_cmds; do
+           IFS="$save_ifs"
+           $show "$cmd"
+           $run eval "$cmd" || exit $?
+         done
+         IFS="$save_ifs"
+
+         libobjs=$output
+         # Restore the value of output.
+         output=$save_output
+
+         if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
+           eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+         fi
+         # Expand the library linking commands again to reset the
+         # value of $libobjs for piecewise linking.
+
+         # Do each of the archive commands.
+         if test "$module" = yes && test -n "$module_cmds" ; then
+           if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+             cmds=$module_expsym_cmds
+           else
+             cmds=$module_cmds
+           fi
+         else
+         if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+           cmds=$archive_expsym_cmds
+         else
+           cmds=$archive_cmds
+           fi
+         fi
+
+         # Append the command to remove the reloadable object files
+         # to the just-reset $cmds.
+         eval cmds=\"\$cmds~\$rm $delfiles\"
+       fi
+       save_ifs="$IFS"; IFS='~'
+       for cmd in $cmds; do
+         IFS="$save_ifs"
+         eval cmd=\"$cmd\"
+         $show "$cmd"
+         $run eval "$cmd" || {
+           lt_exit=$?
+
+           # Restore the uninstalled library and exit
+           if test "$mode" = relink; then
+             $run eval '(cd $output_objdir && $rm ${realname}T && $mv 
${realname}U $realname)'
+           fi
+
+           exit $lt_exit
+         }
+       done
+       IFS="$save_ifs"
+
+       # Restore the uninstalled library and exit
+       if test "$mode" = relink; then
+         $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname 
${realname}T && $mv "$realname"U $realname)' || exit $?
+
+         if test -n "$convenience"; then
+           if test -z "$whole_archive_flag_spec"; then
+             $show "${rm}r $gentop"
+             $run ${rm}r "$gentop"
+           fi
+         fi
+
+         exit $EXIT_SUCCESS
+       fi
+
+       # Create links to the real library.
+       for linkname in $linknames; do
+         if test "$realname" != "$linkname"; then
+           $show "(cd $output_objdir && $rm $linkname && $LN_S $realname 
$linkname)"
+           $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname 
$linkname)' || exit $?
+         fi
+       done
+
+       # If -module or -export-dynamic was specified, set the dlname.
+       if test "$module" = yes || test "$export_dynamic" = yes; then
+         # On all known operating systems, these are identical.
+         dlname="$soname"
+       fi
+      fi
+      ;;
+
+    obj)
+      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"
+         generated="$generated $gentop"
+
+         func_extract_archives $gentop $convenience
+         reload_conv_objs="$reload_objs $func_extract_archives_result"
+       fi
+      fi
+
+      # Create the old-style object.
+      reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e 
'/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### 
testsuite: skip nested quoting test
+
+      output="$obj"
+      cmds=$reload_cmds
+      save_ifs="$IFS"; IFS='~'
+      for cmd in $cmds; do
+       IFS="$save_ifs"
+       eval cmd=\"$cmd\"
+       $show "$cmd"
+       $run eval "$cmd" || exit $?
+      done
+      IFS="$save_ifs"
+
+      # Exit if we aren't doing a library object file.
+      if test -z "$libobj"; then
+       if test -n "$gentop"; then
+         $show "${rm}r $gentop"
+         $run ${rm}r $gentop
+       fi
+
+       exit $EXIT_SUCCESS
+      fi
+
+      if test "$build_libtool_libs" != yes; then
+       if test -n "$gentop"; then
+         $show "${rm}r $gentop"
+         $run ${rm}r $gentop
+       fi
+
+       # Create an invalid libtool object if no PIC, so that we don't
+       # accidentally link it into a program.
+       # $show "echo timestamp > $libobj"
+       # $run eval "echo timestamp > $libobj" || exit $?
+       exit $EXIT_SUCCESS
+      fi
+
+      if test -n "$pic_flag" || test "$pic_mode" != default; then
+       # Only do commands if we really have different PIC objects.
+       reload_objs="$libobjs $reload_conv_objs"
+       output="$libobj"
+       cmds=$reload_cmds
+       save_ifs="$IFS"; IFS='~'
+       for cmd in $cmds; do
+         IFS="$save_ifs"
+         eval cmd=\"$cmd\"
+         $show "$cmd"
+         $run eval "$cmd" || exit $?
+       done
+       IFS="$save_ifs"
+      fi
+
+      if test -n "$gentop"; then
+       $show "${rm}r $gentop"
+       $run ${rm}r $gentop
+      fi
+
+      exit $EXIT_SUCCESS
+      ;;
+
+    prog)
+      case $host in
+       *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;;
+      esac
+      if test -n "$vinfo"; then
+       $echo "$modename: warning: \`-version-info' is ignored for programs" 
1>&2
+      fi
+
+      if test -n "$release"; then
+       $echo "$modename: warning: \`-release' is ignored for programs" 1>&2
+      fi
+
+      if test "$preload" = yes; then
+       if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown &&
+          test "$dlopen_self_static" = unknown; then
+         $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no 
dlopen support."
+       fi
+      fi
+
+      case $host in
+      *-*-rhapsody* | *-*-darwin1.[012])
+       # On Rhapsody replace the C library is the System framework
+       compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / 
-framework System /'`
+       finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / 
-framework System /'`
+       ;;
+      esac
+
+      case $host in
+      *darwin*)
+        # Don't allow lazy linking, it breaks C++ global constructors
+        if test "$tagname" = CXX ; then
+        compile_command="$compile_command ${wl}-bind_at_load"
+        finalize_command="$finalize_command ${wl}-bind_at_load"
+        fi
+        ;;
+      esac
+
+
+      # move library search paths that coincide with paths to not yet
+      # installed libraries to the beginning of the library search list
+      new_libs=
+      for path in $notinst_path; do
+       case " $new_libs " in
+       *" -L$path/$objdir "*) ;;
+       *)
+         case " $compile_deplibs " in
+         *" -L$path/$objdir "*)
+           new_libs="$new_libs -L$path/$objdir" ;;
+         esac
+         ;;
+       esac
+      done
+      for deplib in $compile_deplibs; do
+       case $deplib in
+       -L*)
+         case " $new_libs " in
+         *" $deplib "*) ;;
+         *) new_libs="$new_libs $deplib" ;;
+         esac
+         ;;
+       *) new_libs="$new_libs $deplib" ;;
+       esac
+      done
+      compile_deplibs="$new_libs"
+
+
+      compile_command="$compile_command $compile_deplibs"
+      finalize_command="$finalize_command $finalize_deplibs"
+
+      if test -n "$rpath$xrpath"; then
+       # If the user specified any rpath flags, then add them.
+       for libdir in $rpath $xrpath; do
+         # This is the magic to use -rpath.
+         case "$finalize_rpath " in
+         *" $libdir "*) ;;
+         *) finalize_rpath="$finalize_rpath $libdir" ;;
+         esac
+       done
+      fi
+
+      # Now hardcode the library paths
+      rpath=
+      hardcode_libdirs=
+      for libdir in $compile_rpath $finalize_rpath; do
+       if test -n "$hardcode_libdir_flag_spec"; then
+         if test -n "$hardcode_libdir_separator"; then
+           if test -z "$hardcode_libdirs"; then
+             hardcode_libdirs="$libdir"
+           else
+             # Just accumulate the unique libdirs.
+             case 
$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+             *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+               ;;
+             *)
+               
hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+               ;;
+             esac
+           fi
+         else
+           eval flag=\"$hardcode_libdir_flag_spec\"
+           rpath="$rpath $flag"
+         fi
+       elif test -n "$runpath_var"; then
+         case "$perm_rpath " in
+         *" $libdir "*) ;;
+         *) perm_rpath="$perm_rpath $libdir" ;;
+         esac
+       fi
+       case $host in
+       *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+         testbindir=`$echo "X$libdir" | $Xsed -e 's*/lib$*/bin*'`
+         case :$dllsearchpath: in
+         *":$libdir:"*) ;;
+         *) dllsearchpath="$dllsearchpath:$libdir";;
+         esac
+         case :$dllsearchpath: in
+         *":$testbindir:"*) ;;
+         *) dllsearchpath="$dllsearchpath:$testbindir";;
+         esac
+         ;;
+       esac
+      done
+      # Substitute the hardcoded libdirs into the rpath.
+      if test -n "$hardcode_libdir_separator" &&
+        test -n "$hardcode_libdirs"; then
+       libdir="$hardcode_libdirs"
+       eval rpath=\" $hardcode_libdir_flag_spec\"
+      fi
+      compile_rpath="$rpath"
+
+      rpath=
+      hardcode_libdirs=
+      for libdir in $finalize_rpath; do
+       if test -n "$hardcode_libdir_flag_spec"; then
+         if test -n "$hardcode_libdir_separator"; then
+           if test -z "$hardcode_libdirs"; then
+             hardcode_libdirs="$libdir"
+           else
+             # Just accumulate the unique libdirs.
+             case 
$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+             *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+               ;;
+             *)
+               
hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+               ;;
+             esac
+           fi
+         else
+           eval flag=\"$hardcode_libdir_flag_spec\"
+           rpath="$rpath $flag"
+         fi
+       elif test -n "$runpath_var"; then
+         case "$finalize_perm_rpath " in
+         *" $libdir "*) ;;
+         *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
+         esac
+       fi
+      done
+      # Substitute the hardcoded libdirs into the rpath.
+      if test -n "$hardcode_libdir_separator" &&
+        test -n "$hardcode_libdirs"; then
+       libdir="$hardcode_libdirs"
+       eval rpath=\" $hardcode_libdir_flag_spec\"
+      fi
+      finalize_rpath="$rpath"
+
+      if test -n "$libobjs" && test "$build_old_libs" = yes; then
+       # Transform all the library objects into standard objects.
+       compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" 
| $NL2SP`
+       finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e 
"$lo2o" | $NL2SP`
+      fi
+
+      dlsyms=
+      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+       if test -n "$NM" && test -n "$global_symbol_pipe"; then
+         dlsyms="${outputname}S.c"
+       else
+         $echo "$modename: not configured to extract global symbols from 
dlpreopened files" 1>&2
+       fi
+      fi
+
+      if test -n "$dlsyms"; then
+       case $dlsyms in
+       "") ;;
+       *.c)
+         # Discover the nlist of each of the dlfiles.
+         nlist="$output_objdir/${outputname}.nm"
+
+         $show "$rm $nlist ${nlist}S ${nlist}T"
+         $run $rm "$nlist" "${nlist}S" "${nlist}T"
+
+         # Parse the name list into a source file.
+         $show "creating $output_objdir/$dlsyms"
+
+         test -z "$run" && $echo > "$output_objdir/$dlsyms" "\
+/* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */
+/* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */
+
+#ifdef __cplusplus
+extern \"C\" {
+#endif
+
+/* Prevent the only kind of declaration conflicts we can make. */
+#define lt_preloaded_symbols some_other_symbol
+
+/* External symbol declarations for the compiler. */\
+"
+
+         if test "$dlself" = yes; then
+           $show "generating symbol list for \`$output'"
+
+           test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist"
+
+           # Add our own program objects to the symbol list.
+           progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | 
$NL2SP`
+           for arg in $progfiles; do
+             $show "extracting global C symbols from \`$arg'"
+             $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
+           done
+
+           if test -n "$exclude_expsyms"; then
+             $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
+             $run eval '$mv "$nlist"T "$nlist"'
+           fi
+
+           if test -n "$export_symbols_regex"; then
+             $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
+             $run eval '$mv "$nlist"T "$nlist"'
+           fi
+
+           # Prepare the list of exported symbols
+           if test -z "$export_symbols"; then
+             export_symbols="$output_objdir/$outputname.exp"
+             $run $rm $export_symbols
+             $run eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* 
\(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
+              case $host in
+              *cygwin* | *mingw* )
+               $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+               $run eval 'cat "$export_symbols" >> 
"$output_objdir/$outputname.def"'
+                ;;
+              esac
+           else
+             $run eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 
's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
+             $run eval 'grep -f "$output_objdir/$outputname.exp" < "$nlist" > 
"$nlist"T'
+             $run eval 'mv "$nlist"T "$nlist"'
+              case $host in
+              *cygwin* | *mingw* )
+               $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+               $run eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
+                ;;
+              esac
+           fi
+         fi
+
+         for arg in $dlprefiles; do
+           $show "extracting global C symbols from \`$arg'"
+           name=`$echo "$arg" | ${SED} -e 's%^.*/%%'`
+           $run eval '$echo ": $name " >> "$nlist"'
+           $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
+         done
+
+         if test -z "$run"; then
+           # Make sure we have at least an empty file.
+           test -f "$nlist" || : > "$nlist"
+
+           if test -n "$exclude_expsyms"; then
+             $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
+             $mv "$nlist"T "$nlist"
+           fi
+
+           # Try sorting and uniquifying the output.
+           if grep -v "^: " < "$nlist" |
+               if sort -k 3 </dev/null >/dev/null 2>&1; then
+                 sort -k 3
+               else
+                 sort +2
+               fi |
+               uniq > "$nlist"S; then
+             :
+           else
+             grep -v "^: " < "$nlist" > "$nlist"S
+           fi
+
+           if test -f "$nlist"S; then
+             eval "$global_symbol_to_cdecl"' < "$nlist"S >> 
"$output_objdir/$dlsyms"'
+           else
+             $echo '/* NONE */' >> "$output_objdir/$dlsyms"
+           fi
+
+           $echo >> "$output_objdir/$dlsyms" "\
+
+#undef lt_preloaded_symbols
+
+#if defined (__STDC__) && __STDC__
+# define lt_ptr void *
+#else
+# define lt_ptr char *
+# define const
+#endif
+
+/* The mapping between symbol names and symbols. */
+"
+
+           case $host in
+           *cygwin* | *mingw* )
+         $echo >> "$output_objdir/$dlsyms" "\
+/* DATA imports from DLLs on WIN32 can't be const, because
+   runtime relocations are performed -- see ld's documentation
+   on pseudo-relocs */
+struct {
+"
+             ;;
+           * )
+         $echo >> "$output_objdir/$dlsyms" "\
+const struct {
+"
+             ;;
+           esac
+
+
+         $echo >> "$output_objdir/$dlsyms" "\
+  const char *name;
+  lt_ptr address;
+}
+lt_preloaded_symbols[] =
+{\
+"
+
+           eval "$global_symbol_to_c_name_address" < "$nlist" >> 
"$output_objdir/$dlsyms"
+
+           $echo >> "$output_objdir/$dlsyms" "\
+  {0, (lt_ptr) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif\
+"
+         fi
+
+         pic_flag_for_symtable=
+         case $host in
+         # compiling the symbol table file with pic_flag works around
+         # a FreeBSD bug that causes programs to crash when -lm is
+         # linked before any other PIC object.  But we must not use
+         # pic_flag when linking with -static.  The problem exists in
+         # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
+         *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
+           case "$compile_command " in
+           *" -static "*) ;;
+           *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";;
+           esac;;
+         *-*-hpux*)
+           case "$compile_command " in
+           *" -static "*) ;;
+           *) pic_flag_for_symtable=" $pic_flag";;
+           esac
+         esac
+
+         # Now compile the dynamic symbol file.
+         $show "(cd $output_objdir && $LTCC  $LTCFLAGS 
-c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")"
+         $run eval '(cd $output_objdir && $LTCC  $LTCFLAGS 
-c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $?
+
+         # Clean up the generated files.
+         $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T"
+         $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T"
+
+         # Transform the symbol file into the correct name.
+          case $host in
+          *cygwin* | *mingw* )
+            if test -f "$output_objdir/${outputname}.def" ; then
+              compile_command=`$echo "X$compile_command" | $Xsed -e 
"address@hidden@%$output_objdir/${outputname}.def 
$output_objdir/${outputname}S.${objext}%"`
+              finalize_command=`$echo "X$finalize_command" | $Xsed -e 
"address@hidden@%$output_objdir/${outputname}.def 
$output_objdir/${outputname}S.${objext}%"`
+            else
+              compile_command=`$echo "X$compile_command" | $Xsed -e 
"address@hidden@%$output_objdir/${outputname}S.${objext}%"`
+              finalize_command=`$echo "X$finalize_command" | $Xsed -e 
"address@hidden@%$output_objdir/${outputname}S.${objext}%"`
+             fi
+            ;;
+          * )
+            compile_command=`$echo "X$compile_command" | $Xsed -e 
"address@hidden@%$output_objdir/${outputname}S.${objext}%"`
+            finalize_command=`$echo "X$finalize_command" | $Xsed -e 
"address@hidden@%$output_objdir/${outputname}S.${objext}%"`
+            ;;
+          esac
+         ;;
+       *)
+         $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2
+         exit $EXIT_FAILURE
+         ;;
+       esac
+      else
+       # We keep going just in case the user didn't refer to
+       # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
+       # really was required.
+
+       # Nullify the symbol file.
+       compile_command=`$echo "X$compile_command" | $Xsed -e "s% 
@address@hidden"`
+       finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% 
@address@hidden"`
+      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 
'address@hidden@%'"$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"
+       exit_status=$?
+
+       # Delete the generated files.
+       if test -n "$dlsyms"; then
+         $show "$rm $output_objdir/${outputname}S.${objext}"
+         $run $rm "$output_objdir/${outputname}S.${objext}"
+       fi
+
+       exit $exit_status
+      fi
+
+      if test -n "$shlibpath_var"; then
+       # We should set the shlibpath_var
+       rpath=
+       for dir in $temp_rpath; do
+         case $dir in
+         [\\/]* | [A-Za-z]:[\\/]*)
+           # Absolute path.
+           rpath="$rpath$dir:"
+           ;;
+         *)
+           # Relative path: add a thisdir entry.
+           rpath="$rpath\$thisdir/$dir:"
+           ;;
+         esac
+       done
+       temp_rpath="$rpath"
+      fi
+
+      if test -n "$compile_shlibpath$finalize_shlibpath"; then
+       
compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\"
 $compile_command"
+      fi
+      if test -n "$finalize_shlibpath"; then
+       
finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" 
$finalize_command"
+      fi
+
+      compile_var=
+      finalize_var=
+      if test -n "$runpath_var"; then
+       if test -n "$perm_rpath"; then
+         # We should set the runpath_var.
+         rpath=
+         for dir in $perm_rpath; do
+           rpath="$rpath$dir:"
+         done
+         compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
+       fi
+       if test -n "$finalize_perm_rpath"; then
+         # We should set the runpath_var.
+         rpath=
+         for dir in $finalize_perm_rpath; do
+           rpath="$rpath$dir:"
+         done
+         finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
+       fi
+      fi
+
+      if test "$no_install" = yes; then
+       # We don't need to create a wrapper script.
+       link_command="$compile_var$compile_command$compile_rpath"
+       # Replace the output file specification.
+       link_command=`$echo "X$link_command" | $Xsed -e 
'address@hidden@%'"$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 'address@hidden@%\$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 
'address@hidden@%'"$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* )
+            output_name=`basename $output`
+            output_path=`dirname $output`
+            cwrappersource="$output_path/$objdir/lt-$output_name.c"
+            cwrapper="$output_path/$output_name.exe"
+            $rm $cwrappersource $cwrapper
+            trap "$rm $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
+
+           cat > $cwrappersource <<EOF
+
+/* $cwrappersource - temporary wrapper executable 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 executable should never be moved out of the build directory.
+   If it is, it will not operate correctly.
+
+   Currently, it simply execs the wrapper *script* "/bin/sh $output",
+   but could eventually absorb all of the scripts functionality and
+   exec $objdir/$outputname directly.
+*/
+EOF
+           cat >> $cwrappersource<<"EOF"
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <malloc.h>
+#include <stdarg.h>
+#include <assert.h>
+#include <string.h>
+#include <ctype.h>
+#include <sys/stat.h>
+
+#if defined(PATH_MAX)
+# define LT_PATHMAX PATH_MAX
+#elif defined(MAXPATHLEN)
+# define LT_PATHMAX MAXPATHLEN
+#else
+# define LT_PATHMAX 1024
+#endif
+
+#ifndef DIR_SEPARATOR
+# define DIR_SEPARATOR '/'
+# define PATH_SEPARATOR ':'
+#endif
+
+#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
+  defined (__OS2__)
+# define HAVE_DOS_BASED_FILE_SYSTEM
+# ifndef DIR_SEPARATOR_2
+#  define DIR_SEPARATOR_2 '\\'
+# endif
+# ifndef PATH_SEPARATOR_2
+#  define PATH_SEPARATOR_2 ';'
+# endif
+#endif
+
+#ifndef DIR_SEPARATOR_2
+# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
+#else /* DIR_SEPARATOR_2 */
+# define IS_DIR_SEPARATOR(ch) \
+        (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
+#endif /* DIR_SEPARATOR_2 */
+
+#ifndef PATH_SEPARATOR_2
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
+#else /* PATH_SEPARATOR_2 */
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
+#endif /* PATH_SEPARATOR_2 */
+
+#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
+#define XFREE(stale) do { \
+  if (stale) { free ((void *) stale); stale = 0; } \
+} while (0)
+
+/* -DDEBUG is fairly common in CFLAGS.  */
+#undef DEBUG
+#if defined DEBUGWRAPPER
+# define DEBUG(format, ...) fprintf(stderr, format, __VA_ARGS__)
+#else
+# define DEBUG(format, ...)
+#endif
+
+const char *program_name = NULL;
+
+void * xmalloc (size_t num);
+char * xstrdup (const char *string);
+const char * base_name (const char *name);
+char * find_executable(const char *wrapper);
+int    check_executable(const char *path);
+char * strendzap(char *str, const char *pat);
+void lt_fatal (const char *message, ...);
+
+int
+main (int argc, char *argv[])
+{
+  char **newargz;
+  int i;
+
+  program_name = (char *) xstrdup (base_name (argv[0]));
+  DEBUG("(main) argv[0]      : %s\n",argv[0]);
+  DEBUG("(main) program_name : %s\n",program_name);
+  newargz = XMALLOC(char *, argc+2);
+EOF
+
+            cat >> $cwrappersource <<EOF
+  newargz[0] = (char *) xstrdup("$SHELL");
+EOF
+
+            cat >> $cwrappersource <<"EOF"
+  newargz[1] = find_executable(argv[0]);
+  if (newargz[1] == NULL)
+    lt_fatal("Couldn't find %s", argv[0]);
+  DEBUG("(main) found exe at : %s\n",newargz[1]);
+  /* we know the script has the same name, without the .exe */
+  /* so make sure newargz[1] doesn't end in .exe */
+  strendzap(newargz[1],".exe");
+  for (i = 1; i < argc; i++)
+    newargz[i+1] = xstrdup(argv[i]);
+  newargz[argc+1] = NULL;
+
+  for (i=0; i<argc+1; i++)
+  {
+    DEBUG("(main) newargz[%d]   : %s\n",i,newargz[i]);
+    ;
+  }
+
+EOF
+
+            case $host_os in
+              mingw*)
+                cat >> $cwrappersource <<EOF
+  execv("$SHELL",(char const **)newargz);
+EOF
+              ;;
+              *)
+                cat >> $cwrappersource <<EOF
+  execv("$SHELL",newargz);
+EOF
+              ;;
+            esac
+
+            cat >> $cwrappersource <<"EOF"
+  return 127;
+}
+
+void *
+xmalloc (size_t num)
+{
+  void * p = (void *) malloc (num);
+  if (!p)
+    lt_fatal ("Memory exhausted");
+
+  return p;
+}
+
+char *
+xstrdup (const char *string)
+{
+  return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : 
NULL
+;
+}
+
+const char *
+base_name (const char *name)
+{
+  const char *base;
+
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+  /* Skip over the disk name in MSDOS pathnames. */
+  if (isalpha ((unsigned char)name[0]) && name[1] == ':')
+    name += 2;
+#endif
+
+  for (base = name; *name; name++)
+    if (IS_DIR_SEPARATOR (*name))
+      base = name + 1;
+  return base;
+}
+
+int
+check_executable(const char * path)
+{
+  struct stat st;
+
+  DEBUG("(check_executable)  : %s\n", path ? (*path ? path : "EMPTY!") : 
"NULL!");
+  if ((!path) || (!*path))
+    return 0;
+
+  if ((stat (path, &st) >= 0) &&
+      (
+        /* MinGW & native WIN32 do not support S_IXOTH or S_IXGRP */
+#if defined (S_IXOTH)
+       ((st.st_mode & S_IXOTH) == S_IXOTH) ||
+#endif
+#if defined (S_IXGRP)
+       ((st.st_mode & S_IXGRP) == S_IXGRP) ||
+#endif
+       ((st.st_mode & S_IXUSR) == S_IXUSR))
+      )
+    return 1;
+  else
+    return 0;
+}
+
+/* Searches for the full path of the wrapper.  Returns
+   newly allocated full path name if found, NULL otherwise */
+char *
+find_executable (const char* wrapper)
+{
+  int has_slash = 0;
+  const char* p;
+  const char* p_next;
+  /* static buffer for getcwd */
+  char tmp[LT_PATHMAX + 1];
+  int tmp_len;
+  char* concat_name;
+
+  DEBUG("(find_executable)  : %s\n", wrapper ? (*wrapper ? wrapper : "EMPTY!") 
: "NULL!");
+
+  if ((wrapper == NULL) || (*wrapper == '\0'))
+    return NULL;
+
+  /* Absolute path? */
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+  if (isalpha ((unsigned char)wrapper[0]) && wrapper[1] == ':')
+  {
+    concat_name = xstrdup (wrapper);
+    if (check_executable(concat_name))
+      return concat_name;
+    XFREE(concat_name);
+  }
+  else
+  {
+#endif
+    if (IS_DIR_SEPARATOR (wrapper[0]))
+    {
+      concat_name = xstrdup (wrapper);
+      if (check_executable(concat_name))
+        return concat_name;
+      XFREE(concat_name);
+    }
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+  }
+#endif
+
+  for (p = wrapper; *p; p++)
+    if (*p == '/')
+    {
+      has_slash = 1;
+      break;
+    }
+  if (!has_slash)
+  {
+    /* no slashes; search PATH */
+    const char* path = getenv ("PATH");
+    if (path != NULL)
+    {
+      for (p = path; *p; p = p_next)
+      {
+        const char* q;
+        size_t p_len;
+        for (q = p; *q; q++)
+          if (IS_PATH_SEPARATOR(*q))
+            break;
+        p_len = q - p;
+        p_next = (*q == '\0' ? q : q + 1);
+        if (p_len == 0)
+        {
+          /* empty path: current directory */
+          if (getcwd (tmp, LT_PATHMAX) == NULL)
+            lt_fatal ("getcwd failed");
+          tmp_len = strlen(tmp);
+          concat_name = XMALLOC(char, tmp_len + 1 + strlen(wrapper) + 1);
+          memcpy (concat_name, tmp, tmp_len);
+          concat_name[tmp_len] = '/';
+          strcpy (concat_name + tmp_len + 1, wrapper);
+        }
+        else
+        {
+          concat_name = XMALLOC(char, p_len + 1 + strlen(wrapper) + 1);
+          memcpy (concat_name, p, p_len);
+          concat_name[p_len] = '/';
+          strcpy (concat_name + p_len + 1, wrapper);
+        }
+        if (check_executable(concat_name))
+          return concat_name;
+        XFREE(concat_name);
+      }
+    }
+    /* not found in PATH; assume curdir */
+  }
+  /* Relative path | not found in path: prepend cwd */
+  if (getcwd (tmp, LT_PATHMAX) == NULL)
+    lt_fatal ("getcwd failed");
+  tmp_len = strlen(tmp);
+  concat_name = XMALLOC(char, tmp_len + 1 + strlen(wrapper) + 1);
+  memcpy (concat_name, tmp, tmp_len);
+  concat_name[tmp_len] = '/';
+  strcpy (concat_name + tmp_len + 1, wrapper);
+
+  if (check_executable(concat_name))
+    return concat_name;
+  XFREE(concat_name);
+  return NULL;
+}
+
+char *
+strendzap(char *str, const char *pat)
+{
+  size_t len, patlen;
+
+  assert(str != NULL);
+  assert(pat != NULL);
+
+  len = strlen(str);
+  patlen = strlen(pat);
+
+  if (patlen <= len)
+  {
+    str += len - patlen;
+    if (strcmp(str, pat) == 0)
+      *str = '\0';
+  }
+  return str;
+}
+
+static void
+lt_error_core (int exit_status, const char * mode,
+          const char * message, va_list ap)
+{
+  fprintf (stderr, "%s: %s: ", program_name, mode);
+  vfprintf (stderr, message, ap);
+  fprintf (stderr, ".\n");
+
+  if (exit_status >= 0)
+    exit (exit_status);
+}
+
+void
+lt_fatal (const char *message, ...)
+{
+  va_list ap;
+  va_start (ap, message);
+  lt_error_core (EXIT_FAILURE, "FATAL", message, ap);
+  va_end (ap);
+}
+EOF
+          # we should really use a build-platform specific compiler
+          # here, but OTOH, the wrappers (shell script and this C one)
+          # are only useful if you want to execute the "real" binary.
+          # Since the "real" binary is built for $host, then this
+          # wrapper might as well be built for $host, too.
+          $run $LTCC $LTCFLAGS -s -o $cwrapper $cwrappersource
+          ;;
+        esac
+        $rm $output
+        trap "$rm $output; exit $EXIT_FAILURE" 1 2 15
+
+       $echo > $output "\
+#! $SHELL
+
+# $output - temporary wrapper script for $objdir/$outputname
+# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
+#
+# The $output program cannot be directly executed until all the libtool
+# libraries that it depends on are installed.
+#
+# This wrapper script should never be moved out of the build directory.
+# If it is, it will not operate correctly.
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='${SED} -e 1s/^X//'
+sed_quote_subst='$sed_quote_subst'
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+relink_command=\"$relink_command\"
+
+# This environment variable determines our operation mode.
+if test \"\$libtool_install_magic\" = \"$magic\"; then
+  # install mode needs the following variable:
+  notinst_deplibs='$notinst_deplibs'
+else
+  # When we are sourced in execute mode, \$file and \$echo are already set.
+  if test \"\$libtool_execute_magic\" != \"$magic\"; then
+    echo=\"$qecho\"
+    file=\"\$0\"
+    # Make sure echo works.
+    if test \"X\$1\" = X--no-reexec; then
+      # Discard the --no-reexec flag, and continue.
+      shift
+    elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then
+      # Yippee, \$echo works!
+      :
+    else
+      # Restart under the correct shell, and then maybe \$echo will work.
+      exec $SHELL \"\$0\" --no-reexec \${1+\"address@hidden"}
+    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+\"address@hidden"}
+"
+         ;;
+
+       *)
+         $echo >> $output "\
+      exec \"\$progdir/\$program\" \${1+\"address@hidden"}
+"
+         ;;
+       esac
+       $echo >> $output "\
+      \$echo \"\$0: cannot exec \$program \${1+\"address@hidden"}\"
+      exit $EXIT_FAILURE
+    fi
+  else
+    # The program doesn't exist.
+    \$echo \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
+    \$echo \"This script is just a wrapper for \$program.\" 1>&2
+    $echo \"See the $PACKAGE documentation for more information.\" 1>&2
+    exit $EXIT_FAILURE
+  fi
+fi\
+"
+       chmod +x $output
+      fi
+      exit $EXIT_SUCCESS
+      ;;
+    esac
+
+    # See if we need to build an old-fashioned archive.
+    for oldlib in $oldlibs; do
+
+      if test "$build_libtool_libs" = convenience; then
+       oldobjs="$libobjs_save"
+       addlibs="$convenience"
+       build_libtool_libs=no
+      else
+       if test "$build_libtool_libs" = module; then
+         oldobjs="$libobjs_save"
+         build_libtool_libs=no
+       else
+         oldobjs="$old_deplibs $non_pic_objects"
+       fi
+       addlibs="$old_convenience"
+      fi
+
+      if test -n "$addlibs"; then
+       gentop="$output_objdir/${outputname}x"
+       generated="$generated $gentop"
+
+       func_extract_archives $gentop $addlibs
+       oldobjs="$oldobjs $func_extract_archives_result"
+      fi
+
+      # Do each command in the archive commands.
+      if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = 
yes; then
+       cmds=$old_archive_from_new_cmds
+      else
+       # POSIX demands no paths to be encoded in archives.  We have
+       # to avoid creating archives with duplicate basenames if we
+       # might have to extract them afterwards, e.g., when creating a
+       # static archive out of a convenience library, or when linking
+       # the entirety of a libtool archive into another (currently
+       # not supported by libtool).
+       if (for obj in $oldobjs
+           do
+             $echo "X$obj" | $Xsed -e 's%^.*/%%'
+           done | sort | sort -uc >/dev/null 2>&1); then
+         :
+       else
+         $echo "copying selected object files to avoid basename conflicts..."
+
+         if test -z "$gentop"; then
+           gentop="$output_objdir/${outputname}x"
+           generated="$generated $gentop"
+
+           $show "${rm}r $gentop"
+           $run ${rm}r "$gentop"
+           $show "$mkdir $gentop"
+           $run $mkdir "$gentop"
+           exit_status=$?
+           if test "$exit_status" -ne 0 && test ! -d "$gentop"; then
+             exit $exit_status
+           fi
+         fi
+
+         save_oldobjs=$oldobjs
+         oldobjs=
+         counter=1
+         for obj in $save_oldobjs
+         do
+           objbase=`$echo "X$obj" | $Xsed -e 's%^.*/%%'`
+           case " $oldobjs " in
+           " ") oldobjs=$obj ;;
+           *[\ /]"$objbase "*)
+             while :; do
+               # Make sure we don't pick an alternate name that also
+               # overlaps.
+               newobj=lt$counter-$objbase
+               counter=`expr $counter + 1`
+               case " $oldobjs " in
+               *[\ /]"$newobj "*) ;;
+               *) if test ! -f "$gentop/$newobj"; then break; fi ;;
+               esac
+             done
+             $show "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
+             $run ln "$obj" "$gentop/$newobj" ||
+             $run cp "$obj" "$gentop/$newobj"
+             oldobjs="$oldobjs $gentop/$newobj"
+             ;;
+           *) oldobjs="$oldobjs $obj" ;;
+           esac
+         done
+       fi
+
+       eval cmds=\"$old_archive_cmds\"
+
+       if len=`expr "X$cmds" : ".*"` &&
+            test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+         cmds=$old_archive_cmds
+       else
+         # the command line is too long to link in one step, link in parts
+         $echo "using piecewise archive linking..."
+         save_RANLIB=$RANLIB
+         RANLIB=:
+         objlist=
+         concat_cmds=
+         save_oldobjs=$oldobjs
+
+         # Is there a better way of finding the last object in the list?
+         for obj in $save_oldobjs
+         do
+           last_oldobj=$obj
+         done
+         for obj in $save_oldobjs
+         do
+           oldobjs="$objlist $obj"
+           objlist="$objlist $obj"
+           eval test_cmds=\"$old_archive_cmds\"
+           if len=`expr "X$test_cmds" : ".*" 2>/dev/null` &&
+              test "$len" -le "$max_cmd_len"; then
+             :
+           else
+             # the above command should be used before it gets too long
+             oldobjs=$objlist
+             if test "$obj" = "$last_oldobj" ; then
+               RANLIB=$save_RANLIB
+             fi
+             test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+             eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
+             objlist=
+           fi
+         done
+         RANLIB=$save_RANLIB
+         oldobjs=$objlist
+         if test "X$oldobjs" = "X" ; then
+           eval cmds=\"\$concat_cmds\"
+         else
+           eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
+         fi
+       fi
+      fi
+      save_ifs="$IFS"; IFS='~'
+      for cmd in $cmds; do
+        eval cmd=\"$cmd\"
+       IFS="$save_ifs"
+       $show "$cmd"
+       $run eval "$cmd" || exit $?
+      done
+      IFS="$save_ifs"
+    done
+
+    if test -n "$generated"; then
+      $show "${rm}r$generated"
+      $run ${rm}r$generated
+    fi
+
+    # Now create the libtool archive.
+    case $output in
+    *.la)
+      old_library=
+      test "$build_old_libs" = yes && old_library="$libname.$libext"
+      $show "creating $output"
+
+      # Preserve any variables that may affect compiler behavior
+      for var in $variables_saved_for_relink; do
+       if eval test -z \"\${$var+set}\"; then
+         relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; 
export $var; }; }; $relink_command"
+       elif eval var_value=\$$var; test -z "$var_value"; then
+         relink_command="$var=; export $var; $relink_command"
+       else
+         var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
+         relink_command="$var=\"$var_value\"; export $var; $relink_command"
+       fi
+      done
+      # Quote the link command for shipping.
+      relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink 
$libtool_args @inst_prefix_dir@)"
+      relink_command=`$echo "X$relink_command" | $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" | grep shtool > /dev/null; then
+      # Aesthetically quote it.
+      arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"`
+      case $arg in
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \    ]*|*]*|"")
+       arg="\"$arg\""
+       ;;
+      esac
+      install_prog="$arg "
+      arg="$1"
+      shift
+    else
+      install_prog=
+      arg=$nonopt
+    fi
+
+    # The real first argument should be the name of the installation program.
+    # Aesthetically quote it.
+    arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+    case $arg in
+    *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \      ]*|*]*|"")
+      arg="\"$arg\""
+      ;;
+    esac
+    install_prog="$install_prog$arg"
+
+    # We need to accept at least all the BSD install flags.
+    dest=
+    files=
+    opts=
+    prev=
+    install_type=
+    isdir=no
+    stripme=
+    for arg
+    do
+      if test -n "$dest"; then
+       files="$files $dest"
+       dest=$arg
+       continue
+      fi
+
+      case $arg in
+      -d) isdir=yes ;;
+      -f) 
+       case " $install_prog " in
+       *[\\\ /]cp\ *) ;;
+       *) prev=$arg ;;
+       esac
+       ;;
+      -g | -m | -o) prev=$arg ;;
+      -s)
+       stripme=" -s"
+       continue
+       ;;
+      -*)
+       ;;
+      *)
+       # If the previous option needed an argument, then skip it.
+       if test -n "$prev"; then
+         prev=
+       else
+         dest=$arg
+         continue
+       fi
+       ;;
+      esac
+
+      # Aesthetically quote the argument.
+      arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+      case $arg in
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \    ]*|*]*|"")
+       arg="\"$arg\""
+       ;;
+      esac
+      install_prog="$install_prog $arg"
+    done
+
+    if test -z "$install_prog"; then
+      $echo "$modename: you must specify an install program" 1>&2
+      $echo "$help" 1>&2
+      exit $EXIT_FAILURE
+    fi
+
+    if test -n "$prev"; then
+      $echo "$modename: the \`$prev' option requires an argument" 1>&2
+      $echo "$help" 1>&2
+      exit $EXIT_FAILURE
+    fi
+
+    if test -z "$files"; then
+      if test -z "$dest"; then
+       $echo "$modename: no file or destination specified" 1>&2
+      else
+       $echo "$modename: you must specify a destination" 1>&2
+      fi
+      $echo "$help" 1>&2
+      exit $EXIT_FAILURE
+    fi
+
+    # Strip any trailing slash from the destination.
+    dest=`$echo "X$dest" | $Xsed -e 's%/$%%'`
+
+    # Check to see that the destination is a directory.
+    test -d "$dest" && isdir=yes
+    if test "$isdir" = yes; then
+      destdir="$dest"
+      destname=
+    else
+      destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'`
+      test "X$destdir" = "X$dest" && destdir=.
+      destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'`
+
+      # Not a directory, so check to see that there is only one file specified.
+      set dummy $files
+      if test "$#" -gt 2; then
+       $echo "$modename: \`$dest' is not a directory" 1>&2
+       $echo "$help" 1>&2
+       exit $EXIT_FAILURE
+      fi
+    fi
+    case $destdir in
+    [\\/]* | [A-Za-z]:[\\/]*) ;;
+    *)
+      for file in $files; do
+       case $file in
+       *.lo) ;;
+       *)
+         $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2
+         $echo "$help" 1>&2
+         exit $EXIT_FAILURE
+         ;;
+       esac
+      done
+      ;;
+    esac
+
+    # This variable tells wrapper scripts just to set variables rather
+    # than running their programs.
+    libtool_install_magic="$magic"
+
+    staticlibs=
+    future_libdirs=
+    current_libdirs=
+    for file in $files; do
+
+      # Do each installation.
+      case $file in
+      *.$libext)
+       # Do the static libraries later.
+       staticlibs="$staticlibs $file"
+       ;;
+
+      *.la)
+       # Check to see that this really is a libtool archive.
+       if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") 
>/dev/null 2>&1; then :
+       else
+         $echo "$modename: \`$file' is not a valid libtool archive" 1>&2
+         $echo "$help" 1>&2
+         exit $EXIT_FAILURE
+       fi
+
+       library_names=
+       old_library=
+       relink_command=
+       # If there is no directory component, then add one.
+       case $file in
+       */* | *\\*) . $file ;;
+       *) . ./$file ;;
+       esac
+
+       # Add the libdir to current_libdirs if it is the destination.
+       if test "X$destdir" = "X$libdir"; then
+         case "$current_libdirs " in
+         *" $libdir "*) ;;
+         *) current_libdirs="$current_libdirs $libdir" ;;
+         esac
+       else
+         # Note the libdir as a future libdir.
+         case "$future_libdirs " in
+         *" $libdir "*) ;;
+         *) future_libdirs="$future_libdirs $libdir" ;;
+         esac
+       fi
+
+       dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/
+       test "X$dir" = "X$file/" && dir=
+       dir="$dir$objdir"
+
+       if test -n "$relink_command"; then
+         # Determine the prefix the user has applied to our future dir.
+         inst_prefix_dir=`$echo "$destdir" | $SED "s%$libdir\$%%"`
+
+         # Don't allow the user to place us outside of our expected
+         # location b/c this prevents finding dependent libraries that
+         # are installed to the same prefix.
+         # At present, this check doesn't affect windows .dll's that
+         # are installed into $libdir/../bin (currently, that works fine)
+         # but it's something to keep an eye on.
+         if test "$inst_prefix_dir" = "$destdir"; then
+           $echo "$modename: error: cannot install \`$file' to a directory not 
ending in $libdir" 1>&2
+           exit $EXIT_FAILURE
+         fi
+
+         if test -n "$inst_prefix_dir"; then
+           # Stick the inst_prefix_dir data into the link command.
+           relink_command=`$echo "$relink_command" | $SED 
"address@hidden@%-inst-prefix-dir $inst_prefix_dir%"`
+         else
+           relink_command=`$echo "$relink_command" | $SED "address@hidden@%%"`
+         fi
+
+         $echo "$modename: warning: relinking \`$file'" 1>&2
+         $show "$relink_command"
+         if $run eval "$relink_command"; then :
+         else
+           $echo "$modename: error: relink \`$file' with the above command 
before installing it" 1>&2
+           exit $EXIT_FAILURE
+         fi
+       fi
+
+       # See the names of the shared library.
+       set dummy $library_names
+       if test -n "$2"; then
+         realname="$2"
+         shift
+         shift
+
+         srcname="$realname"
+         test -n "$relink_command" && srcname="$realname"T
+
+         # Install the shared library and build the symlinks.
+         $show "$install_prog $dir/$srcname $destdir/$realname"
+         $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $?
+         if test -n "$stripme" && test -n "$striplib"; then
+           $show "$striplib $destdir/$realname"
+           $run eval "$striplib $destdir/$realname" || exit $?
+         fi
+
+         if test "$#" -gt 0; then
+           # Delete the old symlinks, and create new ones.
+           # Try `ln -sf' first, because the `ln' binary might depend on
+           # the symlink we replace!  Solaris /bin/ln does not understand -f,
+           # so we also need to try rm && ln -s.
+           for linkname
+           do
+             if test "$linkname" != "$realname"; then
+                $show "(cd $destdir && { $LN_S -f $realname $linkname || { $rm 
$linkname && $LN_S $realname $linkname; }; })"
+                $run eval "(cd $destdir && { $LN_S -f $realname $linkname || { 
$rm $linkname && $LN_S $realname $linkname; }; })"
+             fi
+           done
+         fi
+
+         # Do each command in the postinstall commands.
+         lib="$destdir/$realname"
+         cmds=$postinstall_cmds
+         save_ifs="$IFS"; IFS='~'
+         for cmd in $cmds; do
+           IFS="$save_ifs"
+           eval cmd=\"$cmd\"
+           $show "$cmd"
+           $run eval "$cmd" || {
+             lt_exit=$?
+
+             # Restore the uninstalled library and exit
+             if test "$mode" = relink; then
+               $run eval '(cd $output_objdir && $rm ${realname}T && $mv 
${realname}U $realname)'
+             fi
+
+             exit $lt_exit
+           }
+         done
+         IFS="$save_ifs"
+       fi
+
+       # Install the pseudo-library for information purposes.
+       name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+       instname="$dir/$name"i
+       $show "$install_prog $instname $destdir/$name"
+       $run eval "$install_prog $instname $destdir/$name" || exit $?
+
+       # Maybe install the static library, too.
+       test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
+       ;;
+
+      *.lo)
+       # Install (i.e. copy) a libtool object.
+
+       # Figure out destination file name, if it wasn't already specified.
+       if test -n "$destname"; then
+         destfile="$destdir/$destname"
+       else
+         destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+         destfile="$destdir/$destfile"
+       fi
+
+       # Deduce the name of the destination old-style object file.
+       case $destfile in
+       *.lo)
+         staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"`
+         ;;
+       *.$objext)
+         staticdest="$destfile"
+         destfile=
+         ;;
+       *)
+         $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2
+         $echo "$help" 1>&2
+         exit $EXIT_FAILURE
+         ;;
+       esac
+
+       # Install the libtool object if requested.
+       if test -n "$destfile"; then
+         $show "$install_prog $file $destfile"
+         $run eval "$install_prog $file $destfile" || exit $?
+       fi
+
+       # Install the old object if enabled.
+       if test "$build_old_libs" = yes; then
+         # Deduce the name of the old-style object file.
+         staticobj=`$echo "X$file" | $Xsed -e "$lo2o"`
+
+         $show "$install_prog $staticobj $staticdest"
+         $run eval "$install_prog \$staticobj \$staticdest" || exit $?
+       fi
+       exit $EXIT_SUCCESS
+       ;;
+
+      *)
+       # Figure out destination file name, if it wasn't already specified.
+       if test -n "$destname"; then
+         destfile="$destdir/$destname"
+       else
+         destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+         destfile="$destdir/$destfile"
+       fi
+
+       # If the file is missing, and there is a .exe on the end, strip it
+       # because it is most likely a libtool script we actually want to
+       # install
+       stripped_ext=""
+       case $file in
+         *.exe)
+           if test ! -f "$file"; then
+             file=`$echo $file|${SED} 's,.exe$,,'`
+             stripped_ext=".exe"
+           fi
+           ;;
+       esac
+
+       # Do a test to see if this is really a libtool program.
+       case $host in
+       *cygwin*|*mingw*)
+           wrapper=`$echo $file | ${SED} -e 's,.exe$,,'`
+           ;;
+       *)
+           wrapper=$file
+           ;;
+       esac
+       if (${SED} -e '4q' $wrapper | grep "^# Generated by 
.*$PACKAGE")>/dev/null 2>&1; then
+         notinst_deplibs=
+         relink_command=
+
+         # Note that it is not necessary on cygwin/mingw to append a dot to
+         # foo even if both foo and FILE.exe exist: automatic-append-.exe
+         # behavior happens only for exec(3), not for open(2)!  Also, sourcing
+         # `FILE.' does not work on cygwin managed mounts.
+         #
+         # If there is no directory component, then add one.
+         case $wrapper in
+         */* | *\\*) . ${wrapper} ;;
+         *) . ./${wrapper} ;;
+         esac
+
+         # Check the variables that should have been set.
+         if test -z "$notinst_deplibs"; then
+           $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2
+           exit $EXIT_FAILURE
+         fi
+
+         finalize=yes
+         for lib in $notinst_deplibs; do
+           # Check to see that each library is installed.
+           libdir=
+           if test -f "$lib"; then
+             # If there is no directory component, then add one.
+             case $lib in
+             */* | *\\*) . $lib ;;
+             *) . ./$lib ;;
+             esac
+           fi
+           libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### 
testsuite: skip nested quoting test
+           if test -n "$libdir" && test ! -f "$libfile"; then
+             $echo "$modename: warning: \`$lib' has not been installed in 
\`$libdir'" 1>&2
+             finalize=no
+           fi
+         done
+
+         relink_command=
+         # Note that it is not necessary on cygwin/mingw to append a dot to
+         # foo even if both foo and FILE.exe exist: automatic-append-.exe
+         # behavior happens only for exec(3), not for open(2)!  Also, sourcing
+         # `FILE.' does not work on cygwin managed mounts.
+         #
+         # If there is no directory component, then add one.
+         case $wrapper in
+         */* | *\\*) . ${wrapper} ;;
+         *) . ./${wrapper} ;;
+         esac
+
+         outputname=
+         if test "$fast_install" = no && test -n "$relink_command"; then
+           if test "$finalize" = yes && test -z "$run"; then
+             tmpdir=`func_mktempdir`
+             file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'`
+             outputname="$tmpdir/$file"
+             # Replace the output file specification.
+             relink_command=`$echo "X$relink_command" | $Xsed -e 
'address@hidden@%'"$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 anyway 
+       case $install_prog,$host in
+       */usr/bin/install*,*cygwin*)
+         case $file:$destfile in
+         *.exe:*.exe)
+           # this is ok
+           ;;
+         *.exe:*)
+           destfile=$destfile.exe
+           ;;
+         *:*.exe)
+           destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'`
+           ;;
+         esac
+         ;;
+       esac
+       $show "$install_prog$stripme $file $destfile"
+       $run eval "$install_prog\$stripme \$file \$destfile" || exit $?
+       test -n "$outputname" && ${rm}r "$tmpdir"
+       ;;
+      esac
+    done
+
+    for file in $staticlibs; do
+      name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+
+      # Set up the ranlib parameters.
+      oldlib="$destdir/$name"
+
+      $show "$install_prog $file $oldlib"
+      $run eval "$install_prog \$file \$oldlib" || exit $?
+
+      if test -n "$stripme" && test -n "$old_striplib"; then
+       $show "$old_striplib $oldlib"
+       $run eval "$old_striplib $oldlib" || exit $?
+      fi
+
+      # Do each command in the postinstall commands.
+      cmds=$old_postinstall_cmds
+      save_ifs="$IFS"; IFS='~'
+      for cmd in $cmds; do
+       IFS="$save_ifs"
+       eval cmd=\"$cmd\"
+       $show "$cmd"
+       $run eval "$cmd" || exit $?
+      done
+      IFS="$save_ifs"
+    done
+
+    if test -n "$future_libdirs"; then
+      $echo "$modename: warning: remember to run \`$progname 
--finish$future_libdirs'" 1>&2
+    fi
+
+    if test -n "$current_libdirs"; then
+      # Maybe just do a dry run.
+      test -n "$run" && current_libdirs=" -n$current_libdirs"
+      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
+    else
+      exit $EXIT_SUCCESS
+    fi
+    ;;
+
+  # libtool finish mode
+  finish)
+    modename="$modename: finish"
+    libdirs="$nonopt"
+    admincmds=
+
+    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+      for dir
+      do
+       libdirs="$libdirs $dir"
+      done
+
+      for libdir in $libdirs; do
+       if test -n "$finish_cmds"; then
+         # Do each command in the finish commands.
+         cmds=$finish_cmds
+         save_ifs="$IFS"; IFS='~'
+         for cmd in $cmds; do
+           IFS="$save_ifs"
+           eval cmd=\"$cmd\"
+           $show "$cmd"
+           $run eval "$cmd" || admincmds="$admincmds
+       $cmd"
+         done
+         IFS="$save_ifs"
+       fi
+       if test -n "$finish_eval"; then
+         # Do the single finish_eval.
+         eval cmds=\"$finish_eval\"
+         $run eval "$cmds" || admincmds="$admincmds
+       $cmds"
+       fi
+      done
+    fi
+
+    # Exit here if they wanted silent mode.
+    test "$show" = : && exit $EXIT_SUCCESS
+
+    $echo 
"X----------------------------------------------------------------------" | 
$Xsed
+    $echo "Libraries have been installed in:"
+    for libdir in $libdirs; do
+      $echo "   $libdir"
+    done
+    $echo
+    $echo "If you ever happen to want to link against installed libraries"
+    $echo "in a given directory, LIBDIR, you must either use libtool, and"
+    $echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
+    $echo "flag during linking and do at least one of the following:"
+    if test -n "$shlibpath_var"; then
+      $echo "   - add LIBDIR to the \`$shlibpath_var' environment variable"
+      $echo "     during execution"
+    fi
+    if test -n "$runpath_var"; then
+      $echo "   - add LIBDIR to the \`$runpath_var' environment variable"
+      $echo "     during linking"
+    fi
+    if test -n "$hardcode_libdir_flag_spec"; then
+      libdir=LIBDIR
+      eval flag=\"$hardcode_libdir_flag_spec\"
+
+      $echo "   - use the \`$flag' linker flag"
+    fi
+    if test -n "$admincmds"; then
+      $echo "   - have your system administrator run these commands:$admincmds"
+    fi
+    if test -f /etc/ld.so.conf; then
+      $echo "   - have your system administrator add LIBDIR to 
\`/etc/ld.so.conf'"
+    fi
+    $echo
+    $echo "See any operating system documentation about shared libraries for"
+    $echo "more information, such as the ld(1) and ld.so(8) manual pages."
+    $echo 
"X----------------------------------------------------------------------" | 
$Xsed
+    exit $EXIT_SUCCESS
+    ;;
+
+  # libtool execute mode
+  execute)
+    modename="$modename: execute"
+
+    # The first argument is the command name.
+    cmd="$nonopt"
+    if test -z "$cmd"; then
+      $echo "$modename: you must specify a COMMAND" 1>&2
+      $echo "$help"
+      exit $EXIT_FAILURE
+    fi
+
+    # Handle -dlopen flags immediately.
+    for file in $execute_dlfiles; do
+      if test ! -f "$file"; then
+       $echo "$modename: \`$file' is not a file" 1>&2
+       $echo "$help" 1>&2
+       exit $EXIT_FAILURE
+      fi
+
+      dir=
+      case $file in
+      *.la)
+       # Check to see that this really is a libtool archive.
+       if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") 
>/dev/null 2>&1; then :
+       else
+         $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
+         $echo "$help" 1>&2
+         exit $EXIT_FAILURE
+       fi
+
+       # Read the libtool library.
+       dlname=
+       library_names=
+
+       # If there is no directory component, then add one.
+       case $file in
+       */* | *\\*) . $file ;;
+       *) . ./$file ;;
+       esac
+
+       # Skip this library if it cannot be dlopened.
+       if test -z "$dlname"; then
+         # Warn if it was a shared library.
+         test -n "$library_names" && $echo "$modename: warning: \`$file' was 
not linked with \`-export-dynamic'"
+         continue
+       fi
+
+       dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
+       test "X$dir" = "X$file" && dir=.
+
+       if test -f "$dir/$objdir/$dlname"; then
+         dir="$dir/$objdir"
+       else
+         $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"
+
+         case "$mode" in
+         clean)
+           case "  $library_names " in
+           # "  " in the beginning catches empty $dlname
+           *" $dlname "*) ;;
+           *) rmfiles="$rmfiles $objdir/$dlname" ;;
+           esac
+            test -n "$libdir" && rmfiles="$rmfiles $objdir/$name 
$objdir/${name}i"
+           ;;
+         uninstall)
+           if test -n "$library_names"; then
+             # Do each command in the postuninstall commands.
+             cmds=$postuninstall_cmds
+             save_ifs="$IFS"; IFS='~'
+             for cmd in $cmds; do
+               IFS="$save_ifs"
+               eval cmd=\"$cmd\"
+               $show "$cmd"
+               $run eval "$cmd"
+               if test "$?" -ne 0 && test "$rmforce" != yes; then
+                 exit_status=1
+               fi
+             done
+             IFS="$save_ifs"
+           fi
+
+           if test -n "$old_library"; then
+             # Do each command in the old_postuninstall commands.
+             cmds=$old_postuninstall_cmds
+             save_ifs="$IFS"; IFS='~'
+             for cmd in $cmds; do
+               IFS="$save_ifs"
+               eval cmd=\"$cmd\"
+               $show "$cmd"
+               $run eval "$cmd"
+               if test "$?" -ne 0 && test "$rmforce" != yes; then
+                 exit_status=1
+               fi
+             done
+             IFS="$save_ifs"
+           fi
+           # FIXME: should reinstall the best remaining shared library.
+           ;;
+         esac
+       fi
+       ;;
+
+      *.lo)
+       # Possibly a libtool object, so verify it.
+       if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") 
>/dev/null 2>&1; then
+
+         # Read the .lo file
+         . $dir/$name
+
+         # Add PIC object to the list of files to remove.
+         if test -n "$pic_object" \
+            && test "$pic_object" != none; then
+           rmfiles="$rmfiles $dir/$pic_object"
+         fi
+
+         # Add non-PIC object to the list of files to remove.
+         if test -n "$non_pic_object" \
+            && test "$non_pic_object" != none; then
+           rmfiles="$rmfiles $dir/$non_pic_object"
+         fi
+       fi
+       ;;
+
+      *)
+       if test "$mode" = clean ; then
+         noexename=$name
+         case $file in
+         *.exe)
+           file=`$echo $file|${SED} 's,.exe$,,'`
+           noexename=`$echo $name|${SED} 's,.exe$,,'`
+           # $file with .exe has already been added to rmfiles,
+           # add $file without .exe
+           rmfiles="$rmfiles $file"
+           ;;
+         esac
+         # Do a test to see if this is a libtool program.
+         if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") 
>/dev/null 2>&1; then
+           relink_command=
+           . $dir/$noexename
+
+           # note $name still contains .exe if it was in $file originally
+           # as does the version of $file that was added into $rmfiles
+           rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
+           if test "$fast_install" = yes && test -n "$relink_command"; then
+             rmfiles="$rmfiles $objdir/lt-$name"
+           fi
+           if test "X$noexename" != "X$name" ; then
+             rmfiles="$rmfiles $objdir/lt-${noexename}.c"
+           fi
+         fi
+       fi
+       ;;
+      esac
+      $show "$rm $rmfiles"
+      $run $rm $rmfiles || exit_status=1
+    done
+    objdir="$origobjdir"
+
+    # Try to remove the ${objdir}s in the directories where we deleted files
+    for dir in $rmdirs; do
+      if test -d "$dir"; then
+       $show "rmdir $dir"
+       $run rmdir $dir >/dev/null 2>&1
+      fi
+    done
+
+    exit $exit_status
+    ;;
+
+  "")
+    $echo "$modename: you must specify a MODE" 1>&2
+    $echo "$generic_help" 1>&2
+    exit $EXIT_FAILURE
+    ;;
+  esac
+
+  if test -z "$exec_cmd"; then
+    $echo "$modename: invalid operation mode \`$mode'" 1>&2
+    $echo "$generic_help" 1>&2
+    exit $EXIT_FAILURE
+  fi
+fi # test -z "$show_help"
+
+if test -n "$exec_cmd"; then
+  eval exec $exec_cmd
+  exit $EXIT_FAILURE
+fi
+
+# We need to display help for each of the modes.
+case $mode in
+"") $echo \
+"Usage: $modename [OPTION]... [MODE-ARG]...
+
+Provide generalized library-building support services.
+
+    --config          show all configuration variables
+    --debug           enable verbose shell tracing
+-n, --dry-run         display commands without modifying any files
+    --features        display basic configuration information and exit
+    --finish          same as \`--mode=finish'
+    --help            display this help message and exit
+    --mode=MODE       use operation mode MODE [default=inferred from MODE-ARGS]
+    --quiet           same as \`--silent'
+    --silent          don't print informational messages
+    --tag=TAG         use configuration variables from tag TAG
+    --version         print version information
+
+MODE must be one of the following:
+
+      clean           remove files from the build directory
+      compile         compile a source file into a libtool object
+      execute         automatically set library path, then run a program
+      finish          complete the installation of libtool libraries
+      install         install libraries or executables
+      link            create a library or an executable
+      uninstall       remove libraries from an installed directory
+
+MODE-ARGS vary depending on the MODE.  Try \`$modename --help --mode=MODE' for
+a more detailed description of MODE.
+
+Report bugs to <address@hidden>."
+  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 $?
+
+# The TAGs below are defined such that we never get into a situation
+# in which we disable both kinds of libraries.  Given conflicting
+# choices, we go for a static library, that is the most portable,
+# since we can't tell whether shared libraries were disabled because
+# the user asked for that or because the platform doesn't support
+# them.  This is particularly important on AIX, because we don't
+# support having both static and shared libraries enabled at the same
+# time on that platform, so we default to a shared-only configuration.
+# If a disable-shared tag is given, we'll fallback to a static-only
+# configuration.  But we'll never go from static-only to shared-only.
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
+disable_libs=shared
+# ### END LIBTOOL TAG CONFIG: disable-shared
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-static
+disable_libs=static
+# ### END LIBTOOL TAG CONFIG: disable-static
+
+# Local Variables:
+# mode:shell-script
+# sh-indentation:2
+# End:


Property changes on: GNUnet/libwebserver/ltmain.sh
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/src/Makefile.am
===================================================================
--- GNUnet/libwebserver/src/Makefile.am 2006-08-18 20:37:47 UTC (rev 3245)
+++ GNUnet/libwebserver/src/Makefile.am 2006-08-18 21:41:52 UTC (rev 3246)
@@ -0,0 +1,26 @@
+SUBDIRS = .
+
+INCLUDES = -I$(top_srcdir)/src/include
+
+lib_LTLIBRARIES = libwebserver_gnunet.la
+
+AM_CFLAGS = \
+  -D_SERVER_VERSION="\"0.6.3-GNUnet\""
+
+libwebserver_gnunet_la_SOURCES = \
+ clientinfo.c \
+ server.c \
+ client.c \
+ gethandler.c \
+ socket.c \
+ memory.c \
+ outstream.c \
+ weblog.c \
+ utils.c \
+ fnmatch.c \
+ outgif.c \
+ error.c
+
+libwebserver_gnunet_la_LDFLAGS = \
+ -version-info 0:0:0
+

Added: GNUnet/libwebserver/src/client.c
===================================================================
--- GNUnet/libwebserver/src/client.c    2006-08-18 20:37:47 UTC (rev 3245)
+++ GNUnet/libwebserver/src/client.c    2006-08-18 21:41:52 UTC (rev 3246)
@@ -0,0 +1,1190 @@
+/* Copyrights 2002 Luis Figueiredo (address@hidden) All rights reserved. 
+ *
+ * See the LICENSE file
+ *
+ * The origin of this software must not be misrepresented, either by
+ * explicit claim or by omission.  Since few users ever read sources,
+ * credits must appear in the documentation.
+ * 
+ * date: Sat Mar 30 14:44:42 GMT 2002
+ * 
+ * -- client handler functions
+ *
+ */
+
+
+#include "client.h"
+
+
+extern char *_libwebserver_version; // Defined in server.c
+
+
+struct web_client *current_web_client;
+int WEBTIMEOUT=10000;
+
+/*********************************************************************************************************/
+/*
+ * initializate (allocate) client list
+ */
+struct web_client *__ILWS_init_client_list() {
+       struct web_client *ret;
+       ret=__ILWS_malloc(sizeof(struct web_client));
+       if(ret==NULL) {
+               LWSERR(LE_MEMORY);
+               return NULL;
+       };
+#ifdef HAVE_OPENSSL
+       ret->ssl=NULL; // ssl handler for this client
+#endif
+       ret->next=NULL;
+       return ret;
+}
+
+
+/*********************************************************************************************************/
+/*
+ * Add a client node to client list
+ */
+int __ILWS_add_client(struct web_client *list, struct web_client *node) {
+       struct web_client *temp=list;
+
+#ifdef WIN32
+       unsigned long t=IOC_INOUT;
+#endif
+       while(temp->next!=NULL)temp=temp->next; // run to last client
+       temp->next=node;
+       temp->next->rbuf=NULL;
+       temp->next->rbufsize=0;
+
+       if(!(temp->next->outstream=__ILWS_init_outstream_list())) {
+               return 0;
+       };
+       if(!(temp->next->varlist=__ILWS_init_var_list())) {
+               return 0;
+       };
+       
+       temp->next->contentlength=0;
+       temp->next->headersize=0;
+
+       temp->next->wheadersize=0;
+       temp->next->writelength=0;
+       temp->next->readsize=0;
+       temp->next->range=0;
+       temp->next->skipped=0;
+       temp->next->cookies=NULL;
+       //temp->next->oldcl=clock();
+       
+
+       temp->next->newdata_try=0;
+#ifdef WIN32
+       // should be optional
+       ioctlsocket(temp->next->socket,FIONBIO,&t);  //non blocking sockets for 
win32
+#else
+       fcntl(temp->next->socket,F_SETFL,O_NONBLOCK);
+#endif
+       temp->next->next=NULL;
+       temp->next->HTTPdirective=NULL;
+       temp->next->stat=1; // Add a connected client
+       
+       return 1;
+}
+/*********************************************************************************************************/
+
+
+
+/*********************************************************************************************************/
+/*
+ * Delete client node 
+ */
+void __ILWS_delete_client(struct web_client *node) {
+       int rt;
+       rt=shutdown(node->socket,SHUT_RDWR);
+#ifdef WIN32
+       rt=closesocket(node->socket); 
+#else
+       rt=close(node->socket); 
+#endif
+       __ILWS_free(node->cookies); // (0.5.1)
+       __ILWS_delete_outstream_list(node->outstream);
+       __ILWS_delete_var_list(node->varlist);
+#ifdef HAVE_OPENSSL
+       SSL_free (node->ssl);
+#endif
+       __ILWS_free(node->rbuf); // free's
+       __ILWS_free(node);       // free's
+       
+}
+
+
+/*********************************************************************************************************/
+/*
+ * Delete next client node 
+ */
+void __ILWS_delete_next_client(struct web_client *node) {
+       struct web_client *temp=node->next;
+       node->next=node->next->next;
+       __ILWS_delete_client(temp);
+}
+
+/*********************************************************************************************************/
+/*
+ * Delete entire client list
+ */
+void __ILWS_delete_client_list(struct web_client *node) {
+       struct web_client *next;
+       
+       while(node) {
+               next = node->next;
+               __ILWS_free(node);
+               node = next;
+       }
+}
+
+/*********************************************************************************************************/
+/* 
+ * Read what client have to say
+ */
+void __ILWS_read_client(struct web_client *node) {
+       int tmp,tmp1;
+       char *tmp2,*tmp3=NULL;
+       char readtemp[READMAX+1];
+       unsigned long datasize=0;       
+
+#ifdef HAVE_OPENSSL
+       if(node->ssl!=NULL) {   
+               tmp=SSL_read(node->ssl,readtemp,READMAX);               
+       } else {
+               tmp=__ILWS_read(node->socket,readtemp,READMAX);
+       };
+#else
+       tmp=__ILWS_read(node->socket,readtemp,READMAX);
+#endif
+       //fprintf(stderr,"readed %d bytes\n",tmp);
+       if(tmp<1) {
+       
+#ifdef WIN32
+               if(WSAGetLastError()!=WSAEWOULDBLOCK) { 
+#else                  
+               if(errno!=EAGAIN) { 
+#endif
+                       node->stat=5;return;
+               
+               };
+               //fprintf(stderr,"try: %d (%s)\n",node->newdata_try,node->rbuf);
+               // check if it is over
+               node->newdata_try++;
+               //fprintf(stderr,"node->newdata_try:%d\n",node->newdata_try);
+               if(node->rbufsize >0) {  //&& node->newdata_try>5) { 
+                       if(node->headersize==0) { // always reachs "\r\n\r\n"
+                               if((tmp3=strstr(node->rbuf,"\r\n\r\n"))) {
+                                       node->headersize=(tmp3-node->rbuf);
+                               };
+                       } else {
+                               datasize=node->rbufsize-node->headersize;
+                               if(node->contentlength==0) { // well if it 0 
read all at once
+                                       __ILWS_init_clientinfo(); // always 
call this?
+                                       
node->contentlength=atol(ClientInfo->Header("Content-Length"));
+                                       // range for resuming
+                                       
if((tmp3=strstr(ClientInfo->Header("Range"),"bytes="))) { // if it is in bytes 
(i hope, always)
+                                               tmp3+=6; // go to end of 
"bytes="
+                                               node->range=atol(tmp3);
+                                               //printf("Range is %d - %s - 
%s\n",node->range,ClientInfo->Header("Range"),tmp3);
+                                       };
+                                       // end range
+                                       __ILWS_free_clientinfo();
+                               };
+                               if(node->contentlength==datasize-4) {
+                                       //fprintf(stderr,"client (%d) all 
readed (%d) 
(try's)-%d\n",node->socket,node->curcl-node->oldcl,node->newdata_try); 
+                                       node->newdata_try=WEBTIMEOUT; // assume 
done reading
+                                       //fprintf(stderr,"Ended naturaly\n");
+                                       
+                               }
+                       };
+                       if((node->newdata_try>=WEBTIMEOUT)) { // All readed
+                               node->rbuf[node->rbufsize]='\0';
+                               node->stat=2; // Next state
+                               //fprintf(stderr,"%s\n",node->rbuf);
+                               //fprintf(stderr,"%d\n",node->rbufsize);
+                       }
+               };      
+       }else {
+               tmp1=node->rbufsize;
+               node->rbufsize+=tmp;
+               tmp2=__ILWS_realloc(node->rbuf,node->rbufsize+1);
+               if(tmp2==NULL) {
+                       LWSERR(LE_MEMORY);
+                       node->stat=5;
+                       
+                       return;
+               }else {
+                       node->rbuf=tmp2;
+               };
+               memcpy(node->rbuf+tmp1,readtemp,tmp);
+               node->newdata_try=0;
+       };
+}
+
+
+/*********************************************************************************************************/
+/*
+ * Process headers w/ get handlers
+ */
+void __ILWS_process_client(struct web_client *node,struct gethandler *list) {
+       struct gethandler *gettemp=list;
+       long secs=time(NULL);
+// for determining content length
+#define RTMPMAX 400    
+       struct outstream *tmpstream; // new on 0.5.1
+       char rtmp[RTMPMAX+1];
+       int rtmps=0;
+       char *thead=NULL;
+       char *tmpl;
+///
+       int tmp=0;
+       int oumask=0; // old usermask
+       char *tmp1=__ILWS_web_client_getreq();
+       char matchbuf[MATCHMAX];        
+       FILE *nfile;  // new file
+       char *fname;  // new file name
+       
+       
+       while(gettemp->next!=NULL && tmp==0) {
+               gettemp=gettemp->next;
+               snprintf(matchbuf,MATCHMAX,"%s",gettemp->str);
+               if(!tmp1) {
+                       __ILWS_web_client_writef(node,"HTTP/1.1 400 Invalid 
request\r\n");
+                       __ILWS_web_client_writef(node,"Server: 
%s\r\n",_libwebserver_version);
+                       __ILWS_web_client_writef(node,"Date: 
%s\r\n",__ILWS_date(mktime(gmtime(&secs)),"%a, %d %b %Y %H:%M:%S GMT")); // 
Date header
+                       __ILWS_web_client_writef(node,"Content-type: 
text/html\r\n\r\n<HTML><title>Invalid request</title><body bgcolor=FFFFFF><font 
size=6>400 Invalid  request</font><BR><BR><small>Yout request doesn't match the 
requesits to be 
processed</small><BR><HR><small><i>%s</i></small></body></html>\n\r",_libwebserver_version);
                                    
+                       tmpl=__ILWS_web_client_getreqline();
+                       web_log("%s - - [%s] \"%s\" 400 (invalid 
request)\n",inet_ntoa(node->sa.sin_addr),__ILWS_date(time(NULL),"%d/%b/%Y:%H:%M:%S
 %z"),tmpl); 
+                       __ILWS_free(tmpl);
+                       node->stat=5;
+                       return;
+               };
+               if(strlen(tmp1)>MAXURLSIZE) {
+                       __ILWS_web_client_writef(node,"HTTP/1.1 414 URL to 
large\r\n");
+                       __ILWS_web_client_writef(node,"Server: 
%s\r\n",_libwebserver_version);
+                       __ILWS_web_client_writef(node,"Date: 
%s\r\n",__ILWS_date(mktime(gmtime(&secs)),"%a, %d %b %Y %H:%M:%S GMT")); // 
Date header
+                       __ILWS_web_client_writef(node,"Content-type: 
text/html\r\n\r\n<HTML><title>URL to large</title><body bgcolor=FFFFFF><font 
size=6>414 Requested url to large</font><BR><BR><small>Wonder this... why is 
that so 
large?</small><BR><HR><small><i>%s</i></small></body></html>\n\r",_libwebserver_version);
                                    
+                       tmpl=__ILWS_web_client_getreqline();
+                       web_log("%s - - [%s] \"%s\" 414 (url to 
large)\n",inet_ntoa(node->sa.sin_addr),__ILWS_date(time(NULL),"%d/%b/%Y:%H:%M:%S
 %z"),tmpl); 
+                       __ILWS_free(tmpl);
+                       node->stat=5;
+                       __ILWS_free(tmp1);
+                       return;
+               };
+               if(!fnmatch(matchbuf,tmp1,5)) {
+                       if((gettemp->flag & WS_LOCAL) == WS_LOCAL) {
+                               if(node->sa.sin_addr.s_addr!=0x0100007F) {
+                                       __ILWS_web_client_writef(node,"HTTP/1.1 
403 Forbidden\r\n");
+                                       __ILWS_web_client_writef(node,"Server: 
%s\r\n",_libwebserver_version);
+                                       __ILWS_web_client_writef(node,"Date: 
%s\r\n",__ILWS_date(mktime(gmtime(&secs)),"%a, %d %b %Y %H:%M:%S GMT")); // 
Date header
+                                       
__ILWS_web_client_writef(node,"Content-type: 
text/html\r\n\r\n<HTML><title>Forbidden</title><body bgcolor=FFFFFF><font 
size=6>403 Forbidden</font><BR><BR><small>only local host 
accepted</small><BR><HR><small><i>%s</i></small></body></html>\n\r",_libwebserver_version);
+                                       tmpl=__ILWS_web_client_getreqline();
+                                       web_log("%s - - [%s] \"%s\" 403 
(Forbidden)\n",inet_ntoa(node->sa.sin_addr),__ILWS_date(time(NULL),"%d/%b/%Y:%H:%M:%S
 %z"),tmpl); 
+                                       __ILWS_free(tmpl);
+                                       node->stat=5;
+                                       __ILWS_free(tmp1);
+                                       return;
+                               };
+                       };                        
+                       tmp=1; // Was found
+                       node->outstream->flags=(gettemp->flag & WS_DYNVAR); // 
pass to outstreams
+               };      
+       };      
+       __ILWS_free(tmp1);
+       if(!tmp) { // Nothing found
+               __ILWS_web_client_writef(node,"HTTP/1.1 404 Not Found\r\n");
+               __ILWS_web_client_writef(node,"Server: 
%s\r\n",_libwebserver_version);
+               __ILWS_web_client_writef(node,"Date: 
%s\r\n",__ILWS_date(mktime(gmtime(&secs)),"%a, %d %b %Y %H:%M:%S GMT")); // 
Date header
+               __ILWS_web_client_writef(node,"Content-type: 
text/html\r\n\r\n<HTML><title>not found</title><body bgcolor=FFFFFF><font 
size=6>404 NOT FOUND</font><BR><BR><small>The requested content wasn't 
found</small><BR><HR><small><i>%s</i></small></body></html>\n\r",_libwebserver_version);
                                    
+               tmpl=__ILWS_web_client_getreqline();
+               web_log("%s - - [%s] \"%s\" 404 (Not 
Found)\n",inet_ntoa(node->sa.sin_addr),__ILWS_date(time(NULL),"%d/%b/%Y:%H:%M:%S
 %z"),tmpl); 
+               __ILWS_free(tmpl);
+               node->stat=5;
+       }else {
+               
+               // if cgi do something else, present headers
+               oumask=umask(077);
+               if(!(fname=__ILWS_tmpfname())) {
+                       libws_error(LE_FILESYS,": Error giving a temp 
filename\n");
+                       node->stat=5;
+                       return;
+               };
+               if((nfile=freopen(fname,"wb+",stdout))!=NULL) {
+                       flock(fileno(stdout),LOCK_EX);
+                       tmp=dup(fileno(stdout));
+                       nfile=fdopen(tmp,"wb+");
+                       
if(!__ILWS_add_outstream(node->outstream,fname,nfile,1)) {
+                               node->stat=5; // (delete client)
+                               return; // ERROR reported by add_outstream
+                               
+                       };
+// THE PROCESS
+                       
+                       // Setup Clientinfo before running function
+                       if(gettemp->type==GH_FUNCTION) {
+                               __ILWS_init_clientinfo();        
+                               gettemp->hdl.func(); // changed (0.5.3) Access 
by named union (Hilobok Andrew (address@hidden) said that wasn't compile on 
freeBSD)
+                               __ILWS_free_clientinfo();        
+                       };
+                       // new on 0.5.2
+                       if(gettemp->type==GH_DIRECTORY) { // as builtin 
function for directory listing
+                               __ILWS_init_clientinfo();
+                               if(strcmp(gettemp->str,"* 
/*"))ClientInfo->request+=1;  // skip '/' if not equal to "* /*" (used by 
default)
+                               __ILWS_lws_list(gettemp->hdl.path); // changed 
(0.5.3) Access by named union (Hilobok Andrew (address@hidden) said that wasn't 
compile on freeBSD)
+                               __ILWS_free_clientinfo();
+                       };
+                       
+                       fflush(stdout);
+                       fclose(stdout); // it is a tempfile freopened 
+                       __ILWS_free(fname); // doesn't need anymore
+#ifdef WIN32                   
+                       freopen("con","w",stdout);
+#else
+                       freopen("/dev/tty","w",stdout);
+#endif
+                       if((gettemp->flag & WS_USELEN) == WS_USELEN) {
+// determine writelength (for content-length: header) (new on 0.5.1)
+                               tmpstream=node->outstream;
+                               tmp=0;
+                               while(tmpstream->next!=NULL) { // end of header 
probably in the firsts outstream nodes check for that
+                                       if(tmpstream->next->fname!=NULL) {
+                                               
if(tmpstream->next->fstream==NULL) {
+                                                       
nfile=fopen(tmpstream->next->fname,"rb");
+                                                       
tmpstream->next->fstream=nfile; // here (corrected on 0.5.3);
+                                               } else {
+                                                       
fflush(tmpstream->next->fstream); // <- flush tha thing
+                                                       
nfile=tmpstream->next->fstream;
+                                                       fseek(nfile,0,SEEK_SET);
+                                               };
+                                               if(nfile!=NULL) {
+                                                       rtmps=0;
+                                                       
while((!node->wheadersize) && (!feof(nfile))) { // wheadersize is 0, suposed to 
be fast, at least if is not malformed
+                                                               if(rtmps>0)     
{tmp-=4;fseek(nfile,rtmps-4,SEEK_SET);}
+                                                               
if((rtmps=fread(rtmp,1,RTMPMAX,nfile))>0) {
+                                                                       
rtmp[rtmps]=0;
+                                                                       
if((tmp1=strstr(rtmp,"\r\n\r\n"))) {
+                                                                               
node->wheadersize=(tmp+((tmp1+4)-rtmp));
+                                                                               
rtmps=((tmp1+4)-rtmp);
+                                                                               
+                                                                       }; 
+                                                                       
if(node->range>0) {
+                                                                               
tmp1=realloc(thead,tmp+rtmps+1);
+                                                                               
thead=tmp1;
+                                                                               
memcpy(thead+tmp,rtmp,rtmps);
+                                                                               
thead[tmp+rtmps]=0;
+                                                                       };
+                                                                       
tmp+=rtmps;
+                                                               };
+                                                       };
+                                                       
fseek(nfile,SEEK_END,SEEK_END);
+                                                       
node->writelength+=(ftell(nfile)-2);
+                                                       //fclose(nfile); // <- 
don't worry they close the file later
+                                               };
+                                       };
+                                       tmpstream=tmpstream->next;
+                                       
+                               };
+// end writelength
+                       } else {
+                               node->range=0; // no content-range
+                       };
+                       
+                       if(node->range>node->writelength-node->wheadersize && 
node->range>0) {
+                               __ILWS_web_client_writef(node,"HTTP/1.1 416 
Requested Range Not Satisfiable\r\n");
+                               __ILWS_web_client_writef(node,"Server: 
%s\r\n",_libwebserver_version);
+                               __ILWS_web_client_writef(node,"Date: 
%s\r\n",__ILWS_date(mktime(gmtime(&secs)),"%a, %d %b %Y %H:%M:%S GMT")); // 
Date header
+                               __ILWS_web_client_writef(node,"Content-range: 
bytes */%d\r\n",node->writelength-node->wheadersize);
+                               __ILWS_web_client_writef(node,"Content-type: 
text/html\r\n\r\n<HTML><title>Requested Range Not Satisfiable</title><body 
bgcolor=FFFFFF><font size=6>416 Requested Range Not 
Satisfiable</font><BR><BR><small>You're trying to resume an content that is 
smaller than the requested 
range</small><BR><HR><small><i>%s</i></small></body></html>\n\r",_libwebserver_version);
                                    
+                               tmpl=__ILWS_web_client_getreqline();
+                               web_log("%s - - [%s] \"%s\" 416 (Requested 
Range Not 
Satisfiable)\n",inet_ntoa(node->sa.sin_addr),__ILWS_date(time(NULL),"%d/%b/%Y:%H:%M:%S
 %z"),tmpl); 
+                               __ILWS_free(tmpl);
+                               node->stat=5;
+                               __ILWS_free(thead);
+                               umask(oumask);
+                               return;
+                       };
+                       if(node->range>0 && ((node->outstream->flags & 
WS_DYNVAR)==WS_DYNVAR)) { // if request range interval and dynvar on than 
produces not implemented
+                               __ILWS_web_client_writef(node,"HTTP/1.1 501 Not 
Implemented\r\n");
+                               __ILWS_web_client_writef(node,"Server: 
%s\r\n",_libwebserver_version);
+                               __ILWS_web_client_writef(node,"Date: 
%s\r\n",__ILWS_date(mktime(gmtime(&secs)),"%a, %d %b %Y %H:%M:%S GMT")); // 
Date header
+                               __ILWS_web_client_writef(node,"Content-type: 
text/html\r\n\r\n<HTML><title>Not implemented</title><body bgcolor=FFFFFF><font 
size=6>501 Not implemented</font><BR><BR><small>Your trying to resume an 
content that is not possible to resume(WS_DYNVAR 
fault)</small><BR><HR><small><i>%s</i></small></body></html>\n\r",_libwebserver_version);
                                    
+                               tmpl=__ILWS_web_client_getreqline();
+                               web_log("%s - - [%s] \"%s\" 501 (Not 
Implemented)\n",inet_ntoa(node->sa.sin_addr),__ILWS_date(time(NULL),"%d/%b/%Y:%H:%M:%S
 %z"),tmpl); 
+                               __ILWS_free(tmpl);
+                               node->stat=5;
+                               __ILWS_free(thead);
+                               umask(oumask);
+                               return;
+                       };
+
+               }else {
+                       LWSERR(LE_FILESYS);
+                       
+               }; 
+               node->stat=4;   
+               if(node->HTTPdirective==NULL) {
+                       if(node->range>0) {
+                               __ILWS_web_client_writef(node,"HTTP/1.1 206 
Partial Content\r\n");
+                               tmpl=__ILWS_web_client_getreqline();
+                               web_log("%s - - [%s] \"%s\" 206 (Partial 
Content)\n",inet_ntoa(node->sa.sin_addr),__ILWS_date(time(NULL),"%d/%b/%Y:%H:%M:%S
 %z"),tmpl); 
+                               __ILWS_free(tmpl);
+                       } else {
+                               __ILWS_web_client_writef(node,"HTTP/1.1 200 
OK\r\n");
+                               tmpl=__ILWS_web_client_getreqline();
+                               web_log("%s - - [%s] \"%s\" 200 
(OK)\n",inet_ntoa(node->sa.sin_addr),__ILWS_date(time(NULL),"%d/%b/%Y:%H:%M:%S 
%z"),tmpl); 
+                               __ILWS_free(tmpl);
+                       };
+
+               } else {
+                       
__ILWS_web_client_writef(node,"%s\r\n",node->HTTPdirective);
+                       tmpl=__ILWS_web_client_getreqline();
+                       web_log("%s - - [%s] \"%s\" XXX (User 
defined)\n",inet_ntoa(node->sa.sin_addr),__ILWS_date(time(NULL),"%d/%b/%Y:%H:%M:%S
 %z"),tmpl); 
+                       __ILWS_free(tmpl);
+               };
+               __ILWS_web_client_writef(node,"Server: 
%s\r\n",_libwebserver_version);
+               __ILWS_web_client_writef(node,"Date: 
%s\r\n",__ILWS_date(mktime(gmtime(&secs)),"%a, %d %b %Y %H:%M:%S GMT")); // 
Date header
+               __ILWS_web_client_writef(node,"Accept-Ranges: bytes\r\n");
+               if((((node->writelength-node->wheadersize)-node->range)>0) && 
!((node->outstream->flags & 
WS_DYNVAR)==WS_DYNVAR))__ILWS_web_client_writef(node,"Content-length: 
%d\r\n",(node->writelength-node->wheadersize)-node->range);
+               
if(node->cookies!=NULL)__ILWS_web_client_writef(node,"%s",node->cookies); // 
new (0.5.1)
+               if(node->range>0) {
+                       __ILWS_web_client_writef(node,"Content-range: bytes 
%d-%d/%d\r\n",node->range,(node->writelength-node->wheadersize)-1,node->writelength-node->wheadersize);
+                       __ILWS_web_client_writef(node,"%s",thead); // the rest 
of header
+                       __ILWS_free(thead);
+               };
+               umask(oumask);
+               
+       };
+
+}
+/*********************************************************************************************************/
+/*
+ * Process stream output
+ */
+void __ILWS_output_client(struct web_client *node) {
+       struct outstream *tstream=node->outstream;
+       char *tmp1,*tmp2,*tmp3;
+       char writetemp[WRITEMAX+1];
+       int beginsize=0;
+       int endsize=0;
+       int varsize=0;
+       int namesize=0;
+       if(tstream->next!=NULL) {
+               if(tstream->next->fname!=NULL) {
+                       if(tstream->next->fstream==NULL) {
+                               
if((tstream->next->fstream=fopen(tstream->next->fname,"rb"))==NULL) {
+                                       LWSERR(LE_FILESYS);
+                                       __ILWS_delete_next_outstream(tstream);
+                                       //node->outstream->next=tstream->next;
+                                       return;
+                               } 
+                       };
+
+                       // read part (must always read)
+                       if(tstream->next->rsize==0) {  // start from 0
+                               fseek(tstream->next->fstream,0,SEEK_SET); 
+                       };
+                       memset(writetemp,0,WRITEMAX);
+                       
tstream->next->rsize=fread(writetemp,1,WRITEMAX,tstream->next->fstream);
+                       writetemp[tstream->next->rsize]=0;
+                       // if read make var changes on writetemp;
+                       // new on 0.5.1  -- UNDERDEV                            
   // FIX -
+                       if((node->outstream->flags & WS_DYNVAR) == WS_DYNVAR) {
+                               
+                               tmp1=writetemp;
+                               while(((tmp1=strstr(tmp1,"$")+1)!=(char*)1) && 
beginsize==0) {   // check var found
+                                       for(namesize=0;namesize<50;namesize++) {
+                                               if(tmp1[namesize]==';') 
{namesize++;break;}
+                                               if((tmp1[namesize]<'a' || 
tmp1[namesize]>'z') && 
+                                                  (tmp1[namesize]<'A' || 
tmp1[namesize]>'Z') &&
+                                                  (tmp1[namesize]<'1' || 
tmp1[namesize]>'0') &&
+                                                  tmp1[namesize]!='_') 
{namesize=0;break;};
+                                               
+                                       };
+                                       if(namesize>0) {
+                                               if(namesize==1) { // this is $; 
for sure
+                                                       
if(!(tmp3=__ILWS_malloc(2))) {
+                                                               
LWSERR(LE_MEMORY);
+                                                               node->stat=5;
+                                                               return;
+                                                       };
+                                                       
memcpy(tmp3,"$",namesize);
+                                                       tmp3[namesize]=0;
+                                               } else {
+                                                       
if(!(tmp3=__ILWS_malloc(namesize))) {
+                                                               
LWSERR(LE_MEMORY);
+                                                               node->stat=5;
+                                                               return;
+                                                       };
+                                                       
memcpy(tmp3,tmp1,namesize-1);
+                                                       tmp3[namesize-1]=0;
+                                               };
+                                               
+                                               tmp1-=1;
+                                               
+                                               beginsize=tmp1-writetemp;
+                                               tmp1+=namesize;  // get var 
from whateverwhere (client node probably)
+                                                                               
                
+                                               endsize=strlen(tmp1);   
+                                               
+                                               //varsize=2;
+                                                                               
                
+                                               
if((tmp2=__ILWS_malloc(beginsize+1))) {
+                                                       
memcpy(tmp2,writetemp,beginsize);
+                                                       tmp2[beginsize]=0;
+                                                       if(namesize==1) {
+                                                               
varsize=strlen(tmp3);
+                                                               
snprintf(writetemp,WRITEMAX,"%s%s",tmp2,tmp3);
+                                                       } else {
+                                                               
varsize=strlen(__ILWS_get_var(node->varlist,tmp3));
+                                                               
snprintf(writetemp,WRITEMAX,"%s%s",tmp2,__ILWS_get_var(node->varlist,tmp3));
+                                                       };
+                                                       
writetemp[strlen(tmp2)+varsize]=0;
+                                                       __ILWS_free(tmp2);
+                                                       __ILWS_free(tmp3);
+                                                       
tstream->next->rsize=(beginsize+varsize);
+                                                       
tstream->next->varsize+=(varsize-namesize)-1;
+                                               } else {
+                                                       LWSERR(LE_MEMORY);
+                                                       __ILWS_free(tmp3);
+                                                       node->stat=5;
+                                                       return;
+                                               };
+                                       };
+                               };
+                       }; // dynvar 
+
+                       /* there is nothing more to read here */
+                       if(tstream->next->rsize<1){ // i guess rsize < 1 is eof 
(make sure that server writed last time)
+                               //only change if everything written
+                               if(feof(tstream->next->fstream) && 
(ftell(tstream->next->fstream)==tstream->next->wrotesize)) {
+                                       //fclose(tstream->next->fstream);
+                                       
+                                       __ILWS_delete_next_outstream(tstream);
+                                       //node->outstream->next=tstream->next; 
+                               }
+                               return;
+                       }
+                       node->readsize+=tstream->next->rsize;                   
                        
+                       if(!node->skipped && node->range>0) {
+                               tstream->next->wsize=tstream->next->rsize;
+                               tstream->next->wrotesize+=tstream->next->wsize; 
+                               
if((node->readsize-node->wheadersize)<node->range) { // skip range bytes
+                                       return; // do nothing
+                               }else {
+                                       node->skipped=1;
+                                       
tstream->next->wrotesize-=(node->readsize-node->wheadersize)-node->range; // 
the right offset
+                                       
fseek(tstream->next->fstream,tstream->next->wrotesize,SEEK_SET);
+                                       
tstream->next->wsize=tstream->next->rsize;
+                                       return;
+                               };
+                       };
+                       // write part
+
+#ifdef HAVE_OPENSSL
+                       if(node->ssl!=NULL) {
+                               
tstream->next->wsize=SSL_write(node->ssl,writetemp,tstream->next->rsize);
+                       } else {
+                               
tstream->next->wsize=send(node->socket,writetemp,tstream->next->rsize,0);
+                       };
+#else          
+                       
tstream->next->wsize=send(node->socket,writetemp,tstream->next->rsize,0);
+#endif
+                       if(tstream->next->wsize>0) {
+                               tstream->next->wrotesize+=tstream->next->wsize; 
+                               if(tstream->next->rsize!=tstream->next->wsize 
|| beginsize>0) {                      // FIX
+                                       
fseek(tstream->next->fstream,tstream->next->wrotesize-(tstream->next->varsize),SEEK_SET);
       // FIX
+                               };
+                       };
+#ifdef WIN32
+                       if((tstream->next->wsize<=0) && 
(WSAGetLastError()!=WSAEWOULDBLOCK)) {  // WIN32 only 
+#else
+                       if(tstream->next->wsize<=0 && errno!=EAGAIN) {  // 
linux only // *nix i guess
+#endif                 
+                               //fclose(tstream->next->fstream);
+                               
+                               __ILWS_delete_next_outstream(tstream);
+                               //node->outstream->next=tstream->next; 
+                               return;
+                       }else { // broken pipe
+                               if(tstream->next->wsize<0) {
+                                       
fseek(tstream->next->fstream,tstream->next->wrotesize-(tstream->next->varsize),SEEK_SET);
       //didn't read must back to where it was
+                                };
+                       };
+                       
+               }else { // filename is null
+                       
+                       __ILWS_delete_next_outstream(tstream);
+                       return;
+               };
+       }else { // End of streams
+               
+               current_web_client->stat=5; // done
+
+       };
+}
+
+/*********************************************************************************************************/
+/*
+ * Set http directive
+ */
+void web_client_HTTPdirective(char *str) { 
+       current_web_client->HTTPdirective=str;
+}
+
+
+/*********************************************************************************************************/
+/*
+ * GET request name
+ */
+char *__ILWS_web_client_getreq() {
+       char *ret;
+       char *tmp1=strstr(current_web_client->rbuf,"?");
+       char *tmp2=strstr(current_web_client->rbuf," HTTP");
+       char *tmp3=strstr(current_web_client->rbuf,"\r\n");
+       int size;
+       if(tmp1==NULL || tmp1>tmp2) {
+               tmp1=tmp2;
+       };
+       if(tmp2>tmp3) {
+               return NULL;
+       };
+       size=tmp1-current_web_client->rbuf;
+       if(size<1) return NULL;
+       
+       if(!(ret=__ILWS_malloc(size+1))) {
+               LWSERR(LE_MEMORY);
+               return NULL;
+       };
+       memcpy(ret,current_web_client->rbuf,size);
+       ret[size]=0;
+       return ret;
+
+};
+
+/*********************************************************************************************************/
+/*
+ * GET request line
+ */
+char *__ILWS_web_client_getreqline() {
+       char *ret;
+       char *tmp1=strstr(current_web_client->rbuf,"\r\n");
+       int size=0;
+       if(tmp1==NULL) return NULL;
+       size=tmp1-current_web_client->rbuf;
+       if(size<1) return NULL;
+       
+       if(!(ret=__ILWS_malloc(size+1))) {
+               LWSERR(LE_MEMORY);
+               return NULL;
+       };
+       memcpy(ret,current_web_client->rbuf,size);
+       ret[size]=0;
+       return ret;
+}
+
+
+/*********************************************************************************************************/
+/*
+ * Add a FILE stream type to client output
+ */
+int web_client_addfile(char *in) {  
+       int ret=__ILWS_add_outstream(current_web_client->outstream,in,NULL,0);
+       int nfd=0;
+       char *fname;
+       FILE *nfile=NULL;
+       fname=__ILWS_tmpfname();
+       fflush(stdout);
+       fclose(stdout); // oldstdout close it?
+
+       if((nfile=freopen(fname,"w+b",stdout))!=NULL){ // redirect
+               flock(fileno(stdout),LOCK_EX); // <- yah
+               nfd=dup(fileno(stdout));
+               nfile=fdopen(nfd,"wb+");
+               
if(!__ILWS_add_outstream(current_web_client->outstream,fname,nfile,1)) {
+                       LWSERR(LE_MEMORY);
+                       return 0;
+               };
+       };
+       __ILWS_free(fname);
+       ClientInfo->outfd=fileno(nfile); 
+       return ret;
+}
+
+
+/*********************************************************************************************************/
+/*
+ * Output data as gif (with width w and height h)
+ */
+unsigned char __ILWS_GLOBALGIFPAL[256][3];
+
+
+void web_client_gifsetpalette(const char *fname) {
+       int j;
+       FILE *palfile;
+       if(strcmp(fname,"EGA")==0) {
+               static int EGApalette[16][3] = {
+                               {0,0,0},       {0,0,128},     {0,128,0},     
{0,128,128}, 
+                               {128,0,0},     {128,0,128},   {128,128,0},   
{200,200,200},
+                               {100,100,100}, {100,100,255}, {100,255,100}, 
{100,255,255},
+                               {255,100,100}, {255,100,255}, {255,255,100}, 
{255,255,255} };
+               for (j=0; j<256; j++) {
+                       __ILWS_GLOBALGIFPAL[j][0] = (unsigned 
char)EGApalette[j&15][0];
+                       __ILWS_GLOBALGIFPAL[j][1] = (unsigned 
char)EGApalette[j&15][1];
+                       __ILWS_GLOBALGIFPAL[j][2] = (unsigned 
char)EGApalette[j&15][2];
+               }
+       } else {
+               if(!(palfile=fopen(fname,"rb"))) {
+                       return;
+               };
+               
fread(__ILWS_GLOBALGIFPAL,sizeof(__ILWS_GLOBALGIFPAL),1,palfile);
+               fclose(palfile);
+       };
+};
+
+int web_client_gifoutput(char *data,int w,int h,int transparencyindex) {
+       int i;
+       unsigned char rm[256],gm[256],bm[256];
+       for(i=0;i<256;i++) {
+               rm[i]=__ILWS_GLOBALGIFPAL[i][0];
+               gm[i]=__ILWS_GLOBALGIFPAL[i][1];
+               bm[i]=__ILWS_GLOBALGIFPAL[i][2];
+       };
+       
+       
i=__ILWS_WriteGIF(stdout,data,w,h,rm,gm,bm,256,0,transparencyindex,"libwebserver
 export gif (xvgifwr.c)");
+       
+       return i;
+};            
+
+
+/*********************************************************************************************************/
+/*
+ * an util to write with format on client_nodes
+ */
+void __ILWS_web_client_writef(struct web_client *node,const char *fmt,...) {
+       va_list args;
+       char buf[WRITEMAX];
+       va_start(args,fmt);
+       vsnprintf(buf,512,fmt,args);
+       va_end(args);
+       
+#ifdef HAVE_OPENSSL        
+       if(node->ssl!=NULL) {
+               SSL_write(node->ssl,buf,strlen(buf));
+       } else {
+               send(node->socket,buf,strlen(buf),0);   
+       };
+#else
+       send(node->socket,buf,strlen(buf),0);
+#endif
+}
+
+
+/*********************************************************************************************************/
+/* 
+ * function "web_client_setcookie"  (improved on 0.5.1) to be called what ever 
were over handler function
+ *
+ *  name = Name of the cookie
+ *  value = Value of the cookie
+ *  timeout = Timeout in second from current time on
+ *            (0 = Until end of session)
+ *            (-1 = Delete cookie)
+ *  path = Subset of URLs in a domain for which the cookie is valid
+ *         (If the path is not specified (path == NULL), it as assumed to be
+ *          the same path as the document being described by the header which
+ *          contains the cookie.)
+ *  domain = Domain the cookie is valid for
+ *           (If the domain is not set (domain == NULL), the default value of
+ *            domain is the host name of the server which generated the cookie
+ *            response.)
+ *  secure = If a cookie is marked secure (secure == 1), it will only be
+ *           transmitted if the communications channel with the host is a
+ *           secure one. Currently this means that secure cookies will only be
+ *           sent to HTTPS (HTTP over SSL) servers.
+ *           (If secure is not specified (secure == 0), a cookie is considered
+ *            safe to be sent in the clear over unsecured channels. )
+ */
+void web_client_setcookie(char *name, char *value, char *timeoutf, char *path, 
char *domain, int secure) {
+       char *tmp1=timeoutf;
+       long toffset=0;
+       time_t secs; // to time offset
+       int timeout;
+       int 
offset=(current_web_client->cookies!=NULL)?strlen(current_web_client->cookies):0;
+       if(timeoutf==NULL) {
+               timeout=0;
+       } else if (!strcmp(timeoutf,"DEL")){
+               timeout=-1;
+       } else {
+               while(*tmp1) {
+                       if(*tmp1=='S')toffset=1;             // seconds        
+                       if(*tmp1=='M')toffset=60;            // minutes
+                       if(*tmp1=='H')toffset=60*60;         // hours
+                       if(*tmp1=='d')toffset=60*60*24;      // days
+                       if(*tmp1=='m')toffset=60*60*24*30;   // Month
+                       if(*tmp1=='y')toffset=60*60*24*365;  // years
+                       tmp1++;
+               };
+               timeout=atoi(timeoutf)*toffset;
+       };
+       
+       if (timeout < 0){
+               
current_web_client->cookies=__ILWS_realloc(current_web_client->cookies,offset+59+strlen(name));
+               
snprintf(current_web_client->cookies+offset,59+strlen(name),"Set-Cookie: 
%s=deleted; expires=%s", name, __ILWS_date(time(NULL)-31536001,"%a, %d-%b-%Y 
%H:%M:%S GMT"));
+               offset+=59+strlen(name);
+       }else{
+               
current_web_client->cookies=__ILWS_realloc(current_web_client->cookies,offset+14+strlen(name)+strlen(value));
+               
snprintf(current_web_client->cookies+offset,14+strlen(name)+strlen(value),"Set-Cookie:
 %s=%s", name, value);
+               offset+=13+strlen(name)+strlen(value);
+               
+               if (timeout != 0){
+                       //timeout += timezone; Hilobok Andrew (address@hidden) 
removed this and use gmtime (thanks)
+                       // exchanged by mktime(gmtime(&secs))
+                       
current_web_client->cookies=__ILWS_realloc(current_web_client->cookies,offset+40);
+                       secs=time(NULL);
+                       snprintf(current_web_client->cookies+offset,40,"; 
expires=%s", __ILWS_date(mktime(gmtime(&secs))+timeout,"%a, %d-%b-%Y %H:%M:%S 
GMT"));
+                       offset+=39;
+               }
+               if (path != NULL && *path!=0) {
+                       
current_web_client->cookies=__ILWS_realloc(current_web_client->cookies,offset+8+strlen(path));
+                       
snprintf(current_web_client->cookies+offset,8+strlen(path),"; path=%s", path);  
+                       offset+=7+strlen(path);
+               }
+               if (domain != NULL && *domain!=0){
+                       
current_web_client->cookies=__ILWS_realloc(current_web_client->cookies,offset+10+strlen(domain));
+                       
snprintf(current_web_client->cookies+offset,10+strlen(domain),"; domain=%s", 
domain);
+                       offset+=9+strlen(domain);
+               };
+               if (secure == 1) {
+                       
current_web_client->cookies=__ILWS_realloc(current_web_client->cookies,offset+9);
+                       snprintf(current_web_client->cookies+offset,9,"; 
secure");
+                       offset+=8;
+               };
+       }
+       
+       
current_web_client->cookies=__ILWS_realloc(current_web_client->cookies,offset+3);
+       snprintf(current_web_client->cookies+offset,3,"\r\n"); // '\0' included
+       offset+=2;
+       // 
fprintf(stderr,"current_web_client->cookies=\"%s\"\n",current_web_client->cookies);
 // DEBUG TO REMOVE
+       
+       
+}
+
+
+
+
+/* 
+ * function "web_client_deletecookie"
+ *
+ *  name = Name of the cookie to delete
+ */
+ 
+void web_client_deletecookie(char *name){
+       web_client_setcookie(name, NULL, "DEL", NULL, NULL, 0);
+}
+
+
+
+
+
+
+
+
+int web_client_setvar(char *name,char *value) {
+       return __ILWS_add_var(current_web_client->varlist,name,value);
+};
+char *web_client_getvar(char *name) {
+       return __ILWS_get_var(current_web_client->varlist,name);
+       
+};
+int web_client_delvar(char *name) {
+       return __ILWS_del_var(current_web_client->varlist,name);
+       
+};
+
+
+/***************
+ * variables
+ ***************/
+
+
+// prepare this to work in another file var.c
+struct web_var *__ILWS_init_var_list() {
+       struct web_var *ret;
+       if(!(ret=__ILWS_malloc(sizeof(struct web_var)))) {
+               LWSERR(LE_MEMORY);
+               return NULL;
+       };
+       ret->name=NULL;
+       ret->value=NULL;
+       ret->next=NULL;
+       return ret;
+};
+
+int __ILWS_add_var(struct web_var *list, char *name, char *value) {
+       struct web_var *node=list;
+       int namesize=strlen(name);
+       int valuesize=strlen(value);
+       while(node->next!=NULL) {
+               if(!strcmp(node->next->name,name)) {
+                       return 0;
+               };
+               node=node->next;
+       };
+       
+       if(!(node->next=__ILWS_malloc(sizeof(struct web_var)))) {
+               LWSERR(LE_MEMORY);
+               return 0;
+       };
+       
+       if(!(node->next->name=__ILWS_malloc(namesize+1))) {
+               LWSERR(LE_MEMORY);
+               return 0;
+       };
+       memcpy(node->next->name,name,namesize);
+       node->next->name[namesize]=0;
+
+       if(!(node->next->value=__ILWS_malloc(valuesize+1))) {
+               LWSERR(LE_MEMORY);
+               return 0;
+       };
+       memcpy(node->next->value,value,valuesize);
+       node->next->value[valuesize]=0;
+       node->next->next=NULL;  
+       return 1;
+};
+
+int __ILWS_del_var(struct web_var *list, char *name) {
+       struct web_var *node=list;
+       struct web_var *tmp;
+       while(node->next!=NULL) {
+               if(!strcmp(node->next->name,name)) {
+                       tmp=node->next;
+                       node->next=node->next->next;
+                       __ILWS_free(tmp->name);
+                       __ILWS_free(tmp->value);
+                       __ILWS_free(tmp);
+                       return 1;
+               };
+       };
+       return 0;
+};                     
+void __ILWS_delete_var_list(struct web_var *list) {
+       struct web_var *node=list;
+       struct web_var *tmp;
+       
+       while(node->next!=NULL) {
+               tmp=node->next;
+               node->next=node->next->next;
+               __ILWS_free(tmp->name);
+               __ILWS_free(tmp->value);
+               
+               __ILWS_free(tmp);
+       };
+       __ILWS_free(node);
+};
+
+
+char *__ILWS_get_var(struct web_var *list , char *name) {
+       struct web_var *node=list;
+       while(node->next!=NULL) {
+               if(!strcmp(node->next->name,name)) {
+                       return node->next->value;
+               };
+               node=node->next;
+       };
+       return "";
+};
+
+
+/****************************
+ *  give mime by ext (mime file declared on server)
+ */
+
+void web_client_contenttype(char *ext) {
+       FILE *mimefileh;
+       char *mimedata;
+       char *mimeline;
+       size_t extsize;
+       size_t mimesize;
+       char *tmp;
+    /* -- mime */
+       int isok=0;
+       size_t i;
+       
+       if(ext==NULL || current_web_server->mimefile==NULL) {
+               printf("Content-type: text/plain\r\n\r\n"); // <- mime type, 
change this calculating mime with extension                
+       } else {
+               extsize=strlen(ext);
+               if((mimefileh=fopen(current_web_server->mimefile,"r"))) {
+                       // retrieve file size
+                       fseek(mimefileh,SEEK_END,SEEK_END);
+                       mimesize=ftell(mimefileh);
+                       fseek(mimefileh,0,SEEK_SET);
+                       //
+                       // malloc and read data
+                       mimedata=__ILWS_malloc(mimesize+1);
+                       fread(mimedata,1,mimesize,mimefileh);
+                       fclose(mimefileh); // close file 
+                       //
+                       
for(i=0;i<mimesize;i++)if(mimedata[i]=='\t')mimedata[i]=' '; // translate \t to 
1 space
+                       mimedata[mimesize]=0;
+
+                       isok=0;
+                       mimeline=strtok(mimedata,"\n");
+                       while((mimeline=strtok(NULL,"\n")) && !isok) {
+                               if(mimeline[0]!='#') { // is not a comment
+                                       tmp=mimeline;
+                                       while((tmp=strstr(tmp,ext)) && !isok) {
+                                               
//fprintf(stderr,"extsize(%d),found in %s (%s) 
%x\n",extsize,mimeline,tmp,tmp[extsize]);
+                                               if(tmp[-1]==' ' && 
(tmp[extsize]==' ' || tmp[extsize]=='\0') ) { 
+                                                       
if((tmp=strchr(mimeline,' '))) { // the first space?
+                                                               tmp[0]='\0';
+                                                               
//fprintf(stderr,"content is: %s\n",mimeline);
+                                                               
printf("Content-type: %s\r\n\r\n",mimeline);
+                                                               isok=1;
+                                                       };
+                                               };
+                                               tmp+=extsize;
+                                       };
+                                       
+                               };
+                       };
+                       if(!isok) {
+                               printf("Content-type: text/plain\r\n\r\n");
+                       };
+                       //printf("%s\n",tmp);
+                       __ILWS_free(mimedata);
+                       
+               };
+       };
+};
+
+
+/**********************************
+ * internal directory generator
+ */
+
+int __ILWS_lws_list(char *inpath) {
+       /* for type directory */
+       /* mime*/
+       char *ext;
+       struct dirent *dire;
+       DIR *cd;
+       struct stat cfstat;
+       char *dirpath=NULL;
+       char *filepath;
+       char *tmp;
+       char *readfile;
+       float filesize;
+       char filesizeu;
+       ////
+       
+       
+       //printf("ClientInfo->request=<B>%s</B><BR>\n",ClientInfo->request);
+       //readfile=__ILWS_malloc(strlen(ClientInfo->request)+1);
+       readfile=ClientInfo->request;
+       while((tmp=strstr(readfile,"./"))) { // this skip ../ also
+               readfile=tmp+1;
+       };
+       while((tmp=strstr(readfile,"//"))) {
+               readfile=tmp+1;
+       };
+       
+       tmp=strstr(readfile,"/"); 
+       if(tmp!=NULL) {
+               readfile=tmp+1; // must be in the first
+       };
+       // skip beind dir
+       if(strlen(readfile)) {
+               filepath=__ILWS_malloc(strlen(inpath)+strlen(readfile)+3);
+               
snprintf(filepath,strlen(inpath)+strlen(readfile)+2,"%s%s%s",inpath,(inpath[strlen(inpath)-1]=='/')?"":"/",readfile);
+               //printf("pum ->%s<BR>\n",filepath);
+               if(readfile[strlen(readfile)-1]=='/') {
+                       dirpath=__ILWS_malloc(strlen(filepath)+1);
+                       memcpy(dirpath,filepath,strlen(filepath)+1); // the 0 
included
+               } else {
+                       if(!stat(filepath,&cfstat)) { // file must exist
+                               if((cfstat.st_mode & S_IFDIR) != S_IFDIR) {
+                               // search for mime
+                                       ext=strrchr(filepath,'.');
+                                       tmp=strrchr(filepath,'/');
+                                       ext+=1;
+                                       if(ext<=tmp) { // is not a extension
+                                               ext=NULL;
+                                       };
+                                       
+                                       //Wed, 22 Oct 2003 16:04:04 GMT
+                                       printf("Last-Modified: 
%s\r\n",__ILWS_date(mktime(gmtime(&cfstat.st_mtime)),"%a, %d %b %Y %H:%M:%S 
GMT")); // new on 0.5.3
+                                       web_client_contenttype(ext);
+                                       web_client_addfile(filepath); // fopen 
and write, maybe?
+                                       __ILWS_free(filepath);
+                                       return 1;
+                               } else {
+                                       web_client_HTTPdirective("HTTP/1.1 404 
File Not Found");
+                                       printf("Content-type: 
text/html\r\n\r\n<HTML><title>file not found</title><body bgcolor=FFFFFF><font 
size=6>404 FILE NOT FOUND</font><BR><BR><small>The request \"%s\" wasn't found, 
try this <a 
href='%s/'>link</a></small><BR><HR><small><i>%s</i></small></body></html>\n\r",filepath,ClientInfo->request,_libwebserver_version);
 
+                                       __ILWS_free(filepath);
+                                       return 0;
+                               };
+                       }else {
+                               web_client_HTTPdirective("HTTP/1.1 404 File Not 
Found");
+                               printf("Content-type: 
text/html\r\n\r\n<HTML><title>file not found</title><body bgcolor=FFFFFF><font 
size=6>404 FILE NOT FOUND</font><BR><BR><small>The request \"%s\" wasn't 
found</small><BR><HR><small><i>%s</i></small></body></html>\n\r",filepath,_libwebserver_version);
 
+                               __ILWS_free(filepath);
+                               return 0;
+                       };
+               };
+               __ILWS_free(filepath);
+       };
+       //printf("Content-type: text/html\r\n\r\n");
+       //fprintf(stderr,"dirpath=%s inpath=%s\n",dirpath,inpath);
+       if(dirpath==NULL) {
+               dirpath=__ILWS_malloc(strlen(inpath)+1);
+               memcpy(dirpath,inpath,strlen(inpath)+1);
+       };
+       cd=opendir(dirpath);
+       if(cd!=NULL) {
+               printf("Content-type: text/html\r\n\r\n");
+               printf("<HTML><HEAD><TITLE>Contents of 
%s</TITLE></HEAD><BODY>\n",dirpath);
+               printf("<h1>Contents of directory %s</h1><HR>\n",dirpath);
+               printf("<form><input type=text name=match value=\"%s\"><input 
type=submit name='send' 
value='wildcard'></form>\n",strlen(ClientInfo->Query("match"))?ClientInfo->Query("match"):"*");
+               printf("<PRE>\n");
+               while((dire=readdir(cd))) {
+                       if( ((dire->d_name[0]!='.') || (strcmp(dirpath,inpath) 
&& !strcmp(dire->d_name,".."))) && 
(!fnmatch(ClientInfo->Query("match"),dire->d_name,0) || 
!strlen(ClientInfo->Query("match"))) ) {
+                               
filepath=__ILWS_malloc(strlen(dirpath)+strlen(dire->d_name)+2);
+                               
snprintf(filepath,strlen(dirpath)+strlen(dire->d_name)+2,"%s%s%s",dirpath,(dirpath[strlen(dirpath)-1]=='/')?"":"/",dire->d_name);
+                               //fprintf(stderr,"filename=%s\n",filepath);
+                               if(!stat(filepath,&cfstat)) {
+                                               if((cfstat.st_mode & S_IFDIR) 
== S_IFDIR) {
+                                               printf("%s      &lt;DIR&gt;     
<a href=\"%s/\">%s</a>\n",__ILWS_date(cfstat.st_mtime,"%a, %d %b %Y 
%H:%M"),dire->d_name,dire->d_name);
+                                       }else {
+                                               filesize=(float)cfstat.st_size;
+                                               filesizeu=0;
+                                               while(filesize>1024) {
+                                                       filesize/=1024;
+                                                       filesizeu++;
+                                               };
+                                               printf("%s      %.1f%c  <a 
href=\"%s\">%s</a>\n",__ILWS_date(cfstat.st_mtime,"%a, %d %b %Y 
%H:%M"),filesize,(filesizeu==2)?'M':(filesizeu==1)?'K':'b',dire->d_name,dire->d_name);
+                                       };
+                               };
+                               __ILWS_free(filepath);
+                       };
+               
+               };
+               printf("</PRE>\n");                             
+               printf("<HR>\n");
+               printf("<address>%s</address>\n",_libwebserver_version);
+               printf("</BODY></HTML>\r\n");
+               __ILWS_free(dirpath);
+               closedir(cd);
+       } else {
+               web_client_HTTPdirective("HTTP/1.1 404 File Not Found");
+               printf("Content-type: text/html\r\n\r\n<HTML><title>file not 
found</title><body bgcolor=FFFFFF><font size=6>404 FILE NOT 
FOUND</font><BR><BR><small>The request \"%s\" wasn't 
found</small><BR><HR><small><i>%s</i></small></body></html>\n\r",dirpath,_libwebserver_version);
 
+               return 0;
+       };
+       return 1;
+};
+
+
+
+


Property changes on: GNUnet/libwebserver/src/client.c
___________________________________________________________________
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/src/client.h
===================================================================
--- GNUnet/libwebserver/src/client.h    2006-08-18 20:37:47 UTC (rev 3245)
+++ GNUnet/libwebserver/src/client.h    2006-08-18 21:41:52 UTC (rev 3246)
@@ -0,0 +1,159 @@
+/* Copyrights 2002 Luis Figueiredo (address@hidden) All rights reserved. 
+ *
+ * See the LICENSE file
+ *
+ * The origin of this software must not be misrepresented, either by
+ * explicit claim or by omission.  Since few users ever read sources,
+ * credits must appear in the documentation.
+ *
+ * date: Sat Mar 30 14:44:42 GMT 2002
+ *
+ *
+ * --
+ *
+ */
+
+#ifndef _CLIENT_H_
+#define _CLIENT_H_
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <stdio.h>
+#include <fcntl.h>
+#include <string.h>
+#include <errno.h>
+
+
+
+#ifdef HAVE_OPENSSL
+
+#include <openssl/rsa.h>       /* SSLeay stuff */
+#include <openssl/crypto.h>
+#include <openssl/x509.h>
+#include <openssl/pem.h>
+#include <openssl/ssl.h>
+#include <openssl/err.h>              
+
+#endif
+
+
+#include "socket.h"
+
+#include "memory.h"
+#include "outstream.h"
+
+
+#include "gethandler.h"
+
+
+
+#include "weblog.h"
+#include "utils.h"
+#include "fnmatch.h"
+#include "outgif.h"
+#include "error.h"
+#include "debug.h"
+
+
+#include "clientinfo.h"
+
+
+#ifdef WIN32
+#include "flock.h"     // my flock
+#include "dirent.h"
+#else
+#include <sys/file.h>  // for flock
+#include <dirent.h>
+#endif
+
+#define READMAX 100000  // 1Mb upload 
+#define WRITEMAX 100000 // 1Mb download 1mb per client? // smaller is better 
for multi read bigger is better for big downloads
+#define MAXURLSIZE 2000 // 
+
+extern int WEBTIMEOUT;    //to be changed externaly
+//#define WEBTIMEOUT 10000 // TIMEOUT WITHOUT RECEIVING DATA (not in seconds 
but in read tries)
+
+
+struct web_var {
+       char *name;
+       char *value;
+       struct web_var *next;
+};
+
+struct web_client {
+       
+       int socket;
+       struct sockaddr_in sa;
+       unsigned int salen;
+    char *HTTPdirective;
+       unsigned char stat;  /* 0001b idle,0010b down streaming, 0011 done down 
streaming, 0100b out streaming,0101 done out streaming */
+       // Read control 
+       char *rbuf;
+       unsigned long rbufsize;
+       int newdata_try;
+       unsigned long contentlength; // for read propose (optimize speed 0.5.1)
+       unsigned long headersize;
+       
+       // Write control
+       struct outstream *outstream;
+       struct web_var *varlist;
+       char *cookies; // cookie header (0.5.1)          
+       long writelength;
+       long readsize;
+       long range;
+       int skipped;
+       long wheadersize; 
+//     clock_t oldcl,curcl;
+
+#ifdef HAVE_OPENSSL
+       SSL *ssl;
+       X509*    cert;
+#else
+       void *pad[2];
+#endif
+       struct web_client *next;
+};                      
+extern struct web_client *current_web_client;
+
+struct web_client *__ILWS_init_client_list();
+int __ILWS_add_client(struct web_client *,struct web_client *);
+void __ILWS_delete_next_client(struct web_client *);
+void __ILWS_delete_client_list(struct web_client *);
+
+void __ILWS_read_client(struct web_client *);
+void __ILWS_process_client(struct web_client *,struct gethandler *);
+void __ILWS_output_client(struct web_client *);
+
+void __ILWS_web_client_writef(struct web_client *,const char *,...);
+
+int web_client_addfile(char *);
+void web_client_contenttype(char *); // new on 0.5.2
+
+void web_client_gifsetpalette(const char *);
+
+extern unsigned char __ILWS_GLOBALGIFPAL[256][3];
+
+int web_client_gifoutput(char *,int,int,int);
+
+void web_client_HTTPdirective(char *);
+
+char *__ILWS_web_client_getreqline();
+char *__ILWS_web_client_getreq();
+// new (0.5.1)
+int web_client_setvar(char *,char *);
+char *web_client_getvar(char *);
+int web_client_delvar(char *);
+
+// put in var.h
+struct web_var *__ILWS_init_var_list();
+int __ILWS_add_var(struct web_var *, char *, char *);
+int __ILWS_del_var(struct web_var *, char *);
+void __ILWS_delete_var_list(struct web_var *);
+char *__ILWS_get_var(struct web_var *list , char *name);
+
+int __ILWS_lws_list(char *); // new on 0.5.2
+
+#endif
+


Property changes on: GNUnet/libwebserver/src/client.h
___________________________________________________________________
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/src/clientinfo.c
===================================================================
--- GNUnet/libwebserver/src/clientinfo.c        2006-08-18 20:37:47 UTC (rev 
3245)
+++ GNUnet/libwebserver/src/clientinfo.c        2006-08-18 21:41:52 UTC (rev 
3246)
@@ -0,0 +1,1124 @@
+/* Copyrights 2002 Luis Figueiredo (address@hidden) All rights reserved. 
+ *
+ * See the LICENSE file
+ *
+ * The origin of this software must not be misrepresented, either by
+ * explicit claim or by omission.  Since few users ever read sources,
+ * credits must appear in the documentation.
+ *
+ * date: Wed Oct  9 19:56:22 GMT 2002
+ *
+ * -- parse http header into "ClientInfo"
+ *
+ */
+
+#include "clientinfo.h"
+
+
+struct ClientInfo *ClientInfo; // tochange
+
+/*********************************************************************************************************/
+/*
+ * Initialize ClientInfo structure
+ */
+void __ILWS_init_clientinfo() { 
+       char *t;
+       struct outstream *tstream=current_web_client->outstream;
+       
+       ClientInfo=__ILWS_malloc(sizeof(struct ClientInfo));
+       if(ClientInfo==NULL) {
+               LWSERR(LE_MEMORY);
+               return;
+       };
+       
+       while(tstream->next!=NULL) {
+               tstream=tstream->next;
+       };
+       
+       if(tstream->fstream!=NULL) ClientInfo->outfd=fileno(tstream->fstream); 
//take it off?
+               
+       ClientInfo->mem=__ILWS_init_buffer_list(); // First thing, other 
fuctions use this to allocate
+       
+        
+       ClientInfo->request=__ILWS_clientinfo_getreqname();
+       
+       ClientInfo->inetname=NULL;
+       t=inet_ntoa(current_web_client->sa.sin_addr);
+       
if((ClientInfo->inetname=__ILWS_add_buffer(ClientInfo->mem,strlen(t)+1))) {
+               memcpy(ClientInfo->inetname,t,strlen(t));
+               ClientInfo->inetname[strlen(t)]='\0';
+       };
+       
+       ClientInfo->method=__ILWS_clientinfo_getmethod();
+       ClientInfo->user=__ILWS_clientinfo_getauthuser();
+       ClientInfo->pass=__ILWS_clientinfo_getauthpass();
+       
+       
+       
+       /* Initialize List's */
+       ClientInfo->HeaderList=NULL;
+       ClientInfo->QueryList=NULL;
+       ClientInfo->PostList=NULL;
+       ClientInfo->MultiPartList=NULL;
+       ClientInfo->CookieList=NULL;
+
+       ClientInfo->Header=__ILWS_Header;
+       ClientInfo->Query=__ILWS_Query;
+       ClientInfo->QueryString=__ILWS_clientinfo_getquerystring();     
+       ClientInfo->Post=__ILWS_Post;
+       ClientInfo->PostData=__ILWS_clientinfo_getpostdata();   
+       ClientInfo->MultiPart=__ILWS_MultiPart;
+       ClientInfo->Cookie=__ILWS_Cookie;
+       ClientInfo->Conf=__ILWS_Conf;
+       ClientInfo->CookieString=__ILWS_Header("Cookie");
+       
+}                      
+
+/*********************************************************************************************************/
+/*
+ * Free ClientInfo structure
+ */
+void __ILWS_free_clientinfo() {
+       if(ClientInfo==NULL) {  
+               return;
+       };
+       __ILWS_delete_buffer_list(ClientInfo->mem); 
+       
+       __ILWS_free(ClientInfo);
+       ClientInfo=NULL;
+}
+
+
+/*********************************************************************************************************/
+/*
+ * Header function for ClientInfo->Header("x")
+ */
+char *__ILWS_Header(char *str) {
+       char *tmp1,*tmp2,*tmp3,*ret;
+       struct _Header *hl=ClientInfo->HeaderList;
+       char *defret="";
+       size_t size;
+       size_t strsize;
+       if(str==NULL) { // request is null return whole header
+               return current_web_client->rbuf;
+       };
+       if(ClientInfo->HeaderList==NULL) {
+               
+               
ClientInfo->HeaderList=__ILWS_add_buffer(ClientInfo->mem,sizeof(struct 
_Header));
+               if(ClientInfo->HeaderList==NULL) {
+                       LWSERR(LE_MEMORY);
+                       return defret;
+               };
+               ClientInfo->HeaderList->next=NULL;
+               ClientInfo->HeaderList->data=NULL;
+               ClientInfo->HeaderList->id=NULL;
+               hl=ClientInfo->HeaderList;
+       };
+       // First search if exists
+       
+       while(hl->next!=NULL) {
+               if(hl->next->id!=NULL) {
+                       if(!strcmp(hl->next->id,str)) {
+                               
+                               return hl->next->data;
+                       };
+               };
+               hl=hl->next;    
+       };
+       
+       /* Doesn't exists        */
+       strsize=strlen(str);
+       if(!(hl->next=__ILWS_add_buffer(ClientInfo->mem,sizeof(struct 
_Header)))) {
+               LWSERR(LE_MEMORY);
+               return defret;
+       };
+       if(!(hl->next->id=__ILWS_add_buffer(ClientInfo->mem,strsize+1))) {
+               LWSERR(LE_MEMORY);
+               return defret;
+       };
+       
+       memcpy(hl->next->id,str,strsize);
+       hl->next->id[strsize]=0;        
+       hl->next->data=defret;
+       hl->next->next=NULL;
+
+       if(!(tmp3=__ILWS_malloc(strsize+3))) {
+               LWSERR(LE_MEMORY);
+               return defret;
+       };
+       snprintf(tmp3,strsize+3,"%s: ",str);
+       tmp1=__ILWS_stristr(current_web_client->rbuf,tmp3);
+       __ILWS_free(tmp3);
+       if(tmp1==NULL) {
+               return defret;
+       };
+       
+       tmp1+=strsize+2;
+       if(!(tmp2=strstr(tmp1,"\r\n"))) { // Unexpected (security anyway)
+               return defret;
+       };
+       if((size=(unsigned int)(tmp2-tmp1))<0) {
+               return defret;
+       };
+       if(!(ret=__ILWS_add_buffer(ClientInfo->mem,size+1))) { //malloc & 
register
+               return defret;
+       };
+       memcpy(ret,tmp1,size);
+       ret[size]=0;
+       hl->next->data=ret;
+       return ret;
+}                                
+
+
+
+/*********************************************************************************************************/
+/*
+ * Function for Querydata
+ */
+char *__ILWS_Query(char *handle) {
+    char *tmp1,*tmp2,*tmp3,*tmp4,*ret;
+       char *defret="";
+       size_t strsize;
+    size_t size;
+       int j=0,ch;
+       int seek=1;
+       unsigned int i;
+       unsigned int *iddb=NULL;
+       unsigned int *iddb2=NULL;
+       unsigned int idf=0;
+       int rw=0; // 0 data 1 number of vars; (return what?)
+       struct _Query *ql=ClientInfo->QueryList;
+       
+       
+       if(handle==NULL) {
+               return ClientInfo->QueryString;
+       };
+       if(handle[0]=='#') rw=1;
+       // allocate first node from the list 
+       if(ClientInfo->QueryList==NULL) {                                       
                       
+               
ClientInfo->QueryList=__ILWS_add_buffer(ClientInfo->mem,sizeof(struct _Query)); 
                  
+               if(ClientInfo->QueryList==NULL) {                               
                           
+                       LWSERR(LE_MEMORY);
+                       if(rw) return 0;
+                       return defret;
+               };
+               ClientInfo->QueryList->next=NULL;
+               ClientInfo->QueryList->data=NULL;
+               ClientInfo->QueryList->id=NULL;
+               ql=ClientInfo->QueryList;
+       };
+       // done allocating
+
+
+       // First search if exists and fetch values;
+       
+       idf=1;
+       iddb=&idf;
+       seek=1;
+       
+       while(ql->next!=NULL) {
+               if(ql->next->id!=NULL) {
+                       if(!strcmp(ql->next->id,handle+rw) && *iddb >= 0) {
+                               if(seek==1) {
+                                       iddb=&ql->next->index; // atribute iddb 
to first node
+                                       iddb2=&ql->next->idf; // atribute iddb2 
to counting
+                                       if(rw) return (char *)*iddb2;
+                                       if(ql->next->idf==1) {
+                                               return ql->next->data;
+                                       };
+                                       j=*iddb;
+                                       seek++;                 
+                               };
+                               *iddb=*iddb-1;
+                               
+                               if(*iddb<=0) {
+                                       *iddb=j-1;
+                                       if(j<=1) {
+                                               *iddb=*iddb2; // go to start if 
any
+                                               //return defret; // to be null
+                                       };
+                                       return ql->next->data; // Return 
existent
+                               };
+                               
+                       };
+               };
+               ql=ql->next;    
+       };
+       
+       
+       
+       /* Doesn't exists        */
+       strsize=strlen(handle+rw);
+       tmp1=strstr(current_web_client->rbuf,"?"); 
+       tmp3=strstr(current_web_client->rbuf," HTTP"); // End of GET header
+       if(tmp1!=NULL && tmp1<tmp3) {
+               tmp1+=1;
+       } else {
+               if(rw)return 0;
+               return defret;
+       }
+       
+       // Working here
+       idf=0;
+       ret=defret;
+       seek=1;
+       tmp4=tmp1;
+       while(seek==1) {
+               tmp1=tmp4;
+               do {
+                       tmp2=strstr(tmp1,handle+rw);
+                       if(tmp2==NULL) { // must be nonnull
+                               if(iddb!=NULL && iddb2!=NULL) { // if iddb2 is 
null then is just one value;
+                                       *iddb2=*iddb;
+                                       if(!rw)*iddb=*iddb-1;
+                               };
+                               if(rw) {
+                                       if(ret==defret) return 0;
+                                       return (char *)*iddb2;
+                               } 
+                               return ret; // if first null return defret 
(ret=defret);
+                               
+                       };
+                       tmp1=tmp2+strsize;
+               } while ((tmp2[-1]!='?' && tmp2[-1]!='&') || 
tmp2[strsize]!='='); // Johannes E. Schindelin Fix
+
+               if(tmp3<tmp2) { 
+                       if(iddb!=NULL && iddb2!=NULL) {
+                               *iddb2=*iddb;
+                               if(!rw)*iddb=*iddb-1;
+                       };
+                       if(rw) {
+                               if(ret==defret) return 0;
+                               return (char *)*iddb2;
+                       }
+                       
+                       return ret;
+               };
+       
+               tmp4=tmp1;
+                       // if not null, so add an node;
+       
+               // Working here ^
+               ql->next=__ILWS_add_buffer(ClientInfo->mem,sizeof(struct 
_Query));
+               if(ql->next==NULL) {
+                       LWSERR(LE_MEMORY);
+                       if(handle[0]=='#') rw=1;
+                       return defret;
+               };
+               ql->next->id=__ILWS_add_buffer(ClientInfo->mem,strsize+1);
+               if(ql->next->id==NULL) {
+                       LWSERR(LE_MEMORY);
+                       if(handle[0]=='#') rw=1;
+                       return defret;
+               };
+               memcpy(ql->next->id,handle+rw,strsize);
+               ql->next->id[strsize]=0;        
+               if(idf==0) {
+                       ql->next->index=0;
+                       iddb=&ql->next->index;
+                       iddb2=&ql->next->idf; // second holds information about 
number of fetchs;
+                       
+               };
+               ql->next->data=defret;
+               ql->next->next=NULL;
+
+               
+               tmp1=strstr(tmp2,"&"); // tmp1 goes to next '&'
+               tmp2+=strsize+1;           // tmp2 goes to start of data
+               tmp3=strstr(tmp2," HTTP"); // tmp3 goes to the end of Get header
+               if(tmp1==NULL || ((unsigned int)tmp1>(unsigned int)tmp3)) {
+                       size=tmp3-tmp2; // MUST HAVE (" HTTP") else, server 
don't let in
+               } else {
+                       size=tmp1-tmp2;
+               };
+               if(size<1) {
+                       if(handle[0]=='#') rw=1;
+                       return defret;
+               };
+               
+               
+               ql->next->data=__ILWS_add_buffer(ClientInfo->mem,size+1);
+               if(ql->next->data==NULL) {
+                       LWSERR(LE_MEMORY);
+                       if(handle[0]=='#') rw=1;
+                       return defret;
+               };
+               j=0;
+               for(i=0;i<size;i++) { // Hex translation here
+                       switch (ch=tmp2[j]) {
+                       case '+':
+                               ch=' ';
+                               break;
+                       case '%':
+                               
+                               tmp1=__ILWS_malloc(3);
+                               if(tmp1==NULL) {
+                                       LWSERR(LE_MEMORY);
+                                       if(rw) return 0;
+                                       return defret;
+                               };
+                               strncpy(tmp1,&tmp2[j+1],2);
+                               tmp1[2]=0;
+                               ch=strtol(tmp1,NULL,16);
+                               j+=2;
+                               size-=2;
+                               
+                               __ILWS_free(tmp1);
+                               break;
+                       };
+                       ql->next->data[i]=ch;
+                       j++;
+               };
+               ql->next->data[size]='\0';
+               ret=ql->next->data; // to the last
+               ql=ql->next;
+               *iddb=*iddb+1;
+               idf++;
+       };
+       return ret;
+}                                                                              
            
+
+
+
+/*********************************************************************************************************/
+/*
+ * Function for Postdata
+ */
+char *__ILWS_Post(char *handle) {
+       char *tmp1,*tmp2,*tmp3,*ret;
+       struct _Post *pl=ClientInfo->PostList;
+       char *defret="";
+       int *iddb=NULL,*iddb2=NULL;
+       int idf;
+       int seek=1;
+       size_t strsize;
+       size_t size;
+       int j=0,ch;
+       unsigned int i;
+       int rw=0; //return what;
+       
+       tmp1=strstr(current_web_client->rbuf,"Content-type: 
multipart/form-data"); // multipart this post doesn't work
+       if(tmp1!=NULL) {
+               return ClientInfo->MultiPart(handle).data;
+       };
+       if(handle==NULL) {
+               return ClientInfo->PostData;
+       };
+       if(handle[0]=='#')rw=1;
+       /* Allocate the list */
+       if(ClientInfo->PostList==NULL) {
+               
if(!(ClientInfo->PostList=__ILWS_add_buffer(ClientInfo->mem,sizeof(struct 
_Post)))) {
+                       LWSERR(LE_MEMORY);
+                       if(rw) return 0;
+                       return defret;
+               };
+               ClientInfo->PostList->next=NULL;
+               ClientInfo->PostList->data=NULL;
+               ClientInfo->PostList->id=NULL;
+               pl=ClientInfo->PostList;
+       };
+       
+       // First search if exists
+       idf=1;
+       iddb=&idf;
+       seek=1;
+       while(pl->next!=NULL) {
+               if(pl->next->id!=NULL) {
+                       if(!strcmp(pl->next->id,handle+rw) && iddb>=0) {
+                               if(seek==1) {
+                                       iddb=&pl->next->index;
+                                       iddb2=&pl->next->idf;
+                                       if(rw) return (char *)(*iddb2);
+                                       if(pl->next->idf==1) {
+                                               return pl->next->data;
+                                       };
+                                       j=*iddb;
+                                       seek++;
+                               };
+                               *iddb=*iddb-1;
+                               
+                               if(*iddb<=0) {
+                                       *iddb=j-1;
+                                       if(j<=1) {
+                                               *iddb=*iddb2;
+
+                                               //return defret;
+                                       };
+                                       return pl->next->data;
+                               };
+                       };
+               };
+               pl=pl->next;    
+       };
+       
+       
+       
+       
+       
+       /* Doesn't exists        */
+       strsize=strlen(handle+rw);
+       tmp1=strstr(current_web_client->rbuf,"\r\n\r\n"); 
+       if(tmp1!=NULL)
+               tmp1+=4;
+       else {
+               if(rw) return 0;
+               return defret;
+       };
+       idf=0;
+       ret=defret;
+       seek=1;
+       tmp3=tmp1;
+       while(seek==1) {
+               tmp1=tmp3;
+               do {
+                       tmp2=strstr(tmp1,handle+rw);
+                       if(tmp2==NULL) { // mustn't be null
+                               if(iddb!=NULL && iddb2!=NULL) { // if iddb2 is 
null then is just one value;
+                                       *iddb2=*iddb;
+                                       if(!rw)*iddb=*iddb-1;
+                               };
+                               if(rw) {
+                                       if(ret==defret) return 0;
+                                       return (char *)*iddb2;
+                               }
+                               return ret; // if first null return defret 
(ret=defret);
+                               
+                       };
+                       tmp1=tmp2+strsize;
+               } while ((tmp2[-1]!='\n' && tmp2[-1]!='&') || 
tmp2[strsize]!='='); // Johannes E. Schindelin Fix
+               tmp3=tmp1;
+
+               
+               pl->next=__ILWS_add_buffer(ClientInfo->mem,sizeof(struct 
_Post));
+               if(pl->next==NULL) {
+                       LWSERR(LE_MEMORY);
+                       if(rw) return 0;
+                       return defret;
+               };
+               pl->next->id=__ILWS_add_buffer(ClientInfo->mem,strsize+1);
+               if(pl->next->id==NULL) {
+                       LWSERR(LE_MEMORY);
+                       if(rw) return 0;
+                       return defret;
+               };
+               memcpy(pl->next->id,handle+rw,strsize);
+               pl->next->id[strsize]=0;        
+               if(idf==0) {
+                       pl->next->index=0;
+                       iddb=&pl->next->index;
+                       iddb2=&pl->next->idf;
+               };
+
+               pl->next->data=defret;
+               pl->next->next=NULL;
+                                                       
+               tmp1=strstr(tmp2,"&"); // goes to the next & (end of data)
+               tmp2+=strsize+1;       // tmp2 goes to start of data
+               if(tmp1==NULL) {
+                       size=strlen(tmp2);
+               } else {
+                       size=tmp1-tmp2;
+               };
+               if(size==0) {
+                       if(rw) return 0;
+                       return defret;
+               };
+               
+               pl->next->data=__ILWS_add_buffer(ClientInfo->mem,size+1);
+               if(pl->next->data==NULL) {
+                       LWSERR(LE_MEMORY);
+                       return defret;
+               };
+               j=0;
+               for(i=0;i<size;i++) { // hex translation here
+                       switch (ch=tmp2[j]) {
+                               case '+':
+                                       ch=' ';
+                                       break;
+                               case '%':
+                                       
+                                       tmp1=__ILWS_malloc(3);             
+                                       if(tmp1==NULL) {
+                                               LWSERR(LE_MEMORY);
+                                               if(rw) return 0;
+                                               return defret;
+                                       };
+                                       strncpy(tmp1,&tmp2[j+1],2);
+                                       tmp1[2]=0;
+                                       
+                                       ch=strtol(tmp1,NULL,16);
+                                       j+=2;
+                                       size-=2;
+                                       
+                                       __ILWS_free(tmp1);
+                                       break;
+                       };
+                       pl->next->data[i]=ch;
+                       j++;
+               };
+               pl->next->data[size]='\0';
+               ret=pl->next->data; // to the last
+               *iddb=*iddb+1;
+               idf++;
+               pl=pl->next;
+               //pl->next->data=ret;
+       };
+       return ret;
+}                                                        
+
+
+
+/*********************************************************************************************************/
+/*
+ * Function for MultiPart formdata
+ */
+struct _MultiPart __ILWS_MultiPart(char *handle) {
+       char *tmp1,*tmp2,*tmp3; 
+       int i;
+       char *name;
+       size_t namesize;
+       struct _MultiPart *ml=ClientInfo->MultiPartList;
+       struct _MultiPart defret={"","",0,""};
+       size_t strsize;
+       char *boundary; size_t boundarysize;
+       // IE C43o6Fn6Et74e65n6Et74-2DT54y79p70e65:3A 
20m6Du75l6Ct74i69p70a61r72t74/2Ff66o6Fr72m6D-2Dd64a61t74a61
+       // NS C43o6Fn6Et74e65n6Et74-2Dt74y79p70e65:3A 
20m6Du75l6Ct74i69p70a61r72t74/2Ff66o6Fr72m6D-2Dd64a61t74a61
+       tmp1=__ILWS_stristr(current_web_client->rbuf,"Content-type: 
multipart/form-data");      
+       if(tmp1==NULL) return defret;
+       if(ClientInfo->MultiPartList==NULL) {
+               
ClientInfo->MultiPartList=__ILWS_add_buffer(ClientInfo->mem,sizeof(struct 
_MultiPart));
+               if(ClientInfo->MultiPartList==NULL) {
+                       LWSERR(LE_MEMORY);
+                       return defret;
+               };
+               ClientInfo->MultiPartList->next=NULL;
+               ClientInfo->MultiPartList->id=NULL;
+               ClientInfo->MultiPartList->data=NULL;
+               ClientInfo->MultiPartList->filename=NULL;
+               ClientInfo->MultiPartList->size=0;
+               ml=ClientInfo->MultiPartList;
+       };
+       // Check if handle exists
+       while(ml->next!=NULL) {
+               if(ml->next->id!=NULL) {
+                       if(!strcmp(ml->next->id,handle)) {
+                               
+                               return *ml->next;
+                       };
+               };
+               ml=ml->next;
+       };      
+       
+       
+       strsize=strlen(handle);
+       ml->next=__ILWS_add_buffer(ClientInfo->mem,sizeof(struct _MultiPart));
+       if(ml->next==NULL) {
+               LWSERR(LE_MEMORY);
+               return defret;
+       };
+       ml->next->id=__ILWS_add_buffer(ClientInfo->mem,strsize+1);
+       if(ml->next->id==NULL) {
+               LWSERR(LE_MEMORY);
+               return defret;
+       };
+       memcpy(ml->next->id,handle,strsize);
+       ml->next->id[strsize]=0;
+       ml->next->data="";
+       ml->next->filename="";
+       ml->next->size=0;
+       ml->next->next=NULL;
+       
+       tmp1=strstr(tmp1,"boundary=");
+       if(tmp1==NULL) return defret;
+       tmp1+=9;
+       tmp2=strstr(tmp1,"\r\n");
+       if(tmp2<tmp1 || tmp2==NULL) return defret;
+       /* boundary */
+       boundarysize=tmp2-tmp1;
+       boundary=__ILWS_add_buffer(ClientInfo->mem,boundarysize+3);
+       if(boundary==NULL) {
+               LWSERR(LE_MEMORY);
+               return defret;
+       };
+       memcpy(boundary,tmp1,boundarysize);
+       boundary[boundarysize]=0;
+       
+       
+       /* handle */    
+       namesize=boundarysize+41+strlen(handle);
+       name=__ILWS_add_buffer(ClientInfo->mem,namesize+1);
+       if(name==NULL) {
+               LWSERR(LE_MEMORY);
+               return defret;
+       };
+       snprintf(name,namesize,"%s\r\nContent-Disposition: form-data; 
name=",boundary); 
+       namesize=strlen(name);
+       
+       tmp1=strstr(tmp1,"\r\n\r\n"); // go to data
+       if(tmp1==NULL) return defret;
+       
+       do {
+               i=memcmp(tmp1,name,namesize);   
+               if(i==0) {
+                       tmp1+=namesize;
+                       if(tmp1[0]=='\"')tmp1+=1;
+                       if(strncmp(tmp1,handle,strlen(handle))){
+                               i=1;
+                       }else {
+                               if((tmp1[strsize]!=' ') && 
(tmp1[strsize]!='\"') && (tmp1[strsize]!='\r') && (tmp1[strsize]!=';') ) i=1;
+                       };
+
+               }else { 
+                       tmp1+=1;
+               };
+       } while(i!=0 && 
(tmp1+namesize<current_web_client->rbuf+current_web_client->rbufsize)); // 
Search init of data
+       if(i!=0) return defret;
+       //tmp1+=namesize;
+       tmp2=strstr(tmp1,"filename="); // get filename
+       if(tmp2!=NULL) {
+               tmp2+=9;
+               if(tmp2[0]=='\"')tmp2+=1;
+               tmp3=strstr(tmp2,"\r\n");
+               
ml->next->filename=__ILWS_add_buffer(ClientInfo->mem,(tmp3-tmp2)+1);
+               if(ml->next->filename==NULL) {
+                       LWSERR(LE_MEMORY);
+                       return defret;
+               };
+               memcpy(ml->next->filename,tmp2,tmp3-tmp2);
+               ml->next->filename[tmp3-tmp2]='\0';
+               if(ml->next->filename[tmp3-tmp2-1]=='\"')
+                       ml->next->filename[tmp3-tmp2-1]='\0';
+               
+       };
+       tmp2=strstr(tmp1,"\r\n\r\n"); // data init
+       if(tmp2==NULL)return defret;
+       tmp2+=4;
+       tmp3=tmp2;
+       do {    
+               
+               i=memcmp(tmp3,boundary,boundarysize);  
+               if(i!=0)tmp3+=1;
+       } while(i!=0 && 
(tmp3+boundarysize<current_web_client->rbuf+current_web_client->rbufsize)); // 
End of data
+       if(i!=0) return defret;
+       tmp3-=4; // back "\r\n\r\n"
+
+       // copy data to node    
+       if(!(ml->next->data=__ILWS_add_buffer(ClientInfo->mem,(tmp3-tmp2)+1))) {
+               LWSERR(LE_MEMORY);
+               return defret;
+       };
+       memcpy(ml->next->data,tmp2,tmp3-tmp2);
+       ml->next->data[tmp3-tmp2]='\0';
+       ml->next->size=tmp3-tmp2;
+       
+       
+       
+       
+       return *ml->next;
+
+};
+
+/*********************************************************************************************************/
+/*
+ * Function for CookieData
+ */
+char *__ILWS_Cookie(char *handle) {
+       char *defret="";
+       char *tmp1,*tmp2,*ret;
+       int size;
+       int strsize;
+       struct _Cookie *cl=ClientInfo->CookieList;
+       
+       
+       tmp1=strstr(current_web_client->rbuf,"\nCookie: "); // start of cookie 
string
+       if(tmp1==NULL) { // no cookies
+               return defret;
+       };
+       tmp1+=8;
+       if(handle==NULL) {
+               return ClientInfo->CookieString;
+       };
+       
+       if(ClientInfo->CookieList==NULL) {
+               
+               
ClientInfo->CookieList=__ILWS_add_buffer(ClientInfo->mem,sizeof(struct 
_Cookie));
+               if(ClientInfo->CookieList==NULL) {
+                       LWSERR(LE_MEMORY);
+                       return defret;
+               };
+               ClientInfo->CookieList->next=NULL;
+               ClientInfo->CookieList->data=NULL;
+               ClientInfo->CookieList->id=NULL;
+               cl=ClientInfo->CookieList;
+       }
+       // First search if exists
+       while(cl->next!=NULL) {
+               if(cl->next->id!=NULL) {
+                       if(!strcmp(cl->next->id,handle)) {
+                               
+                               return cl->next->data;
+                       };
+               };
+               cl=cl->next;    
+       };
+       
+       strsize=strlen(handle);
+       if(!(cl->next=__ILWS_add_buffer(ClientInfo->mem,sizeof(struct 
_Cookie)))) {
+               LWSERR(LE_MEMORY);
+               return defret;
+       };
+       if(!(cl->next->id=__ILWS_add_buffer(ClientInfo->mem,strsize+1))) {
+               LWSERR(LE_MEMORY);
+               return defret;
+       };
+       memcpy(cl->next->id,handle,strsize);
+       cl->next->id[strsize]=0;
+       cl->next->data=defret;
+       cl->next->next=NULL;
+       do {
+               tmp2=strstr(tmp1,handle);
+               if(tmp2==NULL) {
+                       return defret;
+               }else if(tmp2[strsize]==';' && tmp2[-1]==' ') {
+                       cl->next->data=__ILWS_add_buffer(ClientInfo->mem,6);
+                       snprintf(cl->next->data,5,"True");
+                       return cl->next->data;
+               };
+               tmp1=tmp2+strsize;
+       }while(tmp2[-1]!=' ' || tmp2[strsize]!='=');
+       
+       tmp1=strstr(tmp2,";"); // end of data
+       tmp2+=strsize+1;     // start of data
+       if(tmp1==NULL) {
+               size=strstr(tmp2,"\r")-tmp2;
+               
+       } else {
+               size=tmp1-tmp2;
+       };
+       if(size<1) {
+               return defret;
+       };
+       
+       ret=__ILWS_add_buffer(ClientInfo->mem,size+1);
+       if(ret==NULL) {
+               LWSERR(LE_MEMORY);
+               return defret;
+       };
+       
+       memcpy(ret,tmp2,size);
+       ret[size]='\0';
+       cl->next->data=ret;
+       return cl->next->data;  
+};
+
+
+
+/*********************************************************************************************************/
+/*
+ * get whole query string
+ */
+char *__ILWS_clientinfo_getquerystring() {
+       char *tmp1,*tmp2,*ret;
+       char *defret="";
+       size_t size;
+        tmp1=strstr(current_web_client->rbuf,"?"); 
+        tmp2=strstr(current_web_client->rbuf,"HTTP");
+        if(tmp1!=NULL && tmp1<tmp2)
+                tmp1+=1;
+        else
+                return defret;
+       size=(tmp2-tmp1)-1;
+       ret=__ILWS_add_buffer(ClientInfo->mem,size+1);
+       if(ret==NULL) {
+               LWSERR(LE_MEMORY);
+               return defret;
+       };
+       memcpy(ret,tmp1,size);
+       ret[size]=0;
+       return ret;
+};
+
+
+/*********************************************************************************************************/
+/*
+ * get whole post data
+ */ 
+char *__ILWS_clientinfo_getpostdata() {
+       char *tmp1,*ret;
+       char *defret="";
+       size_t size;
+       tmp1=strstr(current_web_client->rbuf,"\r\n\r\n"); 
+       if(tmp1!=NULL && 
(tmp1+4)<(char*)(current_web_client->rbuf+current_web_client->rbufsize))
+               tmp1+=4;
+       else
+               return defret;
+       size=(current_web_client->rbuf+current_web_client->rbufsize)-tmp1;
+       ret=__ILWS_add_buffer(ClientInfo->mem,size+1);
+       if(ret==NULL) {
+               LWSERR(LE_MEMORY);
+               return defret;
+       };
+       memcpy(ret,tmp1,size);
+       ret[size]='\0';
+       return ret;
+}
+
+
+/*********************************************************************************************************/
+/* 
+ * Get authorization username
+ */
+char *__ILWS_clientinfo_getauthuser() {
+       char *tmp1,*tmp2,*ret, *out=NULL;
+       char *defret="";
+       size_t size;
+       
+       tmp1=strstr(current_web_client->rbuf,"Authorization: Basic");
+       if(tmp1==NULL) {
+               
+               return defret;
+       };
+       
+       tmp1+=21;
+       tmp2=strstr(tmp1,"\r\n");
+       if(tmp2==NULL) return defret;
+       size=(int)(tmp2-tmp1);
+       
+       ret=__ILWS_malloc(size+1);
+       if(ret==NULL) {
+               LWSERR(LE_MEMORY);
+               return defret;
+       };
+       memcpy(ret,tmp1,size);
+       ret[size]=0;
+       
+       out=__ILWS_malloc(size+1);
+       if(out==NULL) {
+               LWSERR(LE_MEMORY);
+               __ILWS_free(ret);
+               return defret;
+       };
+       
+       size=__ILWS_base64decode(out,ret);
+       out[size]='\0';
+       
+       
+       __ILWS_free(ret);
+       tmp2=strstr(out,":");
+       if(tmp2==NULL) return defret;
+       
+       ret=__ILWS_add_buffer(ClientInfo->mem,(tmp2-out)+1);
+       if(ret==NULL) {
+               LWSERR(LE_MEMORY);
+               __ILWS_free(out);
+               return defret;
+       };
+       memcpy(ret,out,tmp2-out);
+       ret[tmp2-out]=0;
+       
+       __ILWS_free(out);
+       return ret;
+}
+
+
+/*********************************************************************************************************/
+/*
+ * get authorization password
+ */
+char *__ILWS_clientinfo_getauthpass() {
+       char *tmp1,*tmp2,*ret, *out=NULL;
+       char *defret="";
+       size_t size;
+       
+       tmp1=strstr(current_web_client->rbuf,"Authorization: Basic");
+       if(tmp1==NULL) {
+               
+               return defret;
+       };
+       
+       tmp1+=21;
+       tmp2=strstr(tmp1,"\r\n");
+       if(tmp2==NULL) return defret;
+       size=(int)(tmp2-tmp1);
+       
+       ret=__ILWS_malloc(size+1);
+       if(ret==NULL) {
+               LWSERR(LE_MEMORY);
+               return defret;
+       };
+       memcpy(ret,tmp1,size);
+       ret[size]=0;
+       
+       out=__ILWS_malloc(size+1);
+       if(out==NULL) {
+               LWSERR(LE_MEMORY);
+               __ILWS_free(ret);
+               return defret;
+       };
+       
+       size=__ILWS_base64decode(out,ret);
+       out[size]='\0';
+       
+       
+       __ILWS_free(ret);
+       tmp1=strstr(out,":")+1;
+       tmp2=out+strlen(out);
+       
+       ret=__ILWS_add_buffer(ClientInfo->mem,(tmp2-tmp1)+1);
+       if(ret==NULL) {
+               LWSERR(LE_MEMORY);
+               __ILWS_free(out);
+               return defret;
+       };
+       memcpy(ret,tmp1,tmp2-tmp1);
+       ret[tmp2-tmp1]=0;
+       
+       __ILWS_free(out);
+       return ret;
+}
+
+
+/*********************************************************************************************************/
+/*
+ * get method (GET POST HEAD etc)
+ */
+char *__ILWS_clientinfo_getmethod() {
+       char *tmp1,*ret;
+       char *defret="";
+       size_t size;
+       tmp1=strstr(current_web_client->rbuf," "); // first space
+       if(tmp1==NULL) {
+               return defret;
+       };
+       size=tmp1-current_web_client->rbuf;
+       ret=__ILWS_add_buffer(ClientInfo->mem,size+1);
+       if(ret==NULL) {
+               LWSERR(LE_MEMORY);
+               return defret;
+       };
+       memcpy(ret,current_web_client->rbuf,size);
+       ret[size]=0;
+       return ret;
+}
+
+
+/*********************************************************************************************************/
+/*
+ * get request name (GET /taltal HTTP/1.0) returning /taltal
+ */
+char *__ILWS_clientinfo_getreqname() {
+       char *ret;
+       char *tmp1=strstr(current_web_client->rbuf,"/"); // Must have /
+       char *tmp2=strstr(tmp1,"?");
+       char *tmp3=strstr(tmp1," HTTP");
+       char *defret="";
+       size_t i,j;
+       int ch;
+       size_t size=0;
+       if(tmp1==NULL || tmp3==NULL) return defret;
+       if(tmp2==NULL || tmp2>tmp3) {
+               tmp2=tmp3;
+       };
+       //tmp1+=1;
+       size=tmp2-tmp1;
+       if(size<1) 
+               return defret;
+       ret=__ILWS_add_buffer(ClientInfo->mem,size+1);
+       if(ret==NULL) {
+               LWSERR(LE_MEMORY);
+               return defret;
+       };
+       j=0;
+       for(i=0;i<size;i++) { // hex translation here
+               switch (ch=tmp1[j]) {
+                       case '+':
+                               ch=' ';
+                               break;
+                       case '%':
+                               
+                               tmp2=__ILWS_malloc(3);             
+                               if(tmp2==NULL) {
+                                       LWSERR(LE_MEMORY);
+                                       return defret;
+                               };
+                               strncpy(tmp2,&tmp1[j+1],2);
+                               tmp2[2]=0;
+                               
+                               ch=strtol(tmp2,NULL,16);
+                               j+=2;
+                               size-=2;
+                               __ILWS_free(tmp2);
+                               break;
+               };
+               ret[i]=ch;
+               j++;
+       };
+       //pl->next->data[size]='\0';
+       //memcpy(ret,tmp1,size);
+       ret[size]=0;
+       return ret;
+}         
+/*********************************************************************************************************/
+/*
+ *     Get config entry (new on 0.5.0)
+ */
+char *__ILWS_Conf(const char *topic,const char *key) {
+       struct web_server *server=current_web_server;
+       FILE *tmpf;
+       struct stat statf; // tested only on WIN
+       char *defret="";
+       char *dataconf;
+       char *tmp1,*tmp2,*tmp3;
+       long tmpsize=0;
+       int sizec;
+       // Config revive tested only on WIN
+       if(server->conffile!=NULL) {
+               stat(server->conffile,&statf);  
+               if(statf.st_mtime>server->conffiletime) {
+                       tmpf=fopen(server->conffile,"r");
+                       if(tmpf!=NULL) {
+                               free(server->dataconf);
+                               fseek(tmpf,SEEK_SET,SEEK_END);
+                               sizec=ftell(tmpf);
+                               fseek(tmpf,0,SEEK_SET);
+                               server->dataconf=malloc(sizec+1);
+                               fread(server->dataconf,sizec,1,tmpf);
+                               server->dataconf[sizec-9]=0; // 9 is temporary
+                               server->conffiletime=statf.st_mtime;
+                               fclose(tmpf);
+                       };
+               };
+       };
+       
+       dataconf=__ILWS_stristr(server->dataconf,topic);
+       if(dataconf==NULL) {
+               return defret;
+       };
+       dataconf+=strlen(topic);
+       
+       do {
+               tmp1=__ILWS_stristr(dataconf,key);
+               dataconf+=1;
+               if(dataconf[0]==0) { 
+                       return defret;
+               };
+               if(dataconf[0]=='[' && dataconf[-1]=='\n') { 
+                       return defret;
+               };
+       }while(!(tmp1!=NULL && tmp1[-1]=='\n' && tmp1[strlen(key)]=='='));
+       
+       
+       tmp1+=strlen(key)+1;
+       tmp2=__ILWS_stristr(tmp1,"\n");
+       if(tmp2==NULL) {
+               tmp2=tmp1+strlen(tmp1);
+       };
+       tmpsize=tmp2-tmp1;
+       tmp3=__ILWS_add_buffer(ClientInfo->mem,tmpsize+1);
+       memcpy(tmp3,tmp1,tmpsize);
+       tmp3[tmpsize]=0;
+       return tmp3;
+       
+               
+               
+};    


Property changes on: GNUnet/libwebserver/src/clientinfo.c
___________________________________________________________________
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/src/clientinfo.h
===================================================================
--- GNUnet/libwebserver/src/clientinfo.h        2006-08-18 20:37:47 UTC (rev 
3245)
+++ GNUnet/libwebserver/src/clientinfo.h        2006-08-18 21:41:52 UTC (rev 
3246)
@@ -0,0 +1,118 @@
+/* Copyrights 2002 Luis Figueiredo (address@hidden) All rights reserved. 
+ *
+ * See the LICENSE file
+ *
+ * The origin of this software must not be misrepresented, either by
+ * explicit claim or by omission.  Since few users ever read sources,
+ * credits must appear in the documentation.
+ *
+ * date: Wed Oct  9 19:05:48 GMT 2002
+ *
+ *
+ * --
+ *
+ */
+
+#ifndef _CLIENTINFO_H_
+#define _CLIENTINFO_H_
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <stdio.h>
+#include <fcntl.h>
+#include <string.h>
+
+#include "outstream.h"
+#include "client.h"
+#include "utils.h"
+#include "memory.h"
+#include "server.h"
+#include "error.h"
+
+
+ 
+/*
+ * Next's structs are redudant but it is an case of logic (spell)
+ */
+struct _Header {
+       char *id;
+       char *data;
+       struct _Header *next;
+};
+struct _Query {
+       unsigned int index;
+       unsigned int idf;
+       char *id;
+       char *data;
+       struct _Query *next;
+};
+struct _Post {
+       unsigned int index;
+       unsigned int idf;
+       char *id;
+       char *data;
+       struct _Post *next;
+};
+
+struct _MultiPart {
+       char *id;
+       char *data;
+       unsigned int size;
+       char *filename;
+       struct _MultiPart *next;
+};
+
+struct _Cookie {
+       char *id;
+       char *data;
+       struct _Cookie *next;
+};
+
+
+extern struct ClientInfo {
+       int outfd;
+       char *inetname;
+       char *request;
+       char *method;
+       char *user;
+       char *pass;
+       
+       char *(*Header)(char *);
+       char *(*Query)(char *);
+       char *(*Post)(char *);
+       char *(*Cookie)(char *); // TODO
+       char *(*Conf)(const char *,const char *); // new on 0.5.0
+       struct _MultiPart (*MultiPart)(char *); 
+       // not necessary for web_server.h
+       char *QueryString;
+       char *CookieString;
+       char *PostData;
+       struct memrequest *mem;
+       struct _Header *HeaderList; // Not necessary for web_server.h
+       struct _Query *QueryList; // Not necessary for web_server.h
+       struct _Post *PostList; // Not necessary for web_server.h
+       struct _MultiPart *MultiPartList; // Not necessary for web_server.h
+       struct _Cookie *CookieList; // Not necessary for web_server.h
+} *ClientInfo;      //tochange
+
+
+void __ILWS_init_clientinfo();
+void __ILWS_free_clientinfo();
+char *__ILWS_clientinfo_getauthuser();
+char *__ILWS_clientinfo_getauthpass();
+char *__ILWS_clientinfo_getquerystring();
+char *__ILWS_clientinfo_getpostdata();
+char *__ILWS_clientinfo_getcookiestring();
+char *__ILWS_clientinfo_getmethod();
+char *__ILWS_clientinfo_getreqname();
+char *__ILWS_Header(char *);
+char *__ILWS_Query(char *);
+char *__ILWS_Post(char *);
+struct _MultiPart __ILWS_MultiPart(char *);
+char *__ILWS_Cookie(char *);
+char *__ILWS_Conf(const char *,const char *);
+
+#endif
+


Property changes on: GNUnet/libwebserver/src/clientinfo.h
___________________________________________________________________
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/src/config.h
===================================================================
--- GNUnet/libwebserver/src/config.h    2006-08-18 20:37:47 UTC (rev 3245)
+++ GNUnet/libwebserver/src/config.h    2006-08-18 21:41:52 UTC (rev 3246)
@@ -0,0 +1,133 @@
+/* include/config.h.  Generated from config.h.in by configure.  */
+/* include/config.h.in.  Generated from configure.ac by autoheader.  */
+
+/* Define to 1 if you have the <arpa/inet.h> header file. */
+#define HAVE_ARPA_INET_H 1
+
+/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */
+/* #undef HAVE_DOPRNT */
+
+/* Define to 1 if you have the <fcntl.h> header file. */
+#define HAVE_FCNTL_H 1
+
+/* Define to 1 if you have the `inet_ntoa' function. */
+#define HAVE_INET_NTOA 1
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#define HAVE_INTTYPES_H 1
+
+/* Define to 1 if you have the <limits.h> header file. */
+#define HAVE_LIMITS_H 1
+
+/* Define to 1 if your system has a GNU libc compatible `malloc' function, and
+   to 0 otherwise. */
+#define HAVE_MALLOC 1
+
+/* Define to 1 if you have the <memory.h> header file. */
+#define HAVE_MEMORY_H 1
+
+/* Define to 1 if you have the `memset' function. */
+#define HAVE_MEMSET 1
+
+/* Define to 1 if you have the <netinet/in.h> header file. */
+#define HAVE_NETINET_IN_H 1
+
+/* Define to 1 if your system has a GNU libc compatible `realloc' function,
+   and to 0 otherwise. */
+#define HAVE_REALLOC 1
+
+/* Define to 1 if you have the `select' function. */
+#define HAVE_SELECT 1
+
+/* Define to 1 if you have the `socket' function. */
+#define HAVE_SOCKET 1
+
+/* Define to 1 if you have the <stddef.h> header file. */
+#define HAVE_STDDEF_H 1
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#define HAVE_STDINT_H 1
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#define HAVE_STDLIB_H 1
+
+/* Define to 1 if you have the `strchr' function. */
+#define HAVE_STRCHR 1
+
+/* Define to 1 if you have the `strerror' function. */
+#define HAVE_STRERROR 1
+
+/* Define to 1 if you have the `strftime' function. */
+#define HAVE_STRFTIME 1
+
+/* Define to 1 if you have the <strings.h> header file. */
+#define HAVE_STRINGS_H 1
+
+/* Define to 1 if you have the <string.h> header file. */
+#define HAVE_STRING_H 1
+
+/* Define to 1 if you have the `strncasecmp' function. */
+#define HAVE_STRNCASECMP 1
+
+/* Define to 1 if you have the `strstr' function. */
+#define HAVE_STRSTR 1
+
+/* Define to 1 if you have the `strtol' function. */
+#define HAVE_STRTOL 1
+
+/* Define to 1 if you have the <sys/socket.h> header file. */
+#define HAVE_SYS_SOCKET_H 1
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#define HAVE_SYS_STAT_H 1
+
+/* Define to 1 if you have the <sys/time.h> header file. */
+#define HAVE_SYS_TIME_H 1
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#define HAVE_SYS_TYPES_H 1
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#define HAVE_UNISTD_H 1
+
+/* Define to 1 if you have the `vprintf' function. */
+#define HAVE_VPRINTF 1
+
+/* Define to the address where bug reports for this package should be sent. */
+#define PACKAGE_BUGREPORT "address@hidden"
+
+/* Define to the full name of this package. */
+#define PACKAGE_NAME "libwebserver"
+
+/* Define to the full name and version of this package. */
+#define PACKAGE_STRING "libwebserver 0.5.3-GNUnet"
+
+/* Define to the one symbol short name of this package. */
+#define PACKAGE_TARNAME "libwebserver"
+
+/* Define to the version of this package. */
+#define PACKAGE_VERSION "0.5.3-GNUnet"
+
+/* Define as the return type of signal handlers (`int' or `void'). */
+#define RETSIGTYPE void
+
+/* Define to 1 if you have the ANSI C header files. */
+#define STDC_HEADERS 1
+
+/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
+#define TIME_WITH_SYS_TIME 1
+
+/* Define to 1 if your <sys/time.h> declares `struct tm'. */
+/* #undef TM_IN_SYS_TIME */
+
+/* Define to empty if `const' does not conform to ANSI C. */
+/* #undef const */
+
+/* Define to rpl_malloc if the replacement function should be used. */
+/* #undef malloc */
+
+/* Define to rpl_realloc if the replacement function should be used. */
+/* #undef realloc */
+
+/* Define to `unsigned int' if <sys/types.h> does not define. */
+/* #undef size_t */


Property changes on: GNUnet/libwebserver/src/config.h
___________________________________________________________________
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/src/debug.h
===================================================================
--- GNUnet/libwebserver/src/debug.h     2006-08-18 20:37:47 UTC (rev 3245)
+++ GNUnet/libwebserver/src/debug.h     2006-08-18 21:41:52 UTC (rev 3246)
@@ -0,0 +1,29 @@
+/* Copyrights 2002 Luis Figueiredo (address@hidden) All rights reserved. 
+ *
+ * See the LICENSE file
+ *
+ * The origin of this software must not be misrepresented, either by
+ * explicit claim or by omission.  Since few users ever read sources,
+ * credits must appear in the documentation.
+ *
+ * date: Sat Mar 30 14:16:05 GMT 2002
+ *
+ *     DEBUG macros
+ *
+ */
+
+#ifndef _DEBUG_H_
+#define _DEBUG_H_
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif         
+
+#ifdef DEBUG
+       #define IFDEBUG(x) x
+#else
+       #define IFDEBUG(x)
+#endif
+
+
+#endif


Property changes on: GNUnet/libwebserver/src/debug.h
___________________________________________________________________
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/src/error.c
===================================================================
--- GNUnet/libwebserver/src/error.c     2006-08-18 20:37:47 UTC (rev 3245)
+++ GNUnet/libwebserver/src/error.c     2006-08-18 21:41:52 UTC (rev 3246)
@@ -0,0 +1,34 @@
+/* Copyrights 2002 Luis Figueiredo (address@hidden) All rights reserved. 
+ *
+ * See the LICENSE file
+ *
+ * The origin of this software must not be misrepresented, either by
+ * explicit claim or by omission.  Since few users ever read sources,
+ * credits must appear in the documentation.
+ *
+ * date: Wed Oct  9 19:56:22 GMT 2002
+ *
+ * -- Error functions
+ *
+ */
+
+
+#include "error.h"
+
+
+const char *libws_error_table[]={
+       "Memory error",
+       "Filesystem error",
+       "Network error"
+};
+
+
+void libws_error(unsigned int code, const char *fmt, ...) {
+       va_list args;
+       
+       va_start(args,fmt);
+       fprintf(stderr,"%s: ",libws_error_table[code]); 
+       vfprintf(stderr,fmt,args);
+       va_end(args);
+       fflush(stderr);
+};


Property changes on: GNUnet/libwebserver/src/error.c
___________________________________________________________________
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/src/error.h
===================================================================
--- GNUnet/libwebserver/src/error.h     2006-08-18 20:37:47 UTC (rev 3245)
+++ GNUnet/libwebserver/src/error.h     2006-08-18 21:41:52 UTC (rev 3246)
@@ -0,0 +1,33 @@
+/* Copyrights 2002 Luis Figueiredo (address@hidden) All rights reserved. 
+ *
+ * See the LICENSE file
+ *
+ * The origin of this software must not be misrepresented, either by
+ * explicit claim or by omission.  Since few users ever read sources,
+ * credits must appear in the documentation.
+ *
+ * date: Tue 9 Sep 06:45:13 2003 GMT
+ *
+ *     libwebserver error codes
+ *
+ */
+
+
+#ifndef _ERROR_H_
+#define _ERROR_H_
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+
+
+#define LE_MEMORY  0   // memory error
+#define LE_FILESYS 1   // file error 
+#define LE_NET     2   // net error
+
+#define LWSERR(x) libws_error(x,"file: %s - line: %d\n",__FILE__, __LINE__);
+
+void libws_error(unsigned int, const char *,...);
+
+
+#endif


Property changes on: GNUnet/libwebserver/src/error.h
___________________________________________________________________
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/src/fnmatch.c
===================================================================
--- GNUnet/libwebserver/src/fnmatch.c   2006-08-18 20:37:47 UTC (rev 3245)
+++ GNUnet/libwebserver/src/fnmatch.c   2006-08-18 21:41:52 UTC (rev 3246)
@@ -0,0 +1,195 @@
+/*
+ * Luis Figueiredo - why remake the wheel, this functions feets perfectly
+ * and the credits still here :)
+ */
+
+/*
+ * Copyright (c) 1989, 1993, 1994
+ *      The Regents of the University of California.  All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Guido van Rossum.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *      This product includes software developed by the University of
+ *      California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#if defined(LIBC_SCCS) && !defined(lint)
+static char sccsid[] = "@(#)fnmatch.c  8.2 (Berkeley) 4/16/94";
+#endif /* LIBC_SCCS and not lint */
+
+/*
+ * Function fnmatch() as specified in POSIX 1003.2-1992, section B.6.
+ * Compares a filename or pathname to a pattern.
+ */
+
+#include "fnmatch.h"
+#include <string.h>
+
+#define        EOS     '\0'
+
+static const char *rangematch(const char *, int, int);
+
+int fnmatch(const char *pattern, const char *string, int flags) {
+    const char *stringstart;
+    char c, test;
+
+    for (stringstart = string;;) {
+       switch (c = *pattern++) {
+       case EOS:
+           return (*string == EOS ? 0 : FNM_NOMATCH);
+       case '?':
+           if (*string == EOS) {
+               return (FNM_NOMATCH);
+           }
+           if (*string == '/' && (flags & FNM_PATHNAME)) {
+               return (FNM_NOMATCH);
+           }
+           if (*string == '.' && (flags & FNM_PERIOD) &&
+               (string == stringstart ||
+                ((flags & FNM_PATHNAME) && *(string - 1) == '/'))) {
+               return (FNM_NOMATCH);
+           }
+           ++string;
+           break;
+       case '*':
+           c = *pattern;
+           /* Collapse multiple stars. */
+           while (c == '*') {
+               c = *++pattern;
+           }
+
+           if (*string == '.' && (flags & FNM_PERIOD) &&
+               (string == stringstart ||
+                ((flags & FNM_PATHNAME) && *(string - 1) == '/'))) {
+               return (FNM_NOMATCH);
+           }
+
+           /* Optimize for pattern with * at end or before /. */
+           if (c == EOS) {
+               if (flags & FNM_PATHNAME) {
+                   return (strchr(string, '/') == NULL ? 0 : FNM_NOMATCH);
+               }
+               else {
+                   return (0);
+               }
+           }
+           else if (c == '/' && flags & FNM_PATHNAME) {
+               if ((string = strchr(string, '/')) == NULL) {
+                   return (FNM_NOMATCH);
+               }
+               break;
+           }
+
+           /* General case, use recursion. */
+           while ((test = *string) != EOS) {
+               if (!fnmatch(pattern, string, flags & ~FNM_PERIOD)) {
+                   return (0);
+               }
+               if (test == '/' && flags & FNM_PATHNAME) {
+                   break;
+               }
+               ++string;
+           }
+           return (FNM_NOMATCH);
+       case '[':
+           if (*string == EOS) {
+               return (FNM_NOMATCH);
+           }
+           if (*string == '/' && flags & FNM_PATHNAME) {
+               return (FNM_NOMATCH);
+           }
+           if (*string == '.' && (flags & FNM_PERIOD) &&
+               (string == stringstart ||
+                ((flags & FNM_PATHNAME) && *(string - 1) == '/'))) {
+               return (FNM_NOMATCH);
+           }
+           if ((pattern = rangematch(pattern, *string, flags)) == NULL) {
+               return (FNM_NOMATCH);
+           }
+           ++string;
+           break;
+       case '\\':
+           if (!(flags & FNM_NOESCAPE)) {
+               if ((c = *pattern++) == EOS) {
+                   c = '\\';
+                   --pattern;
+               }
+           }
+           /* FALLTHROUGH */
+       default:
+           if (c != *string) {
+               return (FNM_NOMATCH);
+           }
+           string++;
+           break;
+       }
+    /* NOTREACHED */
+    }
+}
+
+static const char *rangematch(const char *pattern, int test, int flags) {
+    int negate, ok;
+    char c, c2;
+
+    /*
+     * A bracket expression starting with an unquoted circumflex
+     * character produces unspecified results (IEEE 1003.2-1992,
+     * 3.13.2).  This implementation treats it like '!', for
+     * consistency with the regular expression syntax.
+     * J.T. Conklin (address@hidden)
+     */
+    if ((negate = (*pattern == '!' || *pattern == '^'))) {
+       ++pattern;
+    }
+
+    for (ok = 0; (c = *pattern++) != ']';) {
+        if (c == '\\' && !(flags & FNM_NOESCAPE)) {
+           c = *pattern++;
+       }
+       if (c == EOS) {
+           return (NULL);
+       }
+       if (*pattern == '-' && (c2 = *(pattern + 1)) != EOS && c2 != ']') {
+           pattern += 2;
+           if (c2 == '\\' && !(flags & FNM_NOESCAPE)) {
+               c2 = *pattern++;
+           }
+           if (c2 == EOS) {
+               return (NULL);
+           }
+           if ((c <= test && test <= c2)) {
+               ok = 1;
+           }
+       }
+       else if ((c == test)) {
+           ok = 1;
+       }
+    }
+    return (ok == negate ? NULL : pattern);
+}


Property changes on: GNUnet/libwebserver/src/fnmatch.c
___________________________________________________________________
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/src/fnmatch.h
===================================================================
--- GNUnet/libwebserver/src/fnmatch.h   2006-08-18 20:37:47 UTC (rev 3245)
+++ GNUnet/libwebserver/src/fnmatch.h   2006-08-18 21:41:52 UTC (rev 3246)
@@ -0,0 +1,59 @@
+/*-
+ * Copyright (c) 1992, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *     This product includes software developed by the University of
+ *     California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)fnmatch.h   8.1 (Berkeley) 6/2/93
+ */
+
+/* This file has been modified by the Apache Group. */
+
+#ifndef        _FNMATCH_H_
+#define        _FNMATCH_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define        FNM_NOMATCH     1       /* Match failed. */
+
+#define        FNM_NOESCAPE    0x01    /* Disable backslash escaping. */
+#define        FNM_PATHNAME    0x02    /* Slash must be matched by slash. */
+#define        FNM_PERIOD      0x04    /* Period must be matched by period. */
+/* This flag is an Apache addition */
+#define FNM_CASE_BLIND  0x08    /* Compare characters case-insensitively. */
+
+int fnmatch(const char *, const char *, int);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !_FNMATCH_H_ */


Property changes on: GNUnet/libwebserver/src/fnmatch.h
___________________________________________________________________
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/src/gethandler.c
===================================================================
--- GNUnet/libwebserver/src/gethandler.c        2006-08-18 20:37:47 UTC (rev 
3245)
+++ GNUnet/libwebserver/src/gethandler.c        2006-08-18 21:41:52 UTC (rev 
3246)
@@ -0,0 +1,96 @@
+/* Copyrights 2002 Luis Figueiredo (address@hidden) All rights reserved. 
+ *
+ * See the LICENSE file
+ *
+ * The origin of this software must not be misrepresented, either by
+ * explicit claim or by omission.  Since few users ever read sources,
+ * credits must appear in the documentation.
+ *
+ * date: Sat Mar 30 14:44:42 GMT 2002
+ *
+ * -- handlers functions
+ *
+ */
+
+
+
+#include "gethandler.h"
+
+
+/*********************************************************************************************************/
+/*
+ * initializate (allocate) handler list
+ */
+struct gethandler *__ILWS_init_handler_list() {
+       struct gethandler *ret;
+       
+       ret=__ILWS_malloc(sizeof(struct gethandler));
+       if(ret==NULL) {
+               LWSERR(LE_MEMORY);
+               return NULL;
+       };
+       ret->next=NULL;
+       ret->hdl.func=NULL; // or path
+       ret->flag=0;
+       ret->str=NULL;
+       return ret;
+}
+
+/*********************************************************************************************************/
+/* 
+ * add an handler to list
+ */
+int __ILWS_add_handler(struct gethandler *handler, const char *mstr, void 
(*func)(), char *path, int flag, int type) {
+       struct gethandler *temp=handler;
+       while(temp->next!=NULL)temp=temp->next;
+       
+       temp->next=__ILWS_malloc(sizeof(struct gethandler));
+       if(temp->next==NULL) {
+               LWSERR(LE_MEMORY);
+               return 0;
+       };
+       
+       temp->next->str=__ILWS_malloc(strlen(mstr)+1);
+       if(temp->next->str==NULL) {
+               __ILWS_free(temp->next); // free last malloced
+               LWSERR(LE_MEMORY);
+               return 0;
+       };
+       memcpy(temp->next->str,mstr,strlen(mstr));
+       temp->next->str[strlen(mstr)]='\0';
+       
+       temp->next->type=type;
+       switch (temp->next->type) {
+               case 0:
+                       temp->next->hdl.func=func;         // for function
+                       break;
+               case 1: // new on 0.5.2            // directory or cgi
+               case 2:
+                       if(!(temp->next->hdl.path=strdup(path))) {
+                               __ILWS_free(temp->next->str);
+                               __ILWS_free(temp->next);
+                               LWSERR(LE_MEMORY);
+                               return 0;
+                       };
+                       
+                       break;
+       };
+       
+       temp->next->flag=flag;
+    temp->next->next=NULL;
+    return 1;
+}                         
+
+/*********************************************************************************************************/
+/* 
+ * Deletes the entire handler list
+ */
+void __ILWS_delete_handler_list(struct gethandler *handler) {
+       struct gethandler *next;
+       
+       while(handler) {
+               next = handler->next;
+               __ILWS_free(handler);
+               handler = next;
+       }
+}


Property changes on: GNUnet/libwebserver/src/gethandler.c
___________________________________________________________________
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/src/gethandler.h
===================================================================
--- GNUnet/libwebserver/src/gethandler.h        2006-08-18 20:37:47 UTC (rev 
3245)
+++ GNUnet/libwebserver/src/gethandler.h        2006-08-18 21:41:52 UTC (rev 
3246)
@@ -0,0 +1,60 @@
+/* Copyrights 2002 Luis Figueiredo (address@hidden) All rights reserved. 
+ *
+ * See the LICENSE file
+ *
+ * The origin of this software must not be misrepresented, either by
+ * explicit claim or by omission.  Since few users ever read sources,
+ * credits must appear in the documentation.
+ *
+ * date: Sat Mar 30 14:44:42 GMT 2002
+ *
+ *
+ * --
+ *
+ */
+
+
+#ifndef _GETHANDLER_H_
+#define _GETHANDLER_H_
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif         
+#include <stdio.h>
+
+
+#include "memory.h"
+#include "error.h"
+
+
+#define MATCHMAX 200
+
+//#define WS_LOCAL 0x1
+#define WS_DYNVAR 0x8
+#define WS_USELEN 0x10
+
+
+/*********************
+ * get handler types *
+ *********************/
+#define GH_FUNCTION 0   // new on 0.5.2
+#define GH_DIRECTORY 1  // new on 0.5.2
+#define GH_CGI 2        // new on 0.5.2 (just the flag)
+
+
+struct gethandler {
+       char *str;
+       int type;           // new on 0.5.2  types
+       union hdl_u{        // changed on 0.5.3 named union (Hilobok Andrew 
(address@hidden) said that wasn't compiling on FreeBSD)
+               void (*func)();   // it is a function
+               char *path;       // it is a path (dir or cgi)
+       }hdl;
+       int flag; 
+       struct gethandler *next;
+};      
+
+struct gethandler *__ILWS_init_handler_list();
+int __ILWS_add_handler(struct gethandler *,const char *,void (*func)(),char *, 
int,int);
+void __ILWS_delete_handler_list(struct gethandler *);
+
+#endif


Property changes on: GNUnet/libwebserver/src/gethandler.h
___________________________________________________________________
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/src/logo.h
===================================================================
--- GNUnet/libwebserver/src/logo.h      2006-08-18 20:37:47 UTC (rev 3245)
+++ GNUnet/libwebserver/src/logo.h      2006-08-18 21:41:52 UTC (rev 3246)
@@ -0,0 +1,396 @@
+/*
+ * by data2header by Luis Figueiredo (address@hidden)
+ */
+#ifndef __LOGO_H_
+#define __LOGO_H_
+
+char 
_logo[]="\x47\x49\x46\x38\x39\x61\x5\x1\x45\x0\xE7\x0\x0\x2\x2\x2\xFE\xFE\xFD\xF0\xF2\xF5\xE8\xED\xF0"
+"\xDC\xE8\xEE\xBD\xC1\xC6\x68\x71\x7C\x60\x16\x7\x7A\x1C\xA\xA9\xC8\xDD\x9E\xC3\xDA\x94\xBD\xD8\x8C\xBB"
+"\xD6\x86\xB6\xD6\x15\x26\x3F\x1B\x2C\x49\x1F\x32\x4D\x24\x38\x54\x30\x4A\x66\x4E\x5C\x68\x6E\x7E\x85\xAB"
+"\xAE\xB2\xF6\xF6\xF7\xD6\xE1\xE8\xC8\xDA\xE6\xC5\xC7\xC0\xB0\xBC\xC6\x97\xAA\xB5\x8E\x96\x9B\x5F\x60\x62"
+"\x39\x45\x48\x1F\x26\x23\x7\xA\xD\x4A\x10\x6\x34\xB\x3\x3D\xE\x6\x70\x1C\xB\x9F\x24\xE\xE7\x5C"
+"\x45\x3B\x5C\x78\xD3\xD4\xD4\x7C\x89\x90\xF\x12\x10\x54\x13\x6\xCA\x36\x1C\xB0\xD1\xE5\x5D\x94\xB3\x3D"
+"\x62\x7F\x1F\x22\x19\xD6\x4C\x35\x70\xB0\xD0\xA\x22\x43\x2C\x44\x60\x2E\x2F\x1F\xE9\x69\x4F\xBB\xD4\xE6"
+"\x80\xCA\xEB\x7D\xC6\xE8\x79\xC0\xE1\x73\xB8\xDA\x69\xAA\xCA\x66\xA4\xC6\x58\x9B\xC4\x4D\x8D\xB5\x51\x82"
+"\xA1\x4A\x76\x94\x33\x4E\x68\x28\x3E\x5A\x4D\x4D\x4F\x78\x80\x87\x3D\x3E\x3D\xF\x16\x1B\x8C\x20\xC\xFC"
+"\x7F\x64\x83\xD0\xF1\x41\x68\x85\x2A\x38\x3E\x3F\x45\x2F\x13\x1A\x23\x35\x54\x71\x62\x9C\xBD\x12\x1E\x2B"
+"\x49\x72\x8F\x4E\x7C\x9B\xD0\x41\x27\x58\x88\xA6\x28\x68\x93\x38\x53\x5E\x17\x22\x26\xDA\x56\x3B\x5B\x8E"
+"\xAB\xF6\x72\x5C\x6F\x6F\x42\xFC\xFC\xD1\xFD\xFE\xC6\x66\x4A\xC\x99\xEE\xFE\x45\x6E\x8C\xE0\xE1\x8C\xEE"
+"\xE9\x8B\x21\x6\x2\xA3\xFC\xFE\xC8\xFE\xFD\xFD\xFE\xDF\xFA\xFB\xB8\xFD\xFC\xA4\x86\xA6\x7A\xB0\xA8\x2E"
+"\xF4\xF0\x88\x9A\xA4\x72\x58\x3B\x1E\x18\x16\x2\xB3\xB0\x5D\xD0\xCF\x64\xFD\xFD\x71\xFE\xFD\x89\xFE\xFC"
+"\x5C\xFE\xFD\x49\xFE\xFD\x20\x70\x6B\x15\x3C\x39\x13\x89\x81\x1E\x4B\x4A\x2B\xB9\x2B\x10\xBC\xC0\x7E\x28"
+"\x26\xB\x9C\x98\x40\xF2\xEC\x69\xC7\xB8\x3E\x90\x8C\x3F\x7B\x7B\x32\x31\x2F\xB\x1A\x6\x2\x1C\x1A\x7"
+"\x7D\x98\x9F\xEC\xE2\x6A\x1F\x2E\x35\x90\xDD\xF9\x46\x56\x60\x88\xDF\xFE\x61\x5A\x13\x7C\x7E\x3E\x50\x49"
+"\xF\xFE\xFB\x32\xCC\xC5\x49\x7E\x71\x2E\xBC\xB5\x2C\x9A\x91\x17\xD2\xC5\x21\x97\xA8\x84\xFD\xEE\x1D\x6E"
+"\x7E\x4A\xDF\xD6\x3D\xF3\xE7\x41\x71\x6E\x2C\xB4\xD4\xAE\xFE\xD0\x5E\x82\x5C\x28\x20\x1E\x5\x51\x54\x2A"
+"\xD0\x98\x34\xFB\xF0\x4B\xD5\xA7\x2F\xFA\xC6\x5E\xB9\x9A\x1F\xFE\xBD\x3F\xFE\xD9\x37\x92\x91\x78\xF6\xAA"
+"\x3D\x8E\x5A\x1D\x38\x82\xB0\x5A\x6B\x69\xB5\x5E\x23\x42\x26\x1A\x51\x55\x44\xCE\xB7\x21\x25\x22\x7\xE5"
+"\xD9\x18\x7C\x32\x19\xAA\x5B\x2A\x8A\x38\x1C\x9E\x4A\x20\xA8\x3E\x26\xB6\x72\x26\xDC\x91\x26\xAE\x5A\x22"
+"\xCE\xC3\x67\xB7\x80\x28\x98\x6E\x22\x68\x30\x17\x56\x2A\xE\x4E\x26\xE\x96\x56\x1C\xAE\x70\x20\x2B\xB"
+"\x3\x36\x39\x2B\x16\x22\x3D\x17\x22\x2A\x9\xE\x11\x7E\xB0\xCF\x7A\xAF\xD1\x71\xA9\xCA\x31\x7B\xAB\x2E"
+"\x75\xA6\x1A\x48\x68\xD\x2E\x47\x42\x89\xB6\x84\xAF\xCA\x80\xB7\xD6\x73\x98\xB0\x4E\x98\xC5\x86\xA7\xAE"
+"\x63\x7E\x8C\x50\x6A\x7B\x65\x86\x7E\x75\x8B\x9A\xAA\xAA\x78\xCD\xD3\xC8\x5D\xB0\xE4\x8A\xA2\x66\xFE\xFE"
+"\xE6\xD9\xFE\xEF\xEA\xEA\xA8\xD8\xE2\xA4\x8A\xAA\x62\xD5\xD4\x87\x82\x80\x50\xCC\xC5\x84\x6C\x6F\x5E\xDC"
+"\xDB\x9F\x5B\x5B\x34\x28\x74\xA4\x23\x6E\xA0\x1B\x68\x9B\x19\x60\x8F\xF\x5F\x94\x1B\x54\x79\x22\x5F\x87"
+"\x9C\xD4\xF3\xC2\xE8\xF4\xC4\xF6\xFE\xA8\xE2\xFE\xA8\xE6\xF8\x54\xA8\xDD\xE2\xFC\xFE\x5E\x5E\x4B\xDE\xDD"
+"\xB6\xB8\xBF\xA8\xBB\xBF\x95\xFE\x42\x1E\xD9\xDA\xC0\x13\x39\x53\x34\x8C\xC5\xFE\xAE\x9A\xFF\xFF\xFF\xFF"
+"\xFF\xFF\x21\xFE\x12\x62\x79\x20\x4C\x75\x69\x73\x20\x46\x69\x67\x75\x65\x69\x72\x65\x64\x6F\x0\x21\xF9"
+"\x4\x1\xA\x0\xFF\x0\x2C\x0\x0\x0\x0\x5\x1\x45\x0\x0\x8\xFE\x0\xFF\x9\x1C\xF8\xF\x0\x80"
+"\x0\x6\x1\x8\x48\x38\x20\x21\x81\x84\x5\x12\x1A\x48\x78\x20\x21\x82\x84\x9\x12\x2A\xD0\x98\x70\x41"
+"\x42\x6\x9\x1B\x24\x3C\x96\x10\x59\x42\x19\x9\x93\x25\xEC\xB1\x32\xA1\x8B\x84\x53\x12\x3E\x49\x58\x2C"
+"\x61\x88\x84\x24\x12\xDA\x48\xA8\x8C\xA7\x4F\x83\x3D\xD\x2E\x4B\x38\x54\x28\xD1\x84\xE7\x90\x2A\x35\x98"
+"\xD4\x20\xBA\x84\x4F\x9D\x26\x4C\x37\x35\xA1\xBA\x84\xCC\x12\xEE\x4B\x38\x23\xA1\x57\x11\x38\x75\x26\x5C"
+"\x37\xB6\xAC\x41\xB2\x67\xCD\x2\x40\xBB\x36\x21\xC1\xB7\x70\x5\x3A\x78\x0\x21\x82\x84\x9\x14\x2A\x4"
+"\xB0\x20\xA0\xEF\x80\xBF\x4\x8\x5C\xC0\x90\x41\xC3\x6\xE\x14\x3A\x78\xF8\x0\x22\x84\x88\x11\x24\x4A"
+"\x98\x30\x91\xA0\xB2\x82\x4\xA\x32\x6B\x5E\xA0\x60\x81\xE7\x5\xC\x42\x33\x68\x40\x9A\xC1\xB1\xD3\xA7"
+"\x91\x21\x3B\x86\x2C\x99\xEB\xD7\xC9\x7A\xC8\x9E\xD\x5\x8A\xF\x17\x3F\x7E\x4C\x59\xB6\xE4\xC5\x13\x66"
+"\x11\x9A\x45\x1\x71\x60\xC5\x88\xC7\x2B\x10\xEC\x89\x91\x24\x8B\xB2\xE7\xD0\xA3\x3F\x5F\xA6\x6C\x99\x75"
+"\xEA\xD7\xAB\x5F\xB7\x7E\x6E\xD9\xB9\xEF\xE0\xC1\xFE\xA3\x3B\x37\x1E\x9D\xF9\xF3\xE4\xCF\xAB\x4F\x87\x8E"
+"\x7D\xBA\xF7\xEF\xD5\xC9\x5F\xC7\xAE\x3E\xB3\xFB\xFB\xF6\x35\x6B\x36\x63\xC6\x11\x63\x6\xAD\x10\xC2\x71"
+"\x8F\x85\x40\x2\x12\x7B\x50\x61\xC3\x16\x59\xB0\xB0\xCE\x83\x10\x46\x28\xE1\x84\x12\xB2\x33\x61\x5C\x70"
+"\x19\x74\x42\x42\xE\x24\xE4\x41\x42\x8\x19\xB4\x90\x41\x28\x24\x94\x42\x42\x2A\x24\xB4\x42\x42\x2C\x24"
+"\xD4\x2\x47\x6\x6D\x64\x90\x47\x33\x76\x14\xD2\x48\x25\xE5\x68\x90\x4A\x6\xB1\x64\x90\x16\x9\x2D\x91"
+"\x10\x4\x2A\xDA\x94\x90\x9\x9\xA9\xF2\x13\x0\x41\x31\xB9\x64\x93\x45\x1\x10\x65\x53\x0\x50\x69\xE5"
+"\x52\x0\x44\x55\x25\x96\x54\x19\xD4\x8E\x5A\x59\x19\xD4\x4C\x42\x0\x1A\x74\x93\x99\x9\xED\x91\x50\x16"
+"\x56\xA9\xC5\xD6\x9B\x6E\xAA\x85\xA1\x40\x2E\x25\xF4\x2\x87\x9\x49\x90\x90\x5\x9\x5D\x90\x10\x7\x9"
+"\xC1\x60\xA4\x41\x31\xB8\x68\xA8\x41\x19\xC5\x8\x23\x0\x34\x2\x0\x92\x41\x22\x19\x44\x92\x41\x26\xED"
+"\xD8\x92\x41\x2F\x19\x14\x44\x42\x34\x78\x95\x10\x58\x84\x26\xE4\x4C\x92\x4F\x96\xA\xD4\x51\x46\x31\x85"
+"\xE5\x95\xAA\x4A\xE5\x6A\x96\xFE\x55\x19\xC4\xE\x56\x9\x8D\x69\xD0\x11\x45\x1A\x4\x2A\x0\x48\x24\xB4"
+"\x45\xAC\x0\x5C\x95\xD6\xB0\x6D\x11\xB\xE7\x59\x73\x9E\x54\xA7\x41\x77\x1A\xD4\x95\x41\x9D\x1A\xD4\x90"
+"\x41\x15\x24\x54\xC3\xA7\x62\x19\x74\xC3\xA1\x0\x24\xDA\xED\xA2\x8D\x36\xFA\x28\x0\x91\x2\x30\x29\x0"
+"\x95\x2\xC0\x23\x0\x50\xC0\x94\x67\x42\x20\x60\x6B\x90\x9A\x6\xFD\x20\x2A\xA9\xA7\xE6\xEB\xA4\xBE\x51"
+"\xF6\xBB\xEA\xBF\xAF\x6A\xA9\x65\x97\xC1\xD2\x6A\xD0\x56\xCE\x52\x24\x2F\x0\x39\x19\xB4\x93\xB1\x71\x42"
+"\x2C\xF1\x5A\x18\xE2\x90\xC3\xC5\x3A\xE8\xB0\xC3\xE\x32\xF0\xD0\xC3\x6D\x3F\x0\x11\xC4\xB\x42\xF4\x37"
+"\xC3\x5C\x11\xC\x41\xC4\x4\x6\x54\xC0\x41\x11\x1D\x18\x71\xC4\x1\xC7\x85\x80\x4\xB\x49\xB0\x70\xC1"
+"\xCE\x18\xF4\x7C\xC3\xCF\x2D\x4\x9D\x40\xB\x95\x61\x86\x99\x66\x9D\x75\xF6\x19\x68\xA2\x91\xD6\x0\x3"
+"\xCF\x40\x83\x1A\x6B\xAC\xB9\x16\xD\x14\x2E\x54\x1\xC4\x14\x61\xF8\x46\x3\x13\xE\xE0\x2A\xA0\x8\x22"
+"\x18\x58\x2\xB\x5B\x98\xC0\x42\x6E\xB9\x39\xE3\xB6\xDB\xAA\x38\xA3\x8A\x2A\xD2\xD5\x4D\xDD\x74\xD6\x69"
+"\xB7\xDD\xFE\x75\xDD\x85\x27\x9E\xDF\xE9\xA5\xA7\x1E\x3A\x56\x58\xF1\x5E\x3B\xF2\xD5\xC7\xE\x7E\xFA\xF1"
+"\xE7\x1F\x80\xC5\xD\x48\xF6\x8\x2B\x1C\xB8\xDC\x82\xD\xA6\xB3\x8E\x3A\x9A\x6F\xDE\xF9\xE6\x14\x86\x7E"
+"\x21\x5C\x4A\x24\x84\x43\x42\x3A\x28\x6B\x90\xF\x41\x72\x95\x10\x13\x9\x35\xB1\xF0\xC3\x0\x3C\x64\x90"
+"\x9F\x6\x61\xC0\xED\x8B\x88\x2E\x2A\x23\xA3\x36\x42\x8A\xA3\xA5\x6\x55\x61\x27\x4D\x9\x8D\x60\xD1\x9A"
+"\x9\x49\x93\x90\xBD\x6\x8D\x6A\x90\x92\xFA\x36\x69\xFD\x92\xFE\xB6\xBA\xA5\xF6\xAC\xC2\x6A\x10\xC1\xC2"
+"\x2\x10\x26\x0\xB6\x2\x50\x26\x0\x67\xA2\x9F\x26\xF3\xDF\x3\x1B\xFE\xB1\xC5\xC6\x4F\x56\x86\xA5\x1B"
+"\x54\x3F\x0\xA7\x1B\x94\xBA\x41\x28\xAD\xDE\xBA\x41\x4E\x48\x8\xAE\xC\xA2\xBC\x50\x49\xCB\x21\x7D\x4A"
+"\x88\xEE\xC\xC2\xBB\x6F\xF5\x4E\x51\x10\x4\x9E\x41\xC6\x35\xAE\x73\x45\xE3\x7F\x0\x40\xC4\xA0\x18\x96"
+"\x2D\x0\x64\xA\x0\xD0\x3\xE1\xBD\xA2\x87\xAF\x7D\x99\xF0\x7A\xA9\x92\x12\xC0\xB6\xC7\x42\x2D\x59\xA1"
+"\x4D\x6\x19\x5F\xF9\x6\x8\x80\x15\xE9\x2A\x21\xBD\x32\xC8\xAF\xDA\x67\x90\xF0\x11\xC\x7C\xFE\x11\x2B"
+"\xD6\x5B\x0\x90\x83\x84\xDC\xEF\x7E\xF9\x3\xC0\xFE\x0\xD0\x3F\xF\xCA\x4\x5E\x1B\x6C\x91\x88\x18\x92"
+"\xC0\xDC\x25\x64\x5B\xC\xC4\x88\x16\x23\x18\xAE\x8F\x24\xE4\x19\x9\x69\x97\x41\xA4\x90\x90\x8\xE4\xAA"
+"\x86\xBE\x4A\x8\xEB\xFC\x57\xAF\xE7\x8D\x10\x0\xD4\x3B\xA1\xA9\x54\x98\xC2\x29\xAD\x90\x4A\x2F\xF4\x52"
+"\x42\x66\x75\x30\xD7\x19\xA4\x22\x37\x34\xC8\x45\x1C\x6\x2C\x82\xC1\xEF\x90\x72\x1A\x48\xC6\x32\x76\x31"
+"\x1C\x38\x12\x7\x4A\x88\xA4\x24\x1F\x99\x83\x45\x6E\x4C\x6\x3D\x80\x42\xC8\x96\x70\x2\x1A\x40\x60\x38"
+"\xE8\x7B\xCC\x1\x24\x63\x82\xBC\x58\x80\x2F\x7E\x1\x4C\x60\x4\xB3\xB3\xC1\xF4\xC\x3\x40\xBB\x81\xD0"
+"\x8A\x66\x19\xA4\x25\x6D\x69\xC\x58\xC0\xD3\x9E\xF1\x8C\x64\x4C\x23\x1A\x2E\xA0\x6\x35\xAA\x71\x2\x21"
+"\xD0\x0\x11\xC3\x39\x80\x63\x44\x89\x20\x13\x6C\x81\xA\xB3\xF1\xC1\xC7\x7C\x40\x4D\x1F\x48\x43\x1A\x3F"
+"\xC0\x26\xDB\xDE\x6\x37\xB8\xD1\xAD\x6E\xE0\xCC\xCE\xDE\xC6\x9\x38\xF2\xFC\xAD\x70\xE9\xB0\x82\x3A\xDA"
+"\xA1\xB8\xFB\x30\xA3\x71\xFD\xF9\xF\x0\x22\x47\x36\xE4\x44\xE6\x72\x5B\xFE\x88\xC1\x1E\xE0\xC3\xCF\x74"
+"\x70\x8E\x73\x9A\x8B\x8F\xE7\x20\xA4\x8E\x9\x19\x64\x20\x4A\x44\x5D\x42\x8A\x68\x3F\x23\x9A\x6E\xA1\x61"
+"\x7C\xD7\x1F\x71\x98\x90\x21\x24\x64\x3\x7B\xA2\xA2\x41\x6C\x7\x0\xDC\x1\x60\x81\x0\x68\x60\x3\xBD"
+"\xF5\xBB\xDF\x35\x6A\x1A\x9\xB1\x46\x42\x84\xE0\xA9\x40\x2\x80\xA\x97\x2\x80\x8F\xD8\xA5\xC6\xE6\xB9"
+"\x91\x84\x38\x95\x63\xF5\xB0\x87\x2A\x16\x76\x2F\x8F\x0\xE0\xA3\xF8\x6A\x45\xA6\xD\xA6\x8F\x5E\x0\x28"
+"\x14\xF\x1\xF0\xC3\x42\xBA\xCF\x53\x74\xDA\x81\x42\xF5\x7\xD1\x86\x5A\x15\x7F\x9\xE1\xC1\xF1\x26\x2A"
+"\x48\x3F\x2\xC0\x8C\x6\xC1\xA8\x41\xF8\x74\xC0\x8D\x56\xF1\xA3\xBB\xDB\x22\x0\x4A\xFA\xC5\x84\x5C\x23"
+"\x21\x8A\x40\xD1\xC2\x90\xBA\xAE\x99\xCE\x74\x8D\x0\xC0\xAB\xF3\xDA\x98\x53\xE9\xE9\xF4\xAF\x28\xA4\xA3"
+"\x4F\x13\x2\xD4\x2F\xC5\x90\xA8\xB7\x3A\xE3\xAE\x4A\x90\xC6\xA5\x36\x75\xA9\xE1\xF3\x21\x54\xB\xD2\xC4"
+"\x26\x4A\x95\xAA\x6\x61\x28\x56\xAF\x7A\x59\x0\x90\xB1\xA5\x80\xF4\xAC\x57\xC1\xA\x0\x40\x4D\xB1\xAC"
+"\xB5\x3B\x2B\x48\x47\xAA\xD6\xDF\x95\xEB\x82\x6\x99\xFE\x40\x42\x2\xE8\x52\xC6\x1A\x44\x8A\xEA\x8A\xE9"
+"\x4C\xC5\x8\x80\xBD\x8A\x90\xAF\x0\xF0\x6B\x1C\x3\x1B\xD8\xEC\x9\x96\x4A\x5A\x32\x6C\x50\xB5\xE2\xD5"
+"\xD0\xEE\x6A\x90\x0\xD8\x21\x53\x9D\xEA\x58\x18\xC6\xCF\x2D\x3D\xE0\x81\x76\x65\xC0\x5D\x19\x6C\xEC\xBB"
+"\x1A\x5B\x24\x23\x2D\xF6\x48\x25\x58\x4C\x7\x98\x74\xC1\x14\x96\x20\x4\x8\xCC\xAC\x66\x8\xC0\x19\x15"
+"\xB2\x6\x4\x29\x58\xA1\x64\xFD\x41\x19\xD\xAE\x60\x0\xE\x9C\x12\x95\x7F\x51\x25\x2B\x79\xF6\xCA\x9F"
+"\x1\x8D\x68\xB4\xB4\xCC\x2\x34\x0\xB5\x69\x18\x22\x1A\xD6\x18\xE6\x4\x3C\xC0\x4\x44\xA4\xC8\x38\x5"
+"\x42\x40\x9\x98\x93\x5\xD5\xB4\x6\x36\x3D\x88\xCD\x6C\x68\x53\x9B\x6A\xDE\xE6\x9A\xDA\xDC\x26\x37\xBD"
+"\xF9\x4D\x70\x56\x7\x3A\x77\x13\xE7\x76\xBE\xB3\xC\xC2\x11\xAE\x1D\x38\xB6\xF\x7E\xF6\x13\x4F\xC8\x85"
+"\x60\x99\x65\x4B\x4E\x9\xF0\xA9\xCF\x7E\x1A\xF9\xC8\xEF\x59\x87\x3F\xE3\xE3\x95\x82\xCC\x54\xAB\xFC\x4B"
+"\x48\x67\x97\xB8\x44\xCD\x2E\xD1\x78\x6\xC1\xC2\x6\xD9\x64\x10\xDE\x6E\x2A\x61\x6\x21\x6D\xA\xE2\xA5"
+"\x90\x84\x8C\x28\xB5\xB7\x53\xE0\xFE\x15\x5B\x9B\x10\x94\x1A\x84\x1A\xAF\xDB\x60\x68\xA5\x7B\xAE\x74\xD5"
+"\x55\xB7\x35\x35\x88\x6F\x43\xE8\x57\xBF\x12\x77\x8E\xC6\x4D\xAE\xC1\xC8\x57\x54\x34\x19\x1A\x0\x48\x55"
+"\xAA\xF7\xA6\x5B\xDD\x46\x37\x59\xA6\x31\x85\x32\x13\xA5\x3C\xD5\x84\x62\x16\x0\x40\x32\x88\x45\x9\xD8"
+"\x58\x22\x56\xFA\xCB\x0\x78\xD6\x57\x4D\x64\x66\x8D\xA2\xB9\xA3\x6A\xD6\x96\x5A\xC5\xA\x0\xA\x24\xE4"
+"\xA\xA\xB\x50\xA7\xA1\x31\x3C\x74\xA5\x4\xCF\x3D\xCA\x73\x6F\x6F\x1A\xDC\x37\xFE\x79\xA7\x29\x14\xF4"
+"\x61\xC5\x24\x40\xC5\x26\xC4\xB6\xD1\x5\xD6\xC0\xA8\xCB\xE8\x47\x7F\x90\xB7\x4F\x56\x1D\x0\x3A\x4B\xED"
+"\x84\x64\x1A\x0\x12\xE0\x42\x17\xBC\xF0\x85\x4E\x83\x21\x21\xDF\xCE\xB5\x41\x62\x2\x66\x0\x10\xC9\x20"
+"\x45\x28\x35\x6A\x39\xEA\xD1\xD5\x6\xF\x0\x6F\x35\x48\x35\x62\xD\x80\x2\x2\x80\xCB\xE4\xAA\xB5\x9D"
+"\x6F\x2D\x6E\x48\x77\x59\xD7\x21\xE4\x73\x9\x7F\x6D\x42\x3B\x1A\x4\xA8\x42\x45\x58\xA8\xE9\xFD\xDC\x4E"
+"\x2F\xDB\xD1\x8F\xF5\x94\x16\x5C\x40\x71\x17\x60\xAD\x36\x50\xE8\xC1\xE\x1A\xE9\x48\x49\x46\x12\xBD\xDE"
+"\xFD\x2E\x77\xFE\x33\xE9\x2\x20\x74\x4D\x8\x62\xF0\xC2\x18\xB8\x40\x86\x15\x90\x32\x92\x65\x30\xC3\x19"
+"\xBC\x80\x86\x34\xA8\x1\xA\xDC\xF5\x58\xF\x28\xBE\xB5\x30\xFC\xC6\x64\xCD\x88\x80\x5D\x26\x50\x84\xA"
+"\xFC\x37\x95\x3\x58\xE5\x80\x5D\x9\x4B\xA2\x69\x60\x1\x1B\x70\xF0\x35\xAE\x81\x8D\x33\x58\xDD\xB\x83"
+"\xF8\x31\xD9\x42\x30\x4A\x16\xD8\xC0\x6\x2C\x0\xCD\xD3\x46\xD3\x80\x63\x48\xD\x35\x1E\xFE\xB0\x6B\x42"
+"\x3C\x62\xD9\x64\xBC\xC4\xD4\x84\x2\x8A\x53\xDC\xB6\x1F\xAC\x78\x6E\xCA\x68\xB1\x8B\xF1\x66\x1D\xF3\x14"
+"\xE\xC7\xEC\x74\x67\x7E\x1C\x27\x4F\x65\x2\x99\xEB\x1A\xDE\x43\x16\xB6\x60\x83\x18\xA8\x87\x3C\xEC\x39"
+"\x7\x7C\xDA\xE3\x1E\x23\xB7\x14\xCB\x4E\xFC\xF7\x55\x8F\x28\xED\x26\x7E\x50\x8\x6B\x60\x43\x1B\xDC\x90"
+"\x10\x98\xDA\xEF\xD\x70\x10\x43\x1A\xE2\xF0\x81\x49\x1B\xA4\xB3\x33\x25\xF7\xC2\xC3\x9C\x10\x57\x9F\x16"
+"\x0\xD3\x3A\xB5\x47\x33\xF0\x27\x83\xA0\x5E\xF5\x71\xB8\x96\x4B\x91\x2A\x2E\x2F\x4A\xAA\xD6\xE7\x5A\x97"
+"\xA4\x77\xAB\xEB\x3D\xBF\xD1\xCF\x80\x86\x4A\x42\x94\x2B\x43\x28\x1E\xFA\xA8\x9\x51\xB4\xC0\xA4\xFE\xFF"
+"\x2A\x82\x79\xA\xF3\xD7\xCE\x94\x1C\xE6\x20\x87\xF2\xD3\xA1\xE\x76\x48\xFF\x1D\xC\x22\x69\xCF\xE7\x9"
+"\xF\x79\xD0\xC3\x1B\xD6\x77\xE9\x34\xF0\xA1\xF\xD3\x7E\xE8\xEB\x63\xA\x4\xAF\x3E\xA0\xF6\x19\xB5\x6E"
+"\xA9\x6\x0\xD5\x62\x10\x44\x0\x0\x73\xC0\x7\xC2\x57\x6F\x14\x65\x10\xA6\x27\x41\x8E\x62\x7C\x0\x40"
+"\x6B\xC7\x47\x29\xFC\x6\x0\xCB\x17\x53\x7A\xC5\x6B\x7D\x36\x70\x3C\xA5\x47\xB2\xC2\x5C\x89\x25\x6B\xB5"
+"\xD5\x41\x5A\x82\x5C\xCA\xD6\x52\xE3\x96\x10\x98\x87\x65\x70\xE0\x7\x6B\xF0\x7\x74\x0\x8\x81\x90\x7"
+"\x82\x70\x7\x83\xD0\x6F\x33\xF5\x79\x9\x41\x8\xC7\x56\x69\xAB\x57\x8\xF9\x67\x10\x49\xA4\x59\xB0\xE7"
+"\x2E\xE5\xF6\x7F\x6\x31\x11\x63\x5\x22\x67\xA5\x1\x0\x38\x7\xBA\x80\x7F\x9C\xD6\x55\x6\x81\x24\x11"
+"\xE4\xE\xE0\xA2\x6F\x55\x35\x81\xB8\x46\x53\x6C\x94\x57\x36\xD5\x57\xD1\x77\x70\x7B\x34\x68\xA2\x66\x43"
+"\x0\xD0\x70\x3A\xB4\x24\xDB\xD7\x7D\x2A\x38\x5\x72\x38\x87\x40\x50\x87\x5A\x23\x5\x12\x0\x1\x42\x60"
+"\x8\x87\x20\x8\x58\x10\x5\x51\x80\x5\x88\xF0\x4\x55\x80\x71\x24\x56\x1B\xFE\x25\x27\x5\x57\x0\x1"
+"\x2A\x20\x39\x36\x23\x5F\x19\x93\x8\x89\xB0\x7A\x8A\x0\x4\x8B\x50\x6\x98\x58\x6\x60\x90\x8\x91\x84"
+"\x3\x8B\x0\x6\xA0\x8\x6\x8B\xB0\x8\x4A\xB0\x3\x1E\x83\x35\x2E\xE0\x3\x5A\xA0\xC\x2F\xC0\x1F\xE"
+"\xD0\xC\xF\x10\x1\x34\x70\x2\x45\xA0\x1\x1\x70\x8B\xB8\x18\x0\x3\x80\x1\xD9\x50\x0\x1A\xE0\x32"
+"\x1C\x90\x2\x72\x0\x9\x78\xE0\x4\x2A\x40\x2\xCA\x34\x2\x5C\x87\x20\x8B\x17\x3\x97\xA1\x0\x2D\xF0"
+"\xE\xF0\xD0\xD\xF0\x50\x8D\xF1\x10\xF\xF2\xF0\xE\xF1\xC0\x34\x64\xD7\x0\xD0\xC0\x0\xEE\x80\x8D\xD7"
+"\x98\x8\xEE\x80\x3\x1A\xF3\x61\xB3\xB1\x71\xE7\xA5\x3\x3C\x0\x5\xDA\xB0\x71\x17\xB3\x3\xDA\x80\x4D"
+"\x3E\x30\xF\xF3\xA0\xD\xF6\x38\xF\xD8\xE4\xC\xFC\x30\x77\xD7\xC4\xF\x74\x53\x63\x85\x53\x38\x37\xD6"
+"\xE\xF7\xC1\x63\x47\x10\x2F\x86\x37\x2\xCA\x78\x0\x1A\x76\x36\x36\x90\x4\x49\x60\x3\xFC\x0\x90\xDF"
+"\x61\x1E\x82\x23\x38\xE5\xA1\x25\x9\x1\x6A\xB2\xD7\x7F\x6\x21\x24\x8C\x20\x7\x82\xB0\x55\x60\x78\x92"
+"\x4D\x24\x7B\x5E\xD1\x30\x43\x88\x80\x71\x90\x83\x65\x90\xFE\x10\x31\x79\x55\x33\x9\x0\x35\xB9\x44\x8B"
+"\x90\x10\xDA\xE0\x55\x16\x5\xB\x77\xC0\x7\x77\xC0\x8\x9E\x10\x22\x0\x90\xD\x9\x51\x2D\x74\x0\x9"
+"\x7A\xB0\x3C\x24\x8\x0\xB4\x13\xF\x9\x41\xF\x5C\x40\xE\x77\x80\x6\x9\xD1\xD\xEF\xA6\x85\x6\x61"
+"\x6\x77\xD0\x95\xF0\x0\xB\x16\x48\x3C\x0\x90\x93\xFB\x67\x10\x8B\xD0\x4\x9A\x50\xF\x5A\x9\x0\xF7"
+"\xD3\x59\x7E\xB5\x93\x6\x31\xF\x3D\xA5\x24\x3E\x9\xE\x41\x9\xB\xE5\x43\x66\xF3\x44\x6F\xF9\x60\x80"
+"\xFD\x60\x0\x1F\xD2\x3D\x6F\xD8\x52\x9F\x5\x0\x1E\x69\x6D\x0\x30\x92\x8D\xC0\x82\xCB\x92\x79\x4C\xE4"
+"\x8\xE9\xF7\x8\x75\x30\x99\x39\xD8\x94\x48\x35\x7\x7F\xB0\x94\x67\x30\x7E\x69\x30\x7\x90\xC0\x8\x0"
+"\x90\x8\x6\x1\x99\x93\x39\x7E\x73\x20\x3B\x4B\x64\x6\xE4\x37\x99\x76\x60\x9\x7D\x0\x6A\xDB\x50\x7"
+"\x74\x70\x7E\x93\x59\x7\xA1\x80\x7\x69\x66\x10\x11\x61\x7\x99\x50\x92\x93\x10\xA\xA6\x9\x9\xA9\xC0"
+"\x3E\x0\x40\xF\x0\xE0\x8\x73\xB0\x9A\x73\xC0\xD\x69\x10\xA\x75\x90\x6\xB8\x9\x81\x66\x0\x0\x77"
+"\x50\x7\x68\x10\x0\x69\x80\x7E\x69\xFE\x50\xE\xC3\x50\x67\x6\x61\xF\xB9\xB8\x9\x6\xA1\x9\x68\x20"
+"\x7\x76\x50\x7\x72\xE0\x7\x6\x1\x6\x5E\x90\x6\x72\x40\x7\x76\x40\x7\x9A\x10\x6\x6\x91\x8B\xB7"
+"\x78\x1\xD7\xD2\x24\xEE\x70\x6\x1\xC0\xD\xED\x39\x7\x75\x90\x9\xD1\x49\x43\x7\x80\x9\x5E\x80\x8B"
+"\xA7\x0\x0\x2C\x40\x1\xF6\xC9\x1\xCA\x25\x98\x2A\x8\x0\xF4\x39\x46\x1D\xC9\x98\x8C\x30\x7\x91\xC0"
+"\x98\xC5\xD3\x98\x5A\x30\x8\x92\x30\x9\x93\x40\x9\x76\x40\x9\x95\xA9\x3E\xE\x98\x10\xE5\x77\x7\xE5"
+"\xC7\x7\x7E\xE0\x7\x80\xC0\x6\x9E\xC9\x50\x78\x90\x9\xE9\x47\x9\x7E\xA0\x9\xF8\xB7\x44\xB\xA0\xB"
+"\xBA\x40\x7\xA1\xB0\x6\x77\xF0\x6\x58\x16\xB\x72\x90\x9\x7E\xF0\x9\x4D\x80\x7\x8C\x0\x8\xCE\x59"
+"\x92\x71\x65\x10\x46\x99\x7E\x6B\x60\x9\x8F\x0\x8\x20\xA\x8\x74\x30\x8C\xF3\x87\x5B\x1\xD0\x4\xED"
+"\xE9\x7\x7A\x80\x7\x4D\x90\x7\x90\x90\x6\x69\x0\x8\x54\xF8\x3B\x66\x30\x6\x5E\xC0\x6\x93\xF0\x9"
+"\x62\xCA\x5\x80\x60\x9\x73\xC0\x7B\x15\x58\x0\x15\x90\x1\xDC\x10\x0\xBA\x23\x6\xFE\x19\x7\x7C\x10"
+"\x7\x94\xB0\x6\xFE\x39\x38\xD\xE5\xE0\xD\x6D\xBA\x6\x82\x30\x8\x61\x32\xE\xF6\xC0\xD\xDC\x50\x0"
+"\xA7\x40\xE\x29\x22\x3D\x3\x10\x0\x2\xC0\x1\xE6\x40\x4\x4D\x50\xF\x7C\xD0\x99\x25\x19\x5\x14\x1"
+"\x8\x6B\xF0\xA\x72\x90\x6\x6D\x0\x0\xDE\x70\x8B\x28\x50\x0\x28\x80\x2\x15\xF0\xA4\x83\xA5\x3D\x5E"
+"\xB1\x4\x61\x60\xAB\x61\x90\xAB\x61\x20\x5\xBC\xCA\xAB\x53\xA0\x5\x95\x30\x7\x82\xF0\x0\x27\x20\x87"
+"\x75\x8\x4\x55\x90\xAC\xC9\xAA\x5\xC9\x1A\x4\x27\xE0\x5E\xE\xC0\x4\x96\x20\x9\xD7\xE2\x18\x23\x30"
+"\x4A\x93\xC1\x3\x19\xF3\x9E\x7C\x30\x9\x7A\xF0\x1\x51\x0\x1\x57\x70\x9\x98\x40\x7\x87\x90\x5D\x1F"
+"\x3\x9\x99\xA0\x9\x4D\x20\xAE\x3C\x80\x89\xA4\xE8\x3\x41\xA0\x5\x9\x0\x9\x9F\x80\x8\x42\x80\x3"
+"\x60\x0\xA0\x4A\x9\x88\x58\x80\x5\xD1\xEA\x7\x1\xEA\xA\xC4\x40\x17\x43\xA0\x8\xAB\x80\x7E\x1F\xEA"
+"\x8\xB4\xE5\x9\x5F\x10\x7\x74\x80\x9\x7\x42\x5\x8C\x17\x0\x5E\xE0\x5\xE2\x50\x3\x35\xC0\x4\xC3"
+"\x20\x4\x97\xB0\x6\x71\x10\x8\x13\xB0\xA\xCF\x0\x8D\xD3\x78\x8B\xE1\x40\x4\x1F\x0\x3\x4C\xC0\xFE"
+"\x4\x34\x50\xD\x70\x40\x7\x96\xB0\xD\xD1\x60\x76\xC7\x10\xD\x2F\xE0\x1\x52\x80\x1\xDC\x80\x1\x3"
+"\x20\x0\xA7\x40\x4\x1A\xDB\x4\x70\x8A\x8\x27\xD0\x1B\xD6\x20\x6\xE1\x70\x5\xE\x30\x88\x40\xA0\xA"
+"\x61\x60\xD\x1B\x30\xE\xF5\x50\xC\xE1\xFA\x2\xF7\x78\x8B\xD9\x40\x4\x4E\x60\xC\x47\xE0\x4\xE1\xDA"
+"\x6\x69\x80\x6\x9F\x30\x3\x51\x20\x4F\xC2\x40\x6\x64\xB0\x6\x75\x40\xA\xAF\xC0\x6\xA7\xE0\x6\xB0"
+"\xD0\xA\x6E\x40\x4\x46\xE0\x0\xCC\x60\x5\xE5\x64\x4E\xE3\xD1\x52\x42\x62\x10\x13\x2A\xA1\xEE\x72\xA1"
+"\x19\xBA\x82\x86\xB\x0\x98\x7\x92\x0\xB0\x21\x8F\x40\x9\x54\xB8\x86\x9D\x46\x7\xEB\x3A\x8\x1D\x12"
+"\x92\x0\x80\x7\x6C\x10\xA\x85\xAB\x3\x77\x10\xA\x7E\x0\x6B\x5B\xA9\x9\x42\xB8\x3F\x7C\x0\x9\xC2"
+"\x57\x6\x90\xF9\x8\x25\x89\x29\x30\x71\x8\x75\x0\x8\x9B\x6\x0\x1D\x12\xA0\x77\x0\x96\x0\x40\x43"
+"\x5F\x90\x9\xBD\x19\x5A\x26\x20\x7\x7F\xD0\x7\x4C\x8\x0\x50\xA8\x2\x6B\x10\x9\x9E\x90\x45\xC7\xB9"
+"\x6D\x1D\x0\x0\xF3\x66\x10\x6E\xE6\xD\x68\x0\x8\xB8\xF2\x5A\x0\x70\xF\x1\xFE\x70\xF\xA7\xE0\xA"
+"\x20\x50\xB9\xA3\xB6\xA1\x0\x0\x9\x87\xC0\x5\xC0\xA5\xD\xA1\x0\x7\xB0\xA0\x84\x0\xA0\xD\x44\x70"
+"\x8B\xC1\x4B\x7D\x3\x70\x6\xF8\xA0\x41\x6\xA1\x97\xBA\x70\x6\x34\xF8\x9\x64\xA6\x86\x6A\x68\x70\x82"
+"\xE5\x29\x7F\xB\x0\xFF\x1B\xB8\x31\xC1\x8\x6C\x50\xB8\x86\xA9\xA1\x0\xA0\xB8\x8A\x4B\x46\xAF\xFB\xB8"
+"\xBB\x22\x5D\x76\x10\x7\x8E\x80\x6D\x11\x5\x0\x70\x10\xA\x92\x0\x20\x3A\x30\x8\x75\x40\x9\xAB\x90"
+"\x10\xE4\x17\x7\x9E\x6\x0\xDC\x0\x7\x65\x52\x6\x22\x1A\xB\x2A\xB5\x9E\x9\xB1\x8\x8C\x90\x94\x1F"
+"\xC\x2D\x0\xD0\xC1\x13\x3C\x82\xF5\x36\xA5\x92\xF0\xB\xBE\xE2\xBB\x8E\x80\x45\x7\xE1\x7B\x5C\x40\x66"
+"\xBC\x13\x7\x76\x80\x9\x60\xE9\xC3\xD3\x99\x98\x72\x30\xE\xB2\xE3\x66\x0\xA0\x85\xF8\xC0\xD\xE4\x20"
+"\x7C\xCD\xB\x0\xB2\xD7\x3F\x8C\x10\xA\x80\x20\x28\x33\x25\xF\x75\x90\x7\x14\xFC\x7A\xD9\x10\x0\xF6"
+"\xF0\xBF\x21\x14\x6\x1D\x10\x0\x19\x20\x5B\x36\xFC\xA\x73\xC0\x5\xAD\xE0\x15\xD0\x95\xB\x3D\x65\x5C"
+"\x9E\xD2\x2C\x0\x80\xC7\xFF\x4B\x46\x8C\xF0\x7\x6\x5C\x98\xFE\x1F\x24\x7B\xB2\x47\x46\x33\xB8\x80\xBB"
+"\x82\x6F\x8D\x9B\x83\x81\xEB\x23\x78\x10\xB1\xB8\x29\x55\x87\x90\x9\x97\x90\x10\x92\x49\x8C\xA9\xC3\x5"
+"\xDC\x90\xA0\x6\x51\x6\x72\xD0\xC1\xA\xC0\x8\x5D\xD9\xD\x5D\x79\x7\xDD\xA0\x9\x72\x20\x9\xE2\x6B"
+"\x10\xFD\x97\x94\xD1\x9\x0\x7A\x19\x2\x83\x30\xA2\xDD\x66\x10\x49\xF0\x9B\x74\x30\x7\x79\x0\xCA\xDC"
+"\xB0\x7E\x4\xB8\x66\x8\x18\x0\x12\xCC\x8\x5D\xD0\x95\x1D\x70\x6\x9A\xA0\x9\x2A\x2A\x9\x13\xC\x5B"
+"\x4F\xC\x0\xF8\x60\x1\xF5\x70\x81\xDE\x69\x10\x45\xFA\x9\x98\x96\x10\xDC\xC0\x6\xD6\xFC\xBF\x3B\xD0"
+"\x5\x1\x80\x2\xD3\x50\xF\x1D\x40\xE\xEE\x40\xE\xE4\x60\x0\xE5\x7C\xBD\xD1\x6C\x10\xA2\x6A\x10\xA3"
+"\xC0\x6\x13\xEC\x83\x6\x91\x43\x0\x90\x4\x75\xDC\x53\x5E\x71\x2\xFA\xAC\xCF\x2F\xD0\xCF\x2F\xD0\x1B"
+"\x4B\xB0\x4\xBC\xDA\x6\x87\x10\x9\xE\x20\x4\xBA\x1A\x6\x40\xE0\x2\x9B\xF0\x7\x29\xF0\x2\x52\x10"
+"\x4\x12\xCD\xAB\x2\xBD\x4\x33\xD8\x7\x2A\x40\x1C\x8E\xF1\x88\x49\x10\x3\x3C\x30\xA2\x4D\x20\x1\x40"
+"\x50\x1B\x6E\xC7\x3\x32\x20\xB9\x5C\x70\xFE\x2\x1A\xB7\x9\x9E\x5B\x5\x60\xD0\xD\x35\x5A\x9\x39\x50"
+"\x6\x5D\x90\x6\xAE\x40\x3\x2E\x30\x8A\x73\x40\x7\x94\x80\x9\xE9\x77\x9E\x59\x5A\x7E\x72\xA0\xB\x82"
+"\x10\xD2\x55\x90\x5D\x50\x30\x8C\x35\x80\x5\x10\xF0\x0\x4E\x40\x66\xC5\xC1\x9B\x5F\x20\x2\xF1\x95\x5"
+"\xAC\xF0\xA\xB1\x20\x9B\x41\x6D\x9A\xDF\xA0\x1\x9\x30\x18\xF4\x40\xF\xE6\x9\x9\xE5\xE0\x9E\x76\x70"
+"\xAA\x17\xDB\x9E\xE3\x20\x8\x7A\xA0\x8\x86\xC0\x19\xB\x10\x34\x73\x80\x6\x37\x4D\xD\xD3\xD0\x8D\x65"
+"\x37\x35\x52\x83\xF\x73\x0\x7\xD5\xA0\x5\x3A\x90\x8\xF2\xE0\x5\xD8\x80\x8\x43\x0\x4\xB2\xB1\x31"
+"\x73\x90\x6\x8E\xBA\xA7\xF6\xC9\xAA\x6\x60\x4\x51\xF0\x0\xFB\xE0\x0\xFE\x1\x2\xF8\x80\x6\x6E\x40"
+"\x8\x64\x80\x1C\x7\x80\x4\x67\x63\x2\x49\x60\x2\x54\xA0\x37\x7A\x73\x1D\x2D\xB5\x21\x1A\x62\x92\xF4"
+"\xF9\x5\x9C\xD0\x9\x9\x11\xB8\x55\x0\x8\x72\xC0\x8\xD1\x72\xC0\x14\x3A\x83\xAD\x77\x68\x48\x35\xA2"
+"\xC7\xAB\xB8\xBC\x55\x7\x98\x30\xC1\xC6\x83\x7\xC2\x3D\x7F\x98\x50\x7\x77\x10\xB\x94\x50\x44\x72\xC0"
+"\x7\xC3\xD0\xC2\x69\xFE\x30\x6\x77\xF0\x9\x83\x80\x7\x83\xD0\x4\xD7\x2D\xA6\x83\x50\x3\x7D\x20\xBF"
+"\x9\x25\x7\x71\xF0\x21\xB4\xE7\x15\x8F\x10\xB\x35\x9C\x54\x0\xF0\x6\x9F\x10\x9\x79\x10\x8\x93\xE0"
+"\x7\x92\x10\x7\xA1\xF0\x7\xBC\x8C\x3B\x98\x79\x7\x78\x80\x7\x7A\x30\xC\xD8\x1D\xA6\xC3\x50\x3\x4D"
+"\xC0\x18\x0\xC0\x6A\x50\x29\x9\x96\x60\xE\xEF\x36\x2E\x14\x8\x0\xCF\x90\x6\x62\xA0\x7\x70\x6\x0"
+"\x6C\xAB\xE0\x8E\xB9\x3\x1\xAA\x9\x44\x80\x7\xC3\x30\xC\x46\x10\xE0\x1E\x5E\x3\xC3\xF0\x1\xB4\x65"
+"\x6E\x10\xC1\xD\x46\x0\xB9\x87\x86\x5B\xF\x18\x58\x9E\xA2\xDA\x8B\x9B\x10\x30\x4E\x9F\x9F\xF0\xDA\x18"
+"\x34\x5\xA0\xC0\x9\x8E\x70\x6E\xA2\x45\xA1\xA1\x20\xA\xB\xA8\x86\xC8\x36\xA2\xF8\x27\x7B\x62\x4\xB"
+"\x75\x20\x9\xB8\x9\x92\x93\x69\xCD\x75\x10\xB\x0\x40\x9\x96\x80\x3\x9E\x50\x7\x81\x0\x3B\xF6\xE3"
+"\xD\xDA\x4C\x5A\x58\xE\x0\xB1\xFB\xBF\xA5\x33\x7\x98\x20\xAB\xA0\xEB\xCA\x55\xAE\xE4\x9\xD1\x97\x0"
+"\xA4\x2\x6F\xF0\x6\x4D\xF0\x6\x78\xE0\x7\x99\x20\x9\x29\x62\x3B\x87\x70\x8\x4B\x9\x0\x29\x6E\x10"
+"\xFE\xD1\x6D\x10\xB2\xFA\x3B\xBA\x83\xF\x6C\x60\xE1\x6B\xF5\x6E\xE5\xF2\xC\x6D\x80\x6\x6D\x80\x65\x73"
+"\x0\x8\x42\x68\x6B\xAF\x17\xC9\x3B\x9E\x10\xE8\xCB\xBD\x3C\x1E\xBB\x19\xD0\xA5\xC\x58\x85\x88\x76\x24"
+"\x1F\xD8\x52\x33\x61\x10\xA1\x1E\xE3\x96\xFB\x5\xA3\x0\xDB\xCC\x2\x13\xA4\x50\xA\x78\x0\xDE\x81\x4B"
+"\x9F\x7F\x20\xA\xBB\xBD\x97\x56\x38\xC3\xA6\xB0\x7E\xA0\x26\x46\x93\x60\x7\x81\x90\x22\xE4\xB6\x6\x76"
+"\xA0\xE4\xA1\xB0\x98\x77\xF0\x8\xDF\x10\x9\xB1\xF0\x9\x5D\xAE\x3\x6D\x20\x0\xD8\x80\xC7\xD7\x46\x65"
+"\x9\x21\x9A\x9D\x19\x8\x32\x4E\x13\x81\x40\x7\x81\x30\x7F\xB7\xF5\x8\x93\x0\x0\xC8\xD6\xCE\x6F\xF0"
+"\x8\x6B\x80\x7F\xFA\x60\x10\x7E\x10\xA\xA9\x5A\xE0\xBD\x67\x10\xC6\x89\xBC\x0\xF0\xE\x0\x40\xDB\xEB"
+"\x5C\xE8\x35\x72\xEF\xE\xDE\xA\x68\x10\xE\x28\xE5\x7\x69\xB0\xBA\x90\x3E\x6D\x6D\x20\x7A\x65\x5E\x98"
+"\x8A\x8B\xC7\x7A\x62\x10\x99\x9E\xE2\xE9\xC3\x86\xF5\x3C\x47\x5E\x21\x4\x42\xF0\x4\x13\xFF\x4\x16\x7F"
+"\xF1\xFF\xBC\xAB\xA7\x80\xA\xA9\x40\xAC\x11\xED\xAB\xAA\x80\xA\xA8\xE0\x6\xF\xF0\xFE\x4\x2\x3D\x87"
+"\x53\x50\x5F\x99\x0\xA\x78\xE0\x0\xE\x10\x40\x2B\x20\x4A\x7B\xB0\x5\x5B\x10\xA0\xA2\xB0\xA\x41\x60"
+"\x71\x3D\xE0\x5D\x4A\x60\x7\xB1\xC0\x8\xF\x70\x5\x55\x40\x71\xE0\xF0\x8\x8F\xC0\x7\x6B\xA0\x7\x27"
+"\xA0\x6\x76\xF0\x7\x98\x30\x9\x46\xDD\x5D\xCF\x80\x6\x62\x60\x8\x3D\x10\x49\x8B\x90\x8\x97\x88\x89"
+"\x66\xD0\xD\x39\xB0\x3\x3A\xF0\x89\x60\xD0\x99\x7C\x60\xD\xC8\x6A\x72\x24\x73\x5\xD5\xCC\xD9\x90\x91"
+"\x4\x3E\x7A\xB\x31\xC0\xC\xFD\xD1\xC\x10\x30\x4\x34\x60\x7\x50\xDF\x1\x28\x60\x1\x3\x60\xF\x99"
+"\x80\x9\xD8\x30\xC6\x8F\x8D\x8B\xD9\xA0\x1\x37\xF0\xE\x4\x0\xF\xF4\xD0\xD\x73\x10\xA\x5C\x60\x0"
+"\x9\xF0\xE\x92\xDF\x2\x9B\xA1\x34\xA0\xA1\x4B\x4\xC0\xD\xDF\x20\xF\xDC\x10\xE\x4C\x60\x4\x55\x30"
+"\x35\xAD\xB1\x1\x54\x6F\x8\x2E\x0\xD\x3B\x80\xFA\x60\x5F\x49\x39\x90\x0\x40\xE0\xCF\x2F\x70\x2\xBF"
+"\xB1\xF7\xDA\x3B\x4F\x2\x72\x1C\xCA\x78\x20\x25\x40\x5\xA2\xAD\x36\xE0\xD4\x52\x9\xF\x0\xA3\x3E\xEA"
+"\x9B\xE2\x6\x49\xC0\xA\x48\x88\xB8\xA0\x80\xA\xAD\xC0\xBD\x1F\xFE\xD4\x7F\x99\x80\xA\xAE\x60\x7D\xB4"
+"\x6E\xEB\xAF\x20\xA\xD7\xB6\x3\xB0\x10\xB\x76\x90\x7\xDC\x7E\x6D\x46\x2F\x9\x9A\x80\xE5\x8F\x30\xA2"
+"\x77\x60\xC\x65\xCE\x12\xD8\x80\x6\xDE\x30\xFD\x0\x10\x6E\x0\x0\xD3\x76\xF0\x8\xEA\xB9\xC9\x0\xD0"
+"\x9E\xE1\xA0\xB\xC7\x2B\x46\x7D\xC0\x6\x72\xD0\xEB\x0\x41\x6\xC0\xC0\x60\x75\xEA\x40\x4A\x32\x10\xC0"
+"\x94\x81\xB1\xEC\x44\x2\x1\xC0\x88\x42\x4C\x7F\x32\x39\xA\xA0\x30\xA3\xA3\x47\x76\xE8\x70\x1\x70\x43"
+"\x23\x80\x38\x73\xB6\x29\xEC\xA6\x30\x81\x42\x5\xA\x17\x0\xD0\xD3\x85\x5B\x3D\x34\xE2\x10\x29\x6C\xA0"
+"\x30\x19\x80\x35\x6C\xD8\xB8\x1A\xE8\x4E\xE1\x3B\x39\x5E\xD2\x9C\x52\x8\x44\xE1\x80\x0\xE4\x0\x18\x53"
+"\x18\x22\xAA\x42\x2A\xA\x59\x28\x54\xA6\x50\x2B\x0\x9\xA\xBB\xE\x7C\x32\x50\xD6\x2C\x5A\xB5\xA8\xD8"
+"\x92\x55\xAB\xD6\xAD\x59\x6D\x71\x6D\xC9\xD5\xEA\xE6\x40\x5D\xB8\xEC\x8E\x42\x65\xAA\x14\x28\xBE\xA0\x44"
+"\xED\x7A\x3\xE0\x0\x0\x52\xA8\x32\x89\xE2\xF5\xCA\x94\x28\x46\x8C\xE\x59\x32\x95\x67\x90\xC2\x2A\xA"
+"\x21\xC5\x92\xC4\x68\xAE\xA4\x4C\x7E\x1C\x1\xFE\x78\xA1\xB0\x7\x80\x37\xD8\xC4\x74\xF1\x26\xCE\x8C\xA6"
+"\x40\x74\xE8\xD8\x59\xC3\x88\x89\xC2\x33\x62\xD2\x84\x6B\x63\x7B\xDC\x26\x4D\x70\xD2\xCC\xF1\xD3\x7\x80"
+"\x30\x85\xBC\x5C\x87\xA2\x13\x2B\xF\xA3\x77\x81\x3A\x92\xF2\x34\x70\x86\x42\xF\xA4\x30\xD5\x91\xB3\xFC"
+"\xCE\x99\x50\x72\xE8\xC4\x56\x1\xE0\x2\x80\x3E\xB1\xD2\x60\x9A\x33\x27\x9C\x24\x48\x25\x21\x89\x3\xD0"
+"\x72\xE0\xCA\x81\xF2\xC3\x75\xF9\xC6\xE1\x83\x7\x85\xC\x70\x2\x50\x61\x8D\x43\xE6\x18\x23\x5\x33\xC8"
+"\x9\xC4\x20\xD8\x34\xD3\xC9\x1E\x7D\xEC\x9\x20\x80\xC\x34\xB0\x27\x1B\x14\x32\x40\x6A\x20\xA9\x6\xDA"
+"\x43\x21\x13\x14\x52\x65\x2B\x85\x68\xF0\xAA\x44\x0\x7A\x71\xA3\x17\x5F\x7E\xF9\xC5\x97\x5E\x64\x81\x31"
+"\xC6\x5E\x56\x50\xE1\x3\x85\x58\x61\x25\x97\x5C\xDA\x2\xA6\x96\x54\x82\xB9\x65\x97\x5D\x6E\xF9\x2\x80"
+"\x11\xBE\x28\xE5\xAF\x2F\x3C\xF1\x65\x17\x51\x4C\xE1\xA4\x94\x5D\x1C\x51\xE1\x88\xA4\x14\xDA\xE6\x95\x49"
+"\x6\x99\x8B\x11\x4A\xF2\x10\x2E\x8\x85\xA0\x18\x48\x5\x72\xB0\x29\xA7\x8B\x2E\xBC\x98\x23\x8E\x40\x3E"
+"\x29\x4\x80\x21\x6\x62\xFE\x44\xE\x31\xE0\xE0\x62\x98\x26\xE0\xB0\x2D\xD\x36\xB0\x31\x27\x3C\x0\x36"
+"\x4\xC0\xD\x5D\x26\x69\x64\x8D\x38\xE8\xA8\xE3\x11\x4B\x0\x11\xA4\x6\x85\x42\x1B\xC8\x9\x63\x1C\x21"
+"\x85\x12\x4B\x1E\xA9\x23\x13\x48\x2\x71\x64\x98\xA5\x0\x0\xC4\xB\x31\x28\x91\xC4\xF\x3F\xE0\x88\x3"
+"\x12\x48\x0\xC9\x3\x80\x69\x54\xA2\x15\x0\x57\xF0\x69\xC3\x15\x10\x14\x71\xE9\xBF\xA7\x4\xF1\x3\x13"
+"\x3A\xD2\xF0\x2\x8D\x70\xDE\xF4\x4\x84\xB9\x0\xF8\x6\x8D\x6F\xB2\xC1\xF5\x94\x7B\xB2\xA1\x16\x9F\xC"
+"\x1\x10\x41\x21\x24\x14\x4A\x68\x20\x67\x44\x4\x80\x6\x71\xC7\x1D\x57\x2\x9\x68\x80\x0\x86\x23\xD6"
+"\x3D\xA2\xCA\x76\xDF\x3D\xE2\xD\x27\x9C\x78\x40\x82\x13\x84\x30\xE2\x3\x27\xDE\x88\x37\xDE\x37\xFE\x15"
+"\x46\x5\x15\xC8\x20\x78\x84\x15\x5B\x19\x21\xA\x44\x86\xC1\xA3\xE1\x3E\xA\x39\x2\xB\x1A\x5E\x98\xA2"
+"\x62\x8B\x97\xC8\xC3\x11\x2C\x86\x90\x2\x8\x29\x4\xD1\x98\x86\x29\x5C\x20\x19\xA\x17\xB4\xA8\xE6\x4"
+"\x9\x5C\x71\x85\x88\x26\x8C\x40\xE4\x3\x2C\x98\xB8\x22\x8\x28\x7A\xD0\x62\x95\x26\x10\xA9\x1\x91\x21"
+"\x3C\xFE\xB8\xC2\xE5\x1A\x9C\x10\xD8\x9\x2B\x57\x8\x41\x4\x11\x18\x19\x44\x98\x56\x7C\x71\xC4\x8D\x26"
+"\xF0\x60\x2\xB\x44\xAE\xA8\xC2\x7\x17\x7E\x0\x22\x8C\x13\xF6\x31\xC6\x9\x3C\xA6\xC6\x63\x10\x4F\xDE"
+"\x80\x81\x8\x3\x2A\x40\x61\x80\xB\x2A\x21\x47\xF\x23\x86\xA1\xBB\x6E\x3D\x87\x71\x65\x83\x1B\xF6\x6E"
+"\xA1\x85\x4\xFE\x56\xA0\x81\x14\x8A\x70\xA5\xF\x26\x28\x60\x60\x1\x5\x16\x60\x9C\xF1\x6\xA6\xB1\xA6"
+"\x1A\x45\x3E\xF9\x44\x8F\x97\x63\xB6\x5A\x82\x6A\x80\xA8\x62\x8A\x17\xF4\xA8\x1\x6\xD1\x61\x28\xA4\xF4"
+"\x7D\x7\x16\x61\x4\xA5\x47\x8\x81\x4\x4\xF6\xA0\xC2\x84\x2D\x4C\x60\xE1\x7\x67\xBE\xDD\x6A\xCE\x81"
+"\x48\xDC\x5D\x21\x62\x14\x2A\xC6\x77\x85\x1C\x50\x48\x77\x39\x87\x57\xC8\x9\x85\x22\x1A\x28\xDB\x81\x7A"
+"\x19\x51\x21\x2C\x14\x5A\x42\x21\x86\x6\xAA\x7E\xA0\x2B\x8A\xA7\x4C\x21\x17\xAC\x57\x68\x59\xDE\x1\x18"
+"\x6D\x20\x29\x14\xA\x6B\xA0\x65\x21\x50\x8\xAA\x81\x88\x1B\x68\xB0\x81\x8C\xBF\x1E\x0\x19\xBC\x57\x88"
+"\xFD\x81\x98\x7\x40\x7F\x0\x50\x50\x88\x53\x6\xD2\x1\x85\x10\x70\x20\x5\x50\x8\x6\xFE\x14\xD2\x2"
+"\x85\x18\x40\x21\x1B\x60\x49\x4\x7\x12\xD\x85\xCC\x66\x20\x42\x50\x8\x5\x7\x52\xD\xE4\xD\xC4\x4A"
+"\xFB\x53\xC8\x8\x14\xB2\x2\xAA\x58\x5\x5C\xC7\xEB\x5D\xA\x51\x8\x80\x8\x70\x4F\x85\x18\x4\x4B\xF4"
+"\xE6\xA7\x90\x28\x84\x50\x21\xB6\x98\x14\xFA\x14\x72\x3E\xF3\x29\x24\xC\x3B\xA4\x5E\xF7\x6\xF2\xBD\x21"
+"\x2\x71\x20\x95\x19\x48\xF9\x0\x40\xA6\x22\xE\xE4\x87\x3\x39\x1\xD\x15\xE2\x3C\x0\x6C\x6B\x20\x56"
+"\x4\x80\xE\x14\xA2\xC5\x81\xDC\x6F\x20\xF5\x83\x21\x0\xA6\x33\xC3\x81\x40\x70\x20\x19\x50\x8\x2\x7"
+"\x42\x0\x85\x8C\x67\x20\xA\x1C\xC8\x4B\x6\xC2\xC0\xF9\x48\x10\x0\x72\x4\xC0\x35\x14\x62\x8\x9D\x8"
+"\x11\x34\x2E\x4\xC0\x7\x7\x35\x15\xE\x79\xE8\x84\x2D\x1C\x8\x22\x57\x38\x3E\x46\x9A\x8\x0\x61\x4C"
+"\x1F\x0\x22\x39\x3E\xE2\x69\xC8\x84\xD8\xB\xA2\x13\x7D\x68\x44\x0\x88\xE9\x8B\x57\x3A\xA2\x42\xB4\x80"
+"\xBF\x81\x30\x71\x89\xA2\x41\xE5\x40\x46\x89\xC9\x81\x54\xD2\x48\xA\x41\x80\x42\xB2\xA0\x10\x25\x28\x4"
+"\x7\x5B\x54\x88\x17\x1\x40\x44\x0\x64\x4F\x8C\x80\xD4\x80\x42\x4\xFE\x30\xAA\x81\xB8\x51\x3C\xA\x11"
+"\xC9\x1C\x6B\x5\x0\xFA\xC4\xA7\x57\x71\x54\xC8\x33\x32\xA8\x10\x6A\x28\x64\x7B\x3\xB1\xD1\x40\x48\xD8"
+"\x3C\x6D\x29\x64\xB\xE0\x82\x40\x4\xC2\x19\x1\x72\x92\x73\x8\x11\x18\x42\x3A\xD3\x49\x2E\x1A\x9C\x4B"
+"\x5C\xE6\x32\x97\x10\x24\x20\x4\x7A\xD2\xF3\x9\x4F\xA0\xA7\xB9\xCE\x9\x1\x7\x58\x6A\x50\xA9\x3B\x40"
+"\x9\x4C\x60\x82\x17\x14\xF4\x5\x4B\x40\x68\x42\x11\x1A\x6\x86\x32\x54\xA\xF\x95\x42\x10\x22\x1A\x4"
+"\x8A\x5A\xAC\x62\x40\xC0\x28\xE7\xAA\xB0\xD1\x2A\x68\xC1\xA3\x24\x3\x29\x14\x44\x2A\xD2\x1E\xDC\x6C\xA4"
+"\x24\xEB\x5C\x10\x96\x70\x82\x2B\xC\x1\x11\x35\x3C\x40\xD2\x44\x10\x82\x3\x20\x81\x5\x26\xB0\x1\x15"
+"\x70\xB0\x53\x25\xF4\xB4\xA7\x38\x50\xC2\x4E\x73\x90\x3\x1D\xE8\x60\x7\x47\x95\x41\x49\xB5\x6\x84\x29"
+"\x78\x6D\x8\x33\x80\xEA\x3\x20\x30\x4\x9\x4C\x80\x2\x15\xB0\x80\x5\x4\xB0\xD5\x1\x74\x95\x0\x5F"
+"\x25\xC0\x5\xC4\x7A\x1\xC\x94\x15\x3\x7C\xBB\x41\xDF\xFE\xB6\xD6\x4\x28\xC0\xAD\x6F\x5D\x1C\xE3\x18"
+"\xC0\x80\x67\x3C\x63\x1A\xD3\x88\x46\x34\xAE\x51\xFE\x5\x6A\x48\xA1\x1A\x2F\x50\x84\x4\x86\x0\x1\x7D"
+"\x81\xE0\x0\x48\x53\x5D\xEA\x56\x40\x2\x24\xC0\xCE\x6\x5B\x98\xE5\x56\xFC\xA7\x48\x45\x1A\xCF\x78\x8D"
+"\x1C\xC8\x57\x1E\xA9\xC3\xCC\x86\x4F\x21\xF2\xAB\x62\xE\x7\x42\xA9\x5E\x66\x12\x0\x4F\x4\x0\xF\x3B"
+"\x9\xBE\x4F\x86\xD2\xB5\x0\x58\xE5\x2E\xC7\x34\x5B\x55\x6E\x32\x91\x23\xC4\xED\x40\xBE\x39\x90\x1C\xD0"
+"\xD2\xB7\x3\xB9\xE5\x40\xB8\x68\x3F\x85\xF8\x80\x93\x63\x5C\xA1\x19\x1\x60\x1\x62\x2\x80\x8D\xC5\x4C"
+"\xE0\x2\xA5\x5B\xC7\xFA\x3C\x13\x0\xC8\x50\x88\x1E\x37\x28\x43\x0\xF0\x4F\x84\xDA\x54\x48\xC\x4E\xF8"
+"\x80\xFC\x29\x84\xB2\xE6\x5\x24\x66\xB9\xE2\xC8\xF1\x91\x37\x7E\xB0\x54\x48\x14\x47\x6B\x5A\x5F\xFA\x12"
+"\xB5\xA8\x55\x6D\xFD\xEA\x87\x44\x0\xF0\x37\xB6\xBC\xE4\x65\x6C\x55\x6B\x3C\xD0\x12\xEA\x43\xC2\x55\x48"
+"\x6F\x7\x52\xCB\x5\xFF\x16\x0\xA\x26\x6E\x29\x8F\x8B\xDE\x32\x2A\x84\xB9\x3\x19\x80\x42\x9E\x7B\xCC"
+"\x37\x4E\x17\x0\x74\x64\xA6\x1D\x73\x32\x41\x6A\x52\x27\x79\x84\x1C\x64\x21\xC1\xE5\x5E\x0\xB0\xD8\x7F"
+"\x93\xA5\xF0\x22\xB9\xAB\x5E\xFE\x16\x6B\x5\xB4\xF2\x5\x0\x8E\x71\x4C\xDA\xFA\xDA\xF6\xB4\x9C\xF4\xE4"
+"\x42\x40\xD9\x5F\x51\x92\x92\xC8\x3D\x54\xA1\x56\xA8\x58\x95\x81\xEC\x0\x97\xBC\xB5\xA5\x83\x83\x9B\xC5"
+"\x5C\xD2\x36\xB5\xA\x41\xAE\x22\x39\x20\xCC\xE6\x6E\xD8\x98\x70\xFC\xF0\x32\xE5\x73\x47\x85\xCC\x6A\x20"
+"\xD5\x84\xA2\x42\xB2\x9\x80\x6D\x62\xAB\x9B\x22\x72\x40\x9C\x1D\xF0\x0\x3A\xD7\xB9\xCE\x10\xC0\xB3\x38"
+"\xF5\x5C\x4E\x3E\xAB\x73\x9D\xEC\x1C\xD7\x3E\x11\xE1\x80\x28\x84\xE7\x0\xAA\xB\x81\x4D\x93\xC0\x82\x7B"
+"\x3E\xE1\x4\x8E\x3E\x41\xA4\x23\xFD\x82\x13\x18\xB4\xA0\xA\xC5\x74\x43\xC3\x0\x51\x88\x52\xD4\xD3\x16"
+"\x9D\x42\x46\x39\xDA\x51\x8F\x72\x94\xA9\x53\x90\xC2\x12\x28\x2D\x4\x97\x16\x3A\xA6\xAA\x1B\xC1\xA\x5E"
+"\x17\x83\x24\x64\xE1\xA8\x47\x35\x6A\x51\x75\x9D\x3\x1C\xF0\x9A\xA7\x3E\x5\x76\xAF\x87\x5A\x54\xA4\xF2"
+"\xA0\xA4\x2E\xA8\x82\xC7\xAC\x20\x4\xA8\xCE\x60\xCE\x11\xA0\xC1\x15\xC\xC0\x81\xAC\x6A\x55\x0\x5D\xF5"
+"\xEA\x57\xC7\x4A\x56\xB3\xEE\x8D\x6F\x7E\xF3\x9B\x5B\x35\xB0\x0\x6\x6C\xC0\xAE\x86\xC8\x2B\x35\xA8\xB1"
+"\xA\xC9\xFE\x9\xC1\x3\x4C\x28\xEC\x61\x43\x90\xD8\x10\xC8\xBA\xB1\x70\xEE\x60\x8B\x15\xC2\x62\x16\x9F"
+"\xF7\xB6\x64\xC\x17\x20\x97\xE5\x5D\x43\xA6\xD9\xE0\x39\x16\xED\x1F\x59\x59\xDA\x85\xAB\x36\xC8\x41\xAE"
+"\x9F\x52\x5E\xCB\xDF\x20\x5F\x33\x90\x53\x54\x48\x9\x2E\x9\x0\x27\x23\xD8\xE3\xF\x8E\x72\x83\x81\xFB"
+"\x64\x8E\x5B\x39\xC8\x59\x56\x48\xA\x98\x37\xCC\x81\xB0\xDC\xB9\x6D\x8C\xEE\x40\x92\x19\xE2\x81\x8C\x18"
+"\x0\x7C\x1C\x88\x3\x55\x48\xF0\xF7\x82\xEB\x77\x3\xF9\xB9\xBE\x7\xE2\xE2\x7D\xC7\xD8\xDF\x2B\x34\x9E"
+"\xFF\xDC\xE7\x66\xDD\x72\x56\x92\xF1\x85\xFA\xC1\x7B\xAC\x49\xAA\xFF\x78\x20\xF\x67\x2D\x0\x24\xAE\x75"
+"\x4E\x46\x32\x78\x96\x1C\x48\x2C\x7\x72\xE0\x8\x97\xFC\xE3\xC3\x9D\x32\x83\x1\xA0\x76\xB5\x43\xB8\xE3"
+"\xE4\x53\xC8\xC9\x63\x9C\x2\x2E\x63\x58\xC3\x30\xEF\xB0\x32\x7\x12\xCC\x81\x98\x19\x0\x68\x6\x0\x11"
+"\x4E\xC\xF6\x14\x8B\x28\xE8\x87\xCF\x37\xBF\x8B\x3E\x10\x18\xFF\x9B\x85\x8B\x7\x10\xC6\x9B\x7E\x41\xA7"
+"\x47\x32\x92\x3A\x4E\xF8\xD4\x19\x6E\xF5\x2B\x5F\x3D\xEB\xF5\x53\x6D\x24\x5D\x49\x28\xD0\xEE\xFE\x16\x0"
+"\x3C\xA8\x72\x93\x15\xF2\xF6\xE1\x42\x38\xED\x21\xA7\xB2\xEA\x25\xDC\xDA\x5F\x32\x5E\x21\x45\xA8\x3B\x0"
+"\x32\xBC\x46\xBC\x87\x64\x99\x7E\xD7\x2E\x0\x78\x85\xCD\xDC\x32\x7D\x2B\x51\x20\x46\xF2\x95\xBF\x7C\xE6"
+"\xCB\x79\xCE\x76\x86\x0\x9D\xF1\x9C\xE7\xE9\xF3\x99\xCF\x10\x40\xC4\x3\x88\x51\xE8\x88\x24\x6D\x4\x1"
+"\x1D\x28\x3C\xE1\x59\x4F\x21\x34\xDA\xD1\x8D\x7E\xB4\xA4\x25\x4D\x69\xF6\x1B\x54\xA1\x61\x48\xA8\xA6\xA5"
+"\xB0\x69\x4E\x7B\xBA\xA2\x14\x7D\x28\x42\x23\x2D\x4\x1A\x30\x1\x2\xC5\x8\xF\xA4\x51\x9A\xD6\x29\x1"
+"\x2A\x98\x9D\x3D\xE8\x81\x4\x4C\x40\x1E\x60\x40\x1E\x90\x81\x7\x94\x81\x5B\xC3\xB5\x1D\xD0\xB5\xA2\xEA"
+"\xB5\x9D\xFA\x35\x60\xB\xAA\x5E\xD3\xB5\x62\x4B\x40\x92\x61\xAA\x30\x78\x2\x66\x68\xB6\x66\x20\xA7\xAA"
+"\x2A\x2\xAC\xCA\x2A\xAE\xCA\x36\x6D\x13\xAB\xB2\xBA\x81\x6C\xF8\x1B\xD\xD0\x80\xD\xD8\x0\x43\x30\x84"
+"\x6B\xA0\x6\x3\x58\x85\x9\x50\x84\x77\x8B\x37\x1\x1C\x40\xC3\x13\x1E\xA0\x2B\x42\x0\x70\x25\x57\x52"
+"\x3C\xDB\x63\xC2\xC7\x1B\x3A\x85\x10\x24\x42\x61\xB2\xF5\xA2\xBC\x2A\x7C\xFE\xBA\x18\x3A\xB8\x1D\xCB\x3C"
+"\xD3\xC2\xAF\xB8\xF3\xC2\xAA\xC3\x31\xFF\x1\xAD\xEF\x2\x80\xC8\x3A\xA5\x24\x52\x8\xD4\xEB\xA2\xD4\x8B"
+"\xBD\x36\x74\x3D\x7\x6B\xBB\xD5\x4B\x25\x21\x93\x8E\x18\xA3\x80\xDC\xDB\xBD\x97\xCB\x3B\x9A\x93\x95\x12"
+"\x1B\x8\xFE\x0\xA1\x81\x20\xC3\xAD\x40\x3C\x23\x34\x44\x0\x28\x44\x24\x84\x3C\xA2\x6B\x42\x16\x53\x1E"
+"\xC2\xEB\x10\x15\x1A\x1F\xCD\x82\x24\xA7\xC3\xBC\x83\xE3\x31\xFA\xF2\x31\xD5\x42\xAD\x48\x52\x24\x25\xDB"
+"\x38\x53\x32\x25\x25\x52\xC3\xB2\xD3\xA5\xE1\x6A\x3D\xD8\x63\x3B\xD8\x7B\x3B\x25\xDA\x3A\xE4\x62\xB1\x3B"
+"\x1C\x88\xB\xD3\xBD\xDE\xCB\x6\x85\xA8\x80\x94\x53\x88\xE1\x3\x80\x47\x2C\x3C\x42\x3C\xC2\x44\x14\xC6"
+"\xC4\x5B\x44\xC8\x13\xA4\x36\xD3\x38\x80\x53\x2F\x4A\xAC\x3C\x4B\x8C\x3A\x85\xDB\x3C\xCD\x43\x2D\x5F\xC2"
+"\x31\xB\x7A\xA\xC9\x3\x80\x48\x94\xAD\x26\x3A\x43\xB8\x43\xC3\x35\x4\x47\xB3\x73\x43\x55\x84\x3D\xB7"
+"\x9B\xC3\xFA\x81\xC5\x6\xB2\xB0\xE6\x2\x33\xBE\xBB\xB9\x2\x52\xB3\xE2\xD3\xA\xE4\x4B\x3E\x7A\xDC\x3E"
+"\xE5\xB3\x47\x7B\x64\xBE\x7D\x24\x6\xE7\x7B\x3E\x3B\xFE\xAB\x33\x7\xD8\x3E\xA2\x89\x88\x43\x9B\x29\x45"
+"\x63\x1\x3F\xA3\x81\x21\x0\xB4\x73\x11\xBF\x78\xAA\x27\xF3\x43\xBF\xF3\x53\x3F\xF5\xB3\x34\x4C\x7B\x3F"
+"\x4C\xA3\xB4\x47\x93\xA7\x73\x72\x80\x62\xB0\x92\x98\x5A\x9D\x9A\xDA\x3\xD9\xA1\x82\x8F\x2\x29\x17\x30"
+"\x99\x91\x22\x29\x5\x34\x36\x6\x4C\x6\x8\x8C\x40\x9\xC4\xB5\xA\x1C\x2A\x5F\x3\x2A\xD\xDC\xC0\x61"
+"\x23\xB6\x1D\x90\x1\x63\x33\x19\xAE\x91\x82\x65\x6B\xB6\x67\xA3\x1\x45\x98\xB6\x6A\xBB\xB6\x1\x20\x0"
+"\x7D\xC0\x80\x6C\xC8\x80\x2\xA8\x0\x1B\xE4\x80\xC1\x31\x80\xE\xF8\xC1\x61\x88\xB7\x10\x20\x94\x60\xF4"
+"\xCA\x43\x1C\xC6\x43\x54\xC2\x7C\xF3\x45\xAD\x20\x81\x18\xBB\x2C\xEE\xD2\x2C\x66\xC4\xC2\x2B\x44\xB8\x2C"
+"\x7C\x46\xCD\xA3\x46\x40\xAA\x21\xC2\x13\x3B\x0\x20\x3B\xFE\xE2\x25\x51\x9C\x43\x25\xD2\xA5\xB7\x63\xBD"
+"\x4\x23\x47\x91\x3\x39\xD9\xF3\x46\xAE\xAB\xC3\x27\x1C\x88\x55\xC8\x3D\x30\xCB\xC5\x81\xA0\xBB\x81\x10"
+"\xBC\x40\x24\x42\xB0\xFC\x4A\x44\xBC\xCC\x44\x4C\xC2\xC1\xDB\x8A\x36\xD3\xC6\xCA\x9A\x31\x47\x62\x4B\xB7"
+"\xBC\xBC\x67\x24\xAD\x4C\x5C\x38\xFE\x1C\xD3\xAC\xAF\x2B\x3C\xD0\xEA\x96\x23\x83\xCD\xBD\xB4\x32\x25\xF2"
+"\x4B\x39\x34\xCC\x54\x1C\x39\xC2\x54\xBB\x29\x1B\x2E\x57\x2C\x2F\xC5\x4\x0\xE\xE2\xBD\x3\x52\x88\x2D"
+"\x1B\x88\x9\x50\x88\x38\xF1\xB9\xCC\x64\x4E\xCB\x1C\x88\xBA\xC4\xCC\x43\x2C\x4B\x14\x9B\xC2\xA3\xB3\xAC"
+"\xD0\xEC\x2C\x2B\xB4\x3C\x67\xC4\xC4\x84\xC3\x31\x4A\x2A\x3E\x42\xB1\x81\xAC\xE3\x2F\xFF\x32\xB2\x51\x9C"
+"\x43\x5D\xFA\x4B\x92\x43\x3B\x38\x14\x4C\xC3\x54\x22\xDC\x1\x80\x7D\x80\x3C\xE4\x1C\x88\x5B\x1C\x88\x36"
+"\x50\x8\xC6\x54\x1F\x70\xF9\x7\x7C\x4\xD0\x7A\xC\xD0\x7B\x14\xD0\x2\x25\xD0\xE5\xCB\x47\x7C\x8C\x82"
+"\x75\x31\x6\x10\xE8\x3E\x80\x12\x28\x13\x90\xAA\xE9\x1B\x27\xEB\x33\x27\x3F\x63\x48\x76\x72\xA7\x87\x24"
+"\x3F\x7C\x92\xC8\x7B\x4A\xBF\x8A\xAC\xB4\x11\x95\xB4\x7B\x92\x27\x1A\x88\x80\xEC\x5B\x50\xC3\x9A\x37\xC5"
+"\x9A\xB5\x5A\xB\x2\x50\x13\x35\x8E\xD2\x2\x52\x4B\xC9\x92\x61\xC9\x9B\x51\xC0\x1E\x60\x40\x99\x8C\xC0"
+"\x99\xBC\xB5\xA\xD4\x81\x9B\xC4\xC0\x9C\xC\x36\xC\xAC\x40\x9F\x4C\x6\xA5\xD2\x82\x1F\x68\xAA\xAF\x29"
+"\x4A\xA9\x1A\xFE\x2\x45\x58\x85\x14\x90\xCA\xA\xA8\xCA\x22\x20\x87\xE\x20\x2\x23\x90\x94\xAD\xF8\x7"
+"\xE8\xC\xCB\xE8\x24\xD3\x31\x4D\x44\xE8\xF4\x45\xFE\xA1\xA2\xD7\x7C\x31\xA3\x4B\x2F\xEC\xA4\xC2\xCD\x6A"
+"\xCB\xED\xEC\xCE\x83\xD3\xAC\x81\xC3\xC6\xAB\xF0\x3C\xDA\xDB\x2F\x3F\x92\xCD\xD9\x3B\xCC\xDA\x34\xCC\xC0"
+"\x84\xB2\xDC\x5C\x3B\x7\x83\xB0\xDE\xF4\xA3\xF1\x9\x3A\x40\x4\x80\x6B\x99\x4C\xAD\xF8\x87\x49\x6D\xCE"
+"\x32\xAD\xD4\x31\x15\x24\x35\xF5\xA6\x62\x74\xBC\xA3\x53\x24\xF5\x1A\x9F\x30\xAA\xC4\xB6\xBC\x44\xB7\xD4"
+"\x2C\x45\xD2\xD4\x81\x48\xC6\x6C\xFC\x42\x3A\x44\x4C\xD8\x34\x4F\x6E\x44\xCF\x6F\x2C\x3B\xC0\x24\x39\x8"
+"\x5B\x45\xC2\x4C\xD4\x34\x1C\x32\x46\xAD\x20\x78\x4\x53\x4A\x75\x4E\x4B\x1D\x56\x33\x3D\xC2\x34\xC5\x46"
+"\x33\x1C\x4B\xE0\x6C\x3C\x27\x74\xD6\xB4\x54\xA1\xB5\x54\x88\x51\x25\x4D\x47\xF2\x1F\x41\x79\xA5\x2B\xA"
+"\x2F\x20\xFB\xBC\x21\x8B\xD5\x6D\xEC\x46\xDA\x64\xC3\xF5\x3C\xBB\xC1\x3C\xD4\x42\x15\x47\xDF\x4\x38\x5F"
+"\x5C\x16\x85\x98\xD4\x49\x3D\xD0\x4\x35\x50\x79\x8D\xD7\x1\xCD\xC7\x19\x88\x82\x19\x98\x17\x6\xFE\x75"
+"\x50\x36\x4B\x9A\x44\x63\x81\x45\xEB\x47\x39\x7B\x80\x7F\x84\xBE\x9\xCD\xB3\x3E\xBB\xD0\x75\x52\x27\x40"
+"\x7B\xA7\xF1\xEB\xD0\xF2\xFB\x50\x7C\x3A\xD1\x74\x4A\x51\x81\x3C\x2\xA8\x10\x42\x9A\x2A\x1\x16\x98\x1D"
+"\x16\x58\x2\xF9\xAB\xBF\x4F\xB3\x18\xA6\xC2\xA8\x51\xAB\x51\x94\xBC\xD1\x1C\xDD\xD1\x5\x74\x40\x1F\xA5"
+"\x49\xA\xB4\xC9\xA1\xC2\x40\x9D\xDC\x40\xE\x24\xB6\x9F\x14\x29\xAE\x51\x29\x95\xD9\x87\x8C\x5D\x3A\x49"
+"\x7D\x57\x78\xBD\xD4\xA2\x1D\x56\x64\x85\xC4\x23\x5C\x56\xA1\xEB\x9F\xDF\x74\x56\xD0\x54\x46\xB5\x9C\xD6"
+"\x66\xB4\x42\x45\xF2\xC5\x36\x6B\xB3\xD7\xBC\x2F\x6E\xE5\x53\x3F\xD2\xCB\xF3\xEC\x4B\x36\xB4\xD5\x8F\x7B"
+"\x43\xDD\x7C\x4F\x71\x34\xAE\x85\x13\x91\xA1\x65\xDB\x62\x35\x5A\x62\x25\x53\xE8\x5C\x3A\x64\xBC\xCC\xCD"
+"\x4\x4E\x46\x7C\xDA\x37\x95\x44\x47\x12\x55\x47\x32\x1E\xD6\x6C\x33\x3\xE3\xC2\x4D\x6C\x55\xFD\xF2\x5A"
+"\x23\xFB\xD3\x40\xED\xA3\x70\x24\xD4\x36\x7C\x3D\xC2\x1C\x2E\x5D\x3A\xA1\x81\x60\xDB\xB6\x9D\xDC\xCB\xC5"
+"\xDC\xCC\xD5\xDC\xCD\xE5\xDC\xCE\xF5\xDC\xCF\x5\xDD\xD0\x15\xDD\xD1\x25\xDD\x3E\xC9\xAD\xDC\xCA\x2D\xDD"
+"\xD4\x55\xDD\xD5\x65\xDD\xD6\x75\xDD\xD7\x65\xDD\xD3\x3D\x5D\xD8\xA5\xDD\xDA\xB5\xDD\xDB\xC5\xDD\xDC\x5"
+"\x0\xD9\xE5\x5D\xDD\xF5\xDD\xDF\x5\xDE\xE0\xC5\x5D\xDE\x25\xDE\xA1\x15\xDE\xE3\x45\xDE\xE4\x55\x5E\xA1"
+"\xE5\xDD\x80\x0\x0\x3B";
+
+#endif


Property changes on: GNUnet/libwebserver/src/logo.h
___________________________________________________________________
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/src/memory.c
===================================================================
--- GNUnet/libwebserver/src/memory.c    2006-08-18 20:37:47 UTC (rev 3245)
+++ GNUnet/libwebserver/src/memory.c    2006-08-18 21:41:52 UTC (rev 3246)
@@ -0,0 +1,155 @@
+/* Copyrights 2002 Luis Figueiredo (address@hidden) All rights reserved. 
+ *
+ * See the LICENSE file
+ *
+ * The origin of this software must not be misrepresented, either by
+ * explicit claim or by omission.  Since few users ever read sources,
+ * credits must appear in the documentation.
+ *
+ * date: Sat Mar 30 14:25:25 GMT 2002 
+ *
+ * -- memory functions
+ */
+#include "memory.h"
+
+IFDEBUG(int _t=0;)
+
+/*********************************************************************************************************/
+/*
+ * same as malloc with error reporting and libwebserver debug
+ */
+void * __ILWS_malloc(size_t s) {
+       void *ret;
+
+       ret=malloc(s);
+       if(ret==NULL) {
+               IFDEBUG(fprintf(stderr,"memory.c: malloc: %s (size 
%d)\n",strerror(errno),s);fflush(stderr));
+               return NULL;
+       };
+       IFDEBUG(_t++;);
+       
+       IFDEBUG(fprintf(stderr,"memory.c (%d): Allocated %d bytes to 
%p\n",_t,s,ret);fflush(stderr));
+       return ret;
+}
+
+/*********************************************************************************************************/
+/*
+ * same as calloc with error reporting and libwebserver debug
+ */
+void * __ILWS_calloc(size_t nmemb,size_t s) {
+       void *ret;
+       ret=calloc(nmemb,s);
+       if(ret==NULL) {
+               IFDEBUG(fprintf(stderr,"memory.c: calloc 
%s\n",strerror(errno));fflush(stderr));
+               return NULL;
+       };
+       IFDEBUG(_t++;);
+       IFDEBUG(fprintf(stderr,"memory.c (%d): Allocated %d bytes to 
%p\n",_t,s*nmemb,ret);fflush(stderr));
+       return ret;
+}
+
+/*********************************************************************************************************/
+/* 
+ * same as realloc with error reporting and libwebserver debug
+ */
+void * __ILWS_realloc(void *buf,size_t s) {
+       void *ret;
+       ret=realloc(buf,s);
+#ifdef DEBUG
+       if(buf==NULL) {
+               _t++;
+               IFDEBUG(fprintf(stderr,"memory.c (%d): Allocated %d bytes to 
%p\n",_t,s,ret);fflush(stderr));
+       };
+#endif
+       if(ret==NULL) {
+               IFDEBUG(fprintf(stderr,"memory.c: realloc: 
%s\n",strerror(errno));fflush(stderr));
+               return NULL;
+       };
+       IFDEBUG(fprintf(stderr,"memory.c: Realloc buffer %p to 
%d\n",buf,s);fflush(stderr));
+       return ret;
+}
+
+
+/*********************************************************************************************************/
+/*
+ * same as free with error report and libwebserver debug
+ */ 
+void __ILWS_free(void *ptr) {
+       if(ptr!=NULL) {
+               free(ptr);
+               IFDEBUG(fprintf(stderr,"memory.c (%d): Buffer %p 
freed\n",_t,ptr);fflush(stderr));
+               IFDEBUG(_t--;);
+       };
+}
+
+
+/*********************************************************************************************************/
+/*
+ *  Add a buffer to memrequest list
+ */
+void *__ILWS_add_buffer(struct memrequest *list,unsigned int size) {
+       struct memrequest *tmem;
+       if(size==0) {
+               return NULL;
+       };
+       if(list!=NULL) {
+               tmem=list;
+       }else {
+               return NULL;
+       };
+       while(tmem->next!=NULL)tmem=tmem->next;
+       tmem->next=__ILWS_malloc(sizeof(struct memrequest));
+       if(tmem->next==NULL) return NULL;           // ERROR
+       tmem->next->ptr=__ILWS_malloc(size);
+       tmem->next->next=NULL;
+       return tmem->next->ptr;
+}
+
+/*********************************************************************************************************/
+/*
+ * Initialize memrequest list of buffers
+ */
+struct memrequest *__ILWS_init_buffer_list() {
+       struct memrequest *newlist;
+       newlist=__ILWS_malloc(sizeof(struct memrequest));
+       if(newlist==NULL) return NULL;
+       
+       newlist->next=NULL;
+       newlist->ptr=NULL;
+       return newlist;
+}
+
+/*********************************************************************************************************/
+/*
+ * Delete memrequest buffer node (free)
+ */
+void __ILWS_delete_buffer(struct memrequest *mem) {
+       __ILWS_free(mem->ptr);
+       __ILWS_free(mem);
+}
+
+/*********************************************************************************************************/
+/*
+ * Delete memrequest next buffer
+ */
+void __ILWS_delete_next_buffer(struct memrequest *mem) {
+       struct memrequest *tmem;
+       tmem=mem->next;
+       mem->next=mem->next->next;
+       __ILWS_delete_buffer(tmem);
+}
+
+/*********************************************************************************************************/
+/*
+ * Delete whole memrequest buffer list
+ */
+void __ILWS_delete_buffer_list(struct memrequest *list) {
+       struct memrequest *tmem=list;
+       if(tmem==NULL) return;
+
+       while(tmem->next!=NULL) {
+               __ILWS_delete_next_buffer(tmem);
+       };
+       __ILWS_delete_buffer(tmem);
+}
+


Property changes on: GNUnet/libwebserver/src/memory.c
___________________________________________________________________
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/src/memory.h
===================================================================
--- GNUnet/libwebserver/src/memory.h    2006-08-18 20:37:47 UTC (rev 3245)
+++ GNUnet/libwebserver/src/memory.h    2006-08-18 21:41:52 UTC (rev 3246)
@@ -0,0 +1,46 @@
+/* Copyrights 2002 Luis Figueiredo (address@hidden) All rights reserved. 
+ *
+ * See the LICENSE file
+ *
+ * The origin of this software must not be misrepresented, either by
+ * explicit claim or by omission.  Since few users ever read sources,
+ * credits must appear in the documentation.
+ *
+ * date: Sat Mar 30 14:25:25 GMT 2002 
+ *
+ *  memory functions
+ */
+
+#ifndef _MEMORY_H_
+#define _MEMORY_H_
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif         
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h> // Johannes E. Schindelin
+
+#include "debug.h"
+
+extern int errno;
+
+void *__ILWS_malloc(size_t);
+void *__ILWS_calloc(size_t,size_t);
+void *__ILWS_realloc(void *,size_t);
+void __ILWS_free(void *);
+
+struct memrequest {
+       char *ptr;
+       struct memrequest *next;
+};
+struct memrequest *__ILWS_init_buffer_list();
+void *__ILWS_add_buffer(struct memrequest *,unsigned int);
+void __ILWS_delete_buffer(struct memrequest *);
+void __ILWS_delete_next_buffer(struct memrequest *);
+void __ILWS_delete_buffer_list(struct memrequest *);
+
+#endif


Property changes on: GNUnet/libwebserver/src/memory.h
___________________________________________________________________
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/src/module.c
===================================================================
--- GNUnet/libwebserver/src/module.c    2006-08-18 20:37:47 UTC (rev 3245)
+++ GNUnet/libwebserver/src/module.c    2006-08-18 21:41:52 UTC (rev 3246)
@@ -0,0 +1,22 @@
+/* Copyrights 2002 Luis Figueiredo (address@hidden) All rights reserved. 
+ *
+ * See the LICENSE file
+ *
+ * The origin of this software must not be misrepresented, either by
+ * explicit claim or by omission.  Since few users ever read sources,
+ * credits must appear in the documentation.
+ * 
+ * date: Wen Jul 30 06:57:42 GMT 2003
+ * 
+ * -- module function
+ *
+ *   Tested on WIN32 only
+ */
+#include "module.h"
+
+
+
+
+
+
+


Property changes on: GNUnet/libwebserver/src/module.c
___________________________________________________________________
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/src/module.h
===================================================================
--- GNUnet/libwebserver/src/module.h    2006-08-18 20:37:47 UTC (rev 3245)
+++ GNUnet/libwebserver/src/module.h    2006-08-18 21:41:52 UTC (rev 3246)
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+#ifndef _MODULE_H_
+#define _MODULE_H_
+
+struct module {
+       const char *handle;
+       void (func)();
+
+};
+
+
+
+
+#endif
\ No newline at end of file


Property changes on: GNUnet/libwebserver/src/module.h
___________________________________________________________________
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/src/outgif.c
===================================================================
--- GNUnet/libwebserver/src/outgif.c    2006-08-18 20:37:47 UTC (rev 3245)
+++ GNUnet/libwebserver/src/outgif.c    2006-08-18 21:41:52 UTC (rev 3246)
@@ -0,0 +1,587 @@
+/*
+ * Luis Figueiredo - why remake the wheel, this functions feets perfectly
+ * and the credits still here :)
+ */
+
+
+/*
+ * xvgifwr.c  -  handles writing of GIF files.  based on flgife.c and
+ *               flgifc.c from the FBM Library, by Michael Maudlin
+ *
+ * Contains: 
+ *   WriteGIF(fp, pic, ptype, w, h, rmap, gmap, bmap, numcols, colorstyle,
+ *            comment)
+ *
+ * Note: slightly brain-damaged, in that it'll only write non-interlaced 
+ *       GIF files (in the interests of speed, or something)
+ *
+ */
+
+
+
+/*****************************************************************
+ * Portions of this code Copyright (C) 1989 by Michael Mauldin.
+ * Permission is granted to use this file in whole or in
+ * part for any purpose, educational, recreational or commercial,
+ * provided that this copyright notice is retained unchanged.
+ * This software is available to all free of charge by anonymous
+ * FTP and in the UUNET archives.
+ *
+ *
+ * Authors:  Michael Mauldin (address@hidden)
+ *           David Rowley (address@hidden)
+ *
+ * Based on: compress.c - File compression ala IEEE Computer, June 1984.
+ *
+ *     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 "outgif.h"
+
+static int  __ILWS_Width, __ILWS_Height;
+static int  __ILWS_curx, __ILWS_cury;
+static long __ILWS_CountDown;
+static int  __ILWS_Interlace;
+//static unsigned char bw[2] = {0, 0xff};
+
+static void __ILWS_putword     PARM((int, FILE *));
+static void __ILWS_compress    PARM((int, FILE *, unsigned char *, int));
+static void __ILWS_output      PARM((int));
+static void __ILWS_cl_block    PARM((void));
+static void __ILWS_cl_hash     PARM((count_int));
+static void __ILWS_char_init   PARM((void));
+static void __ILWS_char_out    PARM((int));
+static void __ILWS_flush_char  PARM((void));
+
+
+static unsigned char pc2nc[256],r1[256],g1[256],b1[256];
+
+
+/*************************************************************/
+int __ILWS_WriteGIF(FILE *fp, unsigned char *pic, int w, int h, unsigned char 
*rmap, unsigned char *gmap, unsigned char *bmap, int numcols, int 
colorstyle,int transparency,
+            char *comment)
+{
+  int   RWidth, RHeight;
+  int   LeftOfs, TopOfs;
+  int   ColorMapSize, InitCodeSize, Background, BitsPerPixel;
+  int   i,j,nc;
+  unsigned char *pic8;
+  //unsigned char  rtemp[256],gtemp[256],btemp[256];
+
+  pic8 = pic;
+
+
+
+  __ILWS_Interlace = 0;
+  Background = 0;
+
+
+  for (i=0; i<256; i++) { pc2nc[i] = r1[i] = g1[i] = b1[i] = 0; }
+
+  /* compute number of unique colors */
+  nc = 0;
+
+  for (i=0; i<numcols; i++) {
+    /* see if color #i is already used */
+    for (j=0; j<i; j++) {
+      if (rmap[i] == rmap[j] && gmap[i] == gmap[j] && 
+         bmap[i] == bmap[j]) break;
+    }
+
+    if (j==i) {  /* wasn't found */
+      pc2nc[i] = nc;
+      r1[nc] = rmap[i];
+      g1[nc] = gmap[i];
+      b1[nc] = bmap[i];
+      nc++;
+    }
+    else pc2nc[i] = pc2nc[j];
+  }
+
+
+  /* figure out 'BitsPerPixel' */
+  for (i=1; i<8; i++)
+    if ( (1<<i) >= nc) break;
+  
+  BitsPerPixel = i;
+
+  ColorMapSize = 1 << BitsPerPixel;
+       
+  RWidth  = __ILWS_Width  = w;
+  RHeight = __ILWS_Height = h;
+  LeftOfs = TopOfs = 0;
+       
+  __ILWS_CountDown = w * h;    /* # of pixels we'll be doing */
+
+  if (BitsPerPixel <= 1) InitCodeSize = 2;
+                    else InitCodeSize = BitsPerPixel;
+
+  __ILWS_curx = __ILWS_cury = 0;
+
+  if (!fp) {
+    fprintf(stderr,  "WriteGIF: file not open for writing\n" );
+    return (1);
+  }
+
+  
+  if (comment && strlen(comment) > (size_t) 0)
+    fwrite("GIF89a", (size_t) 1, (size_t) 6, fp);    /* the GIF magic number */
+  else
+    fwrite("GIF87a", (size_t) 1, (size_t) 6, fp);    /* the GIF magic number */
+
+  __ILWS_putword(RWidth, fp);           /* screen descriptor */
+  __ILWS_putword(RHeight, fp);
+
+  i = 0x80;                     /* Yes, there is a color map */
+  i |= (8-1)<<4;                 /* OR in the color resolution (hardwired 8) */
+  i |= (BitsPerPixel - 1);       /* OR in the # of bits per pixel */
+  fputc(i,fp);          
+
+  fputc(Background, fp);         /* background color */
+
+  fputc(0, fp);                  /* future expansion unsigned char */
+
+
+  if (colorstyle == 1) {         /* greyscale */
+    for (i=0; i<ColorMapSize; i++) {
+      j = MONO(r1[i], g1[i], b1[i]);
+      fputc(j, fp);
+      fputc(j, fp);
+      fputc(j, fp);
+    }
+  }
+  else {
+    for (i=0; i<ColorMapSize; i++) {       /* write out Global colormap */
+      fputc(r1[i], fp);
+      fputc(g1[i], fp);
+      fputc(b1[i], fp);
+    }
+  }
+
+  if (comment && strlen(comment) > (size_t) 0) {   /* write comment blocks */
+    char *sp;
+    int   i, blen;
+
+    fputc(0x21, fp);     /* EXTENSION block */
+       fputc(0xF9,fp);   // graphic control extension// Luis Figueiredo
+       fputc(4,fp);    // blocksize
+       fputc(0x1,fp); // transparency flag
+       fputc(100,fp);// delay (unsigned?)
+       fputc(100,fp);// delay (unsigned?)
+       fputc(transparency,fp); // Luis figueiredo
+       fputc(0, fp);    /* zero-length data subblock to end extension */
+    fputc(0x21, fp);     /* EXTENSION block */
+       fputc(0xFE, fp);     /* comment extension */
+    sp = comment;
+    while ( (blen=strlen(sp)) > 0) {
+      if (blen>255) blen = 255;
+      fputc(blen, fp);
+      for (i=0; i<blen; i++, sp++) fputc(*sp, fp);
+    }
+    fputc(0, fp);    /* zero-length data subblock to end extension */
+  }
+
+
+  fputc( ',', fp );              /* image separator */
+
+  /* Write the Image header */
+  __ILWS_putword(LeftOfs, fp);
+  __ILWS_putword(TopOfs,  fp);
+  __ILWS_putword(__ILWS_Width,   fp);
+  __ILWS_putword(__ILWS_Height,  fp);
+  if (__ILWS_Interlace) fputc(0x40, fp);   /* Use Global Colormap, maybe 
Interlace */
+            else fputc(0x00, fp);
+
+  fputc(InitCodeSize, fp);
+  __ILWS_compress(InitCodeSize+1, fp, pic8, w*h);
+
+  fputc(0,fp);                      /* Write out a Zero-length packet (EOF) */
+  fputc(';',fp);                    /* Write GIF file terminator */
+
+
+  if (ferror(fp)) return -1;
+  return (0);
+}
+
+
+
+
+/******************************/
+static void __ILWS_putword(int w, FILE *fp)
+{
+  /* writes a 16-bit integer in GIF order (LSB first) */
+  fputc(w & 0xff, fp);
+  fputc((w>>8)&0xff, fp);
+}
+
+
+
+
+/***********************************************************************/
+
+
+static unsigned long __ILWS_cur_accum = 0;
+static int           __ILWS_cur_bits = 0;
+
+
+
+
+#define min(a,b)        ((a>b) ? b : a)
+
+#define XV_BITS        12    /* BITS was already defined on some systems */
+#define MSDOS  1
+
+#define HSIZE  5003            /* 80% occupancy */
+
+typedef unsigned char   char_type;
+
+
+static int __ILWS_n_bits;                    /* number of bits/code */
+static int __ILWS_maxbits = XV_BITS;         /* user settable max # bits/code 
*/
+static int __ILWS_maxcode;                   /* maximum code, given n_bits */
+static int __ILWS_maxmaxcode = 1 << XV_BITS; /* NEVER generate this */
+
+#define MAXCODE(n_bits)     ( (1 << (n_bits)) - 1)
+
+static  count_int      __ILWS_htab [HSIZE];
+static  unsigned short __ILWS_codetab [HSIZE];
+#define HashTabOf(i)   __ILWS_htab[i]
+#define CodeTabOf(i)   __ILWS_codetab[i]
+
+static int __ILWS_hsize = HSIZE;            /* for dynamic table sizing */
+
+/*
+ * 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**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(1<<XV_BITS))
+
+static int __ILWS_free_ent = 0;                  /* first unused entry */
+
+/*
+ * block compression parameters -- after all codes are used up,
+ * and compression rate changes, start over.
+ */
+static int __ILWS_clear_flg = 0;
+
+static long int __ILWS_in_count = 1;            /* length of input */
+static long int __ILWS_out_count = 0;           /* # of codes output (for 
debugging) */
+
+/*
+ * compress stdin to stdout
+ *
+ * Algorithm:  use open addressing double hashing (no chaining) on the 
+ * prefix code / next character combination.  We do a variant of Knuth's
+ * algorithm D (vol. 3, sec. 6.4) along with G. Knott's relatively-prime
+ * secondary probe.  Here, the modular division first probe is gives way
+ * to a faster exclusive-or manipulation.  Also do block compression with
+ * an adaptive reset, whereby the code table is cleared when the compression
+ * ratio decreases, but after the table fills.  The variable-length output
+ * codes are re-sized at this point, and a special CLEAR code is generated
+ * for the decompressor.  Late addition:  construct the table according to
+ * file size for noticeable speed improvement on small files.  Please direct
+ * questions about this implementation to ames!jaw.
+ */
+
+static int __ILWS_g_init_bits;
+static FILE *__ILWS_g_outfile;
+
+static int __ILWS_ClearCode;
+static int __ILWS_EOFCode;
+
+
+/********************************************************/
+static void __ILWS_compress(int init_bits, FILE *outfile, unsigned char *data, 
int len)
+
+{
+  register long fcode;
+  register int i = 0;
+  register int c;
+  register int ent;
+  register int disp;
+  register int hsize_reg;
+  register int hshift;
+
+  /*
+   * Set up the globals:  g_init_bits - initial number of bits
+   *                      g_outfile   - pointer to output file
+   */
+  __ILWS_g_init_bits = init_bits;
+  __ILWS_g_outfile   = outfile;
+
+  /* initialize 'compress' globals */
+  __ILWS_maxbits = XV_BITS;
+  __ILWS_maxmaxcode = 1<<XV_BITS;
+  memset((char *) __ILWS_htab,0,    sizeof(__ILWS_htab));
+  memset((char *) __ILWS_codetab,0, sizeof(__ILWS_codetab));
+  __ILWS_hsize = HSIZE;
+  __ILWS_free_ent = 0;
+  __ILWS_clear_flg = 0;
+  __ILWS_in_count = 1;
+  __ILWS_out_count = 0;
+  __ILWS_cur_accum = 0;
+  __ILWS_cur_bits = 0;
+
+
+  /*
+   * Set up the necessary values
+   */
+  __ILWS_out_count = 0;
+  __ILWS_clear_flg = 0;
+  __ILWS_in_count = 1;
+  __ILWS_maxcode = MAXCODE(__ILWS_n_bits = __ILWS_g_init_bits);
+
+  __ILWS_ClearCode = (1 << (init_bits - 1));
+  __ILWS_EOFCode = __ILWS_ClearCode + 1;
+  __ILWS_free_ent = __ILWS_ClearCode + 2;
+
+  __ILWS_char_init();
+  ent = pc2nc[*data++];  
+  len--;
+
+  hshift = 0;
+  for ( fcode = (long) __ILWS_hsize;  fcode < 65536L; fcode *= 2L )
+    hshift++;
+  hshift = 8 - hshift;                /* set hash code range bound */
+
+  hsize_reg = __ILWS_hsize;
+  __ILWS_cl_hash( (count_int) hsize_reg);            /* clear hash table */
+
+  __ILWS_output(__ILWS_ClearCode);
+    
+  while (len) {
+    c = pc2nc[*data++];  len--;
+    __ILWS_in_count++;
+
+    fcode = (long) ( ( (long) c << __ILWS_maxbits) + ent);
+    i = (((int) c << hshift) ^ ent);    /* xor hashing */
+
+    if ( HashTabOf (i) == fcode ) {
+      ent = CodeTabOf (i);
+      continue;
+    }
+
+    else if ( (long)HashTabOf (i) < 0 )      /* empty slot */
+      goto nomatch;
+
+    disp = hsize_reg - i;           /* secondary hash (after G. Knott) */
+    if ( i == 0 )
+      disp = 1;
+
+probe:
+    if ( (i -= disp) < 0 )
+      i += hsize_reg;
+
+    if ( HashTabOf (i) == fcode ) {
+      ent = CodeTabOf (i);
+      continue;
+    }
+
+    if ( (long)HashTabOf (i) >= 0 ) 
+      goto probe;
+
+nomatch:
+    __ILWS_output(ent);
+    __ILWS_out_count++;
+    ent = c;
+
+    if ( __ILWS_free_ent < __ILWS_maxmaxcode ) {
+      CodeTabOf (i) = __ILWS_free_ent++; /* code -> hashtable */
+      HashTabOf (i) = fcode;
+    }
+    else
+      __ILWS_cl_block();
+  }
+
+  /* Put out the final code */
+  __ILWS_output(ent);
+  __ILWS_out_count++;
+  __ILWS_output(__ILWS_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 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
+unsigned long __ILWS_masks[] = { 0x0000, 0x0001, 0x0003, 0x0007, 0x000F,
+                                  0x001F, 0x003F, 0x007F, 0x00FF,
+                                  0x01FF, 0x03FF, 0x07FF, 0x0FFF,
+                                  0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF };
+
+static void __ILWS_output(int code)
+{
+  __ILWS_cur_accum &= __ILWS_masks[__ILWS_cur_bits];
+
+  if (__ILWS_cur_bits > 0)
+    __ILWS_cur_accum |= ((long)code << __ILWS_cur_bits);
+  else
+    __ILWS_cur_accum = code;
+       
+  __ILWS_cur_bits += __ILWS_n_bits;
+
+  while( __ILWS_cur_bits >= 8 ) {
+    __ILWS_char_out( (int) (__ILWS_cur_accum & 0xff) );
+    __ILWS_cur_accum >>= 8;
+    __ILWS_cur_bits -= 8;
+  }
+
+  /*
+   * If the next entry is going to be too big for the code size,
+   * then increase it, if possible.
+   */
+
+  if (__ILWS_free_ent > __ILWS_maxcode || __ILWS_clear_flg) {
+
+    if( __ILWS_clear_flg ) {
+      __ILWS_maxcode = MAXCODE (__ILWS_n_bits = __ILWS_g_init_bits);
+      __ILWS_clear_flg = 0;
+    }
+    else {
+      __ILWS_n_bits++;
+      if ( __ILWS_n_bits == __ILWS_maxbits )
+       __ILWS_maxcode = __ILWS_maxmaxcode;
+      else
+       __ILWS_maxcode = MAXCODE(__ILWS_n_bits);
+    }
+  }
+       
+  if( code == __ILWS_EOFCode ) {
+    /* At EOF, write the rest of the buffer */
+    while( __ILWS_cur_bits > 0 ) {
+      __ILWS_char_out( (int)(__ILWS_cur_accum & 0xff) );
+      __ILWS_cur_accum >>= 8;
+      __ILWS_cur_bits -= 8;
+    }
+
+    __ILWS_flush_char();
+       
+    fflush( __ILWS_g_outfile );
+
+#ifdef FOO
+    if( ferror( g_outfile ) ) 
+      FatalError("unable to write GIF file");
+#endif
+  }
+}
+
+
+/********************************/
+static void __ILWS_cl_block ()             /* table clear for block compress */
+{
+  /* Clear out the hash table */
+
+  __ILWS_cl_hash ( (count_int) __ILWS_hsize );
+  __ILWS_free_ent = __ILWS_ClearCode + 2;
+  __ILWS_clear_flg = 1;
+
+  __ILWS_output(__ILWS_ClearCode);
+}
+
+
+/********************************/
+static void __ILWS_cl_hash(register count_int hsize)          /* reset code 
table */
+{
+  register count_int *htab_p = __ILWS_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;
+}
+
+
+/******************************************************************************
+ *
+ * GIF Specific routines
+ *
+ 
******************************************************************************/
+
+/*
+ * Number of characters so far in this 'packet'
+ */
+static int __ILWS_a_count;
+
+/*
+ * Set up the 'unsigned char output' routine
+ */
+static void __ILWS_char_init()
+{
+       __ILWS_a_count = 0;
+}
+
+/*
+ * Define the storage for the packet accumulator
+ */
+static char __ILWS_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 __ILWS_char_out(int c)
+{
+  __ILWS_accum[ __ILWS_a_count++ ] = c;
+  if( __ILWS_a_count >= 254 ) 
+    __ILWS_flush_char();
+}
+
+/*
+ * Flush the packet to disk, and reset the accumulator
+ */
+static void __ILWS_flush_char()
+{
+  if( __ILWS_a_count > 0 ) {
+    fputc(__ILWS_a_count, __ILWS_g_outfile );
+    fwrite(__ILWS_accum, (size_t) 1, (size_t) __ILWS_a_count, __ILWS_g_outfile 
);
+    __ILWS_a_count = 0;
+  }
+}      


Property changes on: GNUnet/libwebserver/src/outgif.c
___________________________________________________________________
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/src/outgif.h
===================================================================
--- GNUnet/libwebserver/src/outgif.h    2006-08-18 20:37:47 UTC (rev 3245)
+++ GNUnet/libwebserver/src/outgif.h    2006-08-18 21:41:52 UTC (rev 3246)
@@ -0,0 +1,63 @@
+/* Copyrights 2002 Luis Figueiredo (address@hidden) All rights reserved. 
+ *
+ * See the LICENSE file
+ *
+ * The origin of this software must not be misrepresented, either by
+ * explicit claim or by omission.  Since few users ever read sources,
+ * credits must appear in the documentation.
+ *
+ * file: web_outgif.h
+ *
+ * description: output gif outgif.c is copyrighted by 
+ */
+ /*****************************************************************
+ * Portions of this code Copyright (C) 1989 by Michael Mauldin.
+ * Permission is granted to use this file in whole or in
+ * part for any purpose, educational, recreational or commercial,
+ * provided that this copyright notice is retained unchanged.
+ * This software is available to all free of charge by anonymous
+ * FTP and in the UUNET archives.
+ *
+ *
+ * Authors:  Michael Mauldin (address@hidden)
+ *           David Rowley (address@hidden)
+ *
+ * Based on: compress.c - File compression ala IEEE Computer, June 1984.
+ *
+ *     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)
+ *****************************************************************/
+/*
+ *
+ * date: 20:57,13-57-2002
+ */
+
+#ifndef _WEB_OUTGIF_H_ 
+#define _WEB_OUTGIF_H_
+
+#include <stdio.h>
+#include <string.h>
+
+#include "debug.h"
+
+#undef PARM
+#ifdef __STDC__
+#  define PARM(a) a
+#else
+#  define PARM(a) ()
+#  define const
+#endif
+
+/* MONO returns total intensity of r,g,b triple (i = .33R + .5G + .17B) */
+#define MONO(rd,gn,bl) ( ((int)(rd)*11 + (int)(gn)*16 + (int)(bl)*5) >> 5)
+
+typedef long int        count_int;
+
+
+int __ILWS_WriteGIF(FILE *, unsigned char *, int, int, unsigned char *, 
unsigned char *, unsigned char *, int, int, int, char *);
+
+#endif


Property changes on: GNUnet/libwebserver/src/outgif.h
___________________________________________________________________
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/src/outstream.c
===================================================================
--- GNUnet/libwebserver/src/outstream.c 2006-08-18 20:37:47 UTC (rev 3245)
+++ GNUnet/libwebserver/src/outstream.c 2006-08-18 21:41:52 UTC (rev 3246)
@@ -0,0 +1,122 @@
+/* Copyrights 2002 Luis Figueiredo (address@hidden) All rights reserved. 
+ *
+ * See the LICENSE file
+ *
+ * The origin of this software must not be misrepresented, either by
+ * explicit claim or by omission.  Since few users ever read sources,
+ * credits must appear in the documentation.
+ *
+ * date: Sat Mar 30 14:25:25 GMT 2002 
+ *
+ * -- stream list functions
+ */
+
+
+#include "outstream.h"
+
+/*********************************************************************************************************/
 
+/*
+ *     add_outstream, add a file to output (client) stream
+ */
+int __ILWS_add_outstream(struct outstream *list,char *fname,FILE* stream,int 
istmp){
+       struct outstream *temp=list;
+       FILE *tmp;
+       while(temp->next!=NULL)temp=temp->next;
+       
+       if(!(temp->next=__ILWS_malloc(sizeof(struct outstream)))) {
+               LWSERR(LE_MEMORY);
+               return 0;
+       };
+       // file check (0.5.3);
+       tmp=fopen(fname,"rb");
+       if(tmp==NULL) {
+               __ILWS_free(temp->next);
+               temp->next=NULL;
+               return 0;
+       };
+       fclose(tmp);
+       // -- 
+       temp->next->fname=NULL;
+       if(fname!=NULL) {
+               if(!(temp->next->fname=__ILWS_malloc(strlen(fname)+1))) {
+                       __ILWS_free(temp->next);
+                       temp->next=NULL;
+                       LWSERR(LE_MEMORY);
+                       return 0;
+               };
+               memcpy(temp->next->fname,fname,strlen(fname));
+               temp->next->fname[strlen(fname)]='\0'; 
+       };
+       temp->next->todelete=istmp;
+       temp->next->fstream=stream;
+       temp->next->wsize=1;
+       temp->next->rsize=0;
+       temp->next->wrotesize=0;
+       temp->next->varsize=0;
+       temp->next->next=NULL;  
+       return 1;       
+}
+
+/*********************************************************************************************************/
+/*
+ * Initializate (allocate) outstream list
+ */
+struct outstream *__ILWS_init_outstream_list() {
+       struct outstream *ret;
+       
+       
+       if(!(ret=__ILWS_malloc(sizeof(struct outstream)))) {
+               LWSERR(LE_MEMORY);
+               return NULL;
+       };
+       ret->todelete=0;
+       ret->fname=NULL;
+       ret->flags=0;
+       ret->fstream=NULL;
+       ret->next=NULL;
+       return ret;
+}
+
+/*********************************************************************************************************/
+/*
+ * Delete a especific node
+ */
+void __ILWS_delete_outstream(struct outstream *node) { // Changed
+       int rt;
+       if(node->fstream!=NULL)fclose(node->fstream); // better here;
+       if(node->todelete) { // is temporary file
+               rt=unlink(node->fname);
+               if(rt==-1) {
+                       LWSERR(LE_FILESYS);
+               };
+               
+       };
+       if(node->fname!=NULL)__ILWS_free(node->fname);
+       __ILWS_free(node);
+}
+
+/*********************************************************************************************************/
+/*
+ * delete next node 
+ */
+void __ILWS_delete_next_outstream(struct outstream *node) {
+       struct outstream *temp=node->next;
+       node->next=node->next->next;
+       __ILWS_delete_outstream(temp);
+}
+
+/*********************************************************************************************************/
+/*
+ * delete all nodes on the list (reset list)
+ */
+void __ILWS_delete_outstream_list(struct outstream *list) {
+       struct outstream *temp=list;
+       while(temp->next!=NULL) {
+               
+               __ILWS_delete_next_outstream(temp);
+       };
+       
+       __ILWS_delete_outstream(temp);
+       
+}
+


Property changes on: GNUnet/libwebserver/src/outstream.c
___________________________________________________________________
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/src/outstream.h
===================================================================
--- GNUnet/libwebserver/src/outstream.h 2006-08-18 20:37:47 UTC (rev 3245)
+++ GNUnet/libwebserver/src/outstream.h 2006-08-18 21:41:52 UTC (rev 3246)
@@ -0,0 +1,53 @@
+/* Copyrights 2002 Luis Figueiredo (address@hidden) All rights reserved. 
+ *
+ * See the LICENSE file
+ *
+ * The origin of this software must not be misrepresented, either by
+ * explicit claim or by omission.  Since few users ever read sources,
+ * credits must appear in the documentation.
+ *
+ * date: Sat Mar 30 14:25:25 GMT 2002 
+ *
+ *  stream functions
+ */
+
+#ifndef _OUTSTREAM_H_
+#define _OUTSTREAM_H_
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifndef WIN32
+#include <unistd.h>
+#endif
+
+#include "debug.h"
+#include "memory.h"
+#include "error.h"
+
+
+
+
+
+struct outstream {
+       FILE *fstream;
+       char *fname;
+       int todelete;
+       int wsize,rsize; 
+       long wrotesize;
+       long varsize;
+       int flags;
+       struct outstream *next;
+};
+
+int __ILWS_add_outstream(struct outstream *, char *,FILE *,int);
+struct outstream *__ILWS_init_outstream_list();
+void __ILWS_delete_next_outstream(struct outstream *);
+void __ILWS_delete_outstream_list(struct outstream *);
+void __ILWS_delete_outstream(struct outstream *);
+#endif


Property changes on: GNUnet/libwebserver/src/outstream.h
___________________________________________________________________
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/src/server.c
===================================================================
--- GNUnet/libwebserver/src/server.c    2006-08-18 20:37:47 UTC (rev 3245)
+++ GNUnet/libwebserver/src/server.c    2006-08-18 21:41:52 UTC (rev 3246)
@@ -0,0 +1,448 @@
+/* Copyrights 2002 Luis Figueiredo (address@hidden) All rights reserved. 
+ *
+ * See the LICENSE file
+ *
+ * The origin of this software must not be misrepresented, either by
+ * explicit claim or by omission.  Since few users ever read sources,
+ * credits must appear in the documentation.
+ * 
+ * date: Sat Mar 30 14:44:42 GMT 2002
+ *
+ * -- core server functions
+ *
+ */
+
+#include "server.h"
+#include "logo.h"
+
+#ifdef WIN32
+       #define _SERVER_VERSION "libwebserver/0.5.3(win32)" // update allways 
when changing version (damn win)
+#endif
+
+#ifndef _SERVER_VERSION
+       #define _SERVER_VERSION "libwebserver/(unknow)"
+#endif
+
+#ifdef DEBUG
+       char *_libwebserver_version= _SERVER_VERSION "(debug)";
+#else
+       char *_libwebserver_version= _SERVER_VERSION;
+#endif
+
+struct web_server *current_web_server;
+
+
+/*********************************************************************************************************/
+/*
+ *     Define certificate file (open_ssl)
+ */
+void web_server_useSSLcert(struct web_server *server,const char *file) {
+#ifdef HAVE_OPENSSL
+       if(!(server->cert_file=__ILWS_malloc(strlen(file)+1))) {
+               LWSERR(LE_MEMORY);
+               return;
+       };
+       memcpy(server->cert_file,file,strlen(file));
+       server->cert_file[strlen(file)]=0;
+#else
+       printf("OpenSSL not supported in this compilation\n");
+#endif
+}
+
+void web_server_useMIMEfile(struct web_server *server,const char *file) {
+       if(!(server->mimefile=__ILWS_malloc(strlen(file)+1))) {
+               LWSERR(LE_MEMORY);
+               return;
+       };
+       memcpy(server->mimefile,file,strlen(file));
+       server->mimefile[strlen(file)]=0;
+};
+/*********************************************************************************************************/
+/*
+ *  Handler for libwebserver logotipe
+ */
+void _web_server_logo() {
+       printf("Content-type: image/gif\r\n\r\n");
+       fwrite((char *)_logo,sizeof(_logo),1,stdout);
+}        
+
+
+/*********************************************************************************************************/
+/*
+ * Add an handler to request data
+ */
+int web_server_addhandler(struct web_server *server,const char *mstr,void 
(*func)(),int flag) {
+       _logfile=server->weblog;
+       // xor?
+       flag ^= (server->flags & WS_LOCAL); // global flag to handler flag
+       flag ^= (server->flags & WS_DYNVAR); // global flag to handler flag
+       flag ^= (server->flags & WS_USELEN); // global flag to handler flag
+       web_log("[%s] Adding handler %s 
<--%s%s%s\n",__ILWS_date(time(NULL),"%d/%b/%Y:%H:%M:%S %z"),mstr, ((flag & 
WS_LOCAL) == WS_LOCAL && !((server->flags & WS_LOCAL) == WS_LOCAL))?"[LOCAL] 
":"", ((flag & WS_DYNVAR) == WS_DYNVAR)?"[DYNVAR]":"", ((flag & WS_USELEN) == 
WS_USELEN)?"[USELEN]":"");
+       return __ILWS_add_handler((struct gethandler 
*)server->gethandler,mstr,func,NULL,flag,GH_FUNCTION);
+}
+
+/*********************************************************************************************************/
+/*
+ * Add an alias dir (new on 0.5.2)
+ */
+int web_server_aliasdir(struct web_server *server, const char *str, char 
*path,int flag) {
+       char *mstr;
+       int ret;
+       mstr=__ILWS_malloc(strlen(str)+7);
+       if(!strlen(str)) {
+               snprintf(mstr,strlen(str)+7,"* /*");
+       } else {
+               snprintf(mstr,strlen(str)+7,"* /%s/*",str);
+       };
+       _logfile=server->weblog;
+       flag ^= (server->flags & WS_LOCAL); // global flag to handler flag
+       flag ^= (server->flags & WS_DYNVAR); // global flag to handler flag
+       flag ^= (server->flags & WS_USELEN); // global flag to handler flag
+       web_log("[%s] Adding directory %s 
<--%s%s%s\n",__ILWS_date(time(NULL),"%d/%b/%Y:%H:%M:%S %z"),mstr, ((flag & 
WS_LOCAL) == WS_LOCAL && !((server->flags & WS_LOCAL) == WS_LOCAL))?"[LOCAL] 
":"", ((flag & WS_DYNVAR) == WS_DYNVAR)?"[DYNVAR]":"", ((flag & WS_USELEN) == 
WS_USELEN)?"[USELEN]":"");
+       ret=__ILWS_add_handler((struct gethandler 
*)server->gethandler,mstr,NULL,path,flag,GH_DIRECTORY);
+       __ILWS_free(mstr);
+       return ret;
+};
+
+
+/*********************************************************************************************************/
+/*
+ *     Personal config (new on 0.5.0)
+ */
+char *web_server_getconf(struct web_server *server, const char *topic,const 
char *key) {
+       char *dataconf;
+       char *tmp1,*tmp2,*tmp3;
+       long tmpsize=0;
+
+       dataconf=__ILWS_stristr(server->dataconf,topic);
+       if(dataconf==NULL) {
+               return NULL;
+       };
+       dataconf+=strlen(topic);
+       tmp1=__ILWS_stristr(dataconf,key);
+       do {
+               tmp1=__ILWS_stristr(dataconf,key);
+               dataconf+=1;
+               if(dataconf[0]==0) { 
+                       return NULL;
+               };
+               if(dataconf[0]=='[' && dataconf[-1]=='\n') { 
+                       return NULL;
+               };
+       }while(!(tmp1!=NULL && tmp1[-1]=='\n' && tmp1[strlen(key)]=='='));
+       
+       tmp1+=strlen(key)+1;
+       tmp2=__ILWS_stristr(tmp1,"\n");
+       if(tmp2==NULL) {
+               tmp2=tmp1+strlen(tmp1);
+       };
+       tmpsize=tmp2-tmp1;
+       if(!(tmp3=__ILWS_malloc(tmpsize+1))) {
+               LWSERR(LE_MEMORY);
+               return NULL;
+       };
+       memcpy(tmp3,tmp1,tmpsize);
+       tmp3[tmpsize]=0;
+       return tmp3;
+};
+
+/*********************************************************************************************************/
+/*
+ *     Define config file to setup server (new on 0.5.0)
+ */
+int web_server_setup(struct web_server *server,const char *conffile) {
+       FILE *tmpf;
+       char *tmp3;
+       //long tmpsize=0;
+       long sizec;
+       struct stat statf; // tested only on win
+
+       if(!(server->conffile=__ILWS_malloc(strlen(conffile)+1))) {
+               LWSERR(LE_MEMORY);
+               return 0;
+       };
+
+       memcpy(server->conffile,conffile,strlen(conffile));
+       server->conffile[strlen(conffile)]=0;
+       
+       tmpf=fopen(server->conffile,"r");
+       if(tmpf==NULL) {
+               printf("no config file found\r\n");
+               server->dataconf="";
+               return(0);
+       };
+       fseek(tmpf,SEEK_SET,SEEK_END);
+       sizec=ftell(tmpf);
+       fseek(tmpf,0,SEEK_SET);
+       if(!(server->dataconf=__ILWS_malloc(sizec+1))) {
+               LWSERR(LE_MEMORY);
+               return 0;
+       };
+       fread(server->dataconf,sizec,1,tmpf);
+       server->dataconf[sizec]=0; // Hilobok Andrew (address@hidden) said to 
remove the -9 :)
+       fclose(tmpf);
+       
+       stat(server->conffile,&statf); // tested only on win
+       server->conffiletime=statf.st_mtime; // tested only on win
+
+       if((server->logfile=web_server_getconf(server,"LIBWEBSERVER","LOG"))) {
+               web_log("\nUsing logfile [%s]\n",server->logfile);
+               server->weblog=open_weblog(server->logfile);
+       } else {
+               web_log("\nLOG entry not found\r\n");
+               server->weblog=NULL;
+       };
+       if((tmp3=web_server_getconf(server,"LIBWEBSERVER","PORT"))) {
+               web_log("\nListen port [%s]\n",tmp3);
+               server->port=atoi(tmp3);
+               __ILWS_free(tmp3);
+       } else {
+               web_log("PORT entry not found\r\n");
+               server->port=0;
+       };
+#ifdef HAVE_OPENSSL
+       // Fetch SSL
+       if((tmp3=web_server_getconf(server,"LIBWEBSERVER","USESSL"))) {
+               if(tmp3[0]=='1') {
+                       server->flags = server->flags | WS_USESSL;
+               }else if(tmp3[0]=='0') {
+                       server->flags = server->flags & ~WS_USESSL;
+               } else {
+                       fprintf(stderr,"[USESSL=] argument invalid\n");
+               };
+               __ILWS_free(tmp3);
+       } 
+       // Fetch CERTFILE
+       server->cert_file=web_server_getconf(server,"LIBWEBSERVER","CERTFILE");
+       server->mimefile=web_server_getconf(server,"LIBWEBSERVER","MIMEFILE");
+#endif
+       // Fetch LOCAL
+       if((tmp3=web_server_getconf(server,"LIBWEBSERVER","LOCAL"))) {
+               if(tmp3[0]=='1') {
+                       server->flags = server->flags | WS_LOCAL;
+               } else if(tmp3[0]=='0') {
+                       server->flags=server->flags & ~WS_LOCAL;
+               }else {
+                       fprintf(stderr,"[LOCAL=] argument invalid\n");
+               };
+               __ILWS_free(tmp3);
+       } 
+       
+       return 1;
+};
+
+/*********************************************************************************************************/
+/*
+ * This function initialize one web_server handler
+ */
+int web_server_init(struct web_server *server,int port,const char *logfile,int 
flags) {
+#ifdef WIN32   
+       unsigned long t=IOC_INOUT;
+       WSADATA WSAinfo;
+       WSAStartup(2,&WSAinfo); // Damn w32 sockets
+#endif
+
+       current_web_server=server;
+       server->port=port;
+       server->conffile=NULL;
+       server->mimefile=NULL;
+       server->weblog=NULL;
+       server->usessl=0;
+       server->flags=flags;
+       server->dataconf="";
+       if((flags & WS_USEEXTCONF) == WS_USEEXTCONF) {
+               if(!(web_server_setup(server,logfile))) {
+#ifdef WIN32           
+                       WSACleanup();
+#endif
+                       return 0;
+               };
+               _logfile=server->weblog; // Set current log stream
+               web_log("%s using config file 
%s\n",_libwebserver_version,logfile);
+       };
+       // Create a listen socket port 'port' and listen addr (0) (all 
interfaces)
+       server->socket=__ILWS_listensocket((short)server->port,0);      
+       if(server->socket==-1) {
+               LWSERR(LE_NET);
+#ifdef WIN32           
+               WSACleanup();
+#endif
+               return 0;
+       };
+#ifdef WIN32
+       ioctlsocket(server->socket,FIONBIO,&t);  //non blocking sockets for 
win32
+#else
+       fcntl(server->socket,F_SETFL,O_NONBLOCK);
+#endif
+       // Setup FILE structure of logfile
+       if(logfile!=NULL && !((flags & WS_USEEXTCONF) == WS_USEEXTCONF)) {
+               server->logfile=__ILWS_malloc(strlen(logfile)+1);
+               memcpy(server->logfile,logfile,strlen(logfile));
+               server->logfile[strlen(logfile)]=0;
+               server->weblog=open_weblog(logfile); // Create File stream for 
log
+       };
+       
+       web_log("\n[%s] Server started at port %d 
(%s)\n",__ILWS_date(time(NULL),"%d/%b/%Y:%H:%M:%S 
%z"),server->port,_libwebserver_version);
+       
+       // Setup Flags
+       
+       // openssl
+#ifdef HAVE_OPENSSL    
+       if((server->flags & WS_USESSL) == WS_USESSL) {
+               web_log("[%s] (FLAG) Using SSL in 
connections\n",__ILWS_date(time(NULL),"%d/%b/%Y:%H:%M:%S %z"));       
+               web_log("                       +-- %s certificate 
file\n",server->cert_file);
+               SSL_load_error_strings();
+               SSLeay_add_ssl_algorithms();    
+               server->ctx=SSL_CTX_new (SSLv23_server_method());
+               if (SSL_CTX_use_certificate_file(server->ctx, 
server->cert_file, SSL_FILETYPE_PEM) <= 0) {
+                       ERR_print_errors_fp(stderr);
+                       exit(3);
+               }
+               if (SSL_CTX_use_PrivateKey_file(server->ctx, server->cert_file, 
SSL_FILETYPE_PEM) <= 0) {
+                       ERR_print_errors_fp(stderr);
+                       exit(4);
+               }                      
+               if (SSL_CTX_check_private_key(server->ctx)<= 0)          {
+                       ERR_print_errors_fp(stderr);
+                       exit(4);
+               };
+               server->usessl=1;
+       };
+#endif
+       if((server->flags & WS_LOCAL) == WS_LOCAL) {
+               web_log("[%s] (FLAG) Accepting only local 
connections\n",__ILWS_date(time(NULL),"%d/%b/%Y:%H:%M:%S %z"));       
+       };
+       server->client=__ILWS_init_client_list();                               
                                                // Initializate client list
+       server->gethandler=__ILWS_init_handler_list();                          
                                        // Initializate handlers list
+       web_server_addhandler(server,"* /libwebserver.gif",_web_server_logo,0); 
// Add logo default handler
+
+#ifndef WIN32  
+       signal(SIGPIPE,SIG_IGN);
+#endif
+       return 1;
+}                            
+
+
+/*********************************************************************************************************/
+/*
+ * This function shuts down a running web server, frees its allocated memory,
+ * and closes its socket. If called on a struct web_server that has already
+ * been shut down, this is a noop.
+ */
+void web_server_shutdown(struct web_server *server) {
+       // free and close things in opposite order of web_server_init
+       
+       __ILWS_delete_handler_list(server->gethandler);
+       server->gethandler = NULL;
+       __ILWS_delete_client_list(server->client);
+       server->client = NULL;
+       
+       if(server->socket > 0) {
+#ifdef WIN32
+               closesocket(server->socket);
+#else
+               close(server->socket);
+#endif
+               server->socket = -1;
+       }
+       
+       if(server->weblog) {
+               fclose(server->weblog);
+               server->weblog = NULL;
+               __ILWS_free(server->logfile);
+               server->logfile = NULL;
+       }
+       
+#ifdef WIN32
+       WSACleanup();
+#endif
+}
+
+/*********************************************************************************************************/
+/*
+ * Core function, return 2 if no client to process, 1 if some client 
processed, 0 if error
+ */
+int web_server_run(struct web_server *server) {
+       struct web_client *client;
+       int rt;
+       int tsalen=0;
+       int tsocket=0;
+       struct sockaddr_in tsa;
+       _logfile=server->weblog;
+       current_web_server=server;
+       if(server->client->next==NULL) {
+               //if(__ILWS_newdata(server->socket)); // does nothing but act 
like usleep 
+       };
+// search for client           
+       tsalen=sizeof(client->sa);
+       tsocket=accept(server->socket,(struct sockaddr *)&tsa,&tsalen);
+       if(tsocket==-1) {
+#ifdef WIN32
+               if(WSAGetLastError()!=WSAEWOULDBLOCK) { 
+#else                  
+               if(errno!=EAGAIN) { 
+#endif
+                       fprintf(stderr,"What kind of error is this?\n"); // 
REMOVE
+                       // client fucked up? warn somebody? (error or log or 
something?)
+                       return 0; // don't process nothing
+               };
+       } else {
+               client=__ILWS_malloc(sizeof(struct web_client));
+               if(client==NULL) {
+                       rt=shutdown(tsocket,SHUT_RDWR);
+#ifdef WIN32
+                       rt=closesocket(tsocket); 
+#else
+                       rt=close(tsocket); 
+#endif
+                       LWSERR(LE_MEMORY);
+                       return 0;
+               };
+               client->salen=tsalen;
+               client->socket=tsocket;
+               client->sa=tsa;
+#ifdef HAVE_OPENSSL
+               if((server->flags & WS_USESSL) == WS_USESSL) {
+                       client->ssl = SSL_new(server->ctx);
+                       SSL_set_fd(client->ssl,client->socket);
+                       SSL_accept(client->ssl);
+               //client->cert = SSL_get_peer_certificate (client->ssl);
+               } else {
+                       client->ssl=NULL;
+               };
+#endif
+               if(!__ILWS_add_client(server->client,client)) {
+                       fprintf(stderr,"No client?\n"); // REMOVE
+                       return 0;
+               }else {
+                       web_log("%s - - [%s] 
Connected\n",inet_ntoa(client->sa.sin_addr),__ILWS_date(time(NULL),"%d/%b/%Y:%H:%M:%S
 %z")); //REMOBE                      
+               };
+       };
+       // end search for client
+       client=server->client; // init list
+       if(!client->next) { // think of Rocco Carbone (address@hidden)
+               return 2; // i don't need to process the list (nothing next) 
returns 2 if there is no client to process
+       };
+       while(client->next!=NULL) { // Process the client and swap to next;
+               current_web_client=client->next;
+               switch(client->next->stat) {
+                       case 1: {
+                               __ILWS_read_client(current_web_client);
+                       };break;
+            case 2: {
+                               
__ILWS_process_client(current_web_client,server->gethandler);
+                       };break;
+                       case 4: {
+                               __ILWS_output_client(current_web_client);       
+                       };break;
+                       case 5: {
+                               __ILWS_delete_next_client(client); 
+                               continue;
+                       };break;
+               };
+               client=client->next;
+       
+       };   
+       return 1;  // return 1 if something processed
+}
+


Property changes on: GNUnet/libwebserver/src/server.c
___________________________________________________________________
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/src/server.h
===================================================================
--- GNUnet/libwebserver/src/server.h    2006-08-18 20:37:47 UTC (rev 3245)
+++ GNUnet/libwebserver/src/server.h    2006-08-18 21:41:52 UTC (rev 3246)
@@ -0,0 +1,86 @@
+/* Copyrights 2002 Luis Figueiredo (address@hidden) All rights reserved. 
+ *
+ * See the LICENSE file
+ *
+ * The origin of this software must not be misrepresented, either by
+ * explicit claim or by omission.  Since few users ever read sources,
+ * credits must appear in the documentation.
+ *
+ * date: Sat Mar 30 14:44:42 GMT 2002
+ *
+ *
+ * --
+ *
+ */
+
+#ifndef _SERVER_H_
+#define _SERVER_H_
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif         
+
+#include <stdio.h>
+#include <signal.h>
+#include <time.h>
+
+
+#include "memory.h"
+#include "client.h"
+#include "gethandler.h"
+#include "socket.h"
+#include "error.h"
+
+#include "debug.h"
+
+#ifdef WIN32
+
+#define SHUT_RDWR SD_BOTH
+#endif
+
+
+
+
+extern char *_libwebserver_version;
+extern struct web_server *current_web_server; 
+struct web_server {
+       int socket;
+       unsigned int port;
+       char *logfile;
+       char *conffile;
+       time_t conffiletime; // tested only on win
+       char *mimefile;
+       char *dataconf;
+       FILE *weblog;
+       int flags;
+       struct gethandler *gethandler;
+       struct web_client *client;
+       int usessl;
+#ifdef HAVE_OPENSSL
+       char *cert_file;
+       SSL_CTX *ctx;
+#else
+       void *pad[2];
+#endif 
+
+};                                                                             
                                                
+#define WS_LOCAL 1 // Can be only accessed by localhost
+#define WS_USESSL 2 // Use ssl conections (openssl lib required)      
+#define WS_USEEXTCONF 4 // Use external config file (new 0.5.0)
+
+
+void web_server_useSSLcert(struct web_server *,const char *); // Mandatory if 
WS_USESSL set
+void web_server_useMIMEfile(struct web_server*,const char *); // new on 0.5.2
+int web_server_init(struct web_server *,int,const char *,int);
+void web_server_shutdown(struct web_server *);
+int web_server_addhandler(struct web_server *,const char *,void (*)(),int);
+int web_server_aliasdir(struct web_server *, const char *, char *,int );
+int web_server_run(struct web_server *);
+int web_server_setup(struct web_server *server,const char *conffile); // (new 
on 0.5.0)
+char *web_server_getconf(struct web_server *, const char *,const char *); // 
(new on 0.5.0)
+
+
+#include "weblog.h"
+
+#endif
+


Property changes on: GNUnet/libwebserver/src/server.h
___________________________________________________________________
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/src/socket.c
===================================================================
--- GNUnet/libwebserver/src/socket.c    2006-08-18 20:37:47 UTC (rev 3245)
+++ GNUnet/libwebserver/src/socket.c    2006-08-18 21:41:52 UTC (rev 3246)
@@ -0,0 +1,74 @@
+/* Copyrights 2002 Luis Figueiredo (address@hidden) All rights reserved. 
+ *
+ * See the LICENSE file
+ *
+ * The origin of this software must not be misrepresented, either by
+ * explicit claim or by omission.  Since few users ever read sources,
+ * credits must appear in the documentation.
+ *
+ * date: Sat Mar 30 14:44:42 GMT 2002
+ *
+ * -- Basic socket operations
+ *
+ */
+
+
+#include "socket.h"
+
+
+/*********************************************************************************************************/
+/*
+ * socket operations
+ */
+int __ILWS_newdata(int sock) {
+       int ret;
+       struct timeval tv;
+       fd_set rfds;
+       FD_ZERO(&rfds);
+       FD_SET((unsigned)sock,&rfds);
+       tv.tv_usec=2;
+       tv.tv_sec=0;
+       ret=select(sock+1,&rfds,NULL,NULL,&tv);
+       FD_CLR((unsigned)sock,&rfds);
+       return ret;
+}                                                                              
                                               
+
+/*********************************************************************************************************/
+/*
+ * to add a listen socket
+ */
+int __ILWS_listensocket(short port, int saddr) {
+       struct sockaddr_in sa;
+       int ret;
+       int sockopt=1; /* Rocco Was Here */
+       sa.sin_addr.s_addr=saddr;
+       sa.sin_port=htons((short)port);
+       sa.sin_family=AF_INET;
+       ret=socket(AF_INET,SOCK_STREAM,6); // tcp
+       if(ret==-1) {
+               return -1;
+       };
+       /* Rocco Was Here */
+       setsockopt(ret,SOL_SOCKET,SO_REUSEADDR,(char 
*)&sockopt,sizeof(sockopt));  // why? Rocco
+
+       if(bind(ret,(struct sockaddr *)&sa,sizeof(sa))==-1) {
+               close(ret); /* Rocco Was Here */
+               return -1;
+       };
+
+       if(listen(ret,512)==-1) { // 512 backlog 
+               close(ret); /* Rocco Was Here */
+               return -1;
+       };
+       IFDEBUG(fprintf(stderr,"socket.c: Listen on port %d\n",port));
+       return ret;
+}
+
+/*********************************************************************************************************/
+/*
+ * as the read function
+ */
+int __ILWS_read(int sock,void *buf,size_t s) {
+       return recv(sock,buf,s,0); 
+}
+


Property changes on: GNUnet/libwebserver/src/socket.c
___________________________________________________________________
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/src/socket.h
===================================================================
--- GNUnet/libwebserver/src/socket.h    2006-08-18 20:37:47 UTC (rev 3245)
+++ GNUnet/libwebserver/src/socket.h    2006-08-18 21:41:52 UTC (rev 3246)
@@ -0,0 +1,51 @@
+/* Copyrights 2002 Luis Figueiredo (address@hidden) All rights reserved. 
+ *
+ * See the LICENSE file
+ *
+ * The origin of this software must not be misrepresented, either by
+ * explicit claim or by omission.  Since few users ever read sources,
+ * credits must appear in the documentation.
+ *
+ * date: Sat Mar 30 14:44:42 GMT 2002
+ *
+ *
+ * --
+ *
+ */
+
+#ifndef _SOCKET_H_
+#define _SOCKET_H_
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif         
+
+#include <stdio.h>
+#include <stdarg.h>
+
+#ifdef WIN32
+#include <winsock2.h>
+#include <io.h>
+#else
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <unistd.h>
+#include <sys/time.h> // struct tv
+#include <sys/types.h>  // freebsd need it i gues that is no problem if other 
system includes it
+#endif
+
+
+
+
+
+#include "debug.h"
+
+extern int errno;
+
+int __ILWS_newdata(int);
+int __ILWS_listensocket(short, int);
+int __ILWS_read(int,void *,size_t);
+
+#endif
+


Property changes on: GNUnet/libwebserver/src/socket.h
___________________________________________________________________
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/src/utils.c
===================================================================
--- GNUnet/libwebserver/src/utils.c     2006-08-18 20:37:47 UTC (rev 3245)
+++ GNUnet/libwebserver/src/utils.c     2006-08-18 21:41:52 UTC (rev 3246)
@@ -0,0 +1,155 @@
+/* Copyrights 2002 Luis Figueiredo (address@hidden) All rights reserved. 
+ *
+ * See the LICENSE file
+ *
+ * The origin of this software must not be misrepresented, either by
+ * explicit claim or by omission.  Since few users ever read sources,
+ * credits must appear in the documentation.
+ *
+ * date: 19:49,07-49-2002
+ *
+ * -- description: utilitys
+ *
+ */
+
+#include "utils.h"
+
+/*********************************************************************************************************/
+/* 
+ * search a string in a string ignoring case
+ */
+char *__ILWS_stristr(char *str, const char *nedle) {
+       char *tmp1=str;
+       int ret=1;
+       int snedle=strlen(nedle),sstr=strlen(str);
+       if(strlen(str)<strlen(nedle))return NULL;
+       while((ret=strncasecmp(tmp1,nedle,snedle) && (unsigned 
int)(tmp1+snedle)<=(unsigned int) (str+sstr))) {
+               tmp1++;
+       };
+       if(strncasecmp(tmp1,nedle,snedle))
+               return NULL;
+       return tmp1;
+};
+
+/*********************************************************************************************************/
+/* 
+ * gives a new temporary path(file) name that doesn't exists
+ */
+char *_tmpnameprefix="";
+
+char *__ILWS_tmpfname() {
+       char *ret=NULL;
+       char *tmpdir=NULL;
+       char nam[TMPNAMESIZE+1];
+       int i;
+       struct stat foostat;
+       if(tmpdir==NULL) {
+               tmpdir=getenv("TEMP");
+       };
+       if(tmpdir==NULL) {
+               tmpdir=getenv("TMP");
+       };
+       if(tmpdir==NULL) {
+               tmpdir=getenv("TMPDIR");
+       };
+       if(tmpdir==NULL) {
+               tmpdir=P_tmpdir;  // defined in stdio.h
+       };
+       IFDEBUG(fprintf(stderr,"utils.c: Allocating temporary file name: "));
+       
if(!(ret=__ILWS_malloc(strlen(tmpdir)+strlen(_tmpnameprefix)+TMPNAMESIZE+2))) {
+               LWSERR(LE_MEMORY);
+               return NULL;
+       };
+       srand(time(NULL)); // seed
+       do {
+               for(i=0;i<TMPNAMESIZE;i++) {
+                       
+                       nam[i]=(rand()%2)?(rand()%26)+'A':(rand()%26)+'a';
+               }
+               nam[i]=0;
+               
snprintf(ret,strlen(tmpdir)+strlen(_tmpnameprefix)+TMPNAMESIZE+2,"%s/%s%s",tmpdir,_tmpnameprefix,nam);
 // include '0'
+               IFDEBUG(fprintf(stderr,"Temporary filename is: %s, 
stat:%d\n",ret,stat(ret,&foostat)));
+       }while((stat(ret,&foostat)!=-1) && (lstat(ret,&foostat)!=-1)); // 
redundancy if win32 // <- race condition?
+       return ret;
+};
+
+
+
+/*********************************************************************************************************/
+/*
+ * an date function
+ */
+#define DATE_MAX 100
+char __ILWS_datem[DATE_MAX];
+
+char *__ILWS_date(time_t t,const char *format) {
+       struct tm *tm;
+       tm=localtime(&t);
+       strftime(__ILWS_datem,DATE_MAX,format,tm);
+       return __ILWS_datem;
+}                    
+
+/*********************************************************************************************************/
+/* 
+ * wasn't me, base64decode
+ */
+static const unsigned char __ILWS_chtb[256] = {
+    64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
+    64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
+    64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 62, 64, 64, 64, 63,
+    52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 64, 64, 64, 64, 64, 64,
+    64,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14,
+    15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 64, 64, 64, 64, 64,
+    64, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
+    41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 64, 64, 64, 64, 64,
+    64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
+    64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
+    64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
+    64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
+    64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
+    64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
+    64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
+    64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64};          
+
+
+int __ILWS_base64decode(char *bufplain, const char *bufcoded){
+    int nb;
+    const unsigned char *in;
+    unsigned char *out;
+    int nprbytes;
+ 
+    in = (const unsigned char *) bufcoded;
+    while (__ILWS_chtb[*(in++)] <= 63);
+    nprbytes = (in - (const unsigned char *) bufcoded) - 1;
+    nb = ((nprbytes + 3) / 4) * 3;
+ 
+    out = (unsigned char *) bufplain;
+    in = (const unsigned char *) bufcoded;
+ 
+    while (nprbytes > 4) {
+        *(out++) =
+            (unsigned char) (__ILWS_chtb[*in] << 2 | __ILWS_chtb[in[1]] >> 4);
+        *(out++) =
+            (unsigned char) (__ILWS_chtb[in[1]] << 4 | __ILWS_chtb[in[2]] >> 
2);
+        *(out++) =
+            (unsigned char) (__ILWS_chtb[in[2]] << 6 | __ILWS_chtb[in[3]]);
+        in += 4;
+        nprbytes -= 4;
+    }
+    if (nprbytes > 1) {
+        *(out++) =
+            (unsigned char) (__ILWS_chtb[*in] << 2 | __ILWS_chtb[in[1]] >> 4);
+    }
+    if (nprbytes > 2) {
+        *(out++) =
+            (unsigned char) (__ILWS_chtb[in[1]] << 4 | __ILWS_chtb[in[2]] >> 
2);
+    }
+    if (nprbytes > 3) {
+        *(out++) =
+            (unsigned char) (__ILWS_chtb[in[2]] << 6 | __ILWS_chtb[in[3]]);
+    }
+ 
+    nb -= (4 - nprbytes) & 3;
+    return nb;
+}                                        
+


Property changes on: GNUnet/libwebserver/src/utils.c
___________________________________________________________________
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/src/utils.h
===================================================================
--- GNUnet/libwebserver/src/utils.h     2006-08-18 20:37:47 UTC (rev 3245)
+++ GNUnet/libwebserver/src/utils.h     2006-08-18 21:41:52 UTC (rev 3246)
@@ -0,0 +1,59 @@
+/* Copyrights 2002 Luis Figueiredo (address@hidden) All rights reserved. 
+ *
+ * See the LICENSE file
+ *
+ * The origin of this software must not be misrepresented, either by
+ * explicit claim or by omission.  Since few users ever read sources,
+ * credits must appear in the documentation.
+ *
+ * file: utils.h
+ *
+ * description: Header
+ *
+ * date: 19:50,07-50-2002
+ */
+
+#ifndef _UTILS_H_ 
+#define _UTILS_H_
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif         
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <ctype.h>
+
+#ifdef TM_IN_SYS_TIME
+#include <sys/time.h>
+#else
+#include <time.h>
+#endif
+
+#include "debug.h"
+#include "error.h"
+#include "memory.h"
+
+#ifdef WIN32
+
+#define strncasecmp strnicmp
+#define snprintf _snprintf
+#define lstat stat
+#define vsnprintf _vsnprintf
+
+#endif
+
+
+#define TMPNAMESIZE 8
+extern char *_tmpnameprefix;
+
+
+char *__ILWS_stristr(char *, const char *);
+char *__ILWS_tmpfname();
+int __ILWS_base64decode(char *, const char *);
+char *__ILWS_date(time_t,const char *);
+
+
+#endif


Property changes on: GNUnet/libwebserver/src/utils.h
___________________________________________________________________
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/src/web_server.h
===================================================================
--- GNUnet/libwebserver/src/web_server.h        2006-08-18 20:37:47 UTC (rev 
3245)
+++ GNUnet/libwebserver/src/web_server.h        2006-08-18 21:41:52 UTC (rev 
3246)
@@ -0,0 +1,129 @@
+/* Copyrights 2002 Luis Figueiredo (address@hidden) All rights reserved. 
+ *
+ * See the LICENSE file
+ *
+ * The origin of this software must not be misrepresented, either by
+ * explicit claim or by omission.  Since few users ever read sources,
+ * credits must appear in the documentation.
+ *
+ * Fri Dec 28 12:51:11 GMT 2001
+ *      Luis Figueiredo -- I Corrected the input to handle only data when 
\n\r(twice) is arrived
+ *
+ * Mon Feb 25 06:27:58 GMT 2002
+ *      Luis Figueiredo -- Many corrections and new functions were added, 
until today
+ *
+ * Mon Mar 25 14:46:13 GMT 2002
+ *      Luis Figueiredo -- wow, one month later..., discard web_server_addstr, 
and now process the stdout to server
+ *                         using a tmpfile for streaming (not so good, but :o))
+ * Wed Mar 27 18:59:10 GMT 2002
+ *      Luis Figueiredo -- using regex instead of fnmatch(fnmatch only appears 
becouse of apache, i didn't knew it)
+ * Mon Apr  8 15:04:31 GMT 2002
+ *     Luis Figueiredo -- Oh my.. kurt cobain is dead :o), restructured the 
code, separated into various files                                              
                   
+ * Wed Apr 10 20:02:55 GMT 2002
+ *     Luis Figueiredo -- Make use of autoconf , removed open_memstream 
(doesn't work well w/ stdout structure on netbsd portability)
+ *                         linux slack 7.1 uses "extern FILE *stdout", netbsd 
uses "extern FILE __sF[]" so i cannot make use of pointers
+ * Mon Oct  7 16:56:15 GMT 2002
+ *      Luis Figueiredo -- Repaired some safe bugs, Added vars to stats 
proposes, inserted an liblogo, added debug instructions
+ *
+ *  VERSION 0.5.3
+ */
+
+#ifndef _WEB_SERVER_H_
+#define _WEB_SERVER_H_
+
+#include <stdio.h> // for struct FILE
+#include <time.h> // for time_t
+
+#ifdef __cplusplus
+extern "C"{
+#endif 
+
+extern char *_libwebserver_version;
+extern char *_tmpnameprefix;
+extern int WEBTIMEOUT;
+
+struct _MultiPart {
+       char *id;
+       char *data;
+       unsigned int size;
+       char *filename;
+       void *pad;
+};
+char *__Header(char *);
+char *__Query(char *);
+char *__Post(char *);
+struct _MultiPart __MultiPart(char *);
+char *__Cookie(char *);
+
+extern struct ClientInfo {
+       int outfd;
+       char *inetname;
+       char *request;
+       char *method;
+       char *user;
+       char *pass;
+       char *(*Header)(char *);
+       char *(*Query)(char *);
+       char *(*Post)(char *);
+       char *(*Cookie)(char *);
+       char *(*Conf)(char *,char *); // new on 0.5.0
+       struct _MultiPart (*MultiPart)(char *); 
+       void *__pad[9];
+
+} *ClientInfo;      // PROTOTYPE    
+
+struct web_server {
+       int socket;
+       unsigned int port;
+       char *logfile;
+       char *conffile;
+       time_t conffiletime; // tested only on win
+       char *mimefile;
+       char *dataconf;
+       FILE *weblog;
+       int flags;
+       struct gethandler *gethandler;
+       struct web_client *client;
+       int usessl;
+       void *pad[2];    // SSL pad
+};                                                                             
                                                
+
+#define WS_LOCAL 1         // Can be only accessed by localhost (usefull for 
local programs gui's)
+#define WS_USESSL 2     // Use ssl conections (openssl lib required) (security 
transation) (there is no sense using WS_LOCAL & WS_USESSL together)
+#define WS_USEEXTCONF 4 // Use external config file (new 0.5.0)
+#define WS_DYNVAR 8     // Use dynamic variables on output (new 0.5.1)
+#define WS_USELEN 16     //Use Content-length calculator(new 0.5.1)
+
+
+void web_server_useSSLcert(struct web_server *,const char *);  // useless if 
not using openssl
+void web_server_useMIMEfile(struct web_server *,const char *); // new on 0.5.2
+int web_server_init(struct web_server *,int,const char *,int);
+void web_server_shutdown(struct web_server *);
+char *web_server_getconf(struct web_server *,char *,char *);
+int web_server_addhandler(struct web_server *,const char *,void (*)(),int);
+int web_server_aliasdir(struct web_server *, const char *,char *,int); // new 
on 0.5.2
+int web_server_run(struct web_server *);
+
+
+int web_client_addfile(char *);
+extern unsigned char GLOBALGIFPAL[256][3];
+void web_client_gifsetpalette(const char *);
+int web_client_gifoutput(char *,int,int,int);
+
+void web_client_setcookie(char *,char *,char *,char *, char *,int); // 
improved on 0.5.1
+void web_client_deletecookie(char *);                // improved on 0.5.1
+int web_client_setvar(char *,char *); //(new (0.5.1)
+char *web_client_getvar(char *);        //(new (0.5.1)
+int web_client_delvar(char *);        //(new (0.5.1)
+
+void web_client_HTTPdirective(char *);   
+void web_client_contenttype(char *); // 0.5.2
+void web_log(const char *,...);           
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+


Property changes on: GNUnet/libwebserver/src/web_server.h
___________________________________________________________________
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/src/weblog.c
===================================================================
--- GNUnet/libwebserver/src/weblog.c    2006-08-18 20:37:47 UTC (rev 3245)
+++ GNUnet/libwebserver/src/weblog.c    2006-08-18 21:41:52 UTC (rev 3246)
@@ -0,0 +1,43 @@
+/* Copyrights 2002 Luis Figueiredo (address@hidden) All rights reserved. 
+ *
+ * See the LICENSE file
+ *
+ * The origin of this software must not be misrepresented, either by
+ * explicit claim or by omission.  Since few users ever read sources,
+ * credits must appear in the documentation.
+ *
+ * date: Sat Mar 30 14:44:42 GMT 2002
+ *
+ * -- web_log operations
+ *
+ */
+
+
+
+#include "weblog.h"
+
+FILE *_logfile=NULL;
+/*********************************************************************************************************/
+/*
+ * Open weblog file
+ */
+FILE *open_weblog(const char *logfile) {
+       FILE *ret;
+       ret=fopen(logfile,"a+");
+       _logfile=ret;
+       return ret;
+}
+
+/*********************************************************************************************************/
+/*
+ * Log to _logfile;
+ */
+void web_log(const char *fmt,...) {
+       va_list args;
+       if(_logfile) {
+               va_start(args,fmt);
+               vfprintf(_logfile,fmt,args);
+               va_end(args);
+               fflush(_logfile);
+       }
+}                 


Property changes on: GNUnet/libwebserver/src/weblog.c
___________________________________________________________________
Name: svn:eol-style
   + native

Added: GNUnet/libwebserver/src/weblog.h
===================================================================
--- GNUnet/libwebserver/src/weblog.h    2006-08-18 20:37:47 UTC (rev 3245)
+++ GNUnet/libwebserver/src/weblog.h    2006-08-18 21:41:52 UTC (rev 3246)
@@ -0,0 +1,40 @@
+/* Copyrights 2002 Luis Figueiredo (address@hidden) All rights reserved. 
+ *
+ * See the LICENSE file
+ *
+ * The origin of this software must not be misrepresented, either by
+ * explicit claim or by omission.  Since few users ever read sources,
+ * credits must appear in the documentation.
+ *
+ * date: Sat Mar 30 14:25:25 GMT 2002 
+ *
+ *  memory functions
+ */
+
+#ifndef _WEBLOG_H_
+#define _WEBLOG_H_
+
+
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+
+#ifdef WIN32
+#define snprintf _snprintf
+#endif
+
+
+
+#include "debug.h"
+
+extern FILE *_logfile;
+
+void web_log(const char *,...);           
+FILE *open_weblog(const char *);
+char *mydate();
+#endif


Property changes on: GNUnet/libwebserver/src/weblog.h
___________________________________________________________________
Name: svn:eol-style
   + native





reply via email to

[Prev in Thread] Current Thread [Next in Thread]